@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,40 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/utils/fs.ts
4
+ import { access, mkdir } from "fs/promises";
5
+ import { join } from "path";
6
+ import { exec } from "child_process";
7
+ import { promisify } from "util";
8
+ var execAsync = promisify(exec);
9
+ async function isProjectInitialized(cwd) {
10
+ try {
11
+ await access(join(cwd, "kalp.config.ts"));
12
+ return true;
13
+ } catch {
14
+ return false;
15
+ }
16
+ }
17
+ async function ensureConfig(cwd) {
18
+ const initialized = await isProjectInitialized(cwd);
19
+ if (!initialized) {
20
+ throw new Error("kalp.config.ts not found");
21
+ }
22
+ }
23
+ async function ensureDirectory(path) {
24
+ await mkdir(path, { recursive: true });
25
+ }
26
+ async function installDeps(cwd) {
27
+ try {
28
+ await execAsync("npx --no-install nci", { cwd });
29
+ } catch {
30
+ await execAsync("npm install", { cwd });
31
+ }
32
+ }
33
+
34
+ export {
35
+ isProjectInitialized,
36
+ ensureConfig,
37
+ ensureDirectory,
38
+ installDeps
39
+ };
40
+ //# sourceMappingURL=chunk-TPTPZH2W.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 { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\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 await execAsync(\"npx --no-install nci\", { cwd });\n } catch {\n await execAsync(\"npm install\", { cwd });\n }\n}\n"],"mappings":";;;AAAA,SAAS,QAAQ,aAAa;AAC9B,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAE1B,IAAM,YAAY,UAAU,IAAI;AAEhC,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,UAAM,UAAU,wBAAwB,EAAE,IAAI,CAAC;AAAA,EACjD,QAAQ;AACN,UAAM,UAAU,eAAe,EAAE,IAAI,CAAC;AAAA,EACxC;AACF;","names":[]}
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ promptAgentDetails,
4
+ promptProjectName,
5
+ scaffoldAgent,
6
+ scaffoldProject
7
+ } from "./chunk-MECZEYSU.js";
8
+ import {
9
+ installDeps,
10
+ isProjectInitialized
11
+ } from "./chunk-TPTPZH2W.js";
12
+ import "./chunk-2H7UOFLK.js";
13
+
14
+ // src/commands/create.ts
15
+ import { defineCommand } from "citty";
16
+ import * as p from "@clack/prompts";
17
+ import pc from "picocolors";
18
+ var LOGO = "\u{1F98B}";
19
+ var create_default = defineCommand({
20
+ meta: { name: "create", description: "Add a new agent to the project" },
21
+ async run() {
22
+ const cwd = process.cwd();
23
+ p.intro(`${LOGO} ${pc.bold("kalp create")}`);
24
+ const needsInit = !await isProjectInitialized(cwd);
25
+ let projectName;
26
+ if (needsInit) {
27
+ p.log.warn(
28
+ `No ${pc.cyan("kalp.config.ts")} found \u2014 initializing project first.`
29
+ );
30
+ projectName = await promptProjectName({
31
+ message: "Project name?",
32
+ placeholder: "my-project"
33
+ });
34
+ }
35
+ const agentAnswers = await promptAgentDetails();
36
+ const s = p.spinner();
37
+ if (needsInit && projectName) {
38
+ s.start("Creating project structure");
39
+ await scaffoldProject({ projectName, targetDir: cwd });
40
+ s.stop("Project structure created");
41
+ s.start("Installing Dependencies");
42
+ try {
43
+ await installDeps(cwd);
44
+ s.stop("Dependencies installed");
45
+ } catch {
46
+ s.stop(pc.yellow("Install failed \u2014 run npm install manually."));
47
+ }
48
+ }
49
+ s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);
50
+ await scaffoldAgent({
51
+ agentName: agentAnswers.name,
52
+ cwd
53
+ });
54
+ s.stop("Agent created");
55
+ p.note(
56
+ [
57
+ `${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/index.ts`)}`,
58
+ `${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/steps/`)}`,
59
+ `${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/tools/`)}`,
60
+ `${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/routes/`)}`,
61
+ `${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/flows/`)}`
62
+ ].join("\n"),
63
+ "Created"
64
+ );
65
+ p.outro(
66
+ `${LOGO} ${pc.green(`Agent ${pc.bold(agentAnswers.name)} is ready.`)}`
67
+ );
68
+ }
69
+ });
70
+ export {
71
+ create_default as default
72
+ };
73
+ //# sourceMappingURL=create-PENWHZ26.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(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 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 `${pc.dim(\"•\")} ${pc.cyan(`agents/${agentAnswers.name}/routes/`)}`,\n `${pc.dim(\"•\")} ${pc.cyan(`agents/${agentAnswers.name}/flows/`)}`,\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,iDAA4C,CAAC;AAAA,MAChE;AAAA,IACF;AAGA,MAAE,MAAM,qBAAqB,GAAG,KAAK,aAAa,IAAI,CAAC,EAAE;AACzD,UAAM,cAAc;AAAA,MAClB,WAAW,aAAa;AAAA,MACxB;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,QAC/D,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,UAAU,aAAa,IAAI,UAAU,CAAC;AAAA,QAChE,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":[]}
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ getAuthToken
4
+ } from "./chunk-6LLXGS2P.js";
5
+ import "./chunk-2H7UOFLK.js";
6
+
7
+ // src/commands/secrets/delete.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 fetchSecretsFromCloud() {
15
+ return [{ key: "STRIPE_SECRET_KEY" }, { key: "OPENAI_API_KEY" }];
16
+ }
17
+ async function deleteSecretFromCloud(key) {
18
+ console.log(pc.dim(`[Simulated] Deleting secret ${key} from Kalp Cloud...`));
19
+ }
20
+ async function removeSecretFromLocalConfig(cwd, key) {
21
+ const configPath = join(cwd, "kalp.config.ts");
22
+ let content;
23
+ try {
24
+ content = await readFile(configPath, "utf-8");
25
+ } catch {
26
+ throw new Error("kalp.config.ts not found. Run `kalp init` first.");
27
+ }
28
+ const regex = new RegExp(`["']${key}["']`);
29
+ if (!regex.test(content)) {
30
+ throw new Error(`Secret ${key} not found in local config`);
31
+ }
32
+ const match = content.match(/secrets:\s*\[([^\]]*)\]/);
33
+ if (!match) {
34
+ throw new Error("Could not find secrets array in kalp.config.ts");
35
+ }
36
+ const currentArray = match[1];
37
+ if (!currentArray) {
38
+ throw new Error("Secrets array is empty in kalp.config.ts");
39
+ }
40
+ let newArray = currentArray.replace(new RegExp(`["']${key}["']\\s*,?\\s*`), "").trim();
41
+ newArray = newArray.replace(/,\s*$/, "");
42
+ content = content.replace(
43
+ /secrets:\s*\[([^\]]*)\]/,
44
+ `secrets: [${newArray}]`
45
+ );
46
+ await writeFile(configPath, content, "utf-8");
47
+ }
48
+ async function removeSecretFromTypes(cwd, key) {
49
+ const dtsPath = join(cwd, "kalp.d.ts");
50
+ let content;
51
+ try {
52
+ content = await readFile(dtsPath, "utf-8");
53
+ } catch {
54
+ return;
55
+ }
56
+ if (!content.includes(`"${key}"`)) {
57
+ return;
58
+ }
59
+ const match = content.match(/keys:\s*\[([^\]]*)\]/);
60
+ if (!match) {
61
+ return;
62
+ }
63
+ const currentArray = match[1];
64
+ if (!currentArray) {
65
+ return;
66
+ }
67
+ let newArray = currentArray.replace(new RegExp(`["']${key}["']\\s*,?\\s*`), "").trim();
68
+ newArray = newArray.replace(/,\s*$/, "");
69
+ content = content.replace(/keys:\s*\[([^\]]*)\]/, `keys: [${newArray}]`);
70
+ await writeFile(dtsPath, content, "utf-8");
71
+ }
72
+ var delete_default = defineCommand({
73
+ meta: {
74
+ name: "delete",
75
+ description: "Delete a secret from Kalp Cloud and local config"
76
+ },
77
+ args: {
78
+ key: {
79
+ type: "string",
80
+ alias: "k",
81
+ description: "Secret key name to delete"
82
+ },
83
+ help: {
84
+ type: "boolean",
85
+ alias: "h",
86
+ description: "Show help",
87
+ default: false
88
+ },
89
+ yes: {
90
+ type: "boolean",
91
+ alias: "y",
92
+ description: "Skip confirmation",
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 delete -k <key>`);
100
+ p.log.info(pc.dim("Example: kalp secrets delete -k STRIPE_SECRET_KEY"));
101
+ return;
102
+ }
103
+ p.intro(`${LOGO} ${pc.bold("kalp secrets delete")}`);
104
+ const token = await getAuthToken();
105
+ if (!token) {
106
+ p.log.warn(pc.yellow("Not logged in. Run `kalp login` first."));
107
+ p.outro("Authentication required");
108
+ return;
109
+ }
110
+ let key = args.key;
111
+ if (!key) {
112
+ const secrets = await fetchSecretsFromCloud();
113
+ if (secrets.length === 0) {
114
+ p.log.info(pc.dim("No secrets found in Kalp Cloud."));
115
+ p.outro("Nothing to delete");
116
+ return;
117
+ }
118
+ const selected = await p.select({
119
+ message: "Select a secret to delete",
120
+ options: secrets.map((s2) => ({ value: s2.key, label: s2.key }))
121
+ });
122
+ if (p.isCancel(selected)) {
123
+ p.outro("Cancelled");
124
+ return;
125
+ }
126
+ key = selected;
127
+ }
128
+ if (!args.yes) {
129
+ const confirm2 = await p.confirm({
130
+ message: `Are you sure you want to delete ${pc.cyan(key)}? This action cannot be undone.`,
131
+ initialValue: false
132
+ });
133
+ if (p.isCancel(confirm2) || !confirm2) {
134
+ p.outro("Cancelled");
135
+ return;
136
+ }
137
+ }
138
+ const s = p.spinner();
139
+ s.start(`Deleting ${pc.cyan(key)}...`);
140
+ try {
141
+ await deleteSecretFromCloud(key);
142
+ await removeSecretFromLocalConfig(cwd, key);
143
+ await removeSecretFromTypes(cwd, key);
144
+ s.stop(`Secret ${pc.cyan(key)} deleted successfully`);
145
+ p.outro("Done");
146
+ } catch (error) {
147
+ s.stop("Failed to delete secret");
148
+ p.log.error(
149
+ pc.red(
150
+ `Error: ${error instanceof Error ? error.message : String(error)}`
151
+ )
152
+ );
153
+ p.outro("Failed");
154
+ process.exit(1);
155
+ }
156
+ }
157
+ });
158
+ export {
159
+ delete_default as default
160
+ };
161
+ //# sourceMappingURL=delete-6MKUQ3XK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/secrets/delete.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\ninterface CloudSecret {\n key: string;\n}\n\nasync function fetchSecretsFromCloud(): Promise<CloudSecret[]> {\n // TODO: Implement real API call to Kalp Cloud\n return [{ key: \"STRIPE_SECRET_KEY\" }, { key: \"OPENAI_API_KEY\" }];\n}\n\nasync function deleteSecretFromCloud(key: string): Promise<void> {\n // TODO: Implement real API call to Kalp Cloud\n console.log(pc.dim(`[Simulated] Deleting secret ${key} from Kalp Cloud...`));\n}\n\nasync function removeSecretFromLocalConfig(\n cwd: string,\n key: string,\n): 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 exists\n const regex = new RegExp(`[\"']${key}[\"']`);\n if (!regex.test(content)) {\n // Key not in local config, that's ok\n throw new Error(`Secret ${key} not found in local config`);\n }\n\n // Remove secret from array\n const match = content.match(/secrets:\\s*\\[([^\\]]*)\\]/);\n\n if (!match) {\n throw new Error(\"Could not find secrets array in kalp.config.ts\");\n }\n\n const currentArray = match[1];\n if (!currentArray) {\n throw new Error(\"Secrets array is empty in kalp.config.ts\");\n }\n\n // Remove the key and clean up commas\n let newArray = currentArray\n .replace(new RegExp(`[\"']${key}[\"']\\\\s*,?\\\\s*`), \"\")\n .trim();\n // Remove trailing comma if any\n newArray = newArray.replace(/,\\s*$/, \"\");\n\n content = content.replace(\n /secrets:\\s*\\[([^\\]]*)\\]/,\n `secrets: [${newArray}]`,\n );\n\n await writeFile(configPath, content, \"utf-8\");\n}\n\nasync function removeSecretFromTypes(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 // File doesn't exist, nothing to do\n return;\n }\n\n // Check if key exists\n if (!content.includes(`\"${key}\"`)) {\n return; // Not there, skip\n }\n\n // Remove key from the keys tuple\n const match = content.match(/keys:\\s*\\[([^\\]]*)\\]/);\n if (!match) {\n return; // No keys array found\n }\n\n const currentArray = match[1];\n if (!currentArray) {\n return;\n }\n\n // Remove the key and clean up commas\n let newArray = currentArray\n .replace(new RegExp(`[\"']${key}[\"']\\\\s*,?\\\\s*`), \"\")\n .trim();\n // Remove trailing comma if any\n newArray = newArray.replace(/,\\s*$/, \"\");\n\n content = content.replace(/keys:\\s*\\[([^\\]]*)\\]/, `keys: [${newArray}]`);\n\n await writeFile(dtsPath, content, \"utf-8\");\n}\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a secret from Kalp Cloud and local config\",\n },\n args: {\n key: {\n type: \"string\",\n alias: \"k\",\n description: \"Secret key name to delete\",\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation\",\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 delete -k <key>`);\n p.log.info(pc.dim(\"Example: kalp secrets delete -k STRIPE_SECRET_KEY\"));\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets delete\")}`);\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\n // Interactive selection if not provided\n if (!key) {\n const secrets = await fetchSecretsFromCloud();\n if (secrets.length === 0) {\n p.log.info(pc.dim(\"No secrets found in Kalp Cloud.\"));\n p.outro(\"Nothing to delete\");\n return;\n }\n\n const selected = await p.select({\n message: \"Select a secret to delete\",\n options: secrets.map((s) => ({ value: s.key, label: s.key })),\n });\n\n if (p.isCancel(selected)) {\n p.outro(\"Cancelled\");\n return;\n }\n\n key = selected as string;\n }\n\n // Confirmation unless --yes flag\n if (!args.yes) {\n const confirm = await p.confirm({\n message: `Are you sure you want to delete ${pc.cyan(key)}? This action cannot be undone.`,\n initialValue: false,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.outro(\"Cancelled\");\n return;\n }\n }\n\n const s = p.spinner();\n s.start(`Deleting ${pc.cyan(key)}...`);\n\n try {\n // Delete from cloud (simulated)\n await deleteSecretFromCloud(key);\n\n // Remove from local config\n await removeSecretFromLocalConfig(cwd, key);\n\n // Remove from types\n await removeSecretFromTypes(cwd, key);\n\n s.stop(`Secret ${pc.cyan(key)} deleted successfully`);\n p.outro(\"Done\");\n } catch (error) {\n s.stop(\"Failed to delete 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":["s","confirm"]}