@vibgrate/cli 2026.731.3 → 2026.803.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-HNV2VUCO.js +24 -0
- package/dist/{agent-6XOI7RVW.js.map → agent-HNV2VUCO.js.map} +1 -1
- package/dist/baseline-6WTULHM5.js +9 -0
- package/dist/{baseline-PY6TETA5.js.map → baseline-6WTULHM5.js.map} +1 -1
- package/dist/{chunk-B6S2DSBS.js → chunk-2TLQDF6C.js} +129 -20
- package/dist/chunk-2TLQDF6C.js.map +1 -0
- package/dist/{chunk-X634FZVG.js → chunk-3LOWJSAF.js} +11 -16
- package/dist/{chunk-X634FZVG.js.map → chunk-3LOWJSAF.js.map} +1 -1
- package/dist/{chunk-BMUTNUB7.js → chunk-4HFSUIIN.js} +117 -6
- package/dist/chunk-4HFSUIIN.js.map +1 -0
- package/dist/{chunk-3VSU7G75.js → chunk-536J6HUR.js} +235 -13
- package/dist/chunk-536J6HUR.js.map +1 -0
- package/dist/{chunk-EETK7S43.js → chunk-5VH3Y4QC.js} +111 -33
- package/dist/chunk-5VH3Y4QC.js.map +1 -0
- package/dist/{chunk-PHGAUWWF.js → chunk-6I4TXAI6.js} +3 -3
- package/dist/{chunk-PHGAUWWF.js.map → chunk-6I4TXAI6.js.map} +1 -1
- package/dist/{chunk-FF5ZQ6KI.js → chunk-6JP7HGIF.js} +4 -4
- package/dist/{chunk-FF5ZQ6KI.js.map → chunk-6JP7HGIF.js.map} +1 -1
- package/dist/chunk-AJ2KE3NT.js +446 -0
- package/dist/chunk-AJ2KE3NT.js.map +1 -0
- package/dist/{chunk-WK52LWRX.js → chunk-B2KLJPFY.js} +5 -5
- package/dist/{chunk-WK52LWRX.js.map → chunk-B2KLJPFY.js.map} +1 -1
- package/dist/{chunk-Z7VH4RPO.js → chunk-BBFQZ7CA.js} +4 -4
- package/dist/{chunk-Z7VH4RPO.js.map → chunk-BBFQZ7CA.js.map} +1 -1
- package/dist/{chunk-FHJBGPJZ.js → chunk-BWMMR5XA.js} +4 -4
- package/dist/{chunk-FHJBGPJZ.js.map → chunk-BWMMR5XA.js.map} +1 -1
- package/dist/{chunk-KLO2XBUX.js → chunk-CC6F75GI.js} +14 -7
- package/dist/chunk-CC6F75GI.js.map +1 -0
- package/dist/{chunk-SCTLOFNH.js → chunk-CE45STY5.js} +4 -4
- package/dist/{chunk-SCTLOFNH.js.map → chunk-CE45STY5.js.map} +1 -1
- package/dist/{chunk-MOLBANFB.js → chunk-DIU3MXB3.js} +4 -4
- package/dist/{chunk-MOLBANFB.js.map → chunk-DIU3MXB3.js.map} +1 -1
- package/dist/{chunk-5IA2TA57.js → chunk-FKFRASAB.js} +323 -152
- package/dist/chunk-FKFRASAB.js.map +1 -0
- package/dist/{chunk-EVLS2M5G.js → chunk-JFE7XCAE.js} +3 -3
- package/dist/{chunk-EVLS2M5G.js.map → chunk-JFE7XCAE.js.map} +1 -1
- package/dist/{chunk-RGEVBSLK.js → chunk-JUSXLCSE.js} +3 -3
- package/dist/{chunk-RGEVBSLK.js.map → chunk-JUSXLCSE.js.map} +1 -1
- package/dist/{chunk-7G5S5KZN.js → chunk-KUZLILN3.js} +16 -3
- package/dist/chunk-KUZLILN3.js.map +1 -0
- package/dist/{chunk-AVCBKQKA.js → chunk-N4IDP2M2.js} +218 -51
- package/dist/chunk-N4IDP2M2.js.map +1 -0
- package/dist/{chunk-XRN7DQGR.js → chunk-NJFQCDGA.js} +3 -3
- package/dist/{chunk-XRN7DQGR.js.map → chunk-NJFQCDGA.js.map} +1 -1
- package/dist/{chunk-LTTVCI5C.js → chunk-O7MTBC52.js} +134 -9
- package/dist/chunk-O7MTBC52.js.map +1 -0
- package/dist/chunk-QT2PMGN3.js +6 -0
- package/dist/{chunk-DEKGSQHL.js.map → chunk-QT2PMGN3.js.map} +1 -1
- package/dist/{chunk-5XIEVZLW.js → chunk-S4NSF5AZ.js} +6 -6
- package/dist/{chunk-5XIEVZLW.js.map → chunk-S4NSF5AZ.js.map} +1 -1
- package/dist/{chunk-TRKRRX2S.js → chunk-SJFBXCII.js} +35 -6
- package/dist/chunk-SJFBXCII.js.map +1 -0
- package/dist/{chunk-RIWLXMMT.js → chunk-SNKTD23L.js} +109 -10
- package/dist/chunk-SNKTD23L.js.map +1 -0
- package/dist/{chunk-IPICO2RV.js → chunk-VIWZ4QT7.js} +14 -3
- package/dist/chunk-VIWZ4QT7.js.map +1 -0
- package/dist/{chunk-US2DAKCM.js → chunk-Y7YKUZ3T.js} +8 -7
- package/dist/chunk-Y7YKUZ3T.js.map +1 -0
- package/dist/cli.js +732 -347
- package/dist/cli.js.map +1 -1
- package/dist/ensure-map-5YEI7R7V.js +29 -0
- package/dist/{ensure-map-UQL7SM34.js.map → ensure-map-5YEI7R7V.js.map} +1 -1
- package/dist/{graph-backend-G5Y6QQV4.js → graph-backend-CPHLUKUC.js} +5 -5
- package/dist/{graph-backend-G5Y6QQV4.js.map → graph-backend-CPHLUKUC.js.map} +1 -1
- package/dist/index.d.ts +127 -9
- package/dist/index.js +17 -16
- package/dist/index.js.map +1 -1
- package/dist/{interactive-QWT7ERXJ.js → interactive-TNRE4OEK.js} +46 -33
- package/dist/interactive-TNRE4OEK.js.map +1 -0
- package/dist/{llm-host-DZBD5D36.js → llm-host-XFYFOAAX.js} +4 -4
- package/dist/{llm-host-DZBD5D36.js.map → llm-host-XFYFOAAX.js.map} +1 -1
- package/dist/load-MWG6WZTK.js +10 -0
- package/dist/{load-WA53B3GW.js.map → load-MWG6WZTK.js.map} +1 -1
- package/dist/model-manager-GJ2YSTSK.js +1 -1
- package/dist/{run-outcome-J2IDIVYI.js → run-outcome-375HMSQG.js} +6 -6
- package/dist/{run-outcome-J2IDIVYI.js.map → run-outcome-375HMSQG.js.map} +1 -1
- package/dist/runtime-session-3MPWXNRL.js +20 -0
- package/dist/{runtime-session-52P2Y5LX.js.map → runtime-session-3MPWXNRL.js.map} +1 -1
- package/dist/session-2NGJLI5Y.js +15 -0
- package/dist/{session-L7SJNE55.js.map → session-2NGJLI5Y.js.map} +1 -1
- package/dist/session-store-F7NX7SZN.js +4 -0
- package/dist/{session-store-SQECEXUU.js.map → session-store-F7NX7SZN.js.map} +1 -1
- package/dist/{stream-json-TSGYC2MQ.js → stream-json-AUMU3NLV.js} +48 -16
- package/dist/stream-json-AUMU3NLV.js.map +1 -0
- package/dist/{vg-mcp-bridge-IFAXEQMZ.js → vg-mcp-bridge-D463EHQI.js} +13 -11
- package/dist/vg-mcp-bridge-D463EHQI.js.map +1 -0
- package/dist/{vgd-PNR7UKLL.js → vgd-Z23PXSP4.js} +10 -10
- package/dist/vgd-Z23PXSP4.js.map +1 -0
- package/package.json +4 -2
- package/dist/agent-6XOI7RVW.js +0 -22
- package/dist/baseline-PY6TETA5.js +0 -9
- package/dist/chunk-3VSU7G75.js.map +0 -1
- package/dist/chunk-5IA2TA57.js.map +0 -1
- package/dist/chunk-7G5S5KZN.js.map +0 -1
- package/dist/chunk-AVCBKQKA.js.map +0 -1
- package/dist/chunk-B6S2DSBS.js.map +0 -1
- package/dist/chunk-BMUTNUB7.js.map +0 -1
- package/dist/chunk-DEKGSQHL.js +0 -6
- package/dist/chunk-EETK7S43.js.map +0 -1
- package/dist/chunk-IPICO2RV.js.map +0 -1
- package/dist/chunk-KLO2XBUX.js.map +0 -1
- package/dist/chunk-LTTVCI5C.js.map +0 -1
- package/dist/chunk-RIWLXMMT.js.map +0 -1
- package/dist/chunk-TRKRRX2S.js.map +0 -1
- package/dist/chunk-US2DAKCM.js.map +0 -1
- package/dist/chunk-ZKNB4YH4.js +0 -102
- package/dist/chunk-ZKNB4YH4.js.map +0 -1
- package/dist/ensure-map-UQL7SM34.js +0 -28
- package/dist/interactive-QWT7ERXJ.js.map +0 -1
- package/dist/load-WA53B3GW.js +0 -10
- package/dist/runtime-session-52P2Y5LX.js +0 -20
- package/dist/session-L7SJNE55.js +0 -13
- package/dist/session-store-SQECEXUU.js +0 -4
- package/dist/stream-json-TSGYC2MQ.js.map +0 -1
- package/dist/vg-mcp-bridge-IFAXEQMZ.js.map +0 -1
- package/dist/vgd-PNR7UKLL.js.map +0 -1
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
// src/engine/serialize.ts
|
|
5
|
+
function serializeGraph(graph, opts) {
|
|
6
|
+
const indent = opts?.compact ? 0 : 2;
|
|
7
|
+
return `${stableStringify(graph, indent)}
|
|
8
|
+
`;
|
|
9
|
+
}
|
|
10
|
+
function slimGraphForExport(graph) {
|
|
11
|
+
return {
|
|
12
|
+
...graph,
|
|
13
|
+
areas: graph.areas.map((a) => ({
|
|
14
|
+
...a,
|
|
15
|
+
members: []
|
|
16
|
+
// member id lists dominate XL exports; area id still on nodes
|
|
17
|
+
})),
|
|
18
|
+
grounding: void 0,
|
|
19
|
+
facts: graph.facts
|
|
20
|
+
// Keep summaries/unknowns — small and useful to agents.
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function stableStringify(value, indent = 2) {
|
|
24
|
+
return JSON.stringify(sortKeys(value), null, indent);
|
|
25
|
+
}
|
|
26
|
+
function sortKeys(value) {
|
|
27
|
+
if (Array.isArray(value)) return value.map(sortKeys);
|
|
28
|
+
if (value && typeof value === "object") {
|
|
29
|
+
const input = value;
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const key of Object.keys(input).sort()) {
|
|
32
|
+
const v = input[key];
|
|
33
|
+
if (v === void 0) continue;
|
|
34
|
+
out[key] = sortKeys(v);
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function parseGraph(json) {
|
|
41
|
+
return JSON.parse(json);
|
|
42
|
+
}
|
|
43
|
+
var CACHE_VERSION = "vg-parse-cache/4";
|
|
44
|
+
function cacheDir(root) {
|
|
45
|
+
return path.join(root, ".vibgrate", "cache");
|
|
46
|
+
}
|
|
47
|
+
function cachePath(root) {
|
|
48
|
+
return path.join(cacheDir(root), "parse-cache.json");
|
|
49
|
+
}
|
|
50
|
+
function loadCache(root, opts) {
|
|
51
|
+
const file = cachePath(root);
|
|
52
|
+
let data = {
|
|
53
|
+
version: CACHE_VERSION,
|
|
54
|
+
toolVersion: opts.toolVersion,
|
|
55
|
+
grammars: opts.grammars,
|
|
56
|
+
entries: {}
|
|
57
|
+
};
|
|
58
|
+
if (!opts.disabled && fs.existsSync(file)) {
|
|
59
|
+
try {
|
|
60
|
+
const loaded = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
61
|
+
if ((loaded.version === CACHE_VERSION || loaded.version === "vg-parse-cache/3") && loaded.toolVersion === opts.toolVersion && loaded.grammars === opts.grammars && loaded.entries) {
|
|
62
|
+
data = { ...loaded, version: CACHE_VERSION };
|
|
63
|
+
}
|
|
64
|
+
} catch {
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
get(rel, hash) {
|
|
69
|
+
const entry = data.entries[rel];
|
|
70
|
+
return entry && entry.hash === hash ? entry.parse : void 0;
|
|
71
|
+
},
|
|
72
|
+
getByStat(rel, mtimeMs, size) {
|
|
73
|
+
const entry = data.entries[rel];
|
|
74
|
+
if (!entry) return void 0;
|
|
75
|
+
if (entry.mtimeMs === mtimeMs && entry.size === size && entry.parse) {
|
|
76
|
+
return { parse: entry.parse, hash: entry.hash };
|
|
77
|
+
}
|
|
78
|
+
return void 0;
|
|
79
|
+
},
|
|
80
|
+
set(rel, parse, stat) {
|
|
81
|
+
data.entries[rel] = {
|
|
82
|
+
hash: parse.hash,
|
|
83
|
+
parse,
|
|
84
|
+
mtimeMs: stat?.mtimeMs,
|
|
85
|
+
size: stat?.size
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
prune(currentRels) {
|
|
89
|
+
for (const rel of Object.keys(data.entries)) {
|
|
90
|
+
if (!currentRels.has(rel)) delete data.entries[rel];
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
save() {
|
|
94
|
+
fs.mkdirSync(cacheDir(root), { recursive: true });
|
|
95
|
+
fs.writeFileSync(file, stableStringify(data, 0));
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// src/engine/concepts.ts
|
|
101
|
+
var WEAK_TERMS = /* @__PURE__ */ new Set([
|
|
102
|
+
"add",
|
|
103
|
+
"adds",
|
|
104
|
+
"added",
|
|
105
|
+
"adding",
|
|
106
|
+
"create",
|
|
107
|
+
"creates",
|
|
108
|
+
"created",
|
|
109
|
+
"creating",
|
|
110
|
+
"make",
|
|
111
|
+
"makes",
|
|
112
|
+
"making",
|
|
113
|
+
"made",
|
|
114
|
+
"new",
|
|
115
|
+
"newly",
|
|
116
|
+
"remove",
|
|
117
|
+
"removes",
|
|
118
|
+
"removed",
|
|
119
|
+
"removing",
|
|
120
|
+
"delete",
|
|
121
|
+
"deletes",
|
|
122
|
+
"deleted",
|
|
123
|
+
"deleting",
|
|
124
|
+
"update",
|
|
125
|
+
"updates",
|
|
126
|
+
"updated",
|
|
127
|
+
"updating",
|
|
128
|
+
"change",
|
|
129
|
+
"changes",
|
|
130
|
+
"changed",
|
|
131
|
+
"changing",
|
|
132
|
+
"set",
|
|
133
|
+
"sets",
|
|
134
|
+
"setting",
|
|
135
|
+
"setup",
|
|
136
|
+
"get",
|
|
137
|
+
"gets",
|
|
138
|
+
"getting",
|
|
139
|
+
"use",
|
|
140
|
+
"uses",
|
|
141
|
+
"used",
|
|
142
|
+
"using",
|
|
143
|
+
"want",
|
|
144
|
+
"wants",
|
|
145
|
+
"wanted",
|
|
146
|
+
"do",
|
|
147
|
+
"does",
|
|
148
|
+
"doing",
|
|
149
|
+
"done",
|
|
150
|
+
"support",
|
|
151
|
+
"supports",
|
|
152
|
+
"supported",
|
|
153
|
+
"supporting",
|
|
154
|
+
"enable",
|
|
155
|
+
"enables",
|
|
156
|
+
"enabled",
|
|
157
|
+
"enabling",
|
|
158
|
+
"disable",
|
|
159
|
+
"disables",
|
|
160
|
+
"disabled",
|
|
161
|
+
"disabling",
|
|
162
|
+
"allow",
|
|
163
|
+
"allows",
|
|
164
|
+
"allowed",
|
|
165
|
+
"implement",
|
|
166
|
+
"implements",
|
|
167
|
+
"implemented",
|
|
168
|
+
"implementing",
|
|
169
|
+
"build",
|
|
170
|
+
"builds",
|
|
171
|
+
"building",
|
|
172
|
+
"built",
|
|
173
|
+
"via",
|
|
174
|
+
"through",
|
|
175
|
+
"into",
|
|
176
|
+
"onto",
|
|
177
|
+
"way",
|
|
178
|
+
"ways",
|
|
179
|
+
"thing",
|
|
180
|
+
"things",
|
|
181
|
+
"stuff",
|
|
182
|
+
"feature",
|
|
183
|
+
"features",
|
|
184
|
+
"functionality",
|
|
185
|
+
"method",
|
|
186
|
+
"methods",
|
|
187
|
+
"option",
|
|
188
|
+
"options",
|
|
189
|
+
"ability",
|
|
190
|
+
"help",
|
|
191
|
+
"start",
|
|
192
|
+
"begin",
|
|
193
|
+
"work",
|
|
194
|
+
"works",
|
|
195
|
+
"working",
|
|
196
|
+
"also",
|
|
197
|
+
"currently",
|
|
198
|
+
"properly",
|
|
199
|
+
"correctly",
|
|
200
|
+
"please",
|
|
201
|
+
"happens",
|
|
202
|
+
"happen",
|
|
203
|
+
"something",
|
|
204
|
+
"somewhere",
|
|
205
|
+
"step",
|
|
206
|
+
"steps",
|
|
207
|
+
"flow",
|
|
208
|
+
"process",
|
|
209
|
+
"you",
|
|
210
|
+
"can"
|
|
211
|
+
]);
|
|
212
|
+
var CONCEPTS = {
|
|
213
|
+
// ---- payments / billing ----
|
|
214
|
+
payment: ["stripe", "billing", "invoice", "checkout", "charge", "subscription", "refund", "payout", "card", "debit", "mandate"],
|
|
215
|
+
pay: ["payment", "stripe", "charge", "billing", "invoice"],
|
|
216
|
+
paid: ["payment", "invoice", "charge"],
|
|
217
|
+
billing: ["invoice", "payment", "subscription", "stripe", "charge", "renewal"],
|
|
218
|
+
checkout: ["stripe", "payment", "cart", "session"],
|
|
219
|
+
debit: ["mandate", "sepa", "bacs", "ach", "bank", "payment"],
|
|
220
|
+
mandate: ["sepa", "bacs", "debit"],
|
|
221
|
+
sepa: ["mandate", "debit", "iban", "bank"],
|
|
222
|
+
bacs: ["mandate", "debit", "bank"],
|
|
223
|
+
ach: ["mandate", "debit", "bank"],
|
|
224
|
+
stripe: ["payment", "billing", "checkout", "webhook", "charge", "card"],
|
|
225
|
+
refund: ["payment", "invoice", "stripe", "charge"],
|
|
226
|
+
invoice: ["billing", "payment", "refund", "subscription"],
|
|
227
|
+
subscription: ["billing", "renewal", "invoice", "plan", "recurring"],
|
|
228
|
+
recurring: ["subscription", "renewal", "mandate", "debit"],
|
|
229
|
+
renewal: ["subscription", "billing", "renew"],
|
|
230
|
+
card: ["payment", "charge", "stripe"],
|
|
231
|
+
credit: ["card", "payment", "charge"],
|
|
232
|
+
bank: ["debit", "mandate", "sepa", "iban", "account"],
|
|
233
|
+
charge: ["payment", "card", "stripe"],
|
|
234
|
+
webhook: ["event", "handler", "callback"],
|
|
235
|
+
price: ["payment", "billing", "plan"],
|
|
236
|
+
customer: ["billing", "account", "user"],
|
|
237
|
+
// ---- auth ----
|
|
238
|
+
auth: ["login", "session", "token", "oauth", "password", "credential"],
|
|
239
|
+
authentication: ["auth", "login", "session", "token", "password"],
|
|
240
|
+
authenticated: ["auth", "login", "session"],
|
|
241
|
+
login: ["auth", "session", "password", "signin", "oauth"],
|
|
242
|
+
signin: ["login", "auth", "session"],
|
|
243
|
+
signup: ["register", "onboard", "account"],
|
|
244
|
+
logout: ["session", "auth", "signout"],
|
|
245
|
+
password: ["auth", "login", "credential", "hash"],
|
|
246
|
+
session: ["auth", "login", "token"],
|
|
247
|
+
token: ["session", "auth", "jwt"],
|
|
248
|
+
oauth: ["auth", "login", "callback", "provider"],
|
|
249
|
+
google: ["oauth", "login", "auth"],
|
|
250
|
+
github: ["oauth", "login", "auth"],
|
|
251
|
+
sso: ["oauth", "auth", "saml", "login"],
|
|
252
|
+
credential: ["auth", "password", "token", "secret"],
|
|
253
|
+
// ---- dependencies / supply chain ----
|
|
254
|
+
dependency: ["package", "audit", "vulnerability", "advisory", "lockfile", "version"],
|
|
255
|
+
package: ["dependency", "audit", "vulnerability", "advisory", "lockfile"],
|
|
256
|
+
vulnerability: ["advisory", "cve", "osv", "audit", "vulnerable"],
|
|
257
|
+
vulnerable: ["vulnerability", "advisory", "audit", "cve"],
|
|
258
|
+
advisory: ["vulnerability", "cve", "osv", "audit"],
|
|
259
|
+
cve: ["vulnerability", "advisory", "osv"],
|
|
260
|
+
risk: ["vulnerability", "audit", "advisory"],
|
|
261
|
+
security: ["vulnerability", "audit", "advisory"],
|
|
262
|
+
audit: ["dependency", "vulnerability", "advisory"],
|
|
263
|
+
scan: ["audit", "vulnerability", "scanner"],
|
|
264
|
+
// ---- notifications / messaging ----
|
|
265
|
+
email: ["mail", "smtp", "sender", "template", "message"],
|
|
266
|
+
mail: ["email", "smtp", "sender"],
|
|
267
|
+
notification: ["notify", "email", "sms", "push", "alert"],
|
|
268
|
+
notify: ["notification", "email", "alert"],
|
|
269
|
+
sms: ["notification", "message", "twilio"],
|
|
270
|
+
// ---- e-commerce ----
|
|
271
|
+
cart: ["checkout", "order", "shop", "basket", "discount"],
|
|
272
|
+
basket: ["cart", "checkout", "order"],
|
|
273
|
+
order: ["cart", "shipment", "fulfillment", "shop", "checkout"],
|
|
274
|
+
ship: ["order", "fulfillment", "delivery", "shipment"],
|
|
275
|
+
shipment: ["order", "fulfillment", "delivery", "track"],
|
|
276
|
+
shipping: ["order", "fulfillment", "delivery", "shipment"],
|
|
277
|
+
shipped: ["order", "fulfillment", "shipment"],
|
|
278
|
+
inventory: ["stock", "product", "catalog", "restock"],
|
|
279
|
+
stock: ["inventory", "product", "restock"],
|
|
280
|
+
product: ["catalog", "inventory", "shop"],
|
|
281
|
+
discount: ["coupon", "promo", "cart", "price"],
|
|
282
|
+
coupon: ["discount", "promo", "code"],
|
|
283
|
+
// ---- chat / social ----
|
|
284
|
+
chat: ["message", "room", "conversation", "presence"],
|
|
285
|
+
message: ["chat", "sms", "notification", "thread"],
|
|
286
|
+
conversation: ["chat", "message", "thread"],
|
|
287
|
+
presence: ["online", "typing", "status"],
|
|
288
|
+
online: ["presence", "status"],
|
|
289
|
+
typing: ["presence", "indicator", "broadcast"],
|
|
290
|
+
// ---- media / streaming ----
|
|
291
|
+
video: ["media", "transcode", "playback", "stream", "thumbnail"],
|
|
292
|
+
stream: ["video", "playback", "manifest", "media"],
|
|
293
|
+
streaming: ["video", "playback", "manifest", "media"],
|
|
294
|
+
playback: ["video", "stream", "media", "watch"],
|
|
295
|
+
transcode: ["video", "media", "encode"],
|
|
296
|
+
thumbnail: ["video", "image", "media"],
|
|
297
|
+
media: ["video", "stream", "playback", "asset"],
|
|
298
|
+
// ---- analytics ----
|
|
299
|
+
analytics: ["event", "track", "metric", "funnel", "report"],
|
|
300
|
+
event: ["track", "analytics", "webhook"],
|
|
301
|
+
track: ["event", "analytics"],
|
|
302
|
+
funnel: ["conversion", "analytics", "event"],
|
|
303
|
+
conversion: ["funnel", "analytics"],
|
|
304
|
+
report: ["metrics", "export", "analytics"],
|
|
305
|
+
// ---- content / CMS ----
|
|
306
|
+
article: ["publish", "content", "post", "cms"],
|
|
307
|
+
publish: ["article", "release", "post", "content"],
|
|
308
|
+
post: ["article", "publish", "message"],
|
|
309
|
+
blog: ["article", "publish", "post", "cms"],
|
|
310
|
+
content: ["cms", "article", "markdown"],
|
|
311
|
+
markdown: ["render", "article", "content"],
|
|
312
|
+
cms: ["article", "content", "publish"],
|
|
313
|
+
// ---- CI / deployment ----
|
|
314
|
+
deploy: ["release", "rollback", "pipeline", "deployment"],
|
|
315
|
+
deployment: ["deploy", "release", "rollback", "pipeline"],
|
|
316
|
+
release: ["deploy", "version", "rollback"],
|
|
317
|
+
rollback: ["deploy", "release", "deployment"],
|
|
318
|
+
pipeline: ["stage", "deploy", "runner", "ci"],
|
|
319
|
+
canary: ["deploy", "rollout", "release"],
|
|
320
|
+
// ---- mobile ----
|
|
321
|
+
push: ["notification", "device", "token", "mobile"],
|
|
322
|
+
device: ["push", "token", "mobile", "register"],
|
|
323
|
+
deeplink: ["link", "route", "universal"],
|
|
324
|
+
mobile: ["push", "device", "deeplink", "app"],
|
|
325
|
+
ios: ["mobile", "universal", "link", "app"],
|
|
326
|
+
android: ["mobile", "push", "device", "app"],
|
|
327
|
+
// ---- batch / ETL / mainframe ----
|
|
328
|
+
batch: ["settlement", "job", "etl", "reconcile"],
|
|
329
|
+
settlement: ["batch", "reconcile", "ledger", "clearing"],
|
|
330
|
+
reconcile: ["ledger", "settlement", "batch"],
|
|
331
|
+
ledger: ["settlement", "reconcile", "balance", "journal"],
|
|
332
|
+
mainframe: ["batch", "settlement", "ebcdic", "cobol", "fixed"],
|
|
333
|
+
ebcdic: ["mainframe", "record", "convert", "legacy"],
|
|
334
|
+
cobol: ["mainframe", "batch", "ebcdic"],
|
|
335
|
+
etl: ["batch", "pipeline", "extract", "load", "transform"],
|
|
336
|
+
nightly: ["batch", "cron", "schedule", "job"],
|
|
337
|
+
// ---- geo / maps ----
|
|
338
|
+
geocode: ["address", "location", "map", "geo"],
|
|
339
|
+
address: ["geocode", "location"],
|
|
340
|
+
map: ["geo", "route", "location"],
|
|
341
|
+
route: ["distance", "path", "planner", "geo"],
|
|
342
|
+
distance: ["route", "haversine", "geo"],
|
|
343
|
+
location: ["geo", "geocode", "map"],
|
|
344
|
+
arrival: ["route", "eta", "estimate"],
|
|
345
|
+
// ---- i18n ----
|
|
346
|
+
translation: ["locale", "i18n", "language", "translate"],
|
|
347
|
+
translate: ["translation", "locale", "language"],
|
|
348
|
+
locale: ["translation", "i18n", "language", "format"],
|
|
349
|
+
i18n: ["translation", "locale", "language"],
|
|
350
|
+
language: ["locale", "translation", "i18n"],
|
|
351
|
+
localized: ["locale", "translation", "format"],
|
|
352
|
+
// ---- observability ----
|
|
353
|
+
metric: ["counter", "prometheus", "telemetry", "export"],
|
|
354
|
+
prometheus: ["metric", "exporter", "monitoring"],
|
|
355
|
+
trace: ["span", "telemetry", "observability"],
|
|
356
|
+
span: ["trace", "telemetry"],
|
|
357
|
+
monitoring: ["metric", "trace", "alert", "observability"],
|
|
358
|
+
telemetry: ["metric", "trace", "span"],
|
|
359
|
+
counter: ["metric", "increment"],
|
|
360
|
+
// ---- feature flags / experimentation ----
|
|
361
|
+
flag: ["feature", "rollout", "toggle", "experiment"],
|
|
362
|
+
rollout: ["flag", "percentage", "release", "experiment"],
|
|
363
|
+
toggle: ["flag", "feature", "switch"],
|
|
364
|
+
experiment: ["variant", "assign", "flag", "exposure"],
|
|
365
|
+
variant: ["experiment", "assign"],
|
|
366
|
+
// ---- generic infrastructure ----
|
|
367
|
+
database: ["schema", "migration", "sql", "query", "orm"],
|
|
368
|
+
db: ["database", "schema", "migration", "sql"],
|
|
369
|
+
migration: ["database", "schema", "migrate", "sql"],
|
|
370
|
+
cache: ["redis", "ttl", "store"],
|
|
371
|
+
queue: ["job", "worker", "task", "batch"],
|
|
372
|
+
job: ["queue", "worker", "cron"],
|
|
373
|
+
upload: ["file", "storage", "blob", "asset"],
|
|
374
|
+
storage: ["file", "upload", "bucket", "blob"],
|
|
375
|
+
permission: ["role", "rbac", "acl", "access", "grant"],
|
|
376
|
+
role: ["permission", "rbac", "access"],
|
|
377
|
+
error: ["exception", "failure", "handler"],
|
|
378
|
+
config: ["settings", "env", "configuration"]
|
|
379
|
+
};
|
|
380
|
+
var BIGRAM_CONCEPTS = {
|
|
381
|
+
"direct debit": ["debit", "mandate", "sepa", "bacs", "bank"],
|
|
382
|
+
"direct debits": ["debit", "mandate", "sepa", "bacs", "bank"],
|
|
383
|
+
"sign in": ["login", "signin", "auth", "session"],
|
|
384
|
+
"signs in": ["login", "signin", "auth", "session"],
|
|
385
|
+
"log in": ["login", "auth", "session"],
|
|
386
|
+
"logs in": ["login", "auth", "session"],
|
|
387
|
+
"logged in": ["login", "auth", "session"],
|
|
388
|
+
"sign up": ["signup", "register", "account"],
|
|
389
|
+
"credit card": ["card", "payment", "charge", "stripe"],
|
|
390
|
+
"credit cards": ["card", "payment", "charge", "stripe"],
|
|
391
|
+
"bank transfer": ["bank", "payment", "sepa", "transfer"],
|
|
392
|
+
"rate limit": ["ratelimit", "throttle", "quota"],
|
|
393
|
+
"two factor": ["totp", "mfa", "otp", "auth"],
|
|
394
|
+
"payment method": ["payment", "stripe", "card", "debit"],
|
|
395
|
+
"payment methods": ["payment", "stripe", "card", "debit"],
|
|
396
|
+
"push notification": ["push", "device", "token", "notification"],
|
|
397
|
+
"push notifications": ["push", "device", "token", "notification"],
|
|
398
|
+
"deep link": ["deeplink", "link", "route"],
|
|
399
|
+
"deep links": ["deeplink", "link", "route"],
|
|
400
|
+
"universal link": ["deeplink", "link", "universal"],
|
|
401
|
+
"universal links": ["deeplink", "link", "universal"],
|
|
402
|
+
"feature flag": ["flag", "rollout", "toggle", "experiment"],
|
|
403
|
+
"feature flags": ["flag", "rollout", "toggle", "experiment"],
|
|
404
|
+
"shopping cart": ["cart", "checkout", "order"],
|
|
405
|
+
"roll back": ["rollback", "deploy", "release"],
|
|
406
|
+
"rolled back": ["rollback", "deploy", "release"],
|
|
407
|
+
"ab test": ["experiment", "variant"],
|
|
408
|
+
"sign out": ["logout", "session", "auth"],
|
|
409
|
+
"fixed width": ["record", "export", "mainframe", "batch"]
|
|
410
|
+
};
|
|
411
|
+
function lexiconKey(token) {
|
|
412
|
+
if (token in CONCEPTS) return token;
|
|
413
|
+
if (token.endsWith("ies")) {
|
|
414
|
+
const singular = token.slice(0, -3) + "y";
|
|
415
|
+
if (singular in CONCEPTS) return singular;
|
|
416
|
+
}
|
|
417
|
+
if (token.endsWith("s")) {
|
|
418
|
+
const singular = token.slice(0, -1);
|
|
419
|
+
if (singular in CONCEPTS) return singular;
|
|
420
|
+
}
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
function expandConcepts(orderedTokens) {
|
|
424
|
+
const present = new Set(orderedTokens);
|
|
425
|
+
const out = [];
|
|
426
|
+
const emitted = /* @__PURE__ */ new Set();
|
|
427
|
+
const emit = (term, from) => {
|
|
428
|
+
if (present.has(term) || emitted.has(term)) return;
|
|
429
|
+
emitted.add(term);
|
|
430
|
+
out.push({ term, from });
|
|
431
|
+
};
|
|
432
|
+
for (let i = 0; i + 1 < orderedTokens.length; i++) {
|
|
433
|
+
const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;
|
|
434
|
+
const terms = BIGRAM_CONCEPTS[bigram];
|
|
435
|
+
if (terms) for (const t of terms) emit(t, bigram);
|
|
436
|
+
}
|
|
437
|
+
for (const token of orderedTokens) {
|
|
438
|
+
const key = lexiconKey(token);
|
|
439
|
+
if (key) for (const t of CONCEPTS[key]) emit(t, token);
|
|
440
|
+
}
|
|
441
|
+
return out;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
export { WEAK_TERMS, cacheDir, expandConcepts, loadCache, parseGraph, serializeGraph, slimGraphForExport, stableStringify };
|
|
445
|
+
//# sourceMappingURL=chunk-AJ2KE3NT.js.map
|
|
446
|
+
//# sourceMappingURL=chunk-AJ2KE3NT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/engine/serialize.ts","../src/engine/cache.ts","../src/engine/concepts.ts"],"names":[],"mappings":"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","file":"chunk-AJ2KE3NT.js","sourcesContent":["import type { VgGraph } from '../schema.js';\n\n/**\n * Deterministic serialization of `graph.json`.\n *\n * Object keys are sorted recursively and arrays are emitted in the (already\n * stable) order the engine produced them, so two runs over identical content\n * yield byte-identical output — the determinism contract (VG-CLI-SPEC §1.3).\n * Pretty-printed (2-space) and newline-terminated so the committed artifact is\n * human-diffable and plays well with the union merge driver.\n */\nexport function serializeGraph(graph: VgGraph, opts?: { compact?: boolean }): string {\n // Compact (no pretty-print) for large maps / CI artifacts — still deterministic.\n const indent = opts?.compact ? 0 : 2;\n return `${stableStringify(graph, indent)}\\n`;\n}\n\n/**\n * Drop heavy optional fields for export/sharing when size matters.\n * Does not mutate the input graph.\n */\nexport function slimGraphForExport(graph: VgGraph): VgGraph {\n return {\n ...graph,\n areas: graph.areas.map((a) => ({\n ...a,\n members: [], // member id lists dominate XL exports; area id still on nodes\n })),\n grounding: undefined,\n facts: graph.facts,\n // Keep summaries/unknowns — small and useful to agents.\n };\n}\n\nexport function stableStringify(value: unknown, indent = 2): string {\n return JSON.stringify(sortKeys(value), null, indent);\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n if (value && typeof value === 'object') {\n const input = value as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(input).sort()) {\n const v = input[key];\n if (v === undefined) continue; // omit undefined for stable output\n out[key] = sortKeys(v);\n }\n return out;\n }\n return value;\n}\n\nexport function parseGraph(json: string): VgGraph {\n return JSON.parse(json) as VgGraph;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { stableStringify } from './serialize.js';\nimport type { FileParse } from './types.js';\n\n/**\n * Incremental parse cache. Maps a file's content hash to its parsed\n * symbol/edge tables, so a rebuild re-parses only files whose content actually\n * changed (VG-DEVELOPMENT-PLAN Phase 0.4). Lives under `.vibgrate/cache/` and is\n * gitignored — never part of the committed artifact.\n *\n * The cache is a pure performance optimisation: a reused FileParse is identical\n * to a freshly-parsed one (parsing is pure over content), so the graph is\n * byte-identical whether or not the cache was warm. CI-enforced by the\n * mutation-corpus identity gate (incremental-identity.test.ts): warm\n * incremental rebuild ≡ cold full rebuild, byte for byte, across\n * edit/add/delete/rename/touch mutations and the production refresh path.\n */\n\n// Bumped to /4: optional mtime+size fingerprint for stat-skip fast path.\nconst CACHE_VERSION = 'vg-parse-cache/4';\n\ninterface CacheEntry {\n hash: string;\n mtimeMs?: number;\n size?: number;\n parse: FileParse;\n}\n\ninterface CacheFile {\n version: string;\n toolVersion: string;\n grammars: string;\n entries: Record<string, CacheEntry>;\n}\n\nexport interface ParseCache {\n get(rel: string, hash: string): FileParse | undefined;\n /** Fast path: mtime+size match → reuse parse without re-reading bytes. */\n getByStat(rel: string, mtimeMs: number, size: number): { parse: FileParse; hash: string } | undefined;\n set(rel: string, parse: FileParse, stat?: { mtimeMs: number; size: number }): void;\n /** Drop entries for files no longer present. */\n prune(currentRels: Set<string>): void;\n save(): void;\n}\n\nexport function cacheDir(root: string): string {\n return path.join(root, '.vibgrate', 'cache');\n}\n\nfunction cachePath(root: string): string {\n return path.join(cacheDir(root), 'parse-cache.json');\n}\n\nexport function loadCache(\n root: string,\n opts: { toolVersion: string; grammars: string; disabled?: boolean },\n): ParseCache {\n const file = cachePath(root);\n let data: CacheFile = {\n version: CACHE_VERSION,\n toolVersion: opts.toolVersion,\n grammars: opts.grammars,\n entries: {},\n };\n\n if (!opts.disabled && fs.existsSync(file)) {\n try {\n const loaded = JSON.parse(fs.readFileSync(file, 'utf8')) as CacheFile;\n // Accept v3 → v4 (stat fields optional).\n if (\n (loaded.version === CACHE_VERSION || loaded.version === 'vg-parse-cache/3') &&\n loaded.toolVersion === opts.toolVersion &&\n loaded.grammars === opts.grammars &&\n loaded.entries\n ) {\n data = { ...loaded, version: CACHE_VERSION };\n }\n } catch {\n /* corrupt cache — start fresh */\n }\n }\n\n return {\n get(rel, hash) {\n const entry = data.entries[rel];\n return entry && entry.hash === hash ? entry.parse : undefined;\n },\n getByStat(rel, mtimeMs, size) {\n const entry = data.entries[rel];\n if (!entry) return undefined;\n if (entry.mtimeMs === mtimeMs && entry.size === size && entry.parse) {\n return { parse: entry.parse, hash: entry.hash };\n }\n return undefined;\n },\n set(rel, parse, stat) {\n data.entries[rel] = {\n hash: parse.hash,\n parse,\n mtimeMs: stat?.mtimeMs,\n size: stat?.size,\n };\n },\n prune(currentRels) {\n for (const rel of Object.keys(data.entries)) {\n if (!currentRels.has(rel)) delete data.entries[rel];\n }\n },\n save() {\n fs.mkdirSync(cacheDir(root), { recursive: true });\n fs.writeFileSync(file, stableStringify(data, 0));\n },\n };\n}\n","/**\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"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { listHostSessions, hostSessionPoolSize, acquireHostSession, evictIdleSessions, clearHostSessionPool, dropHostSession, generateOnSession } from './chunk-
|
|
1
|
+
import { listHostSessions, hostSessionPoolSize, acquireHostSession, evictIdleSessions, clearHostSessionPool, dropHostSession, generateOnSession } from './chunk-3LOWJSAF.js';
|
|
2
2
|
import { vgdSocketPath, vgdPidPath } from './chunk-RBIRXQR6.js';
|
|
3
3
|
import { resolveOne } from './chunk-J7LKEB2R.js';
|
|
4
|
-
import { impactOf, queryGraph } from './chunk-
|
|
5
|
-
import { loadGraph } from './chunk-
|
|
4
|
+
import { impactOf, queryGraph } from './chunk-5VH3Y4QC.js';
|
|
5
|
+
import { loadGraph } from './chunk-DIU3MXB3.js';
|
|
6
6
|
import { repositoryIdFromRoot, globalGraphPathForRef, globalGraphPath } from './chunk-BWPBB45M.js';
|
|
7
7
|
import { activeGraphSlotKey, detectGitRef } from './chunk-BPF3YX2U.js';
|
|
8
8
|
import * as path from 'path';
|
|
@@ -885,5 +885,5 @@ var BranchGraphSession = class {
|
|
|
885
885
|
};
|
|
886
886
|
|
|
887
887
|
export { ActiveGraphCache, BranchGraphSession, DEFAULT_ACTIVE_GRAPH_IDLE_MS, VGD_PROTOCOL_VERSION, WorkspaceRegistry, parseRequest, startVgdServer };
|
|
888
|
-
//# sourceMappingURL=chunk-
|
|
889
|
-
//# sourceMappingURL=chunk-
|
|
888
|
+
//# sourceMappingURL=chunk-B2KLJPFY.js.map
|
|
889
|
+
//# sourceMappingURL=chunk-B2KLJPFY.js.map
|