nexus-agents 11.0.0 → 11.0.2

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 (148) hide show
  1. package/dist/{ast-rule-runner-3QRCP53C.js → ast-rule-runner-RL6XHXJB.js} +3 -3
  2. package/dist/{child-mcp-config-NWPUDUVE.js → child-mcp-config-ADRNVJJB.js} +2 -2
  3. package/dist/{chunk-6LWUJOAS.js → chunk-3LE73MVE.js} +2 -2
  4. package/dist/{chunk-R75NZRON.js → chunk-63YC42C2.js} +3 -3
  5. package/dist/{chunk-DCPCO2XG.js → chunk-6JMULY2R.js} +2 -2
  6. package/dist/{chunk-PZMODRBC.js → chunk-A7XALVN3.js} +2 -2
  7. package/dist/{chunk-7HHXY7LM.js → chunk-AX5DBV3M.js} +2 -2
  8. package/dist/{chunk-53XY7YJD.js → chunk-BHH3PKI6.js} +5 -5
  9. package/dist/{chunk-EFZRQ67X.js → chunk-DYV7XS26.js} +5 -5
  10. package/dist/{chunk-GPRYEKAA.js → chunk-EBOAFTOG.js} +31 -17
  11. package/dist/chunk-EBOAFTOG.js.map +1 -0
  12. package/dist/{chunk-5CUI42NO.js → chunk-FMIALWCD.js} +7 -7
  13. package/dist/{chunk-2BZXKNLN.js → chunk-G2OI3KA4.js} +2 -2
  14. package/dist/{chunk-SFWQ72ZS.js → chunk-G667EEZ7.js} +4 -4
  15. package/dist/{chunk-2HYJTIDY.js → chunk-GU2HV6KI.js} +3 -3
  16. package/dist/{chunk-PY6HJQYC.js → chunk-HL3EHBKJ.js} +8 -8
  17. package/dist/{chunk-3UWT434E.js → chunk-I2THTVA4.js} +17 -10
  18. package/dist/chunk-I2THTVA4.js.map +1 -0
  19. package/dist/{chunk-VVMSE5LF.js → chunk-KSSPY5KX.js} +4 -4
  20. package/dist/{chunk-66BE4KF4.js → chunk-LAUBKK25.js} +5 -5
  21. package/dist/{chunk-OJ3PXTN3.js → chunk-LSQ2IFMP.js} +52 -15
  22. package/dist/{chunk-OJ3PXTN3.js.map → chunk-LSQ2IFMP.js.map} +1 -1
  23. package/dist/{chunk-HUYVIUF3.js → chunk-MTB5BXYJ.js} +2 -2
  24. package/dist/{chunk-WFMMJWMO.js → chunk-NVE262E3.js} +2 -2
  25. package/dist/{chunk-I7VX7JWV.js → chunk-NY7IMAG5.js} +2 -2
  26. package/dist/{chunk-SKM75Y7E.js → chunk-NZA7EIZO.js} +4 -4
  27. package/dist/{chunk-D33IH5VS.js → chunk-OYAHRYFI.js} +2 -2
  28. package/dist/{chunk-QARJHIQM.js → chunk-PYAR3CVN.js} +7 -7
  29. package/dist/{chunk-QTRPH2ZF.js → chunk-QKWZZM2D.js} +2 -2
  30. package/dist/{chunk-YOT3XEZM.js → chunk-RR2Y2HVZ.js} +4 -4
  31. package/dist/{chunk-T4WTZTZY.js → chunk-S4QYN2AV.js} +4 -4
  32. package/dist/{chunk-7H3SOL4O.js → chunk-TGUUUWJO.js} +48 -42
  33. package/dist/{chunk-7H3SOL4O.js.map → chunk-TGUUUWJO.js.map} +1 -1
  34. package/dist/{chunk-VZ7YZ2EF.js → chunk-TWQEUAUG.js} +2 -2
  35. package/dist/{chunk-YRZV6KXZ.js → chunk-WAPGSEIM.js} +4 -4
  36. package/dist/{chunk-IGYZQEKM.js → chunk-WILZPMEM.js} +3 -3
  37. package/dist/{chunk-S6XQFO4A.js → chunk-WTMLF7QR.js} +2 -2
  38. package/dist/{chunk-B3RAA47W.js → chunk-Y34BCT36.js} +3 -3
  39. package/dist/{chunk-V6AJCRAU.js → chunk-YIZ25Y4C.js} +2 -2
  40. package/dist/{chunk-AFJE7K6Q.js → chunk-YUA3UBXT.js} +3 -3
  41. package/dist/{chunk-377L2ZEK.js → chunk-ZBWKLJNT.js} +11 -11
  42. package/dist/{cli-circuit-breaker-VWARWNGU.js → cli-circuit-breaker-CDJKHR7R.js} +3 -3
  43. package/dist/{cli-readiness-S23DWZCS.js → cli-readiness-7I5BYWLA.js} +7 -7
  44. package/dist/{cli-server-gateway-DJXSHHXA.js → cli-server-gateway-626TKNQJ.js} +11 -11
  45. package/dist/cli.d.ts +1 -1
  46. package/dist/cli.js +50 -46
  47. package/dist/cli.js.map +1 -1
  48. package/dist/{codebase-search-VMKI7FW4.js → codebase-search-YVO7BC33.js} +2 -2
  49. package/dist/{composite-router-3CBLBUGZ.js → composite-router-YWSL4Y62.js} +2 -2
  50. package/dist/{consensus-vote-JMWTJO4M.js → consensus-vote-O7WRAIMH.js} +15 -15
  51. package/dist/{consensus-vote-types-Ca0BY3kZ.d.ts → consensus-vote-types-C8RWaoxp.d.ts} +4 -3
  52. package/dist/{context-retriever-P6ZE6UXS.js → context-retriever-CBOMGQAP.js} +8 -8
  53. package/dist/{doctor-deep-HBIDPGWI.js → doctor-deep-2N3BHH6I.js} +3 -3
  54. package/dist/{doctor-gateway-report-FWV7UN2Q.js → doctor-gateway-report-MRPZ7S34.js} +6 -6
  55. package/dist/{doctor-live-676TWMP6.js → doctor-live-JBXIFI7A.js} +11 -11
  56. package/dist/{expert-bridge-3VWOHLC7.js → expert-bridge-TOMOJTMC.js} +4 -4
  57. package/dist/{factory-A44THDRG.js → factory-H6IIGGFG.js} +10 -10
  58. package/dist/{factory-YPJXDMN4.js → factory-OLT24RLU.js} +5 -5
  59. package/dist/{improvement-review-FIKPTCPE.js → improvement-review-UQUJ4ZR5.js} +6 -6
  60. package/dist/index.d.ts +2 -2
  61. package/dist/index.js +31 -31
  62. package/dist/{init-opencode-YRHLGHIE.js → init-opencode-HXXKEIQF.js} +5 -5
  63. package/dist/{issue-triage-BLZHWC6U.js → issue-triage-ENNKQYKQ.js} +6 -6
  64. package/dist/{model-config-helpers-OQEZU2ZG.js → model-config-helpers-QFWX2QAO.js} +2 -2
  65. package/dist/{openai-compat-adapter-GRJA6RPZ.js → openai-compat-adapter-N5WWPBGN.js} +5 -5
  66. package/dist/{outcome-store-adapter-7CKYWUZV.js → outcome-store-adapter-Y6MS4JJK.js} +2 -2
  67. package/dist/{pr-reviewer-helpers-LKHPRW3X.js → pr-reviewer-helpers-I6XFNU74.js} +4 -4
  68. package/dist/{registry-command-4LP4OSND.js → registry-command-W7UHEQ6D.js} +2 -2
  69. package/dist/{repo-security-plan-SOFUCHO4.js → repo-security-plan-MENT6MS6.js} +3 -3
  70. package/dist/{research-helpers-synthesize-SXNAJWHX.js → research-helpers-synthesize-BX4W3OA7.js} +4 -4
  71. package/dist/{routing-memory-TWCXFPAD.js → routing-memory-7VHOAFNA.js} +2 -2
  72. package/dist/{session-memory-YVT5M4AN.js → session-memory-3EYP3GNQ.js} +3 -3
  73. package/dist/{setup-config-JGHFR4P3.js → setup-config-VN2IOJ7S.js} +3 -3
  74. package/dist/{setup-custom-api-EFAWNJ2D.js → setup-custom-api-U3IGIJI7.js} +3 -3
  75. package/dist/{setup-data-dir-Z4IQNMRC.js → setup-data-dir-5YHUK3MZ.js} +14 -14
  76. package/dist/{tool-memory-5Y3HKHCB.js → tool-memory-YYFE4EXT.js} +5 -5
  77. package/dist/{unified-registry-IDUII5J7.js → unified-registry-IEPJHJHO.js} +10 -10
  78. package/dist/{weather-report-KA5RT57Q.js → weather-report-PJZFHSB7.js} +2 -2
  79. package/node_modules/express-rate-limit/dist/index.cjs +9 -7
  80. package/node_modules/express-rate-limit/dist/index.mjs +9 -7
  81. package/node_modules/express-rate-limit/package.json +9 -9
  82. package/package.json +1 -1
  83. package/dist/chunk-3UWT434E.js.map +0 -1
  84. package/dist/chunk-GPRYEKAA.js.map +0 -1
  85. /package/dist/{ast-rule-runner-3QRCP53C.js.map → ast-rule-runner-RL6XHXJB.js.map} +0 -0
  86. /package/dist/{child-mcp-config-NWPUDUVE.js.map → child-mcp-config-ADRNVJJB.js.map} +0 -0
  87. /package/dist/{chunk-6LWUJOAS.js.map → chunk-3LE73MVE.js.map} +0 -0
  88. /package/dist/{chunk-R75NZRON.js.map → chunk-63YC42C2.js.map} +0 -0
  89. /package/dist/{chunk-DCPCO2XG.js.map → chunk-6JMULY2R.js.map} +0 -0
  90. /package/dist/{chunk-PZMODRBC.js.map → chunk-A7XALVN3.js.map} +0 -0
  91. /package/dist/{chunk-7HHXY7LM.js.map → chunk-AX5DBV3M.js.map} +0 -0
  92. /package/dist/{chunk-53XY7YJD.js.map → chunk-BHH3PKI6.js.map} +0 -0
  93. /package/dist/{chunk-EFZRQ67X.js.map → chunk-DYV7XS26.js.map} +0 -0
  94. /package/dist/{chunk-5CUI42NO.js.map → chunk-FMIALWCD.js.map} +0 -0
  95. /package/dist/{chunk-2BZXKNLN.js.map → chunk-G2OI3KA4.js.map} +0 -0
  96. /package/dist/{chunk-SFWQ72ZS.js.map → chunk-G667EEZ7.js.map} +0 -0
  97. /package/dist/{chunk-2HYJTIDY.js.map → chunk-GU2HV6KI.js.map} +0 -0
  98. /package/dist/{chunk-PY6HJQYC.js.map → chunk-HL3EHBKJ.js.map} +0 -0
  99. /package/dist/{chunk-VVMSE5LF.js.map → chunk-KSSPY5KX.js.map} +0 -0
  100. /package/dist/{chunk-66BE4KF4.js.map → chunk-LAUBKK25.js.map} +0 -0
  101. /package/dist/{chunk-HUYVIUF3.js.map → chunk-MTB5BXYJ.js.map} +0 -0
  102. /package/dist/{chunk-WFMMJWMO.js.map → chunk-NVE262E3.js.map} +0 -0
  103. /package/dist/{chunk-I7VX7JWV.js.map → chunk-NY7IMAG5.js.map} +0 -0
  104. /package/dist/{chunk-SKM75Y7E.js.map → chunk-NZA7EIZO.js.map} +0 -0
  105. /package/dist/{chunk-D33IH5VS.js.map → chunk-OYAHRYFI.js.map} +0 -0
  106. /package/dist/{chunk-QARJHIQM.js.map → chunk-PYAR3CVN.js.map} +0 -0
  107. /package/dist/{chunk-QTRPH2ZF.js.map → chunk-QKWZZM2D.js.map} +0 -0
  108. /package/dist/{chunk-YOT3XEZM.js.map → chunk-RR2Y2HVZ.js.map} +0 -0
  109. /package/dist/{chunk-T4WTZTZY.js.map → chunk-S4QYN2AV.js.map} +0 -0
  110. /package/dist/{chunk-VZ7YZ2EF.js.map → chunk-TWQEUAUG.js.map} +0 -0
  111. /package/dist/{chunk-YRZV6KXZ.js.map → chunk-WAPGSEIM.js.map} +0 -0
  112. /package/dist/{chunk-IGYZQEKM.js.map → chunk-WILZPMEM.js.map} +0 -0
  113. /package/dist/{chunk-S6XQFO4A.js.map → chunk-WTMLF7QR.js.map} +0 -0
  114. /package/dist/{chunk-B3RAA47W.js.map → chunk-Y34BCT36.js.map} +0 -0
  115. /package/dist/{chunk-V6AJCRAU.js.map → chunk-YIZ25Y4C.js.map} +0 -0
  116. /package/dist/{chunk-AFJE7K6Q.js.map → chunk-YUA3UBXT.js.map} +0 -0
  117. /package/dist/{chunk-377L2ZEK.js.map → chunk-ZBWKLJNT.js.map} +0 -0
  118. /package/dist/{cli-circuit-breaker-VWARWNGU.js.map → cli-circuit-breaker-CDJKHR7R.js.map} +0 -0
  119. /package/dist/{cli-readiness-S23DWZCS.js.map → cli-readiness-7I5BYWLA.js.map} +0 -0
  120. /package/dist/{cli-server-gateway-DJXSHHXA.js.map → cli-server-gateway-626TKNQJ.js.map} +0 -0
  121. /package/dist/{codebase-search-VMKI7FW4.js.map → codebase-search-YVO7BC33.js.map} +0 -0
  122. /package/dist/{composite-router-3CBLBUGZ.js.map → composite-router-YWSL4Y62.js.map} +0 -0
  123. /package/dist/{consensus-vote-JMWTJO4M.js.map → consensus-vote-O7WRAIMH.js.map} +0 -0
  124. /package/dist/{context-retriever-P6ZE6UXS.js.map → context-retriever-CBOMGQAP.js.map} +0 -0
  125. /package/dist/{doctor-deep-HBIDPGWI.js.map → doctor-deep-2N3BHH6I.js.map} +0 -0
  126. /package/dist/{doctor-gateway-report-FWV7UN2Q.js.map → doctor-gateway-report-MRPZ7S34.js.map} +0 -0
  127. /package/dist/{doctor-live-676TWMP6.js.map → doctor-live-JBXIFI7A.js.map} +0 -0
  128. /package/dist/{expert-bridge-3VWOHLC7.js.map → expert-bridge-TOMOJTMC.js.map} +0 -0
  129. /package/dist/{factory-A44THDRG.js.map → factory-H6IIGGFG.js.map} +0 -0
  130. /package/dist/{factory-YPJXDMN4.js.map → factory-OLT24RLU.js.map} +0 -0
  131. /package/dist/{improvement-review-FIKPTCPE.js.map → improvement-review-UQUJ4ZR5.js.map} +0 -0
  132. /package/dist/{init-opencode-YRHLGHIE.js.map → init-opencode-HXXKEIQF.js.map} +0 -0
  133. /package/dist/{issue-triage-BLZHWC6U.js.map → issue-triage-ENNKQYKQ.js.map} +0 -0
  134. /package/dist/{model-config-helpers-OQEZU2ZG.js.map → model-config-helpers-QFWX2QAO.js.map} +0 -0
  135. /package/dist/{openai-compat-adapter-GRJA6RPZ.js.map → openai-compat-adapter-N5WWPBGN.js.map} +0 -0
  136. /package/dist/{outcome-store-adapter-7CKYWUZV.js.map → outcome-store-adapter-Y6MS4JJK.js.map} +0 -0
  137. /package/dist/{pr-reviewer-helpers-LKHPRW3X.js.map → pr-reviewer-helpers-I6XFNU74.js.map} +0 -0
  138. /package/dist/{registry-command-4LP4OSND.js.map → registry-command-W7UHEQ6D.js.map} +0 -0
  139. /package/dist/{repo-security-plan-SOFUCHO4.js.map → repo-security-plan-MENT6MS6.js.map} +0 -0
  140. /package/dist/{research-helpers-synthesize-SXNAJWHX.js.map → research-helpers-synthesize-BX4W3OA7.js.map} +0 -0
  141. /package/dist/{routing-memory-TWCXFPAD.js.map → routing-memory-7VHOAFNA.js.map} +0 -0
  142. /package/dist/{session-memory-YVT5M4AN.js.map → session-memory-3EYP3GNQ.js.map} +0 -0
  143. /package/dist/{setup-config-JGHFR4P3.js.map → setup-config-VN2IOJ7S.js.map} +0 -0
  144. /package/dist/{setup-custom-api-EFAWNJ2D.js.map → setup-custom-api-U3IGIJI7.js.map} +0 -0
  145. /package/dist/{setup-data-dir-Z4IQNMRC.js.map → setup-data-dir-5YHUK3MZ.js.map} +0 -0
  146. /package/dist/{tool-memory-5Y3HKHCB.js.map → tool-memory-YYFE4EXT.js.map} +0 -0
  147. /package/dist/{unified-registry-IDUII5J7.js.map → unified-registry-IEPJHJHO.js.map} +0 -0
  148. /package/dist/{weather-report-KA5RT57Q.js.map → weather-report-PJZFHSB7.js.map} +0 -0
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  getGlobalRegistry
3
- } from "./chunk-PY6HJQYC.js";
3
+ } from "./chunk-HL3EHBKJ.js";
4
4
  import {
5
5
  GatewayRediscovery,
6
6
  discoverGatewayOnce,
7
7
  setGatewayRediscovery
8
- } from "./chunk-IGYZQEKM.js";
8
+ } from "./chunk-WILZPMEM.js";
9
9
  import {
10
10
  GatewayHostRefusedError,
11
11
  buildOpenAICompatAdapters,
12
12
  readOpenAICompatEndpoint,
13
13
  readOpenAICompatEnv
14
- } from "./chunk-SKM75Y7E.js";
14
+ } from "./chunk-NZA7EIZO.js";
15
15
  import {
16
16
  hostnameOf
17
- } from "./chunk-D33IH5VS.js";
17
+ } from "./chunk-OYAHRYFI.js";
18
18
  import {
19
19
  getDefaultCliCircuitBreakerRegistry
20
- } from "./chunk-V6AJCRAU.js";
20
+ } from "./chunk-YIZ25Y4C.js";
21
21
  import {
22
22
  createGatewayArmAdapter,
23
23
  gatewayEndpointRejection,
@@ -26,7 +26,7 @@ import {
26
26
  resolveGatewayDefault,
27
27
  setGatewayCatalog,
28
28
  setGatewaySlotCatalog
29
- } from "./chunk-GPRYEKAA.js";
29
+ } from "./chunk-EBOAFTOG.js";
30
30
  import {
31
31
  detectSandbox,
32
32
  parseBoolEnv
@@ -1043,4 +1043,4 @@ export {
1043
1043
  registerGatewayArm,
1044
1044
  wireGateway
1045
1045
  };
1046
- //# sourceMappingURL=chunk-5CUI42NO.js.map
1046
+ //# sourceMappingURL=chunk-FMIALWCD.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getRandomProvider,
3
3
  getTimeProvider
4
- } from "./chunk-GPRYEKAA.js";
4
+ } from "./chunk-EBOAFTOG.js";
5
5
 
6
6
  // src/utils/id-utils.ts
7
7
  import { randomUUID } from "node:crypto";
@@ -24,4 +24,4 @@ export {
24
24
  generateHyphenId,
25
25
  generateUUID
26
26
  };
27
- //# sourceMappingURL=chunk-2BZXKNLN.js.map
27
+ //# sourceMappingURL=chunk-G2OI3KA4.js.map
@@ -5,14 +5,14 @@ import {
5
5
  getCurrentRequestContext,
6
6
  runWithRequestContext,
7
7
  serverCallerInfo
8
- } from "./chunk-B3RAA47W.js";
8
+ } from "./chunk-Y34BCT36.js";
9
9
  import {
10
10
  DEFAULT_EXECUTION_MODE
11
11
  } from "./chunk-TYLE7Z2S.js";
12
12
  import {
13
13
  sanitizeErrorDetails,
14
14
  sanitizeStringLeaves
15
- } from "./chunk-PZMODRBC.js";
15
+ } from "./chunk-A7XALVN3.js";
16
16
  import {
17
17
  SecurityError,
18
18
  TOOL_MANIFEST,
@@ -26,7 +26,7 @@ import {
26
26
  getTimeProvider,
27
27
  ok,
28
28
  resolveInsideRoot
29
- } from "./chunk-GPRYEKAA.js";
29
+ } from "./chunk-EBOAFTOG.js";
30
30
  import {
31
31
  getNexusDataDir,
32
32
  parseBoolValue
@@ -2343,4 +2343,4 @@ export {
2343
2343
  DEFAULT_CONSENSUS_CONFIG,
2344
2344
  ConsensusMetricsSchema
2345
2345
  };
2346
- //# sourceMappingURL=chunk-SFWQ72ZS.js.map
2346
+ //# sourceMappingURL=chunk-G667EEZ7.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  assessReputation,
6
6
  sanitizeInput
7
- } from "./chunk-I7VX7JWV.js";
7
+ } from "./chunk-NY7IMAG5.js";
8
8
  import {
9
9
  allOf
10
10
  } from "./chunk-EZNIYU5T.js";
@@ -13,7 +13,7 @@ import {
13
13
  err,
14
14
  getTimeProvider,
15
15
  ok
16
- } from "./chunk-GPRYEKAA.js";
16
+ } from "./chunk-EBOAFTOG.js";
17
17
 
18
18
  // src/dogfooding/pr-reviewer-helpers.ts
19
19
  import { randomUUID } from "node:crypto";
@@ -477,4 +477,4 @@ export {
477
477
  createFailedReview,
478
478
  reviewPostingBlock
479
479
  };
480
- //# sourceMappingURL=chunk-2HYJTIDY.js.map
480
+ //# sourceMappingURL=chunk-GU2HV6KI.js.map
@@ -3,7 +3,7 @@ import {
3
3
  gatewayDiscoveryGeneration,
4
4
  gatewayDiscoveryStatus,
5
5
  getAvailabilityCache
6
- } from "./chunk-IGYZQEKM.js";
6
+ } from "./chunk-WILZPMEM.js";
7
7
  import {
8
8
  extractSystemPrompt
9
9
  } from "./chunk-QZUG667L.js";
@@ -26,14 +26,14 @@ import {
26
26
  validateApiKeyPresence,
27
27
  validateOpenAICompatBaseUrl,
28
28
  withGatewayUsageRecording
29
- } from "./chunk-SKM75Y7E.js";
29
+ } from "./chunk-NZA7EIZO.js";
30
30
  import {
31
31
  hostnameOf,
32
32
  readCustomApiSurface,
33
33
  readDirectOpenAiSurface,
34
34
  readGatewayEnv,
35
35
  redactApiKey
36
- } from "./chunk-D33IH5VS.js";
36
+ } from "./chunk-OYAHRYFI.js";
37
37
  import {
38
38
  probeCli
39
39
  } from "./chunk-C73VZSC5.js";
@@ -48,14 +48,14 @@ import {
48
48
  getTimeoutForTask,
49
49
  listModelsForCli,
50
50
  spawnCwd
51
- } from "./chunk-66BE4KF4.js";
51
+ } from "./chunk-LAUBKK25.js";
52
52
  import {
53
53
  getCliCircuitBreakerSnapshot,
54
54
  getDefaultCliCircuitBreakerRegistry
55
- } from "./chunk-V6AJCRAU.js";
55
+ } from "./chunk-YIZ25Y4C.js";
56
56
  import {
57
57
  sanitizeOutput
58
- } from "./chunk-PZMODRBC.js";
58
+ } from "./chunk-A7XALVN3.js";
59
59
  import {
60
60
  CircularBuffer,
61
61
  CliCircuitBreaker,
@@ -126,7 +126,7 @@ import {
126
126
  unenforcedAccessModeRefusal,
127
127
  warnIfGatewayCostUndeclared,
128
128
  withEnforcedAccessMode
129
- } from "./chunk-GPRYEKAA.js";
129
+ } from "./chunk-EBOAFTOG.js";
130
130
  import {
131
131
  parseBoolEnv
132
132
  } from "./chunk-CH6IBWXH.js";
@@ -5196,4 +5196,4 @@ export {
5196
5196
  getGlobalRegistry,
5197
5197
  resetGlobalRegistry
5198
5198
  };
5199
- //# sourceMappingURL=chunk-PY6HJQYC.js.map
5199
+ //# sourceMappingURL=chunk-HL3EHBKJ.js.map
@@ -161,23 +161,30 @@ function isSourceFile(name) {
161
161
  SUPPORTED_EXTENSIONS.includes(ext) && !name.endsWith(".test.ts") && !name.endsWith(".test.tsx") && !name.endsWith(".d.ts")
162
162
  );
163
163
  }
164
+ var EXCLUDED_DIR_NAMES = /* @__PURE__ */ new Set(["node_modules", "dist"]);
165
+ function isWalkedDir(name) {
166
+ return !name.startsWith(".") && !EXCLUDED_DIR_NAMES.has(name);
167
+ }
164
168
  async function findSourceFiles(dir, maxDepth) {
165
- if (maxDepth <= 0) return { files: [], skippedDirs: 1 };
166
- const files = [];
167
- let skippedDirs = 0;
169
+ const result = { files: [], skippedDirs: 0 };
170
+ await collectSourceFiles(dir, maxDepth, result);
171
+ return result;
172
+ }
173
+ async function collectSourceFiles(dir, maxDepth, acc) {
174
+ if (maxDepth <= 0) {
175
+ acc.skippedDirs += 1;
176
+ return;
177
+ }
168
178
  const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
169
179
  for (const entry of entries) {
170
180
  const fullPath = resolve(dir, entry.name);
171
- if (entry.isDirectory() && entry.name !== "node_modules" && entry.name !== "dist") {
172
- const sub = await findSourceFiles(fullPath, maxDepth - 1);
173
- files.push(...sub.files);
174
- skippedDirs += sub.skippedDirs;
181
+ if (entry.isDirectory() && isWalkedDir(entry.name)) {
182
+ await collectSourceFiles(fullPath, maxDepth - 1, acc);
175
183
  }
176
184
  if (entry.isFile() && isSourceFile(entry.name)) {
177
- files.push(fullPath);
185
+ acc.files.push(fullPath);
178
186
  }
179
187
  }
180
- return { files, skippedDirs };
181
188
  }
182
189
  function scoreMatch(symbolName, query) {
183
190
  const nameLower = symbolName.toLowerCase();
@@ -302,4 +309,4 @@ export {
302
309
  findSourceFiles,
303
310
  CodebaseIndex
304
311
  };
305
- //# sourceMappingURL=chunk-3UWT434E.js.map
312
+ //# sourceMappingURL=chunk-I2THTVA4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/indexer/codebase-search.ts","../src/indexer/symbol-extractor.ts"],"sourcesContent":["/**\n * Codebase search — keyword search across symbol indices.\n *\n * Builds an in-memory symbol index for a directory of TS/JS files,\n * then supports keyword search, file summaries, and symbol lookup.\n *\n * Inspired by Augment Code's Context Engine. Uses the existing\n * extractSymbols() function for AST parsing.\n *\n * @module indexer/codebase-search\n */\n\nimport { readdir } from 'node:fs/promises';\nimport { resolve, extname, relative } from 'node:path';\nimport {\n extractSymbols,\n SUPPORTED_EXTENSIONS,\n type CodeSymbol,\n type SymbolExtractionResult,\n} from './symbol-extractor.js';\n\n/** A symbol with its source file path. */\nexport interface IndexedSymbol extends CodeSymbol {\n /** Relative file path from the indexed root. */\n filePath: string;\n}\n\n/** Search result with relevance scoring. */\nexport interface SearchResult {\n symbol: IndexedSymbol;\n /** Relevance score (higher = better match). */\n score: number;\n /** How the query matched (exact, prefix, substring, word). */\n matchType: 'exact' | 'prefix' | 'substring' | 'word';\n}\n\n/** File summary — compact overview of a source file. */\nexport interface FileSummary {\n filePath: string;\n totalLines: number;\n exportedSymbols: number;\n privateSymbols: number;\n kinds: Record<string, number>;\n}\n\n/** Index statistics. */\nexport interface IndexStats {\n totalFiles: number;\n totalSymbols: number;\n indexedAt: string;\n /** Directories not descended into because `maxDepth` was exhausted (#4243). */\n skippedDirs: number;\n}\n\n/** Default recursion depth for `CodebaseIndex.index()` (#4243 — was hardcoded 4). */\nexport const DEFAULT_INDEX_MAX_DEPTH = 24;\n/** Upper clamp for caller-supplied `maxDepth` to bound worst-case tree-walk cost. */\nexport const MAX_INDEX_MAX_DEPTH = 64;\n\n// Score weights for different match types\nconst SCORE_EXACT = 20;\nconst SCORE_PREFIX = 10;\nconst SCORE_WORD = 5;\nconst SCORE_SUBSTRING = 2;\nconst SCORE_EXPORTED_BONUS = 3;\n\nfunction isSourceFile(name: string): boolean {\n const ext = extname(name).toLowerCase();\n return (\n // #4640: take the list from the extractor rather than keeping a copy. The\n // two sat on opposite sides of the same decision — `extract_symbols` reaches\n // the extension gate at symbol-extractor.ts:162, while this sweep filters\n // *before* it — so a language added to SUPPORTED_EXTENSIONS was parsed by\n // one tool and silently never indexed by the other.\n SUPPORTED_EXTENSIONS.includes(ext) &&\n !name.endsWith('.test.ts') &&\n !name.endsWith('.test.tsx') &&\n !name.endsWith('.d.ts')\n );\n}\n\n/** Result of a recursive source-file walk: the files found plus a truncation signal. */\nexport interface FindSourceFilesResult {\n files: string[];\n /** Count of directories that were NOT descended into because maxDepth hit 0. */\n skippedDirs: number;\n}\n\n/** Directory names the walk never descends into, in addition to every dot-directory. */\nconst EXCLUDED_DIR_NAMES: ReadonlySet<string> = new Set(['node_modules', 'dist']);\n\n/**\n * Whether the walk descends into a directory entry. Dot-directories are skipped\n * as a class (#7178): `.git` and the gitignored `.nexus-agents/worktrees` held\n * 147k `.ts` files at the repo root, none of them the caller's source. The rule\n * applies to entries only, so a caller may still root the walk at a dot-dir.\n */\nfunction isWalkedDir(name: string): boolean {\n return !name.startsWith('.') && !EXCLUDED_DIR_NAMES.has(name);\n}\n\n/**\n * Recursively collect TS/JS source files under `dir`, bounded by `maxDepth`,\n * skipping dot-directories, `node_modules`/`dist` and test/declaration files.\n * Exported so the `search_usages` tool (#4265) reuses the exact same\n * source-file set the symbol index walks — keeping the two tools' scopes\n * apples-to-apples (DRY).\n */\nexport async function findSourceFiles(\n dir: string,\n maxDepth: number\n): Promise<FindSourceFilesResult> {\n const result: FindSourceFilesResult = { files: [], skippedDirs: 0 };\n await collectSourceFiles(dir, maxDepth, result);\n return result;\n}\n\n/**\n * Walk into a shared accumulator. Appending per file, rather than\n * `files.push(...sub.files)`, keeps the walk safe on large trees: a spread\n * passes every element as a call argument and throws \"Maximum call stack size\n * exceeded\" past roughly 120k entries (#7178).\n */\nasync function collectSourceFiles(\n dir: string,\n maxDepth: number,\n acc: FindSourceFilesResult\n): Promise<void> {\n if (maxDepth <= 0) {\n acc.skippedDirs += 1;\n return;\n }\n const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const fullPath = resolve(dir, entry.name);\n if (entry.isDirectory() && isWalkedDir(entry.name)) {\n await collectSourceFiles(fullPath, maxDepth - 1, acc);\n }\n if (entry.isFile() && isSourceFile(entry.name)) {\n acc.files.push(fullPath);\n }\n }\n}\n\nfunction scoreMatch(symbolName: string, query: string): SearchResult['score'] | null {\n const nameLower = symbolName.toLowerCase();\n const queryLower = query.toLowerCase();\n\n if (nameLower === queryLower) return SCORE_EXACT;\n if (nameLower.startsWith(queryLower)) return SCORE_PREFIX;\n\n // Word boundary match (camelCase splitting)\n const words = symbolName\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .split(/[\\s_-]+/);\n if (words.some((w) => w === queryLower)) return SCORE_WORD;\n\n if (nameLower.includes(queryLower)) return SCORE_SUBSTRING;\n\n return null;\n}\n\nfunction getMatchType(score: number): SearchResult['matchType'] {\n if (score >= SCORE_EXACT) return 'exact';\n if (score >= SCORE_PREFIX) return 'prefix';\n if (score >= SCORE_WORD) return 'word';\n return 'substring';\n}\n\n/** In-memory codebase symbol index. */\nexport class CodebaseIndex {\n private readonly symbols: IndexedSymbol[] = [];\n private readonly fileResults = new Map<string, SymbolExtractionResult>();\n private readonly rootDir: string;\n private skippedDirs = 0;\n\n constructor(rootDir: string) {\n this.rootDir = rootDir;\n }\n\n /**\n * Index all TS/JS source files in the directory.\n *\n * `maxDepth` is clamped to `[1, MAX_INDEX_MAX_DEPTH]` so a caller-supplied\n * value can't force an unbounded tree-walk (#4243).\n */\n async index(maxDepth: number = DEFAULT_INDEX_MAX_DEPTH): Promise<IndexStats> {\n const clampedDepth = Math.min(Math.max(maxDepth, 1), MAX_INDEX_MAX_DEPTH);\n const { files, skippedDirs } = await findSourceFiles(this.rootDir, clampedDepth);\n this.skippedDirs = skippedDirs;\n\n for (const file of files) {\n const result = await extractSymbols(file);\n const relPath = relative(this.rootDir, file);\n this.fileResults.set(relPath, result);\n\n for (const symbol of result.symbols) {\n this.symbols.push({ ...symbol, filePath: relPath });\n }\n }\n\n return {\n totalFiles: files.length,\n totalSymbols: this.symbols.length,\n indexedAt: new Date().toISOString(),\n skippedDirs,\n };\n }\n\n /** Search symbols by keyword. Returns top N results sorted by relevance. */\n search(query: string, limit = 20): SearchResult[] {\n return this.searchWithTotal(query, limit).results;\n }\n\n /**\n * Search symbols, reporting how many matched BEFORE the limit was applied.\n *\n * `search` discards that number, so a caller could not tell \"20 results\" from\n * \"the first 20 of 340\" — and `search_codebase` reported the former.\n * The sibling `search_usages` has carried `truncated`/`omittedMatches`/`limit`\n * since it was written; this is the seam that lets `search_codebase` say the\n * same thing.\n */\n searchWithTotal(query: string, limit = 20): { results: SearchResult[]; total: number } {\n const results: SearchResult[] = [];\n\n for (const symbol of this.symbols) {\n const baseScore = scoreMatch(symbol.name, query);\n if (baseScore === null) continue;\n\n const bonus = symbol.exported ? SCORE_EXPORTED_BONUS : 0;\n results.push({\n symbol,\n score: baseScore + bonus,\n matchType: getMatchType(baseScore),\n });\n }\n\n const sorted = results.sort((a, b) => b.score - a.score);\n return { results: sorted.slice(0, limit), total: sorted.length };\n }\n\n /** Get a compact summary of a file's symbols. */\n getFileSummary(filePath: string): FileSummary | undefined {\n const result = this.fileResults.get(filePath);\n if (result === undefined) return undefined;\n\n const kinds: Record<string, number> = {};\n let exported = 0;\n let priv = 0;\n\n for (const s of result.symbols) {\n kinds[s.kind] = (kinds[s.kind] ?? 0) + 1;\n if (s.exported) exported++;\n else priv++;\n }\n\n return {\n filePath,\n totalLines: result.totalLines,\n exportedSymbols: exported,\n privateSymbols: priv,\n kinds,\n };\n }\n\n /** List all indexed files with symbol counts. */\n listFiles(): Array<{ path: string; symbols: number; lines: number }> {\n return [...this.fileResults.entries()].map(([path, result]) => ({\n path,\n symbols: result.symbols.length,\n lines: result.totalLines,\n }));\n }\n\n /** Get index statistics. */\n get stats(): { files: number; symbols: number; skippedDirs: number } {\n return {\n files: this.fileResults.size,\n symbols: this.symbols.length,\n skippedDirs: this.skippedDirs,\n };\n }\n}\n","/**\n * AST symbol extraction for token-efficient code retrieval.\n *\n * Uses TypeScript's compiler API to extract function, class, method,\n * interface, and type definitions from source files.\n *\n * Token savings: ~80-99% vs reading full files.\n * The compiler is ts-morph's bundled copy, loaded on first call through\n * `indexer/lazy-compiler.ts` (#6405) — never at import, and never the\n * standalone `typescript` package (a second 76 MB copy).\n *\n * @module indexer/symbol-extractor\n */\n\nimport { SUPPORTED_EXTENSIONS } from './supported-extensions.js';\nexport { SUPPORTED_EXTENSIONS } from './supported-extensions.js';\n\nimport { readFile } from 'node:fs/promises';\nimport { extname } from 'node:path';\nimport type { ts } from 'ts-morph';\nimport { getTypescript } from './lazy-compiler.js';\n\n/** A symbol extracted from source code. */\nexport interface CodeSymbol {\n /** Symbol name */\n name: string;\n /** Symbol kind */\n kind: 'function' | 'class' | 'method' | 'interface' | 'type' | 'variable' | 'enum';\n /** Start line (1-based) */\n startLine: number;\n /** End line (1-based) */\n endLine: number;\n /** Full source text of the symbol */\n text: string;\n /** Whether the symbol is exported */\n exported: boolean;\n}\n\n/** Result of extracting symbols from a file. */\nexport interface SymbolExtractionResult {\n filePath: string;\n symbols: CodeSymbol[];\n totalLines: number;\n totalChars: number;\n symbolChars: number;\n savingsPercent: number;\n /**\n * Whether the file was actually parsed (#4517).\n *\n * `false` means the extension is not supported, so `symbols: []` reports\n * that nothing was READ — not that nothing is there. An unsupported file and\n * a genuinely symbol-free file previously returned identical results, and\n * the tool guessed between them wrongly: a valid TypeScript barrel of 20\n * re-exports was reported as possibly-not-TypeScript.\n */\n parsed: boolean;\n}\n\nfunction getKind(node: ts.Node): CodeSymbol['kind'] | null {\n const ts = getTypescript();\n if (ts.isFunctionDeclaration(node)) return 'function';\n if (ts.isClassDeclaration(node)) return 'class';\n if (ts.isInterfaceDeclaration(node)) return 'interface';\n if (ts.isTypeAliasDeclaration(node)) return 'type';\n if (ts.isEnumDeclaration(node)) return 'enum';\n if (ts.isMethodDeclaration(node)) return 'method';\n if (ts.isVariableStatement(node)) return 'variable';\n return null;\n}\n\nfunction getName(node: ts.Node): string {\n const ts = getTypescript();\n if (\n ts.isFunctionDeclaration(node) ||\n ts.isClassDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isEnumDeclaration(node) ||\n ts.isMethodDeclaration(node)\n ) {\n const nameNode = (node as ts.NamedDeclaration).name;\n return nameNode ? nameNode.getText() : '<anonymous>';\n }\n if (ts.isVariableStatement(node)) {\n const decls = node.declarationList.declarations;\n const firstDecl = decls[0];\n if (firstDecl !== undefined) {\n return firstDecl.name.getText();\n }\n }\n return '<anonymous>';\n}\n\nfunction isExported(node: ts.Node): boolean {\n const ts = getTypescript();\n const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;\n if (modifiers) {\n return modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n }\n return false;\n}\n\nfunction visitNode(node: ts.Node, sourceFile: ts.SourceFile, symbols: CodeSymbol[]): void {\n const ts = getTypescript();\n const kind = getKind(node);\n if (kind !== null) {\n const name = getName(node);\n if (name !== '<anonymous>') {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n symbols.push({\n name,\n kind,\n startLine: start.line + 1,\n endLine: end.line + 1,\n text: node.getText(sourceFile),\n exported: isExported(node),\n });\n }\n }\n if (ts.isClassDeclaration(node)) {\n visitClassMembers(node, sourceFile, symbols);\n return;\n }\n ts.forEachChild(node, (child) => {\n visitNode(child, sourceFile, symbols);\n });\n}\n\nfunction visitClassMembers(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n symbols: CodeSymbol[]\n): void {\n const ts = getTypescript();\n for (const member of node.members) {\n if (ts.isMethodDeclaration(member) || ts.isPropertyDeclaration(member)) {\n const memberName = member.name.getText();\n if (memberName !== '<anonymous>') {\n const start = sourceFile.getLineAndCharacterOfPosition(member.getStart());\n const end = sourceFile.getLineAndCharacterOfPosition(member.getEnd());\n symbols.push({\n name: memberName,\n kind: 'method',\n startLine: start.line + 1,\n endLine: end.line + 1,\n text: member.getText(sourceFile),\n exported: false,\n });\n }\n }\n }\n}\n\nfunction computeSavings(totalChars: number, symbolChars: number): number {\n return totalChars > 0 ? Math.round(100 * (1 - symbolChars / totalChars) * 10) / 10 : 0;\n}\n\n/**\n * Extract symbols from a TypeScript/JavaScript file.\n */\nexport async function extractSymbols(filePath: string): Promise<SymbolExtractionResult> {\n const ext = extname(filePath).toLowerCase();\n if (!SUPPORTED_EXTENSIONS.includes(ext)) {\n return {\n filePath,\n symbols: [],\n totalLines: 0,\n totalChars: 0,\n symbolChars: 0,\n savingsPercent: 0,\n parsed: false,\n };\n }\n\n const ts = getTypescript();\n const source = await readFile(filePath, 'utf-8');\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n const symbols: CodeSymbol[] = [];\n\n ts.forEachChild(sourceFile, (node) => {\n visitNode(node, sourceFile, symbols);\n });\n\n const totalChars = source.length;\n const symbolChars = symbols.reduce((sum, s) => sum + s.text.length, 0);\n\n return {\n filePath,\n symbols,\n totalLines: source.split('\\n').length,\n totalChars,\n symbolChars,\n savingsPercent: computeSavings(totalChars, symbolChars),\n parsed: true,\n };\n}\n\n/**\n * Why {@link extractSymbolIndex} produced no index (#4517).\n *\n * `unsupported` and `no-declarations` are different facts about the world:\n * the first says the file was never read, the second says it was read and\n * genuinely declares nothing locally — a re-export barrel, typically. Callers\n * that collapse them tell the user to check a file type that was never the\n * problem.\n */\nexport type EmptyIndexReason = 'unsupported' | 'no-declarations';\n\n/** A symbol index, or the reason there is none. */\nexport type SymbolIndexResult =\n | { readonly kind: 'index'; readonly index: string }\n | { readonly kind: 'empty'; readonly reason: EmptyIndexReason };\n\n/**\n * Extract a compact symbol index, reporting why when there is nothing to show.\n *\n * Names + locations only, no source text — the minimal representation for LLM\n * context (~95%+ token savings). Replaced the earlier `extractSymbolIndex`,\n * which returned a bare `''` for both \"could not read\" and \"read, found\n * nothing\" and so could not tell a caller which had happened.\n */\nexport async function extractSymbolIndexResult(filePath: string): Promise<SymbolIndexResult> {\n const result = await extractSymbols(filePath);\n if (!result.parsed) return { kind: 'empty', reason: 'unsupported' };\n if (result.symbols.length === 0) return { kind: 'empty', reason: 'no-declarations' };\n return { kind: 'index', index: renderIndex(filePath, result) };\n}\n\nfunction renderIndex(filePath: string, result: SymbolExtractionResult): string {\n const lines = result.symbols.map((s) => {\n const exp = s.exported ? 'export ' : '';\n return `${exp}${s.kind} ${s.name} (L${String(s.startLine)}-${String(s.endLine)})`;\n });\n return `// ${filePath} — ${String(result.symbols.length)} symbols\\n${lines.join('\\n')}`;\n}\n"],"mappings":"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","names":["extname","extname"]}
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  IN_FAMILY_FALLBACK_OPTION
3
- } from "./chunk-66BE4KF4.js";
3
+ } from "./chunk-LAUBKK25.js";
4
4
  import {
5
5
  sanitizeErrorDetails
6
- } from "./chunk-PZMODRBC.js";
6
+ } from "./chunk-A7XALVN3.js";
7
7
  import {
8
8
  classifyExtractedError,
9
9
  getTimeProvider,
10
10
  isTimeoutText
11
- } from "./chunk-GPRYEKAA.js";
11
+ } from "./chunk-EBOAFTOG.js";
12
12
  import {
13
13
  resolveClassGuardMs
14
14
  } from "./chunk-4PN3UVZV.js";
@@ -156,4 +156,4 @@ export {
156
156
  SERVES_PROBE_PROMPT,
157
157
  probeServes
158
158
  };
159
- //# sourceMappingURL=chunk-VVMSE5LF.js.map
159
+ //# sourceMappingURL=chunk-KSSPY5KX.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  generateHyphenId
3
- } from "./chunk-2BZXKNLN.js";
3
+ } from "./chunk-G2OI3KA4.js";
4
4
  import {
5
5
  getDefaultCliCircuitBreakerRegistry
6
- } from "./chunk-V6AJCRAU.js";
6
+ } from "./chunk-YIZ25Y4C.js";
7
7
  import {
8
8
  sanitizeOutput
9
- } from "./chunk-PZMODRBC.js";
9
+ } from "./chunk-A7XALVN3.js";
10
10
  import {
11
11
  CLI_VERSION_REQUIREMENTS,
12
12
  DEFAULT_CAPABILITIES,
@@ -47,7 +47,7 @@ import {
47
47
  servesListedModel,
48
48
  unenforcedAccessModeRefusal,
49
49
  withEnforcedAccessMode
50
- } from "./chunk-GPRYEKAA.js";
50
+ } from "./chunk-EBOAFTOG.js";
51
51
  import {
52
52
  parseBoolValue
53
53
  } from "./chunk-CH6IBWXH.js";
@@ -1960,4 +1960,4 @@ export {
1960
1960
  IN_FAMILY_FALLBACK_OPTION,
1961
1961
  ClaudeCliAdapter
1962
1962
  };
1963
- //# sourceMappingURL=chunk-66BE4KF4.js.map
1963
+ //# sourceMappingURL=chunk-LAUBKK25.js.map
@@ -21,16 +21,16 @@ import {
21
21
  toolSuccess,
22
22
  withProgressHeartbeat,
23
23
  wrapToolWithTimeout
24
- } from "./chunk-SFWQ72ZS.js";
24
+ } from "./chunk-G667EEZ7.js";
25
25
  import {
26
26
  getToolMemory
27
- } from "./chunk-YOT3XEZM.js";
27
+ } from "./chunk-RR2Y2HVZ.js";
28
28
  import {
29
29
  allOf
30
30
  } from "./chunk-EZNIYU5T.js";
31
31
  import {
32
32
  VERSION
33
- } from "./chunk-B3RAA47W.js";
33
+ } from "./chunk-Y34BCT36.js";
34
34
  import {
35
35
  ModelBoundAdapter,
36
36
  UNVERIFIABLE_STDERR_RE,
@@ -41,28 +41,28 @@ import {
41
41
  getGlobalRegistry,
42
42
  isAbsentSeat,
43
43
  markUnverifiable
44
- } from "./chunk-PY6HJQYC.js";
44
+ } from "./chunk-HL3EHBKJ.js";
45
45
  import {
46
46
  ensureGatewayDiscovered
47
- } from "./chunk-IGYZQEKM.js";
47
+ } from "./chunk-WILZPMEM.js";
48
48
  import {
49
49
  isGatewayModelAdapter
50
- } from "./chunk-SKM75Y7E.js";
50
+ } from "./chunk-NZA7EIZO.js";
51
51
  import {
52
52
  CLI_TO_MODELSDEV_VENDOR,
53
53
  delay,
54
54
  getAbortObservation,
55
55
  sleep,
56
56
  withTimeout
57
- } from "./chunk-66BE4KF4.js";
57
+ } from "./chunk-LAUBKK25.js";
58
58
  import {
59
59
  getDefaultCliCircuitBreakerRegistry
60
- } from "./chunk-V6AJCRAU.js";
60
+ } from "./chunk-YIZ25Y4C.js";
61
61
  import {
62
62
  sanitizeErrorDetails,
63
63
  sanitizeOutput,
64
64
  sanitizeStringLeaves
65
- } from "./chunk-PZMODRBC.js";
65
+ } from "./chunk-A7XALVN3.js";
66
66
  import {
67
67
  AgentError,
68
68
  DecisionCostStore,
@@ -88,6 +88,7 @@ import {
88
88
  createLogger,
89
89
  createdOf,
90
90
  err,
91
+ findCanonicalModel,
91
92
  foldCompletionUsage,
92
93
  formatPercentage,
93
94
  formatZodError,
@@ -121,7 +122,7 @@ import {
121
122
  servedCostDetail,
122
123
  stepBus,
123
124
  voteRecordWriteFailedMessage
124
- } from "./chunk-GPRYEKAA.js";
125
+ } from "./chunk-EBOAFTOG.js";
125
126
  import {
126
127
  ensureLearningDir,
127
128
  getOutcomesFile
@@ -134,6 +135,7 @@ import {
134
135
  } from "./chunk-CH6IBWXH.js";
135
136
  import {
136
137
  CLI_NAMES,
138
+ CliNameSchema,
137
139
  MCP_TIMEOUTS,
138
140
  OPERATION_CLASSES,
139
141
  VOTE_TIMEOUTS,
@@ -6134,8 +6136,42 @@ function isDispatchMode(value) {
6134
6136
  function answeringSeats(votes) {
6135
6137
  return votes.filter((v) => v.source === "llm");
6136
6138
  }
6139
+ function realModel(id) {
6140
+ return id === void 0 || id === "" || id === UNRESOLVED_MODEL_ID ? void 0 : id;
6141
+ }
6142
+ function requestedModel(v) {
6143
+ return realModel(v.model);
6144
+ }
6137
6145
  function resolvedModel(v) {
6138
- return v.model === void 0 || v.model === "" || v.model === UNRESOLVED_MODEL_ID ? void 0 : v.model;
6146
+ const served = realModel(v.servedModel);
6147
+ return served === void 0 ? requestedModel(v) : qualifiedServedModel(v, served);
6148
+ }
6149
+ function qualifiedServedModel(v, served) {
6150
+ if (vendorFamilyOf(served) !== "unknown") return served;
6151
+ const cli = CliNameSchema.safeParse(v.cli === void 0 ? void 0 : bareCliName(v.cli));
6152
+ if (!cli.success) return served;
6153
+ return findCanonicalModel(cli.data, served)?.id ?? served;
6154
+ }
6155
+ function servedElsewhere(v) {
6156
+ const requested = requestedModel(v);
6157
+ if (requested === void 0 || realModel(v.servedModel) === void 0) return false;
6158
+ return countDistinctModels([requested, resolvedModel(v) ?? ""]) > 1;
6159
+ }
6160
+ function servedSubstitutions(votes) {
6161
+ const out = [];
6162
+ for (const v of answeringSeats(votes)) {
6163
+ if (v.fallback !== void 0 || !servedElsewhere(v)) continue;
6164
+ out.push({ role: v.role, requested: v.model ?? "", served: resolvedModel(v) ?? "" });
6165
+ }
6166
+ return out;
6167
+ }
6168
+ function servedModelLabel(answered, served) {
6169
+ const requested = [
6170
+ ...new Set(
6171
+ answered.filter(servedElsewhere).map(requestedModel).filter((m) => m !== void 0)
6172
+ )
6173
+ ];
6174
+ return requested.length === 0 ? served : `${requested.join(", ")} \u2192 served ${served}`;
6139
6175
  }
6140
6176
  function seatFallbacks(votes) {
6141
6177
  const out = [];
@@ -6182,7 +6218,7 @@ function singleModelPanelWarning(votes) {
6182
6218
  if (panelDiversityOf(votes).distinctModels !== 1) return void 0;
6183
6219
  const silent = votes.length - answered.length;
6184
6220
  const missing = silent > 0 ? ` (${String(silent)} did not answer)` : "";
6185
- return `All ${String(answered.length)} seats answered on ${model}${missing}; independence is weaker than assigned.`;
6221
+ return `All ${String(answered.length)} seats answered on ${servedModelLabel(answered, model)}${missing}; independence is weaker than assigned.`;
6186
6222
  }
6187
6223
  function singleFamilyPanelWarning(votes) {
6188
6224
  if (votes.length < MIN_PANEL_FOR_DIVERSITY_WARNING) return void 0;
@@ -6195,7 +6231,7 @@ function singleFamilyPanelWarning(votes) {
6195
6231
  return `All ${String(answered.length)} answering seats ran ${vendorFamilyOf(model)} models (${String(distinctModels)} distinct); independence is weaker than assigned.`;
6196
6232
  }
6197
6233
  function assignedFallbackFamily(v, fallback) {
6198
- const model = resolvedModel({ ...v, model: fallback.fromModel ?? v.pinnedModel });
6234
+ const model = requestedModel({ model: fallback.fromModel ?? v.pinnedModel });
6199
6235
  return vendorFamilyOf(model ?? CLI_TO_MODELSDEV_VENDOR[fallback.fromCli] ?? "");
6200
6236
  }
6201
6237
  function crossFamilyFallbackWarning(votes) {
@@ -6656,7 +6692,7 @@ function logPartialProposal(bounded, log) {
6656
6692
  }
6657
6693
  async function runContrarianCheck(proposal, options, log, opts) {
6658
6694
  try {
6659
- const { executeExpert } = await import("./expert-bridge-3VWOHLC7.js");
6695
+ const { executeExpert } = await import("./expert-bridge-TOMOJTMC.js");
6660
6696
  const bounded = boundArtifactForReview(proposal, CONTRARIAN_PROPOSAL_BUDGET, "proposal");
6661
6697
  logPartialProposal(bounded, log);
6662
6698
  const result = await executeExpert(
@@ -9842,6 +9878,7 @@ export {
9842
9878
  createWeightedVoting,
9843
9879
  CorrelationTracker,
9844
9880
  createCorrelationTracker,
9881
+ servedSubstitutions,
9845
9882
  seatFallbacks,
9846
9883
  panelDiversityOf,
9847
9884
  VotingStrategySchema,
@@ -9868,4 +9905,4 @@ export {
9868
9905
  CONSENSUS_VOTE_TOOL_SCHEMA,
9869
9906
  registerConsensusVoteTool
9870
9907
  };
9871
- //# sourceMappingURL=chunk-OJ3PXTN3.js.map
9908
+ //# sourceMappingURL=chunk-LSQ2IFMP.js.map