@vibgrate/cli 2026.819.3 → 2026.824.3

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 (103) hide show
  1. package/dist/{agent-AFMDB4GM.js → agent-6SJVWFPV.js} +12 -12
  2. package/dist/{agent-AFMDB4GM.js.map → agent-6SJVWFPV.js.map} +1 -1
  3. package/dist/{approvals-F2DJGPU7.js → approvals-5UBLBNJF.js} +5 -5
  4. package/dist/{approvals-F2DJGPU7.js.map → approvals-5UBLBNJF.js.map} +1 -1
  5. package/dist/{attach-XTX2Q3AD.js → attach-PSGCCJMA.js} +3 -3
  6. package/dist/{attach-XTX2Q3AD.js.map → attach-PSGCCJMA.js.map} +1 -1
  7. package/dist/{baseline-KTE2C3LW.js → baseline-HPXACNFU.js} +3 -3
  8. package/dist/{baseline-KTE2C3LW.js.map → baseline-HPXACNFU.js.map} +1 -1
  9. package/dist/{chunk-PQISIPYP.js → chunk-2IY24TTR.js} +3 -3
  10. package/dist/{chunk-PQISIPYP.js.map → chunk-2IY24TTR.js.map} +1 -1
  11. package/dist/{chunk-DMI4BMUL.js → chunk-3PNAQUZM.js} +3 -3
  12. package/dist/{chunk-DMI4BMUL.js.map → chunk-3PNAQUZM.js.map} +1 -1
  13. package/dist/{chunk-HVJHFTIV.js → chunk-4PDWV4AE.js} +10 -12
  14. package/dist/chunk-4PDWV4AE.js.map +1 -0
  15. package/dist/{chunk-SOAEPTSW.js → chunk-5QO2GFAE.js} +27 -23
  16. package/dist/chunk-5QO2GFAE.js.map +1 -0
  17. package/dist/chunk-AGOKTI77.js +6 -0
  18. package/dist/{chunk-MQJY4EQV.js.map → chunk-AGOKTI77.js.map} +1 -1
  19. package/dist/{chunk-UP2BR6TV.js → chunk-B5GOCQFB.js} +8 -8
  20. package/dist/{chunk-UP2BR6TV.js.map → chunk-B5GOCQFB.js.map} +1 -1
  21. package/dist/{chunk-5R4HYDTC.js → chunk-CJ2R3LVX.js} +4 -4
  22. package/dist/{chunk-5R4HYDTC.js.map → chunk-CJ2R3LVX.js.map} +1 -1
  23. package/dist/{chunk-C5AOLTQS.js → chunk-III7S75O.js} +53 -463
  24. package/dist/chunk-III7S75O.js.map +1 -0
  25. package/dist/{chunk-3SOJZ3VV.js → chunk-IKB5U3AH.js} +3 -3
  26. package/dist/{chunk-3SOJZ3VV.js.map → chunk-IKB5U3AH.js.map} +1 -1
  27. package/dist/{chunk-QOU2Q5L4.js → chunk-JL66EPZ4.js} +221 -10
  28. package/dist/chunk-JL66EPZ4.js.map +1 -0
  29. package/dist/{chunk-5RMME7PT.js → chunk-KBLKNR3V.js} +3 -3
  30. package/dist/{chunk-5RMME7PT.js.map → chunk-KBLKNR3V.js.map} +1 -1
  31. package/dist/{chunk-XAS45W3G.js → chunk-KRE7SXSA.js} +11 -12
  32. package/dist/chunk-KRE7SXSA.js.map +1 -0
  33. package/dist/{chunk-XZDI2N7M.js → chunk-LA4CETXN.js} +3 -3
  34. package/dist/{chunk-XZDI2N7M.js.map → chunk-LA4CETXN.js.map} +1 -1
  35. package/dist/{chunk-UEXDSWKN.js → chunk-LMHKIQA5.js} +3 -3
  36. package/dist/{chunk-UEXDSWKN.js.map → chunk-LMHKIQA5.js.map} +1 -1
  37. package/dist/{chunk-WI66PODG.js → chunk-M5QSBXA6.js} +17 -4
  38. package/dist/chunk-M5QSBXA6.js.map +1 -0
  39. package/dist/{chunk-EXFA7QFC.js → chunk-QP3P4V4I.js} +10 -8
  40. package/dist/chunk-QP3P4V4I.js.map +1 -0
  41. package/dist/{chunk-CEJIX3O7.js → chunk-RAEHWCN6.js} +6 -6
  42. package/dist/{chunk-CEJIX3O7.js.map → chunk-RAEHWCN6.js.map} +1 -1
  43. package/dist/{chunk-ARGYMFST.js → chunk-SGIFJIII.js} +3 -3
  44. package/dist/{chunk-ARGYMFST.js.map → chunk-SGIFJIII.js.map} +1 -1
  45. package/dist/{chunk-UAPA5AHX.js → chunk-TWWVTKA7.js} +35 -14
  46. package/dist/chunk-TWWVTKA7.js.map +1 -0
  47. package/dist/chunk-USW5WHUG.js +605 -0
  48. package/dist/chunk-USW5WHUG.js.map +1 -0
  49. package/dist/{chunk-3XMTRK24.js → chunk-UUNEUEPQ.js} +6 -6
  50. package/dist/{chunk-3XMTRK24.js.map → chunk-UUNEUEPQ.js.map} +1 -1
  51. package/dist/{chunk-HRYF4PWE.js → chunk-WATYIYWP.js} +3 -3
  52. package/dist/{chunk-HRYF4PWE.js.map → chunk-WATYIYWP.js.map} +1 -1
  53. package/dist/{chunk-TD4JAEMH.js → chunk-XHIWQGRE.js} +5 -5
  54. package/dist/{chunk-TD4JAEMH.js.map → chunk-XHIWQGRE.js.map} +1 -1
  55. package/dist/{chunk-HB3SONYP.js → chunk-YJ23GGAJ.js} +3 -3
  56. package/dist/{chunk-HB3SONYP.js.map → chunk-YJ23GGAJ.js.map} +1 -1
  57. package/dist/cli.js +377 -542
  58. package/dist/cli.js.map +1 -1
  59. package/dist/{daemon-VMQKIIYP.js → daemon-AEL5N4SJ.js} +9 -9
  60. package/dist/{daemon-VMQKIIYP.js.map → daemon-AEL5N4SJ.js.map} +1 -1
  61. package/dist/embed-worker-main.js +3 -3
  62. package/dist/{ensure-map-YIUJWMBK.js → ensure-map-YL5NR6UH.js} +14 -14
  63. package/dist/{ensure-map-YIUJWMBK.js.map → ensure-map-YL5NR6UH.js.map} +1 -1
  64. package/dist/{graph-backend-FDZUY4TR.js → graph-backend-LEPXFPXQ.js} +7 -7
  65. package/dist/{graph-backend-FDZUY4TR.js.map → graph-backend-LEPXFPXQ.js.map} +1 -1
  66. package/dist/index.d.ts +72 -130
  67. package/dist/index.js +14 -14
  68. package/dist/{interactive-CS4PGZPK.js → interactive-YJ37ZWTA.js} +26 -25
  69. package/dist/interactive-YJ37ZWTA.js.map +1 -0
  70. package/dist/load-LT6R73IZ.js +11 -0
  71. package/dist/{load-4EY64JJO.js.map → load-LT6R73IZ.js.map} +1 -1
  72. package/dist/parse-worker.js +3 -2
  73. package/dist/parse-worker.js.map +1 -1
  74. package/dist/{run-outcome-T7VDBNWB.js → run-outcome-YQBPYNEY.js} +5 -5
  75. package/dist/{run-outcome-T7VDBNWB.js.map → run-outcome-YQBPYNEY.js.map} +1 -1
  76. package/dist/{runtime-session-WZLVADPQ.js → runtime-session-JSH5UL7Z.js} +9 -9
  77. package/dist/{runtime-session-WZLVADPQ.js.map → runtime-session-JSH5UL7Z.js.map} +1 -1
  78. package/dist/{session-VPP2VGUN.js → session-3FLVZRMM.js} +8 -8
  79. package/dist/{session-VPP2VGUN.js.map → session-3FLVZRMM.js.map} +1 -1
  80. package/dist/{stream-json-XXCFN4MF.js → stream-json-VJ2O52CR.js} +12 -12
  81. package/dist/{stream-json-XXCFN4MF.js.map → stream-json-VJ2O52CR.js.map} +1 -1
  82. package/dist/version-VUTM46C5.js +4 -0
  83. package/dist/{version-2UBJ7N2I.js.map → version-VUTM46C5.js.map} +1 -1
  84. package/dist/{vg-mcp-bridge-H6GXYNKV.js → vg-mcp-bridge-UUMEOJSO.js} +8 -8
  85. package/dist/{vg-mcp-bridge-H6GXYNKV.js.map → vg-mcp-bridge-UUMEOJSO.js.map} +1 -1
  86. package/dist/{vgd-SBZO4ONQ.js → vgd-XFT574U6.js} +8 -8
  87. package/dist/vgd-XFT574U6.js.map +1 -0
  88. package/package.json +2 -1
  89. package/dist/chunk-C5AOLTQS.js.map +0 -1
  90. package/dist/chunk-EXFA7QFC.js.map +0 -1
  91. package/dist/chunk-HVJHFTIV.js.map +0 -1
  92. package/dist/chunk-MQJY4EQV.js +0 -6
  93. package/dist/chunk-QOU2Q5L4.js.map +0 -1
  94. package/dist/chunk-SOAEPTSW.js.map +0 -1
  95. package/dist/chunk-UAPA5AHX.js.map +0 -1
  96. package/dist/chunk-VEQA2FSM.js +0 -699
  97. package/dist/chunk-VEQA2FSM.js.map +0 -1
  98. package/dist/chunk-WI66PODG.js.map +0 -1
  99. package/dist/chunk-XAS45W3G.js.map +0 -1
  100. package/dist/interactive-CS4PGZPK.js.map +0 -1
  101. package/dist/load-4EY64JJO.js +0 -11
  102. package/dist/version-2UBJ7N2I.js +0 -4
  103. package/dist/vgd-SBZO4ONQ.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { parseGraph, stableStringify, serializeGraph } from './chunk-O3LABX6I.js';
2
- import { VERSION } from './chunk-MQJY4EQV.js';
2
+ import { VERSION } from './chunk-AGOKTI77.js';
3
3
  import { globalGraphPathForRef, globalGraphPath, repositoryStoreDir } from './chunk-XP6UUCZZ.js';
4
4
  import { detectGitRef } from './chunk-XQNKCA2J.js';
5
5
  import * as fs3 from 'fs';
@@ -292,375 +292,6 @@ ${embedded}
292
292
  function esc(s) {
293
293
  return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
294
294
  }
295
-
296
- // src/engine/concepts.ts
297
- var WEAK_TERMS = /* @__PURE__ */ new Set([
298
- "add",
299
- "adds",
300
- "added",
301
- "adding",
302
- "create",
303
- "creates",
304
- "created",
305
- "creating",
306
- "make",
307
- "makes",
308
- "making",
309
- "made",
310
- "new",
311
- "newly",
312
- "remove",
313
- "removes",
314
- "removed",
315
- "removing",
316
- "delete",
317
- "deletes",
318
- "deleted",
319
- "deleting",
320
- "update",
321
- "updates",
322
- "updated",
323
- "updating",
324
- "change",
325
- "changes",
326
- "changed",
327
- "changing",
328
- "set",
329
- "sets",
330
- "setting",
331
- "setup",
332
- "get",
333
- "gets",
334
- "getting",
335
- "use",
336
- "uses",
337
- "used",
338
- "using",
339
- "want",
340
- "wants",
341
- "wanted",
342
- "do",
343
- "does",
344
- "doing",
345
- "done",
346
- "support",
347
- "supports",
348
- "supported",
349
- "supporting",
350
- "enable",
351
- "enables",
352
- "enabled",
353
- "enabling",
354
- "disable",
355
- "disables",
356
- "disabled",
357
- "disabling",
358
- "allow",
359
- "allows",
360
- "allowed",
361
- "implement",
362
- "implements",
363
- "implemented",
364
- "implementing",
365
- "build",
366
- "builds",
367
- "building",
368
- "built",
369
- "via",
370
- "through",
371
- "into",
372
- "onto",
373
- "way",
374
- "ways",
375
- "thing",
376
- "things",
377
- "stuff",
378
- "feature",
379
- "features",
380
- "functionality",
381
- "method",
382
- "methods",
383
- "option",
384
- "options",
385
- "ability",
386
- "help",
387
- "start",
388
- "begin",
389
- "work",
390
- "works",
391
- "working",
392
- "also",
393
- "currently",
394
- "properly",
395
- "correctly",
396
- "please",
397
- "happens",
398
- "happen",
399
- "something",
400
- "somewhere",
401
- "step",
402
- "steps",
403
- "flow",
404
- "process",
405
- "you",
406
- "can"
407
- ]);
408
- var CONCEPTS = {
409
- // ---- payments / billing ----
410
- payment: ["stripe", "billing", "invoice", "checkout", "charge", "subscription", "refund", "payout", "card", "debit", "mandate"],
411
- pay: ["payment", "stripe", "charge", "billing", "invoice"],
412
- paid: ["payment", "invoice", "charge"],
413
- billing: ["invoice", "payment", "subscription", "stripe", "charge", "renewal"],
414
- checkout: ["stripe", "payment", "cart", "session"],
415
- debit: ["mandate", "sepa", "bacs", "ach", "bank", "payment"],
416
- mandate: ["sepa", "bacs", "debit"],
417
- sepa: ["mandate", "debit", "iban", "bank"],
418
- bacs: ["mandate", "debit", "bank"],
419
- ach: ["mandate", "debit", "bank"],
420
- stripe: ["payment", "billing", "checkout", "webhook", "charge", "card"],
421
- refund: ["payment", "invoice", "stripe", "charge"],
422
- invoice: ["billing", "payment", "refund", "subscription"],
423
- subscription: ["billing", "renewal", "invoice", "plan", "recurring"],
424
- recurring: ["subscription", "renewal", "mandate", "debit"],
425
- renewal: ["subscription", "billing", "renew"],
426
- card: ["payment", "charge", "stripe"],
427
- credit: ["card", "payment", "charge"],
428
- bank: ["debit", "mandate", "sepa", "iban", "account"],
429
- charge: ["payment", "card", "stripe"],
430
- webhook: ["event", "handler", "callback"],
431
- price: ["payment", "billing", "plan"],
432
- customer: ["billing", "account", "user"],
433
- // ---- auth ----
434
- auth: ["login", "session", "token", "oauth", "password", "credential"],
435
- authentication: ["auth", "login", "session", "token", "password"],
436
- authenticated: ["auth", "login", "session"],
437
- login: ["auth", "session", "password", "signin", "oauth"],
438
- signin: ["login", "auth", "session"],
439
- signup: ["register", "onboard", "account"],
440
- logout: ["session", "auth", "signout"],
441
- password: ["auth", "login", "credential", "hash"],
442
- session: ["auth", "login", "token"],
443
- token: ["session", "auth", "jwt"],
444
- oauth: ["auth", "login", "callback", "provider"],
445
- google: ["oauth", "login", "auth"],
446
- github: ["oauth", "login", "auth"],
447
- sso: ["oauth", "auth", "saml", "login"],
448
- credential: ["auth", "password", "token", "secret"],
449
- // ---- dependencies / supply chain ----
450
- dependency: ["package", "audit", "vulnerability", "advisory", "lockfile", "version"],
451
- package: ["dependency", "audit", "vulnerability", "advisory", "lockfile"],
452
- vulnerability: ["advisory", "cve", "osv", "audit", "vulnerable"],
453
- vulnerable: ["vulnerability", "advisory", "audit", "cve"],
454
- advisory: ["vulnerability", "cve", "osv", "audit"],
455
- cve: ["vulnerability", "advisory", "osv"],
456
- risk: ["vulnerability", "audit", "advisory"],
457
- security: ["vulnerability", "audit", "advisory"],
458
- audit: ["dependency", "vulnerability", "advisory"],
459
- scan: ["audit", "vulnerability", "scanner"],
460
- // ---- notifications / messaging ----
461
- email: ["mail", "smtp", "sender", "template", "message"],
462
- mail: ["email", "smtp", "sender"],
463
- notification: ["notify", "email", "sms", "push", "alert"],
464
- notify: ["notification", "email", "alert"],
465
- sms: ["notification", "message", "twilio"],
466
- // ---- e-commerce ----
467
- cart: ["checkout", "order", "shop", "basket", "discount"],
468
- basket: ["cart", "checkout", "order"],
469
- order: ["cart", "shipment", "fulfillment", "shop", "checkout"],
470
- ship: ["order", "fulfillment", "delivery", "shipment"],
471
- shipment: ["order", "fulfillment", "delivery", "track"],
472
- shipping: ["order", "fulfillment", "delivery", "shipment"],
473
- shipped: ["order", "fulfillment", "shipment"],
474
- inventory: ["stock", "product", "catalog", "restock"],
475
- stock: ["inventory", "product", "restock"],
476
- product: ["catalog", "inventory", "shop"],
477
- discount: ["coupon", "promo", "cart", "price"],
478
- coupon: ["discount", "promo", "code"],
479
- // ---- chat / social ----
480
- chat: ["message", "room", "conversation", "presence"],
481
- message: ["chat", "sms", "notification", "thread"],
482
- conversation: ["chat", "message", "thread"],
483
- presence: ["online", "typing", "status"],
484
- online: ["presence", "status"],
485
- typing: ["presence", "indicator", "broadcast"],
486
- // ---- media / streaming ----
487
- video: ["media", "transcode", "playback", "stream", "thumbnail"],
488
- stream: ["video", "playback", "manifest", "media"],
489
- streaming: ["video", "playback", "manifest", "media"],
490
- playback: ["video", "stream", "media", "watch"],
491
- transcode: ["video", "media", "encode"],
492
- thumbnail: ["video", "image", "media"],
493
- media: ["video", "stream", "playback", "asset"],
494
- // ---- analytics ----
495
- analytics: ["event", "track", "metric", "funnel", "report"],
496
- event: ["track", "analytics", "webhook"],
497
- track: ["event", "analytics"],
498
- funnel: ["conversion", "analytics", "event"],
499
- conversion: ["funnel", "analytics"],
500
- report: ["metrics", "export", "analytics"],
501
- // ---- content / CMS ----
502
- article: ["publish", "content", "post", "cms"],
503
- publish: ["article", "release", "post", "content"],
504
- post: ["article", "publish", "message"],
505
- blog: ["article", "publish", "post", "cms"],
506
- content: ["cms", "article", "markdown"],
507
- markdown: ["render", "article", "content"],
508
- cms: ["article", "content", "publish"],
509
- // ---- CI / deployment ----
510
- deploy: ["release", "rollback", "pipeline", "deployment"],
511
- deployment: ["deploy", "release", "rollback", "pipeline"],
512
- release: ["deploy", "version", "rollback"],
513
- rollback: ["deploy", "release", "deployment"],
514
- pipeline: ["stage", "deploy", "runner", "ci"],
515
- canary: ["deploy", "rollout", "release"],
516
- // ---- mobile ----
517
- push: ["notification", "device", "token", "mobile"],
518
- device: ["push", "token", "mobile", "register"],
519
- deeplink: ["link", "route", "universal"],
520
- mobile: ["push", "device", "deeplink", "app"],
521
- ios: ["mobile", "universal", "link", "app"],
522
- android: ["mobile", "push", "device", "app"],
523
- // ---- batch / ETL / mainframe ----
524
- batch: ["settlement", "job", "etl", "reconcile"],
525
- settlement: ["batch", "reconcile", "ledger", "clearing"],
526
- reconcile: ["ledger", "settlement", "batch"],
527
- ledger: ["settlement", "reconcile", "balance", "journal"],
528
- mainframe: ["batch", "settlement", "ebcdic", "cobol", "fixed"],
529
- ebcdic: ["mainframe", "record", "convert", "legacy"],
530
- cobol: ["mainframe", "batch", "ebcdic"],
531
- etl: ["batch", "pipeline", "extract", "load", "transform"],
532
- nightly: ["batch", "cron", "schedule", "job"],
533
- // ---- geo / maps ----
534
- geocode: ["address", "location", "map", "geo"],
535
- address: ["geocode", "location"],
536
- map: ["geo", "route", "location"],
537
- route: ["distance", "path", "planner", "geo"],
538
- distance: ["route", "haversine", "geo"],
539
- location: ["geo", "geocode", "map"],
540
- arrival: ["route", "eta", "estimate"],
541
- // ---- i18n ----
542
- translation: ["locale", "i18n", "language", "translate"],
543
- translate: ["translation", "locale", "language"],
544
- locale: ["translation", "i18n", "language", "format"],
545
- i18n: ["translation", "locale", "language"],
546
- language: ["locale", "translation", "i18n"],
547
- localized: ["locale", "translation", "format"],
548
- // ---- observability ----
549
- metric: ["counter", "prometheus", "telemetry", "export"],
550
- prometheus: ["metric", "exporter", "monitoring"],
551
- trace: ["span", "telemetry", "observability"],
552
- span: ["trace", "telemetry"],
553
- monitoring: ["metric", "trace", "alert", "observability"],
554
- telemetry: ["metric", "trace", "span"],
555
- counter: ["metric", "increment"],
556
- // ---- feature flags / experimentation ----
557
- flag: ["feature", "rollout", "toggle", "experiment"],
558
- rollout: ["flag", "percentage", "release", "experiment"],
559
- toggle: ["flag", "feature", "switch"],
560
- experiment: ["variant", "assign", "flag", "exposure"],
561
- variant: ["experiment", "assign"],
562
- // ---- generic infrastructure ----
563
- database: ["schema", "migration", "sql", "query", "orm"],
564
- db: ["database", "schema", "migration", "sql"],
565
- migration: ["database", "schema", "migrate", "sql"],
566
- cache: ["redis", "ttl", "store"],
567
- queue: ["job", "worker", "task", "batch"],
568
- job: ["queue", "worker", "cron"],
569
- upload: ["file", "storage", "blob", "asset"],
570
- storage: ["file", "upload", "bucket", "blob"],
571
- permission: ["role", "rbac", "acl", "access", "grant"],
572
- role: ["permission", "rbac", "access"],
573
- error: ["exception", "failure", "handler"],
574
- config: ["settings", "env", "configuration"]
575
- };
576
- var BIGRAM_CONCEPTS = {
577
- "direct debit": ["debit", "mandate", "sepa", "bacs", "bank"],
578
- "direct debits": ["debit", "mandate", "sepa", "bacs", "bank"],
579
- "sign in": ["login", "signin", "auth", "session"],
580
- "signs in": ["login", "signin", "auth", "session"],
581
- "log in": ["login", "auth", "session"],
582
- "logs in": ["login", "auth", "session"],
583
- "logged in": ["login", "auth", "session"],
584
- "sign up": ["signup", "register", "account"],
585
- "credit card": ["card", "payment", "charge", "stripe"],
586
- "credit cards": ["card", "payment", "charge", "stripe"],
587
- "bank transfer": ["bank", "payment", "sepa", "transfer"],
588
- "rate limit": ["ratelimit", "throttle", "quota"],
589
- "two factor": ["totp", "mfa", "otp", "auth"],
590
- "payment method": ["payment", "stripe", "card", "debit"],
591
- "payment methods": ["payment", "stripe", "card", "debit"],
592
- "push notification": ["push", "device", "token", "notification"],
593
- "push notifications": ["push", "device", "token", "notification"],
594
- "deep link": ["deeplink", "link", "route"],
595
- "deep links": ["deeplink", "link", "route"],
596
- "universal link": ["deeplink", "link", "universal"],
597
- "universal links": ["deeplink", "link", "universal"],
598
- "feature flag": ["flag", "rollout", "toggle", "experiment"],
599
- "feature flags": ["flag", "rollout", "toggle", "experiment"],
600
- "shopping cart": ["cart", "checkout", "order"],
601
- "roll back": ["rollback", "deploy", "release"],
602
- "rolled back": ["rollback", "deploy", "release"],
603
- "ab test": ["experiment", "variant"],
604
- "sign out": ["logout", "session", "auth"],
605
- "fixed width": ["record", "export", "mainframe", "batch"]
606
- };
607
- function lexiconKey(token) {
608
- if (token in CONCEPTS) return token;
609
- if (token.endsWith("ies")) {
610
- const singular = token.slice(0, -3) + "y";
611
- if (singular in CONCEPTS) return singular;
612
- }
613
- if (token.endsWith("s")) {
614
- const singular = token.slice(0, -1);
615
- if (singular in CONCEPTS) return singular;
616
- }
617
- return null;
618
- }
619
- function expandConcepts(orderedTokens) {
620
- const present = new Set(orderedTokens);
621
- const out = [];
622
- const emitted = /* @__PURE__ */ new Set();
623
- const emit = (term, from) => {
624
- if (present.has(term) || emitted.has(term)) return;
625
- emitted.add(term);
626
- out.push({ term, from });
627
- };
628
- for (let i = 0; i + 1 < orderedTokens.length; i++) {
629
- const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;
630
- const terms = BIGRAM_CONCEPTS[bigram];
631
- if (terms) for (const t of terms) emit(t, bigram);
632
- }
633
- for (const token of orderedTokens) {
634
- const key = lexiconKey(token);
635
- if (key) for (const t of CONCEPTS[key]) emit(t, token);
636
- }
637
- return out;
638
- }
639
- function bigramConsumedTokens(orderedTokens) {
640
- const consumed = /* @__PURE__ */ new Set();
641
- for (let i = 0; i + 1 < orderedTokens.length; i++) {
642
- const bigram = `${orderedTokens[i]} ${orderedTokens[i + 1]}`;
643
- if (!BIGRAM_CONCEPTS[bigram]) continue;
644
- for (const tok of [orderedTokens[i], orderedTokens[i + 1]]) {
645
- if (!lexiconKey(tok)) consumed.add(tok);
646
- }
647
- }
648
- return consumed;
649
- }
650
-
651
- // src/engine/relevance-provider.ts
652
- var MAX_PROVIDER_EXPANSIONS = 24;
653
- var MAX_PROVIDER_PATHS = 6;
654
- var MAX_PROVIDER_LEVELS = 8;
655
- var MAX_PROVIDER_TERMS = 10;
656
- var MAX_PROVIDER_VENDORS = 8;
657
- var MAX_PROVIDER_CORRECTIONS = 8;
658
- var MAX_PROVIDER_FILES = 8;
659
- var MAX_PROVIDER_STANDARDS = 4;
660
- var MAX_PROVIDER_CATEGORIES = 10;
661
- var CATEGORY_SLUG = /^[a-z0-9][a-z0-9-]{1,40}$/;
662
- var FILE_HINT = /^(?!\/|~|\.\.)[A-Za-z0-9._*/-]{1,48}$/;
663
- var PATH_SEGMENT = /^[a-z0-9][a-z0-9-]*$/;
664
295
  function disabled() {
665
296
  const v = process.env.VIBGRATE_NO_KERNEL;
666
297
  return v === "1" || v === "true";
@@ -706,101 +337,60 @@ async function loadRelevanceProvider() {
706
337
  }
707
338
  return cached;
708
339
  }
709
- async function analyzeQuestion(question) {
710
- const provider = await loadRelevanceProvider();
711
- if (!provider) return null;
712
- try {
713
- return sanitizeAnalysis(provider.analyzeQuery(question));
714
- } catch {
715
- return null;
716
- }
340
+ var MAX_RANK_SEEDS = 64;
341
+ var MAX_CONCEPT_LINES = 24;
342
+ var MAX_WHY_LEN = 240;
343
+ var MAX_LINE_LEN = 400;
344
+ function cleanLine(raw, cap) {
345
+ return String(raw ?? "").replace(/[\u0000-\u001F\u007F]+/g, " ").replace(/\s+/g, " ").trim().slice(0, cap);
717
346
  }
718
- function sanitizeAnalysis(raw) {
719
- if (!raw || typeof raw.version !== "string") return null;
347
+ function sanitizeRank(raw, validIds) {
348
+ if (!raw || typeof raw.version !== "string" || typeof raw.hasContent !== "boolean") return null;
349
+ if (!Array.isArray(raw.seeds) || !Array.isArray(raw.conceptMap)) return null;
720
350
  const seen = /* @__PURE__ */ new Set();
721
- const expansions = [];
722
- for (const e of raw.expansions ?? []) {
723
- const term = String(e?.term ?? "").toLowerCase().trim();
724
- const from = String(e?.from ?? "").toLowerCase().trim();
725
- const weight = Number(e?.weight);
726
- if (!term || !from || term.includes(" ")) continue;
727
- if (WEAK_TERMS.has(from) || WEAK_TERMS.has(term)) continue;
728
- if (!Number.isFinite(weight) || weight <= 0) continue;
729
- if (seen.has(term)) continue;
730
- seen.add(term);
731
- expansions.push({ term, from, weight: Math.min(1, weight) });
732
- if (expansions.length >= MAX_PROVIDER_EXPANSIONS) break;
733
- }
734
- const topics = (raw.topics ?? []).filter((t) => t && typeof t.id === "string" && Number.isFinite(t.score)).map((t) => ({ id: t.id, score: Math.max(0, Math.min(1, t.score)) }));
735
- const clamp01 = (n) => Number.isFinite(Number(n)) ? Math.max(0, Math.min(1, Number(n))) : 0;
736
- const cleanFiles = (raw2, cap) => (Array.isArray(raw2) ? raw2 : []).filter((f) => typeof f === "string" && FILE_HINT.test(f) && !f.includes("..")).slice(0, cap);
737
- const cleanStandards = (raw2, cap) => (Array.isArray(raw2) ? raw2 : []).filter(
738
- (st) => !!st && typeof st.name === "string" && st.name.length > 0 && st.name.length <= 80 && typeof st.publisher === "string" && st.publisher.length <= 80 && validPath(st.node)
739
- ).map((st) => ({
740
- name: st.name,
741
- publisher: st.publisher,
742
- node: st.node,
743
- kind: st.kind === "regulation" ? "regulation" : "standard",
744
- categories: cleanCategories(st.categories, MAX_PROVIDER_CATEGORIES)
745
- })).slice(0, cap);
746
- const cleanCategories = (raw2, cap) => {
747
- const out = [];
748
- for (const c of Array.isArray(raw2) ? raw2 : []) {
749
- const slug = String(c ?? "").toLowerCase().trim();
750
- if (!CATEGORY_SLUG.test(slug) || out.includes(slug)) continue;
751
- out.push(slug);
752
- if (out.length >= cap) break;
753
- }
754
- return out;
755
- };
756
- const cleanTerms = (raw2, cap) => (Array.isArray(raw2) ? raw2 : []).filter((t) => typeof t === "string" && t.length > 0 && t.length <= 40).map((t) => t.toLowerCase()).slice(0, cap);
757
- const validPath = (p) => typeof p === "string" && p.length > 0 && p.length <= 120 && p.split("/").every((seg) => PATH_SEGMENT.test(seg));
758
- const taxonomy = [];
759
- for (const m of raw.taxonomy ?? []) {
760
- if (!m || !validPath(m.path)) continue;
761
- const levels = (m.levels ?? []).filter((l) => l && validPath(l.path) && typeof l.id === "string").slice(0, MAX_PROVIDER_LEVELS).map((l) => ({ id: l.id, path: l.path, score: clamp01(l.score), terms: cleanTerms(l.terms, MAX_PROVIDER_TERMS) }));
762
- if (!levels.length || levels[levels.length - 1].path !== m.path) continue;
763
- taxonomy.push({
764
- path: m.path,
765
- levels,
766
- score: clamp01(m.score),
767
- evidence: Number.isFinite(Number(m.evidence)) ? Math.max(0, Number(m.evidence)) : 0,
768
- via: (m.via ?? []).filter((v) => typeof v === "string" && v.length <= 80).slice(0, 8),
769
- terms: cleanTerms(m.terms, MAX_PROVIDER_TERMS),
770
- files: cleanFiles(m.files, MAX_PROVIDER_FILES),
771
- standards: cleanStandards(m.standards, MAX_PROVIDER_STANDARDS)
772
- });
773
- if (taxonomy.length >= MAX_PROVIDER_PATHS) break;
351
+ const seeds = [];
352
+ for (const s of raw.seeds) {
353
+ const id = typeof s?.id === "string" ? s.id : "";
354
+ const score = Number(s?.score);
355
+ if (!id || !validIds.has(id) || seen.has(id)) continue;
356
+ if (!Number.isFinite(score) || score <= 0) continue;
357
+ seen.add(id);
358
+ seeds.push({ id, score, why: cleanLine(s.why, MAX_WHY_LEN) });
359
+ if (seeds.length >= MAX_RANK_SEEDS) break;
360
+ }
361
+ const conceptMap = raw.conceptMap.map((l) => cleanLine(l, MAX_LINE_LEN)).filter((l) => l.length > 0).slice(0, MAX_CONCEPT_LINES);
362
+ return { version: raw.version.slice(0, 120), hasContent: raw.hasContent, seeds, conceptMap };
363
+ }
364
+ var symbolViewCache = /* @__PURE__ */ new WeakMap();
365
+ function symbolViewOf(graph) {
366
+ const hit = symbolViewCache.get(graph);
367
+ if (hit) return hit;
368
+ const symbols = [];
369
+ const ids = /* @__PURE__ */ new Set();
370
+ for (const n of graph.nodes) {
371
+ if (n.kind === "file" || n.kind === "external") continue;
372
+ symbols.push({ id: n.id, name: n.name, qualifiedName: n.qualifiedName, file: n.file, importance: n.importance });
373
+ ids.add(n.id);
774
374
  }
775
- const vendors = [];
776
- for (const v of raw.vendors ?? []) {
777
- const name = String(v?.name ?? "").toLowerCase().trim();
778
- const from = String(v?.from ?? "").toLowerCase().trim();
779
- if (!name || !from || name.length > 60) continue;
780
- vendors.push({
781
- name,
782
- from,
783
- ...validPath(v.node) ? { node: v.node } : {},
784
- topic: typeof v.topic === "string" ? v.topic : "",
785
- score: clamp01(v.score),
786
- files: cleanFiles(v.files, MAX_PROVIDER_FILES)
375
+ const view = { symbols, ids };
376
+ symbolViewCache.set(graph, view);
377
+ return view;
378
+ }
379
+ async function rankQuestion(graph, question, opts = {}) {
380
+ const provider = await loadRelevanceProvider();
381
+ if (!provider || typeof provider.rankSymbols !== "function") return null;
382
+ try {
383
+ const { symbols, ids } = symbolViewOf(graph);
384
+ const topicTags = opts.topicTags ? Object.fromEntries(opts.topicTags) : null;
385
+ const raw = provider.rankSymbols(question, symbols, {
386
+ limit: opts.limit,
387
+ priorQuestion: opts.priorQuestion ?? null,
388
+ topicTags
787
389
  });
788
- if (vendors.length >= MAX_PROVIDER_VENDORS) break;
789
- }
790
- const corrections = [];
791
- for (const c of raw.corrections ?? []) {
792
- const from = String(c?.from ?? "").toLowerCase().trim();
793
- const to = String(c?.to ?? "").toLowerCase().trim();
794
- const distance = Number(c?.distance);
795
- if (!from || !to || from === to || from.length > 60 || to.length > 60) continue;
796
- if (!Number.isInteger(distance) || distance < 1 || distance > 3) continue;
797
- corrections.push({ from, to, distance });
798
- if (corrections.length >= MAX_PROVIDER_CORRECTIONS) break;
390
+ return sanitizeRank(raw, ids);
391
+ } catch {
392
+ return null;
799
393
  }
800
- const files = cleanFiles(raw.files, MAX_PROVIDER_FILES);
801
- const standards = cleanStandards(raw.standards, MAX_PROVIDER_STANDARDS);
802
- const categories = cleanCategories(raw.categories, MAX_PROVIDER_CATEGORIES);
803
- return { version: raw.version, topics, expansions, taxonomy, vendors, corrections, files, standards, categories };
804
394
  }
805
395
  function vibgrateDir(root) {
806
396
  return path2.join(root, ".vibgrate");
@@ -1042,6 +632,6 @@ async function loadTopicTags(graph, root, graphPath) {
1042
632
  return tags;
1043
633
  }
1044
634
 
1045
- export { WEAK_TERMS, analyzeQuestion, bigramConsumedTokens, defaultGraphPath, ensureVibgrateGitignore, expandConcepts, legacyGraphPath, loadGraphFileWithSnapshot, loadRelevanceProvider, loadTopicTags, mapFileExists, mapFileStat, preferInRepoGraph, relevanceModuleDir, renderHtml, renderReport, resetRelevanceProviderCache, resolveGraphPath, vibgrateDir, writeArtifacts };
1046
- //# sourceMappingURL=chunk-C5AOLTQS.js.map
1047
- //# sourceMappingURL=chunk-C5AOLTQS.js.map
635
+ export { defaultGraphPath, ensureVibgrateGitignore, legacyGraphPath, loadGraphFileWithSnapshot, loadRelevanceProvider, loadTopicTags, mapFileExists, mapFileStat, preferInRepoGraph, rankQuestion, relevanceModuleDir, renderHtml, renderReport, resetRelevanceProviderCache, resolveGraphPath, vibgrateDir, writeArtifacts };
636
+ //# sourceMappingURL=chunk-III7S75O.js.map
637
+ //# sourceMappingURL=chunk-III7S75O.js.map