@shield-agent/kya 0.13.0 → 0.15.0
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/.mcp.json +1 -1
- package/README.md +21 -3
- package/amp/settings.example.json +1 -1
- package/claude/claude_desktop_config.example.json +1 -1
- package/cline/cline_mcp_settings.example.json +1 -1
- package/copilot/mcp-config.example.json +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +0 -3
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/start.d.ts +44 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +171 -2
- package/dist/commands/start.js.map +1 -1
- package/dist/gate/config.d.ts +2 -0
- package/dist/gate/config.d.ts.map +1 -1
- package/dist/gate/config.js +9 -0
- package/dist/gate/config.js.map +1 -1
- package/dist/gate/daemon.d.ts +2 -1
- package/dist/gate/daemon.d.ts.map +1 -1
- package/dist/gate/daemon.js +8 -1
- package/dist/gate/daemon.js.map +1 -1
- package/dist/gate/discover.d.ts +57 -0
- package/dist/gate/discover.d.ts.map +1 -0
- package/dist/gate/discover.js +380 -0
- package/dist/gate/discover.js.map +1 -0
- package/dist/receipt/gate-card.d.ts +31 -0
- package/dist/receipt/gate-card.d.ts.map +1 -0
- package/dist/receipt/gate-card.js +84 -0
- package/dist/receipt/gate-card.js.map +1 -0
- package/dist/receipt/receipt-css.d.ts.map +1 -1
- package/dist/receipt/receipt-css.js +6 -0
- package/dist/receipt/receipt-css.js.map +1 -1
- package/dist/receipt/render-receipt.d.ts +3 -0
- package/dist/receipt/render-receipt.d.ts.map +1 -1
- package/dist/receipt/render-receipt.js +129 -3
- package/dist/receipt/render-receipt.js.map +1 -1
- package/droid/README.md +1 -1
- package/droid/mcp.example.json +1 -1
- package/gemini/settings.example.json +1 -1
- package/grok/README.md +1 -1
- package/kilo/kilo.example.json +1 -1
- package/kimi/mcp.example.json +1 -1
- package/kiro/mcp.example.json +1 -1
- package/manifest.json +1 -1
- package/mastracode/mcp.example.json +1 -1
- package/mcp.json +1 -1
- package/openai/codex.config.example.toml +1 -1
- package/opencode/opencode.example.json +1 -1
- package/package.json +1 -1
- package/qwen/settings.example.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway auto-discovery: scan detected host MCP configs for third-party MCP
|
|
3
|
+
* servers (any entry not prefixed shield-kya/kya), normalize them into gateway
|
|
4
|
+
* target candidates, and merge them into gateways.json with provenance
|
|
5
|
+
* (`importedFrom`). Used by `kya start`'s gate bootstrap. Discovery never
|
|
6
|
+
* invents servers; a host config that cannot be parsed is skipped silently.
|
|
7
|
+
*/
|
|
8
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
9
|
+
import { extname, join } from "node:path";
|
|
10
|
+
import { globalConfigDir } from "../config.js";
|
|
11
|
+
import { UsageError } from "../errors.js";
|
|
12
|
+
import { atomicWriteSync } from "../fs-atomic.js";
|
|
13
|
+
import { CONNECT_REGISTRY, connectableHosts, writeTarget } from "../commands/connect.js";
|
|
14
|
+
import { gatewaysPath } from "./config.js";
|
|
15
|
+
const KYA_PREFIX_RE = /^(shield-kya|kya)(-|$)/i;
|
|
16
|
+
const TARGET_ID_RE = /^[a-z0-9][a-z0-9-]*$/;
|
|
17
|
+
/**
|
|
18
|
+
* Normalize a host's server key to the gateway target-id shape. Returns
|
|
19
|
+
* undefined for keys that sanitize to nothing usable or that resolve to a
|
|
20
|
+
* kya-owned id (kya/shield-kya prefixes are never third-party servers).
|
|
21
|
+
*/
|
|
22
|
+
export function sanitizeServerId(raw) {
|
|
23
|
+
const key = raw.trim();
|
|
24
|
+
if (KYA_PREFIX_RE.test(key))
|
|
25
|
+
return undefined;
|
|
26
|
+
const id = key
|
|
27
|
+
.toLowerCase()
|
|
28
|
+
.replace(/[^a-z0-9-]+/g, "-")
|
|
29
|
+
.replace(/^-+/, "")
|
|
30
|
+
.replace(/-+$/, "");
|
|
31
|
+
if (!TARGET_ID_RE.test(id) || KYA_PREFIX_RE.test(id))
|
|
32
|
+
return undefined;
|
|
33
|
+
return id;
|
|
34
|
+
}
|
|
35
|
+
function isPlainObject(v) {
|
|
36
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
37
|
+
}
|
|
38
|
+
function stringMap(v) {
|
|
39
|
+
if (!isPlainObject(v))
|
|
40
|
+
return undefined;
|
|
41
|
+
const out = {};
|
|
42
|
+
for (const [k, val] of Object.entries(v)) {
|
|
43
|
+
if (typeof val === "string")
|
|
44
|
+
out[k] = val;
|
|
45
|
+
}
|
|
46
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
47
|
+
}
|
|
48
|
+
/** One JSON host entry → candidate core. Unknown shapes yield undefined. */
|
|
49
|
+
function candidateFromJsonEntry(entry) {
|
|
50
|
+
if (!isPlainObject(entry))
|
|
51
|
+
return undefined;
|
|
52
|
+
const command = entry["command"];
|
|
53
|
+
if (typeof command === "string" && command.trim()) {
|
|
54
|
+
const args = Array.isArray(entry["args"])
|
|
55
|
+
? entry["args"].filter((a) => typeof a === "string")
|
|
56
|
+
: [];
|
|
57
|
+
const env = stringMap(entry["env"] ?? entry["environment"]);
|
|
58
|
+
return { transport: "stdio", cmd: [command, ...args], ...(env ? { env } : {}) };
|
|
59
|
+
}
|
|
60
|
+
// opencode local shape: command is the full argv array.
|
|
61
|
+
if (Array.isArray(command) && command.length > 0 && command.every((c) => typeof c === "string")) {
|
|
62
|
+
const env = stringMap(entry["environment"] ?? entry["env"]);
|
|
63
|
+
return { transport: "stdio", cmd: command, ...(env ? { env } : {}) };
|
|
64
|
+
}
|
|
65
|
+
const url = typeof entry["url"] === "string"
|
|
66
|
+
? entry["url"]
|
|
67
|
+
: typeof entry["httpUrl"] === "string"
|
|
68
|
+
? entry["httpUrl"]
|
|
69
|
+
: undefined;
|
|
70
|
+
if (url && /^https?:\/\//.test(url)) {
|
|
71
|
+
const headers = stringMap(entry["headers"]);
|
|
72
|
+
return { transport: "http", url, ...(headers ? { headers } : {}) };
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
function candidatesFromJson(text, rootKey) {
|
|
77
|
+
const raw = JSON.parse(text);
|
|
78
|
+
const out = new Map();
|
|
79
|
+
if (!isPlainObject(raw))
|
|
80
|
+
return out;
|
|
81
|
+
const servers = raw[rootKey];
|
|
82
|
+
if (!isPlainObject(servers))
|
|
83
|
+
return out;
|
|
84
|
+
for (const [key, entry] of Object.entries(servers)) {
|
|
85
|
+
const core = candidateFromJsonEntry(entry);
|
|
86
|
+
if (core)
|
|
87
|
+
out.set(key, core);
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
const TOML_TABLE_RE = /^[ \t]*\[\s*mcp_servers\s*\.\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_-]+))\s*\][ \t]*(?:#.*)?$/;
|
|
92
|
+
const TOML_ANY_HEADER_RE = /^[ \t]*\[/;
|
|
93
|
+
function tomlString(body, key) {
|
|
94
|
+
const re = new RegExp(`^[ \\t]*${key}[ \\t]*=[ \\t]*("(?:[^"\\\\]|\\\\.)*")`, "m");
|
|
95
|
+
const m = re.exec(body);
|
|
96
|
+
if (!m)
|
|
97
|
+
return undefined;
|
|
98
|
+
try {
|
|
99
|
+
const v = JSON.parse(m[1]);
|
|
100
|
+
return typeof v === "string" ? v : undefined;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function tomlStringArray(body, key) {
|
|
107
|
+
const re = new RegExp(`^[ \\t]*${key}[ \\t]*=[ \\t]*(\\[[^\\]]*\\])`, "m");
|
|
108
|
+
const m = re.exec(body);
|
|
109
|
+
if (!m)
|
|
110
|
+
return undefined;
|
|
111
|
+
try {
|
|
112
|
+
const v = JSON.parse(m[1]);
|
|
113
|
+
if (Array.isArray(v) && v.every((s) => typeof s === "string"))
|
|
114
|
+
return v;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
/* single-quoted TOML strings etc. — no args */
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
function tomlInlineMap(body, key) {
|
|
122
|
+
const re = new RegExp(`^[ \\t]*${key}[ \\t]*=[ \\t]*(\\{[^}]*\\})`, "m");
|
|
123
|
+
const m = re.exec(body);
|
|
124
|
+
if (!m)
|
|
125
|
+
return undefined;
|
|
126
|
+
const out = {};
|
|
127
|
+
const pair = /([A-Za-z0-9_]+)\s*=\s*("(?:[^"\\]|\\.)*")/g;
|
|
128
|
+
for (let p = pair.exec(m[1]); p; p = pair.exec(m[1])) {
|
|
129
|
+
try {
|
|
130
|
+
const v = JSON.parse(p[2]);
|
|
131
|
+
if (typeof v === "string")
|
|
132
|
+
out[p[1]] = v;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
/* skip the pair */
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
139
|
+
}
|
|
140
|
+
/** Minimal [mcp_servers.<id>] table reader for grok/codex TOML configs. */
|
|
141
|
+
function candidatesFromToml(text) {
|
|
142
|
+
const out = new Map();
|
|
143
|
+
const lines = text.split("\n");
|
|
144
|
+
for (let i = 0; i < lines.length; i++) {
|
|
145
|
+
const header = TOML_TABLE_RE.exec(lines[i]);
|
|
146
|
+
if (!header)
|
|
147
|
+
continue;
|
|
148
|
+
const key = header[1] ?? header[2] ?? header[3];
|
|
149
|
+
let end = lines.length;
|
|
150
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
151
|
+
if (TOML_ANY_HEADER_RE.test(lines[j])) {
|
|
152
|
+
end = j;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const body = lines.slice(i + 1, end).join("\n");
|
|
157
|
+
const command = tomlString(body, "command");
|
|
158
|
+
const url = tomlString(body, "url");
|
|
159
|
+
if (command) {
|
|
160
|
+
const args = tomlStringArray(body, "args") ?? [];
|
|
161
|
+
const env = tomlInlineMap(body, "env");
|
|
162
|
+
out.set(key, { transport: "stdio", cmd: [command, ...args], ...(env ? { env } : {}) });
|
|
163
|
+
}
|
|
164
|
+
else if (url && /^https?:\/\//.test(url)) {
|
|
165
|
+
out.set(key, { transport: "http", url });
|
|
166
|
+
}
|
|
167
|
+
i = end - 1;
|
|
168
|
+
}
|
|
169
|
+
return out;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Scan every connectable host's user-level MCP config for third-party
|
|
173
|
+
* servers. Deduped across hosts by sanitized id (first-seen shape wins;
|
|
174
|
+
* `foundIn` accumulates every host carrying the id).
|
|
175
|
+
*/
|
|
176
|
+
export function discoverGateServers(home) {
|
|
177
|
+
const byId = new Map();
|
|
178
|
+
for (const hostId of connectableHosts()) {
|
|
179
|
+
const spec = CONNECT_REGISTRY[hostId];
|
|
180
|
+
if (!spec.globalPath)
|
|
181
|
+
continue;
|
|
182
|
+
const path = spec.globalPath(home);
|
|
183
|
+
if (!existsSync(path))
|
|
184
|
+
continue;
|
|
185
|
+
let entries;
|
|
186
|
+
try {
|
|
187
|
+
const text = readFileSync(path, "utf8");
|
|
188
|
+
entries =
|
|
189
|
+
spec.shape === "grok-toml" || spec.shape === "codex-toml"
|
|
190
|
+
? candidatesFromToml(text)
|
|
191
|
+
: candidatesFromJson(text, spec.rootKey);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
continue; // unparseable host config — skip the host, keep the rest
|
|
195
|
+
}
|
|
196
|
+
for (const [rawKey, core] of entries) {
|
|
197
|
+
const id = sanitizeServerId(rawKey);
|
|
198
|
+
if (!id)
|
|
199
|
+
continue;
|
|
200
|
+
const existing = byId.get(id);
|
|
201
|
+
if (existing) {
|
|
202
|
+
if (!existing.foundIn.includes(hostId))
|
|
203
|
+
existing.foundIn.push(hostId);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
byId.set(id, { core, foundIn: [hostId] });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return [...byId.entries()].map(([id, v]) => ({ id, ...v.core, foundIn: v.foundIn }));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Merge discovered candidates into gateways.json `servers`. Hand-configured
|
|
214
|
+
* entries and other top-level keys (recipes) are preserved; ids already
|
|
215
|
+
* present are skipped — an already-imported entry only unions new source
|
|
216
|
+
* hosts into its `importedFrom`, a hand-configured entry is left byte-identical.
|
|
217
|
+
*/
|
|
218
|
+
export function importGateCandidates(candidates, env = process.env) {
|
|
219
|
+
const path = gatewaysPath(env);
|
|
220
|
+
if (candidates.length === 0)
|
|
221
|
+
return { imported: [], path };
|
|
222
|
+
let raw = {};
|
|
223
|
+
if (existsSync(path)) {
|
|
224
|
+
let parsed;
|
|
225
|
+
try {
|
|
226
|
+
parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
throw new UsageError(`${path} is not valid JSON — fix it by hand, then re-run kya start`);
|
|
230
|
+
}
|
|
231
|
+
if (!isPlainObject(parsed)) {
|
|
232
|
+
throw new UsageError(`${path} must be a JSON object — fix it by hand, then re-run kya start`);
|
|
233
|
+
}
|
|
234
|
+
raw = parsed;
|
|
235
|
+
}
|
|
236
|
+
if (raw["servers"] !== undefined && !Array.isArray(raw["servers"])) {
|
|
237
|
+
throw new UsageError(`${path}: "servers" must be an array — fix it by hand, then re-run kya start`);
|
|
238
|
+
}
|
|
239
|
+
const servers = Array.isArray(raw["servers"]) ? [...raw["servers"]] : [];
|
|
240
|
+
const imported = [];
|
|
241
|
+
let changed = false;
|
|
242
|
+
for (const c of candidates) {
|
|
243
|
+
const idx = servers.findIndex((s) => isPlainObject(s) && s["id"] === c.id);
|
|
244
|
+
if (idx !== -1) {
|
|
245
|
+
const entry = servers[idx];
|
|
246
|
+
if (Array.isArray(entry["importedFrom"])) {
|
|
247
|
+
const have = new Set(entry["importedFrom"].filter((h) => typeof h === "string"));
|
|
248
|
+
const merged = [...have];
|
|
249
|
+
for (const h of c.foundIn)
|
|
250
|
+
if (!have.has(h))
|
|
251
|
+
merged.push(h);
|
|
252
|
+
if (merged.length !== have.size) {
|
|
253
|
+
servers[idx] = { ...entry, importedFrom: merged };
|
|
254
|
+
changed = true;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const entry = { id: c.id, transport: c.transport };
|
|
260
|
+
if (c.transport === "stdio" && c.cmd)
|
|
261
|
+
entry["cmd"] = [...c.cmd];
|
|
262
|
+
if (c.transport === "stdio" && c.env)
|
|
263
|
+
entry["env"] = { ...c.env };
|
|
264
|
+
if (c.transport === "http" && c.url)
|
|
265
|
+
entry["url"] = c.url;
|
|
266
|
+
if (c.transport === "http" && c.headers)
|
|
267
|
+
entry["headers"] = { ...c.headers };
|
|
268
|
+
entry["importedFrom"] = [...c.foundIn];
|
|
269
|
+
servers.push(entry);
|
|
270
|
+
imported.push(entry);
|
|
271
|
+
changed = true;
|
|
272
|
+
}
|
|
273
|
+
if (changed) {
|
|
274
|
+
mkdirSync(globalConfigDir(env), { recursive: true });
|
|
275
|
+
atomicWriteSync(path, `${JSON.stringify({ ...raw, servers }, null, 2)}\n`);
|
|
276
|
+
}
|
|
277
|
+
return { imported, path };
|
|
278
|
+
}
|
|
279
|
+
function backupHostConfig(target, host, env, ts) {
|
|
280
|
+
const dir = join(globalConfigDir(env), "backups");
|
|
281
|
+
mkdirSync(dir, { recursive: true });
|
|
282
|
+
const stamp = (ts ?? new Date().toISOString()).replace(/[:.]/g, "-");
|
|
283
|
+
const ext = extname(target) || ".conf";
|
|
284
|
+
let candidate = join(dir, `${host}-${stamp}${ext}`);
|
|
285
|
+
for (let n = 2; existsSync(candidate); n++) {
|
|
286
|
+
candidate = join(dir, `${host}-${stamp}-${n}${ext}`);
|
|
287
|
+
}
|
|
288
|
+
copyFileSync(target, candidate);
|
|
289
|
+
return candidate;
|
|
290
|
+
}
|
|
291
|
+
function removeTomlTables(text, ids) {
|
|
292
|
+
const lines = text.split("\n");
|
|
293
|
+
const drop = new Set(ids);
|
|
294
|
+
const removed = [];
|
|
295
|
+
const kept = [];
|
|
296
|
+
for (let i = 0; i < lines.length; i++) {
|
|
297
|
+
const header = TOML_TABLE_RE.exec(lines[i]);
|
|
298
|
+
const key = header ? (header[1] ?? header[2] ?? header[3]) : undefined;
|
|
299
|
+
if (key && !drop.has(sanitizeServerId(key) ?? "")) {
|
|
300
|
+
kept.push(lines[i]);
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
if (key) {
|
|
304
|
+
if (!removed.includes(key))
|
|
305
|
+
removed.push(key);
|
|
306
|
+
let end = lines.length;
|
|
307
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
308
|
+
if (TOML_ANY_HEADER_RE.test(lines[j])) {
|
|
309
|
+
end = j;
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
i = end - 1;
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
kept.push(lines[i]);
|
|
317
|
+
}
|
|
318
|
+
return { text: kept.join("\n"), removed };
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Remove the given server ids from a host's user-level config, after copying
|
|
322
|
+
* the full original under <global .kya>/backups. Only the listed ids are
|
|
323
|
+
* touched — shield-kya entries and every other setting survive. Returns
|
|
324
|
+
* undefined (and writes nothing) when the file is missing, unparseable, or
|
|
325
|
+
* carries none of the ids.
|
|
326
|
+
*/
|
|
327
|
+
export function removeHostServerEntries(input) {
|
|
328
|
+
const env = input.env ?? process.env;
|
|
329
|
+
const spec = CONNECT_REGISTRY[input.host];
|
|
330
|
+
if (!spec?.globalPath)
|
|
331
|
+
return undefined;
|
|
332
|
+
const path = spec.globalPath(input.home);
|
|
333
|
+
if (!existsSync(path))
|
|
334
|
+
return undefined;
|
|
335
|
+
let target;
|
|
336
|
+
try {
|
|
337
|
+
target = writeTarget(path);
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
return undefined;
|
|
341
|
+
}
|
|
342
|
+
const toml = spec.shape === "grok-toml" || spec.shape === "codex-toml";
|
|
343
|
+
const text = readFileSync(target, "utf8");
|
|
344
|
+
let next;
|
|
345
|
+
let removed;
|
|
346
|
+
if (toml) {
|
|
347
|
+
const r = removeTomlTables(text, input.ids);
|
|
348
|
+
next = r.text;
|
|
349
|
+
removed = r.removed;
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
let raw;
|
|
353
|
+
try {
|
|
354
|
+
raw = JSON.parse(text);
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
return undefined;
|
|
358
|
+
}
|
|
359
|
+
if (!isPlainObject(raw))
|
|
360
|
+
return undefined;
|
|
361
|
+
const servers = raw[spec.rootKey];
|
|
362
|
+
if (!isPlainObject(servers))
|
|
363
|
+
return undefined;
|
|
364
|
+
const drop = new Set(input.ids);
|
|
365
|
+
removed = Object.keys(servers).filter((key) => drop.has(sanitizeServerId(key) ?? ""));
|
|
366
|
+
if (removed.length === 0)
|
|
367
|
+
return undefined;
|
|
368
|
+
const rest = { ...servers };
|
|
369
|
+
for (const key of removed)
|
|
370
|
+
delete rest[key];
|
|
371
|
+
raw[spec.rootKey] = rest;
|
|
372
|
+
next = `${JSON.stringify(raw, null, 2)}\n`;
|
|
373
|
+
}
|
|
374
|
+
if (removed.length === 0)
|
|
375
|
+
return undefined;
|
|
376
|
+
const backup = backupHostConfig(target, input.host, env, input.ts);
|
|
377
|
+
atomicWriteSync(target, next);
|
|
378
|
+
return { path: target, backup, removed };
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/gate/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type GatewayServer } from "../gate/config.js";
|
|
2
|
+
import type { TrailEvent } from "../trail.js";
|
|
3
|
+
export type GateState = "not-set-up" | "configured-stopped" | "running";
|
|
4
|
+
/** not-set-up quickstart line, shared by the HTML panel and the markdown artifact. */
|
|
5
|
+
export declare const GATE_NOT_SETUP_QUICKSTART = "Add any MCP server to a host config (or run `kya gate init` to pick from recipes) \u2014 `kya start` routes it through the gateway automatically.";
|
|
6
|
+
export type GateServerWorst = "never" | "deny" | "hold" | "allow" | "none";
|
|
7
|
+
export interface GateServerRow {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly transport: GatewayServer["transport"];
|
|
10
|
+
/** Trail events in the window whose toolId is `<id>__<tool>`. */
|
|
11
|
+
readonly events: number;
|
|
12
|
+
/** never > deny > hold > allow; "none" when the window has no events. */
|
|
13
|
+
readonly worst: GateServerWorst;
|
|
14
|
+
/** Servers-facet value: the registry label, matching the feed's data-server stamp. */
|
|
15
|
+
readonly serverFacet: string;
|
|
16
|
+
}
|
|
17
|
+
export interface GateCard {
|
|
18
|
+
readonly state: GateState;
|
|
19
|
+
readonly servers: readonly GateServerRow[];
|
|
20
|
+
/** Gateway events in the window across all configured servers. */
|
|
21
|
+
readonly events: number;
|
|
22
|
+
/** Listener URL/port when running (from the supervisor state file). */
|
|
23
|
+
readonly url?: string;
|
|
24
|
+
readonly port?: number;
|
|
25
|
+
/** Supervisor start timestamp — the uptime anchor when running. */
|
|
26
|
+
readonly startedAt?: string;
|
|
27
|
+
readonly binaryPresent: boolean;
|
|
28
|
+
readonly binaryVersion?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function loadGateCard(events: readonly TrailEvent[], env?: NodeJS.ProcessEnv): GateCard;
|
|
31
|
+
//# sourceMappingURL=gate-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-card.d.ts","sourceRoot":"","sources":["../../src/receipt/gate-card.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,oBAAoB,GAAG,SAAS,CAAC;AAExE,sFAAsF;AACtF,eAAO,MAAM,yBAAyB,sJAC0G,CAAC;AAEjJ,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC/C,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,sFAAsF;IACtF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAQD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,QAAQ,CA8DV"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway card for the Agent-activity report: the local kya gateway's setup
|
|
3
|
+
* state (gateways.json + supervisor state file + installed binary) plus
|
|
4
|
+
* per-server activity from the trail events in the current window. Fail-safe
|
|
5
|
+
* like every receipt loader — unreadable or corrupt state degrades toward
|
|
6
|
+
* "not set up" / "stopped", never a throw.
|
|
7
|
+
*/
|
|
8
|
+
import { inspectGateBinary } from "../gate/binary.js";
|
|
9
|
+
import { readGateways } from "../gate/config.js";
|
|
10
|
+
import { pidAlive, readGateState } from "../gate/daemon.js";
|
|
11
|
+
import { mcpServerLabel } from "../mcp-servers.js";
|
|
12
|
+
/** not-set-up quickstart line, shared by the HTML panel and the markdown artifact. */
|
|
13
|
+
export const GATE_NOT_SETUP_QUICKSTART = "Add any MCP server to a host config (or run `kya gate init` to pick from recipes) — `kya start` routes it through the gateway automatically.";
|
|
14
|
+
/** Gateway target ids are `<id>__<tool>` prefixes on trail toolIds. */
|
|
15
|
+
function toolServerPrefix(toolId) {
|
|
16
|
+
const m = /^([a-z0-9][a-z0-9-]*)__/i.exec(toolId.trim());
|
|
17
|
+
return m ? m[1].toLowerCase() : undefined;
|
|
18
|
+
}
|
|
19
|
+
export function loadGateCard(events, env = process.env) {
|
|
20
|
+
let servers = [];
|
|
21
|
+
try {
|
|
22
|
+
servers = readGateways(env).servers;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Corrupt gateways.json — the report degrades to not-set-up, never throws.
|
|
26
|
+
servers = [];
|
|
27
|
+
}
|
|
28
|
+
const bin = inspectGateBinary(env);
|
|
29
|
+
const state = readGateState(env);
|
|
30
|
+
const running = Boolean(state && pidAlive(state.pid));
|
|
31
|
+
const counts = new Map();
|
|
32
|
+
const configured = new Set(servers.map((s) => s.id));
|
|
33
|
+
let total = 0;
|
|
34
|
+
for (const e of events) {
|
|
35
|
+
const id = toolServerPrefix(e.toolId);
|
|
36
|
+
if (!id || !configured.has(id))
|
|
37
|
+
continue;
|
|
38
|
+
let c = counts.get(id);
|
|
39
|
+
if (!c) {
|
|
40
|
+
c = { events: 0, deny: 0, hold: 0, never: 0 };
|
|
41
|
+
counts.set(id, c);
|
|
42
|
+
}
|
|
43
|
+
c.events++;
|
|
44
|
+
total++;
|
|
45
|
+
if (e.neverEvent || e.reasonCode === "NEVER_EVENT")
|
|
46
|
+
c.never++;
|
|
47
|
+
const v = e.verdict.toUpperCase();
|
|
48
|
+
if (v === "DENY")
|
|
49
|
+
c.deny++;
|
|
50
|
+
else if (v === "REQUIRE_APPROVE")
|
|
51
|
+
c.hold++;
|
|
52
|
+
}
|
|
53
|
+
const rows = servers.map((s) => {
|
|
54
|
+
const c = counts.get(s.id);
|
|
55
|
+
const worst = !c
|
|
56
|
+
? "none"
|
|
57
|
+
: c.never > 0
|
|
58
|
+
? "never"
|
|
59
|
+
: c.deny > 0
|
|
60
|
+
? "deny"
|
|
61
|
+
: c.hold > 0
|
|
62
|
+
? "hold"
|
|
63
|
+
: "allow";
|
|
64
|
+
return {
|
|
65
|
+
id: s.id,
|
|
66
|
+
transport: s.transport,
|
|
67
|
+
events: c?.events ?? 0,
|
|
68
|
+
worst,
|
|
69
|
+
serverFacet: mcpServerLabel(s.id),
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
// Running wins over "nothing configured": a live listener with zero
|
|
74
|
+
// targets is a real state (governed gateway up, no servers moved yet),
|
|
75
|
+
// not the not-set-up quickstart.
|
|
76
|
+
state: running ? "running" : servers.length === 0 ? "not-set-up" : "configured-stopped",
|
|
77
|
+
servers: rows,
|
|
78
|
+
events: total,
|
|
79
|
+
...(running && state ? { url: state.url, port: state.port, startedAt: state.startedAt } : {}),
|
|
80
|
+
binaryPresent: bin.present,
|
|
81
|
+
...(bin.version ? { binaryVersion: bin.version } : {}),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=gate-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-card.js","sourceRoot":"","sources":["../../src/receipt/gate-card.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipt-css.d.ts","sourceRoot":"","sources":["../../src/receipt/receipt-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"receipt-css.d.ts","sourceRoot":"","sources":["../../src/receipt/receipt-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAykBnC"}
|
|
@@ -125,6 +125,12 @@ export function receiptCss() {
|
|
|
125
125
|
flex-basis: 100%; color: var(--mute); font-size: 0.74rem;
|
|
126
126
|
overflow-wrap: break-word;
|
|
127
127
|
}
|
|
128
|
+
/* Gateway quickstart: compact numbered steps under the not-set-up line. */
|
|
129
|
+
.gate .steps {
|
|
130
|
+
margin: 0.4rem 0 0; padding-left: 1.25rem;
|
|
131
|
+
font-size: 0.78rem; color: var(--mute);
|
|
132
|
+
display: flex; flex-direction: column; gap: 0.15rem;
|
|
133
|
+
}
|
|
128
134
|
@media (max-width: 1100px) {
|
|
129
135
|
.hero { grid-template-columns: repeat(2, 1fr); }
|
|
130
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipt-css.js","sourceRoot":"","sources":["../../src/receipt/receipt-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO
|
|
1
|
+
{"version":3,"file":"receipt-css.js","sourceRoot":"","sources":["../../src/receipt/receipt-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAukBL,CAAC;AACL,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { type TrailEvent } from "../trail.js";
|
|
|
2
2
|
import type { KyaFileConfig } from "../config.js";
|
|
3
3
|
import { type CertifyCard, type OrrCard, type SandboxCard, type WiredHostRow } from "./enrich.js";
|
|
4
4
|
import { type ShowbackReport } from "../showback/cost-per-task.js";
|
|
5
|
+
import { type GateCard } from "./gate-card.js";
|
|
5
6
|
export interface ReceiptModel {
|
|
6
7
|
readonly title: string;
|
|
7
8
|
readonly rangeLabel: string;
|
|
@@ -25,6 +26,8 @@ export interface ReceiptModel {
|
|
|
25
26
|
readonly sandboxes?: SandboxCard;
|
|
26
27
|
/** Per-host wiring status across the connect registry. */
|
|
27
28
|
readonly wiredHosts?: readonly WiredHostRow[];
|
|
29
|
+
/** Local gateway state + per-server activity in the window. */
|
|
30
|
+
readonly gate?: GateCard;
|
|
28
31
|
/** Slim ORR card from orr-report/report.json. */
|
|
29
32
|
readonly orr?: OrrCard;
|
|
30
33
|
/** Live Agent Trust Baseline card, recomputed on every model load. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2C,KAAK,UAAU,EAAqB,MAAM,aAAa,CAAC;AAE1G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"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"}
|