@kalphq/cli 0.0.0-dev-20260513152102 → 0.0.0-dev-20260517015600
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-YZSIMRPC.js → add-5WUS5HGV.js} +16 -8
- package/dist/add-5WUS5HGV.js.map +1 -0
- package/dist/{agents-WYK6WNQP.js → agents-L22L47II.js} +3 -3
- package/dist/ai-7EBQF25Y.js +12 -0
- package/dist/ai-7EBQF25Y.js.map +1 -0
- package/dist/{chunk-IZXCZ3IA.js → chunk-4CPUJ537.js} +2 -2
- package/dist/chunk-5YUU3KLB.js +40 -0
- package/dist/chunk-5YUU3KLB.js.map +1 -0
- package/dist/chunk-7KVCCBPJ.js +139 -0
- package/dist/chunk-7KVCCBPJ.js.map +1 -0
- package/dist/{chunk-S3KAVLVM.js → chunk-D53K6UE6.js} +2 -2
- package/dist/chunk-D53K6UE6.js.map +1 -0
- package/dist/{chunk-4CEJYSJY.js → chunk-DLUULDXW.js} +12 -45
- package/dist/chunk-DLUULDXW.js.map +1 -0
- package/dist/chunk-DXNHT4HF.js +99 -0
- package/dist/chunk-DXNHT4HF.js.map +1 -0
- package/dist/{chunk-XVD3FFOJ.js → chunk-JXR6TPR5.js} +51 -72
- package/dist/chunk-JXR6TPR5.js.map +1 -0
- package/dist/chunk-LEKRFM4Q.js +49 -0
- package/dist/chunk-LEKRFM4Q.js.map +1 -0
- package/dist/chunk-QT2JFINP.js +99 -0
- package/dist/chunk-QT2JFINP.js.map +1 -0
- package/dist/{chunk-5SZMD7E6.js → chunk-TNNBTSDC.js} +2 -2
- package/dist/{chunk-5SZMD7E6.js.map → chunk-TNNBTSDC.js.map} +1 -1
- package/dist/{generate-JW2DMJ3W.js → chunk-ZX7TIQM7.js} +127 -120
- package/dist/chunk-ZX7TIQM7.js.map +1 -0
- package/dist/{create-UCJ77P62.js → create-ILPQCRA2.js} +2 -2
- package/dist/{delete-QPYVL4OU.js → delete-AJFAAGYJ.js} +9 -8
- package/dist/{delete-QPYVL4OU.js.map → delete-AJFAAGYJ.js.map} +1 -1
- package/dist/{delete-FIXMFFNZ.js → delete-IFVGULOA.js} +21 -13
- package/dist/delete-IFVGULOA.js.map +1 -0
- package/dist/{deploy-DRZZ3YRB.js → deploy-EWYNN3VU.js} +9 -6
- package/dist/{deploy-DRZZ3YRB.js.map → deploy-EWYNN3VU.js.map} +1 -1
- package/dist/{dev-5YY6W4WM.js → dev-3IEEUVYM.js} +66 -11
- package/dist/dev-3IEEUVYM.js.map +1 -0
- package/dist/generate-2MO7PZBT.js +69 -0
- package/dist/generate-2MO7PZBT.js.map +1 -0
- package/dist/generate-ODZUKTF2.js +146 -0
- package/dist/generate-ODZUKTF2.js.map +1 -0
- package/dist/index.js +32 -12
- package/dist/index.js.map +1 -1
- package/dist/{list-FKH4DWCF.js → list-BNQ34QG3.js} +6 -5
- package/dist/{list-FKH4DWCF.js.map → list-BNQ34QG3.js.map} +1 -1
- package/dist/{list-GZBBOFX5.js → list-WHYV5JZ4.js} +5 -4
- package/dist/{list-GZBBOFX5.js.map → list-WHYV5JZ4.js.map} +1 -1
- package/dist/{login-MGPA2VYV.js → login-BDLHS4HC.js} +13 -8
- package/dist/login-BDLHS4HC.js.map +1 -0
- package/dist/{mcp-DRMQYA7E.js → mcp-77OLNT5R.js} +2 -2
- package/dist/{pull-V7QJBVNZ.js → pull-CFDZS6VB.js} +8 -7
- package/dist/{pull-V7QJBVNZ.js.map → pull-CFDZS6VB.js.map} +1 -1
- package/dist/{push-P6CKRYT7.js → push-OL7562HM.js} +159 -47
- package/dist/push-OL7562HM.js.map +1 -0
- package/dist/runtime-template/studio/index.html +3 -0
- package/dist/{secrets-M43LLCTB.js → secrets-BPESLXMK.js} +6 -6
- package/dist/{sync-LTBH6DI5.js → sync-JJDODKMO.js} +8 -7
- package/dist/{sync-LTBH6DI5.js.map → sync-JJDODKMO.js.map} +1 -1
- package/package.json +5 -4
- package/dist/add-YZSIMRPC.js.map +0 -1
- package/dist/chunk-4CEJYSJY.js.map +0 -1
- package/dist/chunk-LPEV4QH2.js +0 -208
- package/dist/chunk-LPEV4QH2.js.map +0 -1
- package/dist/chunk-S3KAVLVM.js.map +0 -1
- package/dist/chunk-VCFH3R34.js +0 -103
- package/dist/chunk-VCFH3R34.js.map +0 -1
- package/dist/chunk-XVD3FFOJ.js.map +0 -1
- package/dist/delete-FIXMFFNZ.js.map +0 -1
- package/dist/dev-5YY6W4WM.js.map +0 -1
- package/dist/generate-JW2DMJ3W.js.map +0 -1
- package/dist/login-MGPA2VYV.js.map +0 -1
- package/dist/push-P6CKRYT7.js.map +0 -1
- /package/dist/{agents-WYK6WNQP.js.map → agents-L22L47II.js.map} +0 -0
- /package/dist/{chunk-IZXCZ3IA.js.map → chunk-4CPUJ537.js.map} +0 -0
- /package/dist/{create-UCJ77P62.js.map → create-ILPQCRA2.js.map} +0 -0
- /package/dist/{mcp-DRMQYA7E.js.map → mcp-77OLNT5R.js.map} +0 -0
- /package/dist/{secrets-M43LLCTB.js.map → secrets-BPESLXMK.js.map} +0 -0
|
@@ -5,15 +5,16 @@ import {
|
|
|
5
5
|
} from "./chunk-YE2SFYAJ.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveSecretsRuntimeConfigPath
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4CPUJ537.js";
|
|
9
9
|
import "./chunk-INB3LG6O.js";
|
|
10
|
-
import "./chunk-XVD3FFOJ.js";
|
|
11
10
|
import {
|
|
12
11
|
requireAuth,
|
|
13
12
|
resolveProvider
|
|
14
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-D53K6UE6.js";
|
|
15
14
|
import "./chunk-FO24J6XL.js";
|
|
15
|
+
import "./chunk-JXR6TPR5.js";
|
|
16
16
|
import "./chunk-EXXTCGKR.js";
|
|
17
|
+
import "./chunk-LEKRFM4Q.js";
|
|
17
18
|
|
|
18
19
|
// src/commands/secrets/list.ts
|
|
19
20
|
import { defineCommand } from "citty";
|
|
@@ -109,4 +110,4 @@ var list_default = defineCommand({
|
|
|
109
110
|
export {
|
|
110
111
|
list_default as default
|
|
111
112
|
};
|
|
112
|
-
//# sourceMappingURL=list-
|
|
113
|
+
//# sourceMappingURL=list-WHYV5JZ4.js.map
|
|
@@ -1 +1 @@
|
|
|
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 { requireAuth } from \"@/utils/auth\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport {\n filterInternalSecrets,\n readLocalSecretsFromConfig,\n} from \"@/utils/secrets-config\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List remote runtime secrets\",\n },\n args: {\n includeInternal: {\n type: \"boolean\",\n description: \"Include internal Kalp runtime secrets (KALP_*)\",\n default: false,\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 list`);\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets list\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading remote secrets\");\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [remoteSecrets, localSecrets] = await Promise.all([\n provider.listSecrets({ cwd, configPath }),\n readLocalSecretsFromConfig(cwd),\n ]);\n\n const remoteNames = filterInternalSecrets(\n remoteSecrets.map((item) => item.name),\n args.includeInternal,\n ).sort((a, b) => a.localeCompare(b));\n const localUserSecrets = filterInternalSecrets(\n localSecrets,\n args.includeInternal,\n );\n const syncedCount = remoteNames.filter((name) =>\n localUserSecrets.includes(name),\n ).length;\n spinner.stop(`Found ${remoteNames.length} remote secrets`);\n\n if (remoteNames.length === 0) {\n p.log.info(pc.dim(\"No remote secrets found.\"));\n p.log.info(pc.dim(`Add one with ${pc.cyan(\"kalp secrets add -k KEY -v VALUE\")}`));\n p.outro(\"Done\");\n return;\n }\n\n p.log.info(pc.bold(\"Remote runtime secrets\"));\n for (const name of remoteNames) {\n const synced = localUserSecrets.includes(name);\n const icon = synced ? pc.green(\"✓\") : pc.yellow(\"○\");\n console.log(` ${icon} ${pc.cyan(name)}`);\n }\n\n if (syncedCount !== remoteNames.length) {\n const missingLocal = remoteNames.filter(\n (name) => !localUserSecrets.includes(name),\n );\n p.log.warn(\n `Missing in kalp.config.ts: ${missingLocal.map((name) => pc.cyan(name)).join(\", \")}`,\n );\n }\n\n const localOnly = localUserSecrets.filter(\n (name) => !remoteNames.includes(name),\n );\n if (localOnly.length > 0) {\n p.log.warn(\n `Local-only secrets (not remote): ${localOnly.map((name) => pc.cyan(name)).join(\", \")}`,\n );\n }\n\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Failed to load secrets\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"
|
|
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 { requireAuth } from \"@/utils/auth\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport {\n filterInternalSecrets,\n readLocalSecretsFromConfig,\n} from \"@/utils/secrets-config\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List remote runtime secrets\",\n },\n args: {\n includeInternal: {\n type: \"boolean\",\n description: \"Include internal Kalp runtime secrets (KALP_*)\",\n default: false,\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 list`);\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets list\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading remote secrets\");\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [remoteSecrets, localSecrets] = await Promise.all([\n provider.listSecrets({ cwd, configPath }),\n readLocalSecretsFromConfig(cwd),\n ]);\n\n const remoteNames = filterInternalSecrets(\n remoteSecrets.map((item) => item.name),\n args.includeInternal,\n ).sort((a, b) => a.localeCompare(b));\n const localUserSecrets = filterInternalSecrets(\n localSecrets,\n args.includeInternal,\n );\n const syncedCount = remoteNames.filter((name) =>\n localUserSecrets.includes(name),\n ).length;\n spinner.stop(`Found ${remoteNames.length} remote secrets`);\n\n if (remoteNames.length === 0) {\n p.log.info(pc.dim(\"No remote secrets found.\"));\n p.log.info(pc.dim(`Add one with ${pc.cyan(\"kalp secrets add -k KEY -v VALUE\")}`));\n p.outro(\"Done\");\n return;\n }\n\n p.log.info(pc.bold(\"Remote runtime secrets\"));\n for (const name of remoteNames) {\n const synced = localUserSecrets.includes(name);\n const icon = synced ? pc.green(\"✓\") : pc.yellow(\"○\");\n console.log(` ${icon} ${pc.cyan(name)}`);\n }\n\n if (syncedCount !== remoteNames.length) {\n const missingLocal = remoteNames.filter(\n (name) => !localUserSecrets.includes(name),\n );\n p.log.warn(\n `Missing in kalp.config.ts: ${missingLocal.map((name) => pc.cyan(name)).join(\", \")}`,\n );\n }\n\n const localOnly = localUserSecrets.filter(\n (name) => !remoteNames.includes(name),\n );\n if (localOnly.length > 0) {\n p.log.warn(\n `Local-only secrets (not remote): ${localOnly.map((name) => pc.cyan(name)).join(\", \")}`,\n );\n }\n\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Failed to load secrets\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner"]}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
promptDeployTarget,
|
|
4
|
+
showKalpCloudWaitlist
|
|
5
|
+
} from "./chunk-5YUU3KLB.js";
|
|
2
6
|
import {
|
|
3
7
|
resolveProvider,
|
|
4
8
|
saveAuthConfig
|
|
5
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-D53K6UE6.js";
|
|
6
10
|
import "./chunk-FO24J6XL.js";
|
|
7
11
|
|
|
8
12
|
// src/commands/login.ts
|
|
@@ -14,15 +18,16 @@ var login_default = defineCommand({
|
|
|
14
18
|
meta: { name: "login", description: "Sign in to remote runtime" },
|
|
15
19
|
async run() {
|
|
16
20
|
p.intro(`${LOGO} ${pc.bold("kalp login")}`);
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
message: "Sign in to remote runtime now?",
|
|
20
|
-
initialValue: true
|
|
21
|
-
});
|
|
22
|
-
if (p.isCancel(proceed) || !proceed) {
|
|
21
|
+
const target = await promptDeployTarget("Where do you want to sign in?");
|
|
22
|
+
if (!target) {
|
|
23
23
|
p.outro("Cancelled");
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
|
+
if (target === "kalp-cloud") {
|
|
27
|
+
showKalpCloudWaitlist();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const provider = resolveProvider();
|
|
26
31
|
const s = p.spinner();
|
|
27
32
|
s.start("Opening sign-in flow");
|
|
28
33
|
try {
|
|
@@ -56,4 +61,4 @@ var login_default = defineCommand({
|
|
|
56
61
|
export {
|
|
57
62
|
login_default as default
|
|
58
63
|
};
|
|
59
|
-
//# sourceMappingURL=login-
|
|
64
|
+
//# sourceMappingURL=login-BDLHS4HC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/login.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n saveAuthConfig,\n type AuthConfig,\n} from \"@/utils/auth\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { promptDeployTarget, showKalpCloudWaitlist } from \"@/utils/deploy-target\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"login\", description: \"Sign in to remote runtime\" },\n async run() {\n p.intro(`${LOGO} ${pc.bold(\"kalp login\")}`);\n\n const target = await promptDeployTarget(\"Where do you want to sign in?\");\n if (!target) {\n p.outro(\"Cancelled\");\n return;\n }\n\n if (target === \"kalp-cloud\") {\n showKalpCloudWaitlist();\n return;\n }\n\n const provider = resolveProvider();\n\n const s = p.spinner();\n s.start(\"Opening sign-in flow\");\n\n try {\n await provider.login();\n } catch {\n s.stop(pc.red(\"Sign-in failed\"));\n process.exit(1);\n }\n\n s.stop(\"Sign-in complete\");\n s.start(\"Reading runtime identity\");\n const identity = await provider.whoami();\n const accountId = identity?.accountId;\n const email = identity?.email;\n\n if (!accountId || !email) {\n s.stop(pc.red(\"Could not resolve account identity from wrangler whoami\"));\n process.exit(1);\n }\n\n const authConfig: AuthConfig = {\n provider: \"cloudflare\",\n accountId,\n email,\n expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),\n };\n\n await saveAuthConfig(authConfig);\n\n s.stop(\"Authentication saved\");\n p.log.success(`Logged in as ${pc.cyan(authConfig.email)}`);\n p.note(`Workspace ID: ${pc.cyan(authConfig.accountId)}`, \"Runtime\");\n p.outro(pc.green(\"Ready to deploy your agents\"));\n },\n});\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAQf,IAAM,OAAO;AAEb,IAAO,gBAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,SAAS,aAAa,4BAA4B;AAAA,EAChE,MAAM,MAAM;AACV,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,YAAY,CAAC,EAAE;AAE1C,UAAM,SAAS,MAAM,mBAAmB,+BAA+B;AACvE,QAAI,CAAC,QAAQ;AACX,MAAE,QAAM,WAAW;AACnB;AAAA,IACF;AAEA,QAAI,WAAW,cAAc;AAC3B,4BAAsB;AACtB;AAAA,IACF;AAEA,UAAM,WAAW,gBAAgB;AAEjC,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,sBAAsB;AAE9B,QAAI;AACF,YAAM,SAAS,MAAM;AAAA,IACvB,QAAQ;AACN,QAAE,KAAK,GAAG,IAAI,gBAAgB,CAAC;AAC/B,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,MAAE,KAAK,kBAAkB;AACzB,MAAE,MAAM,0BAA0B;AAClC,UAAM,WAAW,MAAM,SAAS,OAAO;AACvC,UAAM,YAAY,UAAU;AAC5B,UAAM,QAAQ,UAAU;AAExB,QAAI,CAAC,aAAa,CAAC,OAAO;AACxB,QAAE,KAAK,GAAG,IAAI,yDAAyD,CAAC;AACxE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,aAAyB;AAAA,MAC7B,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAI,EAAE,YAAY;AAAA,IACzE;AAEA,UAAM,eAAe,UAAU;AAE/B,MAAE,KAAK,sBAAsB;AAC7B,IAAE,MAAI,QAAQ,gBAAgB,GAAG,KAAK,WAAW,KAAK,CAAC,EAAE;AACzD,IAAE,OAAK,iBAAiB,GAAG,KAAK,WAAW,SAAS,CAAC,IAAI,SAAS;AAClE,IAAE,QAAM,GAAG,MAAM,6BAA6B,CAAC;AAAA,EACjD;AACF,CAAC;","names":[]}
|
|
@@ -19,7 +19,7 @@ var mcp_default = defineCommand({
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
subCommands: {
|
|
22
|
-
generate: () => import("./generate-
|
|
22
|
+
generate: () => import("./generate-2MO7PZBT.js").then((r) => r.default)
|
|
23
23
|
},
|
|
24
24
|
run({ args }) {
|
|
25
25
|
const subcommand = process.argv[3];
|
|
@@ -36,4 +36,4 @@ var mcp_default = defineCommand({
|
|
|
36
36
|
export {
|
|
37
37
|
mcp_default as default
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=mcp-
|
|
39
|
+
//# sourceMappingURL=mcp-77OLNT5R.js.map
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
generateTypes
|
|
4
|
-
} from "./chunk-LPEV4QH2.js";
|
|
5
2
|
import {
|
|
6
3
|
filterInternalSecrets,
|
|
7
4
|
mergeSecrets,
|
|
8
5
|
readLocalSecretsFromConfig,
|
|
9
6
|
writeLocalSecretsToConfig
|
|
10
7
|
} from "./chunk-YE2SFYAJ.js";
|
|
8
|
+
import {
|
|
9
|
+
generateTypes
|
|
10
|
+
} from "./chunk-DXNHT4HF.js";
|
|
11
11
|
import {
|
|
12
12
|
resolveSecretsRuntimeConfigPath
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-4CPUJ537.js";
|
|
14
14
|
import "./chunk-INB3LG6O.js";
|
|
15
|
-
import "./chunk-XVD3FFOJ.js";
|
|
16
15
|
import {
|
|
17
16
|
requireAuth,
|
|
18
17
|
resolveProvider
|
|
19
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-D53K6UE6.js";
|
|
20
19
|
import "./chunk-FO24J6XL.js";
|
|
20
|
+
import "./chunk-JXR6TPR5.js";
|
|
21
21
|
import "./chunk-EXXTCGKR.js";
|
|
22
|
+
import "./chunk-LEKRFM4Q.js";
|
|
22
23
|
|
|
23
24
|
// src/commands/secrets/pull.ts
|
|
24
25
|
import { defineCommand } from "citty";
|
|
@@ -80,4 +81,4 @@ var pull_default = defineCommand({
|
|
|
80
81
|
export {
|
|
81
82
|
pull_default as default
|
|
82
83
|
};
|
|
83
|
-
//# sourceMappingURL=pull-
|
|
84
|
+
//# sourceMappingURL=pull-CFDZS6VB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/secrets/pull.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport {\n filterInternalSecrets,\n mergeSecrets,\n readLocalSecretsFromConfig,\n writeLocalSecretsToConfig,\n} from \"@/utils/secrets-config\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"pull\",\n description: \"Pull remote secrets into local kalp.config.ts\",\n },\n args: {\n includeInternal: {\n type: \"boolean\",\n description: \"Include internal Kalp runtime secrets (KALP_*)\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets pull\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Reading remote secrets\");\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [remoteSecrets, localSecrets] = await Promise.all([\n provider.listSecrets({ cwd, configPath }),\n readLocalSecretsFromConfig(cwd),\n ]);\n\n const remoteNames = filterInternalSecrets(\n remoteSecrets.map((secret) => secret.name),\n args.includeInternal,\n );\n const merged = mergeSecrets(localSecrets, remoteNames);\n const added = merged.filter((name) => !localSecrets.includes(name));\n\n await writeLocalSecretsToConfig(cwd, merged);\n await generateTypes(cwd);\n\n spinner.stop(`Pulled ${remoteNames.length} remote secrets`);\n if (added.length > 0) {\n p.log.success(\n `Added to local config: ${added.map((name) => pc.cyan(name)).join(\", \")}`,\n );\n } else {\n p.log.info(pc.dim(\"Local config already up to date.\"));\n }\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Pull failed\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/secrets/pull.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport {\n filterInternalSecrets,\n mergeSecrets,\n readLocalSecretsFromConfig,\n writeLocalSecretsToConfig,\n} from \"@/utils/secrets-config\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"pull\",\n description: \"Pull remote secrets into local kalp.config.ts\",\n },\n args: {\n includeInternal: {\n type: \"boolean\",\n description: \"Include internal Kalp runtime secrets (KALP_*)\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets pull\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Reading remote secrets\");\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [remoteSecrets, localSecrets] = await Promise.all([\n provider.listSecrets({ cwd, configPath }),\n readLocalSecretsFromConfig(cwd),\n ]);\n\n const remoteNames = filterInternalSecrets(\n remoteSecrets.map((secret) => secret.name),\n args.includeInternal,\n );\n const merged = mergeSecrets(localSecrets, remoteNames);\n const added = merged.filter((name) => !localSecrets.includes(name));\n\n await writeLocalSecretsToConfig(cwd, merged);\n await generateTypes(cwd);\n\n spinner.stop(`Pulled ${remoteNames.length} remote secrets`);\n if (added.length > 0) {\n p.log.success(\n `Added to local config: ${added.map((name) => pc.cyan(name)).join(\", \")}`,\n );\n } else {\n p.log.info(pc.dim(\"Local config already up to date.\"));\n }\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Pull failed\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAYf,IAAM,OAAO;AAEb,IAAO,eAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,mBAAmB,CAAC,EAAE;AAEjD,UAAM,YAAY,EAAE,MAAM,MAAM;AAC9B,MAAE,MAAI,MAAM,4CAA4C;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,UAAMA,WAAY,UAAQ;AAC1B,IAAAA,SAAQ,MAAM,wBAAwB;AAEtC,QAAI;AACF,YAAM,aAAa,MAAM,gCAAgC,GAAG;AAC5D,YAAM,WAAW,gBAAgB;AACjC,YAAM,CAAC,eAAe,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,QACtD,SAAS,YAAY,EAAE,KAAK,WAAW,CAAC;AAAA,QACxC,2BAA2B,GAAG;AAAA,MAChC,CAAC;AAED,YAAM,cAAc;AAAA,QAClB,cAAc,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,QACzC,KAAK;AAAA,MACP;AACA,YAAM,SAAS,aAAa,cAAc,WAAW;AACrD,YAAM,QAAQ,OAAO,OAAO,CAAC,SAAS,CAAC,aAAa,SAAS,IAAI,CAAC;AAElE,YAAM,0BAA0B,KAAK,MAAM;AAC3C,YAAM,cAAc,GAAG;AAEvB,MAAAA,SAAQ,KAAK,UAAU,YAAY,MAAM,iBAAiB;AAC1D,UAAI,MAAM,SAAS,GAAG;AACpB,QAAE,MAAI;AAAA,UACJ,0BAA0B,MAAM,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,QACzE;AAAA,MACF,OAAO;AACL,QAAE,MAAI,KAAK,GAAG,IAAI,kCAAkC,CAAC;AAAA,MACvD;AACA,MAAE,QAAM,MAAM;AAAA,IAChB,SAAS,OAAO;AACd,MAAAA,SAAQ,KAAK,aAAa;AAC1B,MAAE,MAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":["spinner"]}
|
|
@@ -3,31 +3,39 @@ import {
|
|
|
3
3
|
computePushHash,
|
|
4
4
|
readAgentManifest,
|
|
5
5
|
validateCompiledIR
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7KVCCBPJ.js";
|
|
7
|
+
import {
|
|
8
|
+
collectMcpSecretRequirements
|
|
9
|
+
} from "./chunk-QT2JFINP.js";
|
|
10
|
+
import {
|
|
11
|
+
runInitialDeploy
|
|
12
|
+
} from "./chunk-DLUULDXW.js";
|
|
7
13
|
import {
|
|
8
14
|
promptDeployTarget,
|
|
9
|
-
runInitialDeploy,
|
|
10
15
|
showKalpCloudWaitlist
|
|
11
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-5YUU3KLB.js";
|
|
12
17
|
import "./chunk-NV2IZ4XM.js";
|
|
13
18
|
import {
|
|
14
19
|
generateTypes
|
|
15
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-DXNHT4HF.js";
|
|
16
21
|
import {
|
|
17
22
|
ensureConfig
|
|
18
23
|
} from "./chunk-INB3LG6O.js";
|
|
24
|
+
import {
|
|
25
|
+
requireAuth,
|
|
26
|
+
resolveProvider
|
|
27
|
+
} from "./chunk-D53K6UE6.js";
|
|
28
|
+
import "./chunk-FO24J6XL.js";
|
|
19
29
|
import {
|
|
20
30
|
materializeRuntime,
|
|
21
31
|
readLocalAgentNames,
|
|
22
32
|
readProjectState,
|
|
23
33
|
writeProjectState
|
|
24
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-JXR6TPR5.js";
|
|
25
35
|
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
import "./chunk-FO24J6XL.js";
|
|
30
|
-
import "./chunk-EXXTCGKR.js";
|
|
36
|
+
loadProjectConfig
|
|
37
|
+
} from "./chunk-EXXTCGKR.js";
|
|
38
|
+
import "./chunk-LEKRFM4Q.js";
|
|
31
39
|
|
|
32
40
|
// src/commands/push.ts
|
|
33
41
|
import { access, mkdir as mkdir2, rm, writeFile as writeFile2 } from "fs/promises";
|
|
@@ -40,13 +48,39 @@ import pc from "picocolors";
|
|
|
40
48
|
import { mkdir, writeFile } from "fs/promises";
|
|
41
49
|
import { join } from "path";
|
|
42
50
|
async function exportCompiledIrForDebug(params) {
|
|
43
|
-
const { cwd, agentName,
|
|
44
|
-
const outDir = join(cwd, ".kalp", "exports", agentName);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
await writeFile(
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
const { cwd, agentName, manifest } = params;
|
|
52
|
+
const outDir = join(cwd, ".kalp", "exports", agentName, "artifacts");
|
|
53
|
+
const bundlesDir = join(outDir, "targets", "default", "bundles");
|
|
54
|
+
await mkdir(bundlesDir, { recursive: true });
|
|
55
|
+
await writeFile(
|
|
56
|
+
join(outDir, "artifact-manifest.json"),
|
|
57
|
+
`${JSON.stringify(manifest.artifactManifest, null, 2)}
|
|
58
|
+
`,
|
|
59
|
+
"utf-8"
|
|
60
|
+
);
|
|
61
|
+
await writeFile(
|
|
62
|
+
join(outDir, "semantic-ir.json"),
|
|
63
|
+
`${JSON.stringify(manifest.semanticIr, null, 2)}
|
|
64
|
+
`,
|
|
65
|
+
"utf-8"
|
|
66
|
+
);
|
|
67
|
+
await writeFile(
|
|
68
|
+
join(outDir, "schemas.json"),
|
|
69
|
+
`${JSON.stringify(manifest.schemas, null, 2)}
|
|
70
|
+
`,
|
|
71
|
+
"utf-8"
|
|
72
|
+
);
|
|
73
|
+
await writeFile(
|
|
74
|
+
join(outDir, "bundle-manifest.json"),
|
|
75
|
+
`${JSON.stringify(manifest.bundleManifest, null, 2)}
|
|
76
|
+
`,
|
|
77
|
+
"utf-8"
|
|
78
|
+
);
|
|
79
|
+
for (const [bundleHash, bundle] of Object.entries(manifest.bundles)) {
|
|
80
|
+
const fileName = bundle.file.split("/").pop() ?? `${bundleHash}.js`;
|
|
81
|
+
await writeFile(join(bundlesDir, fileName), bundle.code, "utf-8");
|
|
82
|
+
}
|
|
83
|
+
return outDir;
|
|
50
84
|
}
|
|
51
85
|
|
|
52
86
|
// src/commands/push.ts
|
|
@@ -151,12 +185,19 @@ async function pruneStaleRemoteAgents(params) {
|
|
|
151
185
|
}).then(() => true).catch(() => false);
|
|
152
186
|
if (latestDeleted) deletedKeys += 1;
|
|
153
187
|
for (const hash of hashes) {
|
|
154
|
-
const
|
|
188
|
+
const artifactKeys = await provider.listKeys({
|
|
155
189
|
cwd,
|
|
156
190
|
configPath: wranglerConfigPath,
|
|
157
|
-
|
|
158
|
-
}).
|
|
159
|
-
|
|
191
|
+
prefix: `${entry.name}:${hash}:`
|
|
192
|
+
}).catch(() => []);
|
|
193
|
+
for (const artifactKey of artifactKeys) {
|
|
194
|
+
const deleted = await provider.deleteValue({
|
|
195
|
+
cwd,
|
|
196
|
+
configPath: wranglerConfigPath,
|
|
197
|
+
key: artifactKey.name
|
|
198
|
+
}).then(() => true).catch(() => false);
|
|
199
|
+
if (deleted) deletedKeys += 1;
|
|
200
|
+
}
|
|
160
201
|
}
|
|
161
202
|
}
|
|
162
203
|
const filtered = remoteEntries.filter((entry) => localSet.has(entry.name));
|
|
@@ -176,20 +217,60 @@ async function mergeRemoteAgentIndexEntry(params) {
|
|
|
176
217
|
await writeRemoteAgentsIndex(cwd, wranglerConfigPath, merged);
|
|
177
218
|
}
|
|
178
219
|
async function pushRemoteManifest(params) {
|
|
179
|
-
const { cwd, wranglerConfigPath, agentName, hash,
|
|
180
|
-
const manifestKey = `${agentName}:${hash}`;
|
|
220
|
+
const { cwd, wranglerConfigPath, agentName, hash, manifest } = params;
|
|
181
221
|
const latestKey = `${agentName}:latest`;
|
|
182
|
-
const
|
|
183
|
-
await mkdir2(
|
|
184
|
-
|
|
222
|
+
const artifactsDir = join2(cwd, ".kalp", `${agentName}-${hash}-artifacts`);
|
|
223
|
+
await mkdir2(artifactsDir, { recursive: true });
|
|
224
|
+
const artifactManifestPath = join2(artifactsDir, "artifact-manifest.json");
|
|
225
|
+
const semanticIrPath = join2(artifactsDir, "semantic-ir.json");
|
|
226
|
+
const schemasPath = join2(artifactsDir, "schemas.json");
|
|
227
|
+
const bundleManifestPath = join2(artifactsDir, "bundle-manifest.json");
|
|
228
|
+
await writeFile2(
|
|
229
|
+
artifactManifestPath,
|
|
230
|
+
JSON.stringify(manifest.artifactManifest),
|
|
231
|
+
"utf-8"
|
|
232
|
+
);
|
|
233
|
+
await writeFile2(semanticIrPath, JSON.stringify(manifest.semanticIr), "utf-8");
|
|
234
|
+
await writeFile2(schemasPath, JSON.stringify(manifest.schemas), "utf-8");
|
|
235
|
+
await writeFile2(
|
|
236
|
+
bundleManifestPath,
|
|
237
|
+
JSON.stringify(manifest.bundleManifest),
|
|
238
|
+
"utf-8"
|
|
239
|
+
);
|
|
185
240
|
const provider = resolveProvider();
|
|
186
241
|
try {
|
|
187
242
|
await provider.putManifest({
|
|
188
243
|
cwd,
|
|
189
244
|
configPath: wranglerConfigPath,
|
|
190
|
-
key:
|
|
191
|
-
jsonPath:
|
|
245
|
+
key: `${agentName}:${hash}:artifact-manifest`,
|
|
246
|
+
jsonPath: artifactManifestPath
|
|
247
|
+
});
|
|
248
|
+
await provider.putManifest({
|
|
249
|
+
cwd,
|
|
250
|
+
configPath: wranglerConfigPath,
|
|
251
|
+
key: `${agentName}:${hash}:semantic-ir`,
|
|
252
|
+
jsonPath: semanticIrPath
|
|
253
|
+
});
|
|
254
|
+
await provider.putManifest({
|
|
255
|
+
cwd,
|
|
256
|
+
configPath: wranglerConfigPath,
|
|
257
|
+
key: `${agentName}:${hash}:schemas`,
|
|
258
|
+
jsonPath: schemasPath
|
|
259
|
+
});
|
|
260
|
+
await provider.putManifest({
|
|
261
|
+
cwd,
|
|
262
|
+
configPath: wranglerConfigPath,
|
|
263
|
+
key: `${agentName}:${hash}:bundle-manifest`,
|
|
264
|
+
jsonPath: bundleManifestPath
|
|
192
265
|
});
|
|
266
|
+
for (const [bundleHash, bundle] of Object.entries(manifest.bundles)) {
|
|
267
|
+
await provider.putValue({
|
|
268
|
+
cwd,
|
|
269
|
+
configPath: wranglerConfigPath,
|
|
270
|
+
key: `${agentName}:${hash}:bundle:${bundleHash}`,
|
|
271
|
+
value: bundle.code
|
|
272
|
+
});
|
|
273
|
+
}
|
|
193
274
|
await provider.putValue({
|
|
194
275
|
cwd,
|
|
195
276
|
configPath: wranglerConfigPath,
|
|
@@ -197,7 +278,7 @@ async function pushRemoteManifest(params) {
|
|
|
197
278
|
value: hash
|
|
198
279
|
});
|
|
199
280
|
} finally {
|
|
200
|
-
await rm(
|
|
281
|
+
await rm(artifactsDir, { recursive: true, force: true });
|
|
201
282
|
}
|
|
202
283
|
}
|
|
203
284
|
var push_default = defineCommand({
|
|
@@ -214,6 +295,12 @@ var push_default = defineCommand({
|
|
|
214
295
|
description: "Update only local runtime snapshot and state",
|
|
215
296
|
required: false,
|
|
216
297
|
default: false
|
|
298
|
+
},
|
|
299
|
+
strictSecrets: {
|
|
300
|
+
type: "boolean",
|
|
301
|
+
description: "Fail if required MCP secrets are missing from remote runtime",
|
|
302
|
+
required: false,
|
|
303
|
+
default: false
|
|
217
304
|
}
|
|
218
305
|
},
|
|
219
306
|
async run({ args }) {
|
|
@@ -271,6 +358,37 @@ var push_default = defineCommand({
|
|
|
271
358
|
state.deployedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
272
359
|
}
|
|
273
360
|
runtime = await materializeRuntime(cwd, { mode: "remote" });
|
|
361
|
+
const { raw: config } = await loadProjectConfig(cwd);
|
|
362
|
+
const requiredMcpSecrets = collectMcpSecretRequirements(
|
|
363
|
+
config
|
|
364
|
+
);
|
|
365
|
+
if (requiredMcpSecrets.length > 0) {
|
|
366
|
+
const provider = resolveProvider();
|
|
367
|
+
const remoteSecrets = await provider.listSecrets({ cwd, configPath: runtime.wranglerConfigPath }).catch(() => []);
|
|
368
|
+
const remoteSecretNames = new Set(remoteSecrets.map((s) => s.name));
|
|
369
|
+
const missing = requiredMcpSecrets.filter(
|
|
370
|
+
(s) => !remoteSecretNames.has(s)
|
|
371
|
+
);
|
|
372
|
+
if (missing.length > 0) {
|
|
373
|
+
p.log.warn(
|
|
374
|
+
`${pc.yellow("\u26A0\uFE0F Missing MCP secrets detected in remote runtime:")}
|
|
375
|
+
` + missing.map((m) => ` - ${pc.bold(m)}`).join("\n")
|
|
376
|
+
);
|
|
377
|
+
if (args.strictSecrets) {
|
|
378
|
+
p.log.error(
|
|
379
|
+
pc.red(
|
|
380
|
+
"Push aborted due to missing required secrets (--strict-secrets is enabled)."
|
|
381
|
+
)
|
|
382
|
+
);
|
|
383
|
+
process.exit(1);
|
|
384
|
+
}
|
|
385
|
+
p.log.info(
|
|
386
|
+
pc.dim(
|
|
387
|
+
"Deployment will continue. You can add them later with `kalp secrets add`."
|
|
388
|
+
)
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
274
392
|
if (isBulkPush) {
|
|
275
393
|
const currentIndex = await readRemoteAgentsIndex(
|
|
276
394
|
cwd,
|
|
@@ -300,10 +418,10 @@ var push_default = defineCommand({
|
|
|
300
418
|
try {
|
|
301
419
|
spinner2.start(`Compiling ${pc.cyan(agentName)}`);
|
|
302
420
|
const manifest = await readAgentManifest({ cwd, agentName });
|
|
303
|
-
const hash = computePushHash(manifest
|
|
421
|
+
const hash = computePushHash(manifest);
|
|
304
422
|
const validation = validateCompiledIR({
|
|
305
423
|
agentName,
|
|
306
|
-
|
|
424
|
+
manifest,
|
|
307
425
|
hash
|
|
308
426
|
});
|
|
309
427
|
if (!validation.ok) {
|
|
@@ -320,13 +438,15 @@ var push_default = defineCommand({
|
|
|
320
438
|
continue;
|
|
321
439
|
}
|
|
322
440
|
if (target === "remote") {
|
|
323
|
-
spinner2.message(
|
|
441
|
+
spinner2.message(
|
|
442
|
+
`Uploading agent ${pc.cyan(agentName)} to remote runtime`
|
|
443
|
+
);
|
|
324
444
|
await pushRemoteManifest({
|
|
325
445
|
cwd,
|
|
326
446
|
wranglerConfigPath: runtime.wranglerConfigPath,
|
|
327
447
|
agentName,
|
|
328
448
|
hash,
|
|
329
|
-
|
|
449
|
+
manifest
|
|
330
450
|
});
|
|
331
451
|
}
|
|
332
452
|
agentState.currentVersion = Math.max(0, agentState.currentVersion) + 1;
|
|
@@ -345,8 +465,8 @@ var push_default = defineCommand({
|
|
|
345
465
|
versionNumber: agentState.currentVersion,
|
|
346
466
|
updatedAt: agentState.lastPushedAt,
|
|
347
467
|
workerUrl: agentState.workerUrl,
|
|
348
|
-
label: manifest.
|
|
349
|
-
tags: manifest.
|
|
468
|
+
label: manifest.semanticIr.agent?.label,
|
|
469
|
+
tags: manifest.semanticIr.agent?.tags
|
|
350
470
|
};
|
|
351
471
|
await mergeRemoteAgentIndexEntry({
|
|
352
472
|
cwd,
|
|
@@ -354,17 +474,16 @@ var push_default = defineCommand({
|
|
|
354
474
|
entry: nextEntry
|
|
355
475
|
});
|
|
356
476
|
}
|
|
357
|
-
const bundles = manifest.ir.bundles || {};
|
|
358
477
|
await exportCompiledIrForDebug({
|
|
359
478
|
cwd,
|
|
360
479
|
agentName,
|
|
361
|
-
|
|
480
|
+
manifest
|
|
362
481
|
});
|
|
363
|
-
const totalSize = Object.values(bundles).reduce(
|
|
482
|
+
const totalSize = Object.values(manifest.bundles).reduce(
|
|
364
483
|
(sum, bundle) => sum + Buffer.byteLength(bundle.code),
|
|
365
484
|
0
|
|
366
485
|
);
|
|
367
|
-
const handlerCount = Object.keys(bundles).length;
|
|
486
|
+
const handlerCount = Object.keys(manifest.bundles).length;
|
|
368
487
|
spinner2.stop(
|
|
369
488
|
`${pc.bold(agentName)} pushed ${pc.dim(`(v${agentState.currentVersion})`)} \xB7 ${handlerCount} handlers \xB7 ${formatBytes(totalSize)}`
|
|
370
489
|
);
|
|
@@ -382,13 +501,6 @@ var push_default = defineCommand({
|
|
|
382
501
|
`Successfully pushed ${result.pushed} agents. ${result.skipped} omitted (no changes). ${result.failed} failed.`,
|
|
383
502
|
target === "local" ? "Local push" : "Remote push"
|
|
384
503
|
);
|
|
385
|
-
if (target === "remote" && result.pushed > 0) {
|
|
386
|
-
p.log.info(
|
|
387
|
-
pc.dim(
|
|
388
|
-
"Changes propagating to remote Studio (eventual consistency, up to ~60s)."
|
|
389
|
-
)
|
|
390
|
-
);
|
|
391
|
-
}
|
|
392
504
|
if (failures.length > 0) {
|
|
393
505
|
for (const failure of failures) {
|
|
394
506
|
p.log.error(failure);
|
|
@@ -402,4 +514,4 @@ var push_default = defineCommand({
|
|
|
402
514
|
export {
|
|
403
515
|
push_default as default
|
|
404
516
|
};
|
|
405
|
-
//# sourceMappingURL=push-
|
|
517
|
+
//# sourceMappingURL=push-OL7562HM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { generateTypes } from \"@/utils/codegen\";\nimport { readAgentManifest, computePushHash } from \"@/utils/manifest\";\nimport type { AgentManifestV3 } 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\";\nimport {\n promptDeployTarget,\n showKalpCloudWaitlist,\n} from \"@/utils/deploy-target\";\nimport { loadProjectConfig } from \"@/utils/project-config\";\nimport {\n collectMcpSecretRequirements,\n type KalpProjectConfig,\n} from \"@kalphq/sdk\";\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: state.workerUrl\n ? `${state.workerUrl.replace(/\\/$/, \"\")}/a/${agentName}`\n : 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(\n (entry) => !localSet.has(entry.name),\n );\n\n if (staleEntries.length === 0) {\n return { removedAgents: [], deletedKeys: 0 };\n }\n\n const preview = staleEntries\n .slice(0, 3)\n .map((entry) => entry.name)\n .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 artifactKeys = await provider\n .listKeys({\n cwd,\n configPath: wranglerConfigPath,\n prefix: `${entry.name}:${hash}:`,\n })\n .catch(() => []);\n\n for (const artifactKey of artifactKeys) {\n const deleted = await provider\n .deleteValue({\n cwd,\n configPath: wranglerConfigPath,\n key: artifactKey.name,\n })\n .then(() => true)\n .catch(() => false);\n if (deleted) deletedKeys += 1;\n }\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\n .map((entry) => entry.name)\n .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 manifest: AgentManifestV3;\n}): Promise<void> {\n const { cwd, wranglerConfigPath, agentName, hash, manifest } = params;\n const latestKey = `${agentName}:latest`;\n const artifactsDir = join(cwd, \".kalp\", `${agentName}-${hash}-artifacts`);\n await mkdir(artifactsDir, { recursive: true });\n\n const artifactManifestPath = join(artifactsDir, \"artifact-manifest.json\");\n const semanticIrPath = join(artifactsDir, \"semantic-ir.json\");\n const schemasPath = join(artifactsDir, \"schemas.json\");\n const bundleManifestPath = join(artifactsDir, \"bundle-manifest.json\");\n\n await writeFile(\n artifactManifestPath,\n JSON.stringify(manifest.artifactManifest),\n \"utf-8\",\n );\n await writeFile(semanticIrPath, JSON.stringify(manifest.semanticIr), \"utf-8\");\n await writeFile(schemasPath, JSON.stringify(manifest.schemas), \"utf-8\");\n await writeFile(\n bundleManifestPath,\n JSON.stringify(manifest.bundleManifest),\n \"utf-8\",\n );\n\n const provider = resolveProvider();\n try {\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: `${agentName}:${hash}:artifact-manifest`,\n jsonPath: artifactManifestPath,\n });\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: `${agentName}:${hash}:semantic-ir`,\n jsonPath: semanticIrPath,\n });\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: `${agentName}:${hash}:schemas`,\n jsonPath: schemasPath,\n });\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: `${agentName}:${hash}:bundle-manifest`,\n jsonPath: bundleManifestPath,\n });\n\n for (const [bundleHash, bundle] of Object.entries(manifest.bundles)) {\n await provider.putValue({\n cwd,\n configPath: wranglerConfigPath,\n key: `${agentName}:${hash}:bundle:${bundleHash}`,\n value: bundle.code,\n });\n }\n\n await provider.putValue({\n cwd,\n configPath: wranglerConfigPath,\n key: latestKey,\n value: hash,\n });\n } finally {\n await rm(artifactsDir, { recursive: true, force: true });\n }\n}\n\nexport default defineCommand({\n meta: { name: \"push\", description: \"Upload updated agents\" },\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 strictSecrets: {\n type: \"boolean\",\n description:\n \"Fail if required MCP secrets are missing from remote runtime\",\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 await generateTypes(cwd);\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 const target = await promptDeployTarget(\n \"No remote runtime detected yet. Where do you want to deploy?\",\n );\n if (!target) {\n p.outro(\"Cancelled\");\n return;\n }\n if (target === \"kalp-cloud\") {\n showKalpCloudWaitlist();\n p.outro(pc.green(\"Got it — you'll hear from us soon.\"));\n return;\n }\n const s = p.spinner();\n s.start(\"Running initial deploy\");\n const deploy = await runInitialDeploy(cwd);\n s.stop(\"Initial deploy completed\");\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 // Validate MCP Secrets\n const { raw: config } = await loadProjectConfig(cwd);\n const requiredMcpSecrets = collectMcpSecretRequirements(\n config as unknown as KalpProjectConfig,\n );\n if (requiredMcpSecrets.length > 0) {\n const provider = resolveProvider();\n const remoteSecrets = await provider\n .listSecrets({ cwd, configPath: runtime.wranglerConfigPath })\n .catch(() => []);\n const remoteSecretNames = new Set(remoteSecrets.map((s) => s.name));\n const missing = requiredMcpSecrets.filter(\n (s) => !remoteSecretNames.has(s),\n );\n\n if (missing.length > 0) {\n p.log.warn(\n `${pc.yellow(\"⚠️ Missing MCP secrets detected in remote runtime:\")}\\n` +\n missing.map((m) => ` - ${pc.bold(m)}`).join(\"\\n\"),\n );\n if (args.strictSecrets) {\n p.log.error(\n pc.red(\n \"Push aborted due to missing required secrets (--strict-secrets is enabled).\",\n ),\n );\n process.exit(1);\n }\n p.log.info(\n pc.dim(\n \"Deployment will continue. You can add them later with `kalp secrets add`.\",\n ),\n );\n }\n }\n\n if (isBulkPush) {\n const currentIndex = await readRemoteAgentsIndex(\n cwd,\n runtime.wranglerConfigPath,\n );\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);\n const validation = validateCompiledIR({\n agentName,\n manifest,\n hash,\n });\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\"\n ? agentState.lastLocalHash\n : 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(\n `Uploading agent ${pc.cyan(agentName)} to remote runtime`,\n );\n await pushRemoteManifest({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n agentName,\n hash,\n manifest,\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.semanticIr.agent?.label,\n tags: manifest.semanticIr.agent?.tags,\n };\n await mergeRemoteAgentIndexEntry({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n entry: nextEntry,\n });\n }\n\n await exportCompiledIrForDebug({\n cwd,\n agentName,\n manifest,\n });\n const totalSize = Object.values(manifest.bundles).reduce(\n (sum, bundle) => sum + Buffer.byteLength(bundle.code),\n 0,\n );\n const handlerCount = Object.keys(manifest.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\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\";\nimport type { AgentManifestV3 } from \"@/utils/manifest/types\";\n\nexport async function exportCompiledIrForDebug(params: {\n cwd: string;\n agentName: string;\n manifest: AgentManifestV3;\n}): Promise<string> {\n const { cwd, agentName, manifest } = params;\n const outDir = join(cwd, \".kalp\", \"exports\", agentName, \"artifacts\");\n const bundlesDir = join(outDir, \"targets\", \"default\", \"bundles\");\n\n await mkdir(bundlesDir, { recursive: true });\n\n await writeFile(\n join(outDir, \"artifact-manifest.json\"),\n `${JSON.stringify(manifest.artifactManifest, null, 2)}\\n`,\n \"utf-8\",\n );\n await writeFile(\n join(outDir, \"semantic-ir.json\"),\n `${JSON.stringify(manifest.semanticIr, null, 2)}\\n`,\n \"utf-8\",\n );\n await writeFile(\n join(outDir, \"schemas.json\"),\n `${JSON.stringify(manifest.schemas, null, 2)}\\n`,\n \"utf-8\",\n );\n await writeFile(\n join(outDir, \"bundle-manifest.json\"),\n `${JSON.stringify(manifest.bundleManifest, null, 2)}\\n`,\n \"utf-8\",\n );\n\n for (const [bundleHash, bundle] of Object.entries(manifest.bundles)) {\n const fileName = bundle.file.split(\"/\").pop() ?? `${bundleHash}.js`;\n await writeFile(join(bundlesDir, fileName), bundle.code, \"utf-8\");\n }\n\n return outDir;\n}\n\n"],"mappings":"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","names":["mkdir","writeFile","join","join","writeFile","mkdir","target","spinner"]}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Kalp Studio</title>
|
|
7
|
+
<link rel="icon" type="image/x-icon" href="/studio/favicon.ico" />
|
|
8
|
+
<link rel="apple-touch-icon" href="/studio/logo192.png" />
|
|
9
|
+
<link rel="manifest" href="/studio/manifest.json" />
|
|
7
10
|
<script type="module" crossorigin src="/studio/assets/index-ByIyj_1b.js"></script>
|
|
8
11
|
<link rel="stylesheet" crossorigin href="/studio/assets/index-DhTweWW0.css">
|
|
9
12
|
</head>
|
|
@@ -19,11 +19,11 @@ var secrets_default = defineCommand({
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
subCommands: {
|
|
22
|
-
list: () => import("./list-
|
|
23
|
-
add: () => import("./add-
|
|
24
|
-
delete: () => import("./delete-
|
|
25
|
-
sync: () => import("./sync-
|
|
26
|
-
pull: () => import("./pull-
|
|
22
|
+
list: () => import("./list-WHYV5JZ4.js").then((r) => r.default),
|
|
23
|
+
add: () => import("./add-5WUS5HGV.js").then((r) => r.default),
|
|
24
|
+
delete: () => import("./delete-IFVGULOA.js").then((r) => r.default),
|
|
25
|
+
sync: () => import("./sync-JJDODKMO.js").then((r) => r.default),
|
|
26
|
+
pull: () => import("./pull-CFDZS6VB.js").then((r) => r.default)
|
|
27
27
|
},
|
|
28
28
|
run({ args }) {
|
|
29
29
|
if (!args.help) {
|
|
@@ -50,4 +50,4 @@ var secrets_default = defineCommand({
|
|
|
50
50
|
export {
|
|
51
51
|
secrets_default as default
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=secrets-
|
|
53
|
+
//# sourceMappingURL=secrets-BPESLXMK.js.map
|