@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.
- package/dist/{agent-PQEODATY.js → agent-YDRDDKPE.js} +10 -12
- package/dist/{agent-PQEODATY.js.map → agent-YDRDDKPE.js.map} +1 -1
- package/dist/{baseline-SU2PCQV2.js → baseline-IALIGR4A.js} +3 -3
- package/dist/{baseline-SU2PCQV2.js.map → baseline-IALIGR4A.js.map} +1 -1
- package/dist/{chunk-SJC3VKQ2.js → chunk-4TPTVRVI.js} +4 -4
- package/dist/{chunk-SJC3VKQ2.js.map → chunk-4TPTVRVI.js.map} +1 -1
- package/dist/{chunk-VJHNGNCT.js → chunk-A4CGGQJ7.js} +5 -6
- package/dist/chunk-A4CGGQJ7.js.map +1 -0
- package/dist/chunk-B2Y45PCA.js +6 -0
- package/dist/{chunk-USO67ZEE.js.map → chunk-B2Y45PCA.js.map} +1 -1
- package/dist/{chunk-2A7XCANX.js → chunk-B6IBSQHG.js} +218 -24
- package/dist/chunk-B6IBSQHG.js.map +1 -0
- package/dist/{chunk-JZGVUH57.js → chunk-CM6OYYBW.js} +4 -4
- package/dist/{chunk-JZGVUH57.js.map → chunk-CM6OYYBW.js.map} +1 -1
- package/dist/{chunk-UH2WHRKJ.js → chunk-D56WBMAM.js} +7 -8
- package/dist/chunk-D56WBMAM.js.map +1 -0
- package/dist/{chunk-H4XQQ4N2.js → chunk-FJ2ARY3S.js} +6 -7
- package/dist/chunk-FJ2ARY3S.js.map +1 -0
- package/dist/{chunk-OCINHIPN.js → chunk-K5GPEWPI.js} +458 -6
- package/dist/chunk-K5GPEWPI.js.map +1 -0
- package/dist/{chunk-5WMFX7TY.js → chunk-KSFYHT5G.js} +4 -4
- package/dist/{chunk-5WMFX7TY.js.map → chunk-KSFYHT5G.js.map} +1 -1
- package/dist/{chunk-LOV44ROX.js → chunk-L4CYXVW2.js} +4 -4
- package/dist/{chunk-LOV44ROX.js.map → chunk-L4CYXVW2.js.map} +1 -1
- package/dist/{chunk-UXWN5YQW.js → chunk-L7GGEXZG.js} +4 -4
- package/dist/{chunk-UXWN5YQW.js.map → chunk-L7GGEXZG.js.map} +1 -1
- package/dist/{chunk-KFK7KCAH.js → chunk-NAZLPO63.js} +3 -3
- package/dist/{chunk-KFK7KCAH.js.map → chunk-NAZLPO63.js.map} +1 -1
- package/dist/{chunk-TVRM57CE.js → chunk-NGMVIAKI.js} +4 -4
- package/dist/{chunk-TVRM57CE.js.map → chunk-NGMVIAKI.js.map} +1 -1
- package/dist/{chunk-72XI4MTL.js → chunk-P63H3DXY.js} +7 -8
- package/dist/chunk-P63H3DXY.js.map +1 -0
- package/dist/{chunk-COZEHQTK.js → chunk-TASMCKLD.js} +7 -7
- package/dist/{chunk-COZEHQTK.js.map → chunk-TASMCKLD.js.map} +1 -1
- package/dist/{chunk-HE2TEFWY.js → chunk-UHLFD7EO.js} +4 -4
- package/dist/{chunk-HE2TEFWY.js.map → chunk-UHLFD7EO.js.map} +1 -1
- package/dist/{chunk-CPGTEDFD.js → chunk-UZO2T3J2.js} +3 -3
- package/dist/{chunk-CPGTEDFD.js.map → chunk-UZO2T3J2.js.map} +1 -1
- package/dist/{chunk-MKDM2KLO.js → chunk-WGIX4S5A.js} +8 -9
- package/dist/chunk-WGIX4S5A.js.map +1 -0
- package/dist/{chunk-TKV3GAKX.js → chunk-XVZMDDU4.js} +4 -4
- package/dist/{chunk-TKV3GAKX.js.map → chunk-XVZMDDU4.js.map} +1 -1
- package/dist/{chunk-UJGWQ6YA.js → chunk-ZZNNXZYB.js} +3 -4
- package/dist/chunk-ZZNNXZYB.js.map +1 -0
- package/dist/cli.js +91 -45
- package/dist/cli.js.map +1 -1
- package/dist/embed-worker-main.js +5 -2
- package/dist/embed-worker-main.js.map +1 -1
- package/dist/{ensure-map-Z6UXBPI7.js → ensure-map-DNLGAQRQ.js} +12 -14
- package/dist/{ensure-map-Z6UXBPI7.js.map → ensure-map-DNLGAQRQ.js.map} +1 -1
- package/dist/graph-backend-L7PIG7CS.js +13 -0
- package/dist/{graph-backend-3A2M22QN.js.map → graph-backend-L7PIG7CS.js.map} +1 -1
- package/dist/index.d.ts +25 -6
- package/dist/index.js +11 -13
- package/dist/index.js.map +1 -1
- package/dist/{interactive-6TCXGIMA.js → interactive-GQ3O7FKE.js} +21 -23
- package/dist/interactive-GQ3O7FKE.js.map +1 -0
- package/dist/load-VOSNNCOZ.js +9 -0
- package/dist/{load-QHU4WMUN.js.map → load-VOSNNCOZ.js.map} +1 -1
- package/dist/{run-outcome-NHD3NXTL.js → run-outcome-I4T5GDQZ.js} +5 -7
- package/dist/run-outcome-I4T5GDQZ.js.map +1 -0
- package/dist/runtime-session-45HT7NZA.js +20 -0
- package/dist/{runtime-session-W65P4OXR.js.map → runtime-session-45HT7NZA.js.map} +1 -1
- package/dist/session-QUONHFJN.js +15 -0
- package/dist/{session-NZKZXBX4.js.map → session-QUONHFJN.js.map} +1 -1
- package/dist/{stream-json-MLWEIQNK.js → stream-json-WEWVI3DW.js} +10 -12
- package/dist/stream-json-WEWVI3DW.js.map +1 -0
- package/dist/{vg-mcp-bridge-2DEZF3JM.js → vg-mcp-bridge-NOG3D6TL.js} +8 -10
- package/dist/vg-mcp-bridge-NOG3D6TL.js.map +1 -0
- package/dist/{vgd-W7IHKGNU.js → vgd-URRPZ7OD.js} +8 -10
- package/dist/vgd-URRPZ7OD.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-2A7XCANX.js.map +0 -1
- package/dist/chunk-4LGDQBYK.js +0 -358
- package/dist/chunk-4LGDQBYK.js.map +0 -1
- package/dist/chunk-72XI4MTL.js.map +0 -1
- package/dist/chunk-H4XQQ4N2.js.map +0 -1
- package/dist/chunk-MKDM2KLO.js.map +0 -1
- package/dist/chunk-OCINHIPN.js.map +0 -1
- package/dist/chunk-RBMKBYGV.js +0 -102
- package/dist/chunk-RBMKBYGV.js.map +0 -1
- package/dist/chunk-UH2WHRKJ.js.map +0 -1
- package/dist/chunk-UJGWQ6YA.js.map +0 -1
- package/dist/chunk-USO67ZEE.js +0 -6
- package/dist/chunk-VJHNGNCT.js.map +0 -1
- package/dist/graph-backend-3A2M22QN.js +0 -13
- package/dist/interactive-6TCXGIMA.js.map +0 -1
- package/dist/load-QHU4WMUN.js +0 -11
- package/dist/run-outcome-NHD3NXTL.js.map +0 -1
- package/dist/runtime-session-W65P4OXR.js +0 -22
- package/dist/session-NZKZXBX4.js +0 -17
- package/dist/stream-json-MLWEIQNK.js.map +0 -1
- package/dist/vg-mcp-bridge-2DEZF3JM.js.map +0 -1
- package/dist/vgd-W7IHKGNU.js.map +0 -1
package/dist/chunk-4LGDQBYK.js
DELETED
|
@@ -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"]}
|