@kalphq/cli 0.0.0-dev-20260420023057 → 0.0.0-dev-20260420050715

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 (48) hide show
  1. package/dist/{add-5NOYFTJV.js → add-UCN5EAL3.js} +37 -5
  2. package/dist/add-UCN5EAL3.js.map +1 -0
  3. package/dist/{chunk-HD5FT7T6.js → chunk-22WOAGNG.js} +144 -64
  4. package/dist/chunk-22WOAGNG.js.map +1 -0
  5. package/dist/{chunk-CJCIZDCF.js → chunk-EAMMDUE3.js} +24 -24
  6. package/dist/chunk-EAMMDUE3.js.map +1 -0
  7. package/dist/{chunk-Q455HC3P.js → chunk-TPTPZH2W.js} +6 -10
  8. package/dist/chunk-TPTPZH2W.js.map +1 -0
  9. package/dist/{create-RSQEKCI6.js → create-T7KGVPNR.js} +4 -8
  10. package/dist/create-T7KGVPNR.js.map +1 -0
  11. package/dist/{delete-ZJB2JGAL.js → delete-6MKUQ3XK.js} +26 -1
  12. package/dist/delete-6MKUQ3XK.js.map +1 -0
  13. package/dist/index.js +9 -9
  14. package/dist/index.js.map +1 -1
  15. package/dist/{init-CUBJEWPE.js → init-VBOTPFNB.js} +3 -3
  16. package/dist/link-YCIA4JJ3.js +37 -0
  17. package/dist/link-YCIA4JJ3.js.map +1 -0
  18. package/dist/login-22HHVS52.js +39 -0
  19. package/dist/login-22HHVS52.js.map +1 -0
  20. package/dist/logout-OJM3VAOF.js +32 -0
  21. package/dist/logout-OJM3VAOF.js.map +1 -0
  22. package/dist/{build-SUIPVJO6.js → migrate-GA7EHSDG.js} +14 -14
  23. package/dist/migrate-GA7EHSDG.js.map +1 -0
  24. package/dist/{push-L3BXB6OC.js → push-2B4NWFGC.js} +10 -8
  25. package/dist/push-2B4NWFGC.js.map +1 -0
  26. package/dist/secrets-SIK6J5AF.js +46 -0
  27. package/dist/secrets-SIK6J5AF.js.map +1 -0
  28. package/package.json +2 -2
  29. package/templates/project/package.json +4 -4
  30. package/templates/project/tsconfig.json +6 -2
  31. package/dist/add-5NOYFTJV.js.map +0 -1
  32. package/dist/build-SUIPVJO6.js.map +0 -1
  33. package/dist/chunk-CJCIZDCF.js.map +0 -1
  34. package/dist/chunk-HD5FT7T6.js.map +0 -1
  35. package/dist/chunk-Q455HC3P.js.map +0 -1
  36. package/dist/create-RSQEKCI6.js.map +0 -1
  37. package/dist/delete-ZJB2JGAL.js.map +0 -1
  38. package/dist/link-YKDZ7Y6K.js +0 -23
  39. package/dist/link-YKDZ7Y6K.js.map +0 -1
  40. package/dist/login-LBEXP7ET.js +0 -27
  41. package/dist/login-LBEXP7ET.js.map +0 -1
  42. package/dist/logout-S3PV4WE7.js +0 -27
  43. package/dist/logout-S3PV4WE7.js.map +0 -1
  44. package/dist/push-L3BXB6OC.js.map +0 -1
  45. package/dist/secrets-3SKCSAGD.js +0 -33
  46. package/dist/secrets-3SKCSAGD.js.map +0 -1
  47. /package/dist/{init-CUBJEWPE.js.map → init-VBOTPFNB.js.map} +0 -0
  48. /package/templates/project/meta/{manifest-registry.json → snapshot.json} +0 -0
@@ -30,15 +30,46 @@ async function addSecretToLocalConfig(cwd, key) {
30
30
  if (!match) {
31
31
  throw new Error("Could not find secrets array in kalp.config.ts");
32
32
  }
33
- const currentArray = match[1]?.trim();
34
- if (!currentArray) {
35
- throw new Error("Secrets array is empty in kalp.config.ts");
36
- }
33
+ const currentArray = match[1]?.trim() ?? "";
37
34
  const newSecret = currentArray.length > 0 ? `, "${key}"` : `"${key}"`;
38
35
  const newArray = `secrets: [${currentArray}${newSecret}]`;
39
36
  content = content.replace(/secrets:\s*\[([^\]]*)\]/, newArray);
40
37
  await writeFile(configPath, content, "utf-8");
41
38
  }
39
+ async function addSecretToTypes(cwd, key) {
40
+ const dtsPath = join(cwd, "kalp.d.ts");
41
+ let content;
42
+ try {
43
+ content = await readFile(dtsPath, "utf-8");
44
+ } catch {
45
+ content = `import "@kalphq/sdk";
46
+
47
+ declare module "@kalphq/sdk" {
48
+ interface SecretsRegistry {
49
+ keys: [];
50
+ }
51
+ }
52
+ `;
53
+ }
54
+ if (content.includes(`"${key}"`)) {
55
+ return;
56
+ }
57
+ const match = content.match(/keys:\s*\[([^\]]*)\]/);
58
+ if (!match) {
59
+ throw new Error("Could not find keys array in kalp.d.ts");
60
+ }
61
+ const currentArray = match[1]?.trim();
62
+ if (!currentArray || currentArray.length === 0) {
63
+ content = content.replace(/keys:\s*\[\s*\]/, `keys: ["${key}"]`);
64
+ } else {
65
+ const newKey = `, "${key}"`;
66
+ content = content.replace(
67
+ /keys:\s*\[([^\]]*)\]/,
68
+ `keys: [${currentArray}${newKey}]`
69
+ );
70
+ }
71
+ await writeFile(dtsPath, content, "utf-8");
72
+ }
42
73
  var add_default = defineCommand({
43
74
  meta: {
44
75
  name: "add",
@@ -113,6 +144,7 @@ var add_default = defineCommand({
113
144
  try {
114
145
  await addSecretToCloud(key, value);
115
146
  await addSecretToLocalConfig(cwd, key);
147
+ await addSecretToTypes(cwd, key);
116
148
  s.stop(`Secret ${pc.cyan(key)} added successfully`);
117
149
  p.outro("Done");
118
150
  } catch (error) {
@@ -130,4 +162,4 @@ var add_default = defineCommand({
130
162
  export {
131
163
  add_default as default
132
164
  };
133
- //# sourceMappingURL=add-5NOYFTJV.js.map
165
+ //# sourceMappingURL=add-UCN5EAL3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/secrets/add.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAuthToken } from \"../../utils/auth.js\";\n\nconst LOGO = \"🦋\";\n\nasync function addSecretToCloud(key: string, value: string): Promise<void> {\n // TODO: Implement real API call to Kalp Cloud\n console.log(pc.dim(`[Simulated] Adding secret ${key} to Kalp Cloud...`));\n}\n\nasync function addSecretToLocalConfig(cwd: string, key: string): Promise<void> {\n const configPath = join(cwd, \"kalp.config.ts\");\n let content: string;\n\n try {\n content = await readFile(configPath, \"utf-8\");\n } catch {\n throw new Error(\"kalp.config.ts not found. Run `kalp init` first.\");\n }\n\n // Check if key already exists\n const regex = new RegExp(`[\"']${key}[\"']`);\n if (regex.test(content)) {\n throw new Error(`Secret ${key} already exists in kalp.config.ts`);\n }\n\n // Add secret to array\n const match = content.match(/secrets:\\s*\\[([^\\]]*)\\]/);\n if (!match) {\n throw new Error(\"Could not find secrets array in kalp.config.ts\");\n }\n\n const currentArray = match[1]?.trim() ?? \"\";\n\n const newSecret = currentArray.length > 0 ? `, \"${key}\"` : `\"${key}\"`;\n const newArray = `secrets: [${currentArray}${newSecret}]`;\n\n content = content.replace(/secrets:\\s*\\[([^\\]]*)\\]/, newArray);\n\n await writeFile(configPath, content, \"utf-8\");\n}\n\nasync function addSecretToTypes(cwd: string, key: string): Promise<void> {\n const dtsPath = join(cwd, \"kalp.d.ts\");\n let content: string;\n\n try {\n content = await readFile(dtsPath, \"utf-8\");\n } catch {\n // If file doesn't exist, create it\n content = `import \"@kalphq/sdk\";\n\n declare module \"@kalphq/sdk\" {\n interface SecretsRegistry {\n keys: [];\n }\n }\n `;\n }\n\n // Check if key already exists in types\n if (content.includes(`\"${key}\"`)) {\n return; // Already there, skip\n }\n\n // Add key to the keys tuple\n const match = content.match(/keys:\\s*\\[([^\\]]*)\\]/);\n if (!match) {\n throw new Error(\"Could not find keys array in kalp.d.ts\");\n }\n\n const currentArray = match[1]?.trim();\n\n if (!currentArray || currentArray.length === 0) {\n // Empty array, add first element\n content = content.replace(/keys:\\s*\\[\\s*\\]/, `keys: [\"${key}\"]`);\n } else {\n // Add to existing array\n const newKey = `, \"${key}\"`;\n content = content.replace(\n /keys:\\s*\\[([^\\]]*)\\]/,\n `keys: [${currentArray}${newKey}]`,\n );\n }\n\n await writeFile(dtsPath, content, \"utf-8\");\n}\n\nexport default defineCommand({\n meta: {\n name: \"add\",\n description: \"Add a secret to Kalp Cloud and local config\",\n },\n args: {\n key: {\n type: \"string\",\n alias: \"k\",\n description: \"Secret key name (e.g., STRIPE_SECRET_KEY)\",\n },\n value: {\n type: \"string\",\n alias: \"v\",\n description: \"Secret value\",\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp secrets add -k <key> -v <value>`);\n p.log.info(\n pc.dim(\"Example: kalp secrets add -k STRIPE_SECRET_KEY -v sk_test_...\"),\n );\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets add\")}`);\n\n const token = await getAuthToken();\n if (!token) {\n p.log.warn(pc.yellow(\"Not logged in. Run `kalp login` first.\"));\n p.outro(\"Authentication required\");\n return;\n }\n\n let key = args.key;\n let value = args.value;\n\n // Interactive prompts if not provided\n if (!key) {\n const input = await p.text({\n message: \"Secret key name\",\n placeholder: \"STRIPE_SECRET_KEY\",\n validate: (v) => {\n if (!v) return \"Key is required\";\n if (!/^[A-Z_][A-Z0-9_]*$/.test(v)) {\n return \"Key must be UPPER_SNAKE_CASE\";\n }\n },\n });\n if (p.isCancel(input)) {\n p.outro(\"Cancelled\");\n return;\n }\n key = input;\n }\n\n if (!value) {\n const input = await p.password({\n message: `Enter value for ${key}`,\n mask: \"*\",\n });\n if (p.isCancel(input)) {\n p.outro(\"Cancelled\");\n return;\n }\n value = input;\n }\n\n const s = p.spinner();\n s.start(`Adding ${pc.cyan(key)}...`);\n\n try {\n // Add to cloud (simulated)\n await addSecretToCloud(key, value);\n\n // Add to local config\n await addSecretToLocalConfig(cwd, key);\n\n // Add to types\n await addSecretToTypes(cwd, key);\n\n s.stop(`Secret ${pc.cyan(key)} added successfully`);\n p.outro(\"Done\");\n } catch (error) {\n s.stop(\"Failed to add secret\");\n p.log.error(\n pc.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n p.outro(\"Failed\");\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -4,7 +4,14 @@ import {
4
4
  } from "./chunk-2H7UOFLK.js";
5
5
 
6
6
  // src/scaffold.ts
7
- import { writeFile, readFile as readFile2, readdir, cp, mkdir } from "fs/promises";
7
+ import {
8
+ writeFile,
9
+ readFile as readFile2,
10
+ readdir,
11
+ cp,
12
+ mkdir,
13
+ access
14
+ } from "fs/promises";
8
15
  import { fileURLToPath as fileURLToPath6 } from "url";
9
16
  import { join as join4, dirname as dirname3 } from "path";
10
17
 
@@ -19709,6 +19716,28 @@ async function scaffoldProject(opts) {
19709
19716
  recursive: true,
19710
19717
  force: true
19711
19718
  });
19719
+ const gitignorePath = join4(targetDir, ".gitignore");
19720
+ try {
19721
+ await access(gitignorePath);
19722
+ } catch {
19723
+ await writeFile(
19724
+ gitignorePath,
19725
+ "node_modules/\ndist/\n.env\n*.log\n.turbo/\n.temp/\n",
19726
+ "utf-8"
19727
+ );
19728
+ }
19729
+ const tempDir = join4(targetDir, ".temp");
19730
+ await mkdir(tempDir, { recursive: true });
19731
+ const versionInfo = {
19732
+ cliVersion: "0.0.2",
19733
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
19734
+ projectName
19735
+ };
19736
+ await writeFile(
19737
+ join4(tempDir, "version.json"),
19738
+ JSON.stringify(versionInfo, null, 2),
19739
+ "utf-8"
19740
+ );
19712
19741
  const kalpConfig = `import { defineConfig } from "@kalphq/sdk";
19713
19742
 
19714
19743
  export default defineConfig({
@@ -19716,6 +19745,15 @@ export default defineConfig({
19716
19745
  });
19717
19746
  `;
19718
19747
  await writeFile(join4(targetDir, "kalp.config.ts"), kalpConfig, "utf-8");
19748
+ const kalpDts = `import "@kalphq/sdk";
19749
+
19750
+ declare module "@kalphq/sdk" {
19751
+ interface SecretsRegistry {
19752
+ keys: [];
19753
+ }
19754
+ }
19755
+ `;
19756
+ await writeFile(join4(targetDir, "kalp.d.ts"), kalpDts, "utf-8");
19719
19757
  await replacePlaceholders(targetDir, { __PROJECT_NAME__: projectName });
19720
19758
  }
19721
19759
  async function scaffoldAgent(opts) {
@@ -19726,95 +19764,137 @@ async function scaffoldAgent(opts) {
19726
19764
  await mkdir(join4(agentDir, "routes"), { recursive: true });
19727
19765
  await mkdir(join4(agentDir, "flows"), { recursive: true });
19728
19766
  const agentIndex = `import { asAgentId, defineAgent } from "@kalphq/sdk";
19729
- import { exampleStep } from "./steps/example-step.js";
19730
- import { exampleTool } from "./tools/example-tool.js";
19731
- import { exampleRoute } from "./routes/example-route.js";
19732
- import { exampleFlow } from "./flows/example-flow.js";
19767
+ import { processQuery } from "@/${agentName}/steps/process-query";
19768
+ import { formatResponse } from "@/${agentName}/steps/format-response";
19769
+ import { searchTool } from "@/${agentName}/tools/search";
19770
+ import { healthRoute } from "@/${agentName}/routes/health";
19771
+ import { chatFlow } from "@/${agentName}/flows/chat-flow";
19733
19772
 
19734
19773
  export default defineAgent({
19735
19774
  id: asAgentId("${agentName}"),
19736
19775
  name: "${agentName}",
19737
- steps: [exampleStep],
19738
- tools: [exampleTool],
19739
- routes: [exampleRoute],
19740
- flows: [exampleFlow],
19776
+ description: "A helpful AI assistant",
19777
+ steps: [processQuery, formatResponse],
19778
+ tools: [searchTool],
19779
+ routes: [healthRoute],
19780
+ flows: [chatFlow],
19741
19781
 
19742
- async onMessage(message, context) {
19743
- const stepped = await context.actions.runStep(exampleStep, {
19744
- message: message.text,
19745
- });
19746
- const tooled = await context.actions.callTool(exampleTool, {
19747
- query: message.text,
19782
+ async onMessage({ message, ctx, actions }) {
19783
+ const stream = actions.ai.stream({
19784
+ model: "openai/gpt-4o-mini",
19785
+ system: "You are a helpful assistant.",
19786
+ prompt: message.text,
19748
19787
  });
19749
- return { text: stepped.result + " | " + tooled.output };
19788
+
19789
+ return stream;
19750
19790
  },
19751
- });
19752
- `;
19753
- const stepFile = `import { createStep } from "@kalphq/sdk";
19791
+ });`;
19792
+ const stepProcessFile = `import { createStep } from "@kalphq/sdk";
19754
19793
  import { z } from "zod";
19755
19794
 
19756
- export const exampleStep = createStep({
19757
- id: "example_step",
19758
- description: "A starter step for your agent.",
19759
- input: z.object({ message: z.string() }),
19760
- output: z.object({ result: z.string() }),
19761
- async run({ message }) {
19762
- return { result: "Processed: " + message };
19795
+ export const processQuery = createStep({
19796
+ id: "process_query",
19797
+ description: "Analyze and enhance user query",
19798
+ input: z.object({ query: z.string() }),
19799
+ output: z.object({
19800
+ enhanced: z.string(),
19801
+ intent: z.string(),
19802
+ needsSearch: z.boolean(),
19803
+ }),
19804
+ async run({ query }) {
19805
+ // Simple intent detection
19806
+ const intent = query.includes("?") ? "question" : "statement";
19807
+ const needsSearch = query.toLowerCase().includes("search") || query.includes("?");
19808
+
19809
+ return {
19810
+ enhanced: query.trim(),
19811
+ intent,
19812
+ needsSearch,
19813
+ };
19763
19814
  },
19764
- });
19765
- `;
19815
+ });`;
19816
+ const stepFormatFile = `import { createStep } from "@kalphq/sdk";
19817
+ import { z } from "zod";
19818
+
19819
+ export const formatResponse = createStep({
19820
+ id: "format_response",
19821
+ description: "Format final response with metadata",
19822
+ input: z.object({
19823
+ text: z.string(),
19824
+ sources: z.array(z.string()).optional(),
19825
+ }),
19826
+ output: z.object({
19827
+ formatted: z.string(),
19828
+ meta: z.object({ timestamp: z.number(), version: z.string() }),
19829
+ }),
19830
+ async run({ text, sources }) {
19831
+ const formatted = sources?.length
19832
+ ? \`\${text}\\n\\nSources: \${sources.join(", ")}\`
19833
+ : text;
19834
+
19835
+ return {
19836
+ formatted,
19837
+ meta: {
19838
+ timestamp: Date.now(),
19839
+ version: "1.0.0",
19840
+ },
19841
+ };
19842
+ },
19843
+ });`;
19766
19844
  const toolFile = `import { createTool } from "@kalphq/sdk";
19767
19845
  import { z } from "zod";
19768
19846
 
19769
- export const exampleTool = createTool({
19770
- id: "example_tool",
19771
- description: "A starter tool for your agent.",
19772
- input: z.object({ query: z.string() }),
19773
- async execute({ query }) {
19774
- return { output: "Tool result for: " + query };
19847
+ export const searchTool = createTool({
19848
+ id: "search",
19849
+ description: "Search for relevant information",
19850
+ input: z.object({ query: z.string(), limit: z.number().default(3) }),
19851
+ async execute({ query, limit }) {
19852
+ // Simulated search - replace with real API call
19853
+ const results = [
19854
+ { title: "Result 1", snippet: \`Info about: \${query}\` },
19855
+ { title: "Result 2", snippet: "More relevant content..." },
19856
+ ].slice(0, limit);
19857
+
19858
+ return { results, total: results.length };
19775
19859
  },
19776
- });
19777
- `;
19860
+ });`;
19778
19861
  const routeFile = `import { defineRoute } from "@kalphq/sdk";
19779
19862
 
19780
- export const exampleRoute = defineRoute({
19781
- id: "example_route",
19863
+ export const healthRoute = defineRoute({
19864
+ id: "health",
19782
19865
  method: "GET",
19783
- path: "/example",
19784
- handler: async () => {
19785
- return { message: "Hello from Kalp" };
19866
+ path: "/health",
19867
+ handler: async (_req, res, { ctx }) => {
19868
+ res.json({
19869
+ status: "ok",
19870
+ agent: "${agentName}",
19871
+ timestamp: new Date().toISOString(),
19872
+ });
19786
19873
  },
19787
- });
19788
- `;
19874
+ });`;
19789
19875
  const flowFile = `import { defineFlow } from "@kalphq/sdk";
19876
+ import { processQuery } from "@/${agentName}/steps/process-query";
19877
+ import { formatResponse } from "@/${agentName}/steps/format-response";
19790
19878
 
19791
- export const exampleFlow = defineFlow({
19792
- id: "example_flow",
19793
- description: "A starter flow for your agent.",
19794
- steps: [],
19795
- });
19796
- `;
19879
+ export const chatFlow = defineFlow({
19880
+ id: "chat_flow",
19881
+ description: "Process user message through query analysis and formatting",
19882
+ steps: [processQuery, formatResponse],
19883
+ });`;
19797
19884
  await writeFile(join4(agentDir, "index.ts"), agentIndex, "utf-8");
19798
19885
  await writeFile(
19799
- join4(agentDir, "steps", "example-step.ts"),
19800
- stepFile,
19801
- "utf-8"
19802
- );
19803
- await writeFile(
19804
- join4(agentDir, "tools", "example-tool.ts"),
19805
- toolFile,
19806
- "utf-8"
19807
- );
19808
- await writeFile(
19809
- join4(agentDir, "routes", "example-route.ts"),
19810
- routeFile,
19886
+ join4(agentDir, "steps", "process-query.ts"),
19887
+ stepProcessFile,
19811
19888
  "utf-8"
19812
19889
  );
19813
19890
  await writeFile(
19814
- join4(agentDir, "flows", "example-flow.ts"),
19815
- flowFile,
19891
+ join4(agentDir, "steps", "format-response.ts"),
19892
+ stepFormatFile,
19816
19893
  "utf-8"
19817
19894
  );
19895
+ await writeFile(join4(agentDir, "tools", "search.ts"), toolFile, "utf-8");
19896
+ await writeFile(join4(agentDir, "routes", "health.ts"), routeFile, "utf-8");
19897
+ await writeFile(join4(agentDir, "flows", "chat-flow.ts"), flowFile, "utf-8");
19818
19898
  }
19819
19899
 
19820
19900
  // src/utils/ui.ts
@@ -19873,4 +19953,4 @@ export {
19873
19953
  promptProjectName,
19874
19954
  promptAgentDetails
19875
19955
  };
19876
- //# sourceMappingURL=chunk-HD5FT7T6.js.map
19956
+ //# sourceMappingURL=chunk-22WOAGNG.js.map