@kalphq/cli 0.0.0-dev-20260513145227 → 0.0.0-dev-20260513152102
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-KTFK7GHV.js → add-YZSIMRPC.js} +3 -4
- package/dist/{add-KTFK7GHV.js.map → add-YZSIMRPC.js.map} +1 -1
- package/dist/{agents-QLWNNAXD.js → agents-WYK6WNQP.js} +3 -4
- package/dist/{agents-QLWNNAXD.js.map → agents-WYK6WNQP.js.map} +1 -1
- package/dist/{chunk-5J2WLD3O.js → chunk-4CEJYSJY.js} +5 -5
- package/dist/chunk-LPEV4QH2.js +208 -0
- package/dist/chunk-LPEV4QH2.js.map +1 -0
- package/dist/{create-265DBQ72.js → create-UCJ77P62.js} +2 -3
- package/dist/{create-265DBQ72.js.map → create-UCJ77P62.js.map} +1 -1
- package/dist/{delete-5RN5RRDK.js → delete-FIXMFFNZ.js} +3 -4
- package/dist/{delete-5RN5RRDK.js.map → delete-FIXMFFNZ.js.map} +1 -1
- package/dist/{delete-AF2GT6S4.js → delete-QPYVL4OU.js} +5 -6
- package/dist/{delete-AF2GT6S4.js.map → delete-QPYVL4OU.js.map} +1 -1
- package/dist/{deploy-RWZFKSHR.js → deploy-DRZZ3YRB.js} +4 -5
- package/dist/{deploy-RWZFKSHR.js.map → deploy-DRZZ3YRB.js.map} +1 -1
- package/dist/{dev-XI5WA3NA.js → dev-5YY6W4WM.js} +2 -3
- package/dist/{dev-XI5WA3NA.js.map → dev-5YY6W4WM.js.map} +1 -1
- package/dist/generate-JW2DMJ3W.js +391 -0
- package/dist/generate-JW2DMJ3W.js.map +1 -0
- package/dist/index.js +12 -10
- package/dist/index.js.map +1 -1
- package/dist/{list-NM727WK3.js → list-FKH4DWCF.js} +2 -3
- package/dist/{list-NM727WK3.js.map → list-FKH4DWCF.js.map} +1 -1
- package/dist/{list-SU5CSX3P.js → list-GZBBOFX5.js} +2 -3
- package/dist/{list-SU5CSX3P.js.map → list-GZBBOFX5.js.map} +1 -1
- package/dist/{login-G3RY64KU.js → login-MGPA2VYV.js} +1 -2
- package/dist/{login-G3RY64KU.js.map → login-MGPA2VYV.js.map} +1 -1
- package/dist/{logout-VVQ6OD4D.js → logout-U5V5K775.js} +1 -2
- package/dist/{logout-VVQ6OD4D.js.map → logout-U5V5K775.js.map} +1 -1
- package/dist/mcp-DRMQYA7E.js +39 -0
- package/dist/mcp-DRMQYA7E.js.map +1 -0
- package/dist/{pull-2ODHRCHG.js → pull-V7QJBVNZ.js} +3 -4
- package/dist/{pull-2ODHRCHG.js.map → pull-V7QJBVNZ.js.map} +1 -1
- package/dist/{push-7DIL7IRB.js → push-P6CKRYT7.js} +8 -9
- package/dist/{push-7DIL7IRB.js.map → push-P6CKRYT7.js.map} +1 -1
- package/dist/{secrets-RNM6LSXT.js → secrets-M43LLCTB.js} +6 -7
- package/dist/{secrets-RNM6LSXT.js.map → secrets-M43LLCTB.js.map} +1 -1
- package/dist/{sync-6EXHV3IT.js → sync-LTBH6DI5.js} +3 -4
- package/dist/{sync-6EXHV3IT.js.map → sync-LTBH6DI5.js.map} +1 -1
- package/package.json +5 -4
- package/dist/chunk-5ATINSVP.js +0 -210904
- package/dist/chunk-5ATINSVP.js.map +0 -1
- package/dist/chunk-ZWE3DS7E.js +0 -39
- package/dist/chunk-ZWE3DS7E.js.map +0 -1
- /package/dist/{chunk-5J2WLD3O.js.map → chunk-4CEJYSJY.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/agents/list.ts"],"sourcesContent":["import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n type RemoteAgentIndexEntry,\n readRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\nconst CACHE_TTL_MS = 20_000;\n\ninterface RemoteAgentListCache {\n cachedAt: string;\n entries: RemoteAgentIndexEntry[];\n}\n\nfunction pad(value: string, width: number): string {\n return value.length >= width\n ? value\n : `${value}${\" \".repeat(width - value.length)}`;\n}\n\nfunction renderTable(rows: RemoteAgentIndexEntry[]): void {\n const headers = {\n name: \"Agent\",\n version: \"Version\",\n updated: \"Updated\",\n status: \"Status\",\n };\n\n const widths = {\n name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),\n version: Math.max(\n headers.version.length,\n ...rows.map((r) => (r.version ?? \"—\").length),\n 7,\n ),\n updated: Math.max(\n headers.updated.length,\n ...rows.map((r) => (r.updatedAt || \"—\").length),\n 7,\n ),\n status: headers.status.length,\n };\n\n const divider = ` ${\"-\".repeat(widths.name)} ${\"-\".repeat(widths.version)} ${\"-\".repeat(widths.updated)} ${\"-\".repeat(widths.status)}`;\n console.log(\n ` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))} ${pc.bold(pad(headers.status, widths.status))}`,\n );\n console.log(pc.dim(divider));\n\n for (const row of rows) {\n const version = row.version ?? \"—\";\n const updated = row.updatedAt || \"—\";\n const statusText = \"online\";\n const status = `${pc.green(statusText)}${\" \".repeat(Math.max(0, widths.status - statusText.length))}`;\n console.log(\n ` ${pad(row.name, widths.name)} ${pad(version, widths.version)} ${pad(updated, widths.updated)} ${status}`,\n );\n }\n}\n\nfunction getCachePath(cwd: string): string {\n return join(cwd, \".kalp\", \"cache\", \"agents-list-remote.json\");\n}\n\nasync function readCache(cwd: string): Promise<RemoteAgentListCache | null> {\n const cachePath = getCachePath(cwd);\n try {\n await access(cachePath);\n } catch {\n return null;\n }\n\n const raw = await readFile(cachePath, \"utf-8\").catch(() => null);\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as RemoteAgentListCache;\n if (!parsed || !Array.isArray(parsed.entries) || !parsed.cachedAt) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(\n cwd: string,\n entries: RemoteAgentIndexEntry[],\n): Promise<void> {\n const cachePath = getCachePath(cwd);\n await mkdir(dirname(cachePath), { recursive: true });\n const payload: RemoteAgentListCache = {\n cachedAt: new Date().toISOString(),\n entries,\n };\n await writeFile(cachePath, JSON.stringify(payload, null, 2), \"utf-8\");\n}\n\nfunction isFresh(cache: RemoteAgentListCache): boolean {\n const cachedAt = Date.parse(cache.cachedAt);\n if (!Number.isFinite(cachedAt)) return false;\n return Date.now() - cachedAt <= CACHE_TTL_MS;\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List remote agents\",\n },\n args: {\n refresh: {\n type: \"boolean\",\n description: \"Force refresh remote data (skip cache)\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n default: false,\n description: \"Show help\",\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents list [--refresh]`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents 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 agents\");\n\n try {\n const cache = args.refresh ? null : await readCache(cwd);\n let entries: RemoteAgentIndexEntry[];\n\n if (cache && isFresh(cache)) {\n entries = cache.entries;\n spinner.stop(\n `Loaded ${entries.length} agents ${pc.dim(\"(cached, remote)\")}`,\n );\n } else {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n entries = await readRemoteAgentsIndex(cwd, configPath);\n await writeCache(cwd, entries).catch(() => null);\n spinner.stop(`Loaded ${entries.length} agents from remote runtime`);\n }\n\n const rows = [...entries].sort((a, b) => a.name.localeCompare(b.name));\n if (rows.length === 0) {\n p.log.info(pc.dim(\"No remote agents found.\"));\n return;\n }\n\n renderTable(rows);\n } catch (error) {\n spinner.stop(\"Failed to load remote agents\");\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/agents/list.ts"],"sourcesContent":["import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n type RemoteAgentIndexEntry,\n readRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\nconst CACHE_TTL_MS = 20_000;\n\ninterface RemoteAgentListCache {\n cachedAt: string;\n entries: RemoteAgentIndexEntry[];\n}\n\nfunction pad(value: string, width: number): string {\n return value.length >= width\n ? value\n : `${value}${\" \".repeat(width - value.length)}`;\n}\n\nfunction renderTable(rows: RemoteAgentIndexEntry[]): void {\n const headers = {\n name: \"Agent\",\n version: \"Version\",\n updated: \"Updated\",\n status: \"Status\",\n };\n\n const widths = {\n name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),\n version: Math.max(\n headers.version.length,\n ...rows.map((r) => (r.version ?? \"—\").length),\n 7,\n ),\n updated: Math.max(\n headers.updated.length,\n ...rows.map((r) => (r.updatedAt || \"—\").length),\n 7,\n ),\n status: headers.status.length,\n };\n\n const divider = ` ${\"-\".repeat(widths.name)} ${\"-\".repeat(widths.version)} ${\"-\".repeat(widths.updated)} ${\"-\".repeat(widths.status)}`;\n console.log(\n ` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))} ${pc.bold(pad(headers.status, widths.status))}`,\n );\n console.log(pc.dim(divider));\n\n for (const row of rows) {\n const version = row.version ?? \"—\";\n const updated = row.updatedAt || \"—\";\n const statusText = \"online\";\n const status = `${pc.green(statusText)}${\" \".repeat(Math.max(0, widths.status - statusText.length))}`;\n console.log(\n ` ${pad(row.name, widths.name)} ${pad(version, widths.version)} ${pad(updated, widths.updated)} ${status}`,\n );\n }\n}\n\nfunction getCachePath(cwd: string): string {\n return join(cwd, \".kalp\", \"cache\", \"agents-list-remote.json\");\n}\n\nasync function readCache(cwd: string): Promise<RemoteAgentListCache | null> {\n const cachePath = getCachePath(cwd);\n try {\n await access(cachePath);\n } catch {\n return null;\n }\n\n const raw = await readFile(cachePath, \"utf-8\").catch(() => null);\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as RemoteAgentListCache;\n if (!parsed || !Array.isArray(parsed.entries) || !parsed.cachedAt) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(\n cwd: string,\n entries: RemoteAgentIndexEntry[],\n): Promise<void> {\n const cachePath = getCachePath(cwd);\n await mkdir(dirname(cachePath), { recursive: true });\n const payload: RemoteAgentListCache = {\n cachedAt: new Date().toISOString(),\n entries,\n };\n await writeFile(cachePath, JSON.stringify(payload, null, 2), \"utf-8\");\n}\n\nfunction isFresh(cache: RemoteAgentListCache): boolean {\n const cachedAt = Date.parse(cache.cachedAt);\n if (!Number.isFinite(cachedAt)) return false;\n return Date.now() - cachedAt <= CACHE_TTL_MS;\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List remote agents\",\n },\n args: {\n refresh: {\n type: \"boolean\",\n description: \"Force refresh remote data (skip cache)\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n default: false,\n description: \"Show help\",\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents list [--refresh]`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents 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 agents\");\n\n try {\n const cache = args.refresh ? null : await readCache(cwd);\n let entries: RemoteAgentIndexEntry[];\n\n if (cache && isFresh(cache)) {\n entries = cache.entries;\n spinner.stop(\n `Loaded ${entries.length} agents ${pc.dim(\"(cached, remote)\")}`,\n );\n } else {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n entries = await readRemoteAgentsIndex(cwd, configPath);\n await writeCache(cwd, entries).catch(() => null);\n spinner.stop(`Loaded ${entries.length} agents from remote runtime`);\n }\n\n const rows = [...entries].sort((a, b) => a.name.localeCompare(b.name));\n if (rows.length === 0) {\n p.log.info(pc.dim(\"No remote agents found.\"));\n return;\n }\n\n renderTable(rows);\n } catch (error) {\n spinner.stop(\"Failed to load remote agents\");\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"]}
|
|
@@ -7,14 +7,13 @@ import {
|
|
|
7
7
|
resolveSecretsRuntimeConfigPath
|
|
8
8
|
} from "./chunk-IZXCZ3IA.js";
|
|
9
9
|
import "./chunk-INB3LG6O.js";
|
|
10
|
+
import "./chunk-XVD3FFOJ.js";
|
|
10
11
|
import {
|
|
11
12
|
requireAuth,
|
|
12
13
|
resolveProvider
|
|
13
14
|
} from "./chunk-S3KAVLVM.js";
|
|
14
15
|
import "./chunk-FO24J6XL.js";
|
|
15
|
-
import "./chunk-XVD3FFOJ.js";
|
|
16
16
|
import "./chunk-EXXTCGKR.js";
|
|
17
|
-
import "./chunk-ZWE3DS7E.js";
|
|
18
17
|
|
|
19
18
|
// src/commands/secrets/list.ts
|
|
20
19
|
import { defineCommand } from "citty";
|
|
@@ -110,4 +109,4 @@ var list_default = defineCommand({
|
|
|
110
109
|
export {
|
|
111
110
|
list_default as default
|
|
112
111
|
};
|
|
113
|
-
//# sourceMappingURL=list-
|
|
112
|
+
//# sourceMappingURL=list-GZBBOFX5.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"]}
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
saveAuthConfig
|
|
5
5
|
} from "./chunk-S3KAVLVM.js";
|
|
6
6
|
import "./chunk-FO24J6XL.js";
|
|
7
|
-
import "./chunk-ZWE3DS7E.js";
|
|
8
7
|
|
|
9
8
|
// src/commands/login.ts
|
|
10
9
|
import { defineCommand } from "citty";
|
|
@@ -57,4 +56,4 @@ var login_default = defineCommand({
|
|
|
57
56
|
export {
|
|
58
57
|
login_default as default
|
|
59
58
|
};
|
|
60
|
-
//# sourceMappingURL=login-
|
|
59
|
+
//# sourceMappingURL=login-MGPA2VYV.js.map
|
|
@@ -1 +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\";\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 provider = resolveProvider();\n const proceed = await p.confirm({\n message: \"Sign in to remote runtime now?\",\n initialValue: true,\n });\n if (p.isCancel(proceed) || !proceed) {\n p.outro(\"Cancelled\");\n return;\n }\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":"
|
|
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\";\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 provider = resolveProvider();\n const proceed = await p.confirm({\n message: \"Sign in to remote runtime now?\",\n initialValue: true,\n });\n if (p.isCancel(proceed) || !proceed) {\n p.outro(\"Cancelled\");\n return;\n }\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;AAOf,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,WAAW,gBAAgB;AACjC,UAAM,UAAU,MAAQ,UAAQ;AAAA,MAC9B,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AACD,QAAM,WAAS,OAAO,KAAK,CAAC,SAAS;AACnC,MAAE,QAAM,WAAW;AACnB;AAAA,IACF;AAEA,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":[]}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import {
|
|
3
3
|
getGlobalConfigDir
|
|
4
4
|
} from "./chunk-FO24J6XL.js";
|
|
5
|
-
import "./chunk-ZWE3DS7E.js";
|
|
6
5
|
|
|
7
6
|
// src/commands/logout.ts
|
|
8
7
|
import { defineCommand } from "citty";
|
|
@@ -30,4 +29,4 @@ var logout_default = defineCommand({
|
|
|
30
29
|
export {
|
|
31
30
|
logout_default as default
|
|
32
31
|
};
|
|
33
|
-
//# sourceMappingURL=logout-
|
|
32
|
+
//# sourceMappingURL=logout-U5V5K775.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/logout.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getGlobalConfigDir } from \"@/utils/config\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"logout\", description: \"Sign out from Kalp\" },\n async run() {\n p.intro(`${LOGO} ${pc.bold(\"kalp logout\")}`);\n\n const s = p.spinner();\n s.start(\"Signing out...\");\n\n try {\n await rm(join(getGlobalConfigDir(), \"auth.json\"), { force: true });\n s.stop(\"Signed out successfully\");\n p.outro(pc.green(\"Logged out from Kalp\"));\n } catch {\n s.stop(\"Nothing to do\");\n p.outro(pc.dim(\"No active session found\"));\n }\n },\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/logout.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getGlobalConfigDir } from \"@/utils/config\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"logout\", description: \"Sign out from Kalp\" },\n async run() {\n p.intro(`${LOGO} ${pc.bold(\"kalp logout\")}`);\n\n const s = p.spinner();\n s.start(\"Signing out...\");\n\n try {\n await rm(join(getGlobalConfigDir(), \"auth.json\"), { force: true });\n s.stop(\"Signed out successfully\");\n p.outro(pc.green(\"Logged out from Kalp\"));\n } catch {\n s.stop(\"Nothing to do\");\n p.outro(pc.dim(\"No active session found\"));\n }\n },\n});\n"],"mappings":";;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AACf,SAAS,UAAU;AACnB,SAAS,YAAY;AAGrB,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,EAC1D,MAAM,MAAM;AACV,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;AAE3C,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,gBAAgB;AAExB,QAAI;AACF,YAAM,GAAG,KAAK,mBAAmB,GAAG,WAAW,GAAG,EAAE,OAAO,KAAK,CAAC;AACjE,QAAE,KAAK,yBAAyB;AAChC,MAAE,QAAM,GAAG,MAAM,sBAAsB,CAAC;AAAA,IAC1C,QAAQ;AACN,QAAE,KAAK,eAAe;AACtB,MAAE,QAAM,GAAG,IAAI,yBAAyB,CAAC;AAAA,IAC3C;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/commands/mcp/index.ts
|
|
4
|
+
import { defineCommand } from "citty";
|
|
5
|
+
import * as p from "@clack/prompts";
|
|
6
|
+
import pc from "picocolors";
|
|
7
|
+
var LOGO = "\u{1F98B}";
|
|
8
|
+
var mcp_default = defineCommand({
|
|
9
|
+
meta: {
|
|
10
|
+
name: "mcp",
|
|
11
|
+
description: "Generate and manage MCP tool typing"
|
|
12
|
+
},
|
|
13
|
+
args: {
|
|
14
|
+
help: {
|
|
15
|
+
type: "boolean",
|
|
16
|
+
alias: "h",
|
|
17
|
+
description: "Show help",
|
|
18
|
+
default: false
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
subCommands: {
|
|
22
|
+
generate: () => import("./generate-JW2DMJ3W.js").then((r) => r.default)
|
|
23
|
+
},
|
|
24
|
+
run({ args }) {
|
|
25
|
+
const subcommand = process.argv[3];
|
|
26
|
+
if (subcommand && subcommand !== "--help" && subcommand !== "-h") {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
p.intro(`${LOGO} ${pc.bold("kalp mcp")}`);
|
|
30
|
+
p.log.message(pc.bold("Available subcommands:"));
|
|
31
|
+
p.log.message(` ${pc.cyan("generate")} Generate MCP types from kalp.config.ts`);
|
|
32
|
+
p.log.message("");
|
|
33
|
+
p.log.message(`Run ${pc.cyan("kalp mcp <subcommand> --help")} for more info.`);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
export {
|
|
37
|
+
mcp_default as default
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=mcp-DRMQYA7E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/mcp/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: \"mcp\",\n description: \"Generate and manage MCP tool typing\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n generate: () => import(\"./generate\").then((r) => r.default),\n },\n run({ args }) {\n const subcommand = process.argv[3];\n if (subcommand && subcommand !== \"--help\" && subcommand !== \"-h\") {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp mcp\")}`);\n p.log.message(pc.bold(\"Available subcommands:\"));\n p.log.message(` ${pc.cyan(\"generate\")} Generate MCP types from kalp.config.ts`);\n p.log.message(\"\");\n p.log.message(`Run ${pc.cyan(\"kalp mcp <subcommand> --help\")} for more info.`);\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAEf,IAAM,OAAO;AAEb,IAAO,cAAQ,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,UAAU,MAAM,OAAO,wBAAY,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,EAC5D;AAAA,EACA,IAAI,EAAE,KAAK,GAAG;AACZ,UAAM,aAAa,QAAQ,KAAK,CAAC;AACjC,QAAI,cAAc,eAAe,YAAY,eAAe,MAAM;AAChE;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,UAAU,CAAC,EAAE;AACxC,IAAE,MAAI,QAAQ,GAAG,KAAK,wBAAwB,CAAC;AAC/C,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,UAAU,CAAC,0CAA0C;AAChF,IAAE,MAAI,QAAQ,EAAE;AAChB,IAAE,MAAI,QAAQ,OAAO,GAAG,KAAK,8BAA8B,CAAC,iBAAiB;AAAA,EAC/E;AACF,CAAC;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
generateTypes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LPEV4QH2.js";
|
|
5
5
|
import {
|
|
6
6
|
filterInternalSecrets,
|
|
7
7
|
mergeSecrets,
|
|
@@ -12,14 +12,13 @@ import {
|
|
|
12
12
|
resolveSecretsRuntimeConfigPath
|
|
13
13
|
} from "./chunk-IZXCZ3IA.js";
|
|
14
14
|
import "./chunk-INB3LG6O.js";
|
|
15
|
+
import "./chunk-XVD3FFOJ.js";
|
|
15
16
|
import {
|
|
16
17
|
requireAuth,
|
|
17
18
|
resolveProvider
|
|
18
19
|
} from "./chunk-S3KAVLVM.js";
|
|
19
20
|
import "./chunk-FO24J6XL.js";
|
|
20
|
-
import "./chunk-XVD3FFOJ.js";
|
|
21
21
|
import "./chunk-EXXTCGKR.js";
|
|
22
|
-
import "./chunk-ZWE3DS7E.js";
|
|
23
22
|
|
|
24
23
|
// src/commands/secrets/pull.ts
|
|
25
24
|
import { defineCommand } from "citty";
|
|
@@ -81,4 +80,4 @@ var pull_default = defineCommand({
|
|
|
81
80
|
export {
|
|
82
81
|
pull_default as default
|
|
83
82
|
};
|
|
84
|
-
//# sourceMappingURL=pull-
|
|
83
|
+
//# sourceMappingURL=pull-V7QJBVNZ.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"]}
|
|
@@ -8,27 +8,26 @@ import {
|
|
|
8
8
|
promptDeployTarget,
|
|
9
9
|
runInitialDeploy,
|
|
10
10
|
showKalpCloudWaitlist
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-4CEJYSJY.js";
|
|
12
12
|
import "./chunk-NV2IZ4XM.js";
|
|
13
13
|
import {
|
|
14
14
|
generateTypes
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-LPEV4QH2.js";
|
|
16
16
|
import {
|
|
17
17
|
ensureConfig
|
|
18
18
|
} from "./chunk-INB3LG6O.js";
|
|
19
|
-
import {
|
|
20
|
-
requireAuth,
|
|
21
|
-
resolveProvider
|
|
22
|
-
} from "./chunk-S3KAVLVM.js";
|
|
23
|
-
import "./chunk-FO24J6XL.js";
|
|
24
19
|
import {
|
|
25
20
|
materializeRuntime,
|
|
26
21
|
readLocalAgentNames,
|
|
27
22
|
readProjectState,
|
|
28
23
|
writeProjectState
|
|
29
24
|
} from "./chunk-XVD3FFOJ.js";
|
|
25
|
+
import {
|
|
26
|
+
requireAuth,
|
|
27
|
+
resolveProvider
|
|
28
|
+
} from "./chunk-S3KAVLVM.js";
|
|
29
|
+
import "./chunk-FO24J6XL.js";
|
|
30
30
|
import "./chunk-EXXTCGKR.js";
|
|
31
|
-
import "./chunk-ZWE3DS7E.js";
|
|
32
31
|
|
|
33
32
|
// src/commands/push.ts
|
|
34
33
|
import { access, mkdir as mkdir2, rm, writeFile as writeFile2 } from "fs/promises";
|
|
@@ -403,4 +402,4 @@ var push_default = defineCommand({
|
|
|
403
402
|
export {
|
|
404
403
|
push_default as default
|
|
405
404
|
};
|
|
406
|
-
//# sourceMappingURL=push-
|
|
405
|
+
//# sourceMappingURL=push-P6CKRYT7.js.map
|
|
@@ -1 +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 { 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\";\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 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\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 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: \"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 },\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 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.ir);\n const validation = validateCompiledIR({\n agentName,\n ir: manifest.ir,\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(`Uploading agent ${pc.cyan(agentName)} to remote runtime`);\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","target","spinner"]}
|
|
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 { 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\";\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 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\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 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: \"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 },\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 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.ir);\n const validation = validateCompiledIR({\n agentName,\n ir: manifest.ir,\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(`Uploading agent ${pc.cyan(agentName)} to remote runtime`);\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","target","spinner"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-ZWE3DS7E.js";
|
|
3
2
|
|
|
4
3
|
// src/commands/secrets/index.ts
|
|
5
4
|
import { defineCommand } from "citty";
|
|
@@ -20,11 +19,11 @@ var secrets_default = defineCommand({
|
|
|
20
19
|
}
|
|
21
20
|
},
|
|
22
21
|
subCommands: {
|
|
23
|
-
list: () => import("./list-
|
|
24
|
-
add: () => import("./add-
|
|
25
|
-
delete: () => import("./delete-
|
|
26
|
-
sync: () => import("./sync-
|
|
27
|
-
pull: () => import("./pull-
|
|
22
|
+
list: () => import("./list-GZBBOFX5.js").then((r) => r.default),
|
|
23
|
+
add: () => import("./add-YZSIMRPC.js").then((r) => r.default),
|
|
24
|
+
delete: () => import("./delete-FIXMFFNZ.js").then((r) => r.default),
|
|
25
|
+
sync: () => import("./sync-LTBH6DI5.js").then((r) => r.default),
|
|
26
|
+
pull: () => import("./pull-V7QJBVNZ.js").then((r) => r.default)
|
|
28
27
|
},
|
|
29
28
|
run({ args }) {
|
|
30
29
|
if (!args.help) {
|
|
@@ -51,4 +50,4 @@ var secrets_default = defineCommand({
|
|
|
51
50
|
export {
|
|
52
51
|
secrets_default as default
|
|
53
52
|
};
|
|
54
|
-
//# sourceMappingURL=secrets-
|
|
53
|
+
//# sourceMappingURL=secrets-M43LLCTB.js.map
|
|
@@ -1 +1 @@
|
|
|
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 remote runtime 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 pull: () => import(\"./pull\").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 remote runtime`);\n p.log.message(` ${pc.cyan(\"add\")} Add a secret to remote runtime`);\n p.log.message(` ${pc.cyan(\"delete\")} Delete a secret from remote runtime`);\n p.log.message(\n ` ${pc.cyan(\"sync\")} Merge remote secrets into local config`,\n );\n p.log.message(\n ` ${pc.cyan(\"pull\")} Alias of sync (remote -> local merge)`,\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":"
|
|
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 remote runtime 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 pull: () => import(\"./pull\").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 remote runtime`);\n p.log.message(` ${pc.cyan(\"add\")} Add a secret to remote runtime`);\n p.log.message(` ${pc.cyan(\"delete\")} Delete a secret from remote runtime`);\n p.log.message(\n ` ${pc.cyan(\"sync\")} Merge remote secrets into local config`,\n );\n p.log.message(\n ` ${pc.cyan(\"pull\")} Alias of sync (remote -> local merge)`,\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,IAClD,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,qCAAqC;AACvE,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,KAAK,CAAC,oCAAoC;AACrE,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,QAAQ,CAAC,sCAAsC;AAC1E,IAAE,MAAI;AAAA,MACJ,KAAK,GAAG,KAAK,MAAM,CAAC;AAAA,IACtB;AACA,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,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
generateTypes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LPEV4QH2.js";
|
|
5
5
|
import {
|
|
6
6
|
filterInternalSecrets,
|
|
7
7
|
mergeSecrets,
|
|
@@ -12,14 +12,13 @@ import {
|
|
|
12
12
|
resolveSecretsRuntimeConfigPath
|
|
13
13
|
} from "./chunk-IZXCZ3IA.js";
|
|
14
14
|
import "./chunk-INB3LG6O.js";
|
|
15
|
+
import "./chunk-XVD3FFOJ.js";
|
|
15
16
|
import {
|
|
16
17
|
requireAuth,
|
|
17
18
|
resolveProvider
|
|
18
19
|
} from "./chunk-S3KAVLVM.js";
|
|
19
20
|
import "./chunk-FO24J6XL.js";
|
|
20
|
-
import "./chunk-XVD3FFOJ.js";
|
|
21
21
|
import "./chunk-EXXTCGKR.js";
|
|
22
|
-
import "./chunk-ZWE3DS7E.js";
|
|
23
22
|
|
|
24
23
|
// src/commands/secrets/sync.ts
|
|
25
24
|
import { defineCommand } from "citty";
|
|
@@ -81,4 +80,4 @@ var sync_default = defineCommand({
|
|
|
81
80
|
export {
|
|
82
81
|
sync_default as default
|
|
83
82
|
};
|
|
84
|
-
//# sourceMappingURL=sync-
|
|
83
|
+
//# sourceMappingURL=sync-LTBH6DI5.js.map
|
|
@@ -1 +1 @@
|
|
|
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 { 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: \"sync\",\n description: \"Merge 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 sync\")}`);\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(`Synced ${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(\"Sync 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/sync.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: \"sync\",\n description: \"Merge 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 sync\")}`);\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(`Synced ${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(\"Sync 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kalphq/cli",
|
|
3
|
-
"version": "0.0.0-dev-
|
|
3
|
+
"version": "0.0.0-dev-20260513152102",
|
|
4
4
|
"description": "Zero-config CLI for deploying Kalp agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,13 +23,14 @@
|
|
|
23
23
|
"execa": "^9.6.1",
|
|
24
24
|
"jiti": "^2.6.1",
|
|
25
25
|
"jose": "^5.10.0",
|
|
26
|
+
"json-schema-to-typescript": "^15.0.4",
|
|
26
27
|
"json-stable-stringify": "1.3.0",
|
|
27
28
|
"open": "^11.0.0",
|
|
28
29
|
"picocolors": "1.1.1",
|
|
29
30
|
"zod": "3.25.76",
|
|
30
|
-
"@kalphq/compiler": "0.0.0-dev-
|
|
31
|
-
"@kalphq/
|
|
32
|
-
"@kalphq/
|
|
31
|
+
"@kalphq/compiler": "0.0.0-dev-20260513152102",
|
|
32
|
+
"@kalphq/sdk": "0.0.0-dev-20260513152102",
|
|
33
|
+
"@kalphq/project": "0.0.0-dev-20260513152102"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@types/json-stable-stringify": "1.2.0",
|