@shield-agent/kya 0.18.0 → 0.20.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.
Files changed (58) hide show
  1. package/.mcp.json +1 -1
  2. package/README.md +15 -4
  3. package/amp/settings.example.json +1 -1
  4. package/claude/claude_desktop_config.example.json +1 -1
  5. package/cline/cline_mcp_settings.example.json +1 -1
  6. package/copilot/mcp-config.example.json +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +5 -2
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/gate-serve.d.ts.map +1 -1
  11. package/dist/commands/gate-serve.js +35 -1
  12. package/dist/commands/gate-serve.js.map +1 -1
  13. package/dist/commands/gate.d.ts +10 -0
  14. package/dist/commands/gate.d.ts.map +1 -1
  15. package/dist/commands/gate.js +50 -4
  16. package/dist/commands/gate.js.map +1 -1
  17. package/dist/gate/config.d.ts +2 -0
  18. package/dist/gate/config.d.ts.map +1 -1
  19. package/dist/gate/config.js +26 -3
  20. package/dist/gate/config.js.map +1 -1
  21. package/dist/gate/hosted-sync.d.ts +74 -0
  22. package/dist/gate/hosted-sync.d.ts.map +1 -0
  23. package/dist/gate/hosted-sync.js +138 -0
  24. package/dist/gate/hosted-sync.js.map +1 -0
  25. package/dist/receipt/embeddings.d.ts +34 -0
  26. package/dist/receipt/embeddings.d.ts.map +1 -0
  27. package/dist/receipt/embeddings.js +140 -0
  28. package/dist/receipt/embeddings.js.map +1 -0
  29. package/dist/receipt/live-server.d.ts +3 -0
  30. package/dist/receipt/live-server.d.ts.map +1 -1
  31. package/dist/receipt/live-server.js +24 -3
  32. package/dist/receipt/live-server.js.map +1 -1
  33. package/dist/receipt/receipt-css.d.ts.map +1 -1
  34. package/dist/receipt/receipt-css.js +24 -0
  35. package/dist/receipt/receipt-css.js.map +1 -1
  36. package/dist/receipt/render-receipt.d.ts +4 -1
  37. package/dist/receipt/render-receipt.d.ts.map +1 -1
  38. package/dist/receipt/render-receipt.js +192 -67
  39. package/dist/receipt/render-receipt.js.map +1 -1
  40. package/dist/receipt/search.d.ts +79 -0
  41. package/dist/receipt/search.d.ts.map +1 -0
  42. package/dist/receipt/search.js +475 -0
  43. package/dist/receipt/search.js.map +1 -0
  44. package/droid/README.md +1 -1
  45. package/droid/mcp.example.json +1 -1
  46. package/gemini/settings.example.json +1 -1
  47. package/grok/README.md +1 -1
  48. package/kilo/kilo.example.json +1 -1
  49. package/kimi/mcp.example.json +1 -1
  50. package/kiro/mcp.example.json +1 -1
  51. package/manifest.json +1 -1
  52. package/mastracode/mcp.example.json +1 -1
  53. package/mcp.json +1 -1
  54. package/openai/codex.config.example.toml +1 -1
  55. package/opencode/opencode.example.json +1 -1
  56. package/package.json +3 -2
  57. package/qwen/settings.example.json +1 -1
  58. package/server.json +2 -2
@@ -0,0 +1,475 @@
1
+ /**
2
+ * Natural-language search over the activity feed.
3
+ *
4
+ * Pure-lexical BM25 with optional MiniLM semantic hybrid. The search module
5
+ * has no runtime dependency on native ML libraries: fastembed is imported
6
+ * lazily and only in the live server path.
7
+ */
8
+ import { createHash } from "node:crypto";
9
+ import { clip } from "../dash/render.js";
10
+ import { mcpServerLabel, parseMcpToolId } from "../mcp-servers.js";
11
+ import { productLabel } from "../trail.js";
12
+ const STOPWORDS = new Set([
13
+ "a",
14
+ "an",
15
+ "the",
16
+ "and",
17
+ "or",
18
+ "but",
19
+ "is",
20
+ "are",
21
+ "was",
22
+ "were",
23
+ "be",
24
+ "been",
25
+ "being",
26
+ "to",
27
+ "of",
28
+ "in",
29
+ "on",
30
+ "at",
31
+ "by",
32
+ "for",
33
+ "with",
34
+ "as",
35
+ "this",
36
+ "that",
37
+ "these",
38
+ "those",
39
+ "it",
40
+ "its",
41
+ "from",
42
+ "up",
43
+ "about",
44
+ "into",
45
+ "through",
46
+ "during",
47
+ "before",
48
+ "after",
49
+ "above",
50
+ "below",
51
+ "between",
52
+ "among",
53
+ "within",
54
+ "without",
55
+ "against",
56
+ "over",
57
+ "under",
58
+ "again",
59
+ "further",
60
+ "then",
61
+ "once",
62
+ "here",
63
+ "there",
64
+ "when",
65
+ "where",
66
+ "why",
67
+ "how",
68
+ "all",
69
+ "any",
70
+ "both",
71
+ "each",
72
+ "few",
73
+ "more",
74
+ "most",
75
+ "other",
76
+ "some",
77
+ "such",
78
+ "only",
79
+ "own",
80
+ "same",
81
+ "so",
82
+ "than",
83
+ "too",
84
+ "very",
85
+ "can",
86
+ "will",
87
+ "just",
88
+ "should",
89
+ "now",
90
+ "did",
91
+ "does",
92
+ "do",
93
+ "has",
94
+ "have",
95
+ "had",
96
+ "having",
97
+ "get",
98
+ "got",
99
+ "gets",
100
+ "make",
101
+ "made",
102
+ "makes",
103
+ "use",
104
+ "used",
105
+ "uses",
106
+ "using",
107
+ ]);
108
+ /** Light stemmer: trailing "ing", "ed", and simple plural "s". */
109
+ function stem(token) {
110
+ if (token.length <= 3)
111
+ return token;
112
+ let s = token;
113
+ if (s.endsWith("ing")) {
114
+ const stem = s.slice(0, -3);
115
+ if (/[aeiou]/.test(stem))
116
+ s = stem;
117
+ }
118
+ else if (s.endsWith("ed")) {
119
+ const stem = s.slice(0, -2);
120
+ if (/[aeiou]/.test(stem))
121
+ s = stem;
122
+ }
123
+ else if (s.endsWith("s") && !s.endsWith("ss")) {
124
+ s = s.slice(0, -1);
125
+ }
126
+ if (s.length > 3 && /([bcdfghjklmnpqrstvwxz])\1$/.test(s)) {
127
+ s = s.slice(0, -1);
128
+ }
129
+ return s.length >= 2 ? s : token;
130
+ }
131
+ /** Split camelCase, PascalCase, snake_case, kebab-case, and dot.case. */
132
+ function splitIdentifiers(token) {
133
+ const parts = [];
134
+ let current = "";
135
+ for (const char of token) {
136
+ if (char === "_" || char === "-" || char === ".") {
137
+ if (current)
138
+ parts.push(current);
139
+ current = "";
140
+ }
141
+ else if (/[A-Z]/.test(char)) {
142
+ if (current && /[a-z]/.test(current[current.length - 1])) {
143
+ parts.push(current);
144
+ current = char.toLowerCase();
145
+ }
146
+ else {
147
+ current += char.toLowerCase();
148
+ }
149
+ }
150
+ else {
151
+ current += char;
152
+ }
153
+ }
154
+ if (current)
155
+ parts.push(current);
156
+ return parts;
157
+ }
158
+ /** Tokenize a query or document for BM25 matching. */
159
+ export function tokenize(text) {
160
+ const out = [];
161
+ for (const raw of text.split(/[^a-zA-Z0-9]+/)) {
162
+ if (!raw)
163
+ continue;
164
+ for (const part of splitIdentifiers(raw)) {
165
+ if (!part)
166
+ continue;
167
+ const s = stem(part.toLowerCase());
168
+ if (STOPWORDS.has(s))
169
+ continue;
170
+ out.push(s);
171
+ }
172
+ }
173
+ return out;
174
+ }
175
+ /** Concatenate the searchable fields of a trail event. */
176
+ export function eventDocumentText(e) {
177
+ const parsed = parseMcpToolId(e.toolId);
178
+ const serverLabel = parsed ? mcpServerLabel(parsed.server) : "";
179
+ const parts = [
180
+ e.toolId,
181
+ e.reasonCode,
182
+ e.summary ?? "",
183
+ e.project ?? "",
184
+ productLabel(e.product),
185
+ e.mode,
186
+ serverLabel,
187
+ e.targetPath ?? "",
188
+ ];
189
+ return parts.filter((p) => p).join(" ");
190
+ }
191
+ /** Stable SHA1 of the searchable document text; used to version embeddings. */
192
+ export function eventTextSha1(e) {
193
+ return createHash("sha1").update(eventDocumentText(e)).digest("hex");
194
+ }
195
+ /**
196
+ * Standard BM25 over field-weighted documents.
197
+ *
198
+ * k1 controls term saturation; b controls document-length normalization.
199
+ */
200
+ export class Bm25Index {
201
+ k1;
202
+ b;
203
+ docs = new Map();
204
+ df = new Map();
205
+ totalDocLength = 0;
206
+ constructor(k1 = 1.5, b = 0.75) {
207
+ this.k1 = k1;
208
+ this.b = b;
209
+ }
210
+ add(id, doc) {
211
+ this.docs.set(id, doc);
212
+ this.totalDocLength += doc.tokens.length;
213
+ const seen = new Set();
214
+ for (const t of doc.tokens) {
215
+ if (seen.has(t))
216
+ continue;
217
+ seen.add(t);
218
+ this.df.set(t, (this.df.get(t) ?? 0) + 1);
219
+ }
220
+ }
221
+ avgDocLength() {
222
+ return this.docs.size ? this.totalDocLength / this.docs.size : 0;
223
+ }
224
+ search(query) {
225
+ const qTokens = [...new Set(tokenize(query))];
226
+ if (qTokens.length === 0 || this.docs.size === 0)
227
+ return [];
228
+ const avg = this.avgDocLength();
229
+ const results = [];
230
+ for (const doc of this.docs.values()) {
231
+ // Field-weighted length normalization: sum(field tokens * weight).
232
+ let weightedLength = 0;
233
+ for (const f of doc.fields) {
234
+ weightedLength += tokenize(f.text).length * f.weight;
235
+ }
236
+ let score = 0;
237
+ for (const t of qTokens) {
238
+ const df = this.df.get(t) ?? 0;
239
+ if (df === 0)
240
+ continue;
241
+ // IDF with a floor so common terms still contribute a little.
242
+ const idf = Math.log(1 + (this.docs.size - df + 0.5) / (df + 0.5));
243
+ const tf = doc.tokens.filter((x) => x === t).length;
244
+ if (tf === 0)
245
+ continue;
246
+ const denom = tf + this.k1 * (1 - this.b + (this.b * weightedLength) / Math.max(avg, 1));
247
+ score += idf * ((tf * (this.k1 + 1)) / denom);
248
+ }
249
+ if (score > 0)
250
+ results.push({ id: doc.id, score });
251
+ }
252
+ return results.sort((a, b) => b.score - a.score);
253
+ }
254
+ }
255
+ const SERVER_ALIASES = {
256
+ github: ["GitHub"],
257
+ gitlab: ["GitLab"],
258
+ postgres: ["PostgreSQL"],
259
+ postgresql: ["PostgreSQL"],
260
+ slack: ["Slack"],
261
+ notion: ["Notion"],
262
+ jira: ["Jira"],
263
+ confluence: ["Confluence"],
264
+ linear: ["Linear"],
265
+ playwright: ["Playwright"],
266
+ browser: ["Playwright"],
267
+ puppeteer: ["Puppeteer"],
268
+ stripe: ["Stripe"],
269
+ vercel: ["Vercel"],
270
+ aws: ["AWS"],
271
+ gcp: ["GCP"],
272
+ google: ["GCP"],
273
+ azure: ["Azure"],
274
+ };
275
+ const PRODUCT_ALIASES = {
276
+ cursor: ["cursor"],
277
+ claude: ["claude"],
278
+ codex: ["codex"],
279
+ grok: ["grok"],
280
+ kimi: ["kimi"],
281
+ };
282
+ /** Map natural-language terms to known facet values for soft boosting. */
283
+ export function extractFacetHints(query) {
284
+ const q = ` ${query.toLowerCase()} `;
285
+ const hints = {
286
+ verdict: [],
287
+ server: [],
288
+ product: [],
289
+ mode: [],
290
+ };
291
+ if (/\b(deny|denied|blocked|rejected|forbidden)\b/.test(q))
292
+ hints.verdict.push("DENY");
293
+ if (/\b(approve|review|hold)\b/.test(q))
294
+ hints.verdict.push("REQUIRE_APPROVE");
295
+ if (/\ballow(ed)?\b/.test(q))
296
+ hints.verdict.push("ALLOW");
297
+ if (/\bnever\b/.test(q))
298
+ hints.verdict.push("NEVER_EVENT");
299
+ for (const [alias, labels] of Object.entries(SERVER_ALIASES)) {
300
+ if (q.includes(` ${alias} `))
301
+ hints.server.push(...labels);
302
+ }
303
+ for (const [alias, ids] of Object.entries(PRODUCT_ALIASES)) {
304
+ if (q.includes(` ${alias} `))
305
+ hints.product.push(...ids);
306
+ }
307
+ if (/\b(observe|observed)\b/.test(q))
308
+ hints.mode.push("observe");
309
+ if (/\bhold\b/.test(q))
310
+ hints.mode.push("hold");
311
+ if (/\boffline\b/.test(q))
312
+ hints.mode.push("offline");
313
+ const out = {};
314
+ if (hints.verdict.length)
315
+ out.verdict = hints.verdict;
316
+ if (hints.server.length)
317
+ out.server = hints.server;
318
+ if (hints.product.length)
319
+ out.product = hints.product;
320
+ if (hints.mode.length)
321
+ out.mode = hints.mode;
322
+ return out;
323
+ }
324
+ /** Cosine similarity of two equal-length vectors. */
325
+ export function cosine(a, b) {
326
+ if (a.length !== b.length || a.length === 0)
327
+ return 0;
328
+ let dot = 0;
329
+ let na = 0;
330
+ let nb = 0;
331
+ for (let i = 0; i < a.length; i++) {
332
+ dot += a[i] * b[i];
333
+ na += a[i] * a[i];
334
+ nb += b[i] * b[i];
335
+ }
336
+ const denom = Math.sqrt(na) * Math.sqrt(nb);
337
+ return denom === 0 ? 0 : dot / denom;
338
+ }
339
+ /**
340
+ * Reciprocal Rank Fusion of two ranked lists. Each list is expected in
341
+ * descending order by score; ranks are 1-based.
342
+ */
343
+ export function rrfMerge(bm25Ranks, semanticRanks, k = 60) {
344
+ const map = new Map();
345
+ for (let i = 0; i < bm25Ranks.length; i++) {
346
+ const r = bm25Ranks[i];
347
+ map.set(r.id, (map.get(r.id) ?? 0) + 1 / (k + i + 1));
348
+ }
349
+ for (let i = 0; i < semanticRanks.length; i++) {
350
+ const r = semanticRanks[i];
351
+ map.set(r.id, (map.get(r.id) ?? 0) + 1 / (k + i + 1));
352
+ }
353
+ return [...map.entries()]
354
+ .map(([id, score]) => ({ id, score }))
355
+ .sort((a, b) => b.score - a.score);
356
+ }
357
+ /** Build a BM25 index from trail events with weighted fields. */
358
+ export function buildEventIndex(events) {
359
+ const index = new Bm25Index();
360
+ for (const e of events) {
361
+ const parsed = parseMcpToolId(e.toolId);
362
+ const serverLabel = parsed ? mcpServerLabel(parsed.server) : "";
363
+ const fields = [
364
+ { text: e.toolId, weight: 2 },
365
+ { text: e.reasonCode, weight: 1 },
366
+ { text: e.summary ?? "", weight: 2 },
367
+ { text: e.project ?? "", weight: 1 },
368
+ { text: productLabel(e.product), weight: 1 },
369
+ { text: e.mode, weight: 1 },
370
+ { text: serverLabel, weight: 1 },
371
+ { text: e.targetPath ?? "", weight: 1 },
372
+ ].filter((f) => f.text);
373
+ const tokens = [];
374
+ for (const f of fields) {
375
+ for (let i = 0; i < f.weight; i++) {
376
+ tokens.push(...tokenize(f.text));
377
+ }
378
+ }
379
+ index.add(eventKey(e), { id: eventKey(e), tokens, fields });
380
+ }
381
+ return index;
382
+ }
383
+ export function eventKey(e) {
384
+ return `${e.ts}::${e.sessionId}::${e.toolId}`;
385
+ }
386
+ /**
387
+ * Rank events by query relevance. Chip filters are applied first; BM25 ranks
388
+ * the survivors; optional semantic embeddings are merged with RRF.
389
+ */
390
+ export function rankEvents(events, options) {
391
+ const { query, filters, embeddings, queryEmbedding, facetBoost = 0.05 } = options;
392
+ const q = query.trim();
393
+ const hints = extractFacetHints(q);
394
+ const filtered = applyChipFilters(events, filters ?? {});
395
+ const index = buildEventIndex(filtered);
396
+ const bm25 = index.search(q);
397
+ const byId = new Map(filtered.map((e) => [eventKey(e), e]));
398
+ let merged = bm25;
399
+ if (embeddings && embeddings.size > 0 && q.length > 0 && queryEmbedding) {
400
+ const semantic = [];
401
+ for (const e of filtered) {
402
+ const vec = embeddings.get(eventKey(e));
403
+ if (!vec)
404
+ continue;
405
+ const sim = cosine(queryEmbedding, vec);
406
+ if (sim > 0)
407
+ semantic.push({ id: eventKey(e), score: sim });
408
+ }
409
+ merged = rrfMerge(bm25, semantic.sort((a, b) => b.score - a.score));
410
+ }
411
+ const ranked = [];
412
+ for (const s of merged) {
413
+ const event = byId.get(s.id);
414
+ if (event)
415
+ ranked.push({ event, score: s.score });
416
+ }
417
+ return applyFacetBoost(ranked, byId, hints, facetBoost);
418
+ }
419
+ function applyFacetBoost(ranked, byId, hints, boost) {
420
+ if (!hints.verdict && !hints.server && !hints.product && !hints.mode)
421
+ return ranked;
422
+ return ranked.map((r) => {
423
+ const e = byId.get(eventKey(r.event));
424
+ if (!e)
425
+ return r;
426
+ let b = 0;
427
+ if (hints.verdict?.includes(e.verdict.toUpperCase()))
428
+ b += boost;
429
+ const parsed = parseMcpToolId(e.toolId);
430
+ if (parsed && hints.server?.includes(mcpServerLabel(parsed.server)))
431
+ b += boost;
432
+ if (hints.product?.includes(e.product ?? "other"))
433
+ b += boost;
434
+ if (hints.mode?.includes(e.mode))
435
+ b += boost;
436
+ return b > 0 ? { event: r.event, score: r.score + b } : r;
437
+ });
438
+ }
439
+ export function applyChipFilters(events, filters) {
440
+ const groups = Object.entries(filters)
441
+ .map(([group, vals]) => [group, vals.filter((v) => v !== "")])
442
+ .filter(([, vals]) => vals.length > 0);
443
+ if (groups.length === 0)
444
+ return [...events];
445
+ return events.filter((e) => groups.every(([group, vals]) => vals.some((v) => eventMatchesFilter(e, group, v))));
446
+ }
447
+ export function eventMatchesFilter(e, group, value) {
448
+ switch (group) {
449
+ case "verdict":
450
+ return e.verdict.toUpperCase() === value;
451
+ case "never":
452
+ return (e.neverEvent || e.reasonCode === "NEVER_EVENT") && value === "1";
453
+ case "mode":
454
+ return e.mode === value;
455
+ case "plane":
456
+ return (e.host?.trim() || "unknown") === value;
457
+ case "product":
458
+ return (e.product ?? "other") === value;
459
+ case "project":
460
+ if (value === "")
461
+ return false;
462
+ return (e.project?.trim() ?? "") === value;
463
+ case "tool":
464
+ return clip(e.toolId, 60) === value;
465
+ case "session":
466
+ return (e.sessionId || "unknown") === value;
467
+ case "server": {
468
+ const parsed = parseMcpToolId(e.toolId);
469
+ return parsed != null && mcpServerLabel(parsed.server) === value;
470
+ }
471
+ default:
472
+ return false;
473
+ }
474
+ }
475
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/receipt/search.ts"],"names":[],"mappings":"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"}
package/droid/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Droid (Factory) + Shield KYA
2
2
 
3
- Preferred path is Droid's own CLI: `droid mcp add shield-kya "npx --no-install @shield-agent/kya@0.18.0 serve-mcp --stdio" --env KYA_BASE_URL=https://shield-agent.com --env KYA_API_KEY=$KYA_API_KEY --env KYA_HOST=ide`.
3
+ Preferred path is Droid's own CLI: `droid mcp add shield-kya "npx --no-install @shield-agent/kya@0.20.0 serve-mcp --stdio" --env KYA_BASE_URL=https://shield-agent.com --env KYA_API_KEY=$KYA_API_KEY --env KYA_HOST=ide`.
4
4
 
5
5
  `mcp.example.json` shows the expected on-disk shape (`~/.factory/mcp.json`) — **schema not yet verified against a live Droid install**; treat as a starting point and prefer `droid mcp add`.
6
6
 
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "shield-kya": {
4
4
  "command": "npx",
5
- "args": ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "args": ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "env": {
7
7
  "KYA_BASE_URL": "https://shield-agent.com",
8
8
  "KYA_API_KEY": "${KYA_API_KEY}",
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "shield-kya": {
4
4
  "command": "npx",
5
- "args": ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "args": ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "env": {
7
7
  "KYA_BASE_URL": "https://shield-agent.com",
8
8
  "KYA_API_KEY": "${KYA_API_KEY}",
package/grok/README.md CHANGED
@@ -40,7 +40,7 @@ chat = client.chat.create(
40
40
  There is no grok.com stdio path. For a local agent host use the same stdio launch as Claude:
41
41
 
42
42
  ```bash
43
- npx --no-install @shield-agent/kya@0.18.0 serve-mcp --stdio
43
+ npx --no-install @shield-agent/kya@0.20.0 serve-mcp --stdio
44
44
  ```
45
45
 
46
46
  Env: `KYA_BASE_URL`, `KYA_API_KEY`, `KYA_HOST`. Codex and Gemini example configs in this package show the full snippets.
@@ -2,7 +2,7 @@
2
2
  "mcp": {
3
3
  "shield-kya": {
4
4
  "type": "local",
5
- "command": ["npx", "--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "command": ["npx", "--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "enabled": true,
7
7
  "environment": {
8
8
  "KYA_BASE_URL": "https://shield-agent.com",
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "shield-kya": {
4
4
  "command": "npx",
5
- "args": ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "args": ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "env": {
7
7
  "KYA_BASE_URL": "https://shield-agent.com",
8
8
  "KYA_API_KEY": "${KYA_API_KEY}",
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "shield-kya": {
4
4
  "command": "npx",
5
- "args": ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "args": ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "env": {
7
7
  "KYA_BASE_URL": "https://shield-agent.com",
8
8
  "KYA_API_KEY": "${KYA_API_KEY}",
package/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "manifest_version": "0.3",
3
3
  "name": "shield-kya",
4
4
  "display_name": "Shield KYA",
5
- "version": "0.18.0",
5
+ "version": "0.20.0",
6
6
  "description": "Know Your Agent MCP gate: ALLOW / DENY / REQUIRE_APPROVE. Sole PEP is Shield.",
7
7
  "long_description": "Local Claude Desktop extension that runs the packaged `dist/cli.js serve-mcp --stdio` against your Shield control plane (local or https://shield-agent.com). Tools evaluate policy, ingest session risk, and open Hold tickets. They never execute irreversible side effects.",
8
8
  "author": {
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "shield-kya": {
4
4
  "command": "npx",
5
- "args": ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "args": ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "env": {
7
7
  "KYA_BASE_URL": "https://shield-agent.com",
8
8
  "KYA_API_KEY": "${KYA_API_KEY}",
package/mcp.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "shield-kya": {
4
4
  "description": "Know Your Agent local MCP gate: wrap-before-write, named-agent registry, Hold/Clear.",
5
5
  "command": "npx",
6
- "args": ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
6
+ "args": ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
7
7
  "env": {
8
8
  "KYA_BASE_URL": "${KYA_BASE_URL}",
9
9
  "KYA_API_KEY": "${KYA_API_KEY}",
@@ -11,7 +11,7 @@
11
11
  # --- Local stdio (OSS) ---
12
12
  [mcp_servers.shield-kya]
13
13
  command = "npx"
14
- args = ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"]
14
+ args = ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"]
15
15
  startup_timeout_sec = 20
16
16
  env_vars = ["KYA_BASE_URL", "KYA_API_KEY", "KYA_HOST", "KYA_AGENT_ID"]
17
17
 
@@ -2,7 +2,7 @@
2
2
  "mcp": {
3
3
  "shield-kya": {
4
4
  "type": "local",
5
- "command": ["npx", "--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "command": ["npx", "--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "enabled": true,
7
7
  "environment": {
8
8
  "KYA_BASE_URL": "https://shield-agent.com",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shield-agent/kya",
3
- "version": "0.18.0",
4
- "description": "Audit trail & traceability for AI agents — local MCP gate (Allow/Review/Deny), live receipt dashboard, trust-baseline certification.",
3
+ "version": "0.20.0",
4
+ "description": "AI agents audit trail & traceability — gate every tool call (Allow / Review / Deny), live activity dashboard, and continuous trust-baseline certification.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "mcpName": "io.github.The-Pixel-Boys/shield-kya",
@@ -65,6 +65,7 @@
65
65
  "devDependencies": {
66
66
  "@types/node": "^22.10.5",
67
67
  "@vitest/coverage-v8": "^3.2.6",
68
+ "fastembed": "^3.0.0",
68
69
  "typescript": "^5.7.2",
69
70
  "vitest": "^3.2.6"
70
71
  },
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "shield-kya": {
4
4
  "command": "npx",
5
- "args": ["--no-install", "@shield-agent/kya@0.18.0", "serve-mcp", "--stdio"],
5
+ "args": ["--no-install", "@shield-agent/kya@0.20.0", "serve-mcp", "--stdio"],
6
6
  "env": {
7
7
  "KYA_BASE_URL": "https://shield-agent.com",
8
8
  "KYA_API_KEY": "${KYA_API_KEY}",