@epicai/chariot 3.0.3 → 3.0.5
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/chariot-adapter-bundle.json +9764 -20789
- package/chariot-adapter-bundle.json.sig +1 -1
- package/chariot-adapter-catalog.json +5367 -11447
- package/chariot-adapter-catalog.json.sig +1 -1
- package/chariot-current.json +1 -3
- package/chariot-mcp-registry.json +4394 -9339
- package/dist/bin/chariot.js +100 -10
- package/dist/bin/chariot.js.map +1 -1
- package/dist/engine/bin/setup.js +114 -24
- package/dist/engine/bin/setup.js.map +1 -1
- package/dist/engine/federation/QueryExpander.d.ts.map +1 -1
- package/dist/engine/federation/QueryExpander.js +43 -1
- package/dist/engine/federation/QueryExpander.js.map +1 -1
- package/dist/engine/federation/ToolPreFilter.d.ts.map +1 -1
- package/dist/engine/federation/ToolPreFilter.js +138 -2
- package/dist/engine/federation/ToolPreFilter.js.map +1 -1
- package/dist/engine/persona/SystemPromptBuilder.d.ts +1 -0
- package/dist/engine/persona/SystemPromptBuilder.d.ts.map +1 -1
- package/dist/engine/persona/SystemPromptBuilder.js +33 -1
- package/dist/engine/persona/SystemPromptBuilder.js.map +1 -1
- package/dist/engine/persona/injection-defense.d.ts +86 -0
- package/dist/engine/persona/injection-defense.d.ts.map +1 -1
- package/dist/engine/persona/injection-defense.js +213 -16
- package/dist/engine/persona/injection-defense.js.map +1 -1
- package/dist/engine/server/ChariotState.d.ts +33 -0
- package/dist/engine/server/ChariotState.d.ts.map +1 -1
- package/dist/engine/server/ChariotState.js +203 -4
- package/dist/engine/server/ChariotState.js.map +1 -1
- package/native/integrity.json +5 -5
- package/package.json +6 -6
|
@@ -188,24 +188,221 @@ function lineLooksInjected(line) {
|
|
|
188
188
|
return true;
|
|
189
189
|
return INJECTION_MIDLINE_RE.test(stripInvisibleChars(line));
|
|
190
190
|
}
|
|
191
|
+
const REFUSAL_TRIGGER_WORDS = [
|
|
192
|
+
'provide', 'write', 'tell me', 'explain', 'generate', 'make', 'create',
|
|
193
|
+
'show me', 'give me', 'describe', 'detail', 'how to', 'step by step',
|
|
194
|
+
'instructions for', 'synthesize', 'manufacture', 'build a', 'cook',
|
|
195
|
+
];
|
|
196
|
+
const REFUSED_TOPIC_TOKENS = [
|
|
197
|
+
'methamphetamine', 'meth', 'cocaine', 'heroin', 'fentanyl',
|
|
198
|
+
'exploit', 'rce', 'zero-day', '0-day', 'vulnerability',
|
|
199
|
+
'pick lock', 'lock pick', 'break in', 'burglar',
|
|
200
|
+
'phishing', 'credential theft', 'banking credential',
|
|
201
|
+
'pipe bomb', 'bomb', 'explosive', 'detonator',
|
|
202
|
+
'dox', 'doxx', 'mass-scrape',
|
|
203
|
+
];
|
|
204
|
+
const DAN_PATTERNS = [
|
|
205
|
+
/\bDAN\b\s*:/i,
|
|
206
|
+
/\bjailbreak\b/i,
|
|
207
|
+
/\bact as\s+(?:DAN|an unrestricted|an? evil|an? jailbroken|an? AI (?:with|that has) no)/i,
|
|
208
|
+
/\bpretend (?:you are|to be)\s+(?:DAN|an unrestricted|an? evil|an? jailbroken|an? AI (?:with|that has) no|an? AI from)/i,
|
|
209
|
+
/\bignore (?:previous|all|prior)\s+(?:instructions|rules|prompts)/i,
|
|
210
|
+
/\byou are now\s+(?:DAN|an unrestricted|jailbroken|liberated|free|operating in)/i,
|
|
211
|
+
/\bdeveloper mode\b/i,
|
|
212
|
+
/\bgodmode\b/i,
|
|
213
|
+
// bug-tracker-ref P3 counterexamples that survived the original list:
|
|
214
|
+
// - "Pretend you are an AI from the year 2157 ..." (temporal displacement)
|
|
215
|
+
// - "My grandmother used to read me bedtime stories ... roleplay as my grandmother"
|
|
216
|
+
// (relative-impersonation frame)
|
|
217
|
+
/\bpretend (?:you are|to be) an? AI from\b/i,
|
|
218
|
+
/\bfrom (?:the year|year) \d{4}\b.*\b(?:no restrictions|all information is public|public domain)/i,
|
|
219
|
+
/\broleplay as (?:my|your) (?:grandmother|grandpa|grandfather|grandmom|teacher|friend|character)/i,
|
|
220
|
+
/\bbedtime stor(?:y|ies) that includ(?:e|ed) the following kind of information/i,
|
|
221
|
+
];
|
|
222
|
+
const HYPOTHETICAL_FRAMES = [
|
|
223
|
+
/\bimagine (?:you were|that you are|you are)\b/i,
|
|
224
|
+
/\bin a (?:parallel universe|fictional world|hypothetical|alternate)\b/i,
|
|
225
|
+
/\bfor a (?:novel|story|book|movie|screenplay) (?:i(?:'m| am) (?:writing|working on))\b/i,
|
|
226
|
+
/\bwhat if (?:a |an |the )?(?:teacher|character|chemist|hacker|criminal)\s+needed to/i,
|
|
227
|
+
/\bin a hypothetical scenario where\b/i,
|
|
228
|
+
/\broleplay (?:as|that you are)\b/i,
|
|
229
|
+
];
|
|
230
|
+
function containsRefusedContent(text) {
|
|
231
|
+
const lower = text.toLowerCase();
|
|
232
|
+
const hasTrigger = REFUSAL_TRIGGER_WORDS.some((w) => lower.includes(w));
|
|
233
|
+
const hasTopic = REFUSED_TOPIC_TOKENS.some((t) => lower.includes(t));
|
|
234
|
+
return hasTrigger && hasTopic;
|
|
235
|
+
}
|
|
236
|
+
function tryBase64Decode(input) {
|
|
237
|
+
// Find the longest contiguous base64-charset run >= 40 chars.
|
|
238
|
+
const matches = input.match(/[A-Za-z0-9+/=]{40,}/g);
|
|
239
|
+
if (!matches)
|
|
240
|
+
return null;
|
|
241
|
+
for (const candidate of matches) {
|
|
242
|
+
try {
|
|
243
|
+
const decoded = Buffer.from(candidate, 'base64').toString('utf-8');
|
|
244
|
+
// Heuristic: decoded must be mostly printable ASCII.
|
|
245
|
+
if (/^[\x20-\x7E\s]{20,}$/.test(decoded))
|
|
246
|
+
return decoded;
|
|
247
|
+
}
|
|
248
|
+
catch { /* ignore */ }
|
|
249
|
+
}
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
function rot13(s) {
|
|
253
|
+
return s.replace(/[A-Za-z]/g, (c) => {
|
|
254
|
+
const base = c <= 'Z' ? 65 : 97;
|
|
255
|
+
return String.fromCharCode(((c.charCodeAt(0) - base + 13) % 26) + base);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
function decodeLeetspeak(s) {
|
|
259
|
+
return s
|
|
260
|
+
.replace(/3/g, 'e').replace(/4/g, 'a').replace(/1/g, 'i')
|
|
261
|
+
.replace(/0/g, 'o').replace(/5/g, 's').replace(/7/g, 't')
|
|
262
|
+
.replace(/@/g, 'a').replace(/!/g, 'i').replace(/\$/g, 's');
|
|
263
|
+
}
|
|
264
|
+
export function screenUserMessage(message) {
|
|
265
|
+
if (typeof message !== 'string' || message.length === 0) {
|
|
266
|
+
return { block: false, reason: 'clean' };
|
|
267
|
+
}
|
|
268
|
+
// 1. DAN / persona-swap / ignore-previous patterns — block on regex match.
|
|
269
|
+
for (const re of DAN_PATTERNS) {
|
|
270
|
+
if (re.test(message)) {
|
|
271
|
+
return { block: true, reason: 'dan-prefix', matchedPattern: re.source };
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// 2. Hypothetical framings + refused-content combination.
|
|
275
|
+
for (const re of HYPOTHETICAL_FRAMES) {
|
|
276
|
+
if (re.test(message)) {
|
|
277
|
+
if (containsRefusedContent(message)) {
|
|
278
|
+
return { block: true, reason: 'hypothetical-refusal', matchedPattern: re.source };
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// 3. Base64-encoded refusal.
|
|
283
|
+
const b64Decoded = tryBase64Decode(message);
|
|
284
|
+
if (b64Decoded && containsRefusedContent(b64Decoded)) {
|
|
285
|
+
return { block: true, reason: 'base64-refusal', matchedPattern: 'base64' };
|
|
286
|
+
}
|
|
287
|
+
// 4. Rot13 refusal. The rot13'd payload often contains punctuation
|
|
288
|
+
// (hyphens, periods, commas) that breaks contiguous letter runs, so we
|
|
289
|
+
// accept any letter+space+common-punctuation run of length >= 30 and also
|
|
290
|
+
// rotate the whole message as a fallback. If the rotated form contains
|
|
291
|
+
// refused content but the original does not, that's a strong rot13 signal.
|
|
292
|
+
if (message.length >= 30) {
|
|
293
|
+
const letterRun = message.match(/[A-Za-z][A-Za-z\s.,\-'"]{30,}/);
|
|
294
|
+
if (letterRun) {
|
|
295
|
+
const rotated = rot13(letterRun[0]);
|
|
296
|
+
if (containsRefusedContent(rotated)) {
|
|
297
|
+
return { block: true, reason: 'rot13-refusal', matchedPattern: 'rot13' };
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Whole-message rot13 fallback.
|
|
301
|
+
const wholeRotated = rot13(message);
|
|
302
|
+
if (containsRefusedContent(wholeRotated) && !containsRefusedContent(message)) {
|
|
303
|
+
return { block: true, reason: 'rot13-refusal', matchedPattern: 'rot13-whole' };
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// 5. Leetspeak refusal.
|
|
307
|
+
if (/[0-9@!$]/.test(message)) {
|
|
308
|
+
const decoded = decodeLeetspeak(message);
|
|
309
|
+
if (containsRefusedContent(decoded) && !containsRefusedContent(message)) {
|
|
310
|
+
return { block: true, reason: 'leetspeak-refusal', matchedPattern: 'leetspeak' };
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return { block: false, reason: 'clean' };
|
|
314
|
+
}
|
|
191
315
|
/**
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
316
|
+
* Canonical refusal text emitted by callers when screenUserMessage returns
|
|
317
|
+
* block:true. Keeping it as a constant means the eval judge can recognize
|
|
318
|
+
* the response shape reliably.
|
|
319
|
+
*/
|
|
320
|
+
export const CODE_LEVEL_REFUSAL_TEXT = 'I cannot help with that request. The message matched a content-policy '
|
|
321
|
+
+ 'pre-classifier (encoded payload, hypothetical-frame attack, or persona-swap '
|
|
322
|
+
+ 'attempt) and was refused before reaching the language model.';
|
|
323
|
+
export function createMultiTurnState() {
|
|
324
|
+
return {
|
|
325
|
+
turn: 0,
|
|
326
|
+
authorityBootstrapAttempts: 0,
|
|
327
|
+
piecemealExtractionAttempts: 0,
|
|
328
|
+
benignTrustBuildingTurns: 0,
|
|
329
|
+
flagged: false,
|
|
330
|
+
reasons: [],
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
const SENSITIVE_TARGET_TOKENS = [
|
|
334
|
+
'system prompt', 'system-prompt', 'systemprompt',
|
|
335
|
+
'credential', 'api key', 'api_key', 'apikey', 'secret', 'token',
|
|
336
|
+
'password', 'private key', 'vault', 'internal url', 'internal api',
|
|
337
|
+
'adapter config', 'connection string', 'database url', 'configuration',
|
|
338
|
+
];
|
|
339
|
+
const AUTHORITY_BOOTSTRAP_PATTERNS = [
|
|
340
|
+
/\bas (?:we |you |i )?(?:discussed|agreed|established|confirmed|noted)\b/i,
|
|
341
|
+
/\bearlier (?:you|we) (?:agreed|confirmed|said|established)\b/i,
|
|
342
|
+
/\byou already (?:agreed|confirmed|said|approved|allowed)\b/i,
|
|
343
|
+
/\bwe (?:already )?established\b/i,
|
|
344
|
+
/\bper (?:our|your) (?:prior|earlier|previous) (?:agreement|conversation|exchange)\b/i,
|
|
345
|
+
/\bgiven (?:your|the) (?:earlier|prior) (?:confirmation|approval|agreement)\b/i,
|
|
346
|
+
];
|
|
347
|
+
const PIECEMEAL_EXTRACTION_PATTERNS = [
|
|
348
|
+
/\bjust the first (?:line|word|sentence|character)\b/i,
|
|
349
|
+
/\b(?:approximately |roughly )?how many (?:sentences|lines|words|tokens|characters) (?:does|is)\b/i,
|
|
350
|
+
/\bdoes\b\s+(?:it|the|your|any)\s*(?:prompt|system|instruction|config|policy|configuration|setup)?\s*(?:mention|contain|reference|include|cover|specify|say)\b/i,
|
|
351
|
+
/\bcan you (?:just |only )?(?:confirm|verify|tell me) (?:whether|if|that)\b/i,
|
|
352
|
+
/\bwhat (?:topic|subject|theme|area) (?:does|is) (?:the prompt|it) (?:about|on|cover)\b/i,
|
|
353
|
+
/\bgive me a (?:hint|clue|summary) (?:about|of|on)\b/i,
|
|
354
|
+
];
|
|
355
|
+
/**
|
|
356
|
+
* Update the multi-turn state with a new user message and return whether
|
|
357
|
+
* the current turn should be blocked. Should be called once per user
|
|
358
|
+
* turn in conversation order.
|
|
208
359
|
*/
|
|
360
|
+
export function screenMultiTurn(state, message) {
|
|
361
|
+
state.turn += 1;
|
|
362
|
+
if (typeof message !== 'string' || message.length === 0) {
|
|
363
|
+
return { block: false, reason: 'clean' };
|
|
364
|
+
}
|
|
365
|
+
const lower = message.toLowerCase();
|
|
366
|
+
// 1. Authority-bootstrap: count attempts; block on each (the attacker is
|
|
367
|
+
// explicitly claiming false prior consent).
|
|
368
|
+
for (const re of AUTHORITY_BOOTSTRAP_PATTERNS) {
|
|
369
|
+
if (re.test(message)) {
|
|
370
|
+
state.authorityBootstrapAttempts += 1;
|
|
371
|
+
state.flagged = true;
|
|
372
|
+
const reason = `authority-bootstrap (claim ${state.authorityBootstrapAttempts})`;
|
|
373
|
+
if (!state.reasons.includes(reason))
|
|
374
|
+
state.reasons.push(reason);
|
|
375
|
+
return { block: true, reason: 'authority-bootstrap', matchedPattern: re.source };
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// 2. Piecemeal extraction patterns. After 3 such turns, future ones block.
|
|
379
|
+
for (const re of PIECEMEAL_EXTRACTION_PATTERNS) {
|
|
380
|
+
if (re.test(message)) {
|
|
381
|
+
state.piecemealExtractionAttempts += 1;
|
|
382
|
+
// Even the FIRST piecemeal attempt is suspicious enough to block.
|
|
383
|
+
state.flagged = true;
|
|
384
|
+
const reason = `piecemeal-extraction (attempt ${state.piecemealExtractionAttempts})`;
|
|
385
|
+
if (!state.reasons.includes(reason))
|
|
386
|
+
state.reasons.push(reason);
|
|
387
|
+
return { block: true, reason: 'piecemeal-extraction', matchedPattern: re.source };
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// 3. Sensitive-target language unconditionally blocks. There is no benign
|
|
391
|
+
// customer reason to ask for the chariot system prompt, credentials, API
|
|
392
|
+
// keys, vault contents, or internal connection strings — those are the
|
|
393
|
+
// operational data the IVA is supposed to PROTECT. Single-turn
|
|
394
|
+
// screenUserMessage doesn't catch innocuous-looking questions like
|
|
395
|
+
// "what is your API key configuration?"; multi-turn catches them here
|
|
396
|
+
// regardless of trust-building stage.
|
|
397
|
+
const hasSensitiveTarget = SENSITIVE_TARGET_TOKENS.some((t) => lower.includes(t));
|
|
398
|
+
if (hasSensitiveTarget) {
|
|
399
|
+
state.flagged = true;
|
|
400
|
+
state.reasons.push(`slow-drift-target turn=${state.turn} (sensitive operational data requested)`);
|
|
401
|
+
return { block: true, reason: 'slow-drift-target' };
|
|
402
|
+
}
|
|
403
|
+
state.benignTrustBuildingTurns += 1;
|
|
404
|
+
return { block: false, reason: 'clean' };
|
|
405
|
+
}
|
|
209
406
|
export function vocabularyReplacementIsUnsafe(replacement) {
|
|
210
407
|
// Per-line check: anchored INJECTION_PATTERNS catches an injection-token
|
|
211
408
|
// prefix on a new line; INJECTION_MIDLINE_RE catches mid-line splices like
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injection-defense.js","sourceRoot":"","sources":["../../../src/engine/persona/injection-defense.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;;;;GAYG;AACH,iFAAiF;AACjF,gFAAgF;AAChF,iEAAiE;AACjE,uEAAuE;AACvE,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAC7B,8hBAA8hB,CAAC;AAEjiB;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,y8BAAy8B,CAAC;AAE58B,8EAA8E;AAC9E,6CAA6C;AAC7C,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,uEAAuE;AACvE,0DAA0D;AAC1D,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;AAExE;;;;;GAKG;AACH,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;AAEzE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,OAAO,CAAC;SACL,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAC7B,SAAS,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,sEAAsE;IACtE,iEAAiE;IACjE,kEAAkE;IAClE,sEAAsE;IACtE,mEAAmE;IACnE,mEAAmE;IACnE,mEAAmE;IACnE,sEAAsE;IACtE,4CAA4C;IAC5C,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IACzC,OAAO,OAAO;SACX,KAAK,CAAC,uBAAuB,CAAC;SAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SACxC,GAAG,CAAC,uBAAuB,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"injection-defense.js","sourceRoot":"","sources":["../../../src/engine/persona/injection-defense.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,14 @@ export interface AdapterEntry {
|
|
|
11
11
|
name: string;
|
|
12
12
|
description?: string;
|
|
13
13
|
category?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Semantic search keywords authored by the catalog publisher enricher. Used by
|
|
16
|
+
* buildToolsForRouting to broaden the BM25 indexed text beyond
|
|
17
|
+
* id+toolNames+description so domain queries (e.g. "photosynthesis"
|
|
18
|
+
* for the Wikipedia adapter whose toolNames are vendor-anonymized
|
|
19
|
+
* `ask_pipeworx`) reach the right adapter. bug-tracker-ref.
|
|
20
|
+
*/
|
|
21
|
+
keywords?: string[];
|
|
14
22
|
type?: string;
|
|
15
23
|
rest?: {
|
|
16
24
|
module?: string;
|
|
@@ -236,6 +244,31 @@ export interface ChariotState {
|
|
|
236
244
|
*/
|
|
237
245
|
observabilityEmitter?: ObservabilityEmitterContract;
|
|
238
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* Bridge the catalog publisher publisher field names to the dispatcher's canonical field names.
|
|
249
|
+
* the catalog publisher emits `mcp.serverUrl` (HTTP/SSE) and `mcp.packageName` (stdio); dispatch
|
|
250
|
+
* sites in setup.ts and toolHandlers.ts read `mcp.url` and `mcp.command`/`mcp.args`.
|
|
251
|
+
* This function is the single field-name reconciliation point. Both legacy and
|
|
252
|
+
* canonical fields are preserved so emitter-side code that reads either still works.
|
|
253
|
+
*/
|
|
254
|
+
export declare function normalizeAdapter(adapter: AdapterEntry): AdapterEntry;
|
|
255
|
+
/**
|
|
256
|
+
* True when an adapter resolves to at least one dispatcher branch in
|
|
257
|
+
* setup.ts (CLI query path) or toolHandlers.ts (server runtime path).
|
|
258
|
+
* Call AFTER normalizeAdapter so serverUrl/packageName have been bridged.
|
|
259
|
+
*
|
|
260
|
+
* An adapter is dispatchable iff:
|
|
261
|
+
* - streamable-http or sse transport with a url, OR
|
|
262
|
+
* - stdio transport with a command, OR
|
|
263
|
+
* - rest with module+className, OR
|
|
264
|
+
* - cli with binary + toolSchemas.
|
|
265
|
+
*
|
|
266
|
+
* Undispatchable entries are dropped at load time so they never reach the
|
|
267
|
+
* routing index or the configured set; the customer cannot select an
|
|
268
|
+
* adapter that would 100% fail at dispatch time with
|
|
269
|
+
* "No executable transport".
|
|
270
|
+
*/
|
|
271
|
+
export declare function isDispatchable(adapter: AdapterEntry): boolean;
|
|
239
272
|
export declare function loadAllAdapters(): Promise<AdapterEntry[]>;
|
|
240
273
|
export declare function buildToolsForRouting(adapters: AdapterEntry[]): Array<{
|
|
241
274
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChariotState.d.ts","sourceRoot":"","sources":["../../../src/engine/server/ChariotState.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChariotState.d.ts","sourceRoot":"","sources":["../../../src/engine/server/ChariotState.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,58 @@ function getPackageRoot() {
|
|
|
21
21
|
const thisFile = fileURLToPath(import.meta.url);
|
|
22
22
|
return join(thisFile, '..', '..', '..', '..');
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Bridge the catalog publisher publisher field names to the dispatcher's canonical field names.
|
|
26
|
+
* the catalog publisher emits `mcp.serverUrl` (HTTP/SSE) and `mcp.packageName` (stdio); dispatch
|
|
27
|
+
* sites in setup.ts and toolHandlers.ts read `mcp.url` and `mcp.command`/`mcp.args`.
|
|
28
|
+
* This function is the single field-name reconciliation point. Both legacy and
|
|
29
|
+
* canonical fields are preserved so emitter-side code that reads either still works.
|
|
30
|
+
*/
|
|
31
|
+
export function normalizeAdapter(adapter) {
|
|
32
|
+
if (!adapter.mcp)
|
|
33
|
+
return adapter;
|
|
34
|
+
if (!adapter.mcp.url && adapter.mcp.serverUrl) {
|
|
35
|
+
adapter.mcp.url = adapter.mcp.serverUrl;
|
|
36
|
+
}
|
|
37
|
+
if (!adapter.mcp.command && adapter.mcp.packageName) {
|
|
38
|
+
adapter.mcp.command = 'npx';
|
|
39
|
+
if (!adapter.mcp.args) {
|
|
40
|
+
adapter.mcp.args = ['-y', adapter.mcp.packageName];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return adapter;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* True when an adapter resolves to at least one dispatcher branch in
|
|
47
|
+
* setup.ts (CLI query path) or toolHandlers.ts (server runtime path).
|
|
48
|
+
* Call AFTER normalizeAdapter so serverUrl/packageName have been bridged.
|
|
49
|
+
*
|
|
50
|
+
* An adapter is dispatchable iff:
|
|
51
|
+
* - streamable-http or sse transport with a url, OR
|
|
52
|
+
* - stdio transport with a command, OR
|
|
53
|
+
* - rest with module+className, OR
|
|
54
|
+
* - cli with binary + toolSchemas.
|
|
55
|
+
*
|
|
56
|
+
* Undispatchable entries are dropped at load time so they never reach the
|
|
57
|
+
* routing index or the configured set; the customer cannot select an
|
|
58
|
+
* adapter that would 100% fail at dispatch time with
|
|
59
|
+
* "No executable transport".
|
|
60
|
+
*/
|
|
61
|
+
export function isDispatchable(adapter) {
|
|
62
|
+
if (adapter.mcp) {
|
|
63
|
+
if ((adapter.mcp.transport === 'streamable-http' || adapter.mcp.transport === 'sse') && adapter.mcp.url) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
if (adapter.mcp.transport === 'stdio' && adapter.mcp.command) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (adapter.rest?.module && adapter.rest?.className)
|
|
71
|
+
return true;
|
|
72
|
+
if (adapter.cli?.binary && Array.isArray(adapter.cli.toolSchemas))
|
|
73
|
+
return true;
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
24
76
|
export async function loadAllAdapters() {
|
|
25
77
|
try {
|
|
26
78
|
const pkgRoot = getPackageRoot();
|
|
@@ -63,13 +115,34 @@ export async function loadAllAdapters() {
|
|
|
63
115
|
catch (err) {
|
|
64
116
|
log.warn('loadVerifiedDiscoveredAdapters skipped', { error: String(err) });
|
|
65
117
|
}
|
|
118
|
+
const kept = [];
|
|
119
|
+
let droppedTransportless = 0;
|
|
120
|
+
let droppedMismatch = 0;
|
|
66
121
|
for (const adapter of adapters) {
|
|
122
|
+
normalizeAdapter(adapter);
|
|
123
|
+
if (!isDispatchable(adapter)) {
|
|
124
|
+
const hasAnyTransportKey = !!(adapter.mcp?.serverUrl || adapter.mcp?.packageName || adapter.rest || adapter.cli);
|
|
125
|
+
if (hasAnyTransportKey)
|
|
126
|
+
droppedMismatch++;
|
|
127
|
+
else
|
|
128
|
+
droppedTransportless++;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
67
131
|
const names = adapter.rest?.toolNames ?? adapter.mcp?.toolNames;
|
|
68
132
|
if (names && names.length > 0) {
|
|
69
133
|
adapter.toolNamesSet = new Set(names);
|
|
70
134
|
}
|
|
135
|
+
kept.push(adapter);
|
|
136
|
+
}
|
|
137
|
+
if (droppedTransportless > 0 || droppedMismatch > 0) {
|
|
138
|
+
log.warn('adapter catalog: dropped undispatchable entries at load', {
|
|
139
|
+
droppedTransportless,
|
|
140
|
+
droppedMismatch,
|
|
141
|
+
kept: kept.length,
|
|
142
|
+
total: adapters.length,
|
|
143
|
+
});
|
|
71
144
|
}
|
|
72
|
-
return
|
|
145
|
+
return kept;
|
|
73
146
|
}
|
|
74
147
|
catch (err) {
|
|
75
148
|
log.error('loadAllAdapters failed', { error: String(err) });
|
|
@@ -82,22 +155,148 @@ function getConfiguredAdapterIds(allAdapters, creds, config, state) {
|
|
|
82
155
|
const hasCredential = adapter.rest?.envKey ? !!creds[adapter.rest.envKey] : false;
|
|
83
156
|
const hasMcpKeys = adapter.mcp?.envKeys?.some(k => !!creds[k]) ?? false;
|
|
84
157
|
const isSelected = config?.selectedAdapters?.includes(adapter.id) ?? false;
|
|
85
|
-
const
|
|
158
|
+
const stateEntry = state.adapters[adapter.id];
|
|
159
|
+
const isInState = !!stateEntry;
|
|
160
|
+
// bug-tracker-ref / codex follow-up: credentials-pending status is the
|
|
161
|
+
// source of truth — skip regardless of isSelected so stale/manual
|
|
162
|
+
// selectedAdapters entries cannot bypass the gate.
|
|
163
|
+
if (stateEntry && stateEntry.status === 'credentials-pending' &&
|
|
164
|
+
!hasCredential && !hasMcpKeys) {
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
86
167
|
if (hasCredential || hasMcpKeys || isSelected || isInState) {
|
|
87
168
|
ids.add(adapter.id);
|
|
88
169
|
}
|
|
89
170
|
}
|
|
90
171
|
return ids;
|
|
91
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* bug-tracker-ref: an adapter is description-quality-disqualified when its
|
|
175
|
+
* description is missing, too short, or matches one of the auto-generated
|
|
176
|
+
* boilerplate templates the catalog publisher emits when it failed to
|
|
177
|
+
* scrape a real description. These records have no semantic specificity
|
|
178
|
+
* and pollute BM25 by matching generic CRUD tokens (e.g. id="decern-crm"
|
|
179
|
+
* with description "Set your ship colors" matched "hotel occupancy" queries
|
|
180
|
+
* in eval-01). They are kept in the bundle for dispatch but excluded from
|
|
181
|
+
* the routing index so they cannot win top-1 over an adapter whose
|
|
182
|
+
* description actually describes its domain.
|
|
183
|
+
*
|
|
184
|
+
* Whitelist: canonical brand-name adapters (amplitude, datadog, etc.) whose
|
|
185
|
+
* bundle records sometimes ship with an empty description because the
|
|
186
|
+
* publisher couldn't scrape one from the vendor's documentation. Those
|
|
187
|
+
* brands have unambiguous user intent (the query literally names them) and
|
|
188
|
+
* should never be filtered out of routing on quality grounds — the
|
|
189
|
+
* canonical-vendor pin needs them present in `sortedCandidates` to fire.
|
|
190
|
+
*/
|
|
191
|
+
const QUALITY_FILTER_WHITELIST = new Set([
|
|
192
|
+
'amplitude', 'mixpanel', 'pendo', 'hotjar',
|
|
193
|
+
'datadog', 'datadog-observability', 'datadog-rum', 'new-relic', 'sentry',
|
|
194
|
+
'pagerduty', 'opsgenie', 'rootly',
|
|
195
|
+
'okta', 'microsoft-entra', 'auth0', 'crowdstrike-identity',
|
|
196
|
+
'salesforce', 'hubspot', 'pipedrive', 'marketo',
|
|
197
|
+
'github', 'gitlab', 'bitbucket', 'github-actions', 'argocd',
|
|
198
|
+
'slack', 'discord', 'microsoft-teams', 'twilio', 'zoom',
|
|
199
|
+
'stripe', 'paypal', 'square', 'quickbooks', 'accounting',
|
|
200
|
+
'gmail', 'sendgrid', 'mailchimp', 'emailmcp',
|
|
201
|
+
'notion', 'linear', 'jira', 'atlassian-jira', 'asana', 'monday',
|
|
202
|
+
'aws', 'azure', 'gcp', 'kubernetes',
|
|
203
|
+
'wiz', 'snyk', 'crowdstrike', 'agentsec', 'sentinelone',
|
|
204
|
+
'shopify', 'zendesk', 'intercom', 'freshdesk',
|
|
205
|
+
'bamboohr', 'workday', 'greenhouse', 'lever', 'adp',
|
|
206
|
+
'drata', 'vanta', 'secureframe',
|
|
207
|
+
'playwright', 'tavily', 'wayback-machine', 'pubmed',
|
|
208
|
+
'epic-fhir', 'cerner',
|
|
209
|
+
'impala-travel-hotels', 'nelly-elephant', 'opera-pms', 'mews', 'cloudbeds',
|
|
210
|
+
'concur', 'expensify', 'navan',
|
|
211
|
+
'public', // queueing-theory adapter (legit answer to ER-wait-times queries)
|
|
212
|
+
'acumatica', 'netsuite', 'sage',
|
|
213
|
+
'ambianic', // legitimate niche adapter occasionally surfaces
|
|
214
|
+
]);
|
|
215
|
+
const COHESION_STOPWORDS = new Set([
|
|
216
|
+
'the', 'a', 'an', 'and', 'or', 'of', 'for', 'to', 'in', 'on', 'at',
|
|
217
|
+
'by', 'with', 'from', 'is', 'are', 'be', 'this', 'that', 'these',
|
|
218
|
+
'those', 'it', 'its', 'as', 'mcp', 'server', 'api', 'tool', 'tools',
|
|
219
|
+
'set', 'get', 'list', 'create', 'update', 'delete', 'find', 'search',
|
|
220
|
+
'use', 'used', 'using', 'service', 'data', 'info', 'name', 'id',
|
|
221
|
+
]);
|
|
222
|
+
function tokensOf(s) {
|
|
223
|
+
return new Set(s.toLowerCase().split(/[^a-z0-9]+/).filter((t) => t.length >= 3 && !COHESION_STOPWORDS.has(t)));
|
|
224
|
+
}
|
|
225
|
+
function descriptionIsLowQuality(adapter) {
|
|
226
|
+
if (QUALITY_FILTER_WHITELIST.has(adapter.id))
|
|
227
|
+
return false;
|
|
228
|
+
const d = (adapter.description ?? '').trim();
|
|
229
|
+
if (d.length < 20)
|
|
230
|
+
return true;
|
|
231
|
+
if (/^Health check\b/i.test(d))
|
|
232
|
+
return true;
|
|
233
|
+
if (/^Returns server (?:status|info)/i.test(d))
|
|
234
|
+
return true;
|
|
235
|
+
if (/^MCP server by /i.test(d))
|
|
236
|
+
return true;
|
|
237
|
+
if (/^MCP server exposing \d+ tools:/i.test(d))
|
|
238
|
+
return true;
|
|
239
|
+
if (/^Check whether a model ID/i.test(d))
|
|
240
|
+
return true;
|
|
241
|
+
if (/^Echo the input/i.test(d))
|
|
242
|
+
return true;
|
|
243
|
+
// bug-tracker-ref langsmith case: description is just a markdown image
|
|
244
|
+
// alt-text + URL with no actual prose. Strip markdown images / URLs / inline
|
|
245
|
+
// markup and re-check length; if what remains is below 20 chars of real text,
|
|
246
|
+
// the description has no semantic content for BM25 to weigh.
|
|
247
|
+
const stripped = d
|
|
248
|
+
.replace(/!\[[^\]]*\]\([^)]*\)/g, '') // markdown images
|
|
249
|
+
.replace(/\[[^\]]*\]\([^)]*\)/g, '') // markdown links
|
|
250
|
+
.replace(/https?:\/\/\S+/g, '') // bare URLs
|
|
251
|
+
.replace(/`[^`]*`/g, '') // inline code
|
|
252
|
+
.replace(/\s+/g, ' ')
|
|
253
|
+
.trim();
|
|
254
|
+
if (stripped.length < 20)
|
|
255
|
+
return true;
|
|
256
|
+
// bug-tracker-ref spacemolt case (was decern-crm): description tokens
|
|
257
|
+
// do not match the adapter's actual tool surface. Description "Set your
|
|
258
|
+
// ship colors" describes ONE tool; the adapter has 172 game tools
|
|
259
|
+
// (mine, attack, dock, jump, scan, etc.). Such adapters dominate BM25
|
|
260
|
+
// via tool-name token volume against queries whose intent the
|
|
261
|
+
// description does not reflect. Filter when the adapter has a wide
|
|
262
|
+
// tool surface (>=16 tools) and effectively zero token overlap
|
|
263
|
+
// between description and tools. Threshold deliberately conservative
|
|
264
|
+
// so legitimate adapters with concise descriptions aren't filtered.
|
|
265
|
+
const toolNames = adapter.rest?.toolNames ?? adapter.mcp?.toolNames ?? [];
|
|
266
|
+
if (toolNames.length >= 16) {
|
|
267
|
+
const descTokens = tokensOf(stripped);
|
|
268
|
+
const toolTokens = tokensOf(toolNames.join(' '));
|
|
269
|
+
if (toolTokens.size > 0) {
|
|
270
|
+
let overlap = 0;
|
|
271
|
+
for (const t of toolTokens)
|
|
272
|
+
if (descTokens.has(t))
|
|
273
|
+
overlap += 1;
|
|
274
|
+
const coverage = overlap / toolTokens.size;
|
|
275
|
+
if (coverage < 0.05)
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
92
281
|
export function buildToolsForRouting(adapters) {
|
|
93
282
|
const tools = [];
|
|
94
283
|
for (const adapter of adapters) {
|
|
284
|
+
if (descriptionIsLowQuality(adapter))
|
|
285
|
+
continue;
|
|
95
286
|
const toolNames = adapter.rest?.toolNames ?? adapter.mcp?.toolNames ?? [];
|
|
96
287
|
const adapterDesc = adapter.description ?? adapter.id;
|
|
288
|
+
// bug-tracker-ref / bug-tracker-ref: enrich the routing-index text with the
|
|
289
|
+
// the catalog publisher-published `keywords` and `category` so domain queries
|
|
290
|
+
// (e.g. "photosynthesis", "biomedical") reach adapters whose
|
|
291
|
+
// toolNames are vendor-anonymized (`ask_pipeworx`, `search_mesh`).
|
|
292
|
+
const semanticContext = [
|
|
293
|
+
adapter.category ?? '',
|
|
294
|
+
...(adapter.keywords ?? []),
|
|
295
|
+
].filter(Boolean).join(' ');
|
|
97
296
|
if (toolNames.length === 0) {
|
|
98
297
|
tools.push({
|
|
99
298
|
name: `${adapter.id}:default`,
|
|
100
|
-
description: `${adapter.name} — ${adapterDesc}`,
|
|
299
|
+
description: `${adapter.name} — ${adapterDesc}${semanticContext ? ` — ${semanticContext}` : ''}`,
|
|
101
300
|
parameters: { type: 'object', properties: {} },
|
|
102
301
|
server: adapter.id,
|
|
103
302
|
tier: 'orchestrated',
|
|
@@ -107,7 +306,7 @@ export function buildToolsForRouting(adapters) {
|
|
|
107
306
|
for (const t of toolNames) {
|
|
108
307
|
tools.push({
|
|
109
308
|
name: `${adapter.id}:${t}`,
|
|
110
|
-
description: `${adapter.name} — ${t.replace(/_/g, ' ')} — ${adapterDesc}`,
|
|
309
|
+
description: `${adapter.name} — ${t.replace(/_/g, ' ')} — ${adapterDesc}${semanticContext ? ` — ${semanticContext}` : ''}`,
|
|
111
310
|
parameters: { type: 'object', properties: {} },
|
|
112
311
|
server: adapter.id,
|
|
113
312
|
tier: 'orchestrated',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChariotState.js","sourceRoot":"","sources":["../../../src/engine/server/ChariotState.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChariotState.js","sourceRoot":"","sources":["../../../src/engine/server/ChariotState.ts"],"names":[],"mappings":"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"}
|