@kalphq/cli 0.0.0-dev-20260509010940 → 0.0.0-dev-20260510030416

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 (40) hide show
  1. package/dist/{add-KRHLYYTO.js → add-XTXSSGC5.js} +3 -2
  2. package/dist/{add-KRHLYYTO.js.map → add-XTXSSGC5.js.map} +1 -1
  3. package/dist/chunk-5RODADXW.js +65 -0
  4. package/dist/chunk-5RODADXW.js.map +1 -0
  5. package/dist/chunk-E7V5UMX7.js +28 -0
  6. package/dist/chunk-E7V5UMX7.js.map +1 -0
  7. package/dist/chunk-FO24J6XL.js +23 -0
  8. package/dist/chunk-FO24J6XL.js.map +1 -0
  9. package/dist/chunk-NJ3OTDOX.js +93 -0
  10. package/dist/chunk-NJ3OTDOX.js.map +1 -0
  11. package/dist/{delete-47ZP6XRB.js → delete-N4OSUK3X.js} +3 -2
  12. package/dist/{delete-47ZP6XRB.js.map → delete-N4OSUK3X.js.map} +1 -1
  13. package/dist/deploy-HRUJDN2F.js +63 -0
  14. package/dist/deploy-HRUJDN2F.js.map +1 -0
  15. package/dist/dev-ZKXOQ2GQ.js +71 -0
  16. package/dist/dev-ZKXOQ2GQ.js.map +1 -0
  17. package/dist/index.js +12 -9
  18. package/dist/index.js.map +1 -1
  19. package/dist/{list-3ZQIFUOT.js → list-VMJPWHIH.js} +3 -2
  20. package/dist/{list-3ZQIFUOT.js.map → list-VMJPWHIH.js.map} +1 -1
  21. package/dist/login-M5Y57ZZU.js +73 -0
  22. package/dist/login-M5Y57ZZU.js.map +1 -0
  23. package/dist/{logout-V67DZZXO.js → logout-U5V5K775.js} +5 -4
  24. package/dist/logout-U5V5K775.js.map +1 -0
  25. package/dist/push-P2NWWXGL.js +287 -0
  26. package/dist/push-P2NWWXGL.js.map +1 -0
  27. package/dist/{secrets-KFMVBKJQ.js → secrets-P7ADVLOS.js} +5 -5
  28. package/dist/{sync-YFM5P3IS.js → sync-OTO44GQS.js} +3 -2
  29. package/dist/{sync-YFM5P3IS.js.map → sync-OTO44GQS.js.map} +1 -1
  30. package/package.json +5 -4
  31. package/dist/chunk-6LLXGS2P.js +0 -25
  32. package/dist/chunk-6LLXGS2P.js.map +0 -1
  33. package/dist/login-JYPWGL6P.js +0 -38
  34. package/dist/login-JYPWGL6P.js.map +0 -1
  35. package/dist/logout-V67DZZXO.js.map +0 -1
  36. package/dist/push-UZADV7TZ.js +0 -255
  37. package/dist/push-UZADV7TZ.js.map +0 -1
  38. package/dist/studio-7LGUD42G.js +0 -92
  39. package/dist/studio-7LGUD42G.js.map +0 -1
  40. /package/dist/{secrets-KFMVBKJQ.js.map → secrets-P7ADVLOS.js.map} +0 -0
@@ -4,7 +4,8 @@ import {
4
4
  } from "./chunk-MMS3GWBG.js";
5
5
  import {
6
6
  getAuthToken
7
- } from "./chunk-6LLXGS2P.js";
7
+ } from "./chunk-5RODADXW.js";
8
+ import "./chunk-FO24J6XL.js";
8
9
 
9
10
  // src/commands/secrets/add.ts
10
11
  import { defineCommand } from "citty";
@@ -135,4 +136,4 @@ var add_default = defineCommand({
135
136
  export {
136
137
  add_default as default
137
138
  };
138
- //# sourceMappingURL=add-KRHLYYTO.js.map
139
+ //# sourceMappingURL=add-XTXSSGC5.js.map
@@ -1 +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 { generateTypes } from \"@/utils/codegen\";\nimport { getAuthToken } from \"@/utils/auth\";\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(\n \"kalp.config.ts not found. Run `npx create-kalp@latest` first.\",\n );\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 regenerateTypes(cwd: string): Promise<void> {\n // Regenerate .kalp/types.d.ts based on kalp.config.ts\n await generateTypes(cwd);\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 // Regenerate types from config\n await regenerateTypes(cwd);\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":[]}
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 { generateTypes } from \"@/utils/codegen\";\nimport { getAuthToken } from \"@/utils/auth\";\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(\n \"kalp.config.ts not found. Run `npx create-kalp@latest` first.\",\n );\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 regenerateTypes(cwd: string): Promise<void> {\n // Regenerate .kalp/types.d.ts based on kalp.config.ts\n await generateTypes(cwd);\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 // Regenerate types from config\n await regenerateTypes(cwd);\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":[]}
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureGlobalConfigDir
4
+ } from "./chunk-FO24J6XL.js";
5
+
6
+ // src/utils/auth.ts
7
+ import { readFile, writeFile } from "fs/promises";
8
+ import { join } from "path";
9
+ import { execa } from "execa";
10
+ var AUTH_FILE = async () => join(await ensureGlobalConfigDir(), "auth.json");
11
+ async function getCloudflareIdentity() {
12
+ try {
13
+ const run = async (args) => execa("npx", args, {
14
+ env: { FORCE_COLOR: "0", CLOUDFLARE_OUTPUT_FORMAT: "json" }
15
+ });
16
+ const firstAttempt = await run([
17
+ "wrangler",
18
+ "whoami",
19
+ "--output-format",
20
+ "json"
21
+ ]).catch(() => null);
22
+ if (firstAttempt) {
23
+ return JSON.parse(firstAttempt.stdout);
24
+ }
25
+ const fallback = await run(["wrangler", "whoami", "--json"]);
26
+ return JSON.parse(fallback.stdout);
27
+ } catch {
28
+ return null;
29
+ }
30
+ }
31
+ async function saveAuthConfig(config) {
32
+ const authPath = await AUTH_FILE();
33
+ await writeFile(authPath, JSON.stringify(config, null, 2), "utf-8");
34
+ }
35
+ async function getAuthConfig() {
36
+ try {
37
+ const authPath = await AUTH_FILE();
38
+ const content = await readFile(authPath, "utf-8");
39
+ return JSON.parse(content);
40
+ } catch {
41
+ return null;
42
+ }
43
+ }
44
+ async function requireAuth() {
45
+ const auth = await getAuthConfig();
46
+ if (!auth || new Date(auth.expiresAt).getTime() <= Date.now()) {
47
+ throw new Error("Not authenticated. Run `kalp login` first.");
48
+ }
49
+ return auth;
50
+ }
51
+ async function getAuthToken() {
52
+ const auth = await getAuthConfig();
53
+ if (!auth || new Date(auth.expiresAt).getTime() <= Date.now()) {
54
+ return null;
55
+ }
56
+ return `${auth.provider}:${auth.accountId}`;
57
+ }
58
+
59
+ export {
60
+ getCloudflareIdentity,
61
+ saveAuthConfig,
62
+ requireAuth,
63
+ getAuthToken
64
+ };
65
+ //# sourceMappingURL=chunk-5RODADXW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/auth.ts"],"sourcesContent":["import { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { execa } from \"execa\";\nimport { ensureGlobalConfigDir } from \"@/utils/config\";\n\nconst AUTH_FILE = async () => join(await ensureGlobalConfigDir(), \"auth.json\");\n\nexport interface AuthConfig {\n provider: \"cloudflare\";\n accountId: string;\n email: string;\n expiresAt: string;\n}\n\ninterface CloudflareIdentity {\n loggedIn?: boolean;\n email?: string;\n accounts?: Array<{ id?: string; account_tag?: string; name?: string }>;\n}\n\nexport async function getCloudflareIdentity(): Promise<CloudflareIdentity | null> {\n try {\n const run = async (args: string[]) =>\n execa(\"npx\", args, {\n env: { FORCE_COLOR: \"0\", CLOUDFLARE_OUTPUT_FORMAT: \"json\" },\n });\n\n const firstAttempt = await run([\n \"wrangler\",\n \"whoami\",\n \"--output-format\",\n \"json\",\n ]).catch(() => null);\n\n if (firstAttempt) {\n return JSON.parse(firstAttempt.stdout) as CloudflareIdentity;\n }\n\n const fallback = await run([\"wrangler\", \"whoami\", \"--json\"]);\n return JSON.parse(fallback.stdout) as CloudflareIdentity;\n } catch {\n return null;\n }\n}\n\nexport async function saveAuthConfig(config: AuthConfig): Promise<void> {\n const authPath = await AUTH_FILE();\n await writeFile(authPath, JSON.stringify(config, null, 2), \"utf-8\");\n}\n\nexport async function getAuthConfig(): Promise<AuthConfig | null> {\n try {\n const authPath = await AUTH_FILE();\n const content = await readFile(authPath, \"utf-8\");\n return JSON.parse(content) as AuthConfig;\n } catch {\n return null;\n }\n}\n\nexport async function isLoggedIn(): Promise<boolean> {\n const auth = await getAuthConfig();\n if (!auth) return false;\n return new Date(auth.expiresAt).getTime() > Date.now();\n}\n\nexport async function requireAuth(): Promise<AuthConfig> {\n const auth = await getAuthConfig();\n if (!auth || new Date(auth.expiresAt).getTime() <= Date.now()) {\n throw new Error(\"Not authenticated. Run `kalp login` first.\");\n }\n return auth;\n}\n\n/**\n * Backward-compatible helper for legacy commands.\n * Returns a pseudo-token when Cloudflare auth is present.\n */\nexport async function getAuthToken(): Promise<string | null> {\n const auth = await getAuthConfig();\n if (!auth || new Date(auth.expiresAt).getTime() <= Date.now()) {\n return null;\n }\n return `${auth.provider}:${auth.accountId}`;\n}\n"],"mappings":";;;;;;AAAA,SAAS,UAAU,iBAAiB;AACpC,SAAS,YAAY;AACrB,SAAS,aAAa;AAGtB,IAAM,YAAY,YAAY,KAAK,MAAM,sBAAsB,GAAG,WAAW;AAe7E,eAAsB,wBAA4D;AAChF,MAAI;AACF,UAAM,MAAM,OAAO,SACjB,MAAM,OAAO,MAAM;AAAA,MACjB,KAAK,EAAE,aAAa,KAAK,0BAA0B,OAAO;AAAA,IAC5D,CAAC;AAEH,UAAM,eAAe,MAAM,IAAI;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EAAE,MAAM,MAAM,IAAI;AAEnB,QAAI,cAAc;AAChB,aAAO,KAAK,MAAM,aAAa,MAAM;AAAA,IACvC;AAEA,UAAM,WAAW,MAAM,IAAI,CAAC,YAAY,UAAU,QAAQ,CAAC;AAC3D,WAAO,KAAK,MAAM,SAAS,MAAM;AAAA,EACnC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,eAAe,QAAmC;AACtE,QAAM,WAAW,MAAM,UAAU;AACjC,QAAM,UAAU,UAAU,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,OAAO;AACpE;AAEA,eAAsB,gBAA4C;AAChE,MAAI;AACF,UAAM,WAAW,MAAM,UAAU;AACjC,UAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAQA,eAAsB,cAAmC;AACvD,QAAM,OAAO,MAAM,cAAc;AACjC,MAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7D,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,SAAO;AACT;AAMA,eAAsB,eAAuC;AAC3D,QAAM,OAAO,MAAM,cAAc;AACjC,MAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7D,WAAO;AAAA,EACT;AACA,SAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,SAAS;AAC3C;","names":[]}
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/utils/secret.ts
4
+ import { randomBytes } from "crypto";
5
+ import { readFile, writeFile } from "fs/promises";
6
+ import { join } from "path";
7
+ async function ensureSecretKey(cwd) {
8
+ const envPath = join(cwd, ".env");
9
+ try {
10
+ const envContent = await readFile(envPath, "utf-8");
11
+ const match = envContent.match(/^KALP_SECRET_KEY=(.+)$/m);
12
+ if (match?.[1]) {
13
+ return { key: match[1].trim(), isNew: false };
14
+ }
15
+ } catch {
16
+ }
17
+ const secretKey = randomBytes(32).toString("hex");
18
+ const content = `# Kalp Studio Authentication Secret
19
+ KALP_SECRET_KEY=${secretKey}
20
+ `;
21
+ await writeFile(envPath, content, "utf-8");
22
+ return { key: secretKey, isNew: true };
23
+ }
24
+
25
+ export {
26
+ ensureSecretKey
27
+ };
28
+ //# sourceMappingURL=chunk-E7V5UMX7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/secret.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport async function ensureSecretKey(\n cwd: string,\n): Promise<{ key: string; isNew: boolean }> {\n const envPath = join(cwd, \".env\");\n\n try {\n const envContent = await readFile(envPath, \"utf-8\");\n const match = envContent.match(/^KALP_SECRET_KEY=(.+)$/m);\n if (match?.[1]) {\n return { key: match[1].trim(), isNew: false };\n }\n } catch {\n // continue\n }\n\n const secretKey = randomBytes(32).toString(\"hex\");\n const content = `# Kalp Studio Authentication Secret\nKALP_SECRET_KEY=${secretKey}\n`;\n await writeFile(envPath, content, \"utf-8\");\n return { key: secretKey, isNew: true };\n}\n\nexport async function readSecretKey(cwd: string): Promise<string | null> {\n try {\n const envPath = join(cwd, \".env\");\n const envContent = await readFile(envPath, \"utf-8\");\n const match = envContent.match(/^KALP_SECRET_KEY=(.+)$/m);\n return match?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n"],"mappings":";;;AAAA,SAAS,mBAAmB;AAC5B,SAAS,UAAU,iBAAiB;AACpC,SAAS,YAAY;AAErB,eAAsB,gBACpB,KAC0C;AAC1C,QAAM,UAAU,KAAK,KAAK,MAAM;AAEhC,MAAI;AACF,UAAM,aAAa,MAAM,SAAS,SAAS,OAAO;AAClD,UAAM,QAAQ,WAAW,MAAM,yBAAyB;AACxD,QAAI,QAAQ,CAAC,GAAG;AACd,aAAO,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,MAAM;AAAA,IAC9C;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,QAAM,YAAY,YAAY,EAAE,EAAE,SAAS,KAAK;AAChD,QAAM,UAAU;AAAA,kBACA,SAAS;AAAA;AAEzB,QAAM,UAAU,SAAS,SAAS,OAAO;AACzC,SAAO,EAAE,KAAK,WAAW,OAAO,KAAK;AACvC;","names":[]}
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/utils/config.ts
4
+ import { chmod, mkdir } from "fs/promises";
5
+ import { homedir } from "os";
6
+ import { join } from "path";
7
+ var GLOBAL_CONFIG_DIR = join(homedir(), ".config", "kalp");
8
+ function getGlobalConfigDir() {
9
+ return GLOBAL_CONFIG_DIR;
10
+ }
11
+ async function ensureGlobalConfigDir() {
12
+ await mkdir(GLOBAL_CONFIG_DIR, { recursive: true, mode: 448 });
13
+ if (process.platform !== "win32") {
14
+ await chmod(GLOBAL_CONFIG_DIR, 448);
15
+ }
16
+ return GLOBAL_CONFIG_DIR;
17
+ }
18
+
19
+ export {
20
+ getGlobalConfigDir,
21
+ ensureGlobalConfigDir
22
+ };
23
+ //# sourceMappingURL=chunk-FO24J6XL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/config.ts"],"sourcesContent":["import { chmod, mkdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nconst GLOBAL_CONFIG_DIR = join(homedir(), \".config\", \"kalp\");\n\nexport function getGlobalConfigDir(): string {\n return GLOBAL_CONFIG_DIR;\n}\n\nexport async function ensureGlobalConfigDir(): Promise<string> {\n await mkdir(GLOBAL_CONFIG_DIR, { recursive: true, mode: 0o700 });\n\n if (process.platform !== \"win32\") {\n await chmod(GLOBAL_CONFIG_DIR, 0o700);\n }\n\n return GLOBAL_CONFIG_DIR;\n}\n"],"mappings":";;;AAAA,SAAS,OAAO,aAAa;AAC7B,SAAS,eAAe;AACxB,SAAS,YAAY;AAErB,IAAM,oBAAoB,KAAK,QAAQ,GAAG,WAAW,MAAM;AAEpD,SAAS,qBAA6B;AAC3C,SAAO;AACT;AAEA,eAAsB,wBAAyC;AAC7D,QAAM,MAAM,mBAAmB,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AAE/D,MAAI,QAAQ,aAAa,SAAS;AAChC,UAAM,MAAM,mBAAmB,GAAK;AAAA,EACtC;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureSecretKey
4
+ } from "./chunk-E7V5UMX7.js";
5
+ import {
6
+ requireAuth
7
+ } from "./chunk-5RODADXW.js";
8
+
9
+ // src/utils/project-state.ts
10
+ import { mkdir, readFile, writeFile } from "fs/promises";
11
+ import { join } from "path";
12
+ var KALP_DIR = ".kalp";
13
+ var STATE_FILE = "state.json";
14
+ async function readProjectState(cwd) {
15
+ try {
16
+ const statePath = join(cwd, KALP_DIR, STATE_FILE);
17
+ const content = await readFile(statePath, "utf-8");
18
+ return JSON.parse(content);
19
+ } catch {
20
+ return null;
21
+ }
22
+ }
23
+ async function writeProjectState(cwd, state) {
24
+ const dir = join(cwd, KALP_DIR);
25
+ await mkdir(dir, { recursive: true });
26
+ await writeFile(join(dir, STATE_FILE), JSON.stringify(state, null, 2), "utf-8");
27
+ }
28
+
29
+ // src/utils/deploy.ts
30
+ import { cp, mkdir as mkdir2, readFile as readFile2, rm } from "fs/promises";
31
+ import { join as join2 } from "path";
32
+ import { execa } from "execa";
33
+ var WRANGLER_CONFIG = "packages/cloudflare/wrangler.jsonc";
34
+ function findWorkersUrl(output) {
35
+ const match = output.match(/https:\/\/[^\s]+\.workers\.dev/);
36
+ return match?.[0] ?? null;
37
+ }
38
+ async function resolveWorkerUrl(cwd, deployOutput) {
39
+ const fromOutput = findWorkersUrl(deployOutput);
40
+ if (fromOutput) return fromOutput;
41
+ const configText = await readFile2(join2(cwd, WRANGLER_CONFIG), "utf-8").catch(
42
+ () => null
43
+ );
44
+ const workerName = configText?.match(/"name"\s*:\s*"([^"]+)"/)?.[1];
45
+ if (workerName) {
46
+ return `https://${workerName}.workers.dev`;
47
+ }
48
+ throw new Error("Could not resolve worker URL from wrangler deploy output.");
49
+ }
50
+ async function runInitialDeploy(cwd) {
51
+ const auth = await requireAuth();
52
+ const { key: secretKey } = await ensureSecretKey(cwd);
53
+ await execa("pnpm", ["--filter=@kalphq/studio", "build"], {
54
+ cwd,
55
+ stdio: "inherit"
56
+ });
57
+ const studioDist = join2(cwd, "apps/studio/dist");
58
+ const workerStudioDist = join2(cwd, "packages/cloudflare/dist/studio");
59
+ await rm(workerStudioDist, { recursive: true, force: true });
60
+ await mkdir2(workerStudioDist, { recursive: true });
61
+ await cp(studioDist, workerStudioDist, { recursive: true });
62
+ let deployStdout = "";
63
+ const secretResult = await execa(
64
+ "npx",
65
+ ["wrangler", "secret", "put", "KALP_SECRET_KEY", "--config", WRANGLER_CONFIG],
66
+ {
67
+ cwd,
68
+ input: `${secretKey}
69
+ `
70
+ }
71
+ );
72
+ const deploy = await execa(
73
+ "npx",
74
+ ["wrangler", "deploy", "--config", WRANGLER_CONFIG],
75
+ {
76
+ cwd
77
+ }
78
+ );
79
+ deployStdout = [secretResult.stdout, deploy.stdout, deploy.stderr].filter(Boolean).join("\n");
80
+ const workerUrl = await resolveWorkerUrl(cwd, deployStdout);
81
+ await writeProjectState(cwd, {
82
+ workerUrl,
83
+ deployedAt: (/* @__PURE__ */ new Date()).toISOString(),
84
+ accountId: auth.accountId
85
+ });
86
+ return { workerUrl, accountId: auth.accountId };
87
+ }
88
+
89
+ export {
90
+ readProjectState,
91
+ runInitialDeploy
92
+ };
93
+ //# sourceMappingURL=chunk-NJ3OTDOX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/project-state.ts","../src/utils/deploy.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface ProjectState {\n workerUrl: string;\n deployedAt: string;\n accountId: string;\n}\n\nconst KALP_DIR = \".kalp\";\nconst STATE_FILE = \"state.json\";\n\nexport async function readProjectState(cwd: string): Promise<ProjectState | null> {\n try {\n const statePath = join(cwd, KALP_DIR, STATE_FILE);\n const content = await readFile(statePath, \"utf-8\");\n return JSON.parse(content) as ProjectState;\n } catch {\n return null;\n }\n}\n\nexport async function writeProjectState(\n cwd: string,\n state: ProjectState,\n): Promise<void> {\n const dir = join(cwd, KALP_DIR);\n await mkdir(dir, { recursive: true });\n await writeFile(join(dir, STATE_FILE), JSON.stringify(state, null, 2), \"utf-8\");\n}\n","import { cp, mkdir, readFile, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { execa } from \"execa\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { ensureSecretKey } from \"@/utils/secret\";\nimport { writeProjectState } from \"@/utils/project-state\";\n\nconst WRANGLER_CONFIG = \"packages/cloudflare/wrangler.jsonc\";\n\nfunction findWorkersUrl(output: string): string | null {\n const match = output.match(/https:\\/\\/[^\\s]+\\.workers\\.dev/);\n return match?.[0] ?? null;\n}\n\nasync function resolveWorkerUrl(cwd: string, deployOutput: string): Promise<string> {\n const fromOutput = findWorkersUrl(deployOutput);\n if (fromOutput) return fromOutput;\n\n const configText = await readFile(join(cwd, WRANGLER_CONFIG), \"utf-8\").catch(\n () => null as string | null,\n );\n const workerName = configText?.match(/\"name\"\\s*:\\s*\"([^\"]+)\"/)?.[1];\n\n if (workerName) {\n return `https://${workerName}.workers.dev`;\n }\n\n throw new Error(\"Could not resolve worker URL from wrangler deploy output.\");\n}\n\nexport async function runInitialDeploy(cwd: string): Promise<{\n workerUrl: string;\n accountId: string;\n}> {\n const auth = await requireAuth();\n const { key: secretKey } = await ensureSecretKey(cwd);\n\n await execa(\"pnpm\", [\"--filter=@kalphq/studio\", \"build\"], {\n cwd,\n stdio: \"inherit\",\n });\n\n const studioDist = join(cwd, \"apps/studio/dist\");\n const workerStudioDist = join(cwd, \"packages/cloudflare/dist/studio\");\n await rm(workerStudioDist, { recursive: true, force: true });\n await mkdir(workerStudioDist, { recursive: true });\n await cp(studioDist, workerStudioDist, { recursive: true });\n\n let deployStdout = \"\";\n const secretResult = await execa(\n \"npx\",\n [\"wrangler\", \"secret\", \"put\", \"KALP_SECRET_KEY\", \"--config\", WRANGLER_CONFIG],\n {\n cwd,\n input: `${secretKey}\\n`,\n },\n );\n\n const deploy = await execa(\n \"npx\",\n [\"wrangler\", \"deploy\", \"--config\", WRANGLER_CONFIG],\n {\n cwd,\n },\n );\n\n deployStdout = [secretResult.stdout, deploy.stdout, deploy.stderr]\n .filter(Boolean)\n .join(\"\\n\");\n\n const workerUrl = await resolveWorkerUrl(cwd, deployStdout);\n\n await writeProjectState(cwd, {\n workerUrl,\n deployedAt: new Date().toISOString(),\n accountId: auth.accountId,\n });\n\n return { workerUrl, accountId: auth.accountId };\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,OAAO,UAAU,iBAAiB;AAC3C,SAAS,YAAY;AAQrB,IAAM,WAAW;AACjB,IAAM,aAAa;AAEnB,eAAsB,iBAAiB,KAA2C;AAChF,MAAI;AACF,UAAM,YAAY,KAAK,KAAK,UAAU,UAAU;AAChD,UAAM,UAAU,MAAM,SAAS,WAAW,OAAO;AACjD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,kBACpB,KACA,OACe;AACf,QAAM,MAAM,KAAK,KAAK,QAAQ;AAC9B,QAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,QAAM,UAAU,KAAK,KAAK,UAAU,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,GAAG,OAAO;AAChF;;;AC7BA,SAAS,IAAI,SAAAA,QAAO,YAAAC,WAAU,UAAU;AACxC,SAAS,QAAAC,aAAY;AACrB,SAAS,aAAa;AAKtB,IAAM,kBAAkB;AAExB,SAAS,eAAe,QAA+B;AACrD,QAAM,QAAQ,OAAO,MAAM,gCAAgC;AAC3D,SAAO,QAAQ,CAAC,KAAK;AACvB;AAEA,eAAe,iBAAiB,KAAa,cAAuC;AAClF,QAAM,aAAa,eAAe,YAAY;AAC9C,MAAI,WAAY,QAAO;AAEvB,QAAM,aAAa,MAAMC,UAASC,MAAK,KAAK,eAAe,GAAG,OAAO,EAAE;AAAA,IACrE,MAAM;AAAA,EACR;AACA,QAAM,aAAa,YAAY,MAAM,wBAAwB,IAAI,CAAC;AAElE,MAAI,YAAY;AACd,WAAO,WAAW,UAAU;AAAA,EAC9B;AAEA,QAAM,IAAI,MAAM,2DAA2D;AAC7E;AAEA,eAAsB,iBAAiB,KAGpC;AACD,QAAM,OAAO,MAAM,YAAY;AAC/B,QAAM,EAAE,KAAK,UAAU,IAAI,MAAM,gBAAgB,GAAG;AAEpD,QAAM,MAAM,QAAQ,CAAC,2BAA2B,OAAO,GAAG;AAAA,IACxD;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AAED,QAAM,aAAaA,MAAK,KAAK,kBAAkB;AAC/C,QAAM,mBAAmBA,MAAK,KAAK,iCAAiC;AACpE,QAAM,GAAG,kBAAkB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC3D,QAAMC,OAAM,kBAAkB,EAAE,WAAW,KAAK,CAAC;AACjD,QAAM,GAAG,YAAY,kBAAkB,EAAE,WAAW,KAAK,CAAC;AAE1D,MAAI,eAAe;AACnB,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACA,CAAC,YAAY,UAAU,OAAO,mBAAmB,YAAY,eAAe;AAAA,IAC5E;AAAA,MACE;AAAA,MACA,OAAO,GAAG,SAAS;AAAA;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA,CAAC,YAAY,UAAU,YAAY,eAAe;AAAA,IAClD;AAAA,MACE;AAAA,IACF;AAAA,EACF;AAEA,iBAAe,CAAC,aAAa,QAAQ,OAAO,QAAQ,OAAO,MAAM,EAC9D,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,QAAM,YAAY,MAAM,iBAAiB,KAAK,YAAY;AAE1D,QAAM,kBAAkB,KAAK;AAAA,IAC3B;AAAA,IACA,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,IACnC,WAAW,KAAK;AAAA,EAClB,CAAC;AAED,SAAO,EAAE,WAAW,WAAW,KAAK,UAAU;AAChD;","names":["mkdir","readFile","join","readFile","join","mkdir"]}
@@ -4,7 +4,8 @@ import {
4
4
  } from "./chunk-MMS3GWBG.js";
5
5
  import {
6
6
  getAuthToken
7
- } from "./chunk-6LLXGS2P.js";
7
+ } from "./chunk-5RODADXW.js";
8
+ import "./chunk-FO24J6XL.js";
8
9
 
9
10
  // src/commands/secrets/delete.ts
10
11
  import { defineCommand } from "citty";
@@ -141,4 +142,4 @@ var delete_default = defineCommand({
141
142
  export {
142
143
  delete_default as default
143
144
  };
144
- //# sourceMappingURL=delete-47ZP6XRB.js.map
145
+ //# sourceMappingURL=delete-N4OSUK3X.js.map
@@ -1 +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\";\nimport { generateTypes } from \"@/utils/codegen\";\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(\n \"kalp.config.ts not found. Run `npx create-kalp@latest` first.\",\n );\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 regenerateTypes(cwd: string): Promise<void> {\n // Regenerate .kalp/types.d.ts based on kalp.config.ts\n await generateTypes(cwd);\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 // Regenerate types from config\n await regenerateTypes(cwd);\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"]}
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\";\nimport { generateTypes } from \"@/utils/codegen\";\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(\n \"kalp.config.ts not found. Run `npx create-kalp@latest` first.\",\n );\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 regenerateTypes(cwd: string): Promise<void> {\n // Regenerate .kalp/types.d.ts based on kalp.config.ts\n await generateTypes(cwd);\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 // Regenerate types from config\n await regenerateTypes(cwd);\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":";;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AACf,SAAS,UAAU,iBAAiB;AACpC,SAAS,YAAY;AAIrB,IAAM,OAAO;AAMb,eAAe,wBAAgD;AAE7D,SAAO,CAAC,EAAE,KAAK,oBAAoB,GAAG,EAAE,KAAK,iBAAiB,CAAC;AACjE;AAEA,eAAe,sBAAsB,KAA4B;AAE/D,UAAQ,IAAI,GAAG,IAAI,+BAA+B,GAAG,qBAAqB,CAAC;AAC7E;AAEA,eAAe,4BACb,KACA,KACe;AACf,QAAM,aAAa,KAAK,KAAK,gBAAgB;AAC7C,MAAI;AAEJ,MAAI;AACF,cAAU,MAAM,SAAS,YAAY,OAAO;AAAA,EAC9C,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAGA,QAAM,QAAQ,IAAI,OAAO,OAAO,GAAG,MAAM;AACzC,MAAI,CAAC,MAAM,KAAK,OAAO,GAAG;AAExB,UAAM,IAAI,MAAM,UAAU,GAAG,4BAA4B;AAAA,EAC3D;AAGA,QAAM,QAAQ,QAAQ,MAAM,yBAAyB;AAErD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,QAAM,eAAe,MAAM,CAAC;AAC5B,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAGA,MAAI,WAAW,aACZ,QAAQ,IAAI,OAAO,OAAO,GAAG,gBAAgB,GAAG,EAAE,EAClD,KAAK;AAER,aAAW,SAAS,QAAQ,SAAS,EAAE;AAEvC,YAAU,QAAQ;AAAA,IAChB;AAAA,IACA,aAAa,QAAQ;AAAA,EACvB;AAEA,QAAM,UAAU,YAAY,SAAS,OAAO;AAC9C;AAEA,eAAe,gBAAgB,KAA4B;AAEzD,QAAM,cAAc,GAAG;AACzB;AAEA,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AAExB,QAAI,KAAK,MAAM;AACb,MAAE,MAAI,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,gCAAgC;AAC9D,MAAE,MAAI,KAAK,GAAG,IAAI,mDAAmD,CAAC;AACtE;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,qBAAqB,CAAC,EAAE;AAEnD,UAAM,QAAQ,MAAM,aAAa;AACjC,QAAI,CAAC,OAAO;AACV,MAAE,MAAI,KAAK,GAAG,OAAO,wCAAwC,CAAC;AAC9D,MAAE,QAAM,yBAAyB;AACjC;AAAA,IACF;AAEA,QAAI,MAAM,KAAK;AAGf,QAAI,CAAC,KAAK;AACR,YAAM,UAAU,MAAM,sBAAsB;AAC5C,UAAI,QAAQ,WAAW,GAAG;AACxB,QAAE,MAAI,KAAK,GAAG,IAAI,iCAAiC,CAAC;AACpD,QAAE,QAAM,mBAAmB;AAC3B;AAAA,MACF;AAEA,YAAM,WAAW,MAAQ,SAAO;AAAA,QAC9B,SAAS;AAAA,QACT,SAAS,QAAQ,IAAI,CAACA,QAAO,EAAE,OAAOA,GAAE,KAAK,OAAOA,GAAE,IAAI,EAAE;AAAA,MAC9D,CAAC;AAED,UAAM,WAAS,QAAQ,GAAG;AACxB,QAAE,QAAM,WAAW;AACnB;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAGA,QAAI,CAAC,KAAK,KAAK;AACb,YAAMC,WAAU,MAAQ,UAAQ;AAAA,QAC9B,SAAS,mCAAmC,GAAG,KAAK,GAAG,CAAC;AAAA,QACxD,cAAc;AAAA,MAChB,CAAC;AAED,UAAM,WAASA,QAAO,KAAK,CAACA,UAAS;AACnC,QAAE,QAAM,WAAW;AACnB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,KAAK;AAErC,QAAI;AAEF,YAAM,sBAAsB,GAAG;AAG/B,YAAM,4BAA4B,KAAK,GAAG;AAG1C,YAAM,gBAAgB,GAAG;AAEzB,QAAE,KAAK,UAAU,GAAG,KAAK,GAAG,CAAC,uBAAuB;AACpD,MAAE,QAAM,MAAM;AAAA,IAChB,SAAS,OAAO;AACd,QAAE,KAAK,yBAAyB;AAChC,MAAE,MAAI;AAAA,QACJ,GAAG;AAAA,UACD,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QAClE;AAAA,MACF;AACA,MAAE,QAAM,QAAQ;AAChB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":["s","confirm"]}
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runInitialDeploy
4
+ } from "./chunk-NJ3OTDOX.js";
5
+ import "./chunk-E7V5UMX7.js";
6
+ import {
7
+ requireAuth
8
+ } from "./chunk-5RODADXW.js";
9
+ import "./chunk-FO24J6XL.js";
10
+
11
+ // src/commands/deploy.ts
12
+ import { defineCommand } from "citty";
13
+ import * as p from "@clack/prompts";
14
+ import pc from "picocolors";
15
+ var LOGO = "\u{1F98B}";
16
+ var deploy_default = defineCommand({
17
+ meta: { name: "deploy", description: "Deploy Worker + Studio to Cloudflare" },
18
+ async run() {
19
+ const cwd = process.cwd();
20
+ p.intro(`${LOGO} ${pc.bold("kalp deploy")}`);
21
+ await requireAuth().catch(() => {
22
+ p.log.error("Not authenticated. Run `kalp login` first.");
23
+ process.exit(1);
24
+ });
25
+ const target = await p.select({
26
+ message: "Choose deployment target",
27
+ options: [
28
+ { label: "Cloudflare (Recommended)", value: "cloudflare" },
29
+ { label: "Kalp Cloud (Coming soon)", value: "kalp-cloud" }
30
+ ]
31
+ });
32
+ if (p.isCancel(target)) {
33
+ p.outro("Cancelled");
34
+ return;
35
+ }
36
+ if (target === "kalp-cloud") {
37
+ p.note(
38
+ "Coming soon. Enterprise cloud execution is currently waitlisted.",
39
+ "Kalp Cloud"
40
+ );
41
+ p.outro(pc.dim("No deployment executed."));
42
+ return;
43
+ }
44
+ const s = p.spinner();
45
+ s.start("Deploying to Cloudflare");
46
+ try {
47
+ const result = await runInitialDeploy(cwd);
48
+ s.stop("Deployment completed");
49
+ p.log.success(`Worker URL: ${pc.cyan(result.workerUrl)}`);
50
+ p.outro(pc.green("Cloudflare deployment ready"));
51
+ } catch (error) {
52
+ s.stop("Deployment failed");
53
+ p.log.error(
54
+ error instanceof Error ? error.message : "Unknown deployment error"
55
+ );
56
+ process.exit(1);
57
+ }
58
+ }
59
+ });
60
+ export {
61
+ deploy_default as default
62
+ };
63
+ //# sourceMappingURL=deploy-HRUJDN2F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/deploy.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { runInitialDeploy } from \"@/utils/deploy\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"deploy\", description: \"Deploy Worker + Studio to Cloudflare\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp deploy\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const target = await p.select({\n message: \"Choose deployment target\",\n options: [\n { label: \"Cloudflare (Recommended)\", value: \"cloudflare\" },\n { label: \"Kalp Cloud (Coming soon)\", value: \"kalp-cloud\" },\n ],\n });\n\n if (p.isCancel(target)) {\n p.outro(\"Cancelled\");\n return;\n }\n\n if (target === \"kalp-cloud\") {\n p.note(\n \"Coming soon. Enterprise cloud execution is currently waitlisted.\",\n \"Kalp Cloud\",\n );\n p.outro(pc.dim(\"No deployment executed.\"));\n return;\n }\n\n const s = p.spinner();\n s.start(\"Deploying to Cloudflare\");\n\n try {\n const result = await runInitialDeploy(cwd);\n s.stop(\"Deployment completed\");\n p.log.success(`Worker URL: ${pc.cyan(result.workerUrl)}`);\n p.outro(pc.green(\"Cloudflare deployment ready\"));\n } catch (error) {\n s.stop(\"Deployment failed\");\n p.log.error(\n error instanceof Error ? error.message : \"Unknown deployment error\",\n );\n process.exit(1);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAIf,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,UAAU,aAAa,uCAAuC;AAAA,EAC5E,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;AAE3C,UAAM,YAAY,EAAE,MAAM,MAAM;AAC9B,MAAE,MAAI,MAAM,4CAA4C;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,UAAM,SAAS,MAAQ,SAAO;AAAA,MAC5B,SAAS;AAAA,MACT,SAAS;AAAA,QACP,EAAE,OAAO,4BAA4B,OAAO,aAAa;AAAA,QACzD,EAAE,OAAO,4BAA4B,OAAO,aAAa;AAAA,MAC3D;AAAA,IACF,CAAC;AAED,QAAM,WAAS,MAAM,GAAG;AACtB,MAAE,QAAM,WAAW;AACnB;AAAA,IACF;AAEA,QAAI,WAAW,cAAc;AAC3B,MAAE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,MAAE,QAAM,GAAG,IAAI,yBAAyB,CAAC;AACzC;AAAA,IACF;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,yBAAyB;AAEjC,QAAI;AACF,YAAM,SAAS,MAAM,iBAAiB,GAAG;AACzC,QAAE,KAAK,sBAAsB;AAC7B,MAAE,MAAI,QAAQ,eAAe,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE;AACxD,MAAE,QAAM,GAAG,MAAM,6BAA6B,CAAC;AAAA,IACjD,SAAS,OAAO;AACd,QAAE,KAAK,mBAAmB;AAC1B,MAAE,MAAI;AAAA,QACJ,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC3C;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureSecretKey
4
+ } from "./chunk-E7V5UMX7.js";
5
+
6
+ // src/commands/dev.ts
7
+ import { copyFile } from "fs/promises";
8
+ import { join } from "path";
9
+ import { setTimeout as delay } from "timers/promises";
10
+ import { defineCommand } from "citty";
11
+ import * as p from "@clack/prompts";
12
+ import pc from "picocolors";
13
+ import { execa } from "execa";
14
+ import open from "open";
15
+
16
+ // src/utils/studio-token.ts
17
+ import { SignJWT } from "jose";
18
+ async function createStudioToken(secretKey) {
19
+ const secret = new TextEncoder().encode(secretKey);
20
+ return new SignJWT({
21
+ sub: "cli-user",
22
+ aud: "kalp-studio",
23
+ iat: Math.floor(Date.now() / 1e3),
24
+ exp: Math.floor(Date.now() / 1e3) + 3600
25
+ }).setProtectedHeader({ alg: "HS256" }).sign(secret);
26
+ }
27
+
28
+ // src/commands/dev.ts
29
+ var LOGO = "\u{1F98B}";
30
+ var WRANGLER_CONFIG = "packages/cloudflare/wrangler.jsonc";
31
+ var dev_default = defineCommand({
32
+ meta: { name: "dev", description: "Run Worker + Studio local environment" },
33
+ async run() {
34
+ const cwd = process.cwd();
35
+ p.intro(`${LOGO} ${pc.bold("kalp dev")}`);
36
+ const { key } = await ensureSecretKey(cwd);
37
+ await copyFile(join(cwd, ".env"), join(cwd, ".dev.vars"));
38
+ const token = await createStudioToken(key);
39
+ p.note("Starting backend (wrangler dev :8787) and frontend (Vite :5173)");
40
+ const backend = execa(
41
+ "npx",
42
+ ["wrangler", "dev", "--port", "8787", "--config", WRANGLER_CONFIG],
43
+ { cwd, stdio: "inherit" }
44
+ );
45
+ const frontend = execa("pnpm", ["--filter=@kalphq/studio", "dev"], {
46
+ cwd,
47
+ stdio: "inherit"
48
+ });
49
+ const shutdown = () => {
50
+ backend.kill("SIGINT");
51
+ frontend.kill("SIGINT");
52
+ };
53
+ process.on("SIGINT", shutdown);
54
+ process.on("SIGTERM", shutdown);
55
+ await delay(2500);
56
+ const studioUrl = `http://localhost:5173/studio/?token=${token}`;
57
+ await open(studioUrl);
58
+ p.log.success(`Studio opened at ${pc.cyan(studioUrl)}`);
59
+ try {
60
+ await Promise.race([backend, frontend]);
61
+ } finally {
62
+ shutdown();
63
+ process.off("SIGINT", shutdown);
64
+ process.off("SIGTERM", shutdown);
65
+ }
66
+ }
67
+ });
68
+ export {
69
+ dev_default as default
70
+ };
71
+ //# sourceMappingURL=dev-ZKXOQ2GQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/dev.ts","../src/utils/studio-token.ts"],"sourcesContent":["import { copyFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { execa } from \"execa\";\nimport open from \"open\";\nimport { ensureSecretKey } from \"@/utils/secret\";\nimport { createStudioToken } from \"@/utils/studio-token\";\n\nconst LOGO = \"🦋\";\nconst WRANGLER_CONFIG = \"packages/cloudflare/wrangler.jsonc\";\n\nexport default defineCommand({\n meta: { name: \"dev\", description: \"Run Worker + Studio local environment\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp dev\")}`);\n\n const { key } = await ensureSecretKey(cwd);\n await copyFile(join(cwd, \".env\"), join(cwd, \".dev.vars\"));\n const token = await createStudioToken(key);\n\n p.note(\"Starting backend (wrangler dev :8787) and frontend (Vite :5173)\");\n\n const backend = execa(\n \"npx\",\n [\"wrangler\", \"dev\", \"--port\", \"8787\", \"--config\", WRANGLER_CONFIG],\n { cwd, stdio: \"inherit\" },\n );\n\n const frontend = execa(\"pnpm\", [\"--filter=@kalphq/studio\", \"dev\"], {\n cwd,\n stdio: \"inherit\",\n });\n\n const shutdown = () => {\n backend.kill(\"SIGINT\");\n frontend.kill(\"SIGINT\");\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n await delay(2500);\n const studioUrl = `http://localhost:5173/studio/?token=${token}`;\n await open(studioUrl);\n p.log.success(`Studio opened at ${pc.cyan(studioUrl)}`);\n\n try {\n await Promise.race([backend, frontend]);\n } finally {\n shutdown();\n process.off(\"SIGINT\", shutdown);\n process.off(\"SIGTERM\", shutdown);\n }\n },\n});\n","import { SignJWT } from \"jose\";\n\nexport async function createStudioToken(secretKey: string): Promise<string> {\n const secret = new TextEncoder().encode(secretKey);\n\n return new SignJWT({\n sub: \"cli-user\",\n aud: \"kalp-studio\",\n iat: Math.floor(Date.now() / 1000),\n exp: Math.floor(Date.now() / 1000) + 3600,\n })\n .setProtectedHeader({ alg: \"HS256\" })\n .sign(secret);\n}\n"],"mappings":";;;;;;AAAA,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,cAAc,aAAa;AACpC,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AACf,SAAS,aAAa;AACtB,OAAO,UAAU;;;ACPjB,SAAS,eAAe;AAExB,eAAsB,kBAAkB,WAAoC;AAC1E,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,SAAS;AAEjD,SAAO,IAAI,QAAQ;AAAA,IACjB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAAA,IACjC,KAAK,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,IAAI;AAAA,EACvC,CAAC,EACE,mBAAmB,EAAE,KAAK,QAAQ,CAAC,EACnC,KAAK,MAAM;AAChB;;;ADFA,IAAM,OAAO;AACb,IAAM,kBAAkB;AAExB,IAAO,cAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,OAAO,aAAa,wCAAwC;AAAA,EAC1E,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,UAAU,CAAC,EAAE;AAExC,UAAM,EAAE,IAAI,IAAI,MAAM,gBAAgB,GAAG;AACzC,UAAM,SAAS,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK,WAAW,CAAC;AACxD,UAAM,QAAQ,MAAM,kBAAkB,GAAG;AAEzC,IAAE,OAAK,iEAAiE;AAExE,UAAM,UAAU;AAAA,MACd;AAAA,MACA,CAAC,YAAY,OAAO,UAAU,QAAQ,YAAY,eAAe;AAAA,MACjE,EAAE,KAAK,OAAO,UAAU;AAAA,IAC1B;AAEA,UAAM,WAAW,MAAM,QAAQ,CAAC,2BAA2B,KAAK,GAAG;AAAA,MACjE;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,UAAM,WAAW,MAAM;AACrB,cAAQ,KAAK,QAAQ;AACrB,eAAS,KAAK,QAAQ;AAAA,IACxB;AAEA,YAAQ,GAAG,UAAU,QAAQ;AAC7B,YAAQ,GAAG,WAAW,QAAQ;AAE9B,UAAM,MAAM,IAAI;AAChB,UAAM,YAAY,uCAAuC,KAAK;AAC9D,UAAM,KAAK,SAAS;AACpB,IAAE,MAAI,QAAQ,oBAAoB,GAAG,KAAK,SAAS,CAAC,EAAE;AAEtD,QAAI;AACF,YAAM,QAAQ,KAAK,CAAC,SAAS,QAAQ,CAAC;AAAA,IACxC,UAAE;AACA,eAAS;AACT,cAAQ,IAAI,UAAU,QAAQ;AAC9B,cAAQ,IAAI,WAAW,QAAQ;AAAA,IACjC;AAAA,EACF;AACF,CAAC;","names":[]}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import pc from "picocolors";
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "@kalphq/cli",
11
- version: "0.0.0-dev-20260509010940",
11
+ version: "0.0.0-dev-20260510030416",
12
12
  description: "Zero-config CLI for deploying Kalp agents",
13
13
  type: "module",
14
14
  license: "MIT",
@@ -37,6 +37,7 @@ var package_default = {
37
37
  "@kalphq/sdk": "workspace:*",
38
38
  citty: "0.1.6",
39
39
  esbuild: "0.25.0",
40
+ execa: "^9.6.1",
40
41
  jose: "^5.10.0",
41
42
  "json-stable-stringify": "1.3.0",
42
43
  open: "^11.0.0",
@@ -55,12 +56,13 @@ var package_default = {
55
56
  var LOGO = "\u{1F98B}";
56
57
  var COMMANDS = [
57
58
  ["create", "Add a new agent"],
58
- ["push", "Push agent to Kalp"],
59
+ ["deploy", "Deploy runtime to Cloudflare"],
60
+ ["push", "Push agent manifest to Cloudflare"],
59
61
  ["link", "Link project to Kalp cloud"],
60
62
  ["secrets", "Manage secrets"],
61
- ["login", "Authenticate with Kalp"],
63
+ ["login", "Authenticate with Cloudflare"],
62
64
  ["logout", "Sign out from Kalp"],
63
- ["studio", "Open Kalp Studio"]
65
+ ["dev", "Run Worker + Studio locally"]
64
66
  ];
65
67
  function printHelp() {
66
68
  p.log.info(`${pc.bold("Usage")}: kalp <command> [options]`);
@@ -88,12 +90,13 @@ var main = defineCommand({
88
90
  },
89
91
  subCommands: {
90
92
  create: () => import("./create-QTVTQ6QL.js").then((r) => r.default),
91
- push: () => import("./push-UZADV7TZ.js").then((r) => r.default),
93
+ deploy: () => import("./deploy-HRUJDN2F.js").then((r) => r.default),
94
+ push: () => import("./push-P2NWWXGL.js").then((r) => r.default),
92
95
  link: () => import("./link-WZQSR2TM.js").then((r) => r.default),
93
- secrets: () => import("./secrets-KFMVBKJQ.js").then((r) => r.default),
94
- login: () => import("./login-JYPWGL6P.js").then((r) => r.default),
95
- logout: () => import("./logout-V67DZZXO.js").then((r) => r.default),
96
- studio: () => import("./studio-7LGUD42G.js").then((r) => r.default)
96
+ secrets: () => import("./secrets-P7ADVLOS.js").then((r) => r.default),
97
+ login: () => import("./login-M5Y57ZZU.js").then((r) => r.default),
98
+ logout: () => import("./logout-U5V5K775.js").then((r) => r.default),
99
+ dev: () => import("./dev-ZKXOQ2GQ.js").then((r) => r.default)
97
100
  },
98
101
  run({ args }) {
99
102
  const firstArg = process.argv[2];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"push\", \"Push agent to Kalp\"],\n [\"link\", \"Link project to Kalp cloud\"],\n [\"secrets\", \"Manage secrets\"],\n [\"login\", \"Authenticate with Kalp\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"studio\", \"Open Kalp Studio\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n link: () => import(\"./commands/link\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n studio: () => import(\"./commands/studio\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260509010940\",\n \"description\": \"Zero-config CLI for deploying Kalp agents\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Kalp HQ\",\n \"bin\": {\n \"kalp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"24.4.0\",\n \"@clack/prompts\": \"0.9.1\",\n \"@kalphq/compiler\": \"workspace:*\",\n \"@kalphq/project\": \"workspace:*\",\n \"@kalphq/sdk\": \"workspace:*\",\n \"citty\": \"0.1.6\",\n \"esbuild\": \"0.25.0\",\n \"jose\": \"^5.10.0\",\n \"json-stable-stringify\": \"1.3.0\",\n \"open\": \"^11.0.0\",\n \"picocolors\": \"1.1.1\",\n \"zod\": \"3.25.76\"\n },\n \"devDependencies\": {\n \"@types/json-stable-stringify\": \"1.2.0\",\n \"@types/node\": \"^22.15.3\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.0.0\"\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"deploy\", \"Deploy runtime to Cloudflare\"],\n [\"push\", \"Push agent manifest to Cloudflare\"],\n [\"link\", \"Link project to Kalp cloud\"],\n [\"secrets\", \"Manage secrets\"],\n [\"login\", \"Authenticate with Cloudflare\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"dev\", \"Run Worker + Studio locally\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n deploy: () => import(\"./commands/deploy\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n link: () => import(\"./commands/link\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260510030416\",\n \"description\": \"Zero-config CLI for deploying Kalp agents\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Kalp HQ\",\n \"bin\": {\n \"kalp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"24.4.0\",\n \"@clack/prompts\": \"0.9.1\",\n \"@kalphq/compiler\": \"workspace:*\",\n \"@kalphq/project\": \"workspace:*\",\n \"@kalphq/sdk\": \"workspace:*\",\n \"citty\": \"0.1.6\",\n \"esbuild\": \"0.25.0\",\n \"execa\": \"^9.6.1\",\n \"jose\": \"^5.10.0\",\n \"json-stable-stringify\": \"1.3.0\",\n \"open\": \"^11.0.0\",\n \"picocolors\": \"1.1.1\",\n \"zod\": \"3.25.76\"\n },\n \"devDependencies\": {\n \"@types/json-stable-stringify\": \"1.2.0\",\n \"@types/node\": \"^22.15.3\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.0.0\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getAuthToken
4
- } from "./chunk-6LLXGS2P.js";
4
+ } from "./chunk-5RODADXW.js";
5
+ import "./chunk-FO24J6XL.js";
5
6
 
6
7
  // src/commands/secrets/list.ts
7
8
  import { defineCommand } from "citty";
@@ -116,4 +117,4 @@ var list_default = defineCommand({
116
117
  export {
117
118
  list_default as default
118
119
  };
119
- //# sourceMappingURL=list-3ZQIFUOT.js.map
120
+ //# sourceMappingURL=list-VMJPWHIH.js.map