@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.
- package/dist/{add-KRHLYYTO.js → add-XTXSSGC5.js} +3 -2
- package/dist/{add-KRHLYYTO.js.map → add-XTXSSGC5.js.map} +1 -1
- package/dist/chunk-5RODADXW.js +65 -0
- package/dist/chunk-5RODADXW.js.map +1 -0
- package/dist/chunk-E7V5UMX7.js +28 -0
- package/dist/chunk-E7V5UMX7.js.map +1 -0
- package/dist/chunk-FO24J6XL.js +23 -0
- package/dist/chunk-FO24J6XL.js.map +1 -0
- package/dist/chunk-NJ3OTDOX.js +93 -0
- package/dist/chunk-NJ3OTDOX.js.map +1 -0
- package/dist/{delete-47ZP6XRB.js → delete-N4OSUK3X.js} +3 -2
- package/dist/{delete-47ZP6XRB.js.map → delete-N4OSUK3X.js.map} +1 -1
- package/dist/deploy-HRUJDN2F.js +63 -0
- package/dist/deploy-HRUJDN2F.js.map +1 -0
- package/dist/dev-ZKXOQ2GQ.js +71 -0
- package/dist/dev-ZKXOQ2GQ.js.map +1 -0
- package/dist/index.js +12 -9
- package/dist/index.js.map +1 -1
- package/dist/{list-3ZQIFUOT.js → list-VMJPWHIH.js} +3 -2
- package/dist/{list-3ZQIFUOT.js.map → list-VMJPWHIH.js.map} +1 -1
- package/dist/login-M5Y57ZZU.js +73 -0
- package/dist/login-M5Y57ZZU.js.map +1 -0
- package/dist/{logout-V67DZZXO.js → logout-U5V5K775.js} +5 -4
- package/dist/logout-U5V5K775.js.map +1 -0
- package/dist/push-P2NWWXGL.js +287 -0
- package/dist/push-P2NWWXGL.js.map +1 -0
- package/dist/{secrets-KFMVBKJQ.js → secrets-P7ADVLOS.js} +5 -5
- package/dist/{sync-YFM5P3IS.js → sync-OTO44GQS.js} +3 -2
- package/dist/{sync-YFM5P3IS.js.map → sync-OTO44GQS.js.map} +1 -1
- package/package.json +5 -4
- package/dist/chunk-6LLXGS2P.js +0 -25
- package/dist/chunk-6LLXGS2P.js.map +0 -1
- package/dist/login-JYPWGL6P.js +0 -38
- package/dist/login-JYPWGL6P.js.map +0 -1
- package/dist/logout-V67DZZXO.js.map +0 -1
- package/dist/push-UZADV7TZ.js +0 -255
- package/dist/push-UZADV7TZ.js.map +0 -1
- package/dist/studio-7LGUD42G.js +0 -92
- package/dist/studio-7LGUD42G.js.map +0 -1
- /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-
|
|
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-
|
|
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":"
|
|
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-
|
|
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-
|
|
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":"
|
|
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"]}
|
|
@@ -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-
|
|
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
|
-
["
|
|
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
|
|
63
|
+
["login", "Authenticate with Cloudflare"],
|
|
62
64
|
["logout", "Sign out from Kalp"],
|
|
63
|
-
["
|
|
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
|
-
|
|
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-
|
|
94
|
-
login: () => import("./login-
|
|
95
|
-
logout: () => import("./logout-
|
|
96
|
-
|
|
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
|
|
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-
|
|
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-
|
|
120
|
+
//# sourceMappingURL=list-VMJPWHIH.js.map
|