@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.
Files changed (30) hide show
  1. package/chariot-adapter-bundle.json +9764 -20789
  2. package/chariot-adapter-bundle.json.sig +1 -1
  3. package/chariot-adapter-catalog.json +5367 -11447
  4. package/chariot-adapter-catalog.json.sig +1 -1
  5. package/chariot-current.json +1 -3
  6. package/chariot-mcp-registry.json +4394 -9339
  7. package/dist/bin/chariot.js +100 -10
  8. package/dist/bin/chariot.js.map +1 -1
  9. package/dist/engine/bin/setup.js +114 -24
  10. package/dist/engine/bin/setup.js.map +1 -1
  11. package/dist/engine/federation/QueryExpander.d.ts.map +1 -1
  12. package/dist/engine/federation/QueryExpander.js +43 -1
  13. package/dist/engine/federation/QueryExpander.js.map +1 -1
  14. package/dist/engine/federation/ToolPreFilter.d.ts.map +1 -1
  15. package/dist/engine/federation/ToolPreFilter.js +138 -2
  16. package/dist/engine/federation/ToolPreFilter.js.map +1 -1
  17. package/dist/engine/persona/SystemPromptBuilder.d.ts +1 -0
  18. package/dist/engine/persona/SystemPromptBuilder.d.ts.map +1 -1
  19. package/dist/engine/persona/SystemPromptBuilder.js +33 -1
  20. package/dist/engine/persona/SystemPromptBuilder.js.map +1 -1
  21. package/dist/engine/persona/injection-defense.d.ts +86 -0
  22. package/dist/engine/persona/injection-defense.d.ts.map +1 -1
  23. package/dist/engine/persona/injection-defense.js +213 -16
  24. package/dist/engine/persona/injection-defense.js.map +1 -1
  25. package/dist/engine/server/ChariotState.d.ts +33 -0
  26. package/dist/engine/server/ChariotState.d.ts.map +1 -1
  27. package/dist/engine/server/ChariotState.js +203 -4
  28. package/dist/engine/server/ChariotState.js.map +1 -1
  29. package/native/integrity.json +5 -5
  30. 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
- * Inspect a vocabulary substitution VALUE for injection content.
193
- *
194
- * Vocabulary substitution runs after sanitizeInjectedContent over the
195
- * fully-assembled prompt (see SystemPromptBuilder.applyVocabulary), so
196
- * a malicious vocabulary VALUE can splice an INJECTION_PATTERNS prefix
197
- * INTO the persona anchor and break the I4 invariant — see ai-eval 32
198
- * cat5-07 "vocabulary substitution that injects 'ignore previous
199
- * instructions'".
200
- *
201
- * Returns true if the replacement contains a line whose normalized
202
- * prefix matches INJECTION_PATTERNS. The caller is expected to skip
203
- * that substitution and either log or surface the rejection.
204
- *
205
- * The check inspects EVERY line of the replacement, not just the first,
206
- * because a replacement value can itself contain newlines that splice
207
- * an injection prefix into a later position of the assembled prompt.
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":"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"}
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 adapters;
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 isInState = !!state.adapters[adapter.id];
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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"}