@kalphq/cli 0.0.0-dev-20260513002146 → 0.0.0-dev-20260513005156

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 (49) hide show
  1. package/dist/add-NDU352FV.js +124 -0
  2. package/dist/add-NDU352FV.js.map +1 -0
  3. package/dist/chunk-5ZRVO3TQ.js +70 -0
  4. package/dist/chunk-5ZRVO3TQ.js.map +1 -0
  5. package/dist/{chunk-63JREECU.js → chunk-DHCCSWJN.js} +83 -220
  6. package/dist/chunk-DHCCSWJN.js.map +1 -0
  7. package/dist/{chunk-TNKYKA7N.js → chunk-GNQI376N.js} +118 -18
  8. package/dist/chunk-GNQI376N.js.map +1 -0
  9. package/dist/chunk-NV2IZ4XM.js +102 -0
  10. package/dist/chunk-NV2IZ4XM.js.map +1 -0
  11. package/dist/{chunk-PY6VAS54.js → chunk-X56YSZGT.js} +43 -8
  12. package/dist/chunk-X56YSZGT.js.map +1 -0
  13. package/dist/delete-DY5FQAHW.js +127 -0
  14. package/dist/delete-DY5FQAHW.js.map +1 -0
  15. package/dist/{deploy-Z2R7ER7U.js → deploy-AD3F3BN7.js} +27 -22
  16. package/dist/deploy-AD3F3BN7.js.map +1 -0
  17. package/dist/{dev-PNRWXULV.js → dev-X43HHIYV.js} +5 -3
  18. package/dist/{dev-PNRWXULV.js.map → dev-X43HHIYV.js.map} +1 -1
  19. package/dist/index.js +6 -8
  20. package/dist/index.js.map +1 -1
  21. package/dist/list-4X735L5X.js +90 -0
  22. package/dist/list-4X735L5X.js.map +1 -0
  23. package/dist/{login-DGX55YZ6.js → login-RAN2I7YT.js} +3 -5
  24. package/dist/{login-DGX55YZ6.js.map → login-RAN2I7YT.js.map} +1 -1
  25. package/dist/{push-SVABM7WN.js → push-RA6GEUV4.js} +21 -10
  26. package/dist/push-RA6GEUV4.js.map +1 -0
  27. package/dist/{secrets-P7ADVLOS.js → secrets-5ZPPASCH.js} +10 -10
  28. package/dist/secrets-5ZPPASCH.js.map +1 -0
  29. package/dist/sync-2NLWWGI2.js +69 -0
  30. package/dist/sync-2NLWWGI2.js.map +1 -0
  31. package/package.json +4 -4
  32. package/dist/add-XTXSSGC5.js +0 -139
  33. package/dist/add-XTXSSGC5.js.map +0 -1
  34. package/dist/chunk-5RODADXW.js +0 -65
  35. package/dist/chunk-5RODADXW.js.map +0 -1
  36. package/dist/chunk-63JREECU.js.map +0 -1
  37. package/dist/chunk-PY6VAS54.js.map +0 -1
  38. package/dist/chunk-TNKYKA7N.js.map +0 -1
  39. package/dist/delete-N4OSUK3X.js +0 -145
  40. package/dist/delete-N4OSUK3X.js.map +0 -1
  41. package/dist/deploy-Z2R7ER7U.js.map +0 -1
  42. package/dist/link-WZQSR2TM.js +0 -36
  43. package/dist/link-WZQSR2TM.js.map +0 -1
  44. package/dist/list-VMJPWHIH.js +0 -120
  45. package/dist/list-VMJPWHIH.js.map +0 -1
  46. package/dist/push-SVABM7WN.js.map +0 -1
  47. package/dist/secrets-P7ADVLOS.js.map +0 -1
  48. package/dist/sync-OTO44GQS.js +0 -121
  49. package/dist/sync-OTO44GQS.js.map +0 -1
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/commands/link.ts
4
- import { defineCommand } from "citty";
5
- import * as p from "@clack/prompts";
6
- import pc from "picocolors";
7
- import { mkdir, writeFile } from "fs/promises";
8
- import { join } from "path";
9
- var LOGO = "\u{1F98B}";
10
- var link_default = defineCommand({
11
- meta: { name: "link", description: "Link project to Kalp cloud" },
12
- async run() {
13
- const cwd = process.cwd();
14
- p.intro(`${LOGO} ${pc.bold("kalp link")}`);
15
- const s = p.spinner();
16
- s.start("Linking to workspace");
17
- const tempDir = join(cwd, ".temp");
18
- await mkdir(tempDir, { recursive: true });
19
- const workspaceConfig = {
20
- workspaceId: "mock-workspace-id",
21
- linkedAt: (/* @__PURE__ */ new Date()).toISOString(),
22
- projectPath: cwd
23
- };
24
- await writeFile(
25
- join(tempDir, "workspace.json"),
26
- JSON.stringify(workspaceConfig, null, 2),
27
- "utf-8"
28
- );
29
- s.stop("Workspace linked");
30
- p.outro(pc.green("Project linked to Kalp Cloud"));
31
- }
32
- });
33
- export {
34
- link_default as default
35
- };
36
- //# sourceMappingURL=link-WZQSR2TM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/link.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"link\", description: \"Link project to Kalp cloud\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp link\")}`);\n\n const s = p.spinner();\n s.start(\"Linking to workspace\");\n\n // Create .temp directory and workspace config (project local)\n const tempDir = join(cwd, \".temp\");\n await mkdir(tempDir, { recursive: true });\n\n // TODO: Get actual workspace ID from API after login\n const workspaceConfig = {\n workspaceId: \"mock-workspace-id\",\n linkedAt: new Date().toISOString(),\n projectPath: cwd,\n };\n\n await writeFile(\n join(tempDir, \"workspace.json\"),\n JSON.stringify(workspaceConfig, null, 2),\n \"utf-8\",\n );\n\n s.stop(\"Workspace linked\");\n p.outro(pc.green(\"Project linked to Kalp Cloud\"));\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AACf,SAAS,OAAO,iBAAiB;AACjC,SAAS,YAAY;AAErB,IAAM,OAAO;AAEb,IAAO,eAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,QAAQ,aAAa,6BAA6B;AAAA,EAChE,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,WAAW,CAAC,EAAE;AAEzC,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,sBAAsB;AAG9B,UAAM,UAAU,KAAK,KAAK,OAAO;AACjC,UAAM,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAGxC,UAAM,kBAAkB;AAAA,MACtB,aAAa;AAAA,MACb,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,MACjC,aAAa;AAAA,IACf;AAEA,UAAM;AAAA,MACJ,KAAK,SAAS,gBAAgB;AAAA,MAC9B,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,MACvC;AAAA,IACF;AAEA,MAAE,KAAK,kBAAkB;AACzB,IAAE,QAAM,GAAG,MAAM,8BAA8B,CAAC;AAAA,EAClD;AACF,CAAC;","names":[]}
@@ -1,120 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- getAuthToken
4
- } from "./chunk-5RODADXW.js";
5
- import "./chunk-FO24J6XL.js";
6
-
7
- // src/commands/secrets/list.ts
8
- import { defineCommand } from "citty";
9
- import * as p from "@clack/prompts";
10
- import pc from "picocolors";
11
- import { readFile } from "fs/promises";
12
- import { join } from "path";
13
- var LOGO = "\u{1F98B}";
14
- async function fetchSecretsFromCloud() {
15
- return [
16
- { key: "STRIPE_SECRET_KEY", createdAt: "2024-01-15T10:30:00Z" },
17
- { key: "OPENAI_API_KEY", createdAt: "2024-01-16T14:22:00Z" }
18
- ];
19
- }
20
- async function readLocalSecrets(cwd) {
21
- try {
22
- const configPath = join(cwd, "kalp.config.ts");
23
- const content = await readFile(configPath, "utf-8");
24
- const match = content.match(/secrets:\s*\[([^\]]*)\]/);
25
- if (!match) return [];
26
- const secretsStr = match[1];
27
- const secrets = [];
28
- const regex = /["']([^"']+)["']/g;
29
- if (!secretsStr) {
30
- return [];
31
- }
32
- let m;
33
- while ((m = regex.exec(secretsStr)) !== null) {
34
- if (m[1]) {
35
- secrets.push(m[1]);
36
- }
37
- }
38
- return secrets;
39
- } catch {
40
- return [];
41
- }
42
- }
43
- var list_default = defineCommand({
44
- meta: {
45
- name: "list",
46
- description: "List all secrets from Kalp Cloud"
47
- },
48
- args: {
49
- help: {
50
- type: "boolean",
51
- alias: "h",
52
- description: "Show help",
53
- default: false
54
- }
55
- },
56
- async run({ args }) {
57
- const cwd = process.cwd();
58
- if (args.help) {
59
- p.log.info(`${pc.bold("Usage")}: kalp secrets list`);
60
- return;
61
- }
62
- p.intro(`${LOGO} ${pc.bold("kalp secrets list")}`);
63
- const token = await getAuthToken();
64
- if (!token) {
65
- p.log.warn(pc.yellow("Not logged in. Run `kalp login` first."));
66
- p.outro("Authentication required");
67
- return;
68
- }
69
- const s = p.spinner();
70
- s.start("Fetching secrets from Kalp Cloud...");
71
- try {
72
- const [cloudSecrets, localSecrets] = await Promise.all([
73
- fetchSecretsFromCloud(),
74
- readLocalSecrets(cwd)
75
- ]);
76
- s.stop(`Found ${cloudSecrets.length} secrets`);
77
- if (cloudSecrets.length === 0) {
78
- p.log.info(pc.dim("No secrets found in Kalp Cloud."));
79
- p.log.info(pc.dim(`Add secrets with: ${pc.cyan("kalp secrets add")}`));
80
- } else {
81
- console.log("");
82
- p.log.info(pc.bold("Cloud Secrets:"));
83
- for (const secret of cloudSecrets) {
84
- const isSynced = localSecrets.includes(secret.key);
85
- const syncIcon = isSynced ? pc.green("\u2713") : pc.yellow("\u25CB");
86
- console.log(
87
- ` ${syncIcon} ${pc.cyan(secret.key)} ${pc.dim(`(${secret.createdAt})`)}`
88
- );
89
- }
90
- if (localSecrets.length > 0) {
91
- const unsynced = localSecrets.filter(
92
- (k) => !cloudSecrets.some((s2) => s2.key === k)
93
- );
94
- if (unsynced.length > 0) {
95
- console.log("");
96
- p.log.warn(
97
- pc.yellow(
98
- `Local-only secrets (not synced): ${unsynced.join(", ")}`
99
- )
100
- );
101
- }
102
- }
103
- }
104
- p.outro("Done");
105
- } catch (error) {
106
- s.stop("Failed to fetch secrets");
107
- p.log.error(
108
- pc.red(
109
- `Error: ${error instanceof Error ? error.message : String(error)}`
110
- )
111
- );
112
- p.outro("Failed");
113
- process.exit(1);
114
- }
115
- }
116
- });
117
- export {
118
- list_default as default
119
- };
120
- //# sourceMappingURL=list-VMJPWHIH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/secrets/list.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAuthToken } from \"@/utils/auth\";\n\nconst LOGO = \"🦋\";\n\ninterface CloudSecret {\n key: string;\n createdAt: string;\n}\n\nasync function fetchSecretsFromCloud(): Promise<CloudSecret[]> {\n return [\n { key: \"STRIPE_SECRET_KEY\", createdAt: \"2024-01-15T10:30:00Z\" },\n { key: \"OPENAI_API_KEY\", createdAt: \"2024-01-16T14:22:00Z\" },\n ];\n}\n\nasync function readLocalSecrets(cwd: string): Promise<string[]> {\n try {\n const configPath = join(cwd, \"kalp.config.ts\");\n const content = await readFile(configPath, \"utf-8\");\n // Extract secrets array from config\n const match = content.match(/secrets:\\s*\\[([^\\]]*)\\]/);\n if (!match) return [];\n const secretsStr = match[1];\n // Extract quoted strings\n const secrets: string[] = [];\n const regex = /[\"']([^\"']+)[\"']/g;\n\n if (!secretsStr) {\n return [];\n }\n\n let m: RegExpExecArray | null;\n while ((m = regex.exec(secretsStr)) !== null) {\n if (m[1]) {\n secrets.push(m[1]);\n }\n }\n return secrets;\n } catch {\n return [];\n }\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List all secrets from Kalp Cloud\",\n },\n args: {\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 list`);\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets list\")}`);\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 const s = p.spinner();\n s.start(\"Fetching secrets from Kalp Cloud...\");\n\n try {\n const [cloudSecrets, localSecrets] = await Promise.all([\n fetchSecretsFromCloud(),\n readLocalSecrets(cwd),\n ]);\n\n s.stop(`Found ${cloudSecrets.length} secrets`);\n\n if (cloudSecrets.length === 0) {\n p.log.info(pc.dim(\"No secrets found in Kalp Cloud.\"));\n p.log.info(pc.dim(`Add secrets with: ${pc.cyan(\"kalp secrets add\")}`));\n } else {\n console.log(\"\");\n p.log.info(pc.bold(\"Cloud Secrets:\"));\n for (const secret of cloudSecrets) {\n const isSynced = localSecrets.includes(secret.key);\n const syncIcon = isSynced ? pc.green(\"✓\") : pc.yellow(\"○\");\n console.log(\n ` ${syncIcon} ${pc.cyan(secret.key)} ${pc.dim(`(${secret.createdAt})`)}`,\n );\n }\n\n if (localSecrets.length > 0) {\n const unsynced = localSecrets.filter(\n (k) => !cloudSecrets.some((s) => s.key === k),\n );\n if (unsynced.length > 0) {\n console.log(\"\");\n p.log.warn(\n pc.yellow(\n `Local-only secrets (not synced): ${unsynced.join(\", \")}`,\n ),\n );\n }\n }\n }\n\n p.outro(\"Done\");\n } catch (error) {\n s.stop(\"Failed to fetch secrets\");\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,gBAAgB;AACzB,SAAS,YAAY;AAGrB,IAAM,OAAO;AAOb,eAAe,wBAAgD;AAC7D,SAAO;AAAA,IACL,EAAE,KAAK,qBAAqB,WAAW,uBAAuB;AAAA,IAC9D,EAAE,KAAK,kBAAkB,WAAW,uBAAuB;AAAA,EAC7D;AACF;AAEA,eAAe,iBAAiB,KAAgC;AAC9D,MAAI;AACF,UAAM,aAAa,KAAK,KAAK,gBAAgB;AAC7C,UAAM,UAAU,MAAM,SAAS,YAAY,OAAO;AAElD,UAAM,QAAQ,QAAQ,MAAM,yBAAyB;AACrD,QAAI,CAAC,MAAO,QAAO,CAAC;AACpB,UAAM,aAAa,MAAM,CAAC;AAE1B,UAAM,UAAoB,CAAC;AAC3B,UAAM,QAAQ;AAEd,QAAI,CAAC,YAAY;AACf,aAAO,CAAC;AAAA,IACV;AAEA,QAAI;AACJ,YAAQ,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM;AAC5C,UAAI,EAAE,CAAC,GAAG;AACR,gBAAQ,KAAK,EAAE,CAAC,CAAC;AAAA,MACnB;AAAA,IACF;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,IAAO,eAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,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,qBAAqB;AACnD;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,mBAAmB,CAAC,EAAE;AAEjD,UAAM,QAAQ,MAAM,aAAa;AACjC,QAAI,CAAC,OAAO;AACV,MAAE,MAAI,KAAK,GAAG,OAAO,wCAAwC,CAAC;AAC9D,MAAE,QAAM,yBAAyB;AACjC;AAAA,IACF;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,qCAAqC;AAE7C,QAAI;AACF,YAAM,CAAC,cAAc,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,QACrD,sBAAsB;AAAA,QACtB,iBAAiB,GAAG;AAAA,MACtB,CAAC;AAED,QAAE,KAAK,SAAS,aAAa,MAAM,UAAU;AAE7C,UAAI,aAAa,WAAW,GAAG;AAC7B,QAAE,MAAI,KAAK,GAAG,IAAI,iCAAiC,CAAC;AACpD,QAAE,MAAI,KAAK,GAAG,IAAI,qBAAqB,GAAG,KAAK,kBAAkB,CAAC,EAAE,CAAC;AAAA,MACvE,OAAO;AACL,gBAAQ,IAAI,EAAE;AACd,QAAE,MAAI,KAAK,GAAG,KAAK,gBAAgB,CAAC;AACpC,mBAAW,UAAU,cAAc;AACjC,gBAAM,WAAW,aAAa,SAAS,OAAO,GAAG;AACjD,gBAAM,WAAW,WAAW,GAAG,MAAM,QAAG,IAAI,GAAG,OAAO,QAAG;AACzD,kBAAQ;AAAA,YACN,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,SAAS,GAAG,CAAC;AAAA,UACzE;AAAA,QACF;AAEA,YAAI,aAAa,SAAS,GAAG;AAC3B,gBAAM,WAAW,aAAa;AAAA,YAC5B,CAAC,MAAM,CAAC,aAAa,KAAK,CAACA,OAAMA,GAAE,QAAQ,CAAC;AAAA,UAC9C;AACA,cAAI,SAAS,SAAS,GAAG;AACvB,oBAAQ,IAAI,EAAE;AACd,YAAE,MAAI;AAAA,cACJ,GAAG;AAAA,gBACD,oCAAoC,SAAS,KAAK,IAAI,CAAC;AAAA,cACzD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/push.ts","../src/utils/ir/export.ts"],"sourcesContent":["import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { ensureConfig } from \"@/utils/fs\";\nimport { readAgentManifest, computePushHash } from \"@/utils/manifest\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { runInitialDeploy } from \"@/utils/deploy\";\nimport {\n type ProjectAgentState,\n type ProjectState,\n readProjectState,\n writeProjectState,\n} from \"@/utils/project-state\";\nimport { validateCompiledIR } from \"@/utils/validate\";\nimport { materializeRuntime, readLocalAgentNames } from \"@/utils/runtime\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { exportCompiledIrForDebug } from \"@/utils/ir/export\";\n\nconst LOGO = \"🦋\";\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n return `${(bytes / 1024).toFixed(1)} KB`;\n}\n\nfunction createInitialState(): ProjectState {\n return {\n workerUrl: null,\n deployedAt: null,\n accountId: null,\n studioCredentialsFingerprint: null,\n serviceKeyFingerprint: null,\n agents: {},\n };\n}\n\nfunction ensureAgentState(\n state: ProjectState,\n agentName: string,\n localPath: string,\n): ProjectAgentState {\n const existing = state.agents[agentName];\n if (existing) {\n existing.localPath = localPath;\n return existing;\n }\n\n const created: ProjectAgentState = {\n currentHash: null,\n currentVersion: 0,\n lastLocalHash: null,\n lastRemoteHash: null,\n lastPushedAt: null,\n localPath,\n workerUrl:\n state.workerUrl ? `${state.workerUrl.replace(/\\/$/, \"\")}/a/${agentName}` : null,\n };\n state.agents[agentName] = created;\n return created;\n}\n\ntype PushTarget = \"local\" | \"remote\";\n\ninterface PushResult {\n pushed: number;\n skipped: number;\n failed: number;\n}\n\ninterface RemoteAgentIndexEntry {\n name: string;\n hash: string;\n version: string | null;\n versionNumber: number | null;\n updatedAt: string;\n workerUrl: string | null;\n label?: string;\n tags?: string[];\n}\n\ninterface PruneResult {\n removedAgents: string[];\n deletedKeys: number;\n}\n\nasync function readRemoteAgentsIndex(\n cwd: string,\n wranglerConfigPath: string,\n): Promise<RemoteAgentIndexEntry[]> {\n const provider = resolveProvider();\n const output = await provider\n .getValue({\n cwd,\n configPath: wranglerConfigPath,\n key: \"agents:index\",\n })\n .catch(() => null);\n if (!output) return [];\n try {\n const parsed = JSON.parse(output) as unknown;\n if (!Array.isArray(parsed)) return [];\n return parsed as RemoteAgentIndexEntry[];\n } catch {\n return [];\n }\n}\n\nasync function writeRemoteAgentsIndex(\n cwd: string,\n wranglerConfigPath: string,\n entries: RemoteAgentIndexEntry[],\n): Promise<void> {\n const path = join(cwd, \".kalp\", \"agents-index.json\");\n await writeFile(path, JSON.stringify(entries, null, 2), \"utf-8\");\n const provider = resolveProvider();\n try {\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: \"agents:index\",\n jsonPath: path,\n });\n } finally {\n await rm(path, { force: true });\n }\n}\n\nasync function pruneStaleRemoteAgents(params: {\n cwd: string;\n wranglerConfigPath: string;\n remoteEntries: RemoteAgentIndexEntry[];\n localAgentNames: string[];\n}): Promise<PruneResult> {\n const { cwd, wranglerConfigPath, remoteEntries, localAgentNames } = params;\n const localSet = new Set(localAgentNames);\n const staleEntries = remoteEntries.filter((entry) => !localSet.has(entry.name));\n\n if (staleEntries.length === 0) {\n return { removedAgents: [], deletedKeys: 0 };\n }\n\n const preview = staleEntries.slice(0, 3).map((entry) => entry.name).join(\", \");\n const suffix =\n staleEntries.length > 3 ? ` and ${staleEntries.length - 3} more` : \"\";\n const confirmation = await p.confirm({\n message: `Found ${staleEntries.length} stale remote agents that no longer exist locally (e.g., ${pc.cyan(preview)}${suffix}). Do you want to prune them from the remote runtime?`,\n initialValue: true,\n });\n\n if (p.isCancel(confirmation)) {\n p.outro(\"Cancelled\");\n process.exit(0);\n }\n\n if (!confirmation) {\n return { removedAgents: [], deletedKeys: 0 };\n }\n\n const provider = resolveProvider();\n let deletedKeys = 0;\n\n for (const entry of staleEntries) {\n const latestKey = `${entry.name}:latest`;\n const latestHash = await provider\n .getValue({ cwd, configPath: wranglerConfigPath, key: latestKey })\n .catch(() => null);\n\n const hashes = new Set<string>();\n if (entry.hash) hashes.add(entry.hash);\n if (latestHash) hashes.add(latestHash);\n\n const latestDeleted = await provider\n .deleteValue({\n cwd,\n configPath: wranglerConfigPath,\n key: latestKey,\n })\n .then(() => true)\n .catch(() => false);\n if (latestDeleted) deletedKeys += 1;\n\n for (const hash of hashes) {\n const deleted = await provider\n .deleteValue({\n cwd,\n configPath: wranglerConfigPath,\n key: `${entry.name}:${hash}`,\n })\n .then(() => true)\n .catch(() => false);\n if (deleted) deletedKeys += 1;\n }\n }\n\n const filtered = remoteEntries.filter((entry) => localSet.has(entry.name));\n await writeRemoteAgentsIndex(cwd, wranglerConfigPath, filtered);\n\n return {\n removedAgents: staleEntries.map((entry) => entry.name).sort((a, b) => a.localeCompare(b)),\n deletedKeys,\n };\n}\n\nasync function mergeRemoteAgentIndexEntry(params: {\n cwd: string;\n wranglerConfigPath: string;\n entry: RemoteAgentIndexEntry;\n}): Promise<void> {\n const { cwd, wranglerConfigPath, entry } = params;\n const currentIndex = await readRemoteAgentsIndex(cwd, wranglerConfigPath);\n const merged = [\n ...currentIndex.filter((existing) => existing.name !== entry.name),\n entry,\n ].sort((a, b) => a.name.localeCompare(b.name));\n\n await writeRemoteAgentsIndex(cwd, wranglerConfigPath, merged);\n}\n\nasync function pushRemoteManifest(params: {\n cwd: string;\n wranglerConfigPath: string;\n agentName: string;\n hash: string;\n ir: unknown;\n}): Promise<void> {\n const { cwd, wranglerConfigPath, agentName, hash, ir } = params;\n const manifestKey = `${agentName}:${hash}`;\n const latestKey = `${agentName}:latest`;\n const manifestPath = join(cwd, \".kalp\", `${agentName}-${hash}.json`);\n await mkdir(join(cwd, \".kalp\"), { recursive: true });\n await writeFile(manifestPath, JSON.stringify(ir), \"utf-8\");\n\n const provider = resolveProvider();\n try {\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: manifestKey,\n jsonPath: manifestPath,\n });\n await provider.putValue({\n cwd,\n configPath: wranglerConfigPath,\n key: latestKey,\n value: hash,\n });\n } finally {\n await rm(manifestPath, { force: true });\n }\n}\n\nexport default defineCommand({\n meta: { name: \"push\", description: \"Publish agent runtime version\" },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to push\",\n required: false,\n },\n local: {\n type: \"boolean\",\n description: \"Update only local runtime snapshot and state\",\n required: false,\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const target: PushTarget = args.local ? \"local\" : \"remote\";\n const isBulkPush = !args.agent;\n\n p.intro(`${LOGO} ${pc.bold(\"kalp push\")}`);\n\n await ensureConfig(cwd).catch(() => {\n p.log.error(`${pc.cyan(\"kalp.config.ts\")} not found`);\n process.exit(1);\n });\n\n const availableAgents = await readLocalAgentNames(cwd);\n if (availableAgents.length === 0) {\n p.log.error(\"No local agents found in ./agents\");\n process.exit(1);\n }\n\n let selectedAgents: string[] = [];\n if (args.agent) {\n if (!availableAgents.includes(args.agent)) {\n p.log.error(`Agent ${pc.cyan(args.agent)} not found`);\n process.exit(1);\n }\n selectedAgents = [args.agent];\n } else {\n selectedAgents = availableAgents;\n }\n\n let state = (await readProjectState(cwd)) ?? createInitialState();\n let runtime = await materializeRuntime(cwd, { mode: target });\n\n if (target === \"remote\") {\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n if (!state.workerUrl) {\n p.log.warn(\"No .kalp/state.json found. Running initial deploy first...\");\n const deploy = await runInitialDeploy(cwd);\n state = (await readProjectState(cwd)) ?? createInitialState();\n state.workerUrl = deploy.workerUrl;\n state.accountId = deploy.accountId;\n state.deployedAt = new Date().toISOString();\n }\n\n runtime = await materializeRuntime(cwd, { mode: \"remote\" });\n\n if (isBulkPush) {\n const currentIndex = await readRemoteAgentsIndex(cwd, runtime.wranglerConfigPath);\n const prune = await pruneStaleRemoteAgents({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n remoteEntries: currentIndex,\n localAgentNames: availableAgents,\n });\n\n if (prune.removedAgents.length > 0) {\n p.log.info(\n `Pruned stale remote agents: ${pc.cyan(prune.removedAgents.join(\", \"))} ${pc.dim(`(${prune.deletedKeys} keys cleaned)`)}`,\n );\n }\n }\n }\n\n const spinner = p.spinner();\n const result: PushResult = { pushed: 0, skipped: 0, failed: 0 };\n const failures: string[] = [];\n\n for (const agentName of selectedAgents) {\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n await access(agentPath).catch(() => {\n failures.push(`${agentName}: missing ${agentPath}`);\n });\n\n try {\n spinner.start(`Compiling ${pc.cyan(agentName)}`);\n const manifest = await readAgentManifest({ cwd, agentName });\n const hash = computePushHash(manifest.ir);\n const validation = validateCompiledIR({ agentName, ir: manifest.ir, hash });\n if (!validation.ok) {\n const details = (validation.errors ?? []).join(\" | \");\n throw new Error(\n `validation failed (${validation.phase})${details ? `: ${details}` : \"\"}`,\n );\n }\n\n const agentState = ensureAgentState(state, agentName, agentPath);\n const previousHash =\n target === \"local\" ? agentState.lastLocalHash : agentState.lastRemoteHash;\n\n if (previousHash === hash) {\n result.skipped += 1;\n spinner.stop(`Skipped ${pc.cyan(agentName)} (no changes)`);\n continue;\n }\n\n if (target === \"remote\") {\n spinner.message(\"Publishing runtime version\");\n await pushRemoteManifest({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n agentName,\n hash,\n ir: manifest.ir,\n });\n }\n\n agentState.currentVersion = Math.max(0, agentState.currentVersion) + 1;\n agentState.currentHash = hash;\n agentState.lastPushedAt = new Date().toISOString();\n agentState.workerUrl =\n state.workerUrl && target === \"remote\"\n ? `${state.workerUrl.replace(/\\/$/, \"\")}/a/${agentName}`\n : agentState.workerUrl;\n\n if (target === \"local\") {\n agentState.lastLocalHash = hash;\n } else {\n agentState.lastRemoteHash = hash;\n agentState.lastLocalHash = hash;\n\n const nextEntry: RemoteAgentIndexEntry = {\n name: agentName,\n hash,\n version: `v${agentState.currentVersion}`,\n versionNumber: agentState.currentVersion,\n updatedAt: agentState.lastPushedAt,\n workerUrl: agentState.workerUrl,\n label: manifest.ir.metadata?.label,\n tags: manifest.ir.metadata?.tags,\n };\n await mergeRemoteAgentIndexEntry({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n entry: nextEntry,\n });\n }\n\n const bundles = manifest.ir.bundles || {};\n await exportCompiledIrForDebug({\n cwd,\n agentName,\n ir: manifest.ir,\n });\n const totalSize = Object.values(bundles).reduce(\n (sum, bundle) => sum + Buffer.byteLength(bundle.code),\n 0,\n );\n const handlerCount = Object.keys(bundles).length;\n spinner.stop(\n `${pc.bold(agentName)} pushed ${pc.dim(`(v${agentState.currentVersion})`)} · ${handlerCount} handlers · ${formatBytes(totalSize)}`,\n );\n result.pushed += 1;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n failures.push(`${agentName}: ${message}`);\n spinner.stop(`Failed ${pc.cyan(agentName)}`);\n result.failed += 1;\n }\n }\n\n await writeProjectState(cwd, state);\n await materializeRuntime(cwd, { mode: target });\n\n p.note(\n `Successfully pushed ${result.pushed} agents. ${result.skipped} omitted (no changes). ${result.failed} failed.`,\n target === \"local\" ? \"Local push\" : \"Remote push\",\n );\n if (target === \"remote\" && result.pushed > 0) {\n p.log.info(\n pc.dim(\n \"Changes propagating to remote Studio (eventual consistency, up to ~60s).\",\n ),\n );\n }\n\n if (failures.length > 0) {\n for (const failure of failures) {\n p.log.error(failure);\n }\n p.outro(`${LOGO} ${pc.red(\"Push completed with failures\")}`);\n process.exit(1);\n }\n\n p.outro(`${LOGO} ${pc.green(\"Push complete\")}`);\n },\n});\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\n/**\n * TODO remove after SaaS observability: debug IR export for local inspection.\n */\nexport async function exportCompiledIrForDebug(params: {\n cwd: string;\n agentName: string;\n ir: unknown;\n}): Promise<string> {\n const { cwd, agentName, ir } = params;\n const outDir = join(cwd, \".kalp\", \"exports\", agentName);\n await mkdir(outDir, { recursive: true });\n const outputPath = join(outDir, \"ir.json\");\n await writeFile(outputPath, `${JSON.stringify(ir, null, 2)}\\n`, \"utf-8\");\n return outputPath;\n}\n"],"mappings":"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","names":["mkdir","writeFile","join","join","writeFile","mkdir","spinner"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/secrets/index.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"secrets\",\n description: \"Manage Kalp Cloud secrets\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n list: () => import(\"./list\").then((r) => r.default),\n add: () => import(\"./add\").then((r) => r.default),\n delete: () => import(\"./delete\").then((r) => r.default),\n sync: () => import(\"./sync\").then((r) => r.default),\n },\n run({ args }) {\n if (!args.help) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets\")}`);\n p.log.message(pc.bold(\"Available subcommands:\"));\n p.log.message(` ${pc.cyan(\"list\")} List secrets from Kalp Cloud`);\n p.log.message(` ${pc.cyan(\"add\")} Add a secret to Kalp Cloud`);\n p.log.message(` ${pc.cyan(\"delete\")} Delete a secret from Kalp Cloud`);\n p.log.message(\n ` ${pc.cyan(\"sync\")} Sync secrets from Kalp Cloud to local config`,\n );\n p.log.message(\"\");\n p.log.message(\n `Run ${pc.cyan(\"kalp secrets <subcommand> --help\")} for more info.`,\n );\n p.outro(pc.dim(\"Done\"));\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAEf,IAAM,OAAO;AAEb,IAAO,kBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,MAAM,MAAM,OAAO,oBAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAClD,KAAK,MAAM,OAAO,mBAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAChD,QAAQ,MAAM,OAAO,sBAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IACtD,MAAM,MAAM,OAAO,oBAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,EACpD;AAAA,EACA,IAAI,EAAE,KAAK,GAAG;AACZ,QAAI,CAAC,KAAK,MAAM;AACd;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,cAAc,CAAC,EAAE;AAC5C,IAAE,MAAI,QAAQ,GAAG,KAAK,wBAAwB,CAAC;AAC/C,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,MAAM,CAAC,iCAAiC;AACnE,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,KAAK,CAAC,gCAAgC;AACjE,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,QAAQ,CAAC,kCAAkC;AACtE,IAAE,MAAI;AAAA,MACJ,KAAK,GAAG,KAAK,MAAM,CAAC;AAAA,IACtB;AACA,IAAE,MAAI,QAAQ,EAAE;AAChB,IAAE,MAAI;AAAA,MACJ,OAAO,GAAG,KAAK,kCAAkC,CAAC;AAAA,IACpD;AACA,IAAE,QAAM,GAAG,IAAI,MAAM,CAAC;AAAA,EACxB;AACF,CAAC;","names":[]}
@@ -1,121 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- generateTypes
4
- } from "./chunk-MMS3GWBG.js";
5
- import {
6
- getAuthToken
7
- } from "./chunk-5RODADXW.js";
8
- import "./chunk-FO24J6XL.js";
9
-
10
- // src/commands/secrets/sync.ts
11
- import { defineCommand } from "citty";
12
- import * as p from "@clack/prompts";
13
- import pc from "picocolors";
14
- import { readFile, writeFile } from "fs/promises";
15
- import { join } from "path";
16
- var LOGO = "\u{1F98B}";
17
- async function fetchSecretsFromCloud() {
18
- console.log(pc.dim("[Simulated] Fetching secrets from Kalp Cloud..."));
19
- return [
20
- { key: "STRIPE_SECRET_KEY", createdAt: "2024-01-15T10:30:00Z" },
21
- { key: "OPENAI_API_KEY", createdAt: "2024-01-16T14:20:00Z" }
22
- ];
23
- }
24
- async function replaceSecretsInConfig(cwd, secrets) {
25
- const configPath = join(cwd, "kalp.config.ts");
26
- let content;
27
- try {
28
- content = await readFile(configPath, "utf-8");
29
- } catch {
30
- content = `import { defineConfig } from "@kalphq/sdk";
31
-
32
- export default defineConfig({
33
- secrets: [],
34
- });
35
- `;
36
- }
37
- const secretsArray = secrets.length > 0 ? secrets.map((s) => `"${s}"`).join(", ") : "";
38
- const newArray = `secrets: [${secretsArray}]`;
39
- if (content.match(/secrets:\s*\[([^\]]*)\]/)) {
40
- content = content.replace(/secrets:\s*\[([^\]]*)\]/, newArray);
41
- } else {
42
- content = content.replace(
43
- /defineConfig\({/,
44
- `defineConfig({
45
- secrets: [${secretsArray}],`
46
- );
47
- }
48
- await writeFile(configPath, content, "utf-8");
49
- }
50
- var sync_default = defineCommand({
51
- meta: {
52
- name: "sync",
53
- description: "Sync secrets from Kalp Cloud to local config"
54
- },
55
- async run() {
56
- const cwd = process.cwd();
57
- p.intro(`${LOGO} ${pc.bold("kalp secrets sync")}`);
58
- const token = await getAuthToken();
59
- if (!token) {
60
- p.log.error("Not authenticated. Run 'kalp login' first.");
61
- process.exit(1);
62
- }
63
- const s = p.spinner();
64
- try {
65
- s.start("Fetching secrets from Kalp Cloud");
66
- const cloudSecrets = await fetchSecretsFromCloud();
67
- s.stop(`Found ${pc.cyan(String(cloudSecrets.length))} secrets in cloud`);
68
- if (cloudSecrets.length === 0) {
69
- p.log.warn("No secrets found in Kalp Cloud");
70
- const shouldClear = await p.confirm({
71
- message: "Clear local secrets config?",
72
- initialValue: false
73
- });
74
- if (p.isCancel(shouldClear) || !shouldClear) {
75
- p.outro("Cancelled");
76
- return;
77
- }
78
- s.start("Clearing local secrets");
79
- await replaceSecretsInConfig(cwd, []);
80
- await generateTypes(cwd);
81
- s.stop("Local secrets cleared");
82
- p.outro("Done");
83
- return;
84
- }
85
- p.log.info(pc.bold("Secrets to sync:"));
86
- for (const secret of cloudSecrets) {
87
- console.log(` ${pc.dim("\u2022")} ${pc.cyan(secret.key)}`);
88
- }
89
- const confirm2 = await p.confirm({
90
- message: `Replace local secrets with ${cloudSecrets.length} secrets from cloud?`,
91
- initialValue: true
92
- });
93
- if (p.isCancel(confirm2) || !confirm2) {
94
- p.outro("Cancelled");
95
- return;
96
- }
97
- s.start("Updating local config");
98
- const secretKeys = cloudSecrets.map((s2) => s2.key);
99
- await replaceSecretsInConfig(cwd, secretKeys);
100
- s.stop("Config updated");
101
- s.start("Regenerating types");
102
- await generateTypes(cwd);
103
- s.stop("Types regenerated");
104
- p.log.success(pc.green(`Synced ${cloudSecrets.length} secrets`));
105
- p.outro("Done");
106
- } catch (error) {
107
- s.stop("Sync failed");
108
- p.log.error(
109
- pc.red(
110
- `Error: ${error instanceof Error ? error.message : String(error)}`
111
- )
112
- );
113
- p.outro("Failed");
114
- process.exit(1);
115
- }
116
- }
117
- });
118
- export {
119
- sync_default as default
120
- };
121
- //# sourceMappingURL=sync-OTO44GQS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/secrets/sync.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 SecretFromCloud {\n key: string;\n createdAt: string;\n}\n\nasync function fetchSecretsFromCloud(): Promise<SecretFromCloud[]> {\n // TODO: Implement real API call to Kalp Cloud\n console.log(pc.dim(\"[Simulated] Fetching secrets from Kalp Cloud...\"));\n // Simulated response - in real implementation, this would call the API\n return [\n { key: \"STRIPE_SECRET_KEY\", createdAt: \"2024-01-15T10:30:00Z\" },\n { key: \"OPENAI_API_KEY\", createdAt: \"2024-01-16T14:20:00Z\" },\n ];\n}\n\nasync function replaceSecretsInConfig(\n cwd: string,\n secrets: 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 // Create new config if doesn't exist\n content = `import { defineConfig } from \"@kalphq/sdk\";\n\nexport default defineConfig({\n secrets: [],\n});\n`;\n }\n\n // Replace secrets array with new ones\n const secretsArray =\n secrets.length > 0 ? secrets.map((s) => `\"${s}\"`).join(\", \") : \"\";\n\n const newArray = `secrets: [${secretsArray}]`;\n\n // Check if config has secrets array\n if (content.match(/secrets:\\s*\\[([^\\]]*)\\]/)) {\n content = content.replace(/secrets:\\s*\\[([^\\]]*)\\]/, newArray);\n } else {\n // Add secrets array if not present\n content = content.replace(\n /defineConfig\\({/,\n `defineConfig({\\n secrets: [${secretsArray}],`,\n );\n }\n\n await writeFile(configPath, content, \"utf-8\");\n}\n\nexport default defineCommand({\n meta: {\n name: \"sync\",\n description: \"Sync secrets from Kalp Cloud to local config\",\n },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets sync\")}`);\n\n // Check authentication\n const token = await getAuthToken();\n if (!token) {\n p.log.error(\"Not authenticated. Run 'kalp login' first.\");\n process.exit(1);\n }\n\n const s = p.spinner();\n\n try {\n s.start(\"Fetching secrets from Kalp Cloud\");\n const cloudSecrets = await fetchSecretsFromCloud();\n s.stop(`Found ${pc.cyan(String(cloudSecrets.length))} secrets in cloud`);\n\n if (cloudSecrets.length === 0) {\n p.log.warn(\"No secrets found in Kalp Cloud\");\n\n const shouldClear = await p.confirm({\n message: \"Clear local secrets config?\",\n initialValue: false,\n });\n\n if (p.isCancel(shouldClear) || !shouldClear) {\n p.outro(\"Cancelled\");\n return;\n }\n\n s.start(\"Clearing local secrets\");\n await replaceSecretsInConfig(cwd, []);\n await generateTypes(cwd);\n s.stop(\"Local secrets cleared\");\n p.outro(\"Done\");\n return;\n }\n\n // Show secrets that will be synced\n p.log.info(pc.bold(\"Secrets to sync:\"));\n for (const secret of cloudSecrets) {\n console.log(` ${pc.dim(\"•\")} ${pc.cyan(secret.key)}`);\n }\n\n const confirm = await p.confirm({\n message: `Replace local secrets with ${cloudSecrets.length} secrets from cloud?`,\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.outro(\"Cancelled\");\n return;\n }\n\n s.start(\"Updating local config\");\n const secretKeys = cloudSecrets.map((s) => s.key);\n await replaceSecretsInConfig(cwd, secretKeys);\n s.stop(\"Config updated\");\n\n s.start(\"Regenerating types\");\n await generateTypes(cwd);\n s.stop(\"Types regenerated\");\n\n p.log.success(pc.green(`Synced ${cloudSecrets.length} secrets`));\n p.outro(\"Done\");\n } catch (error) {\n s.stop(\"Sync failed\");\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":["confirm","s"]}