@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/agents-remote.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { writeFile, rm } from \"node:fs/promises\";\nimport { resolveProvider } from \"@/utils/providers\";\n\nexport interface 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 ManifestMetadata {\n name?: string;\n label?: string;\n tags?: string[];\n}\n\nexport async 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\nexport async 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\nexport async function readRemoteAgentPointers(\n cwd: string,\n wranglerConfigPath: string,\n): Promise<Array<{ name: string; hash: string }>> {\n const provider = resolveProvider();\n const keys = await provider.listKeys({\n cwd,\n configPath: wranglerConfigPath,\n prefix: \"\",\n });\n const latestKeys = keys\n .map((item) => item.name)\n .filter((key) => key.endsWith(\":latest\"));\n\n const pointers: Array<{ name: string; hash: string }> = [];\n for (const latestKey of latestKeys) {\n const name = latestKey.slice(0, -7);\n if (!name) continue;\n const hash = await provider\n .getValue({ cwd, configPath: wranglerConfigPath, key: latestKey })\n .catch(() => null);\n if (!hash) continue;\n pointers.push({ name, hash });\n }\n return pointers.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function readRemoteManifestMetadata(params: {\n cwd: string;\n wranglerConfigPath: string;\n agentName: string;\n hash: string;\n}): Promise<ManifestMetadata | null> {\n const provider = resolveProvider();\n const raw = await provider\n .getValue({\n cwd: params.cwd,\n configPath: params.wranglerConfigPath,\n key: `${params.agentName}:${params.hash}`,\n })\n .catch(() => null);\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as {
|
|
1
|
+
{"version":3,"sources":["../src/utils/agents-remote.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { writeFile, rm } from \"node:fs/promises\";\nimport { resolveProvider } from \"@/utils/providers\";\n\nexport interface 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 ManifestMetadata {\n name?: string;\n label?: string;\n tags?: string[];\n}\n\nexport async 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\nexport async 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\nexport async function readRemoteAgentPointers(\n cwd: string,\n wranglerConfigPath: string,\n): Promise<Array<{ name: string; hash: string }>> {\n const provider = resolveProvider();\n const keys = await provider.listKeys({\n cwd,\n configPath: wranglerConfigPath,\n prefix: \"\",\n });\n const latestKeys = keys\n .map((item) => item.name)\n .filter((key) => key.endsWith(\":latest\"));\n\n const pointers: Array<{ name: string; hash: string }> = [];\n for (const latestKey of latestKeys) {\n const name = latestKey.slice(0, -7);\n if (!name) continue;\n const hash = await provider\n .getValue({ cwd, configPath: wranglerConfigPath, key: latestKey })\n .catch(() => null);\n if (!hash) continue;\n pointers.push({ name, hash });\n }\n return pointers.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function readRemoteManifestMetadata(params: {\n cwd: string;\n wranglerConfigPath: string;\n agentName: string;\n hash: string;\n}): Promise<ManifestMetadata | null> {\n const provider = resolveProvider();\n const raw = await provider\n .getValue({\n cwd: params.cwd,\n configPath: params.wranglerConfigPath,\n key: `${params.agentName}:${params.hash}:semantic-ir`,\n })\n .catch(() => null);\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as { agent?: ManifestMetadata };\n return parsed.agent ?? null;\n } catch {\n return null;\n }\n}\n"],"mappings":";;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,WAAW,UAAU;AAoB9B,eAAsB,sBACpB,KACA,oBACkC;AAClC,QAAM,WAAW,gBAAgB;AACjC,QAAM,SAAS,MAAM,SAClB,SAAS;AAAA,IACR;AAAA,IACA,YAAY;AAAA,IACZ,KAAK;AAAA,EACP,CAAC,EACA,MAAM,MAAM,IAAI;AACnB,MAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,MAAM;AAChC,QAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO,CAAC;AACpC,WAAO;AAAA,EACT,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAsB,uBACpB,KACA,oBACA,SACe;AACf,QAAM,OAAO,KAAK,KAAK,SAAS,mBAAmB;AACnD,QAAM,UAAU,MAAM,KAAK,UAAU,SAAS,MAAM,CAAC,GAAG,OAAO;AAC/D,QAAM,WAAW,gBAAgB;AACjC,MAAI;AACF,UAAM,SAAS,YAAY;AAAA,MACzB;AAAA,MACA,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,IACZ,CAAC;AAAA,EACH,UAAE;AACA,UAAM,GAAG,MAAM,EAAE,OAAO,KAAK,CAAC;AAAA,EAChC;AACF;AAEA,eAAsB,wBACpB,KACA,oBACgD;AAChD,QAAM,WAAW,gBAAgB;AACjC,QAAM,OAAO,MAAM,SAAS,SAAS;AAAA,IACnC;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,aAAa,KAChB,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,OAAO,CAAC,QAAQ,IAAI,SAAS,SAAS,CAAC;AAE1C,QAAM,WAAkD,CAAC;AACzD,aAAW,aAAa,YAAY;AAClC,UAAM,OAAO,UAAU,MAAM,GAAG,EAAE;AAClC,QAAI,CAAC,KAAM;AACX,UAAM,OAAO,MAAM,SAChB,SAAS,EAAE,KAAK,YAAY,oBAAoB,KAAK,UAAU,CAAC,EAChE,MAAM,MAAM,IAAI;AACnB,QAAI,CAAC,KAAM;AACX,aAAS,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,EAC9B;AACA,SAAO,SAAS,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAC7D;","names":[]}
|
|
@@ -1,48 +1,61 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from "./chunk-LPEV4QH2.js";
|
|
3
|
+
normalizeMcpServer
|
|
4
|
+
} from "./chunk-QT2JFINP.js";
|
|
6
5
|
import {
|
|
7
6
|
loadProjectConfig
|
|
8
7
|
} from "./chunk-EXXTCGKR.js";
|
|
9
8
|
|
|
10
|
-
// src/commands/mcp/generate.ts
|
|
11
|
-
import { defineCommand } from "citty";
|
|
12
|
-
import * as p from "@clack/prompts";
|
|
13
|
-
import pc from "picocolors";
|
|
14
|
-
import { cwd } from "process";
|
|
15
|
-
|
|
16
9
|
// src/utils/mcp-codegen.ts
|
|
10
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
11
|
+
import { join } from "path";
|
|
17
12
|
import { compile } from "json-schema-to-typescript";
|
|
18
13
|
var MCP_CLIENT_NAME = "kalp-cli";
|
|
19
14
|
var MCP_PROTOCOL_VERSION = "2025-06-18";
|
|
20
15
|
function asRecord(value) {
|
|
21
16
|
return value && typeof value === "object" ? value : null;
|
|
22
17
|
}
|
|
23
|
-
function isMcpTransport(value) {
|
|
24
|
-
return value === "sse" || value === "stdio";
|
|
25
|
-
}
|
|
26
18
|
function toPascalCase(value) {
|
|
27
19
|
const normalized = value.replace(/[^a-zA-Z0-9]+/g, " ").trim().split(/\s+/g).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
28
20
|
if (!normalized) return "Generated";
|
|
29
21
|
return /^[0-9]/.test(normalized) ? `N${normalized}` : normalized;
|
|
30
22
|
}
|
|
31
23
|
function getServerConfigs(raw) {
|
|
32
|
-
const
|
|
33
|
-
if (!mcp) return {};
|
|
24
|
+
const mcpInput = raw.mcp || {};
|
|
34
25
|
const servers = {};
|
|
35
|
-
for (const [serverName,
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
26
|
+
for (const [serverName, serverInput] of Object.entries(mcpInput)) {
|
|
27
|
+
const normalized = normalizeMcpServer(serverInput);
|
|
28
|
+
const { url, transport, auth } = normalized;
|
|
29
|
+
if (!url || !url.trim()) continue;
|
|
30
|
+
const headers = {};
|
|
31
|
+
let skipAuth = false;
|
|
32
|
+
if (auth) {
|
|
33
|
+
if (auth.type === "bearer") {
|
|
34
|
+
if (auth.tokenEnv && !process.env[auth.tokenEnv]) {
|
|
35
|
+
console.warn(`[MCP] \u26A0\uFE0F Warning: Missing local environment variable "${auth.tokenEnv}" for server "${serverName}". Skipping authenticated introspection.`);
|
|
36
|
+
skipAuth = true;
|
|
37
|
+
} else if (auth.token) {
|
|
38
|
+
headers["authorization"] = `Bearer ${auth.token}`;
|
|
39
|
+
}
|
|
40
|
+
} else if (auth.type === "headers") {
|
|
41
|
+
for (const [k, v] of Object.entries(auth.headers)) {
|
|
42
|
+
headers[k.toLowerCase()] = v;
|
|
43
|
+
}
|
|
44
|
+
for (const [k, envName] of Object.entries(auth.headersEnv)) {
|
|
45
|
+
if (!process.env[envName]) {
|
|
46
|
+
console.warn(`[MCP] \u26A0\uFE0F Warning: Missing local environment variable "${envName}" for header "${k}" in server "${serverName}". Skipping authenticated introspection.`);
|
|
47
|
+
skipAuth = true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (skipAuth) {
|
|
53
|
+
for (const k in headers) delete headers[k];
|
|
42
54
|
}
|
|
43
55
|
servers[serverName] = {
|
|
44
56
|
transport,
|
|
45
|
-
url: url.trim()
|
|
57
|
+
url: url.trim(),
|
|
58
|
+
headers
|
|
46
59
|
};
|
|
47
60
|
}
|
|
48
61
|
return servers;
|
|
@@ -62,23 +75,51 @@ function createRpcPayload(id, method, params) {
|
|
|
62
75
|
method
|
|
63
76
|
};
|
|
64
77
|
}
|
|
65
|
-
|
|
78
|
+
var MCP_SESSIONS = /* @__PURE__ */ new Map();
|
|
79
|
+
async function postJsonRpc(url, body, protocolVersion, extraHeaders = {}) {
|
|
80
|
+
const headers = {
|
|
81
|
+
...extraHeaders,
|
|
82
|
+
"content-type": "application/json",
|
|
83
|
+
accept: "application/json, text/event-stream",
|
|
84
|
+
"MCP-Protocol-Version": protocolVersion
|
|
85
|
+
};
|
|
86
|
+
const sessionId = MCP_SESSIONS.get(url);
|
|
87
|
+
if (sessionId) {
|
|
88
|
+
headers["MCP-Session-Id"] = sessionId;
|
|
89
|
+
}
|
|
66
90
|
const response = await fetch(url, {
|
|
67
91
|
method: "POST",
|
|
68
|
-
headers
|
|
69
|
-
"content-type": "application/json",
|
|
70
|
-
accept: "application/json",
|
|
71
|
-
"MCP-Protocol-Version": protocolVersion
|
|
72
|
-
},
|
|
92
|
+
headers,
|
|
73
93
|
body: JSON.stringify(body)
|
|
74
94
|
});
|
|
75
95
|
const text = await response.text();
|
|
76
96
|
if (!response.ok) {
|
|
77
97
|
throw new Error(`Request failed with HTTP ${response.status}: ${text.slice(0, 300)}`);
|
|
78
98
|
}
|
|
99
|
+
const sessionHeader = response.headers.get("mcp-session-id");
|
|
100
|
+
if (sessionHeader) {
|
|
101
|
+
MCP_SESSIONS.set(url, sessionHeader);
|
|
102
|
+
}
|
|
103
|
+
let jsonText = text;
|
|
104
|
+
if (text.includes("event: message") && text.includes("data: {")) {
|
|
105
|
+
const lines = text.split(/\r?\n/);
|
|
106
|
+
if (!sessionHeader) {
|
|
107
|
+
const idLine = lines.find((line) => line.startsWith("id: "));
|
|
108
|
+
if (idLine) {
|
|
109
|
+
const capturedId = idLine.slice(4).trim();
|
|
110
|
+
if (capturedId) {
|
|
111
|
+
MCP_SESSIONS.set(url, capturedId);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const dataLine = lines.find((line) => line.startsWith("data: "));
|
|
116
|
+
if (dataLine) {
|
|
117
|
+
jsonText = dataLine.slice(6).trim();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
79
120
|
let parsed;
|
|
80
121
|
try {
|
|
81
|
-
parsed = JSON.parse(
|
|
122
|
+
parsed = JSON.parse(jsonText);
|
|
82
123
|
} catch {
|
|
83
124
|
throw new Error(`Invalid JSON-RPC response payload: ${text.slice(0, 300)}`);
|
|
84
125
|
}
|
|
@@ -88,7 +129,7 @@ async function postJsonRpc(url, body, protocolVersion) {
|
|
|
88
129
|
}
|
|
89
130
|
return record;
|
|
90
131
|
}
|
|
91
|
-
async function initializeServer(url) {
|
|
132
|
+
async function initializeServer(url, headers) {
|
|
92
133
|
const initResponse = await postJsonRpc(
|
|
93
134
|
url,
|
|
94
135
|
createRpcPayload(1, "initialize", {
|
|
@@ -96,7 +137,8 @@ async function initializeServer(url) {
|
|
|
96
137
|
capabilities: {},
|
|
97
138
|
clientInfo: { name: MCP_CLIENT_NAME, version: "0.1.0" }
|
|
98
139
|
}),
|
|
99
|
-
MCP_PROTOCOL_VERSION
|
|
140
|
+
MCP_PROTOCOL_VERSION,
|
|
141
|
+
headers
|
|
100
142
|
);
|
|
101
143
|
if ("error" in initResponse) {
|
|
102
144
|
throw new Error(
|
|
@@ -110,7 +152,8 @@ async function initializeServer(url) {
|
|
|
110
152
|
jsonrpc: "2.0",
|
|
111
153
|
method: "notifications/initialized"
|
|
112
154
|
},
|
|
113
|
-
negotiatedVersion
|
|
155
|
+
negotiatedVersion,
|
|
156
|
+
headers
|
|
114
157
|
).catch(() => {
|
|
115
158
|
});
|
|
116
159
|
return negotiatedVersion;
|
|
@@ -138,7 +181,7 @@ async function fetchServerTools(serverName, config) {
|
|
|
138
181
|
const warnings = [];
|
|
139
182
|
if (config.transport !== "sse") {
|
|
140
183
|
warnings.push(
|
|
141
|
-
`Server "${serverName}" uses "${config.transport}" transport and was skipped. Only "sse" transport is supported
|
|
184
|
+
`Server "${serverName}" uses "${config.transport}" transport and was skipped. Only "sse" transport is supported.`
|
|
142
185
|
);
|
|
143
186
|
return {
|
|
144
187
|
serverName,
|
|
@@ -148,7 +191,7 @@ async function fetchServerTools(serverName, config) {
|
|
|
148
191
|
warnings
|
|
149
192
|
};
|
|
150
193
|
}
|
|
151
|
-
const protocolVersion = await initializeServer(config.url);
|
|
194
|
+
const protocolVersion = await initializeServer(config.url, config.headers);
|
|
152
195
|
const tools = [];
|
|
153
196
|
let cursor;
|
|
154
197
|
let page = 0;
|
|
@@ -158,7 +201,8 @@ async function fetchServerTools(serverName, config) {
|
|
|
158
201
|
const response = await postJsonRpc(
|
|
159
202
|
config.url,
|
|
160
203
|
createRpcPayload(`tools-list-${page + 1}`, "tools/list", params),
|
|
161
|
-
protocolVersion
|
|
204
|
+
protocolVersion,
|
|
205
|
+
config.headers
|
|
162
206
|
);
|
|
163
207
|
if ("error" in response) {
|
|
164
208
|
throw new Error(
|
|
@@ -269,8 +313,7 @@ async function compileServerToolTypes(serverResults, warnings) {
|
|
|
269
313
|
function renderMcpTypes(declarations, servers) {
|
|
270
314
|
const lines = [
|
|
271
315
|
"// \u{1F98B} Kalp Generated MCP Types",
|
|
272
|
-
"// This file is auto-generated
|
|
273
|
-
"// Do not edit manually.",
|
|
316
|
+
"// This file is auto-generated. Do not edit manually.",
|
|
274
317
|
"",
|
|
275
318
|
'import "@kalphq/sdk";',
|
|
276
319
|
""
|
|
@@ -297,95 +340,59 @@ function renderMcpTypes(declarations, servers) {
|
|
|
297
340
|
lines.push("");
|
|
298
341
|
return lines.join("\n");
|
|
299
342
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
(
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
343
|
+
var McpTypesGenerator = class {
|
|
344
|
+
id = "mcp";
|
|
345
|
+
name = "MCP Types";
|
|
346
|
+
async generate(cwd) {
|
|
347
|
+
const generatedDir = join(cwd, ".kalp", "generated");
|
|
348
|
+
const mcpPath = join(generatedDir, "mcp.d.ts");
|
|
349
|
+
await mkdir(generatedDir, { recursive: true });
|
|
350
|
+
const { raw } = await loadProjectConfig(cwd);
|
|
351
|
+
const servers = getServerConfigs(raw);
|
|
352
|
+
const warnings = [];
|
|
353
|
+
const serverResults = [];
|
|
354
|
+
for (const [serverName, config] of Object.entries(servers).sort(
|
|
355
|
+
(a, b) => a[0].localeCompare(b[0])
|
|
356
|
+
)) {
|
|
357
|
+
try {
|
|
358
|
+
const result = await fetchServerTools(serverName, config);
|
|
359
|
+
serverResults.push(result);
|
|
360
|
+
warnings.push(...result.warnings);
|
|
361
|
+
} catch (error) {
|
|
362
|
+
const message = `Failed to introspect "${serverName}" (${config.url}): ${error instanceof Error ? error.message : String(error)}`;
|
|
363
|
+
warnings.push(message);
|
|
364
|
+
serverResults.push({
|
|
365
|
+
serverName,
|
|
366
|
+
transport: config.transport,
|
|
367
|
+
url: config.url,
|
|
368
|
+
tools: [],
|
|
369
|
+
warnings: [message]
|
|
370
|
+
});
|
|
316
371
|
}
|
|
317
|
-
warnings.push(message);
|
|
318
|
-
serverResults.push({
|
|
319
|
-
serverName,
|
|
320
|
-
transport: config.transport,
|
|
321
|
-
url: config.url,
|
|
322
|
-
tools: [],
|
|
323
|
-
warnings: [message]
|
|
324
|
-
});
|
|
325
372
|
}
|
|
373
|
+
const compiled = await compileServerToolTypes(serverResults, warnings);
|
|
374
|
+
const content = renderMcpTypes(compiled.declarations, compiled.servers);
|
|
375
|
+
const existing = await readFile(mcpPath, "utf-8").catch(() => null);
|
|
376
|
+
if (existing === content) {
|
|
377
|
+
return { updated: false, warnings };
|
|
378
|
+
}
|
|
379
|
+
await writeFile(mcpPath, content, "utf-8");
|
|
380
|
+
return { updated: true, warnings };
|
|
326
381
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
const
|
|
382
|
+
};
|
|
383
|
+
async function generateMcpTypes(cwd, options = {}) {
|
|
384
|
+
const gen = new McpTypesGenerator();
|
|
385
|
+
const res = await gen.generate(cwd);
|
|
330
386
|
return {
|
|
331
|
-
outputPath,
|
|
332
|
-
servers:
|
|
333
|
-
|
|
387
|
+
outputPath: join(cwd, ".kalp", "generated", "mcp.d.ts"),
|
|
388
|
+
servers: [],
|
|
389
|
+
// Not fully compatible legacy shape, but fine for now
|
|
390
|
+
warnings: res.warnings || []
|
|
334
391
|
};
|
|
335
392
|
}
|
|
336
393
|
|
|
337
|
-
// src/commands/mcp/generate.ts
|
|
338
|
-
var LOGO = "\u{1F98B}";
|
|
339
|
-
var generate_default = defineCommand({
|
|
340
|
-
meta: {
|
|
341
|
-
name: "generate",
|
|
342
|
-
description: "Generate MCP tool types into .kalp/mcp.types.d.ts"
|
|
343
|
-
},
|
|
344
|
-
args: {
|
|
345
|
-
strict: {
|
|
346
|
-
type: "boolean",
|
|
347
|
-
description: "Fail when at least one MCP server cannot be introspected",
|
|
348
|
-
default: false
|
|
349
|
-
}
|
|
350
|
-
},
|
|
351
|
-
async run({ args }) {
|
|
352
|
-
p.intro(`${LOGO} ${pc.bold("kalp mcp generate")}`);
|
|
353
|
-
const spinner2 = p.spinner();
|
|
354
|
-
spinner2.start("Discovering MCP servers and generating types");
|
|
355
|
-
try {
|
|
356
|
-
const projectCwd = cwd();
|
|
357
|
-
await generateTypes(projectCwd);
|
|
358
|
-
const result = await generateMcpTypes(projectCwd, {
|
|
359
|
-
strict: args.strict
|
|
360
|
-
});
|
|
361
|
-
spinner2.stop("MCP type generation completed");
|
|
362
|
-
if (result.servers.length === 0) {
|
|
363
|
-
p.log.warn(
|
|
364
|
-
"No MCP servers found in kalp.config.ts. Generated an empty McpRegistry."
|
|
365
|
-
);
|
|
366
|
-
} else {
|
|
367
|
-
for (const server of result.servers) {
|
|
368
|
-
p.log.info(
|
|
369
|
-
`${pc.bold(server.serverName)} (${server.transport}) -> ${server.tools.length} tools`
|
|
370
|
-
);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
if (result.warnings.length > 0) {
|
|
374
|
-
p.log.warn(pc.bold("Warnings:"));
|
|
375
|
-
for (const warning of result.warnings) {
|
|
376
|
-
p.log.warn(`- ${warning}`);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
p.outro(`Types written to ${pc.cyan(result.outputPath)}`);
|
|
380
|
-
} catch (error) {
|
|
381
|
-
spinner2.stop("MCP type generation failed");
|
|
382
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
383
|
-
p.cancel(message);
|
|
384
|
-
process.exitCode = 1;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
394
|
export {
|
|
389
|
-
|
|
395
|
+
McpTypesGenerator,
|
|
396
|
+
generateMcpTypes
|
|
390
397
|
};
|
|
391
|
-
//# sourceMappingURL=
|
|
398
|
+
//# sourceMappingURL=chunk-ZX7TIQM7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/mcp-codegen.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { loadProjectConfig } from \"@/utils/project-config\";\nimport { compile } from \"json-schema-to-typescript\";\nimport { normalizeMcpServer, type NormalizedMcpServer } from \"@kalphq/sdk\";\nimport type { ProjectGenerator, GeneratorResult } from \"./sync\";\n\nconst MCP_CLIENT_NAME = \"kalp-cli\";\nconst MCP_PROTOCOL_VERSION = \"2025-06-18\";\n\ntype McpTransport = \"sse\" | \"stdio\";\n\ninterface McpServerConfigInput {\n transport: McpTransport;\n url: string;\n headers: Record<string, string>;\n}\n\ninterface McpToolDefinition {\n name: string;\n inputSchema?: unknown;\n outputSchema?: unknown;\n}\n\ninterface McpServerTypesResult {\n serverName: string;\n transport: McpTransport;\n url: string;\n tools: McpToolDefinition[];\n warnings: string[];\n}\n\nexport interface McpGenerateResult {\n outputPath: string;\n servers: McpServerTypesResult[];\n warnings: string[];\n}\n\ninterface JsonRpcSuccess<T> {\n jsonrpc: \"2.0\";\n id?: string | number;\n result: T;\n}\n\ninterface JsonRpcFailure {\n jsonrpc: \"2.0\";\n id?: string | number;\n error: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\ntype JsonRpcResponse<T> = JsonRpcSuccess<T> | JsonRpcFailure;\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction toPascalCase(value: string): string {\n const normalized = value\n .replace(/[^a-zA-Z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/g)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n\n if (!normalized) return \"Generated\";\n return /^[0-9]/.test(normalized) ? `N${normalized}` : normalized;\n}\n\nfunction getServerConfigs(raw: Record<string, unknown>): Record<string, McpServerConfigInput> {\n const mcpInput = (raw.mcp || {}) as Record<string, any>;\n const servers: Record<string, McpServerConfigInput> = {};\n\n for (const [serverName, serverInput] of Object.entries(mcpInput)) {\n const normalized = normalizeMcpServer(serverInput);\n const { url, transport, auth } = normalized;\n\n if (!url || !url.trim()) continue;\n\n const headers: Record<string, string> = {};\n let skipAuth = false;\n\n if (auth) {\n if (auth.type === \"bearer\") {\n if (auth.tokenEnv && !process.env[auth.tokenEnv]) {\n console.warn(`[MCP] ⚠️ Warning: Missing local environment variable \"${auth.tokenEnv}\" for server \"${serverName}\". Skipping authenticated introspection.`);\n skipAuth = true;\n } else if (auth.token) {\n headers[\"authorization\"] = `Bearer ${auth.token}`;\n }\n } else if (auth.type === \"headers\") {\n for (const [k, v] of Object.entries(auth.headers)) {\n headers[k.toLowerCase()] = v;\n }\n // Check if any required env vars for headers are missing\n for (const [k, envName] of Object.entries(auth.headersEnv)) {\n if (!process.env[envName]) {\n console.warn(`[MCP] ⚠️ Warning: Missing local environment variable \"${envName}\" for header \"${k}\" in server \"${serverName}\". Skipping authenticated introspection.`);\n skipAuth = true;\n }\n }\n }\n }\n\n if (skipAuth) {\n // Clear all headers if auth is broken\n for (const k in headers) delete headers[k];\n }\n\n servers[serverName] = {\n transport,\n url: url.trim(),\n headers,\n };\n }\n\n return servers;\n}\n\nfunction createRpcPayload(\n id: number | string,\n method: string,\n params?: Record<string, unknown>,\n): Record<string, unknown> {\n if (params) {\n return {\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n };\n }\n\n return {\n jsonrpc: \"2.0\",\n id,\n method,\n };\n}\n\n\nconst MCP_SESSIONS = new Map<string, string>();\n\nasync function postJsonRpc<T>(\n url: string,\n body: Record<string, unknown>,\n protocolVersion: string,\n extraHeaders: Record<string, string> = {},\n): Promise<JsonRpcResponse<T>> {\n const headers: Record<string, string> = {\n ...extraHeaders,\n \"content-type\": \"application/json\",\n accept: \"application/json, text/event-stream\",\n \"MCP-Protocol-Version\": protocolVersion,\n };\n\n const sessionId = MCP_SESSIONS.get(url);\n if (sessionId) {\n headers[\"MCP-Session-Id\"] = sessionId;\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n\n const text = await response.text();\n\n if (!response.ok) {\n throw new Error(`Request failed with HTTP ${response.status}: ${text.slice(0, 300)}`);\n }\n\n // Capture session ID from headers if present\n const sessionHeader = response.headers.get(\"mcp-session-id\");\n if (sessionHeader) {\n MCP_SESSIONS.set(url, sessionHeader);\n }\n\n let jsonText = text;\n\n if (text.includes(\"event: message\") && text.includes(\"data: {\")) {\n const lines = text.split(/\\r?\\n/);\n\n if (!sessionHeader) {\n const idLine = lines.find((line) => line.startsWith(\"id: \"));\n if (idLine) {\n const capturedId = idLine.slice(4).trim();\n if (capturedId) {\n MCP_SESSIONS.set(url, capturedId);\n }\n }\n }\n\n const dataLine = lines.find((line) => line.startsWith(\"data: \"));\n if (dataLine) {\n jsonText = dataLine.slice(6).trim();\n }\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonText);\n } catch {\n throw new Error(`Invalid JSON-RPC response payload: ${text.slice(0, 300)}`);\n }\n\n const record = asRecord(parsed);\n if (!record) {\n throw new Error(\"Invalid JSON-RPC response shape.\");\n }\n\n return record as unknown as JsonRpcResponse<T>;\n}\n\nasync function initializeServer(\n url: string,\n headers: Record<string, string>,\n): Promise<string> {\n const initResponse = await postJsonRpc<{ protocolVersion?: string }>(\n url,\n createRpcPayload(1, \"initialize\", {\n protocolVersion: MCP_PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: { name: MCP_CLIENT_NAME, version: \"0.1.0\" },\n }),\n MCP_PROTOCOL_VERSION,\n headers,\n );\n\n if (\"error\" in initResponse) {\n throw new Error(\n `initialize failed (${initResponse.error.code}): ${initResponse.error.message}`,\n );\n }\n\n const negotiatedVersion =\n typeof initResponse.result?.protocolVersion === \"string\"\n ? initResponse.result.protocolVersion\n : MCP_PROTOCOL_VERSION;\n\n await postJsonRpc(\n url,\n {\n jsonrpc: \"2.0\",\n method: \"notifications/initialized\",\n },\n negotiatedVersion,\n headers,\n ).catch(() => {\n });\n\n return negotiatedVersion;\n}\n\nfunction parseToolsFromResponse(value: unknown): {\n tools: McpToolDefinition[];\n nextCursor?: string;\n} {\n const record = asRecord(value);\n if (!record) return { tools: [] };\n\n const nextCursor =\n typeof record.nextCursor === \"string\" ? record.nextCursor : undefined;\n const rawTools = Array.isArray(record.tools) ? record.tools : [];\n\n const tools: McpToolDefinition[] = [];\n for (const item of rawTools) {\n const tool = asRecord(item);\n if (!tool) continue;\n const name = typeof tool.name === \"string\" ? tool.name.trim() : \"\";\n if (!name) continue;\n\n tools.push({\n name,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema,\n });\n }\n\n return { tools, nextCursor };\n}\n\nasync function fetchServerTools(\n serverName: string,\n config: McpServerConfigInput,\n): Promise<McpServerTypesResult> {\n const warnings: string[] = [];\n\n if (config.transport !== \"sse\") {\n warnings.push(\n `Server \"${serverName}\" uses \"${config.transport}\" transport and was skipped. Only \"sse\" transport is supported.`,\n );\n return {\n serverName,\n transport: config.transport,\n url: config.url,\n tools: [],\n warnings,\n };\n }\n\n const protocolVersion = await initializeServer(config.url, config.headers);\n const tools: McpToolDefinition[] = [];\n\n let cursor: string | undefined;\n let page = 0;\n const seen = new Set<string>();\n\n while (page < 200) {\n const params = cursor ? { cursor } : {};\n const response = await postJsonRpc<{ tools?: unknown[]; nextCursor?: string }>(\n config.url,\n createRpcPayload(`tools-list-${page + 1}`, \"tools/list\", params),\n protocolVersion,\n config.headers,\n );\n\n if (\"error\" in response) {\n throw new Error(\n `tools/list failed (${response.error.code}): ${response.error.message}`,\n );\n }\n\n const parsed = parseToolsFromResponse(response.result);\n for (const tool of parsed.tools) {\n if (seen.has(tool.name)) continue;\n seen.add(tool.name);\n tools.push(tool);\n }\n\n page += 1;\n if (!parsed.nextCursor || parsed.nextCursor === cursor) {\n break;\n }\n cursor = parsed.nextCursor;\n }\n\n if (page >= 200) {\n warnings.push(\n `Server \"${serverName}\" reached the pagination safety limit while listing tools.`,\n );\n }\n\n return {\n serverName,\n transport: config.transport,\n url: config.url,\n tools: tools.sort((a, b) => a.name.localeCompare(b.name)),\n warnings,\n };\n}\n\nfunction isSchemaObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nasync function compileSchemaType(\n schema: unknown,\n typeName: string,\n): Promise<{ declaration: string; warning?: string } | null> {\n if (!isSchemaObject(schema)) return null;\n\n try {\n const declaration = await compile(schema as any, typeName, {\n bannerComment: \"\",\n unreachableDefinitions: true,\n style: {\n semi: true,\n },\n unknownAny: true,\n });\n return { declaration: declaration.trim() };\n } catch (error) {\n return {\n declaration: `export type ${typeName} = unknown;`,\n warning: `Could not compile schema for ${typeName}. Falling back to unknown.`,\n };\n }\n}\n\ninterface CompiledMcpTool {\n name: string;\n inputTypeName: string;\n outputTypeName: string;\n}\n\ninterface CompiledServer {\n result: McpServerTypesResult;\n tools: CompiledMcpTool[];\n}\n\nasync function compileServerToolTypes(\n serverResults: McpServerTypesResult[],\n warnings: string[],\n): Promise<{\n declarations: string[];\n servers: CompiledServer[];\n}> {\n const declarationMap = new Map<string, string>();\n const usedTypeNames = new Set<string>();\n const servers: CompiledServer[] = [];\n\n const reserveTypeName = (baseName: string): string => {\n if (!usedTypeNames.has(baseName)) {\n usedTypeNames.add(baseName);\n return baseName;\n }\n let suffix = 2;\n while (usedTypeNames.has(`${baseName}${suffix}`)) {\n suffix += 1;\n }\n const nextName = `${baseName}${suffix}`;\n usedTypeNames.add(nextName);\n return nextName;\n };\n\n for (const server of serverResults) {\n const tools: CompiledMcpTool[] = [];\n for (const tool of server.tools) {\n const baseName = `${toPascalCase(server.serverName)}${toPascalCase(tool.name)}`;\n const inputTypeName = reserveTypeName(`${baseName}Input`);\n const outputTypeName = reserveTypeName(`${baseName}Output`);\n\n const inputDeclaration = await compileSchemaType(tool.inputSchema, inputTypeName);\n if (inputDeclaration?.declaration) {\n declarationMap.set(inputTypeName, inputDeclaration.declaration);\n } else {\n declarationMap.set(inputTypeName, `export type ${inputTypeName} = unknown;`);\n }\n if (inputDeclaration?.warning) {\n warnings.push(inputDeclaration.warning);\n }\n\n const outputDeclaration = await compileSchemaType(tool.outputSchema, outputTypeName);\n if (outputDeclaration?.declaration) {\n declarationMap.set(outputTypeName, outputDeclaration.declaration);\n } else {\n declarationMap.set(outputTypeName, `export type ${outputTypeName} = unknown;`);\n }\n if (outputDeclaration?.warning) {\n warnings.push(outputDeclaration.warning);\n }\n\n tools.push({\n name: tool.name,\n inputTypeName,\n outputTypeName,\n });\n }\n servers.push({ result: server, tools });\n }\n\n return {\n declarations: Array.from(declarationMap.values()),\n servers,\n };\n}\n\nfunction renderMcpTypes(\n declarations: string[],\n servers: CompiledServer[],\n): string {\n const lines: string[] = [\n \"// 🦋 Kalp Generated MCP Types\",\n \"// This file is auto-generated. Do not edit manually.\",\n \"\",\n \"import \\\"@kalphq/sdk\\\";\",\n \"\",\n ];\n\n if (declarations.length > 0) {\n for (const declaration of declarations) {\n lines.push(declaration.trim());\n lines.push(\"\");\n }\n }\n\n lines.push('declare module \"@kalphq/sdk\" {');\n lines.push(\" interface McpRegistry {\");\n for (const server of servers) {\n lines.push(` ${JSON.stringify(server.result.serverName)}: {`);\n for (const tool of server.tools) {\n lines.push(\n ` ${JSON.stringify(tool.name)}: (input: ${tool.inputTypeName}) => Promise<${tool.outputTypeName}>;`,\n );\n }\n lines.push(\" };\");\n }\n lines.push(\" }\");\n lines.push(\"}\");\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n\nexport class McpTypesGenerator implements ProjectGenerator {\n id = \"mcp\";\n name = \"MCP Types\";\n\n async generate(cwd: string): Promise<GeneratorResult> {\n const generatedDir = join(cwd, \".kalp\", \"generated\");\n const mcpPath = join(generatedDir, \"mcp.d.ts\");\n\n await mkdir(generatedDir, { recursive: true });\n\n const { raw } = await loadProjectConfig(cwd);\n const servers = getServerConfigs(raw);\n const warnings: string[] = [];\n\n const serverResults: McpServerTypesResult[] = [];\n for (const [serverName, config] of Object.entries(servers).sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n try {\n const result = await fetchServerTools(serverName, config);\n serverResults.push(result);\n warnings.push(...result.warnings);\n } catch (error) {\n const message = `Failed to introspect \"${serverName}\" (${config.url}): ${\n error instanceof Error ? error.message : String(error)\n }`;\n warnings.push(message);\n serverResults.push({\n serverName,\n transport: config.transport,\n url: config.url,\n tools: [],\n warnings: [message],\n });\n }\n }\n\n const compiled = await compileServerToolTypes(serverResults, warnings);\n const content = renderMcpTypes(compiled.declarations, compiled.servers);\n\n // Check if update is needed\n const existing = await readFile(mcpPath, \"utf-8\").catch(() => null);\n if (existing === content) {\n return { updated: false, warnings };\n }\n\n await writeFile(mcpPath, content, \"utf-8\");\n return { updated: true, warnings };\n }\n}\n\n/**\n * Legacy export for backward compatibility during refactor.\n * @deprecated Use ProjectSynchronizer instead.\n */\nexport async function generateMcpTypes(\n cwd: string,\n options: { strict?: boolean } = {},\n): Promise<McpGenerateResult> {\n const gen = new McpTypesGenerator();\n const res = await gen.generate(cwd);\n \n return {\n outputPath: join(cwd, \".kalp\", \"generated\", \"mcp.d.ts\"),\n servers: [], // Not fully compatible legacy shape, but fine for now\n warnings: res.warnings || [],\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
generateTypes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DXNHT4HF.js";
|
|
5
5
|
import {
|
|
6
6
|
isProjectInitialized
|
|
7
7
|
} from "./chunk-INB3LG6O.js";
|
|
@@ -148,4 +148,4 @@ var create_default = defineCommand({
|
|
|
148
148
|
export {
|
|
149
149
|
create_default as default
|
|
150
150
|
};
|
|
151
|
-
//# sourceMappingURL=create-
|
|
151
|
+
//# sourceMappingURL=create-ILPQCRA2.js.map
|
|
@@ -3,21 +3,22 @@ import {
|
|
|
3
3
|
readRemoteAgentPointers,
|
|
4
4
|
readRemoteAgentsIndex,
|
|
5
5
|
writeRemoteAgentsIndex
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TNNBTSDC.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveSecretsRuntimeConfigPath
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4CPUJ537.js";
|
|
10
10
|
import "./chunk-INB3LG6O.js";
|
|
11
|
-
import {
|
|
12
|
-
readProjectState,
|
|
13
|
-
writeProjectState
|
|
14
|
-
} from "./chunk-XVD3FFOJ.js";
|
|
15
11
|
import {
|
|
16
12
|
requireAuth,
|
|
17
13
|
resolveProvider
|
|
18
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-D53K6UE6.js";
|
|
19
15
|
import "./chunk-FO24J6XL.js";
|
|
16
|
+
import {
|
|
17
|
+
readProjectState,
|
|
18
|
+
writeProjectState
|
|
19
|
+
} from "./chunk-JXR6TPR5.js";
|
|
20
20
|
import "./chunk-EXXTCGKR.js";
|
|
21
|
+
import "./chunk-LEKRFM4Q.js";
|
|
21
22
|
|
|
22
23
|
// src/commands/agents/delete.ts
|
|
23
24
|
import { defineCommand } from "citty";
|
|
@@ -142,4 +143,4 @@ var delete_default = defineCommand({
|
|
|
142
143
|
export {
|
|
143
144
|
delete_default as default
|
|
144
145
|
};
|
|
145
|
-
//# sourceMappingURL=delete-
|
|
146
|
+
//# sourceMappingURL=delete-AJFAAGYJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/agents/delete.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n readRemoteAgentPointers,\n readRemoteAgentsIndex,\n writeRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { readProjectState, writeProjectState } from \"@/utils/project-state\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete an agent from remote runtime\",\n },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to delete from remote runtime\",\n required: true,\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation\",\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 if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents delete -a <agent>`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents delete\")}`);\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 configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [indexEntries, pointers] = await Promise.all([\n readRemoteAgentsIndex(cwd, configPath),\n readRemoteAgentPointers(cwd, configPath),\n ]);\n\n const indexByName = new Map(\n indexEntries.map((entry) => [entry.name, entry]),\n );\n const pointerByName = new Map(\n pointers.map((entry) => [entry.name, entry.hash]),\n );\n const remoteNames = [...new Set([...indexByName.keys(), ...pointerByName.keys()])].sort(\n (a, b) => a.localeCompare(b),\n );\n\n spinner.stop(`Found ${remoteNames.length} remote agents`);\n if (remoteNames.length === 0) {\n p.log.info(pc.dim(\"No remote agents available to delete.\"));\n p.outro(\"Done\");\n return;\n }\n\n const agentName = args.agent?.trim();\n if (!agentName) {\n p.log.error(\n `Agent name is required. Use ${pc.cyan(\"kalp agents delete -a <agent>\")}.`,\n );\n process.exit(1);\n }\n\n if (!remoteNames.includes(agentName)) {\n p.log.error(`Agent ${pc.cyan(agentName)} is not deployed remotely.`);\n process.exit(1);\n }\n\n if (!args.yes) {\n const confirm = await p.confirm({\n message: `Delete ${pc.cyan(agentName)} from remote runtime?`,\n initialValue: false,\n });\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\");\n return;\n }\n }\n\n const hashes = new Set<string>();\n const pointerHash = pointerByName.get(agentName);\n if (pointerHash) hashes.add(pointerHash);\n const indexedHash = indexByName.get(agentName)?.hash;\n if (indexedHash) hashes.add(indexedHash);\n\n spinner.start(`Deleting ${pc.cyan(agentName)} from remote runtime`);\n const latestKey = `${agentName}:latest`;\n await provider\n .deleteValue({ cwd, configPath, key: latestKey })\n .catch(() => null);\n for (const hash of hashes) {\n await provider\n .deleteValue({ cwd, configPath, key: `${agentName}:${hash}` })\n .catch(() => null);\n }\n\n const filteredIndex = indexEntries.filter(\n (entry) => entry.name !== agentName,\n );\n await writeRemoteAgentsIndex(cwd, configPath, filteredIndex);\n\n const state = await readProjectState(cwd);\n if (state?.agents?.[agentName]) {\n state.agents[agentName].lastRemoteHash = null;\n state.agents[agentName].workerUrl = null;\n await writeProjectState(cwd, state);\n }\n\n spinner.stop(`Deleted remote agent ${pc.cyan(agentName)}`);\n p.log.info(\n pc.dim(\n `Local files were not changed. Delete ./agents/${agentName} manually if you no longer need it.`,\n ),\n );\n } catch (error) {\n spinner.stop(\"Failed to delete remote agent\");\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/delete.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n readRemoteAgentPointers,\n readRemoteAgentsIndex,\n writeRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { readProjectState, writeProjectState } from \"@/utils/project-state\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete an agent from remote runtime\",\n },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to delete from remote runtime\",\n required: true,\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation\",\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 if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents delete -a <agent>`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents delete\")}`);\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 configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [indexEntries, pointers] = await Promise.all([\n readRemoteAgentsIndex(cwd, configPath),\n readRemoteAgentPointers(cwd, configPath),\n ]);\n\n const indexByName = new Map(\n indexEntries.map((entry) => [entry.name, entry]),\n );\n const pointerByName = new Map(\n pointers.map((entry) => [entry.name, entry.hash]),\n );\n const remoteNames = [...new Set([...indexByName.keys(), ...pointerByName.keys()])].sort(\n (a, b) => a.localeCompare(b),\n );\n\n spinner.stop(`Found ${remoteNames.length} remote agents`);\n if (remoteNames.length === 0) {\n p.log.info(pc.dim(\"No remote agents available to delete.\"));\n p.outro(\"Done\");\n return;\n }\n\n const agentName = args.agent?.trim();\n if (!agentName) {\n p.log.error(\n `Agent name is required. Use ${pc.cyan(\"kalp agents delete -a <agent>\")}.`,\n );\n process.exit(1);\n }\n\n if (!remoteNames.includes(agentName)) {\n p.log.error(`Agent ${pc.cyan(agentName)} is not deployed remotely.`);\n process.exit(1);\n }\n\n if (!args.yes) {\n const confirm = await p.confirm({\n message: `Delete ${pc.cyan(agentName)} from remote runtime?`,\n initialValue: false,\n });\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\");\n return;\n }\n }\n\n const hashes = new Set<string>();\n const pointerHash = pointerByName.get(agentName);\n if (pointerHash) hashes.add(pointerHash);\n const indexedHash = indexByName.get(agentName)?.hash;\n if (indexedHash) hashes.add(indexedHash);\n\n spinner.start(`Deleting ${pc.cyan(agentName)} from remote runtime`);\n const latestKey = `${agentName}:latest`;\n await provider\n .deleteValue({ cwd, configPath, key: latestKey })\n .catch(() => null);\n for (const hash of hashes) {\n await provider\n .deleteValue({ cwd, configPath, key: `${agentName}:${hash}` })\n .catch(() => null);\n }\n\n const filteredIndex = indexEntries.filter(\n (entry) => entry.name !== agentName,\n );\n await writeRemoteAgentsIndex(cwd, configPath, filteredIndex);\n\n const state = await readProjectState(cwd);\n if (state?.agents?.[agentName]) {\n state.agents[agentName].lastRemoteHash = null;\n state.agents[agentName].workerUrl = null;\n await writeProjectState(cwd, state);\n }\n\n spinner.stop(`Deleted remote agent ${pc.cyan(agentName)}`);\n p.log.info(\n pc.dim(\n `Local files were not changed. Delete ./agents/${agentName} manually if you no longer need it.`,\n ),\n );\n } catch (error) {\n spinner.stop(\"Failed to delete remote agent\");\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","confirm"]}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
generateTypes
|
|
4
|
-
} from "./chunk-LPEV4QH2.js";
|
|
5
2
|
import {
|
|
6
3
|
readLocalSecretsFromConfig,
|
|
7
4
|
writeLocalSecretsToConfig
|
|
8
5
|
} from "./chunk-YE2SFYAJ.js";
|
|
6
|
+
import {
|
|
7
|
+
generateTypes
|
|
8
|
+
} from "./chunk-DXNHT4HF.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveSecretsRuntimeConfigPath
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-4CPUJ537.js";
|
|
12
12
|
import "./chunk-INB3LG6O.js";
|
|
13
|
-
import "./chunk-XVD3FFOJ.js";
|
|
14
13
|
import {
|
|
15
14
|
requireAuth,
|
|
16
15
|
resolveProvider
|
|
17
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-D53K6UE6.js";
|
|
18
17
|
import "./chunk-FO24J6XL.js";
|
|
18
|
+
import "./chunk-JXR6TPR5.js";
|
|
19
19
|
import "./chunk-EXXTCGKR.js";
|
|
20
|
+
import "./chunk-LEKRFM4Q.js";
|
|
20
21
|
|
|
21
22
|
// src/commands/secrets/delete.ts
|
|
22
23
|
import { defineCommand } from "citty";
|
|
@@ -78,17 +79,24 @@ var delete_default = defineCommand({
|
|
|
78
79
|
p.outro("Done");
|
|
79
80
|
return;
|
|
80
81
|
}
|
|
81
|
-
let key = args.key?.trim();
|
|
82
|
+
let key = args._[0]?.trim() || args.key?.trim();
|
|
82
83
|
if (!key) {
|
|
83
|
-
const
|
|
84
|
-
message: "
|
|
85
|
-
|
|
84
|
+
const input = await p.text({
|
|
85
|
+
message: "Enter the name of the secret to delete",
|
|
86
|
+
placeholder: "STRIPE_SECRET_KEY",
|
|
87
|
+
validate: (v) => {
|
|
88
|
+
if (!v) return "Key is required";
|
|
89
|
+
}
|
|
86
90
|
});
|
|
87
|
-
if (p.isCancel(
|
|
91
|
+
if (p.isCancel(input)) {
|
|
88
92
|
p.outro("Cancelled");
|
|
89
93
|
return;
|
|
90
94
|
}
|
|
91
|
-
key = String(
|
|
95
|
+
key = String(input).trim();
|
|
96
|
+
}
|
|
97
|
+
if (key.startsWith("KALP_")) {
|
|
98
|
+
p.log.error("Secrets starting with KALP_ are reserved and cannot be deleted.");
|
|
99
|
+
process.exit(1);
|
|
92
100
|
}
|
|
93
101
|
const existsRemote = remoteSecrets.some((secret) => secret.name === key);
|
|
94
102
|
if (!existsRemote) {
|
|
@@ -127,4 +135,4 @@ var delete_default = defineCommand({
|
|
|
127
135
|
export {
|
|
128
136
|
delete_default as default
|
|
129
137
|
};
|
|
130
|
-
//# sourceMappingURL=delete-
|
|
138
|
+
//# sourceMappingURL=delete-IFVGULOA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/secrets/delete.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { readLocalSecretsFromConfig, writeLocalSecretsToConfig } from \"@/utils/secrets-config\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a secret from remote runtime and local config\",\n },\n args: {\n key: {\n type: \"string\",\n alias: \"k\",\n description: \"Secret key to delete\",\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation prompt\",\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 delete -k <KEY>`);\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets delete\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n let configPath: string;\n try {\n configPath = await resolveSecretsRuntimeConfigPath(cwd);\n } catch (error) {\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n const provider = resolveProvider();\n let remoteSecrets;\n try {\n remoteSecrets = await provider.listSecrets({ cwd, configPath });\n } catch (error) {\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n if (!remoteSecrets || remoteSecrets.length === 0) {\n p.log.info(pc.dim(\"No remote secrets to delete.\"));\n p.outro(\"Done\");\n return;\n }\n\n let key = args._[0]?.trim() || args.key?.trim();\n if (!key) {\n const input = await p.text({\n message: \"Enter the name of the secret to delete\",\n placeholder: \"STRIPE_SECRET_KEY\",\n validate: (v) => {\n if (!v) return \"Key is required\";\n },\n });\n if (p.isCancel(input)) {\n p.outro(\"Cancelled\");\n return;\n }\n key = String(input).trim();\n }\n\n if (key.startsWith(\"KALP_\")) {\n p.log.error(\"Secrets starting with KALP_ are reserved and cannot be deleted.\");\n process.exit(1);\n }\n\n const existsRemote = remoteSecrets.some((secret) => secret.name === key);\n if (!existsRemote) {\n p.log.error(`Secret ${pc.cyan(key)} not found in remote runtime.`);\n process.exit(1);\n }\n\n if (!args.yes) {\n const confirmed = await p.confirm({\n message: `Delete ${pc.cyan(key)} from remote runtime and local config?`,\n initialValue: false,\n });\n if (p.isCancel(confirmed) || !confirmed) {\n p.outro(\"Cancelled\");\n return;\n }\n }\n\n const spinner = p.spinner();\n spinner.start(`Deleting ${pc.cyan(key)}`);\n\n try {\n await provider.deleteSecret({ cwd, configPath, name: key });\n const localSecrets = await readLocalSecretsFromConfig(cwd);\n await writeLocalSecretsToConfig(\n cwd,\n localSecrets.filter((secret) => secret !== key),\n );\n await generateTypes(cwd);\n\n spinner.stop(`Secret ${pc.cyan(key)} deleted`);\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Failed to delete secret\");\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;AAOf,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AAExB,QAAI,KAAK,MAAM;AACb,MAAE,MAAI,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,gCAAgC;AAC9D;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,qBAAqB,CAAC,EAAE;AAEnD,UAAM,YAAY,EAAE,MAAM,MAAM;AAC9B,MAAE,MAAI,MAAM,4CAA4C;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,QAAI;AACJ,QAAI;AACF,mBAAa,MAAM,gCAAgC,GAAG;AAAA,IACxD,SAAS,OAAO;AACd,MAAE,MAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,WAAW,gBAAgB;AACjC,QAAI;AACJ,QAAI;AACF,sBAAgB,MAAM,SAAS,YAAY,EAAE,KAAK,WAAW,CAAC;AAAA,IAChE,SAAS,OAAO;AACd,MAAE,MAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,CAAC,iBAAiB,cAAc,WAAW,GAAG;AAChD,MAAE,MAAI,KAAK,GAAG,IAAI,8BAA8B,CAAC;AACjD,MAAE,QAAM,MAAM;AACd;AAAA,IACF;AAEA,QAAI,MAAM,KAAK,EAAE,CAAC,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK;AAC9C,QAAI,CAAC,KAAK;AACR,YAAM,QAAQ,MAAQ,OAAK;AAAA,QACzB,SAAS;AAAA,QACT,aAAa;AAAA,QACb,UAAU,CAAC,MAAM;AACf,cAAI,CAAC,EAAG,QAAO;AAAA,QACjB;AAAA,MACF,CAAC;AACD,UAAM,WAAS,KAAK,GAAG;AACrB,QAAE,QAAM,WAAW;AACnB;AAAA,MACF;AACA,YAAM,OAAO,KAAK,EAAE,KAAK;AAAA,IAC3B;AAEA,QAAI,IAAI,WAAW,OAAO,GAAG;AAC3B,MAAE,MAAI,MAAM,iEAAiE;AAC7E,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,eAAe,cAAc,KAAK,CAAC,WAAW,OAAO,SAAS,GAAG;AACvE,QAAI,CAAC,cAAc;AACjB,MAAE,MAAI,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,+BAA+B;AACjE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,CAAC,KAAK,KAAK;AACb,YAAM,YAAY,MAAQ,UAAQ;AAAA,QAChC,SAAS,UAAU,GAAG,KAAK,GAAG,CAAC;AAAA,QAC/B,cAAc;AAAA,MAChB,CAAC;AACD,UAAM,WAAS,SAAS,KAAK,CAAC,WAAW;AACvC,QAAE,QAAM,WAAW;AACnB;AAAA,MACF;AAAA,IACF;AAEA,UAAMA,WAAY,UAAQ;AAC1B,IAAAA,SAAQ,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE;AAExC,QAAI;AACF,YAAM,SAAS,aAAa,EAAE,KAAK,YAAY,MAAM,IAAI,CAAC;AAC1D,YAAM,eAAe,MAAM,2BAA2B,GAAG;AACzD,YAAM;AAAA,QACJ;AAAA,QACA,aAAa,OAAO,CAAC,WAAW,WAAW,GAAG;AAAA,MAChD;AACA,YAAM,cAAc,GAAG;AAEvB,MAAAA,SAAQ,KAAK,UAAU,GAAG,KAAK,GAAG,CAAC,UAAU;AAC7C,MAAE,QAAM,MAAM;AAAA,IAChB,SAAS,OAAO;AACd,MAAAA,SAAQ,KAAK,yBAAyB;AACtC,MAAE,MAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":["spinner"]}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
runInitialDeploy
|
|
4
|
+
} from "./chunk-DLUULDXW.js";
|
|
2
5
|
import {
|
|
3
6
|
promptDeployTarget,
|
|
4
|
-
runInitialDeploy,
|
|
5
7
|
showKalpCloudWaitlist
|
|
6
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-5YUU3KLB.js";
|
|
7
9
|
import "./chunk-NV2IZ4XM.js";
|
|
8
10
|
import {
|
|
9
11
|
generateTypes
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-XVD3FFOJ.js";
|
|
12
|
+
} from "./chunk-DXNHT4HF.js";
|
|
12
13
|
import {
|
|
13
14
|
requireAuth
|
|
14
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-D53K6UE6.js";
|
|
15
16
|
import "./chunk-FO24J6XL.js";
|
|
17
|
+
import "./chunk-JXR6TPR5.js";
|
|
16
18
|
import "./chunk-EXXTCGKR.js";
|
|
19
|
+
import "./chunk-LEKRFM4Q.js";
|
|
17
20
|
|
|
18
21
|
// src/commands/deploy.ts
|
|
19
22
|
import { defineCommand } from "citty";
|
|
@@ -87,4 +90,4 @@ var deploy_default = defineCommand({
|
|
|
87
90
|
export {
|
|
88
91
|
deploy_default as default
|
|
89
92
|
};
|
|
90
|
-
//# sourceMappingURL=deploy-
|
|
93
|
+
//# sourceMappingURL=deploy-EWYNN3VU.js.map
|