@vibgrate/cli 2026.803.5 → 2026.804.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 (94) hide show
  1. package/dist/{agent-PQEODATY.js → agent-YDRDDKPE.js} +10 -12
  2. package/dist/{agent-PQEODATY.js.map → agent-YDRDDKPE.js.map} +1 -1
  3. package/dist/{baseline-SU2PCQV2.js → baseline-IALIGR4A.js} +3 -3
  4. package/dist/{baseline-SU2PCQV2.js.map → baseline-IALIGR4A.js.map} +1 -1
  5. package/dist/{chunk-SJC3VKQ2.js → chunk-4TPTVRVI.js} +4 -4
  6. package/dist/{chunk-SJC3VKQ2.js.map → chunk-4TPTVRVI.js.map} +1 -1
  7. package/dist/{chunk-VJHNGNCT.js → chunk-A4CGGQJ7.js} +5 -6
  8. package/dist/chunk-A4CGGQJ7.js.map +1 -0
  9. package/dist/chunk-B2Y45PCA.js +6 -0
  10. package/dist/{chunk-USO67ZEE.js.map → chunk-B2Y45PCA.js.map} +1 -1
  11. package/dist/{chunk-2A7XCANX.js → chunk-B6IBSQHG.js} +218 -24
  12. package/dist/chunk-B6IBSQHG.js.map +1 -0
  13. package/dist/{chunk-JZGVUH57.js → chunk-CM6OYYBW.js} +4 -4
  14. package/dist/{chunk-JZGVUH57.js.map → chunk-CM6OYYBW.js.map} +1 -1
  15. package/dist/{chunk-UH2WHRKJ.js → chunk-D56WBMAM.js} +7 -8
  16. package/dist/chunk-D56WBMAM.js.map +1 -0
  17. package/dist/{chunk-H4XQQ4N2.js → chunk-FJ2ARY3S.js} +6 -7
  18. package/dist/chunk-FJ2ARY3S.js.map +1 -0
  19. package/dist/{chunk-OCINHIPN.js → chunk-K5GPEWPI.js} +458 -6
  20. package/dist/chunk-K5GPEWPI.js.map +1 -0
  21. package/dist/{chunk-5WMFX7TY.js → chunk-KSFYHT5G.js} +4 -4
  22. package/dist/{chunk-5WMFX7TY.js.map → chunk-KSFYHT5G.js.map} +1 -1
  23. package/dist/{chunk-LOV44ROX.js → chunk-L4CYXVW2.js} +4 -4
  24. package/dist/{chunk-LOV44ROX.js.map → chunk-L4CYXVW2.js.map} +1 -1
  25. package/dist/{chunk-UXWN5YQW.js → chunk-L7GGEXZG.js} +4 -4
  26. package/dist/{chunk-UXWN5YQW.js.map → chunk-L7GGEXZG.js.map} +1 -1
  27. package/dist/{chunk-KFK7KCAH.js → chunk-NAZLPO63.js} +3 -3
  28. package/dist/{chunk-KFK7KCAH.js.map → chunk-NAZLPO63.js.map} +1 -1
  29. package/dist/{chunk-TVRM57CE.js → chunk-NGMVIAKI.js} +4 -4
  30. package/dist/{chunk-TVRM57CE.js.map → chunk-NGMVIAKI.js.map} +1 -1
  31. package/dist/{chunk-72XI4MTL.js → chunk-P63H3DXY.js} +7 -8
  32. package/dist/chunk-P63H3DXY.js.map +1 -0
  33. package/dist/{chunk-COZEHQTK.js → chunk-TASMCKLD.js} +7 -7
  34. package/dist/{chunk-COZEHQTK.js.map → chunk-TASMCKLD.js.map} +1 -1
  35. package/dist/{chunk-HE2TEFWY.js → chunk-UHLFD7EO.js} +4 -4
  36. package/dist/{chunk-HE2TEFWY.js.map → chunk-UHLFD7EO.js.map} +1 -1
  37. package/dist/{chunk-CPGTEDFD.js → chunk-UZO2T3J2.js} +3 -3
  38. package/dist/{chunk-CPGTEDFD.js.map → chunk-UZO2T3J2.js.map} +1 -1
  39. package/dist/{chunk-MKDM2KLO.js → chunk-WGIX4S5A.js} +8 -9
  40. package/dist/chunk-WGIX4S5A.js.map +1 -0
  41. package/dist/{chunk-TKV3GAKX.js → chunk-XVZMDDU4.js} +4 -4
  42. package/dist/{chunk-TKV3GAKX.js.map → chunk-XVZMDDU4.js.map} +1 -1
  43. package/dist/{chunk-UJGWQ6YA.js → chunk-ZZNNXZYB.js} +3 -4
  44. package/dist/chunk-ZZNNXZYB.js.map +1 -0
  45. package/dist/cli.js +91 -45
  46. package/dist/cli.js.map +1 -1
  47. package/dist/embed-worker-main.js +5 -2
  48. package/dist/embed-worker-main.js.map +1 -1
  49. package/dist/{ensure-map-Z6UXBPI7.js → ensure-map-DNLGAQRQ.js} +12 -14
  50. package/dist/{ensure-map-Z6UXBPI7.js.map → ensure-map-DNLGAQRQ.js.map} +1 -1
  51. package/dist/graph-backend-L7PIG7CS.js +13 -0
  52. package/dist/{graph-backend-3A2M22QN.js.map → graph-backend-L7PIG7CS.js.map} +1 -1
  53. package/dist/index.d.ts +25 -6
  54. package/dist/index.js +11 -13
  55. package/dist/index.js.map +1 -1
  56. package/dist/{interactive-6TCXGIMA.js → interactive-GQ3O7FKE.js} +21 -23
  57. package/dist/interactive-GQ3O7FKE.js.map +1 -0
  58. package/dist/load-VOSNNCOZ.js +9 -0
  59. package/dist/{load-QHU4WMUN.js.map → load-VOSNNCOZ.js.map} +1 -1
  60. package/dist/{run-outcome-NHD3NXTL.js → run-outcome-I4T5GDQZ.js} +5 -7
  61. package/dist/run-outcome-I4T5GDQZ.js.map +1 -0
  62. package/dist/runtime-session-45HT7NZA.js +20 -0
  63. package/dist/{runtime-session-W65P4OXR.js.map → runtime-session-45HT7NZA.js.map} +1 -1
  64. package/dist/session-QUONHFJN.js +15 -0
  65. package/dist/{session-NZKZXBX4.js.map → session-QUONHFJN.js.map} +1 -1
  66. package/dist/{stream-json-MLWEIQNK.js → stream-json-WEWVI3DW.js} +10 -12
  67. package/dist/stream-json-WEWVI3DW.js.map +1 -0
  68. package/dist/{vg-mcp-bridge-2DEZF3JM.js → vg-mcp-bridge-NOG3D6TL.js} +8 -10
  69. package/dist/vg-mcp-bridge-NOG3D6TL.js.map +1 -0
  70. package/dist/{vgd-W7IHKGNU.js → vgd-URRPZ7OD.js} +8 -10
  71. package/dist/vgd-URRPZ7OD.js.map +1 -0
  72. package/package.json +1 -1
  73. package/dist/chunk-2A7XCANX.js.map +0 -1
  74. package/dist/chunk-4LGDQBYK.js +0 -358
  75. package/dist/chunk-4LGDQBYK.js.map +0 -1
  76. package/dist/chunk-72XI4MTL.js.map +0 -1
  77. package/dist/chunk-H4XQQ4N2.js.map +0 -1
  78. package/dist/chunk-MKDM2KLO.js.map +0 -1
  79. package/dist/chunk-OCINHIPN.js.map +0 -1
  80. package/dist/chunk-RBMKBYGV.js +0 -102
  81. package/dist/chunk-RBMKBYGV.js.map +0 -1
  82. package/dist/chunk-UH2WHRKJ.js.map +0 -1
  83. package/dist/chunk-UJGWQ6YA.js.map +0 -1
  84. package/dist/chunk-USO67ZEE.js +0 -6
  85. package/dist/chunk-VJHNGNCT.js.map +0 -1
  86. package/dist/graph-backend-3A2M22QN.js +0 -13
  87. package/dist/interactive-6TCXGIMA.js.map +0 -1
  88. package/dist/load-QHU4WMUN.js +0 -11
  89. package/dist/run-outcome-NHD3NXTL.js.map +0 -1
  90. package/dist/runtime-session-W65P4OXR.js +0 -22
  91. package/dist/session-NZKZXBX4.js +0 -17
  92. package/dist/stream-json-MLWEIQNK.js.map +0 -1
  93. package/dist/vg-mcp-bridge-2DEZF3JM.js.map +0 -1
  94. package/dist/vgd-W7IHKGNU.js.map +0 -1
@@ -1,358 +0,0 @@
1
- // src/engine/concepts.ts
2
- var WEAK_TERMS = /* @__PURE__ */ new Set([
3
- "add",
4
- "adds",
5
- "added",
6
- "adding",
7
- "create",
8
- "creates",
9
- "created",
10
- "creating",
11
- "make",
12
- "makes",
13
- "making",
14
- "made",
15
- "new",
16
- "newly",
17
- "remove",
18
- "removes",
19
- "removed",
20
- "removing",
21
- "delete",
22
- "deletes",
23
- "deleted",
24
- "deleting",
25
- "update",
26
- "updates",
27
- "updated",
28
- "updating",
29
- "change",
30
- "changes",
31
- "changed",
32
- "changing",
33
- "set",
34
- "sets",
35
- "setting",
36
- "setup",
37
- "get",
38
- "gets",
39
- "getting",
40
- "use",
41
- "uses",
42
- "used",
43
- "using",
44
- "want",
45
- "wants",
46
- "wanted",
47
- "do",
48
- "does",
49
- "doing",
50
- "done",
51
- "support",
52
- "supports",
53
- "supported",
54
- "supporting",
55
- "enable",
56
- "enables",
57
- "enabled",
58
- "enabling",
59
- "disable",
60
- "disables",
61
- "disabled",
62
- "disabling",
63
- "allow",
64
- "allows",
65
- "allowed",
66
- "implement",
67
- "implements",
68
- "implemented",
69
- "implementing",
70
- "build",
71
- "builds",
72
- "building",
73
- "built",
74
- "via",
75
- "through",
76
- "into",
77
- "onto",
78
- "way",
79
- "ways",
80
- "thing",
81
- "things",
82
- "stuff",
83
- "feature",
84
- "features",
85
- "functionality",
86
- "method",
87
- "methods",
88
- "option",
89
- "options",
90
- "ability",
91
- "help",
92
- "start",
93
- "begin",
94
- "work",
95
- "works",
96
- "working",
97
- "also",
98
- "currently",
99
- "properly",
100
- "correctly",
101
- "please",
102
- "happens",
103
- "happen",
104
- "something",
105
- "somewhere",
106
- "step",
107
- "steps",
108
- "flow",
109
- "process",
110
- "you",
111
- "can"
112
- ]);
113
- var CONCEPTS = {
114
- // ---- payments / billing ----
115
- payment: ["stripe", "billing", "invoice", "checkout", "charge", "subscription", "refund", "payout", "card", "debit", "mandate"],
116
- pay: ["payment", "stripe", "charge", "billing", "invoice"],
117
- paid: ["payment", "invoice", "charge"],
118
- billing: ["invoice", "payment", "subscription", "stripe", "charge", "renewal"],
119
- checkout: ["stripe", "payment", "cart", "session"],
120
- debit: ["mandate", "sepa", "bacs", "ach", "bank", "payment"],
121
- mandate: ["sepa", "bacs", "debit"],
122
- sepa: ["mandate", "debit", "iban", "bank"],
123
- bacs: ["mandate", "debit", "bank"],
124
- ach: ["mandate", "debit", "bank"],
125
- stripe: ["payment", "billing", "checkout", "webhook", "charge", "card"],
126
- refund: ["payment", "invoice", "stripe", "charge"],
127
- invoice: ["billing", "payment", "refund", "subscription"],
128
- subscription: ["billing", "renewal", "invoice", "plan", "recurring"],
129
- recurring: ["subscription", "renewal", "mandate", "debit"],
130
- renewal: ["subscription", "billing", "renew"],
131
- card: ["payment", "charge", "stripe"],
132
- credit: ["card", "payment", "charge"],
133
- bank: ["debit", "mandate", "sepa", "iban", "account"],
134
- charge: ["payment", "card", "stripe"],
135
- webhook: ["event", "handler", "callback"],
136
- price: ["payment", "billing", "plan"],
137
- customer: ["billing", "account", "user"],
138
- // ---- auth ----
139
- auth: ["login", "session", "token", "oauth", "password", "credential"],
140
- authentication: ["auth", "login", "session", "token", "password"],
141
- authenticated: ["auth", "login", "session"],
142
- login: ["auth", "session", "password", "signin", "oauth"],
143
- signin: ["login", "auth", "session"],
144
- signup: ["register", "onboard", "account"],
145
- logout: ["session", "auth", "signout"],
146
- password: ["auth", "login", "credential", "hash"],
147
- session: ["auth", "login", "token"],
148
- token: ["session", "auth", "jwt"],
149
- oauth: ["auth", "login", "callback", "provider"],
150
- google: ["oauth", "login", "auth"],
151
- github: ["oauth", "login", "auth"],
152
- sso: ["oauth", "auth", "saml", "login"],
153
- credential: ["auth", "password", "token", "secret"],
154
- // ---- dependencies / supply chain ----
155
- dependency: ["package", "audit", "vulnerability", "advisory", "lockfile", "version"],
156
- package: ["dependency", "audit", "vulnerability", "advisory", "lockfile"],
157
- vulnerability: ["advisory", "cve", "osv", "audit", "vulnerable"],
158
- vulnerable: ["vulnerability", "advisory", "audit", "cve"],
159
- advisory: ["vulnerability", "cve", "osv", "audit"],
160
- cve: ["vulnerability", "advisory", "osv"],
161
- risk: ["vulnerability", "audit", "advisory"],
162
- security: ["vulnerability", "audit", "advisory"],
163
- audit: ["dependency", "vulnerability", "advisory"],
164
- scan: ["audit", "vulnerability", "scanner"],
165
- // ---- notifications / messaging ----
166
- email: ["mail", "smtp", "sender", "template", "message"],
167
- mail: ["email", "smtp", "sender"],
168
- notification: ["notify", "email", "sms", "push", "alert"],
169
- notify: ["notification", "email", "alert"],
170
- sms: ["notification", "message", "twilio"],
171
- // ---- e-commerce ----
172
- cart: ["checkout", "order", "shop", "basket", "discount"],
173
- basket: ["cart", "checkout", "order"],
174
- order: ["cart", "shipment", "fulfillment", "shop", "checkout"],
175
- ship: ["order", "fulfillment", "delivery", "shipment"],
176
- shipment: ["order", "fulfillment", "delivery", "track"],
177
- shipping: ["order", "fulfillment", "delivery", "shipment"],
178
- shipped: ["order", "fulfillment", "shipment"],
179
- inventory: ["stock", "product", "catalog", "restock"],
180
- stock: ["inventory", "product", "restock"],
181
- product: ["catalog", "inventory", "shop"],
182
- discount: ["coupon", "promo", "cart", "price"],
183
- coupon: ["discount", "promo", "code"],
184
- // ---- chat / social ----
185
- chat: ["message", "room", "conversation", "presence"],
186
- message: ["chat", "sms", "notification", "thread"],
187
- conversation: ["chat", "message", "thread"],
188
- presence: ["online", "typing", "status"],
189
- online: ["presence", "status"],
190
- typing: ["presence", "indicator", "broadcast"],
191
- // ---- media / streaming ----
192
- video: ["media", "transcode", "playback", "stream", "thumbnail"],
193
- stream: ["video", "playback", "manifest", "media"],
194
- streaming: ["video", "playback", "manifest", "media"],
195
- playback: ["video", "stream", "media", "watch"],
196
- transcode: ["video", "media", "encode"],
197
- thumbnail: ["video", "image", "media"],
198
- media: ["video", "stream", "playback", "asset"],
199
- // ---- analytics ----
200
- analytics: ["event", "track", "metric", "funnel", "report"],
201
- event: ["track", "analytics", "webhook"],
202
- track: ["event", "analytics"],
203
- funnel: ["conversion", "analytics", "event"],
204
- conversion: ["funnel", "analytics"],
205
- report: ["metrics", "export", "analytics"],
206
- // ---- content / CMS ----
207
- article: ["publish", "content", "post", "cms"],
208
- publish: ["article", "release", "post", "content"],
209
- post: ["article", "publish", "message"],
210
- blog: ["article", "publish", "post", "cms"],
211
- content: ["cms", "article", "markdown"],
212
- markdown: ["render", "article", "content"],
213
- cms: ["article", "content", "publish"],
214
- // ---- CI / deployment ----
215
- deploy: ["release", "rollback", "pipeline", "deployment"],
216
- deployment: ["deploy", "release", "rollback", "pipeline"],
217
- release: ["deploy", "version", "rollback"],
218
- rollback: ["deploy", "release", "deployment"],
219
- pipeline: ["stage", "deploy", "runner", "ci"],
220
- canary: ["deploy", "rollout", "release"],
221
- // ---- mobile ----
222
- push: ["notification", "device", "token", "mobile"],
223
- device: ["push", "token", "mobile", "register"],
224
- deeplink: ["link", "route", "universal"],
225
- mobile: ["push", "device", "deeplink", "app"],
226
- ios: ["mobile", "universal", "link", "app"],
227
- android: ["mobile", "push", "device", "app"],
228
- // ---- batch / ETL / mainframe ----
229
- batch: ["settlement", "job", "etl", "reconcile"],
230
- settlement: ["batch", "reconcile", "ledger", "clearing"],
231
- reconcile: ["ledger", "settlement", "batch"],
232
- ledger: ["settlement", "reconcile", "balance", "journal"],
233
- mainframe: ["batch", "settlement", "ebcdic", "cobol", "fixed"],
234
- ebcdic: ["mainframe", "record", "convert", "legacy"],
235
- cobol: ["mainframe", "batch", "ebcdic"],
236
- etl: ["batch", "pipeline", "extract", "load", "transform"],
237
- nightly: ["batch", "cron", "schedule", "job"],
238
- // ---- geo / maps ----
239
- geocode: ["address", "location", "map", "geo"],
240
- address: ["geocode", "location"],
241
- map: ["geo", "route", "location"],
242
- route: ["distance", "path", "planner", "geo"],
243
- distance: ["route", "haversine", "geo"],
244
- location: ["geo", "geocode", "map"],
245
- arrival: ["route", "eta", "estimate"],
246
- // ---- i18n ----
247
- translation: ["locale", "i18n", "language", "translate"],
248
- translate: ["translation", "locale", "language"],
249
- locale: ["translation", "i18n", "language", "format"],
250
- i18n: ["translation", "locale", "language"],
251
- language: ["locale", "translation", "i18n"],
252
- localized: ["locale", "translation", "format"],
253
- // ---- observability ----
254
- metric: ["counter", "prometheus", "telemetry", "export"],
255
- prometheus: ["metric", "exporter", "monitoring"],
256
- trace: ["span", "telemetry", "observability"],
257
- span: ["trace", "telemetry"],
258
- monitoring: ["metric", "trace", "alert", "observability"],
259
- telemetry: ["metric", "trace", "span"],
260
- counter: ["metric", "increment"],
261
- // ---- feature flags / experimentation ----
262
- flag: ["feature", "rollout", "toggle", "experiment"],
263
- rollout: ["flag", "percentage", "release", "experiment"],
264
- toggle: ["flag", "feature", "switch"],
265
- experiment: ["variant", "assign", "flag", "exposure"],
266
- variant: ["experiment", "assign"],
267
- // ---- generic infrastructure ----
268
- database: ["schema", "migration", "sql", "query", "orm"],
269
- db: ["database", "schema", "migration", "sql"],
270
- migration: ["database", "schema", "migrate", "sql"],
271
- cache: ["redis", "ttl", "store"],
272
- queue: ["job", "worker", "task", "batch"],
273
- job: ["queue", "worker", "cron"],
274
- upload: ["file", "storage", "blob", "asset"],
275
- storage: ["file", "upload", "bucket", "blob"],
276
- permission: ["role", "rbac", "acl", "access", "grant"],
277
- role: ["permission", "rbac", "access"],
278
- error: ["exception", "failure", "handler"],
279
- config: ["settings", "env", "configuration"]
280
- };
281
- var BIGRAM_CONCEPTS = {
282
- "direct debit": ["debit", "mandate", "sepa", "bacs", "bank"],
283
- "direct debits": ["debit", "mandate", "sepa", "bacs", "bank"],
284
- "sign in": ["login", "signin", "auth", "session"],
285
- "signs in": ["login", "signin", "auth", "session"],
286
- "log in": ["login", "auth", "session"],
287
- "logs in": ["login", "auth", "session"],
288
- "logged in": ["login", "auth", "session"],
289
- "sign up": ["signup", "register", "account"],
290
- "credit card": ["card", "payment", "charge", "stripe"],
291
- "credit cards": ["card", "payment", "charge", "stripe"],
292
- "bank transfer": ["bank", "payment", "sepa", "transfer"],
293
- "rate limit": ["ratelimit", "throttle", "quota"],
294
- "two factor": ["totp", "mfa", "otp", "auth"],
295
- "payment method": ["payment", "stripe", "card", "debit"],
296
- "payment methods": ["payment", "stripe", "card", "debit"],
297
- "push notification": ["push", "device", "token", "notification"],
298
- "push notifications": ["push", "device", "token", "notification"],
299
- "deep link": ["deeplink", "link", "route"],
300
- "deep links": ["deeplink", "link", "route"],
301
- "universal link": ["deeplink", "link", "universal"],
302
- "universal links": ["deeplink", "link", "universal"],
303
- "feature flag": ["flag", "rollout", "toggle", "experiment"],
304
- "feature flags": ["flag", "rollout", "toggle", "experiment"],
305
- "shopping cart": ["cart", "checkout", "order"],
306
- "roll back": ["rollback", "deploy", "release"],
307
- "rolled back": ["rollback", "deploy", "release"],
308
- "ab test": ["experiment", "variant"],
309
- "sign out": ["logout", "session", "auth"],
310
- "fixed width": ["record", "export", "mainframe", "batch"]
311
- };
312
- function lexiconKey(token) {
313
- if (token in CONCEPTS) return token;
314
- if (token.endsWith("ies")) {
315
- const singular = token.slice(0, -3) + "y";
316
- if (singular in CONCEPTS) return singular;
317
- }
318
- if (token.endsWith("s")) {
319
- const singular = token.slice(0, -1);
320
- if (singular in CONCEPTS) return singular;
321
- }
322
- return null;
323
- }
324
- function expandConcepts(orderedTokens) {
325
- const present = new Set(orderedTokens);
326
- const out = [];
327
- const emitted = /* @__PURE__ */ new Set();
328
- const emit = (term, from) => {
329
- if (present.has(term) || emitted.has(term)) return;
330
- emitted.add(term);
331
- out.push({ term, from });
332
- };
333
- for (let i = 0; i + 1 < orderedTokens.length; i++) {
334
- const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;
335
- const terms = BIGRAM_CONCEPTS[bigram];
336
- if (terms) for (const t of terms) emit(t, bigram);
337
- }
338
- for (const token of orderedTokens) {
339
- const key = lexiconKey(token);
340
- if (key) for (const t of CONCEPTS[key]) emit(t, token);
341
- }
342
- return out;
343
- }
344
- function bigramConsumedTokens(orderedTokens) {
345
- const consumed = /* @__PURE__ */ new Set();
346
- for (let i = 0; i + 1 < orderedTokens.length; i++) {
347
- const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;
348
- if (!BIGRAM_CONCEPTS[bigram]) continue;
349
- for (const tok of [orderedTokens[i], orderedTokens[i + 1]]) {
350
- if (!lexiconKey(tok)) consumed.add(tok);
351
- }
352
- }
353
- return consumed;
354
- }
355
-
356
- export { WEAK_TERMS, bigramConsumedTokens, expandConcepts };
357
- //# sourceMappingURL=chunk-4LGDQBYK.js.map
358
- //# sourceMappingURL=chunk-4LGDQBYK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/engine/concepts.ts"],"names":[],"mappings":"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","file":"chunk-4LGDQBYK.js","sourcesContent":["/**\n * Term roles and deterministic concept expansion for `vg ask` / Task Capsule\n * seed ranking (engine/query.ts).\n *\n * Two failure modes motivated this module (field report, 2026-07):\n *\n * 1. Weak process verbs dominated intent asks. \"what do i need to do to add\n * payments via direct debit?\" seeded every `add*` symbol in the repo\n * (`addTeamMember`, `AddBlogForm`, `submitAdd`, …) because \"add\" scored on\n * equal footing with \"debit\". Verbs that describe the ACTION the caller\n * wants (\"add\", \"create\", \"via\") are not the TOPIC being asked about — they\n * may corroborate a topic match but must never be a seed's sole evidence.\n *\n * 2. No conceptual pull. \"payments\" never reached `StripeGateway` /\n * `InvoiceService` unless a symbol literally contained \"payment\". A small,\n * static, product-domain lexicon (payments → stripe/billing/invoice/…,\n * \"direct debit\" → sepa/bacs/mandate) closes the gap deterministically —\n * no embeddings, no network, stable across runs.\n *\n * Everything here is pure data + pure functions: same question in, same\n * expansion out, so capsule ranking stays benchmarkable and pinnable.\n */\n\n/**\n * Process verbs and feature-request scaffolding: words that describe what the\n * caller wants DONE, not what the code is ABOUT. They still contribute score\n * (down-weighted) to nodes that independently match a content term, but a node\n * matching only weak terms is suppressed — that is exactly the `add*` grab-bag\n * failure. Distinct from STOPWORDS (which are dropped outright): a weak term\n * still corroborates (\"add … to scanDir\" boosts an `addEntry` sibling of a\n * scanDir hit), it just cannot carry a seed alone.\n */\nexport const WEAK_TERMS = new Set([\n 'add', 'adds', 'added', 'adding',\n 'create', 'creates', 'created', 'creating',\n 'make', 'makes', 'making', 'made',\n 'new', 'newly',\n 'remove', 'removes', 'removed', 'removing',\n 'delete', 'deletes', 'deleted', 'deleting',\n 'update', 'updates', 'updated', 'updating',\n 'change', 'changes', 'changed', 'changing',\n 'set', 'sets', 'setting', 'setup',\n 'get', 'gets', 'getting',\n 'use', 'uses', 'used', 'using',\n 'want', 'wants', 'wanted',\n 'do', 'does', 'doing', 'done',\n 'support', 'supports', 'supported', 'supporting',\n 'enable', 'enables', 'enabled', 'enabling',\n 'disable', 'disables', 'disabled', 'disabling',\n 'allow', 'allows', 'allowed',\n 'implement', 'implements', 'implemented', 'implementing',\n 'build', 'builds', 'building', 'built',\n 'via', 'through', 'into', 'onto',\n 'way', 'ways', 'thing', 'things', 'stuff',\n 'feature', 'features', 'functionality',\n 'method', 'methods', 'option', 'options', 'ability',\n 'help', 'start', 'begin', 'work', 'works', 'working',\n 'also', 'currently', 'properly', 'correctly', 'please',\n 'happens', 'happen', 'something', 'somewhere',\n 'step', 'steps', 'flow', 'process',\n 'you', 'can',\n]);\n\n/**\n * Product-domain concept lexicon: question token → identifier vocabulary that\n * OWNS the concept in real codebases. Expansion terms score at a reduced tier\n * (EXPANSION_WEIGHT in query.ts) and count as content evidence, with the\n * provenance kept in the seed's `why` (`payments→stripe`).\n *\n * Keep entries conservative: every value should be a word a maintainer would\n * plausibly put in an identifier or directory name for that concept. Do not\n * add framing words (\"code\", \"logic\") — they are stopwords, not concepts.\n */\nconst CONCEPTS: Record<string, readonly string[]> = {\n // ---- payments / billing ----\n payment: ['stripe', 'billing', 'invoice', 'checkout', 'charge', 'subscription', 'refund', 'payout', 'card', 'debit', 'mandate'],\n pay: ['payment', 'stripe', 'charge', 'billing', 'invoice'],\n paid: ['payment', 'invoice', 'charge'],\n billing: ['invoice', 'payment', 'subscription', 'stripe', 'charge', 'renewal'],\n checkout: ['stripe', 'payment', 'cart', 'session'],\n debit: ['mandate', 'sepa', 'bacs', 'ach', 'bank', 'payment'],\n mandate: ['sepa', 'bacs', 'debit'],\n sepa: ['mandate', 'debit', 'iban', 'bank'],\n bacs: ['mandate', 'debit', 'bank'],\n ach: ['mandate', 'debit', 'bank'],\n stripe: ['payment', 'billing', 'checkout', 'webhook', 'charge', 'card'],\n refund: ['payment', 'invoice', 'stripe', 'charge'],\n invoice: ['billing', 'payment', 'refund', 'subscription'],\n subscription: ['billing', 'renewal', 'invoice', 'plan', 'recurring'],\n recurring: ['subscription', 'renewal', 'mandate', 'debit'],\n renewal: ['subscription', 'billing', 'renew'],\n card: ['payment', 'charge', 'stripe'],\n credit: ['card', 'payment', 'charge'],\n bank: ['debit', 'mandate', 'sepa', 'iban', 'account'],\n charge: ['payment', 'card', 'stripe'],\n webhook: ['event', 'handler', 'callback'],\n price: ['payment', 'billing', 'plan'],\n customer: ['billing', 'account', 'user'],\n // ---- auth ----\n auth: ['login', 'session', 'token', 'oauth', 'password', 'credential'],\n authentication: ['auth', 'login', 'session', 'token', 'password'],\n authenticated: ['auth', 'login', 'session'],\n login: ['auth', 'session', 'password', 'signin', 'oauth'],\n signin: ['login', 'auth', 'session'],\n signup: ['register', 'onboard', 'account'],\n logout: ['session', 'auth', 'signout'],\n password: ['auth', 'login', 'credential', 'hash'],\n session: ['auth', 'login', 'token'],\n token: ['session', 'auth', 'jwt'],\n oauth: ['auth', 'login', 'callback', 'provider'],\n google: ['oauth', 'login', 'auth'],\n github: ['oauth', 'login', 'auth'],\n sso: ['oauth', 'auth', 'saml', 'login'],\n credential: ['auth', 'password', 'token', 'secret'],\n // ---- dependencies / supply chain ----\n dependency: ['package', 'audit', 'vulnerability', 'advisory', 'lockfile', 'version'],\n package: ['dependency', 'audit', 'vulnerability', 'advisory', 'lockfile'],\n vulnerability: ['advisory', 'cve', 'osv', 'audit', 'vulnerable'],\n vulnerable: ['vulnerability', 'advisory', 'audit', 'cve'],\n advisory: ['vulnerability', 'cve', 'osv', 'audit'],\n cve: ['vulnerability', 'advisory', 'osv'],\n risk: ['vulnerability', 'audit', 'advisory'],\n security: ['vulnerability', 'audit', 'advisory'],\n audit: ['dependency', 'vulnerability', 'advisory'],\n scan: ['audit', 'vulnerability', 'scanner'],\n // ---- notifications / messaging ----\n email: ['mail', 'smtp', 'sender', 'template', 'message'],\n mail: ['email', 'smtp', 'sender'],\n notification: ['notify', 'email', 'sms', 'push', 'alert'],\n notify: ['notification', 'email', 'alert'],\n sms: ['notification', 'message', 'twilio'],\n // ---- e-commerce ----\n cart: ['checkout', 'order', 'shop', 'basket', 'discount'],\n basket: ['cart', 'checkout', 'order'],\n order: ['cart', 'shipment', 'fulfillment', 'shop', 'checkout'],\n ship: ['order', 'fulfillment', 'delivery', 'shipment'],\n shipment: ['order', 'fulfillment', 'delivery', 'track'],\n shipping: ['order', 'fulfillment', 'delivery', 'shipment'],\n shipped: ['order', 'fulfillment', 'shipment'],\n inventory: ['stock', 'product', 'catalog', 'restock'],\n stock: ['inventory', 'product', 'restock'],\n product: ['catalog', 'inventory', 'shop'],\n discount: ['coupon', 'promo', 'cart', 'price'],\n coupon: ['discount', 'promo', 'code'],\n // ---- chat / social ----\n chat: ['message', 'room', 'conversation', 'presence'],\n message: ['chat', 'sms', 'notification', 'thread'],\n conversation: ['chat', 'message', 'thread'],\n presence: ['online', 'typing', 'status'],\n online: ['presence', 'status'],\n typing: ['presence', 'indicator', 'broadcast'],\n // ---- media / streaming ----\n video: ['media', 'transcode', 'playback', 'stream', 'thumbnail'],\n stream: ['video', 'playback', 'manifest', 'media'],\n streaming: ['video', 'playback', 'manifest', 'media'],\n playback: ['video', 'stream', 'media', 'watch'],\n transcode: ['video', 'media', 'encode'],\n thumbnail: ['video', 'image', 'media'],\n media: ['video', 'stream', 'playback', 'asset'],\n // ---- analytics ----\n analytics: ['event', 'track', 'metric', 'funnel', 'report'],\n event: ['track', 'analytics', 'webhook'],\n track: ['event', 'analytics'],\n funnel: ['conversion', 'analytics', 'event'],\n conversion: ['funnel', 'analytics'],\n report: ['metrics', 'export', 'analytics'],\n // ---- content / CMS ----\n article: ['publish', 'content', 'post', 'cms'],\n publish: ['article', 'release', 'post', 'content'],\n post: ['article', 'publish', 'message'],\n blog: ['article', 'publish', 'post', 'cms'],\n content: ['cms', 'article', 'markdown'],\n markdown: ['render', 'article', 'content'],\n cms: ['article', 'content', 'publish'],\n // ---- CI / deployment ----\n deploy: ['release', 'rollback', 'pipeline', 'deployment'],\n deployment: ['deploy', 'release', 'rollback', 'pipeline'],\n release: ['deploy', 'version', 'rollback'],\n rollback: ['deploy', 'release', 'deployment'],\n pipeline: ['stage', 'deploy', 'runner', 'ci'],\n canary: ['deploy', 'rollout', 'release'],\n // ---- mobile ----\n push: ['notification', 'device', 'token', 'mobile'],\n device: ['push', 'token', 'mobile', 'register'],\n deeplink: ['link', 'route', 'universal'],\n mobile: ['push', 'device', 'deeplink', 'app'],\n ios: ['mobile', 'universal', 'link', 'app'],\n android: ['mobile', 'push', 'device', 'app'],\n // ---- batch / ETL / mainframe ----\n batch: ['settlement', 'job', 'etl', 'reconcile'],\n settlement: ['batch', 'reconcile', 'ledger', 'clearing'],\n reconcile: ['ledger', 'settlement', 'batch'],\n ledger: ['settlement', 'reconcile', 'balance', 'journal'],\n mainframe: ['batch', 'settlement', 'ebcdic', 'cobol', 'fixed'],\n ebcdic: ['mainframe', 'record', 'convert', 'legacy'],\n cobol: ['mainframe', 'batch', 'ebcdic'],\n etl: ['batch', 'pipeline', 'extract', 'load', 'transform'],\n nightly: ['batch', 'cron', 'schedule', 'job'],\n // ---- geo / maps ----\n geocode: ['address', 'location', 'map', 'geo'],\n address: ['geocode', 'location'],\n map: ['geo', 'route', 'location'],\n route: ['distance', 'path', 'planner', 'geo'],\n distance: ['route', 'haversine', 'geo'],\n location: ['geo', 'geocode', 'map'],\n arrival: ['route', 'eta', 'estimate'],\n // ---- i18n ----\n translation: ['locale', 'i18n', 'language', 'translate'],\n translate: ['translation', 'locale', 'language'],\n locale: ['translation', 'i18n', 'language', 'format'],\n i18n: ['translation', 'locale', 'language'],\n language: ['locale', 'translation', 'i18n'],\n localized: ['locale', 'translation', 'format'],\n // ---- observability ----\n metric: ['counter', 'prometheus', 'telemetry', 'export'],\n prometheus: ['metric', 'exporter', 'monitoring'],\n trace: ['span', 'telemetry', 'observability'],\n span: ['trace', 'telemetry'],\n monitoring: ['metric', 'trace', 'alert', 'observability'],\n telemetry: ['metric', 'trace', 'span'],\n counter: ['metric', 'increment'],\n // ---- feature flags / experimentation ----\n flag: ['feature', 'rollout', 'toggle', 'experiment'],\n rollout: ['flag', 'percentage', 'release', 'experiment'],\n toggle: ['flag', 'feature', 'switch'],\n experiment: ['variant', 'assign', 'flag', 'exposure'],\n variant: ['experiment', 'assign'],\n // ---- generic infrastructure ----\n database: ['schema', 'migration', 'sql', 'query', 'orm'],\n db: ['database', 'schema', 'migration', 'sql'],\n migration: ['database', 'schema', 'migrate', 'sql'],\n cache: ['redis', 'ttl', 'store'],\n queue: ['job', 'worker', 'task', 'batch'],\n job: ['queue', 'worker', 'cron'],\n upload: ['file', 'storage', 'blob', 'asset'],\n storage: ['file', 'upload', 'bucket', 'blob'],\n permission: ['role', 'rbac', 'acl', 'access', 'grant'],\n role: ['permission', 'rbac', 'access'],\n error: ['exception', 'failure', 'handler'],\n config: ['settings', 'env', 'configuration'],\n};\n\n/**\n * Adjacent-word concepts: phrases whose meaning is NOT the sum of their\n * tokens. \"direct debit\" is a payments concept; \"direct\" alone is a URL /\n * filesystem word (`validDirectUrl`, `directoryListing` — real distractors\n * from the field report). Detected over the RAW ordered token stream, before\n * stopword filtering, so \"sign in\" / \"log in\" survive.\n */\nconst BIGRAM_CONCEPTS: Record<string, readonly string[]> = {\n 'direct debit': ['debit', 'mandate', 'sepa', 'bacs', 'bank'],\n 'direct debits': ['debit', 'mandate', 'sepa', 'bacs', 'bank'],\n 'sign in': ['login', 'signin', 'auth', 'session'],\n 'signs in': ['login', 'signin', 'auth', 'session'],\n 'log in': ['login', 'auth', 'session'],\n 'logs in': ['login', 'auth', 'session'],\n 'logged in': ['login', 'auth', 'session'],\n 'sign up': ['signup', 'register', 'account'],\n 'credit card': ['card', 'payment', 'charge', 'stripe'],\n 'credit cards': ['card', 'payment', 'charge', 'stripe'],\n 'bank transfer': ['bank', 'payment', 'sepa', 'transfer'],\n 'rate limit': ['ratelimit', 'throttle', 'quota'],\n 'two factor': ['totp', 'mfa', 'otp', 'auth'],\n 'payment method': ['payment', 'stripe', 'card', 'debit'],\n 'payment methods': ['payment', 'stripe', 'card', 'debit'],\n 'push notification': ['push', 'device', 'token', 'notification'],\n 'push notifications': ['push', 'device', 'token', 'notification'],\n 'deep link': ['deeplink', 'link', 'route'],\n 'deep links': ['deeplink', 'link', 'route'],\n 'universal link': ['deeplink', 'link', 'universal'],\n 'universal links': ['deeplink', 'link', 'universal'],\n 'feature flag': ['flag', 'rollout', 'toggle', 'experiment'],\n 'feature flags': ['flag', 'rollout', 'toggle', 'experiment'],\n 'shopping cart': ['cart', 'checkout', 'order'],\n 'roll back': ['rollback', 'deploy', 'release'],\n 'rolled back': ['rollback', 'deploy', 'release'],\n 'ab test': ['experiment', 'variant'],\n 'sign out': ['logout', 'session', 'auth'],\n 'fixed width': ['record', 'export', 'mainframe', 'batch'],\n};\n\nexport interface ConceptExpansion {\n /** The expansion vocabulary term to score against symbol names. */\n term: string;\n /** The question token (or bigram) that produced it — kept for `why`. */\n from: string;\n}\n\n/** Singularize the trivial English plurals that show up in questions. */\nfunction lexiconKey(token: string): string | null {\n if (token in CONCEPTS) return token;\n if (token.endsWith('ies')) {\n const singular = token.slice(0, -3) + 'y';\n if (singular in CONCEPTS) return singular;\n }\n if (token.endsWith('s')) {\n const singular = token.slice(0, -1);\n if (singular in CONCEPTS) return singular;\n }\n return null;\n}\n\n/**\n * Expand a question's ordered, lowercased token stream (stopwords INCLUDED —\n * bigrams like \"sign in\" need them) into concept vocabulary. Deterministic:\n * output order follows first appearance in the question, then lexicon order.\n * Tokens already present in the question are not re-emitted as expansions.\n */\nexport function expandConcepts(orderedTokens: string[]): ConceptExpansion[] {\n const present = new Set(orderedTokens);\n const out: ConceptExpansion[] = [];\n const emitted = new Set<string>();\n const emit = (term: string, from: string) => {\n if (present.has(term) || emitted.has(term)) return;\n emitted.add(term);\n out.push({ term, from });\n };\n\n for (let i = 0; i + 1 < orderedTokens.length; i++) {\n const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;\n const terms = BIGRAM_CONCEPTS[bigram];\n if (terms) for (const t of terms) emit(t, bigram);\n }\n for (const token of orderedTokens) {\n const key = lexiconKey(token);\n if (key) for (const t of CONCEPTS[key]!) emit(t, token);\n }\n return out;\n}\n\n/**\n * Tokens CONSUMED by a fired bigram concept that carry no standalone domain\n * meaning of their own — \"direct\" in \"direct debit\", \"sign\" in \"sign in\".\n * The bigram's expansion vocabulary re-supplies the topical words (debit,\n * mandate, login, …), so the consumed token must stop acting as independent\n * content evidence: left at full weight it seeds every `directGet`/\n * `redirectUrl`/`directoryListing` in the repo — the exact distractor set the\n * BIGRAM_CONCEPTS comment above documents. A constituent that is itself a\n * lexicon concept (\"debit\", \"card\") keeps its content role.\n */\nexport function bigramConsumedTokens(orderedTokens: string[]): Set<string> {\n const consumed = new Set<string>();\n for (let i = 0; i + 1 < orderedTokens.length; i++) {\n const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;\n if (!BIGRAM_CONCEPTS[bigram]) continue;\n for (const tok of [orderedTokens[i], orderedTokens[i + 1]]) {\n if (!lexiconKey(tok)) consumed.add(tok);\n }\n }\n return consumed;\n}\n"]}