capman 0.5.5 → 0.6.1

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 (60) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/bin/lib/cmd-generate.js +156 -12
  3. package/bin/lib/cmd-help.js +3 -0
  4. package/dist/cjs/cache.d.ts +9 -0
  5. package/dist/cjs/cache.d.ts.map +1 -1
  6. package/dist/cjs/cache.js +37 -7
  7. package/dist/cjs/cache.js.map +1 -1
  8. package/dist/cjs/engine.d.ts +68 -1
  9. package/dist/cjs/engine.d.ts.map +1 -1
  10. package/dist/cjs/engine.js +313 -13
  11. package/dist/cjs/engine.js.map +1 -1
  12. package/dist/cjs/generator.d.ts.map +1 -1
  13. package/dist/cjs/generator.js +28 -6
  14. package/dist/cjs/generator.js.map +1 -1
  15. package/dist/cjs/index.d.ts +3 -1
  16. package/dist/cjs/index.d.ts.map +1 -1
  17. package/dist/cjs/index.js +5 -1
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/learning.d.ts +7 -0
  20. package/dist/cjs/learning.d.ts.map +1 -1
  21. package/dist/cjs/learning.js +44 -23
  22. package/dist/cjs/learning.js.map +1 -1
  23. package/dist/cjs/matcher.d.ts +92 -0
  24. package/dist/cjs/matcher.d.ts.map +1 -1
  25. package/dist/cjs/matcher.js +354 -35
  26. package/dist/cjs/matcher.js.map +1 -1
  27. package/dist/cjs/parser.js +27 -9
  28. package/dist/cjs/parser.js.map +1 -1
  29. package/dist/cjs/resolver.d.ts +2 -2
  30. package/dist/cjs/resolver.d.ts.map +1 -1
  31. package/dist/cjs/resolver.js +66 -26
  32. package/dist/cjs/resolver.js.map +1 -1
  33. package/dist/cjs/schema.d.ts +865 -94
  34. package/dist/cjs/schema.d.ts.map +1 -1
  35. package/dist/cjs/schema.js +62 -12
  36. package/dist/cjs/schema.js.map +1 -1
  37. package/dist/cjs/types.d.ts +153 -9
  38. package/dist/cjs/types.d.ts.map +1 -1
  39. package/dist/cjs/version.d.ts +1 -1
  40. package/dist/cjs/version.js +1 -1
  41. package/dist/esm/cache.d.ts +9 -0
  42. package/dist/esm/cache.js +37 -7
  43. package/dist/esm/engine.d.ts +68 -1
  44. package/dist/esm/engine.js +314 -14
  45. package/dist/esm/generator.js +28 -6
  46. package/dist/esm/index.d.ts +3 -1
  47. package/dist/esm/index.js +2 -0
  48. package/dist/esm/learning.d.ts +7 -0
  49. package/dist/esm/learning.js +45 -24
  50. package/dist/esm/matcher.d.ts +92 -0
  51. package/dist/esm/matcher.js +346 -35
  52. package/dist/esm/parser.js +27 -9
  53. package/dist/esm/resolver.d.ts +2 -2
  54. package/dist/esm/resolver.js +66 -26
  55. package/dist/esm/schema.d.ts +865 -94
  56. package/dist/esm/schema.js +62 -12
  57. package/dist/esm/types.d.ts +153 -9
  58. package/dist/esm/version.d.ts +1 -1
  59. package/dist/esm/version.js +1 -1
  60. package/package.json +1 -1
@@ -3,9 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.STOPWORDS = exports.LLMParseError = void 0;
6
+ exports.TYPE_PATTERNS = exports.STOPWORDS = exports.LLMParseError = void 0;
7
+ exports.stem = stem;
8
+ exports.tokenize = tokenize;
9
+ exports.buildBM25Index = buildBM25Index;
10
+ exports.scoreCapability = scoreCapability;
11
+ exports.extractBigrams = extractBigrams;
12
+ exports.filterByTags = filterByTags;
7
13
  exports.resolverToIntent = resolverToIntent;
14
+ exports.sanitizeForPrompt = sanitizeForPrompt;
8
15
  exports.extractParams = extractParams;
16
+ exports.calibrateCeiling = calibrateCeiling;
9
17
  exports.match = match;
10
18
  exports.matchWithLLM = matchWithLLM;
11
19
  const logger_1 = require("./logger");
@@ -29,40 +37,265 @@ exports.STOPWORDS = new Set([
29
37
  'it', 'its', 'how', 'when', 'where', 'who', 'which', 'all',
30
38
  'just', 'some', 'any', 'there', 'their', 'them', 'they',
31
39
  ]);
32
- function filterStopwords(words) {
33
- return words.filter(w => !exports.STOPWORDS.has(w.toLowerCase()) && w.length > 1);
40
+ // ─── Type Patterns ────────────────────────────────────────────────────────────
41
+ /**
42
+ * Regex patterns for common param types.
43
+ * Used when a CapabilityParam has `pattern` set to a named type.
44
+ */
45
+ exports.TYPE_PATTERNS = {
46
+ email: /\b[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}\b/,
47
+ date: /\b\d{4}-\d{2}-\d{2}\b|\b(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\w*\s+\d{1,2}\b/i,
48
+ orderId: /\b[A-Z]{2,}-?\d{4,}\b|\b\d{6,}\b/,
49
+ url: /https?:\/\/[^\s]+/,
50
+ };
51
+ /**
52
+ * Extracts a value from a query using an example template pattern.
53
+ * e.g. template "order {orderId}", query "track order 12345" → "12345"
54
+ * e.g. template "booking {ref}", query "cancel booking ABC-001" → "ABC-001"
55
+ */
56
+ function extractFromTemplate(query, template, paramName) {
57
+ // Split template on {paramName} to get prefix and suffix
58
+ const placeholder = `{${paramName}}`;
59
+ const idx = template.indexOf(placeholder);
60
+ if (idx === -1)
61
+ return null;
62
+ const prefix = template.slice(0, idx).trim().toLowerCase();
63
+ const suffix = template.slice(idx + placeholder.length).trim().toLowerCase();
64
+ const q = query.toLowerCase();
65
+ if (prefix) {
66
+ const prefixIdx = q.indexOf(prefix);
67
+ if (prefixIdx === -1)
68
+ return null;
69
+ const after = query.slice(prefixIdx + prefix.length).trim();
70
+ const tokens = after.split(/\s+/).filter(t => t.length > 0);
71
+ if (!tokens.length)
72
+ return null;
73
+ // If there's a suffix, find it and take what's between
74
+ if (suffix) {
75
+ const suffixIdx = after.toLowerCase().indexOf(suffix);
76
+ if (suffixIdx > 0) {
77
+ return after.slice(0, suffixIdx).trim().split(/\s+/)[0] ?? null;
78
+ }
79
+ }
80
+ return tokens[0].replace(/[^a-zA-Z0-9\-_.@]/g, '') || null;
81
+ }
82
+ // Prefix is empty — placeholder is at start of template e.g. "{email} unsubscribe"
83
+ if (!prefix) {
84
+ if (suffix) {
85
+ // Find suffix in query — take what comes before it
86
+ const suffixIdx = query.toLowerCase().indexOf(suffix);
87
+ if (suffixIdx > 0) {
88
+ return query.slice(0, suffixIdx).trim().split(/\s+/).pop()
89
+ ?.replace(/[^a-zA-Z0-9\-_.@]/g, '') || null;
90
+ }
91
+ }
92
+ // No prefix, no suffix — template is just "{paramName}"; take last meaningful word
93
+ const words = query.trim().split(/\s+/);
94
+ return words[words.length - 1]?.replace(/[^a-zA-Z0-9\-_.@]/g, '') || null;
95
+ }
96
+ return null;
97
+ }
98
+ // ─── Stem cache ───────────────────────────────────────────────────────────────
99
+ // Each word stemmed exactly once per process — O(1) on repeat lookups.
100
+ // Module-level — persists for the process lifetime. Vocabulary in production
101
+ // is finite (capability names + user query vocabulary) so growth is bounded
102
+ // in practice. In test environments with synthetic random strings, this may
103
+ // grow larger but remains functionally harmless.
104
+ const stemCache = new Map();
105
+ /**
106
+ * Simplified suffix-stripping stemmer — 10 most common English morphological
107
+ * patterns covering ~80% of benefit at ~25% the complexity of Porter stemmer.
108
+ * Applied symmetrically to both query words and capability index words.
109
+ */
110
+ function stem(word) {
111
+ const cached = stemCache.get(word);
112
+ if (cached !== undefined)
113
+ return cached;
114
+ let s = word;
115
+ if (s.length > 7 && s.endsWith('ation'))
116
+ s = s.slice(0, -5); // cancellation → cancell
117
+ else if (s.length > 6 && s.endsWith('tion'))
118
+ s = s.slice(0, -4); // completion → comple
119
+ else if (s.length > 6 && s.endsWith('ing'))
120
+ s = s.slice(0, -3); // tracking → track
121
+ else if (s.length > 6 && s.endsWith('ity'))
122
+ s = s.slice(0, -3); // availability → availabil
123
+ else if (s.length > 5 && s.endsWith('ion'))
124
+ s = s.slice(0, -3); // version → vers
125
+ else if (s.length > 6 && s.endsWith('est'))
126
+ s = s.slice(0, -3); // fastest → fast
127
+ else if (s.length > 4 && s.endsWith('er'))
128
+ s = s.slice(0, -2); // tracker → track
129
+ else if (s.length > 4 && s.endsWith('ed'))
130
+ s = s.slice(0, -2); // ordered → order
131
+ else if (s.length > 4 && s.endsWith('ly'))
132
+ s = s.slice(0, -2); // quickly → quick
133
+ else if (s.length > 4 && s.endsWith('es'))
134
+ s = s.slice(0, -2); // fetches → fetch
135
+ else if (s.length > 3 && s.endsWith('s') &&
136
+ !s.endsWith('ss'))
137
+ s = s.slice(0, -1); // orders → order
138
+ stemCache.set(word, s);
139
+ return s;
34
140
  }
35
- function scoreCapability(qWordSet, cap) {
141
+ /**
142
+ * Shared tokenizer — used by scorer, learning index, and boost system.
143
+ * Applies stopword filtering AND stemming symmetrically.
144
+ * Any site that tokenizes text for matching MUST use this function
145
+ * to avoid silent mismatches between query and index tokens.
146
+ */
147
+ function tokenize(text) {
148
+ return text
149
+ .toLowerCase()
150
+ .split(/\W+/)
151
+ .filter(w => w.length > 2 && !exports.STOPWORDS.has(w))
152
+ .map(stem);
153
+ }
154
+ /** Build a BM25 index over all capabilities. Call once at manifest load. */
155
+ function buildBM25Index(capabilities) {
156
+ const N = capabilities.length;
157
+ if (N === 0)
158
+ return { df: {}, avgdl: { examples: 0, description: 0, name: 0 }, N: 0, bigrams: {}, capTokens: {}, };
159
+ const df = {};
160
+ let totalExLen = 0;
161
+ let totalDescLen = 0;
162
+ let totalNameLen = 0;
163
+ // Pre-compute token arrays for every capability in a single pass.
164
+ // scoreCapability() reads from capTokens instead of re-tokenizing on every call.
165
+ const capTokens = {};
166
+ for (const cap of capabilities) {
167
+ const exTokens = tokenize((cap.examples ?? []).join(' '));
168
+ const descTokens = tokenize(cap.description);
169
+ const nameTokens = tokenize(cap.name);
170
+ capTokens[cap.id] = { examples: exTokens, description: descTokens, name: nameTokens };
171
+ totalExLen += exTokens.length;
172
+ totalDescLen += descTokens.length;
173
+ totalNameLen += nameTokens.length;
174
+ // Count document frequency — each term counted once per capability
175
+ const seen = new Set();
176
+ for (const t of [...exTokens, ...descTokens, ...nameTokens]) {
177
+ if (!seen.has(t)) {
178
+ df[t] = (df[t] ?? 0) + 1;
179
+ seen.add(t);
180
+ }
181
+ }
182
+ }
183
+ // Build bigram sets per capability — examples field only
184
+ // Clean bigrams only: post-stopword, post-stem tokens
185
+ const bigrams = {};
186
+ for (const cap of capabilities) {
187
+ const set = new Set();
188
+ for (const example of cap.examples ?? []) {
189
+ for (const bg of extractBigrams(tokenize(example)))
190
+ set.add(bg);
191
+ }
192
+ bigrams[cap.id] = set;
193
+ }
194
+ return {
195
+ df,
196
+ avgdl: {
197
+ examples: totalExLen / N,
198
+ description: totalDescLen / N,
199
+ name: totalNameLen / N,
200
+ },
201
+ N,
202
+ bigrams,
203
+ capTokens,
204
+ };
205
+ }
206
+ /**
207
+ * BM25 scoring with field weights.
208
+ * k1 = 1.5 (TF saturation), b = 0.75 (length normalization)
209
+ * Field weights: examples 0.6, description 0.3, name 0.1
210
+ */
211
+ function scoreCapability(qWordSet, cap, index, k1 = 1.5, b = 0.75) {
212
+ if (index.N === 0)
213
+ return 0;
214
+ // Use pre-computed token arrays from the index — avoids re-tokenizing
215
+ // capability text on every call. Falls back to live tokenization only when
216
+ // scoreCapability() is called outside CapmanEngine (e.g. unit tests that
217
+ // build a BM25Index manually without capTokens populated).
218
+ const tokens = index.capTokens[cap.id];
219
+ const exTokens = tokens?.examples ?? tokenize((cap.examples ?? []).join(' '));
220
+ const descTokens = tokens?.description ?? tokenize(cap.description);
221
+ const nameTokens = tokens?.name ?? tokenize(cap.name);
222
+ const score = bm25Field(qWordSet, exTokens, index, 'examples', k1, b) * 0.6
223
+ + bm25Field(qWordSet, descTokens, index, 'description', k1, b) * 0.3
224
+ + bm25Field(qWordSet, nameTokens, index, 'name', k1, b) * 0.1;
225
+ return score;
226
+ }
227
+ function bm25Field(queryTerms, fieldTokens, index, field, k1, b) {
228
+ if (fieldTokens.length === 0)
229
+ return 0;
230
+ const avgdl = index.avgdl[field] || 1;
231
+ const dl = fieldTokens.length;
232
+ const tf = new Map();
233
+ for (const t of fieldTokens) {
234
+ tf.set(t, (tf.get(t) ?? 0) + 1);
235
+ }
36
236
  let score = 0;
37
- // Check examples take the best single example match, not the sum.
38
- // Accumulating across examples rewards bloated example lists over precise ones:
39
- // 10 examples at 50% overlap = 300 points (clamped to 60) beats 1 perfect example at 60.
40
- // Taking Math.max means quality of examples matters, not quantity.
41
- let bestExampleScore = 0;
42
- for (const example of cap.examples ?? []) {
43
- const exWords = filterStopwords(example.toLowerCase().split(/\s+/));
44
- if (exWords.length === 0)
237
+ for (const term of queryTerms) {
238
+ const termTf = tf.get(term) ?? 0;
239
+ if (termTf === 0)
45
240
  continue;
46
- const overlap = exWords.filter(w => qWordSet.has(w)).length;
47
- const contribution = (overlap / exWords.length) * 60;
48
- bestExampleScore = Math.max(bestExampleScore, contribution);
241
+ const df = index.df[term] ?? 0;
242
+ const idf = Math.log((index.N - df + 0.5) / (df + 0.5) + 1);
243
+ const tfNorm = (termTf * (k1 + 1)) / (termTf + k1 * (1 - b + b * (dl / avgdl)));
244
+ score += idf * tfNorm;
49
245
  }
50
- score += bestExampleScore;
51
- // Check description words — normalize against min(length, 10) to avoid
52
- // penalizing rich documentation (many words = lower ratio) while also
53
- // preventing single-word descriptions from maxing out on any match.
54
- const descWords = filterStopwords(cap.description.toLowerCase().split(/\W+/).filter(Boolean));
55
- if (descWords.length > 0) {
56
- const descOverlap = descWords.filter(w => qWordSet.has(w)).length;
57
- score += Math.min((descOverlap / Math.min(descWords.length, 10)) * 30, 30);
246
+ return score;
247
+ }
248
+ /**
249
+ * Extracts bigrams from a token array as "token1__token2" strings.
250
+ * Input must already be post-stopword and post-stem (use tokenize() first).
251
+ */
252
+ function extractBigrams(tokens) {
253
+ const bigrams = new Set();
254
+ for (let i = 0; i < tokens.length - 1; i++) {
255
+ bigrams.add(`${tokens[i]}__${tokens[i + 1]}`);
58
256
  }
59
- // Check name words
60
- const nameWords = filterStopwords(cap.name.toLowerCase().split(/\W+/).filter(Boolean));
61
- if (nameWords.length > 0) {
62
- const nameOverlap = nameWords.filter(w => qWordSet.has(w)).length;
63
- score += (nameOverlap / nameWords.length) * 10;
257
+ return bigrams;
258
+ }
259
+ /**
260
+ * Returns a sub-manifest containing only capabilities that match ALL provided tags.
261
+ * Capabilities without tags are excluded when tags filter is active.
262
+ * Enables token-efficient LLM prompts for large manifests:
263
+ *
264
+ * @example
265
+ * // Only send order-related capabilities to LLM
266
+ * const orderManifest = filterByTags(manifest, ['orders'])
267
+ * const result = await matchWithLLM(query, orderManifest, { llm })
268
+ *
269
+ * @example
270
+ * // Match by any of multiple tags (union) — call filterByTags per tag and merge
271
+ * const ordersOrPayments = [
272
+ * ...filterByTags(manifest, ['orders']).capabilities,
273
+ * ...filterByTags(manifest, ['payments']).capabilities,
274
+ * ]
275
+ */
276
+ function filterByTags(manifest, tags) {
277
+ if (tags.length === 0)
278
+ return manifest;
279
+ const tagSet = new Set(tags);
280
+ return {
281
+ ...manifest,
282
+ capabilities: manifest.capabilities.filter(cap => cap.tags?.length && tags.every(t => cap.tags.includes(t))),
283
+ };
284
+ }
285
+ /**
286
+ * Returns a fixed bonus in normalized points (0–15), applied after BM25 normalization.
287
+ * 5 points per matching bigram, saturates at 3 bigrams (15 points).
288
+ * Fixed point value regardless of manifest size — ceiling-independent.
289
+ */
290
+ function bigramBonus(queryBigrams, capBigrams) {
291
+ if (queryBigrams.size === 0 || capBigrams.size === 0)
292
+ return 0;
293
+ let overlap = 0;
294
+ for (const bigram of queryBigrams) {
295
+ if (capBigrams.has(bigram))
296
+ overlap++;
64
297
  }
65
- return Math.min(Math.round(score), 100);
298
+ return Math.min(overlap * 5, 15); // normalized points — 3 bigrams saturate at 15
66
299
  }
67
300
  function resolverToIntent(cap) {
68
301
  const t = cap.resolver.type;
@@ -77,13 +310,18 @@ function resolverToIntent(cap) {
77
310
  /**
78
311
  * Strips characters that could break LLM prompt structure from
79
312
  * capability field values before injection into the system prompt.
80
- * Removes control characters, newlines, and delimiter-like sequences.
313
+ * Removes control characters, newlines, delimiter sequences, and braces
314
+ * anywhere in the string (not just at line starts) to resist prompt injection
315
+ * from third-party OpenAPI spec content ingested via parseOpenAPI().
81
316
  */
82
317
  function sanitizeForPrompt(value, maxLen) {
83
318
  return value
84
- .replace(/[\r\n\t]/g, ' ') // newlines → space
319
+ .replace(/[\r\n\t]/g, ' ') // newlines/tabs → space
85
320
  .replace(/---+/g, '—') // horizontal rules → em dash
86
- .replace(/^\s*[{}\[\]]/gm, ' ') // leading braces/brackets → space
321
+ .replace(/[{}\[\]]/g, ' ') // all braces/brackets anywhere → space (was: leading only)
322
+ .split(' ') // per-word cap — limits injection payload per token
323
+ .map(w => w.slice(0, 200)) // no single token longer than 200 chars
324
+ .join(' ')
87
325
  .replace(/\s+/g, ' ') // collapse whitespace
88
326
  .trim()
89
327
  .slice(0, maxLen);
@@ -115,6 +353,42 @@ function extractParams(query, cap) {
115
353
  result[param.name] = null;
116
354
  continue;
117
355
  }
356
+ // ── Type-implied pattern extraction ───────────────────────────────────
357
+ // param.type implies a TYPE_PATTERNS match — no need to set pattern explicitly
358
+ if (param.type && !param.pattern) {
359
+ // Map param types that have direct regex equivalents
360
+ const typeToPattern = {
361
+ email: exports.TYPE_PATTERNS.email,
362
+ date: exports.TYPE_PATTERNS.date,
363
+ url: exports.TYPE_PATTERNS.url,
364
+ };
365
+ const impliedPattern = typeToPattern[param.type];
366
+ if (impliedPattern) {
367
+ const match = query.match(impliedPattern);
368
+ if (match) {
369
+ result[param.name] = match[0];
370
+ continue;
371
+ }
372
+ }
373
+ }
374
+ // ── Explicit pattern extraction (highest priority when set) ───────────
375
+ if (param.pattern) {
376
+ const namedPattern = exports.TYPE_PATTERNS[param.pattern];
377
+ if (namedPattern) {
378
+ const match = query.match(namedPattern);
379
+ if (match) {
380
+ result[param.name] = match[0];
381
+ continue;
382
+ }
383
+ }
384
+ else if (param.pattern.includes(`{${param.name}}`)) {
385
+ const extracted = extractFromTemplate(query, param.pattern, param.name);
386
+ if (extracted) {
387
+ result[param.name] = extracted;
388
+ continue;
389
+ }
390
+ }
391
+ }
118
392
  // Try to extract value after known keywords
119
393
  // e.g. "profile for johndoe" → johndoe
120
394
  // "articles by jane" → jane
@@ -168,10 +442,36 @@ function extractParams(query, cap) {
168
442
  extracted = candidate;
169
443
  }
170
444
  }
445
+ // ── Enum validation ───────────────────────────────────────────────────
446
+ if (extracted !== null && param.type === 'enum' && param.enum?.length) {
447
+ if (!param.enum.includes(extracted)) {
448
+ // Extracted value not in allowed list — treat as not found
449
+ extracted = null;
450
+ }
451
+ }
171
452
  result[param.name] = extracted;
172
453
  }
173
454
  return result;
174
455
  }
456
+ /**
457
+ * Calibrates a BM25 normalization ceiling from the manifest.
458
+ * Scores each capability against all of its own examples and returns the maximum.
459
+ * Call once at manifest load time — O(capabilities × examples).
460
+ */
461
+ function calibrateCeiling(capabilities, bm25Index, k1, b) {
462
+ let max = 0;
463
+ for (const cap of capabilities) {
464
+ if (!cap.examples?.length)
465
+ continue;
466
+ for (const example of cap.examples) {
467
+ const selfWords = new Set(tokenize(example));
468
+ const raw = scoreCapability(selfWords, cap, bm25Index, k1, b);
469
+ if (raw > max)
470
+ max = raw;
471
+ }
472
+ }
473
+ return max > 0 ? max : 100;
474
+ }
175
475
  function match(query, manifest, options = {}) {
176
476
  if (!query?.trim()) {
177
477
  logger_1.logger.warn('Empty query received');
@@ -236,10 +536,23 @@ function match(query, manifest, options = {}) {
236
536
  }
237
537
  // ── Score all capabilities ────────────────────────────────────────────────
238
538
  // Build qWordSet once — O(1) lookups instead of O(n) Array.includes per word
239
- const qWordSet = new Set(filterStopwords(query.toLowerCase().split(/\W+/).filter(Boolean)));
539
+ const qTokens = tokenize(query);
540
+ const qWordSet = new Set(qTokens);
541
+ // Build query bigrams for phrase bonus
542
+ const qBigrams = extractBigrams(qTokens);
543
+ // Build BM25 index for this manifest — O(capabilities × tokens)
544
+ // In CapmanEngine this is pre-built; for direct match() calls it's built per-call
545
+ const bm25Index = options.bm25Index ?? buildBM25Index(manifest.capabilities);
546
+ const k1 = options.bm25K1 ?? 1.5;
547
+ const b = options.bm25B ?? 0.75;
548
+ // Calibrate ceiling — max self-score for normalization
549
+ const ceiling = options.bm25Ceiling ?? calibrateCeiling(manifest.capabilities, bm25Index, k1, b);
240
550
  const allScores = [];
241
551
  for (const cap of manifest.capabilities) {
242
- const keywordScore = scoreCapability(qWordSet, cap);
552
+ const rawBM25 = scoreCapability(qWordSet, cap, bm25Index, k1, b);
553
+ const bm25Score = Math.min(100, Math.round((rawBM25 / ceiling) * 100));
554
+ const bonusPoints = bigramBonus(qBigrams, bm25Index.bigrams[cap.id] ?? new Set());
555
+ const keywordScore = Math.min(100, bm25Score + bonusPoints);
243
556
  const fuzzyScore = fuzzyScoreMap.get(cap.id) ?? 0;
244
557
  const via = fuzzyScore > keywordScore ? 'fuzzy' : 'keyword';
245
558
  const score = Math.min(100, Math.round(Math.max(keywordScore, fuzzyScore)));
@@ -356,7 +669,13 @@ ${JSON.stringify({ user_query: query })}
356
669
  // Build full candidate list — all capabilities scored, LLM winner marked as matched.
357
670
  // This aligns the shape with keyword match results and allows the learning boost
358
671
  // to surface alternatives if the LLM made a wrong call.
359
- const llmConfidence = effectivelyOOS ? 0 : parsed.confidence;
672
+ // Clamp and round confidence — LLM may return values outside 0–100 with
673
+ // misconfigured models or prompt drift. Unclamped values corrupt learning
674
+ // weights (weight = confidence/100 can exceed 1.0) and verdict margins.
675
+ // disambiguateLLM() already does this; apply the same treatment here.
676
+ const llmConfidence = effectivelyOOS
677
+ ? 0
678
+ : Math.min(100, Math.max(0, Math.round(parsed.confidence)));
360
679
  const allCandidates = manifest.capabilities.map(c => ({
361
680
  capabilityId: c.id,
362
681
  score: c.id === capability?.id ? llmConfidence : 0,
@@ -1 +1 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/matcher.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,16 @@ async function loadSpec(source) {
67
67
  return parseSpecText(text, source);
68
68
  }
69
69
  // Local file
70
- const resolved = path.resolve(process.cwd(), source);
70
+ const cwd = process.cwd();
71
+ const resolved = path.resolve(cwd, source);
72
+ // Guard against path traversal — same check used by FileCache and FileLearningStore.
73
+ // Prevents parseOpenAPI('../../etc/passwd') from reading arbitrary files when
74
+ // the source argument comes from user input (CLI args, UI, CI scripts).
75
+ const allowedPrefix = cwd === '/' ? '/' : cwd + path.sep;
76
+ if (!resolved.startsWith(allowedPrefix)) {
77
+ throw new Error(`Spec path "${source}" resolves outside the working directory.\n` +
78
+ `Resolved: ${resolved}\nAllowed: ${cwd}`);
79
+ }
71
80
  if (!fs.existsSync(resolved)) {
72
81
  throw new Error(`Spec file not found: ${resolved}`);
73
82
  }
@@ -137,11 +146,20 @@ function convertSpec(spec) {
137
146
  warnings.push(`Skipped ${method} ${urlPath} — no useful info to generate capability`);
138
147
  continue;
139
148
  }
140
- // Check for duplicate IDs
141
- const existing = capabilities.find(c => c.id === result.id);
142
- if (existing) {
143
- result.id = `${result.id}_${method.toLowerCase()}`;
144
- warnings.push(`Duplicate ID resolved: ${result.id}`);
149
+ // De-conflict duplicate IDs — loop until the candidate ID is unique.
150
+ // A single find() check is insufficient: if two operations both produce
151
+ // `get_user`, the second becomes `get_user_get`. A third `get_user` would
152
+ // then collide with `get_user_get` only when it also uses GET — the general
153
+ // multi-collision case is only caught by looping.
154
+ let candidateId = result.id;
155
+ let dedupeCount = 0;
156
+ while (capabilities.find(c => c.id === candidateId)) {
157
+ dedupeCount++;
158
+ candidateId = `${result.id}_${method.toLowerCase()}${dedupeCount > 1 ? `_${dedupeCount}` : ''}`;
159
+ }
160
+ if (candidateId !== result.id) {
161
+ warnings.push(`Duplicate ID resolved: ${result.id} → ${candidateId}`);
162
+ result.id = candidateId;
145
163
  }
146
164
  capabilities.push(result);
147
165
  }
@@ -295,9 +313,9 @@ function extractBaseUrl(spec) {
295
313
  const base = spec.basePath ?? '';
296
314
  return `${scheme}://${spec.host}${base}`.replace(/\/$/, '');
297
315
  }
298
- logger_1.logger.warn(`No server URL found in spec — using placeholder "https://api.your-app.com". ` +
299
- `Set baseUrl manually in the generated config before use.`);
300
- return 'https://api.your-app.com';
316
+ throw new Error(`No server URL found in OpenAPI spec — cannot determine base URL.\n` +
317
+ `Add a "servers" entry (OpenAPI 3.x) or "host" + "basePath" (Swagger 2.x), ` +
318
+ `or set baseUrl manually in capman.config.js after generating.`);
301
319
  }
302
320
  function sanitizeAppName(title) {
303
321
  return title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');