@kalphq/cli 0.0.2 → 0.1.0

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 (93) hide show
  1. package/dist/acorn-I3UGQPDC.js +3132 -0
  2. package/dist/acorn-I3UGQPDC.js.map +1 -0
  3. package/dist/add-UCN5EAL3.js +165 -0
  4. package/dist/add-UCN5EAL3.js.map +1 -0
  5. package/dist/angular-5QCYWYQS.js +3032 -0
  6. package/dist/angular-5QCYWYQS.js.map +1 -0
  7. package/dist/babel-VVMWCS4G.js +7298 -0
  8. package/dist/babel-VVMWCS4G.js.map +1 -0
  9. package/dist/chunk-2H7UOFLK.js +11 -0
  10. package/dist/chunk-2H7UOFLK.js.map +1 -0
  11. package/dist/chunk-6LLXGS2P.js +25 -0
  12. package/dist/chunk-6LLXGS2P.js.map +1 -0
  13. package/dist/chunk-EAMMDUE3.js +298 -0
  14. package/dist/chunk-EAMMDUE3.js.map +1 -0
  15. package/dist/chunk-MECZEYSU.js +19963 -0
  16. package/dist/chunk-MECZEYSU.js.map +1 -0
  17. package/dist/chunk-TPTPZH2W.js +40 -0
  18. package/dist/chunk-TPTPZH2W.js.map +1 -0
  19. package/dist/create-PENWHZ26.js +73 -0
  20. package/dist/create-PENWHZ26.js.map +1 -0
  21. package/dist/delete-6MKUQ3XK.js +161 -0
  22. package/dist/delete-6MKUQ3XK.js.map +1 -0
  23. package/dist/estree-3QNQSWX3.js +4614 -0
  24. package/dist/estree-3QNQSWX3.js.map +1 -0
  25. package/dist/flow-CCY52CGJ.js +27548 -0
  26. package/dist/flow-CCY52CGJ.js.map +1 -0
  27. package/dist/glimmer-WEH5BTZ2.js +2896 -0
  28. package/dist/glimmer-WEH5BTZ2.js.map +1 -0
  29. package/dist/graphql-UERTLN2S.js +1268 -0
  30. package/dist/graphql-UERTLN2S.js.map +1 -0
  31. package/dist/html-2G7A573F.js +2928 -0
  32. package/dist/html-2G7A573F.js.map +1 -0
  33. package/dist/index.js +54 -3
  34. package/dist/index.js.map +1 -1
  35. package/dist/init-WOEW2QED.js +73 -0
  36. package/dist/init-WOEW2QED.js.map +1 -0
  37. package/dist/link-YCIA4JJ3.js +37 -0
  38. package/dist/link-YCIA4JJ3.js.map +1 -0
  39. package/dist/list-BOE33VSI.js +120 -0
  40. package/dist/list-BOE33VSI.js.map +1 -0
  41. package/dist/login-22HHVS52.js +39 -0
  42. package/dist/login-22HHVS52.js.map +1 -0
  43. package/dist/logout-OJM3VAOF.js +32 -0
  44. package/dist/logout-OJM3VAOF.js.map +1 -0
  45. package/dist/markdown-XILCBMG4.js +3553 -0
  46. package/dist/markdown-XILCBMG4.js.map +1 -0
  47. package/dist/meriyah-THC5AUEQ.js +2686 -0
  48. package/dist/meriyah-THC5AUEQ.js.map +1 -0
  49. package/dist/migrate-GA7EHSDG.js +80 -0
  50. package/dist/migrate-GA7EHSDG.js.map +1 -0
  51. package/dist/postcss-WBGWHY5F.js +5082 -0
  52. package/dist/postcss-WBGWHY5F.js.map +1 -0
  53. package/dist/push-2B4NWFGC.js +81 -0
  54. package/dist/push-2B4NWFGC.js.map +1 -0
  55. package/dist/secrets-SIK6J5AF.js +46 -0
  56. package/dist/secrets-SIK6J5AF.js.map +1 -0
  57. package/dist/typescript-NS3CY6IL.js +13205 -0
  58. package/dist/typescript-NS3CY6IL.js.map +1 -0
  59. package/dist/yaml-2RE4A77K.js +4226 -0
  60. package/dist/yaml-2RE4A77K.js.map +1 -0
  61. package/package.json +9 -9
  62. package/templates/project/meta/snapshot.json +1 -0
  63. package/templates/project/package.json +3 -0
  64. package/templates/project/tsconfig.json +1 -1
  65. package/dist/build-ZMN2247N.js +0 -121
  66. package/dist/build-ZMN2247N.js.map +0 -1
  67. package/dist/chunk-BO2MEQKM.js +0 -121
  68. package/dist/chunk-BO2MEQKM.js.map +0 -1
  69. package/dist/create-ZNKKOQLH.js +0 -118
  70. package/dist/create-ZNKKOQLH.js.map +0 -1
  71. package/dist/init-7FSWWKI5.js +0 -66
  72. package/dist/init-7FSWWKI5.js.map +0 -1
  73. package/templates/agents/b2b-sales/index.ts +0 -28
  74. package/templates/agents/b2b-sales/signals/.gitkeep +0 -0
  75. package/templates/agents/b2b-sales/steps/score-lead.ts +0 -24
  76. package/templates/agents/b2b-sales/tools/enrich-company.ts +0 -17
  77. package/templates/agents/b2b-sales/webhooks/.gitkeep +0 -0
  78. package/templates/agents/customer-support/index.ts +0 -28
  79. package/templates/agents/customer-support/signals/.gitkeep +0 -0
  80. package/templates/agents/customer-support/steps/classify-ticket.ts +0 -22
  81. package/templates/agents/customer-support/tools/search-kb.ts +0 -13
  82. package/templates/agents/customer-support/webhooks/.gitkeep +0 -0
  83. package/templates/agents/financial-agent/index.ts +0 -28
  84. package/templates/agents/financial-agent/signals/.gitkeep +0 -0
  85. package/templates/agents/financial-agent/steps/analyze-signal.ts +0 -26
  86. package/templates/agents/financial-agent/tools/fetch-market-data.ts +0 -13
  87. package/templates/agents/financial-agent/webhooks/.gitkeep +0 -0
  88. package/templates/agents/minimal/index.ts +0 -16
  89. package/templates/agents/minimal/signals/.gitkeep +0 -0
  90. package/templates/agents/minimal/steps/example-step.ts +0 -13
  91. package/templates/agents/minimal/tools/example-tool.ts +0 -13
  92. package/templates/agents/minimal/webhooks/.gitkeep +0 -0
  93. package/templates/project/meta/deployed.json +0 -1
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ getAuthToken
4
+ } from "./chunk-6LLXGS2P.js";
5
+ import "./chunk-2H7UOFLK.js";
6
+
7
+ // src/commands/secrets/add.ts
8
+ import { defineCommand } from "citty";
9
+ import * as p from "@clack/prompts";
10
+ import pc from "picocolors";
11
+ import { readFile, writeFile } from "fs/promises";
12
+ import { join } from "path";
13
+ var LOGO = "\u{1F98B}";
14
+ async function addSecretToCloud(key, value) {
15
+ console.log(pc.dim(`[Simulated] Adding secret ${key} to Kalp Cloud...`));
16
+ }
17
+ async function addSecretToLocalConfig(cwd, key) {
18
+ const configPath = join(cwd, "kalp.config.ts");
19
+ let content;
20
+ try {
21
+ content = await readFile(configPath, "utf-8");
22
+ } catch {
23
+ throw new Error("kalp.config.ts not found. Run `kalp init` first.");
24
+ }
25
+ const regex = new RegExp(`["']${key}["']`);
26
+ if (regex.test(content)) {
27
+ throw new Error(`Secret ${key} already exists in kalp.config.ts`);
28
+ }
29
+ const match = content.match(/secrets:\s*\[([^\]]*)\]/);
30
+ if (!match) {
31
+ throw new Error("Could not find secrets array in kalp.config.ts");
32
+ }
33
+ const currentArray = match[1]?.trim() ?? "";
34
+ const newSecret = currentArray.length > 0 ? `, "${key}"` : `"${key}"`;
35
+ const newArray = `secrets: [${currentArray}${newSecret}]`;
36
+ content = content.replace(/secrets:\s*\[([^\]]*)\]/, newArray);
37
+ await writeFile(configPath, content, "utf-8");
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
+ }
73
+ var add_default = defineCommand({
74
+ meta: {
75
+ name: "add",
76
+ description: "Add a secret to Kalp Cloud and local config"
77
+ },
78
+ args: {
79
+ key: {
80
+ type: "string",
81
+ alias: "k",
82
+ description: "Secret key name (e.g., STRIPE_SECRET_KEY)"
83
+ },
84
+ value: {
85
+ type: "string",
86
+ alias: "v",
87
+ description: "Secret value"
88
+ },
89
+ help: {
90
+ type: "boolean",
91
+ alias: "h",
92
+ description: "Show help",
93
+ default: false
94
+ }
95
+ },
96
+ async run({ args }) {
97
+ const cwd = process.cwd();
98
+ if (args.help) {
99
+ p.log.info(`${pc.bold("Usage")}: kalp secrets add -k <key> -v <value>`);
100
+ p.log.info(
101
+ pc.dim("Example: kalp secrets add -k STRIPE_SECRET_KEY -v sk_test_...")
102
+ );
103
+ return;
104
+ }
105
+ p.intro(`${LOGO} ${pc.bold("kalp secrets add")}`);
106
+ const token = await getAuthToken();
107
+ if (!token) {
108
+ p.log.warn(pc.yellow("Not logged in. Run `kalp login` first."));
109
+ p.outro("Authentication required");
110
+ return;
111
+ }
112
+ let key = args.key;
113
+ let value = args.value;
114
+ if (!key) {
115
+ const input = await p.text({
116
+ message: "Secret key name",
117
+ placeholder: "STRIPE_SECRET_KEY",
118
+ validate: (v) => {
119
+ if (!v) return "Key is required";
120
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(v)) {
121
+ return "Key must be UPPER_SNAKE_CASE";
122
+ }
123
+ }
124
+ });
125
+ if (p.isCancel(input)) {
126
+ p.outro("Cancelled");
127
+ return;
128
+ }
129
+ key = input;
130
+ }
131
+ if (!value) {
132
+ const input = await p.password({
133
+ message: `Enter value for ${key}`,
134
+ mask: "*"
135
+ });
136
+ if (p.isCancel(input)) {
137
+ p.outro("Cancelled");
138
+ return;
139
+ }
140
+ value = input;
141
+ }
142
+ const s = p.spinner();
143
+ s.start(`Adding ${pc.cyan(key)}...`);
144
+ try {
145
+ await addSecretToCloud(key, value);
146
+ await addSecretToLocalConfig(cwd, key);
147
+ await addSecretToTypes(cwd, key);
148
+ s.stop(`Secret ${pc.cyan(key)} added successfully`);
149
+ p.outro("Done");
150
+ } catch (error) {
151
+ s.stop("Failed to add secret");
152
+ p.log.error(
153
+ pc.red(
154
+ `Error: ${error instanceof Error ? error.message : String(error)}`
155
+ )
156
+ );
157
+ p.outro("Failed");
158
+ process.exit(1);
159
+ }
160
+ }
161
+ });
162
+ export {
163
+ add_default as default
164
+ };
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":[]}