nexus-agents 3.8.2 → 3.8.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 (121) hide show
  1. package/dist/{child-mcp-config-6NPPPUVY.js → child-mcp-config-2PIBUQ2S.js} +2 -2
  2. package/dist/{chunk-2IFBPQX2.js → chunk-2OUSA6KC.js} +5 -5
  3. package/dist/{chunk-XF5NBPHS.js → chunk-45TTCQQX.js} +5 -5
  4. package/dist/{chunk-LLO24WNM.js → chunk-56AEAPBH.js} +2 -2
  5. package/dist/{chunk-E25DVSOH.js → chunk-6GPA42ZT.js} +2 -2
  6. package/dist/{chunk-YCJVIYXU.js → chunk-7WPB57DI.js} +2 -2
  7. package/dist/{chunk-NEEDICVD.js → chunk-7X4D7ANX.js} +2 -2
  8. package/dist/{chunk-FH5GVIUB.js → chunk-A56RXUI6.js} +2 -2
  9. package/dist/{chunk-Q4N2AMUH.js → chunk-AL33VIXL.js} +21 -11
  10. package/dist/chunk-AL33VIXL.js.map +1 -0
  11. package/dist/{chunk-SIAT5KIP.js → chunk-CJQUKCFX.js} +2 -2
  12. package/dist/{chunk-YIMAWNZF.js → chunk-DBPXOHI5.js} +2 -2
  13. package/dist/{chunk-A7NXSL62.js → chunk-DHXLS4KC.js} +3 -3
  14. package/dist/{chunk-NDIEJ2IW.js → chunk-HOCCD7UE.js} +2 -2
  15. package/dist/{chunk-PRMJRGTB.js → chunk-I7NYAUZP.js} +11 -5
  16. package/dist/chunk-I7NYAUZP.js.map +1 -0
  17. package/dist/{chunk-2VYSPAPK.js → chunk-IYCTEPKA.js} +3 -3
  18. package/dist/{chunk-FG3BJ3EG.js → chunk-JD72GJWG.js} +4 -4
  19. package/dist/{chunk-RH2XESKI.js → chunk-JDDNQU3Z.js} +2 -2
  20. package/dist/{chunk-DVVYK7AU.js → chunk-JDVNIRG5.js} +2 -2
  21. package/dist/{chunk-LIYYP74L.js → chunk-KDLFUQSW.js} +2 -2
  22. package/dist/{chunk-FN4IJNEL.js → chunk-L3KUH66L.js} +3 -3
  23. package/dist/{chunk-2CTS47RO.js → chunk-MUTPTBWG.js} +2 -2
  24. package/dist/{chunk-222AX67B.js → chunk-NYEZJYLW.js} +4 -4
  25. package/dist/{chunk-A4DFWNLB.js → chunk-RMNQ5Y2Y.js} +8 -8
  26. package/dist/{chunk-TSCF7SCI.js → chunk-RWMQ3YJW.js} +77 -15
  27. package/dist/{chunk-TSCF7SCI.js.map → chunk-RWMQ3YJW.js.map} +1 -1
  28. package/dist/{chunk-BIG3SAUY.js → chunk-S75ALOWG.js} +2 -2
  29. package/dist/{chunk-SDKH4DZS.js → chunk-SBI7WTXE.js} +5 -5
  30. package/dist/{chunk-WN4GPQEW.js → chunk-TO32OEQJ.js} +4 -4
  31. package/dist/{chunk-ATOORYKU.js → chunk-U7RX45LD.js} +2 -2
  32. package/dist/{chunk-24KV7AHU.js → chunk-UFG2PWHA.js} +7 -7
  33. package/dist/{chunk-FJNCXY4H.js → chunk-UY5QWMGO.js} +8 -8
  34. package/dist/{chunk-K4PIBH4M.js → chunk-VTYYI2W3.js} +2 -2
  35. package/dist/{chunk-7LEFPG22.js → chunk-XRB6OXKK.js} +35 -35
  36. package/dist/{chunk-CYGJGP52.js → chunk-Y2RZWSBO.js} +5 -5
  37. package/dist/{chunk-OVDMUJJJ.js → chunk-YPVLUX5D.js} +3 -3
  38. package/dist/{cli-circuit-breaker-GGDXSODU.js → cli-circuit-breaker-CN3TTRGA.js} +3 -3
  39. package/dist/cli.js +41 -41
  40. package/dist/{composite-router-3JTQWELQ.js → composite-router-BKWI2DWU.js} +2 -2
  41. package/dist/{consensus-vote-VIVMYSH7.js → consensus-vote-QK5TMW5O.js} +16 -16
  42. package/dist/{context-retriever-CD4M2XZI.js → context-retriever-LICMS4FY.js} +8 -8
  43. package/dist/{doctor-deep-DGIEA3BS.js → doctor-deep-JMUKTWXY.js} +3 -3
  44. package/dist/{doctor-live-UAXCKP2P.js → doctor-live-VSSZGONL.js} +9 -9
  45. package/dist/{expert-bridge-NJ7ROLKV.js → expert-bridge-GEK3O27T.js} +4 -4
  46. package/dist/{factory-HXTWV5M2.js → factory-DTR6AHD7.js} +9 -9
  47. package/dist/{factory-YQTOTSAG.js → factory-Y3ZH5SXY.js} +5 -5
  48. package/dist/{improvement-review-BXMMAIF7.js → improvement-review-SRIDB3XF.js} +5 -5
  49. package/dist/index.js +30 -30
  50. package/dist/{init-opencode-5JABJDNL.js → init-opencode-FZY5PH7I.js} +6 -6
  51. package/dist/{issue-triage-EV64NQRS.js → issue-triage-4BCWSTD6.js} +6 -6
  52. package/dist/{pr-reviewer-helpers-MDLLZ2XR.js → pr-reviewer-helpers-WZH6KPEW.js} +4 -4
  53. package/dist/{registry-command-LP7HOKWD.js → registry-command-SVDXUNIR.js} +2 -2
  54. package/dist/{repo-security-plan-CJNJQNIM.js → repo-security-plan-6KQVPGFQ.js} +3 -3
  55. package/dist/{research-helpers-synthesize-J5ZVG6PP.js → research-helpers-synthesize-74CBM5N3.js} +4 -4
  56. package/dist/{routing-memory-UPCTNDFG.js → routing-memory-AKPBEY7V.js} +2 -2
  57. package/dist/{session-memory-K67JAZTU.js → session-memory-ZECEYOSG.js} +3 -3
  58. package/dist/{setup-command-UR4CR5UA.js → setup-command-XOEQDINC.js} +14 -14
  59. package/dist/{setup-config-UEQMYXQ5.js → setup-config-F3WQWJHA.js} +3 -3
  60. package/dist/{setup-custom-api-SHMT2T3M.js → setup-custom-api-SKD5MTOT.js} +4 -4
  61. package/dist/{tool-memory-J2RP3FTT.js → tool-memory-PMLDOLWI.js} +5 -5
  62. package/dist/{unified-registry-2JCOLE4F.js → unified-registry-SGS73VVW.js} +10 -10
  63. package/dist/{weather-report-XHGOK6E7.js → weather-report-4N4JYOM5.js} +2 -2
  64. package/package.json +1 -1
  65. package/dist/chunk-PRMJRGTB.js.map +0 -1
  66. package/dist/chunk-Q4N2AMUH.js.map +0 -1
  67. /package/dist/{child-mcp-config-6NPPPUVY.js.map → child-mcp-config-2PIBUQ2S.js.map} +0 -0
  68. /package/dist/{chunk-2IFBPQX2.js.map → chunk-2OUSA6KC.js.map} +0 -0
  69. /package/dist/{chunk-XF5NBPHS.js.map → chunk-45TTCQQX.js.map} +0 -0
  70. /package/dist/{chunk-LLO24WNM.js.map → chunk-56AEAPBH.js.map} +0 -0
  71. /package/dist/{chunk-E25DVSOH.js.map → chunk-6GPA42ZT.js.map} +0 -0
  72. /package/dist/{chunk-YCJVIYXU.js.map → chunk-7WPB57DI.js.map} +0 -0
  73. /package/dist/{chunk-NEEDICVD.js.map → chunk-7X4D7ANX.js.map} +0 -0
  74. /package/dist/{chunk-FH5GVIUB.js.map → chunk-A56RXUI6.js.map} +0 -0
  75. /package/dist/{chunk-SIAT5KIP.js.map → chunk-CJQUKCFX.js.map} +0 -0
  76. /package/dist/{chunk-YIMAWNZF.js.map → chunk-DBPXOHI5.js.map} +0 -0
  77. /package/dist/{chunk-A7NXSL62.js.map → chunk-DHXLS4KC.js.map} +0 -0
  78. /package/dist/{chunk-NDIEJ2IW.js.map → chunk-HOCCD7UE.js.map} +0 -0
  79. /package/dist/{chunk-2VYSPAPK.js.map → chunk-IYCTEPKA.js.map} +0 -0
  80. /package/dist/{chunk-FG3BJ3EG.js.map → chunk-JD72GJWG.js.map} +0 -0
  81. /package/dist/{chunk-RH2XESKI.js.map → chunk-JDDNQU3Z.js.map} +0 -0
  82. /package/dist/{chunk-DVVYK7AU.js.map → chunk-JDVNIRG5.js.map} +0 -0
  83. /package/dist/{chunk-LIYYP74L.js.map → chunk-KDLFUQSW.js.map} +0 -0
  84. /package/dist/{chunk-FN4IJNEL.js.map → chunk-L3KUH66L.js.map} +0 -0
  85. /package/dist/{chunk-2CTS47RO.js.map → chunk-MUTPTBWG.js.map} +0 -0
  86. /package/dist/{chunk-222AX67B.js.map → chunk-NYEZJYLW.js.map} +0 -0
  87. /package/dist/{chunk-A4DFWNLB.js.map → chunk-RMNQ5Y2Y.js.map} +0 -0
  88. /package/dist/{chunk-BIG3SAUY.js.map → chunk-S75ALOWG.js.map} +0 -0
  89. /package/dist/{chunk-SDKH4DZS.js.map → chunk-SBI7WTXE.js.map} +0 -0
  90. /package/dist/{chunk-WN4GPQEW.js.map → chunk-TO32OEQJ.js.map} +0 -0
  91. /package/dist/{chunk-ATOORYKU.js.map → chunk-U7RX45LD.js.map} +0 -0
  92. /package/dist/{chunk-24KV7AHU.js.map → chunk-UFG2PWHA.js.map} +0 -0
  93. /package/dist/{chunk-FJNCXY4H.js.map → chunk-UY5QWMGO.js.map} +0 -0
  94. /package/dist/{chunk-K4PIBH4M.js.map → chunk-VTYYI2W3.js.map} +0 -0
  95. /package/dist/{chunk-7LEFPG22.js.map → chunk-XRB6OXKK.js.map} +0 -0
  96. /package/dist/{chunk-CYGJGP52.js.map → chunk-Y2RZWSBO.js.map} +0 -0
  97. /package/dist/{chunk-OVDMUJJJ.js.map → chunk-YPVLUX5D.js.map} +0 -0
  98. /package/dist/{cli-circuit-breaker-GGDXSODU.js.map → cli-circuit-breaker-CN3TTRGA.js.map} +0 -0
  99. /package/dist/{composite-router-3JTQWELQ.js.map → composite-router-BKWI2DWU.js.map} +0 -0
  100. /package/dist/{consensus-vote-VIVMYSH7.js.map → consensus-vote-QK5TMW5O.js.map} +0 -0
  101. /package/dist/{context-retriever-CD4M2XZI.js.map → context-retriever-LICMS4FY.js.map} +0 -0
  102. /package/dist/{doctor-deep-DGIEA3BS.js.map → doctor-deep-JMUKTWXY.js.map} +0 -0
  103. /package/dist/{doctor-live-UAXCKP2P.js.map → doctor-live-VSSZGONL.js.map} +0 -0
  104. /package/dist/{expert-bridge-NJ7ROLKV.js.map → expert-bridge-GEK3O27T.js.map} +0 -0
  105. /package/dist/{factory-HXTWV5M2.js.map → factory-DTR6AHD7.js.map} +0 -0
  106. /package/dist/{factory-YQTOTSAG.js.map → factory-Y3ZH5SXY.js.map} +0 -0
  107. /package/dist/{improvement-review-BXMMAIF7.js.map → improvement-review-SRIDB3XF.js.map} +0 -0
  108. /package/dist/{init-opencode-5JABJDNL.js.map → init-opencode-FZY5PH7I.js.map} +0 -0
  109. /package/dist/{issue-triage-EV64NQRS.js.map → issue-triage-4BCWSTD6.js.map} +0 -0
  110. /package/dist/{pr-reviewer-helpers-MDLLZ2XR.js.map → pr-reviewer-helpers-WZH6KPEW.js.map} +0 -0
  111. /package/dist/{registry-command-LP7HOKWD.js.map → registry-command-SVDXUNIR.js.map} +0 -0
  112. /package/dist/{repo-security-plan-CJNJQNIM.js.map → repo-security-plan-6KQVPGFQ.js.map} +0 -0
  113. /package/dist/{research-helpers-synthesize-J5ZVG6PP.js.map → research-helpers-synthesize-74CBM5N3.js.map} +0 -0
  114. /package/dist/{routing-memory-UPCTNDFG.js.map → routing-memory-AKPBEY7V.js.map} +0 -0
  115. /package/dist/{session-memory-K67JAZTU.js.map → session-memory-ZECEYOSG.js.map} +0 -0
  116. /package/dist/{setup-command-UR4CR5UA.js.map → setup-command-XOEQDINC.js.map} +0 -0
  117. /package/dist/{setup-config-UEQMYXQ5.js.map → setup-config-F3WQWJHA.js.map} +0 -0
  118. /package/dist/{setup-custom-api-SHMT2T3M.js.map → setup-custom-api-SKD5MTOT.js.map} +0 -0
  119. /package/dist/{tool-memory-J2RP3FTT.js.map → tool-memory-PMLDOLWI.js.map} +0 -0
  120. /package/dist/{unified-registry-2JCOLE4F.js.map → unified-registry-SGS73VVW.js.map} +0 -0
  121. /package/dist/{weather-report-XHGOK6E7.js.map → weather-report-4N4JYOM5.js.map} +0 -0
@@ -2623,7 +2623,7 @@ function setDefaultRegistry(registry) {
2623
2623
  }
2624
2624
  async function reloadDefaultRegistry() {
2625
2625
  globalRegistry = buildDefaultRegistry();
2626
- const { resetGlobalRegistry } = await import("./unified-registry-2JCOLE4F.js");
2626
+ const { resetGlobalRegistry } = await import("./unified-registry-SGS73VVW.js");
2627
2627
  resetGlobalRegistry();
2628
2628
  return globalRegistry;
2629
2629
  }
@@ -11188,27 +11188,86 @@ function isRateLimitText(text) {
11188
11188
  function isRateLimitLikeError(error) {
11189
11189
  return isRateLimitText(getErrorMessage(error));
11190
11190
  }
11191
+ var RETRY_HINT_PATTERNS = [
11192
+ // "retry after X seconds" / "retry-after: X sec"
11193
+ { pattern: /retry[- ]?after[:\s]+(\d+(?:\.\d+)?)\s*(?:s|sec)/i, msPerUnit: 1e3 },
11194
+ // "retry after X ms" / "wait X milliseconds"
11195
+ { pattern: /(?:retry[- ]?after|wait)[:\s]+(\d+)\s*(?:ms|millisecond)/i, msPerUnit: 1 },
11196
+ // "try again in X seconds" — the OpenAI family's phrasing.
11197
+ { pattern: /try again in (\d+(?:\.\d+)?)\s*(?:s|sec)/i, msPerUnit: 1e3 },
11198
+ // #4606: the sub-second variant. The rule above cannot match "try again in
11199
+ // 632ms" — `632` is followed by `m`, not `s` — so the OpenAI family silently
11200
+ // lost every horizon shorter than a second.
11201
+ { pattern: /try again in (\d+(?:\.\d+)?)\s*ms\b/i, msPerUnit: 1 },
11202
+ // #4606: Gemini states its horizon only as google.rpc.RetryInfo inside the
11203
+ // response body, and `@google/genai` stringifies that whole body into the
11204
+ // error message (its `ApiError` carries `{message, status}` and no headers),
11205
+ // so this is the only place the horizon is reachable on that vendor.
11206
+ { pattern: /"retrydelay"\s*:\s*"(\d+(?:\.\d+)?)s"/i, msPerUnit: 1e3 }
11207
+ ];
11191
11208
  function parseRetryAfterMs(errorMessage) {
11192
11209
  const lower = errorMessage.toLowerCase();
11193
- const secondsMatch = /retry[- ]?after[:\s]+(\d+(?:\.\d+)?)\s*(?:s|sec)/i.exec(lower);
11194
- if (secondsMatch !== null) {
11195
- const parsed = parseFloat(secondsMatch[1] ?? "0");
11196
- return Math.ceil(parsed * 1e3);
11210
+ for (const { pattern, msPerUnit } of RETRY_HINT_PATTERNS) {
11211
+ const match = pattern.exec(lower);
11212
+ const captured = match?.[1];
11213
+ if (captured !== void 0) {
11214
+ return Math.ceil(Number.parseFloat(captured) * msPerUnit);
11215
+ }
11197
11216
  }
11198
- const msMatch = /(?:retry[- ]?after|wait)[:\s]+(\d+)\s*(?:ms|millisecond)/i.exec(lower);
11199
- if (msMatch !== null) {
11200
- return parseInt(msMatch[1] ?? "0", 10);
11217
+ return void 0;
11218
+ }
11219
+ var RETRY_AFTER_HEADER = "retry-after";
11220
+ var HEADER_BAG_FIELDS = ["headers", "responseHeaders"];
11221
+ var MAX_CAUSE_DEPTH = 3;
11222
+ var HTTP_DATE_PREFIX = /^(?:mon|tue|wed|thu|fri|sat|sun)/i;
11223
+ function parseRetryAfterHeader(value) {
11224
+ if (value === null || value === void 0) return void 0;
11225
+ const trimmed = value.trim();
11226
+ if (trimmed === "") return void 0;
11227
+ if (/^\d+$/.test(trimmed)) {
11228
+ return Number.parseInt(trimmed, 10) * 1e3;
11229
+ }
11230
+ if (!HTTP_DATE_PREFIX.test(trimmed)) return void 0;
11231
+ const at = Date.parse(trimmed);
11232
+ if (Number.isNaN(at)) return void 0;
11233
+ return Math.max(0, at - getTimeProvider().now());
11234
+ }
11235
+ function readRetryAfterField(bag) {
11236
+ if (bag === null || typeof bag !== "object") return void 0;
11237
+ const getter = bag.get;
11238
+ if (typeof getter === "function") {
11239
+ const raw = bag.get(RETRY_AFTER_HEADER);
11240
+ return typeof raw === "string" ? raw : void 0;
11241
+ }
11242
+ for (const [key, val] of Object.entries(bag)) {
11243
+ if (key.toLowerCase() === RETRY_AFTER_HEADER && typeof val === "string") return val;
11201
11244
  }
11202
- const againMatch = /try again in (\d+(?:\.\d+)?)\s*(?:s|sec)/i.exec(lower);
11203
- if (againMatch !== null) {
11204
- const parsed = parseFloat(againMatch[1] ?? "0");
11205
- return Math.ceil(parsed * 1e3);
11245
+ return void 0;
11246
+ }
11247
+ function extractRetryAfterMs(error) {
11248
+ let current = error;
11249
+ for (let depth = 0; depth <= MAX_CAUSE_DEPTH; depth++) {
11250
+ if (current === null || typeof current !== "object") return void 0;
11251
+ const obj = current;
11252
+ for (const field of HEADER_BAG_FIELDS) {
11253
+ const parsed = parseRetryAfterHeader(readRetryAfterField(obj[field]));
11254
+ if (parsed !== void 0) return parsed;
11255
+ }
11256
+ current = obj["cause"];
11206
11257
  }
11207
11258
  return void 0;
11208
11259
  }
11260
+ var RETRY_AFTER_CONTEXT_KEY = "retryAfterMs";
11261
+ function retryAfterMsFromContext(context) {
11262
+ const raw = context?.[RETRY_AFTER_CONTEXT_KEY];
11263
+ return typeof raw === "number" && Number.isFinite(raw) && raw >= 0 ? raw : void 0;
11264
+ }
11265
+ function resolveRetryAfterMs(error, message) {
11266
+ return extractRetryAfterMs(error) ?? parseRetryAfterMs(message);
11267
+ }
11209
11268
  function toRateLimitError(error, provider) {
11210
11269
  const message = getErrorMessage(error);
11211
- const retryAfterMs = parseRetryAfterMs(message);
11270
+ const retryAfterMs = resolveRetryAfterMs(error, message);
11212
11271
  return new RateLimitError(message, {
11213
11272
  ...retryAfterMs !== void 0 ? { retryAfterMs } : {},
11214
11273
  ...provider !== void 0 ? { provider } : {},
@@ -14776,7 +14835,7 @@ var CompositeRouter = class _CompositeRouter {
14776
14835
  */
14777
14836
  async consultUnifiedContext(task) {
14778
14837
  try {
14779
- const { getContextForTask, inferTaskCategory } = await import("./context-retriever-CD4M2XZI.js");
14838
+ const { getContextForTask, inferTaskCategory } = await import("./context-retriever-LICMS4FY.js");
14780
14839
  const ctx = await getContextForTask({
14781
14840
  task: task.content,
14782
14841
  category: inferTaskCategory(task.content),
@@ -16230,6 +16289,9 @@ export {
16230
16289
  isRateLimitText,
16231
16290
  isRateLimitLikeError,
16232
16291
  parseRetryAfterMs,
16292
+ RETRY_AFTER_CONTEXT_KEY,
16293
+ retryAfterMsFromContext,
16294
+ resolveRetryAfterMs,
16233
16295
  toRateLimitError,
16234
16296
  recordRateLimitEvent,
16235
16297
  getFallbackChainForCategory,
@@ -16362,4 +16424,4 @@ export {
16362
16424
  AgentCapability,
16363
16425
  OrchestratorError
16364
16426
  };
16365
- //# sourceMappingURL=chunk-TSCF7SCI.js.map
16427
+ //# sourceMappingURL=chunk-RWMQ3YJW.js.map