@vibgrate/cli 2026.803.4 → 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 (97) hide show
  1. package/dist/agent-YDRDDKPE.js +24 -0
  2. package/dist/{agent-WYBWUBCC.js.map → agent-YDRDDKPE.js.map} +1 -1
  3. package/dist/{baseline-3HECX4Q6.js → baseline-IALIGR4A.js} +3 -3
  4. package/dist/{baseline-3HECX4Q6.js.map → baseline-IALIGR4A.js.map} +1 -1
  5. package/dist/{chunk-QUI3E3TQ.js → chunk-2U4SXS5U.js} +26 -3
  6. package/dist/chunk-2U4SXS5U.js.map +1 -0
  7. package/dist/{chunk-5TS7N7J2.js → chunk-4TPTVRVI.js} +5 -5
  8. package/dist/{chunk-5TS7N7J2.js.map → chunk-4TPTVRVI.js.map} +1 -1
  9. package/dist/{chunk-HBQC4XQJ.js → chunk-A4CGGQJ7.js} +5 -6
  10. package/dist/chunk-A4CGGQJ7.js.map +1 -0
  11. package/dist/chunk-B2Y45PCA.js +6 -0
  12. package/dist/{chunk-FZ5Y4KEI.js.map → chunk-B2Y45PCA.js.map} +1 -1
  13. package/dist/{chunk-2A7XCANX.js → chunk-B6IBSQHG.js} +218 -24
  14. package/dist/chunk-B6IBSQHG.js.map +1 -0
  15. package/dist/{chunk-JZGVUH57.js → chunk-CM6OYYBW.js} +4 -4
  16. package/dist/{chunk-JZGVUH57.js.map → chunk-CM6OYYBW.js.map} +1 -1
  17. package/dist/{chunk-23UPIFRU.js → chunk-D56WBMAM.js} +7 -8
  18. package/dist/chunk-D56WBMAM.js.map +1 -0
  19. package/dist/{chunk-66B4ZQA3.js → chunk-FJ2ARY3S.js} +6 -7
  20. package/dist/chunk-FJ2ARY3S.js.map +1 -0
  21. package/dist/{chunk-7TOIESUT.js → chunk-K5GPEWPI.js} +458 -6
  22. package/dist/chunk-K5GPEWPI.js.map +1 -0
  23. package/dist/{chunk-5WMFX7TY.js → chunk-KSFYHT5G.js} +4 -4
  24. package/dist/{chunk-5WMFX7TY.js.map → chunk-KSFYHT5G.js.map} +1 -1
  25. package/dist/{chunk-4ZMJKR74.js → chunk-L4CYXVW2.js} +4 -4
  26. package/dist/{chunk-4ZMJKR74.js.map → chunk-L4CYXVW2.js.map} +1 -1
  27. package/dist/{chunk-BRUMBQV7.js → chunk-L7GGEXZG.js} +4 -4
  28. package/dist/{chunk-BRUMBQV7.js.map → chunk-L7GGEXZG.js.map} +1 -1
  29. package/dist/{chunk-KFK7KCAH.js → chunk-NAZLPO63.js} +3 -3
  30. package/dist/{chunk-KFK7KCAH.js.map → chunk-NAZLPO63.js.map} +1 -1
  31. package/dist/{chunk-TVRM57CE.js → chunk-NGMVIAKI.js} +4 -4
  32. package/dist/{chunk-TVRM57CE.js.map → chunk-NGMVIAKI.js.map} +1 -1
  33. package/dist/{chunk-HVHCXM2E.js → chunk-P63H3DXY.js} +7 -8
  34. package/dist/chunk-P63H3DXY.js.map +1 -0
  35. package/dist/{chunk-7BU7CWXC.js → chunk-TASMCKLD.js} +8 -8
  36. package/dist/{chunk-7BU7CWXC.js.map → chunk-TASMCKLD.js.map} +1 -1
  37. package/dist/{chunk-UWVFLVZX.js → chunk-UHLFD7EO.js} +4 -4
  38. package/dist/{chunk-UWVFLVZX.js.map → chunk-UHLFD7EO.js.map} +1 -1
  39. package/dist/{chunk-OVDL76LB.js → chunk-UZO2T3J2.js} +3 -3
  40. package/dist/{chunk-OVDL76LB.js.map → chunk-UZO2T3J2.js.map} +1 -1
  41. package/dist/{chunk-FAA7RBIG.js → chunk-WGIX4S5A.js} +8 -9
  42. package/dist/chunk-WGIX4S5A.js.map +1 -0
  43. package/dist/{chunk-BUCNKYTW.js → chunk-XVZMDDU4.js} +5 -5
  44. package/dist/{chunk-BUCNKYTW.js.map → chunk-XVZMDDU4.js.map} +1 -1
  45. package/dist/{chunk-537JBQVB.js → chunk-ZZNNXZYB.js} +3 -4
  46. package/dist/chunk-ZZNNXZYB.js.map +1 -0
  47. package/dist/cli.js +101 -49
  48. package/dist/cli.js.map +1 -1
  49. package/dist/embed-worker-main.js +5 -2
  50. package/dist/embed-worker-main.js.map +1 -1
  51. package/dist/{ensure-map-DZ53QXRT.js → ensure-map-DNLGAQRQ.js} +12 -14
  52. package/dist/{ensure-map-DZ53QXRT.js.map → ensure-map-DNLGAQRQ.js.map} +1 -1
  53. package/dist/graph-backend-L7PIG7CS.js +13 -0
  54. package/dist/{graph-backend-3A2M22QN.js.map → graph-backend-L7PIG7CS.js.map} +1 -1
  55. package/dist/index.d.ts +25 -6
  56. package/dist/index.js +11 -13
  57. package/dist/index.js.map +1 -1
  58. package/dist/{interactive-DB7IC3BL.js → interactive-GQ3O7FKE.js} +22 -24
  59. package/dist/interactive-GQ3O7FKE.js.map +1 -0
  60. package/dist/load-VOSNNCOZ.js +9 -0
  61. package/dist/{load-6KVGUQMU.js.map → load-VOSNNCOZ.js.map} +1 -1
  62. package/dist/{run-outcome-YOYRC32U.js → run-outcome-I4T5GDQZ.js} +5 -7
  63. package/dist/run-outcome-I4T5GDQZ.js.map +1 -0
  64. package/dist/runtime-session-45HT7NZA.js +20 -0
  65. package/dist/{runtime-session-XEP7IPGP.js.map → runtime-session-45HT7NZA.js.map} +1 -1
  66. package/dist/session-QUONHFJN.js +15 -0
  67. package/dist/{session-5WKEACIF.js.map → session-QUONHFJN.js.map} +1 -1
  68. package/dist/{stream-json-3OJCPBWY.js → stream-json-WEWVI3DW.js} +11 -13
  69. package/dist/stream-json-WEWVI3DW.js.map +1 -0
  70. package/dist/{vg-mcp-bridge-PM3C4FQL.js → vg-mcp-bridge-NOG3D6TL.js} +8 -10
  71. package/dist/vg-mcp-bridge-NOG3D6TL.js.map +1 -0
  72. package/dist/{vgd-UTLMMPIZ.js → vgd-URRPZ7OD.js} +8 -10
  73. package/dist/{vgd-UTLMMPIZ.js.map → vgd-URRPZ7OD.js.map} +1 -1
  74. package/package.json +1 -1
  75. package/dist/agent-WYBWUBCC.js +0 -26
  76. package/dist/chunk-23UPIFRU.js.map +0 -1
  77. package/dist/chunk-2A7XCANX.js.map +0 -1
  78. package/dist/chunk-4LGDQBYK.js +0 -358
  79. package/dist/chunk-4LGDQBYK.js.map +0 -1
  80. package/dist/chunk-537JBQVB.js.map +0 -1
  81. package/dist/chunk-66B4ZQA3.js.map +0 -1
  82. package/dist/chunk-7TOIESUT.js.map +0 -1
  83. package/dist/chunk-FAA7RBIG.js.map +0 -1
  84. package/dist/chunk-FZ5Y4KEI.js +0 -6
  85. package/dist/chunk-HBQC4XQJ.js.map +0 -1
  86. package/dist/chunk-HVHCXM2E.js.map +0 -1
  87. package/dist/chunk-QUI3E3TQ.js.map +0 -1
  88. package/dist/chunk-RBMKBYGV.js +0 -102
  89. package/dist/chunk-RBMKBYGV.js.map +0 -1
  90. package/dist/graph-backend-3A2M22QN.js +0 -13
  91. package/dist/interactive-DB7IC3BL.js.map +0 -1
  92. package/dist/load-6KVGUQMU.js +0 -11
  93. package/dist/run-outcome-YOYRC32U.js.map +0 -1
  94. package/dist/runtime-session-XEP7IPGP.js +0 -22
  95. package/dist/session-5WKEACIF.js +0 -17
  96. package/dist/stream-json-3OJCPBWY.js.map +0 -1
  97. package/dist/vg-mcp-bridge-PM3C4FQL.js.map +0 -1
@@ -1,6 +1,4 @@
1
- import { VERSION } from './chunk-FZ5Y4KEI.js';
2
- import { WEAK_TERMS } from './chunk-4LGDQBYK.js';
3
- import { parseGraph, stableStringify, serializeGraph } from './chunk-RBMKBYGV.js';
1
+ import { VERSION } from './chunk-B2Y45PCA.js';
4
2
  import { globalGraphPathForRef, globalGraphPath, repositoryStoreDir } from './chunk-BWPBB45M.js';
5
3
  import { detectGitRef } from './chunk-BPF3YX2U.js';
6
4
  import * as fs3 from 'fs';
@@ -10,6 +8,45 @@ import * as os from 'os';
10
8
  import * as path2 from 'path';
11
9
  import { pathToFileURL } from 'url';
12
10
 
11
+ // src/engine/serialize.ts
12
+ function serializeGraph(graph, opts) {
13
+ const indent = opts?.compact ? 0 : 2;
14
+ return `${stableStringify(graph, indent)}
15
+ `;
16
+ }
17
+ function slimGraphForExport(graph) {
18
+ return {
19
+ ...graph,
20
+ areas: graph.areas.map((a) => ({
21
+ ...a,
22
+ members: []
23
+ // member id lists dominate XL exports; area id still on nodes
24
+ })),
25
+ grounding: void 0,
26
+ facts: graph.facts
27
+ // Keep summaries/unknowns — small and useful to agents.
28
+ };
29
+ }
30
+ function stableStringify(value, indent = 2) {
31
+ return JSON.stringify(sortKeys(value), null, indent);
32
+ }
33
+ function sortKeys(value) {
34
+ if (Array.isArray(value)) return value.map(sortKeys);
35
+ if (value && typeof value === "object") {
36
+ const input = value;
37
+ const out = {};
38
+ for (const key of Object.keys(input).sort()) {
39
+ const v = input[key];
40
+ if (v === void 0) continue;
41
+ out[key] = sortKeys(v);
42
+ }
43
+ return out;
44
+ }
45
+ return value;
46
+ }
47
+ function parseGraph(json) {
48
+ return JSON.parse(json);
49
+ }
13
50
  var MAGIC = Buffer.from("VGSNAP1\0", "latin1");
14
51
  var crc322 = zlib.crc32 ?? jsCrc32;
15
52
  var crcTable = null;
@@ -293,6 +330,363 @@ ${embedded}
293
330
  function esc(s) {
294
331
  return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
295
332
  }
333
+
334
+ // src/engine/concepts.ts
335
+ var WEAK_TERMS = /* @__PURE__ */ new Set([
336
+ "add",
337
+ "adds",
338
+ "added",
339
+ "adding",
340
+ "create",
341
+ "creates",
342
+ "created",
343
+ "creating",
344
+ "make",
345
+ "makes",
346
+ "making",
347
+ "made",
348
+ "new",
349
+ "newly",
350
+ "remove",
351
+ "removes",
352
+ "removed",
353
+ "removing",
354
+ "delete",
355
+ "deletes",
356
+ "deleted",
357
+ "deleting",
358
+ "update",
359
+ "updates",
360
+ "updated",
361
+ "updating",
362
+ "change",
363
+ "changes",
364
+ "changed",
365
+ "changing",
366
+ "set",
367
+ "sets",
368
+ "setting",
369
+ "setup",
370
+ "get",
371
+ "gets",
372
+ "getting",
373
+ "use",
374
+ "uses",
375
+ "used",
376
+ "using",
377
+ "want",
378
+ "wants",
379
+ "wanted",
380
+ "do",
381
+ "does",
382
+ "doing",
383
+ "done",
384
+ "support",
385
+ "supports",
386
+ "supported",
387
+ "supporting",
388
+ "enable",
389
+ "enables",
390
+ "enabled",
391
+ "enabling",
392
+ "disable",
393
+ "disables",
394
+ "disabled",
395
+ "disabling",
396
+ "allow",
397
+ "allows",
398
+ "allowed",
399
+ "implement",
400
+ "implements",
401
+ "implemented",
402
+ "implementing",
403
+ "build",
404
+ "builds",
405
+ "building",
406
+ "built",
407
+ "via",
408
+ "through",
409
+ "into",
410
+ "onto",
411
+ "way",
412
+ "ways",
413
+ "thing",
414
+ "things",
415
+ "stuff",
416
+ "feature",
417
+ "features",
418
+ "functionality",
419
+ "method",
420
+ "methods",
421
+ "option",
422
+ "options",
423
+ "ability",
424
+ "help",
425
+ "start",
426
+ "begin",
427
+ "work",
428
+ "works",
429
+ "working",
430
+ "also",
431
+ "currently",
432
+ "properly",
433
+ "correctly",
434
+ "please",
435
+ "happens",
436
+ "happen",
437
+ "something",
438
+ "somewhere",
439
+ "step",
440
+ "steps",
441
+ "flow",
442
+ "process",
443
+ "you",
444
+ "can"
445
+ ]);
446
+ var CONCEPTS = {
447
+ // ---- payments / billing ----
448
+ payment: ["stripe", "billing", "invoice", "checkout", "charge", "subscription", "refund", "payout", "card", "debit", "mandate"],
449
+ pay: ["payment", "stripe", "charge", "billing", "invoice"],
450
+ paid: ["payment", "invoice", "charge"],
451
+ billing: ["invoice", "payment", "subscription", "stripe", "charge", "renewal"],
452
+ checkout: ["stripe", "payment", "cart", "session"],
453
+ debit: ["mandate", "sepa", "bacs", "ach", "bank", "payment"],
454
+ mandate: ["sepa", "bacs", "debit"],
455
+ sepa: ["mandate", "debit", "iban", "bank"],
456
+ bacs: ["mandate", "debit", "bank"],
457
+ ach: ["mandate", "debit", "bank"],
458
+ stripe: ["payment", "billing", "checkout", "webhook", "charge", "card"],
459
+ refund: ["payment", "invoice", "stripe", "charge"],
460
+ invoice: ["billing", "payment", "refund", "subscription"],
461
+ subscription: ["billing", "renewal", "invoice", "plan", "recurring"],
462
+ recurring: ["subscription", "renewal", "mandate", "debit"],
463
+ renewal: ["subscription", "billing", "renew"],
464
+ card: ["payment", "charge", "stripe"],
465
+ credit: ["card", "payment", "charge"],
466
+ bank: ["debit", "mandate", "sepa", "iban", "account"],
467
+ charge: ["payment", "card", "stripe"],
468
+ webhook: ["event", "handler", "callback"],
469
+ price: ["payment", "billing", "plan"],
470
+ customer: ["billing", "account", "user"],
471
+ // ---- auth ----
472
+ auth: ["login", "session", "token", "oauth", "password", "credential"],
473
+ authentication: ["auth", "login", "session", "token", "password"],
474
+ authenticated: ["auth", "login", "session"],
475
+ login: ["auth", "session", "password", "signin", "oauth"],
476
+ signin: ["login", "auth", "session"],
477
+ signup: ["register", "onboard", "account"],
478
+ logout: ["session", "auth", "signout"],
479
+ password: ["auth", "login", "credential", "hash"],
480
+ session: ["auth", "login", "token"],
481
+ token: ["session", "auth", "jwt"],
482
+ oauth: ["auth", "login", "callback", "provider"],
483
+ google: ["oauth", "login", "auth"],
484
+ github: ["oauth", "login", "auth"],
485
+ sso: ["oauth", "auth", "saml", "login"],
486
+ credential: ["auth", "password", "token", "secret"],
487
+ // ---- dependencies / supply chain ----
488
+ dependency: ["package", "audit", "vulnerability", "advisory", "lockfile", "version"],
489
+ package: ["dependency", "audit", "vulnerability", "advisory", "lockfile"],
490
+ vulnerability: ["advisory", "cve", "osv", "audit", "vulnerable"],
491
+ vulnerable: ["vulnerability", "advisory", "audit", "cve"],
492
+ advisory: ["vulnerability", "cve", "osv", "audit"],
493
+ cve: ["vulnerability", "advisory", "osv"],
494
+ risk: ["vulnerability", "audit", "advisory"],
495
+ security: ["vulnerability", "audit", "advisory"],
496
+ audit: ["dependency", "vulnerability", "advisory"],
497
+ scan: ["audit", "vulnerability", "scanner"],
498
+ // ---- notifications / messaging ----
499
+ email: ["mail", "smtp", "sender", "template", "message"],
500
+ mail: ["email", "smtp", "sender"],
501
+ notification: ["notify", "email", "sms", "push", "alert"],
502
+ notify: ["notification", "email", "alert"],
503
+ sms: ["notification", "message", "twilio"],
504
+ // ---- e-commerce ----
505
+ cart: ["checkout", "order", "shop", "basket", "discount"],
506
+ basket: ["cart", "checkout", "order"],
507
+ order: ["cart", "shipment", "fulfillment", "shop", "checkout"],
508
+ ship: ["order", "fulfillment", "delivery", "shipment"],
509
+ shipment: ["order", "fulfillment", "delivery", "track"],
510
+ shipping: ["order", "fulfillment", "delivery", "shipment"],
511
+ shipped: ["order", "fulfillment", "shipment"],
512
+ inventory: ["stock", "product", "catalog", "restock"],
513
+ stock: ["inventory", "product", "restock"],
514
+ product: ["catalog", "inventory", "shop"],
515
+ discount: ["coupon", "promo", "cart", "price"],
516
+ coupon: ["discount", "promo", "code"],
517
+ // ---- chat / social ----
518
+ chat: ["message", "room", "conversation", "presence"],
519
+ message: ["chat", "sms", "notification", "thread"],
520
+ conversation: ["chat", "message", "thread"],
521
+ presence: ["online", "typing", "status"],
522
+ online: ["presence", "status"],
523
+ typing: ["presence", "indicator", "broadcast"],
524
+ // ---- media / streaming ----
525
+ video: ["media", "transcode", "playback", "stream", "thumbnail"],
526
+ stream: ["video", "playback", "manifest", "media"],
527
+ streaming: ["video", "playback", "manifest", "media"],
528
+ playback: ["video", "stream", "media", "watch"],
529
+ transcode: ["video", "media", "encode"],
530
+ thumbnail: ["video", "image", "media"],
531
+ media: ["video", "stream", "playback", "asset"],
532
+ // ---- analytics ----
533
+ analytics: ["event", "track", "metric", "funnel", "report"],
534
+ event: ["track", "analytics", "webhook"],
535
+ track: ["event", "analytics"],
536
+ funnel: ["conversion", "analytics", "event"],
537
+ conversion: ["funnel", "analytics"],
538
+ report: ["metrics", "export", "analytics"],
539
+ // ---- content / CMS ----
540
+ article: ["publish", "content", "post", "cms"],
541
+ publish: ["article", "release", "post", "content"],
542
+ post: ["article", "publish", "message"],
543
+ blog: ["article", "publish", "post", "cms"],
544
+ content: ["cms", "article", "markdown"],
545
+ markdown: ["render", "article", "content"],
546
+ cms: ["article", "content", "publish"],
547
+ // ---- CI / deployment ----
548
+ deploy: ["release", "rollback", "pipeline", "deployment"],
549
+ deployment: ["deploy", "release", "rollback", "pipeline"],
550
+ release: ["deploy", "version", "rollback"],
551
+ rollback: ["deploy", "release", "deployment"],
552
+ pipeline: ["stage", "deploy", "runner", "ci"],
553
+ canary: ["deploy", "rollout", "release"],
554
+ // ---- mobile ----
555
+ push: ["notification", "device", "token", "mobile"],
556
+ device: ["push", "token", "mobile", "register"],
557
+ deeplink: ["link", "route", "universal"],
558
+ mobile: ["push", "device", "deeplink", "app"],
559
+ ios: ["mobile", "universal", "link", "app"],
560
+ android: ["mobile", "push", "device", "app"],
561
+ // ---- batch / ETL / mainframe ----
562
+ batch: ["settlement", "job", "etl", "reconcile"],
563
+ settlement: ["batch", "reconcile", "ledger", "clearing"],
564
+ reconcile: ["ledger", "settlement", "batch"],
565
+ ledger: ["settlement", "reconcile", "balance", "journal"],
566
+ mainframe: ["batch", "settlement", "ebcdic", "cobol", "fixed"],
567
+ ebcdic: ["mainframe", "record", "convert", "legacy"],
568
+ cobol: ["mainframe", "batch", "ebcdic"],
569
+ etl: ["batch", "pipeline", "extract", "load", "transform"],
570
+ nightly: ["batch", "cron", "schedule", "job"],
571
+ // ---- geo / maps ----
572
+ geocode: ["address", "location", "map", "geo"],
573
+ address: ["geocode", "location"],
574
+ map: ["geo", "route", "location"],
575
+ route: ["distance", "path", "planner", "geo"],
576
+ distance: ["route", "haversine", "geo"],
577
+ location: ["geo", "geocode", "map"],
578
+ arrival: ["route", "eta", "estimate"],
579
+ // ---- i18n ----
580
+ translation: ["locale", "i18n", "language", "translate"],
581
+ translate: ["translation", "locale", "language"],
582
+ locale: ["translation", "i18n", "language", "format"],
583
+ i18n: ["translation", "locale", "language"],
584
+ language: ["locale", "translation", "i18n"],
585
+ localized: ["locale", "translation", "format"],
586
+ // ---- observability ----
587
+ metric: ["counter", "prometheus", "telemetry", "export"],
588
+ prometheus: ["metric", "exporter", "monitoring"],
589
+ trace: ["span", "telemetry", "observability"],
590
+ span: ["trace", "telemetry"],
591
+ monitoring: ["metric", "trace", "alert", "observability"],
592
+ telemetry: ["metric", "trace", "span"],
593
+ counter: ["metric", "increment"],
594
+ // ---- feature flags / experimentation ----
595
+ flag: ["feature", "rollout", "toggle", "experiment"],
596
+ rollout: ["flag", "percentage", "release", "experiment"],
597
+ toggle: ["flag", "feature", "switch"],
598
+ experiment: ["variant", "assign", "flag", "exposure"],
599
+ variant: ["experiment", "assign"],
600
+ // ---- generic infrastructure ----
601
+ database: ["schema", "migration", "sql", "query", "orm"],
602
+ db: ["database", "schema", "migration", "sql"],
603
+ migration: ["database", "schema", "migrate", "sql"],
604
+ cache: ["redis", "ttl", "store"],
605
+ queue: ["job", "worker", "task", "batch"],
606
+ job: ["queue", "worker", "cron"],
607
+ upload: ["file", "storage", "blob", "asset"],
608
+ storage: ["file", "upload", "bucket", "blob"],
609
+ permission: ["role", "rbac", "acl", "access", "grant"],
610
+ role: ["permission", "rbac", "access"],
611
+ error: ["exception", "failure", "handler"],
612
+ config: ["settings", "env", "configuration"]
613
+ };
614
+ var BIGRAM_CONCEPTS = {
615
+ "direct debit": ["debit", "mandate", "sepa", "bacs", "bank"],
616
+ "direct debits": ["debit", "mandate", "sepa", "bacs", "bank"],
617
+ "sign in": ["login", "signin", "auth", "session"],
618
+ "signs in": ["login", "signin", "auth", "session"],
619
+ "log in": ["login", "auth", "session"],
620
+ "logs in": ["login", "auth", "session"],
621
+ "logged in": ["login", "auth", "session"],
622
+ "sign up": ["signup", "register", "account"],
623
+ "credit card": ["card", "payment", "charge", "stripe"],
624
+ "credit cards": ["card", "payment", "charge", "stripe"],
625
+ "bank transfer": ["bank", "payment", "sepa", "transfer"],
626
+ "rate limit": ["ratelimit", "throttle", "quota"],
627
+ "two factor": ["totp", "mfa", "otp", "auth"],
628
+ "payment method": ["payment", "stripe", "card", "debit"],
629
+ "payment methods": ["payment", "stripe", "card", "debit"],
630
+ "push notification": ["push", "device", "token", "notification"],
631
+ "push notifications": ["push", "device", "token", "notification"],
632
+ "deep link": ["deeplink", "link", "route"],
633
+ "deep links": ["deeplink", "link", "route"],
634
+ "universal link": ["deeplink", "link", "universal"],
635
+ "universal links": ["deeplink", "link", "universal"],
636
+ "feature flag": ["flag", "rollout", "toggle", "experiment"],
637
+ "feature flags": ["flag", "rollout", "toggle", "experiment"],
638
+ "shopping cart": ["cart", "checkout", "order"],
639
+ "roll back": ["rollback", "deploy", "release"],
640
+ "rolled back": ["rollback", "deploy", "release"],
641
+ "ab test": ["experiment", "variant"],
642
+ "sign out": ["logout", "session", "auth"],
643
+ "fixed width": ["record", "export", "mainframe", "batch"]
644
+ };
645
+ function lexiconKey(token) {
646
+ if (token in CONCEPTS) return token;
647
+ if (token.endsWith("ies")) {
648
+ const singular = token.slice(0, -3) + "y";
649
+ if (singular in CONCEPTS) return singular;
650
+ }
651
+ if (token.endsWith("s")) {
652
+ const singular = token.slice(0, -1);
653
+ if (singular in CONCEPTS) return singular;
654
+ }
655
+ return null;
656
+ }
657
+ function expandConcepts(orderedTokens) {
658
+ const present = new Set(orderedTokens);
659
+ const out = [];
660
+ const emitted = /* @__PURE__ */ new Set();
661
+ const emit = (term, from) => {
662
+ if (present.has(term) || emitted.has(term)) return;
663
+ emitted.add(term);
664
+ out.push({ term, from });
665
+ };
666
+ for (let i = 0; i + 1 < orderedTokens.length; i++) {
667
+ const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;
668
+ const terms = BIGRAM_CONCEPTS[bigram];
669
+ if (terms) for (const t of terms) emit(t, bigram);
670
+ }
671
+ for (const token of orderedTokens) {
672
+ const key = lexiconKey(token);
673
+ if (key) for (const t of CONCEPTS[key]) emit(t, token);
674
+ }
675
+ return out;
676
+ }
677
+ function bigramConsumedTokens(orderedTokens) {
678
+ const consumed = /* @__PURE__ */ new Set();
679
+ for (let i = 0; i + 1 < orderedTokens.length; i++) {
680
+ const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;
681
+ if (!BIGRAM_CONCEPTS[bigram]) continue;
682
+ for (const tok of [orderedTokens[i], orderedTokens[i + 1]]) {
683
+ if (!lexiconKey(tok)) consumed.add(tok);
684
+ }
685
+ }
686
+ return consumed;
687
+ }
688
+
689
+ // src/engine/relevance-provider.ts
296
690
  var MAX_PROVIDER_EXPANSIONS = 24;
297
691
  function disabled() {
298
692
  const v = process.env.VIBGRATE_NO_KERNEL;
@@ -411,6 +805,8 @@ var DEFAULT_GITIGNORE = [
411
805
  "graph.json",
412
806
  "graph.snap",
413
807
  "graph.tags.snap",
808
+ // Binary semantic index next to the map (never model-named; never under cache/).
809
+ "embeddings",
414
810
  "graph.html",
415
811
  "GRAPH_REPORT.md",
416
812
  "facts.jsonl",
@@ -580,7 +976,63 @@ async function loadTopicTags(graph, root, graphPath) {
580
976
  writeSidecar(file, { provider: providerVersion, corpusHash }, record);
581
977
  return tags;
582
978
  }
979
+ var CACHE_VERSION = "vg-parse-cache/4";
980
+ function cacheDir(root) {
981
+ return path2.join(root, ".vibgrate", "cache");
982
+ }
983
+ function cachePath(root) {
984
+ return path2.join(cacheDir(root), "parse-cache.json");
985
+ }
986
+ function loadCache(root, opts) {
987
+ const file = cachePath(root);
988
+ let data = {
989
+ version: CACHE_VERSION,
990
+ toolVersion: opts.toolVersion,
991
+ grammars: opts.grammars,
992
+ entries: {}
993
+ };
994
+ if (!opts.disabled && fs3.existsSync(file)) {
995
+ try {
996
+ const loaded = JSON.parse(fs3.readFileSync(file, "utf8"));
997
+ if ((loaded.version === CACHE_VERSION || loaded.version === "vg-parse-cache/3") && loaded.toolVersion === opts.toolVersion && loaded.grammars === opts.grammars && loaded.entries) {
998
+ data = { ...loaded, version: CACHE_VERSION };
999
+ }
1000
+ } catch {
1001
+ }
1002
+ }
1003
+ return {
1004
+ get(rel, hash) {
1005
+ const entry = data.entries[rel];
1006
+ return entry && entry.hash === hash ? entry.parse : void 0;
1007
+ },
1008
+ getByStat(rel, mtimeMs, size) {
1009
+ const entry = data.entries[rel];
1010
+ if (!entry) return void 0;
1011
+ if (entry.mtimeMs === mtimeMs && entry.size === size && entry.parse) {
1012
+ return { parse: entry.parse, hash: entry.hash };
1013
+ }
1014
+ return void 0;
1015
+ },
1016
+ set(rel, parse, stat) {
1017
+ data.entries[rel] = {
1018
+ hash: parse.hash,
1019
+ parse,
1020
+ mtimeMs: stat?.mtimeMs,
1021
+ size: stat?.size
1022
+ };
1023
+ },
1024
+ prune(currentRels) {
1025
+ for (const rel of Object.keys(data.entries)) {
1026
+ if (!currentRels.has(rel)) delete data.entries[rel];
1027
+ }
1028
+ },
1029
+ save() {
1030
+ fs3.mkdirSync(cacheDir(root), { recursive: true });
1031
+ fs3.writeFileSync(file, stableStringify(data, 0));
1032
+ }
1033
+ };
1034
+ }
583
1035
 
584
- export { analyzeQuestion, defaultGraphPath, ensureVibgrateGitignore, legacyGraphPath, loadGraphFileWithSnapshot, loadRelevanceProvider, loadTopicTags, mapFileExists, mapFileStat, preferInRepoGraph, relevanceModuleDir, renderHtml, renderReport, resetRelevanceProviderCache, resolveGraphPath, vibgrateDir, writeArtifacts };
585
- //# sourceMappingURL=chunk-7TOIESUT.js.map
586
- //# sourceMappingURL=chunk-7TOIESUT.js.map
1036
+ export { WEAK_TERMS, analyzeQuestion, bigramConsumedTokens, cacheDir, defaultGraphPath, ensureVibgrateGitignore, expandConcepts, legacyGraphPath, loadCache, loadGraphFileWithSnapshot, loadRelevanceProvider, loadTopicTags, mapFileExists, mapFileStat, parseGraph, preferInRepoGraph, relevanceModuleDir, renderHtml, renderReport, resetRelevanceProviderCache, resolveGraphPath, serializeGraph, slimGraphForExport, stableStringify, vibgrateDir, writeArtifacts };
1037
+ //# sourceMappingURL=chunk-K5GPEWPI.js.map
1038
+ //# sourceMappingURL=chunk-K5GPEWPI.js.map