nexus-agents 2.155.1 → 2.157.0

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 (123) hide show
  1. package/dist/{child-mcp-config-5TDFQBX4.js → child-mcp-config-3YUKLM5F.js} +2 -2
  2. package/dist/{chunk-KBHRWQBL.js → chunk-3NT6NAXD.js} +2 -2
  3. package/dist/{chunk-J2P7FOEZ.js → chunk-3S2OPUGU.js} +2 -2
  4. package/dist/{chunk-MRYEJZQI.js → chunk-3SE57WOV.js} +70 -49
  5. package/dist/{chunk-MRYEJZQI.js.map → chunk-3SE57WOV.js.map} +1 -1
  6. package/dist/{chunk-QJC2XU2B.js → chunk-47WFM6QH.js} +4 -4
  7. package/dist/{chunk-C63M3XXN.js → chunk-553QYRXJ.js} +5 -5
  8. package/dist/{chunk-52UVXXYA.js → chunk-5FH7QZIT.js} +2 -2
  9. package/dist/{chunk-SRT2VLNP.js → chunk-5ULXLPVP.js} +2 -2
  10. package/dist/{chunk-7TFBRAV7.js → chunk-6ZKQRTTQ.js} +4 -4
  11. package/dist/{chunk-D4N7KBBT.js → chunk-7YOJXOFN.js} +4 -4
  12. package/dist/{chunk-XNW3W2OU.js → chunk-AEPCCXMK.js} +3 -3
  13. package/dist/{chunk-F5R53HDK.js → chunk-BGAK4N74.js} +7 -7
  14. package/dist/{chunk-XDYOJQKC.js → chunk-BM26VPV5.js} +2 -2
  15. package/dist/{chunk-CBGVR52X.js → chunk-EJ3MAR5M.js} +3 -3
  16. package/dist/{chunk-7ZBXMLTJ.js → chunk-GYWYCCJC.js} +2 -2
  17. package/dist/{chunk-V7DS6V3U.js → chunk-HUN7CEAU.js} +3 -3
  18. package/dist/{chunk-IZVRLJIX.js → chunk-HWG437YQ.js} +2 -2
  19. package/dist/{chunk-22MKYE4Y.js → chunk-IILTUCFB.js} +2 -2
  20. package/dist/{chunk-F42V2BKN.js → chunk-JZ4PCEEN.js} +2 -2
  21. package/dist/{chunk-TWXCQOZN.js → chunk-LZ2LHYDO.js} +3 -3
  22. package/dist/{chunk-PRMXFOWF.js → chunk-M532SJS6.js} +7 -7
  23. package/dist/{chunk-ZFUFS44V.js → chunk-MYSS22Q2.js} +2 -2
  24. package/dist/{chunk-O25A3VXX.js → chunk-NELFMLLR.js} +2 -2
  25. package/dist/{chunk-ZLNGFULQ.js → chunk-O7VPOR5A.js} +5 -5
  26. package/dist/{chunk-6FIWYWPM.js → chunk-OXYGRB4C.js} +10 -7
  27. package/dist/chunk-OXYGRB4C.js.map +1 -0
  28. package/dist/{chunk-ZVGM3MPI.js → chunk-PZDDA6IW.js} +3 -3
  29. package/dist/{chunk-N3Y6J2FL.js → chunk-RCSDD2QY.js} +132 -3
  30. package/dist/chunk-RCSDD2QY.js.map +1 -0
  31. package/dist/{chunk-VHRF6VOS.js → chunk-SCJ2EB6Z.js} +2 -2
  32. package/dist/{chunk-MY22I2FD.js → chunk-TKCXD36G.js} +4 -4
  33. package/dist/{chunk-DJTWGM7I.js → chunk-TNRTP5FW.js} +2 -2
  34. package/dist/{chunk-6LFKY2NE.js → chunk-TT4ZITRU.js} +34 -12
  35. package/dist/chunk-TT4ZITRU.js.map +1 -0
  36. package/dist/{chunk-VC7EUQH4.js → chunk-UAGYCCHY.js} +2 -2
  37. package/dist/{chunk-DZCMTSNS.js → chunk-XGUZ2OQK.js} +3 -3
  38. package/dist/{chunk-BMHQATIA.js → chunk-YGYJUPVX.js} +2 -2
  39. package/dist/{chunk-QERDNK6B.js → chunk-YZQXCCEA.js} +5 -5
  40. package/dist/{cli-circuit-breaker-G7NRAWQE.js → cli-circuit-breaker-Q43YSBCB.js} +4 -4
  41. package/dist/cli.js +41 -41
  42. package/dist/{composite-router-7S2MLIHW.js → composite-router-5UHJFOB3.js} +2 -2
  43. package/dist/{consensus-vote-CQBTPJRD.js → consensus-vote-7EBYYBCQ.js} +15 -15
  44. package/dist/{context-retriever-FTLRG2N6.js → context-retriever-33SGXV33.js} +8 -8
  45. package/dist/{doctor-deep-VU5VELP2.js → doctor-deep-RAN4HGOH.js} +3 -3
  46. package/dist/{expert-bridge-MJJDMA6Z.js → expert-bridge-RJP57L75.js} +4 -4
  47. package/dist/{factory-2XKATTCM.js → factory-C5PY7R6O.js} +8 -8
  48. package/dist/{factory-RS462DMM.js → factory-YOUM5MCV.js} +5 -5
  49. package/dist/{improvement-review-CCE655BZ.js → improvement-review-H5BQ2JXK.js} +5 -5
  50. package/dist/index.d.ts +42 -0
  51. package/dist/index.js +30 -30
  52. package/dist/{init-opencode-3QHEWOJV.js → init-opencode-KHODCXA6.js} +6 -6
  53. package/dist/{issue-triage-QOD3WWIM.js → issue-triage-OP3FDRKY.js} +6 -6
  54. package/dist/{pr-reviewer-helpers-7IE2EX6M.js → pr-reviewer-helpers-UF42XZB6.js} +4 -4
  55. package/dist/{registry-command-PFOEWIKM.js → registry-command-EZ7735GC.js} +2 -2
  56. package/dist/{repo-security-plan-ELSKPBOD.js → repo-security-plan-D62HB5PK.js} +3 -3
  57. package/dist/{research-helpers-synthesize-DTNUWPRP.js → research-helpers-synthesize-KUA53BAD.js} +4 -4
  58. package/dist/{routing-memory-VBJMY6PE.js → routing-memory-FE4EQUXO.js} +2 -2
  59. package/dist/{session-memory-BFT6O2F7.js → session-memory-RA7KE6CX.js} +3 -3
  60. package/dist/{setup-command-J7P6DIFV.js → setup-command-FJ2II5YH.js} +11 -11
  61. package/dist/{setup-config-ZC2AJ4IN.js → setup-config-SHG2DMZJ.js} +3 -3
  62. package/dist/{setup-custom-api-6ALI76FS.js → setup-custom-api-NVS4EPBG.js} +3 -3
  63. package/dist/{tool-memory-KJAOR22P.js → tool-memory-UQH2FTAS.js} +5 -5
  64. package/dist/{unified-registry-SMGX7OMN.js → unified-registry-MMQXU622.js} +9 -9
  65. package/dist/{weather-report-GLZ2LI7V.js → weather-report-HRQCJEU5.js} +2 -2
  66. package/package.json +1 -1
  67. package/dist/chunk-6FIWYWPM.js.map +0 -1
  68. package/dist/chunk-6LFKY2NE.js.map +0 -1
  69. package/dist/chunk-N3Y6J2FL.js.map +0 -1
  70. /package/dist/{child-mcp-config-5TDFQBX4.js.map → child-mcp-config-3YUKLM5F.js.map} +0 -0
  71. /package/dist/{chunk-KBHRWQBL.js.map → chunk-3NT6NAXD.js.map} +0 -0
  72. /package/dist/{chunk-J2P7FOEZ.js.map → chunk-3S2OPUGU.js.map} +0 -0
  73. /package/dist/{chunk-QJC2XU2B.js.map → chunk-47WFM6QH.js.map} +0 -0
  74. /package/dist/{chunk-C63M3XXN.js.map → chunk-553QYRXJ.js.map} +0 -0
  75. /package/dist/{chunk-52UVXXYA.js.map → chunk-5FH7QZIT.js.map} +0 -0
  76. /package/dist/{chunk-SRT2VLNP.js.map → chunk-5ULXLPVP.js.map} +0 -0
  77. /package/dist/{chunk-7TFBRAV7.js.map → chunk-6ZKQRTTQ.js.map} +0 -0
  78. /package/dist/{chunk-D4N7KBBT.js.map → chunk-7YOJXOFN.js.map} +0 -0
  79. /package/dist/{chunk-XNW3W2OU.js.map → chunk-AEPCCXMK.js.map} +0 -0
  80. /package/dist/{chunk-F5R53HDK.js.map → chunk-BGAK4N74.js.map} +0 -0
  81. /package/dist/{chunk-XDYOJQKC.js.map → chunk-BM26VPV5.js.map} +0 -0
  82. /package/dist/{chunk-CBGVR52X.js.map → chunk-EJ3MAR5M.js.map} +0 -0
  83. /package/dist/{chunk-7ZBXMLTJ.js.map → chunk-GYWYCCJC.js.map} +0 -0
  84. /package/dist/{chunk-V7DS6V3U.js.map → chunk-HUN7CEAU.js.map} +0 -0
  85. /package/dist/{chunk-IZVRLJIX.js.map → chunk-HWG437YQ.js.map} +0 -0
  86. /package/dist/{chunk-22MKYE4Y.js.map → chunk-IILTUCFB.js.map} +0 -0
  87. /package/dist/{chunk-F42V2BKN.js.map → chunk-JZ4PCEEN.js.map} +0 -0
  88. /package/dist/{chunk-TWXCQOZN.js.map → chunk-LZ2LHYDO.js.map} +0 -0
  89. /package/dist/{chunk-PRMXFOWF.js.map → chunk-M532SJS6.js.map} +0 -0
  90. /package/dist/{chunk-ZFUFS44V.js.map → chunk-MYSS22Q2.js.map} +0 -0
  91. /package/dist/{chunk-O25A3VXX.js.map → chunk-NELFMLLR.js.map} +0 -0
  92. /package/dist/{chunk-ZLNGFULQ.js.map → chunk-O7VPOR5A.js.map} +0 -0
  93. /package/dist/{chunk-ZVGM3MPI.js.map → chunk-PZDDA6IW.js.map} +0 -0
  94. /package/dist/{chunk-VHRF6VOS.js.map → chunk-SCJ2EB6Z.js.map} +0 -0
  95. /package/dist/{chunk-MY22I2FD.js.map → chunk-TKCXD36G.js.map} +0 -0
  96. /package/dist/{chunk-DJTWGM7I.js.map → chunk-TNRTP5FW.js.map} +0 -0
  97. /package/dist/{chunk-VC7EUQH4.js.map → chunk-UAGYCCHY.js.map} +0 -0
  98. /package/dist/{chunk-DZCMTSNS.js.map → chunk-XGUZ2OQK.js.map} +0 -0
  99. /package/dist/{chunk-BMHQATIA.js.map → chunk-YGYJUPVX.js.map} +0 -0
  100. /package/dist/{chunk-QERDNK6B.js.map → chunk-YZQXCCEA.js.map} +0 -0
  101. /package/dist/{cli-circuit-breaker-G7NRAWQE.js.map → cli-circuit-breaker-Q43YSBCB.js.map} +0 -0
  102. /package/dist/{composite-router-7S2MLIHW.js.map → composite-router-5UHJFOB3.js.map} +0 -0
  103. /package/dist/{consensus-vote-CQBTPJRD.js.map → consensus-vote-7EBYYBCQ.js.map} +0 -0
  104. /package/dist/{context-retriever-FTLRG2N6.js.map → context-retriever-33SGXV33.js.map} +0 -0
  105. /package/dist/{doctor-deep-VU5VELP2.js.map → doctor-deep-RAN4HGOH.js.map} +0 -0
  106. /package/dist/{expert-bridge-MJJDMA6Z.js.map → expert-bridge-RJP57L75.js.map} +0 -0
  107. /package/dist/{factory-2XKATTCM.js.map → factory-C5PY7R6O.js.map} +0 -0
  108. /package/dist/{factory-RS462DMM.js.map → factory-YOUM5MCV.js.map} +0 -0
  109. /package/dist/{improvement-review-CCE655BZ.js.map → improvement-review-H5BQ2JXK.js.map} +0 -0
  110. /package/dist/{init-opencode-3QHEWOJV.js.map → init-opencode-KHODCXA6.js.map} +0 -0
  111. /package/dist/{issue-triage-QOD3WWIM.js.map → issue-triage-OP3FDRKY.js.map} +0 -0
  112. /package/dist/{pr-reviewer-helpers-7IE2EX6M.js.map → pr-reviewer-helpers-UF42XZB6.js.map} +0 -0
  113. /package/dist/{registry-command-PFOEWIKM.js.map → registry-command-EZ7735GC.js.map} +0 -0
  114. /package/dist/{repo-security-plan-ELSKPBOD.js.map → repo-security-plan-D62HB5PK.js.map} +0 -0
  115. /package/dist/{research-helpers-synthesize-DTNUWPRP.js.map → research-helpers-synthesize-KUA53BAD.js.map} +0 -0
  116. /package/dist/{routing-memory-VBJMY6PE.js.map → routing-memory-FE4EQUXO.js.map} +0 -0
  117. /package/dist/{session-memory-BFT6O2F7.js.map → session-memory-RA7KE6CX.js.map} +0 -0
  118. /package/dist/{setup-command-J7P6DIFV.js.map → setup-command-FJ2II5YH.js.map} +0 -0
  119. /package/dist/{setup-config-ZC2AJ4IN.js.map → setup-config-SHG2DMZJ.js.map} +0 -0
  120. /package/dist/{setup-custom-api-6ALI76FS.js.map → setup-custom-api-NVS4EPBG.js.map} +0 -0
  121. /package/dist/{tool-memory-KJAOR22P.js.map → tool-memory-UQH2FTAS.js.map} +0 -0
  122. /package/dist/{unified-registry-SMGX7OMN.js.map → unified-registry-MMQXU622.js.map} +0 -0
  123. /package/dist/{weather-report-GLZ2LI7V.js.map → weather-report-HRQCJEU5.js.map} +0 -0
@@ -1778,6 +1778,70 @@ function buildInTreeEntries() {
1778
1778
  return DEFAULT_MODEL_CAPABILITIES.models.map(toEntry);
1779
1779
  }
1780
1780
 
1781
+ // src/config/model-fuzzy-resolution.ts
1782
+ var MAX_FUZZY_ID_LENGTH = 256;
1783
+ var BREADTH_SOURCES = /* @__PURE__ */ new Set(["models-dev", "generated"]);
1784
+ var SOURCE_RANK = {
1785
+ manifest: 0,
1786
+ "in-tree": 1,
1787
+ "models-dev": 2,
1788
+ generated: 3,
1789
+ derived: 4
1790
+ };
1791
+ function byTierPriority(a, b) {
1792
+ return SOURCE_RANK[a.source] - SOURCE_RANK[b.source];
1793
+ }
1794
+ function versionKey(version) {
1795
+ return normaliseModelId(version).replace(/\./g, "-");
1796
+ }
1797
+ function entryVersion(entry) {
1798
+ return entry.version ?? resolveModelIdentitySync(entry.id).version;
1799
+ }
1800
+ function identityKeyFor(identity) {
1801
+ if (identity.vendor === "unknown" || identity.family === "unknown") return void 0;
1802
+ if (identity.version === void 0) return void 0;
1803
+ return `${identity.vendor}|${identity.family}|${versionKey(identity.version)}`;
1804
+ }
1805
+ function buildIdentityIndex(entries) {
1806
+ const index = /* @__PURE__ */ new Map();
1807
+ for (const entry of entries) {
1808
+ const version = entryVersion(entry);
1809
+ if (version === void 0) continue;
1810
+ const key = identityKeyFor({ vendor: entry.vendor, family: entry.family, version });
1811
+ if (key === void 0) continue;
1812
+ const bucket = index.get(key);
1813
+ if (bucket === void 0) index.set(key, [entry]);
1814
+ else bucket.push(entry);
1815
+ }
1816
+ return index;
1817
+ }
1818
+ function samePricing(a, b) {
1819
+ return a.inputPer1M === b.inputPer1M && a.outputPer1M === b.outputPer1M;
1820
+ }
1821
+ function isEffectivelySameModel(a, b) {
1822
+ if (normaliseModelId(a.id) === normaliseModelId(b.id)) return true;
1823
+ if (a.pricing === void 0 || b.pricing === void 0) return false;
1824
+ return samePricing(a.pricing, b.pricing) && a.contextWindow === b.contextWindow && a.maxOutputTokens === b.maxOutputTokens;
1825
+ }
1826
+ function dedupeEffectiveDuplicates(candidates) {
1827
+ const kept = [];
1828
+ for (const candidate of candidates) {
1829
+ if (!kept.some((k) => isEffectivelySameModel(k, candidate))) kept.push(candidate);
1830
+ }
1831
+ return kept;
1832
+ }
1833
+ function uniqueCandidate(candidates) {
1834
+ const distinct = dedupeEffectiveDuplicates(candidates);
1835
+ return distinct.length === 1 ? distinct[0] : void 0;
1836
+ }
1837
+ function selectIdentityCandidate(candidates) {
1838
+ if (candidates === void 0) return void 0;
1839
+ const ranked = [...candidates].sort(byTierPriority);
1840
+ const authoritative = ranked.filter((e) => !BREADTH_SOURCES.has(e.source));
1841
+ if (authoritative.length > 0) return uniqueCandidate(authoritative);
1842
+ return uniqueCandidate(ranked.filter((e) => BREADTH_SOURCES.has(e.source)));
1843
+ }
1844
+
1781
1845
  // src/config/manifest-overlay.ts
1782
1846
  import { existsSync, readFileSync, statSync } from "fs";
1783
1847
  import { parse as parseYaml } from "yaml";
@@ -2249,6 +2313,13 @@ var ModelRegistry = class {
2249
2313
  byId = /* @__PURE__ */ new Map();
2250
2314
  byAlias = /* @__PURE__ */ new Map();
2251
2315
  // alias → canonical id
2316
+ /**
2317
+ * `vendor|family|version` → candidate entries, for the identity tier
2318
+ * (#4164). Built ONCE, lazily on the first fuzzy lookup — the entry maps
2319
+ * are immutable after construction, so it never goes stale. No caching of
2320
+ * UNMATCHED ids happens anywhere (the index only holds loaded entries).
2321
+ */
2322
+ identityIndex;
2252
2323
  constructor(options = {}) {
2253
2324
  if (options.generatedEntries !== void 0) {
2254
2325
  this.loadEntries(options.generatedEntries);
@@ -2266,12 +2337,20 @@ var ModelRegistry = class {
2266
2337
  /**
2267
2338
  * Resolve a model id to its full metadata entry. Always returns —
2268
2339
  * unknown models get a derived entry with sensible defaults.
2340
+ *
2341
+ * On exact miss, the normalized/identity resolution tier (#4164) runs
2342
+ * BEFORE derivation so decorated gateway ids (`Claude_Opus_4.8_hardened`)
2343
+ * still pick up the canonical entry's pricing/metadata.
2269
2344
  */
2270
2345
  getEntry(modelId, hints) {
2271
2346
  const direct = this.lookupExact(modelId);
2272
2347
  if (direct !== void 0 && direct.source !== "models-dev" && direct.source !== "generated") {
2273
2348
  return direct;
2274
2349
  }
2350
+ if (direct === void 0) {
2351
+ const fuzzy = this.lookupFuzzy(modelId, hints);
2352
+ if (fuzzy !== void 0) return fuzzy;
2353
+ }
2275
2354
  const identity = resolveModelIdentitySync(modelId, augmentHints(hints, direct));
2276
2355
  const derived = deriveEntry(modelId, identity);
2277
2356
  if (direct !== void 0 && identity.vendor !== "unknown") {
@@ -2306,6 +2385,39 @@ var ModelRegistry = class {
2306
2385
  if (canonical !== void 0) return this.byId.get(canonical);
2307
2386
  return void 0;
2308
2387
  }
2388
+ /**
2389
+ * Normalized/identity resolution tier (#4164). Runs on exact miss only:
2390
+ * (a) retry `lookupExact` with the `normaliseModelId`-normalized id so
2391
+ * aliases + alias-shadow (#3293) keep working;
2392
+ * (b) identity-match {vendor, family, version} against the load-time
2393
+ * index — version required on both sides, tier-ordered uniqueness,
2394
+ * fail closed on ambiguity (see model-fuzzy-resolution.ts).
2395
+ * Over-long ids skip the tier entirely (straight to derivation).
2396
+ */
2397
+ lookupFuzzy(modelId, hints) {
2398
+ if (modelId.length > MAX_FUZZY_ID_LENGTH) return void 0;
2399
+ const normalized = normaliseModelId(modelId);
2400
+ const byNormalized = normalized === modelId ? void 0 : this.lookupExact(normalized);
2401
+ if (byNormalized !== void 0) {
2402
+ return this.resolveMatched(byNormalized, modelId, hints, "normalized");
2403
+ }
2404
+ const key = identityKeyFor(resolveModelIdentitySync(modelId, hints));
2405
+ if (key === void 0) return void 0;
2406
+ this.identityIndex ??= buildIdentityIndex(this.byId.values());
2407
+ const matched = selectIdentityCandidate(this.identityIndex.get(key));
2408
+ if (matched === void 0) return void 0;
2409
+ return this.resolveMatched(matched, modelId, hints, "identity");
2410
+ }
2411
+ /**
2412
+ * Build the entry returned for a fuzzy match: a fresh COPY that keeps the
2413
+ * CALLER'S id and takes behaviour from derivation for that original id —
2414
+ * the matched entry grants pricing/metadata only.
2415
+ */
2416
+ resolveMatched(matched, modelId, hints, matchedVia) {
2417
+ const identity = resolveModelIdentitySync(modelId, augmentHints(hints, matched));
2418
+ const derived = deriveEntry(modelId, identity);
2419
+ return mergeMatchedWithDerived(matched, derived, matchedVia);
2420
+ }
2309
2421
  loadEntries(entries) {
2310
2422
  for (const entry of entries) {
2311
2423
  this.byId.set(entry.id, entry);
@@ -2342,6 +2454,23 @@ function mergeSnapshotWithDerived(snapshot, derived) {
2342
2454
  source: "derived"
2343
2455
  };
2344
2456
  }
2457
+ function mergeMatchedWithDerived(matched, derived, matchedVia) {
2458
+ const merged = {
2459
+ ...mergeSnapshotWithDerived(matched, derived)
2460
+ };
2461
+ delete merged.aliases;
2462
+ delete merged.cliName;
2463
+ delete merged.cliAlias;
2464
+ delete merged.cliModelName;
2465
+ delete merged.unsupportedParameters;
2466
+ delete merged.maxTokensParam;
2467
+ delete merged.verifiedAt;
2468
+ merged.id = derived.id;
2469
+ if (derived.version !== void 0) merged.version = derived.version;
2470
+ merged.matchedVia = matchedVia;
2471
+ merged.resolvedFrom = matched.id;
2472
+ return merged;
2473
+ }
2345
2474
  var globalRegistry;
2346
2475
  function getDefaultRegistry() {
2347
2476
  globalRegistry ??= buildDefaultRegistry();
@@ -2372,7 +2501,7 @@ function setDefaultRegistry(registry) {
2372
2501
  }
2373
2502
  async function reloadDefaultRegistry() {
2374
2503
  globalRegistry = buildDefaultRegistry();
2375
- const { resetGlobalRegistry } = await import("./unified-registry-SMGX7OMN.js");
2504
+ const { resetGlobalRegistry } = await import("./unified-registry-MMQXU622.js");
2376
2505
  resetGlobalRegistry();
2377
2506
  return globalRegistry;
2378
2507
  }
@@ -13656,7 +13785,7 @@ var CompositeRouter = class _CompositeRouter {
13656
13785
  */
13657
13786
  async consultUnifiedContext(task) {
13658
13787
  try {
13659
- const { getContextForTask, inferTaskCategory } = await import("./context-retriever-FTLRG2N6.js");
13788
+ const { getContextForTask, inferTaskCategory } = await import("./context-retriever-33SGXV33.js");
13660
13789
  const ctx = await getContextForTask({
13661
13790
  task: task.content,
13662
13791
  category: inferTaskCategory(task.content),
@@ -15159,4 +15288,4 @@ export {
15159
15288
  AgentCapability,
15160
15289
  OrchestratorError
15161
15290
  };
15162
- //# sourceMappingURL=chunk-N3Y6J2FL.js.map
15291
+ //# sourceMappingURL=chunk-RCSDD2QY.js.map