nexus-agents 8.112.2 → 8.114.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 (788) hide show
  1. package/dist/{ast-rule-runner-UEQO7V4Y.js → ast-rule-runner-ROCJS5V5.js} +3 -3
  2. package/dist/{child-mcp-config-BYNNNVZF.js → child-mcp-config-CLT4G6JV.js} +5 -3
  3. package/dist/child-mcp-config-CLT4G6JV.js.map +1 -0
  4. package/dist/{chunk-DAYX7FLQ.js → chunk-2PTEHHTT.js} +3 -3
  5. package/dist/{chunk-JLOW2KAD.js → chunk-2RXTHEUD.js} +6 -43
  6. package/dist/chunk-2RXTHEUD.js.map +1 -0
  7. package/dist/{chunk-I2FZPV7P.js → chunk-5TRZCY36.js} +2 -2
  8. package/dist/{chunk-LLG4XR6P.js → chunk-67GC5TY5.js} +5 -5
  9. package/dist/{chunk-6RYPMOR6.js → chunk-6RN764V2.js} +64 -33
  10. package/dist/chunk-6RN764V2.js.map +1 -0
  11. package/dist/{chunk-YZMSYPAU.js → chunk-7LBOZF2X.js} +5 -5
  12. package/dist/{chunk-Y4ZLHASZ.js → chunk-7S7DKO4D.js} +1563 -141
  13. package/dist/chunk-7S7DKO4D.js.map +1 -0
  14. package/dist/{chunk-DARVXIKJ.js → chunk-ATDFYA5W.js} +2 -2
  15. package/dist/{chunk-3TB6L3TE.js → chunk-AVTM3R4Z.js} +39 -17
  16. package/dist/chunk-AVTM3R4Z.js.map +1 -0
  17. package/dist/{chunk-HEBQA4E4.js → chunk-CKPFNZZM.js} +2 -2
  18. package/dist/{chunk-7JKUA5X6.js → chunk-DP7JQSU7.js} +7 -22
  19. package/dist/chunk-DP7JQSU7.js.map +1 -0
  20. package/dist/{chunk-5GMUGQGF.js → chunk-DUITQUQG.js} +18 -89
  21. package/dist/chunk-DUITQUQG.js.map +1 -0
  22. package/dist/{chunk-27E5O3GY.js → chunk-F2MBHW5Y.js} +2 -2
  23. package/dist/{chunk-76XX7NPA.js → chunk-IS2PAAEU.js} +2 -2
  24. package/dist/{chunk-CZ7EPWIJ.js → chunk-JA2S2P2L.js} +2 -2
  25. package/dist/{chunk-KUB3MGWF.js → chunk-LHVKCINJ.js} +5 -5
  26. package/dist/{chunk-DAWGZNLK.js → chunk-MW7YAOG7.js} +2 -2
  27. package/dist/{chunk-RLSKNDO5.js → chunk-N2KD7MXE.js} +4 -4
  28. package/dist/{chunk-GFNUYOCY.js → chunk-NMJV4JR4.js} +2 -2
  29. package/dist/{chunk-NXCO6Z7O.js → chunk-NPUKKXZV.js} +3 -3
  30. package/dist/{chunk-CD2O5QRG.js → chunk-OKQJMAFY.js} +593 -1486
  31. package/dist/chunk-OKQJMAFY.js.map +1 -0
  32. package/dist/{chunk-X3VNURAA.js → chunk-PFJZIJ6A.js} +3 -3
  33. package/dist/{chunk-QDDTFVW7.js → chunk-PWWOIE47.js} +2 -2
  34. package/dist/{chunk-NL2IL32T.js → chunk-RLKQFOSZ.js} +1305 -1062
  35. package/dist/chunk-RLKQFOSZ.js.map +1 -0
  36. package/dist/{chunk-3SY2GPU3.js → chunk-RWKINNVG.js} +2 -2
  37. package/dist/{chunk-ZWXZY3Z7.js → chunk-T3QVO4Z6.js} +2 -2
  38. package/dist/chunk-UBEZZIYC.js +109 -0
  39. package/dist/chunk-UBEZZIYC.js.map +1 -0
  40. package/dist/{chunk-6FC5VVDA.js → chunk-UBZNEZAG.js} +2 -2
  41. package/dist/{chunk-3E4J3EE6.js → chunk-VWXR7HKU.js} +104 -28
  42. package/dist/chunk-VWXR7HKU.js.map +1 -0
  43. package/dist/{chunk-LYZ2OXI7.js → chunk-X3S62T3S.js} +2 -2
  44. package/dist/{chunk-P7ZL3KD6.js → chunk-XIQB6CXL.js} +2 -2
  45. package/dist/{chunk-N67DGBPZ.js → chunk-Y37VBZ62.js} +2 -2
  46. package/dist/{chunk-YBRWJBHN.js → chunk-YHPMSOFB.js} +2 -2
  47. package/dist/{chunk-EIDH64P4.js → chunk-YQTRQRH7.js} +11 -6
  48. package/dist/chunk-YQTRQRH7.js.map +1 -0
  49. package/dist/{chunk-5VS577SD.js → chunk-ZEZQ7GV4.js} +2 -2
  50. package/dist/chunk-ZO6ZKR7L.js +53 -0
  51. package/dist/chunk-ZO6ZKR7L.js.map +1 -0
  52. package/dist/{chunk-M72V2I3F.js → chunk-ZQ6ZYMZY.js} +2 -2
  53. package/dist/{cli-circuit-breaker-KR72NLMQ.js → cli-circuit-breaker-NY4BI2M4.js} +3 -3
  54. package/dist/cli.d.ts +2 -83
  55. package/dist/cli.js +51 -49
  56. package/dist/cli.js.map +1 -1
  57. package/dist/{composite-router-OEN6DCPK.js → composite-router-FCW4AZCS.js} +2 -2
  58. package/dist/{consensus-vote-VD74QW5N.js → consensus-vote-XQ3EAK2G.js} +19 -18
  59. package/dist/{consensus-vote-types-rAhTNGvq.d.ts → consensus-vote-types-CYc7VWVO.d.ts} +767 -11
  60. package/dist/{context-retriever-7VBZZG3I.js → context-retriever-HCN7NCXO.js} +9 -8
  61. package/dist/{doctor-deep-JPICT7QB.js → doctor-deep-JUR5KWJV.js} +3 -3
  62. package/dist/doctor-gateway-report-6SVJILTL.js +17 -0
  63. package/dist/{doctor-live-AF4XP5WY.js → doctor-live-62GNMKMA.js} +11 -11
  64. package/dist/{expert-bridge-MPMDMGCC.js → expert-bridge-WDISX7RG.js} +5 -5
  65. package/dist/{factory-ZGYUWL2O.js → factory-NCCP3VNN.js} +10 -10
  66. package/dist/{factory-2Z7GFPKY.js → factory-OMJSMBSL.js} +5 -5
  67. package/dist/{improvement-review-UA6OJTZ6.js → improvement-review-YFQLWYLJ.js} +6 -6
  68. package/dist/index.d.ts +235 -653
  69. package/dist/index.js +34 -33
  70. package/dist/index.js.map +1 -1
  71. package/dist/{init-opencode-FYYFCXHB.js → init-opencode-SYTACFM2.js} +6 -6
  72. package/dist/issue-triage-VSXJ7AY3.js +18 -0
  73. package/dist/model-registry.generated.json +3725 -2194
  74. package/dist/{openai-compat-adapter-YAWAN7MX.js → openai-compat-adapter-YZRFOEEI.js} +6 -6
  75. package/dist/{pr-reviewer-helpers-J737NDAT.js → pr-reviewer-helpers-RAF7DGIB.js} +4 -4
  76. package/dist/{registry-command-OQ4SLR6K.js → registry-command-WG5TUJC4.js} +2 -2
  77. package/dist/{repo-security-plan-ZNKV7LPR.js → repo-security-plan-5FLHCCTG.js} +3 -3
  78. package/dist/{research-helpers-synthesize-7RBYSNPH.js → research-helpers-synthesize-EYCKTVZU.js} +4 -4
  79. package/dist/{routing-memory-AFLU42CD.js → routing-memory-Z2HE7IH3.js} +2 -2
  80. package/dist/{session-memory-22AVU7MG.js → session-memory-5QIPC7O6.js} +3 -3
  81. package/dist/{setup-config-KVH4TQN7.js → setup-config-HNHBQG52.js} +3 -3
  82. package/dist/{setup-custom-api-2ZHJT7BL.js → setup-custom-api-2KYNK6WT.js} +4 -4
  83. package/dist/setup-data-dir-B56LLZNT.js +34 -0
  84. package/dist/{tool-memory-WSCOQQS2.js → tool-memory-LWPWVKWR.js} +6 -5
  85. package/dist/{unified-registry-RBENDRS4.js → unified-registry-A72U42LZ.js} +12 -12
  86. package/dist/{weather-report-EGG35WEB.js → weather-report-HVUNR7SZ.js} +2 -2
  87. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts +43 -2
  88. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts.map +1 -1
  89. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js +26 -5
  90. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js.map +1 -1
  91. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts +26 -4
  92. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts.map +1 -1
  93. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js +118 -17
  94. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js.map +1 -1
  95. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts +1 -0
  96. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts.map +1 -1
  97. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js +11 -2
  98. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js.map +1 -1
  99. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  100. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  101. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
  102. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js +6 -3
  103. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
  104. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/express.d.ts.map +1 -1
  105. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/express.js +3 -1
  106. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/express.js.map +1 -1
  107. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/requestBody.d.ts +25 -0
  108. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/requestBody.d.ts.map +1 -0
  109. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/requestBody.js +64 -0
  110. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/requestBody.js.map +1 -0
  111. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.d.ts +10 -1
  112. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.d.ts.map +1 -1
  113. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.js +13 -1
  114. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.js.map +1 -1
  115. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts +3 -0
  116. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts.map +1 -1
  117. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js +12 -2
  118. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js.map +1 -1
  119. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts +43 -2
  120. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts.map +1 -1
  121. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js +26 -5
  122. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js.map +1 -1
  123. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts +26 -4
  124. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts.map +1 -1
  125. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js +118 -17
  126. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js.map +1 -1
  127. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts +1 -0
  128. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts.map +1 -1
  129. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js +11 -2
  130. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js.map +1 -1
  131. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  132. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  133. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
  134. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js +6 -3
  135. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
  136. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/express.d.ts.map +1 -1
  137. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/express.js +3 -1
  138. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/express.js.map +1 -1
  139. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/requestBody.d.ts +25 -0
  140. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/requestBody.d.ts.map +1 -0
  141. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/requestBody.js +58 -0
  142. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/requestBody.js.map +1 -0
  143. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.d.ts +10 -1
  144. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.d.ts.map +1 -1
  145. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js +13 -1
  146. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js.map +1 -1
  147. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts +3 -0
  148. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts.map +1 -1
  149. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js +12 -2
  150. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js.map +1 -1
  151. package/node_modules/@modelcontextprotocol/sdk/package.json +1 -1
  152. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  153. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  154. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -341
  155. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  156. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  157. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  158. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  159. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  160. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  161. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  162. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  163. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  164. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  165. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  166. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  167. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  168. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  169. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  170. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  171. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  172. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  173. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  174. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  175. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  176. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  177. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  178. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  179. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -87
  180. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  181. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  182. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  183. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  184. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  185. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  186. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  187. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  188. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  189. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  190. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  191. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  192. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  193. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -370
  194. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  195. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  196. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  197. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  198. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  199. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  200. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  201. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  202. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  203. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  204. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  205. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  206. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  207. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  208. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  209. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  210. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  211. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  212. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  213. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  214. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  215. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  216. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  217. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +105 -119
  218. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  219. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  220. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  221. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  222. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  223. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  224. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  225. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  226. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  227. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  228. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  229. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  230. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  231. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  232. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  233. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  234. package/node_modules/hono/dist/cjs/compose.js +49 -66
  235. package/node_modules/hono/dist/cjs/context.js +379 -450
  236. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -70
  237. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  238. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  239. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  240. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  241. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  242. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  243. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  244. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  245. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  246. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  247. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  248. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  249. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  250. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  251. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  252. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  253. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  254. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  255. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  256. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  257. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  258. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  259. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  260. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  261. package/node_modules/hono/dist/cjs/hono-base.js +345 -403
  262. package/node_modules/hono/dist/cjs/hono.js +28 -42
  263. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  264. package/node_modules/hono/dist/cjs/index.js +22 -30
  265. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  266. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  267. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  268. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  269. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  270. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  271. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  272. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  273. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  274. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  275. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  276. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  277. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  278. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  279. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  280. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  281. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  282. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  283. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  284. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  285. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  286. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  287. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  288. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  289. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  290. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  291. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  292. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  293. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  294. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  295. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  296. package/node_modules/hono/dist/cjs/middleware/combine/index.js +133 -95
  297. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  298. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  299. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  300. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  301. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  302. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  303. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  304. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  305. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  306. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  307. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  308. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  309. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  310. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  311. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  312. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  313. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  314. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  315. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -36
  316. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  317. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  318. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  319. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  320. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  321. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +55 -93
  322. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  323. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  324. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  325. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  326. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  327. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  328. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  329. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  330. package/node_modules/hono/dist/cjs/request.js +334 -346
  331. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  332. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  333. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  334. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  335. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  336. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  337. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  338. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  339. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  340. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  341. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  342. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  343. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  344. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  345. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  346. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  347. package/node_modules/hono/dist/cjs/router.js +37 -37
  348. package/node_modules/hono/dist/cjs/types.js +5 -28
  349. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  350. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  351. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  352. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  353. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  354. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  355. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  356. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  357. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  358. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  359. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  360. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  361. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  362. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  363. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  364. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  365. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  366. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  367. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  368. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  369. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -205
  370. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  371. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  372. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  373. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  374. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  375. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  376. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  377. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  378. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  379. package/node_modules/hono/dist/client/client.js +138 -197
  380. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  381. package/node_modules/hono/dist/client/index.js +3 -7
  382. package/node_modules/hono/dist/client/types.js +1 -0
  383. package/node_modules/hono/dist/client/utils.js +51 -68
  384. package/node_modules/hono/dist/compose.js +49 -45
  385. package/node_modules/hono/dist/context.js +376 -426
  386. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -49
  387. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  388. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  389. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  390. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  391. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  392. package/node_modules/hono/dist/helper/css/common.js +167 -225
  393. package/node_modules/hono/dist/helper/css/index.js +132 -137
  394. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  395. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  396. package/node_modules/hono/dist/helper/html/index.js +30 -39
  397. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  398. package/node_modules/hono/dist/helper/route/index.js +121 -43
  399. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  400. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  401. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  402. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  403. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  404. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  405. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  406. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  407. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  408. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  409. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  410. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  411. package/node_modules/hono/dist/hono-base.js +342 -379
  412. package/node_modules/hono/dist/hono.js +27 -20
  413. package/node_modules/hono/dist/http-exception.js +53 -33
  414. package/node_modules/hono/dist/index.js +19 -6
  415. package/node_modules/hono/dist/jsx/base.js +231 -340
  416. package/node_modules/hono/dist/jsx/children.js +16 -20
  417. package/node_modules/hono/dist/jsx/components.js +118 -170
  418. package/node_modules/hono/dist/jsx/constants.js +9 -15
  419. package/node_modules/hono/dist/jsx/context.js +153 -150
  420. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  421. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  422. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  423. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  424. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  425. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  426. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  427. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  428. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  429. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  430. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  431. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  432. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  433. package/node_modules/hono/dist/jsx/index.js +45 -98
  434. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  435. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  436. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  437. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  438. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  439. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  440. package/node_modules/hono/dist/jsx/types.js +1 -0
  441. package/node_modules/hono/dist/jsx/utils.js +105 -168
  442. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  443. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  444. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  445. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  446. package/node_modules/hono/dist/middleware/combine/index.js +132 -73
  447. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  448. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  449. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  450. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  451. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  452. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  453. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  454. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  455. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  456. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  457. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  458. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  459. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  460. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  461. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  462. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  463. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  464. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  465. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -16
  466. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  467. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  468. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  469. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  470. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  471. package/node_modules/hono/dist/middleware/serve-static/index.js +55 -72
  472. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  473. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  474. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  475. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  476. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  477. package/node_modules/hono/dist/preset/quick.js +17 -15
  478. package/node_modules/hono/dist/preset/tiny.js +14 -11
  479. package/node_modules/hono/dist/request/constants.js +4 -5
  480. package/node_modules/hono/dist/request.js +328 -319
  481. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  482. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  483. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  484. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  485. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  486. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  487. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  488. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  489. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  490. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  491. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  492. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  493. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  494. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  495. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  496. package/node_modules/hono/dist/router/utils.js +4 -5
  497. package/node_modules/hono/dist/router.js +35 -14
  498. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  499. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -105
  500. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  501. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -123
  502. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  503. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  504. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  505. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  506. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  507. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -17
  508. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  509. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -18
  510. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  511. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  512. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  513. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -3
  514. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  515. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  516. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  517. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  518. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  519. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  520. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  521. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  522. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  523. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  524. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -58
  525. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  526. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  527. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  528. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  529. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  530. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -8
  531. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +6 -9
  532. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -8
  533. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  534. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  535. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  536. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  537. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  538. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  539. package/node_modules/hono/dist/types/client/types.d.ts +134 -160
  540. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  541. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  542. package/node_modules/hono/dist/types/context.d.ts +335 -336
  543. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  544. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  545. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  546. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  547. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  548. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -13
  549. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -10
  550. package/node_modules/hono/dist/types/helper/css/index.d.ts +25 -28
  551. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -13
  552. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -74
  553. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  554. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -22
  555. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  556. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  557. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -7
  558. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  559. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  560. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -4
  561. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  562. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  563. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  564. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  565. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  566. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -10
  567. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  568. package/node_modules/hono/dist/types/hono-base.d.ts +208 -211
  569. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  570. package/node_modules/hono/dist/types/http-exception.d.ts +20 -23
  571. package/node_modules/hono/dist/types/index.d.ts +6 -37
  572. package/node_modules/hono/dist/types/jsx/base.d.ts +36 -35
  573. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  574. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  575. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  576. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -7
  577. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +8 -10
  578. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  579. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  580. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +26 -30
  581. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -13
  582. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +78 -83
  583. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  584. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  585. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  586. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -51
  587. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +86 -85
  588. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  589. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -17
  590. package/node_modules/hono/dist/types/jsx/index.d.ts +70 -73
  591. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  592. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  593. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  594. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  595. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  596. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  597. package/node_modules/hono/dist/types/jsx/types.d.ts +11 -13
  598. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  599. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -20
  600. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -49
  601. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -9
  602. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  603. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -7
  604. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +8 -10
  605. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  606. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -13
  607. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -9
  608. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  609. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -9
  610. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -13
  611. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -12
  612. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  613. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  614. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +6 -6
  615. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  616. package/node_modules/hono/dist/types/middleware/language/index.d.ts +5 -5
  617. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  618. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -6
  619. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -10
  620. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -17
  621. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -11
  622. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -21
  623. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +5 -5
  624. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  625. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +5 -6
  626. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -1
  627. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -58
  628. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +22 -24
  629. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  630. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  631. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +5 -5
  632. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -21
  633. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -38
  634. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  635. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  636. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  637. package/node_modules/hono/dist/types/request.d.ts +288 -287
  638. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  639. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  640. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  641. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  642. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  643. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  644. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  645. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -11
  646. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  647. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  648. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  649. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  650. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  651. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  652. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  653. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  654. package/node_modules/hono/dist/types/router.d.ts +23 -22
  655. package/node_modules/hono/dist/types/types.d.ts +146 -506
  656. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  657. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  658. package/node_modules/hono/dist/types/utils/body.d.ts +46 -51
  659. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -6
  660. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  661. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  662. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  663. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  664. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -19
  665. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -8
  666. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  667. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -4
  668. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  669. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  670. package/node_modules/hono/dist/types/utils/html.d.ts +11 -10
  671. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  672. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  673. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  674. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  675. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  676. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  677. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  678. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  679. package/node_modules/hono/dist/types/utils/mime.d.ts +59 -57
  680. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  681. package/node_modules/hono/dist/types/utils/types.d.ts +14 -27
  682. package/node_modules/hono/dist/types/utils/url.d.ts +2 -1
  683. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  684. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -9
  685. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -10
  686. package/node_modules/hono/dist/types.js +4 -6
  687. package/node_modules/hono/dist/utils/accept.js +185 -212
  688. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  689. package/node_modules/hono/dist/utils/body.js +87 -92
  690. package/node_modules/hono/dist/utils/buffer.js +44 -71
  691. package/node_modules/hono/dist/utils/color.js +33 -21
  692. package/node_modules/hono/dist/utils/compress.js +11 -5
  693. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  694. package/node_modules/hono/dist/utils/constants.js +7 -5
  695. package/node_modules/hono/dist/utils/cookie.js +114 -163
  696. package/node_modules/hono/dist/utils/crypto.js +30 -40
  697. package/node_modules/hono/dist/utils/encode.js +30 -26
  698. package/node_modules/hono/dist/utils/filepath.js +23 -33
  699. package/node_modules/hono/dist/utils/handler.js +10 -11
  700. package/node_modules/hono/dist/utils/headers.js +1 -0
  701. package/node_modules/hono/dist/utils/html.js +97 -117
  702. package/node_modules/hono/dist/utils/http-status.js +1 -0
  703. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  704. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  705. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  706. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  707. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -197
  708. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  709. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  710. package/node_modules/hono/dist/utils/mime.js +74 -79
  711. package/node_modules/hono/dist/utils/stream.js +86 -88
  712. package/node_modules/hono/dist/utils/types.js +1 -0
  713. package/node_modules/hono/dist/utils/url.js +187 -215
  714. package/node_modules/hono/dist/validator/index.js +1 -4
  715. package/node_modules/hono/dist/validator/utils.js +1 -0
  716. package/node_modules/hono/dist/validator/validator.js +61 -83
  717. package/node_modules/hono/package.json +27 -27
  718. package/node_modules/ws/lib/websocket.js +17 -3
  719. package/node_modules/ws/package.json +1 -1
  720. package/package.json +1 -1
  721. package/dist/child-mcp-config-BYNNNVZF.js.map +0 -1
  722. package/dist/chunk-3E4J3EE6.js.map +0 -1
  723. package/dist/chunk-3TB6L3TE.js.map +0 -1
  724. package/dist/chunk-5GMUGQGF.js.map +0 -1
  725. package/dist/chunk-6RYPMOR6.js.map +0 -1
  726. package/dist/chunk-7JKUA5X6.js.map +0 -1
  727. package/dist/chunk-CD2O5QRG.js.map +0 -1
  728. package/dist/chunk-EIDH64P4.js.map +0 -1
  729. package/dist/chunk-JLOW2KAD.js.map +0 -1
  730. package/dist/chunk-NL2IL32T.js.map +0 -1
  731. package/dist/chunk-TTPAWUHT.js +0 -14
  732. package/dist/chunk-TTPAWUHT.js.map +0 -1
  733. package/dist/chunk-Y4ZLHASZ.js.map +0 -1
  734. package/dist/doctor-gateway-report-MZY47ZZV.js +0 -17
  735. package/dist/issue-triage-FOOCSNNK.js +0 -17
  736. package/dist/setup-data-dir-YZ3VVOT2.js +0 -34
  737. /package/dist/{ast-rule-runner-UEQO7V4Y.js.map → ast-rule-runner-ROCJS5V5.js.map} +0 -0
  738. /package/dist/{chunk-DAYX7FLQ.js.map → chunk-2PTEHHTT.js.map} +0 -0
  739. /package/dist/{chunk-I2FZPV7P.js.map → chunk-5TRZCY36.js.map} +0 -0
  740. /package/dist/{chunk-LLG4XR6P.js.map → chunk-67GC5TY5.js.map} +0 -0
  741. /package/dist/{chunk-YZMSYPAU.js.map → chunk-7LBOZF2X.js.map} +0 -0
  742. /package/dist/{chunk-DARVXIKJ.js.map → chunk-ATDFYA5W.js.map} +0 -0
  743. /package/dist/{chunk-HEBQA4E4.js.map → chunk-CKPFNZZM.js.map} +0 -0
  744. /package/dist/{chunk-27E5O3GY.js.map → chunk-F2MBHW5Y.js.map} +0 -0
  745. /package/dist/{chunk-76XX7NPA.js.map → chunk-IS2PAAEU.js.map} +0 -0
  746. /package/dist/{chunk-CZ7EPWIJ.js.map → chunk-JA2S2P2L.js.map} +0 -0
  747. /package/dist/{chunk-KUB3MGWF.js.map → chunk-LHVKCINJ.js.map} +0 -0
  748. /package/dist/{chunk-DAWGZNLK.js.map → chunk-MW7YAOG7.js.map} +0 -0
  749. /package/dist/{chunk-RLSKNDO5.js.map → chunk-N2KD7MXE.js.map} +0 -0
  750. /package/dist/{chunk-GFNUYOCY.js.map → chunk-NMJV4JR4.js.map} +0 -0
  751. /package/dist/{chunk-NXCO6Z7O.js.map → chunk-NPUKKXZV.js.map} +0 -0
  752. /package/dist/{chunk-X3VNURAA.js.map → chunk-PFJZIJ6A.js.map} +0 -0
  753. /package/dist/{chunk-QDDTFVW7.js.map → chunk-PWWOIE47.js.map} +0 -0
  754. /package/dist/{chunk-3SY2GPU3.js.map → chunk-RWKINNVG.js.map} +0 -0
  755. /package/dist/{chunk-ZWXZY3Z7.js.map → chunk-T3QVO4Z6.js.map} +0 -0
  756. /package/dist/{chunk-6FC5VVDA.js.map → chunk-UBZNEZAG.js.map} +0 -0
  757. /package/dist/{chunk-LYZ2OXI7.js.map → chunk-X3S62T3S.js.map} +0 -0
  758. /package/dist/{chunk-P7ZL3KD6.js.map → chunk-XIQB6CXL.js.map} +0 -0
  759. /package/dist/{chunk-N67DGBPZ.js.map → chunk-Y37VBZ62.js.map} +0 -0
  760. /package/dist/{chunk-YBRWJBHN.js.map → chunk-YHPMSOFB.js.map} +0 -0
  761. /package/dist/{chunk-5VS577SD.js.map → chunk-ZEZQ7GV4.js.map} +0 -0
  762. /package/dist/{chunk-M72V2I3F.js.map → chunk-ZQ6ZYMZY.js.map} +0 -0
  763. /package/dist/{cli-circuit-breaker-KR72NLMQ.js.map → cli-circuit-breaker-NY4BI2M4.js.map} +0 -0
  764. /package/dist/{composite-router-OEN6DCPK.js.map → composite-router-FCW4AZCS.js.map} +0 -0
  765. /package/dist/{consensus-vote-VD74QW5N.js.map → consensus-vote-XQ3EAK2G.js.map} +0 -0
  766. /package/dist/{context-retriever-7VBZZG3I.js.map → context-retriever-HCN7NCXO.js.map} +0 -0
  767. /package/dist/{doctor-deep-JPICT7QB.js.map → doctor-deep-JUR5KWJV.js.map} +0 -0
  768. /package/dist/{doctor-gateway-report-MZY47ZZV.js.map → doctor-gateway-report-6SVJILTL.js.map} +0 -0
  769. /package/dist/{doctor-live-AF4XP5WY.js.map → doctor-live-62GNMKMA.js.map} +0 -0
  770. /package/dist/{expert-bridge-MPMDMGCC.js.map → expert-bridge-WDISX7RG.js.map} +0 -0
  771. /package/dist/{factory-2Z7GFPKY.js.map → factory-NCCP3VNN.js.map} +0 -0
  772. /package/dist/{factory-ZGYUWL2O.js.map → factory-OMJSMBSL.js.map} +0 -0
  773. /package/dist/{improvement-review-UA6OJTZ6.js.map → improvement-review-YFQLWYLJ.js.map} +0 -0
  774. /package/dist/{init-opencode-FYYFCXHB.js.map → init-opencode-SYTACFM2.js.map} +0 -0
  775. /package/dist/{issue-triage-FOOCSNNK.js.map → issue-triage-VSXJ7AY3.js.map} +0 -0
  776. /package/dist/{openai-compat-adapter-YAWAN7MX.js.map → openai-compat-adapter-YZRFOEEI.js.map} +0 -0
  777. /package/dist/{pr-reviewer-helpers-J737NDAT.js.map → pr-reviewer-helpers-RAF7DGIB.js.map} +0 -0
  778. /package/dist/{registry-command-OQ4SLR6K.js.map → registry-command-WG5TUJC4.js.map} +0 -0
  779. /package/dist/{repo-security-plan-ZNKV7LPR.js.map → repo-security-plan-5FLHCCTG.js.map} +0 -0
  780. /package/dist/{research-helpers-synthesize-7RBYSNPH.js.map → research-helpers-synthesize-EYCKTVZU.js.map} +0 -0
  781. /package/dist/{routing-memory-AFLU42CD.js.map → routing-memory-Z2HE7IH3.js.map} +0 -0
  782. /package/dist/{session-memory-22AVU7MG.js.map → session-memory-5QIPC7O6.js.map} +0 -0
  783. /package/dist/{setup-config-KVH4TQN7.js.map → setup-config-HNHBQG52.js.map} +0 -0
  784. /package/dist/{setup-custom-api-2ZHJT7BL.js.map → setup-custom-api-2KYNK6WT.js.map} +0 -0
  785. /package/dist/{setup-data-dir-YZ3VVOT2.js.map → setup-data-dir-B56LLZNT.js.map} +0 -0
  786. /package/dist/{tool-memory-WSCOQQS2.js.map → tool-memory-LWPWVKWR.js.map} +0 -0
  787. /package/dist/{unified-registry-RBENDRS4.js.map → unified-registry-A72U42LZ.js.map} +0 -0
  788. /package/dist/{weather-report-EGG35WEB.js.map → weather-report-HVUNR7SZ.js.map} +0 -0
@@ -9,9 +9,9 @@ import {
9
9
  getBuiltInAstRulesPath,
10
10
  loadRules,
11
11
  runAstQaRules
12
- } from "./chunk-DAWGZNLK.js";
12
+ } from "./chunk-MW7YAOG7.js";
13
13
  import "./chunk-XEPZSDN5.js";
14
- import "./chunk-Y4ZLHASZ.js";
14
+ import "./chunk-7S7DKO4D.js";
15
15
  import "./chunk-UE7A2XHM.js";
16
16
  import "./chunk-LWOX65CP.js";
17
17
  import "./chunk-PX6F3LHL.js";
@@ -27,4 +27,4 @@ export {
27
27
  loadRules,
28
28
  runAstQaRules
29
29
  };
30
- //# sourceMappingURL=ast-rule-runner-UEQO7V4Y.js.map
30
+ //# sourceMappingURL=ast-rule-runner-ROCJS5V5.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-OITVVSWO.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-Y4ZLHASZ.js";
6
+ } from "./chunk-7S7DKO4D.js";
7
7
  import "./chunk-UE7A2XHM.js";
8
8
  import "./chunk-LWOX65CP.js";
9
9
  import "./chunk-PX6F3LHL.js";
@@ -17,12 +17,14 @@ function resolveCliPath(override) {
17
17
  const distDir = join(__dirname, "..");
18
18
  return join(distDir, "cli.js");
19
19
  }
20
+ var MCP_CHILD_ENV = "NEXUS_MCP_CHILD";
20
21
  function buildConfig(options) {
21
22
  const cliPath = resolveCliPath(options?.cliPath);
22
23
  const entry = {
23
24
  command: "node",
24
25
  args: [cliPath, "--mode=server"],
25
- ...options?.env !== void 0 ? { env: options.env } : {}
26
+ // The child marker is applied LAST so caller-supplied env cannot unset it.
27
+ env: { ...options?.env, [MCP_CHILD_ENV]: "1" }
26
28
  };
27
29
  return {
28
30
  mcpServers: {
@@ -47,4 +49,4 @@ async function generateMcpConfig(options) {
47
49
  export {
48
50
  generateMcpConfig
49
51
  };
50
- //# sourceMappingURL=child-mcp-config-BYNNNVZF.js.map
52
+ //# sourceMappingURL=child-mcp-config-CLT4G6JV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli-adapters/child-mcp-config.ts"],"sourcesContent":["/**\n * nexus-agents/cli-adapters - Child CLI MCP Config Generator\n *\n * Generates MCP server configuration for child Claude CLI sessions so\n * spawned agents can call back into nexus-agents' MCP tools (memory,\n * research, etc.). Used by `pipeline/expert-bridge.ts` to give expert\n * agents tool access. Originally lived under `swe-bench/` (#1413);\n * relocated here in #2515 — the helper is generic CLI-spawn\n * infrastructure, not benchmark-specific.\n *\n * The generated config grants NO tool approvals. It only tells the child\n * where the nexus-agents MCP server is; whether an expert may actually call\n * one of its tools follows the host's Claude permission settings (for\n * example `defaultMode`). Measured 2026-09-24: in auto mode the calls run,\n * in default mode they are refused (#6784). An unused `allowedTools` list\n * that read like a guard but was never passed to the CLI was removed then.\n *\n * @module cli-adapters/child-mcp-config\n */\n\nimport { writeFile, rm } from 'node:fs/promises';\nimport { nexusMkdtemp } from '../config/nexus-tmp-dir.js';\nimport { join } from 'node:path';\nimport { createLogger } from '../core/index.js';\n\nconst logger = createLogger({ component: 'swe-bench-mcp-config' });\n\n/**\n * MCP server entry in Claude CLI config format.\n */\ninterface McpServerEntry {\n readonly command: string;\n readonly args: readonly string[];\n readonly env?: Readonly<Record<string, string>>;\n}\n\n/**\n * MCP config file format for Claude CLI (--mcp-config).\n */\ninterface McpConfigFile {\n readonly mcpServers: Readonly<Record<string, McpServerEntry>>;\n}\n\n/**\n * Options for generating MCP config.\n */\nexport interface McpConfigOptions {\n /** Path to nexus-agents CLI entry point. */\n readonly cliPath?: string;\n /** Additional environment variables for the MCP server. */\n readonly env?: Readonly<Record<string, string>>;\n}\n\n/**\n * Resolves the nexus-agents CLI path.\n * Uses the built dist/cli.js relative to this package.\n */\nfunction resolveCliPath(override?: string): string {\n if (override !== undefined) return override;\n // Resolve relative to this file: src/swe-bench/ → dist/cli.js\n // At runtime we're in dist/swe-bench/, so go up one level\n const distDir = join(__dirname, '..');\n return join(distDir, 'cli.js');\n}\n\n/**\n * Env marker naming a child server (#6795). The child's stdio caller is an\n * expert CLI driven by a model, not the operator, so the child must not\n * measure it at tier 1; `connectTransport` reads this and records the caller\n * as unmeasured.\n */\nconst MCP_CHILD_ENV = 'NEXUS_MCP_CHILD';\n\n/**\n * Builds the MCP config object for a nexus-agents server.\n */\nfunction buildConfig(options?: McpConfigOptions): McpConfigFile {\n const cliPath = resolveCliPath(options?.cliPath);\n\n const entry: McpServerEntry = {\n command: 'node',\n args: [cliPath, '--mode=server'],\n // The child marker is applied LAST so caller-supplied env cannot unset it.\n env: { ...options?.env, [MCP_CHILD_ENV]: '1' },\n };\n\n return {\n mcpServers: {\n 'nexus-agents': entry,\n },\n };\n}\n\n/**\n * Generated MCP config with path and cleanup function.\n */\nexport interface GeneratedMcpConfig {\n /** Path to the generated config file. */\n readonly configPath: string;\n /** Cleanup function to remove temp files. */\n readonly cleanup: () => Promise<void>;\n}\n\n/**\n * Generates an MCP config file for Claude CLI child sessions.\n *\n * Creates a temporary JSON file that can be passed to `claude --mcp-config`.\n * Returns the file path and a cleanup function.\n */\nexport async function generateMcpConfig(options?: McpConfigOptions): Promise<GeneratedMcpConfig> {\n const config = buildConfig(options);\n\n const tempDir = await nexusMkdtemp('nexus-mcp-');\n const configPath = join(tempDir, 'mcp-config.json');\n\n await writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');\n\n const cleanup = async (): Promise<void> => {\n await rm(tempDir, { recursive: true, force: true }).catch((e: unknown) => {\n logger.debug('Best-effort cleanup failed', {\n error: e instanceof Error ? e.message : String(e),\n });\n });\n };\n\n return { configPath, cleanup };\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAS,WAAW,UAAU;AAE9B,SAAS,YAAY;AAGrB,IAAM,SAAS,aAAa,EAAE,WAAW,uBAAuB,CAAC;AAgCjE,SAAS,eAAe,UAA2B;AACjD,MAAI,aAAa,OAAW,QAAO;AAGnC,QAAM,UAAU,KAAK,WAAW,IAAI;AACpC,SAAO,KAAK,SAAS,QAAQ;AAC/B;AAQA,IAAM,gBAAgB;AAKtB,SAAS,YAAY,SAA2C;AAC9D,QAAM,UAAU,eAAe,SAAS,OAAO;AAE/C,QAAM,QAAwB;AAAA,IAC5B,SAAS;AAAA,IACT,MAAM,CAAC,SAAS,eAAe;AAAA;AAAA,IAE/B,KAAK,EAAE,GAAG,SAAS,KAAK,CAAC,aAAa,GAAG,IAAI;AAAA,EAC/C;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,MACV,gBAAgB;AAAA,IAClB;AAAA,EACF;AACF;AAkBA,eAAsB,kBAAkB,SAAyD;AAC/F,QAAM,SAAS,YAAY,OAAO;AAElC,QAAM,UAAU,MAAM,aAAa,YAAY;AAC/C,QAAM,aAAa,KAAK,SAAS,iBAAiB;AAElD,QAAM,UAAU,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,OAAO;AAEpE,QAAM,UAAU,YAA2B;AACzC,UAAM,GAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC,EAAE,MAAM,CAAC,MAAe;AACxE,aAAO,MAAM,8BAA8B;AAAA,QACzC,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,MAClD,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,YAAY,QAAQ;AAC/B;","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  assessReputation,
6
6
  sanitizeInput
7
- } from "./chunk-27E5O3GY.js";
7
+ } from "./chunk-F2MBHW5Y.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-Y4ZLHASZ.js";
16
+ } from "./chunk-7S7DKO4D.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-DAYX7FLQ.js.map
480
+ //# sourceMappingURL=chunk-2PTEHHTT.js.map
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  ensureGatewayDiscovered,
3
3
  gatewayDiscoveryGeneration
4
- } from "./chunk-LYZ2OXI7.js";
4
+ } from "./chunk-X3S62T3S.js";
5
5
  import {
6
6
  createAutoAdapter
7
- } from "./chunk-3E4J3EE6.js";
7
+ } from "./chunk-VWXR7HKU.js";
8
8
  import {
9
9
  getDefaultCliCircuitBreakerRegistry,
10
10
  mapModelErrorToCategory
11
- } from "./chunk-GFNUYOCY.js";
11
+ } from "./chunk-NMJV4JR4.js";
12
12
  import {
13
13
  CircularBuffer,
14
14
  ConfigError,
15
15
  ModelError,
16
16
  TASK_SPECIALIZATION_MATRIX,
17
- canonicalVersionKey,
17
+ UNRESOLVED_MODEL_ID,
18
18
  createLogger,
19
19
  detectTaskCategory,
20
20
  err,
@@ -31,42 +31,9 @@ import {
31
31
  isRateLimitLikeError,
32
32
  ok,
33
33
  recordRateLimitEvent,
34
- resolveModelIdentitySync,
35
34
  toRateLimitError,
36
35
  warnIfGatewayCostUndeclared
37
- } from "./chunk-Y4ZLHASZ.js";
38
-
39
- // src/config/model-equivalence.ts
40
- var VARIANT_QUIRKS = /* @__PURE__ */ new Set(["small", "image"]);
41
- function canonicalModelKey(modelId) {
42
- if (modelId === "") return null;
43
- const identity = resolveModelIdentitySync(modelId);
44
- if (identity.vendor === "unknown" || identity.family === "unknown") return null;
45
- const version = identity.version === void 0 ? "" : canonicalVersionKey(identity.version);
46
- const variant = identity.quirks.filter((q) => VARIANT_QUIRKS.has(q)).sort().join("-");
47
- return variant === "" ? `${identity.vendor}|${identity.family}|${version}` : `${identity.vendor}|${identity.family}|${version}|${variant}`;
48
- }
49
- function countDistinctModels(modelIds) {
50
- const distinct = /* @__PURE__ */ new Set();
51
- for (const id of modelIds) {
52
- const key = canonicalModelKey(id);
53
- distinct.add(key ?? `raw:${id}`);
54
- }
55
- return distinct.size;
56
- }
57
- var UNRESOLVED_MODEL_ID = "pending-detection";
58
- function assessPanelIndependence(modelIds) {
59
- const resolved = modelIds.filter(
60
- (id) => typeof id === "string" && id !== "" && id !== UNRESOLVED_MODEL_ID
61
- );
62
- const unresolved = modelIds.length - resolved.length;
63
- if (unresolved > 0 || modelIds.length === 0) {
64
- return { kind: "unmeasured", unresolved, total: modelIds.length };
65
- }
66
- const distinct = countDistinctModels(resolved);
67
- if (distinct === 1) return { kind: "collapsed", model: resolved[0] ?? "" };
68
- return { kind: "diverse", distinct };
69
- }
36
+ } from "./chunk-7S7DKO4D.js";
70
37
 
71
38
  // src/agents/collaboration/event-bus-helpers.ts
72
39
  import { randomUUID } from "node:crypto";
@@ -1062,10 +1029,6 @@ function resetGlobalRegistry() {
1062
1029
  }
1063
1030
 
1064
1031
  export {
1065
- canonicalModelKey,
1066
- countDistinctModels,
1067
- UNRESOLVED_MODEL_ID,
1068
- assessPanelIndependence,
1069
1032
  getGlobalEventBus,
1070
1033
  createEvent,
1071
1034
  EventTopics,
@@ -1076,4 +1039,4 @@ export {
1076
1039
  getGlobalRegistry,
1077
1040
  resetGlobalRegistry
1078
1041
  };
1079
- //# sourceMappingURL=chunk-JLOW2KAD.js.map
1042
+ //# sourceMappingURL=chunk-2RXTHEUD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agents/collaboration/event-bus-helpers.ts","../src/agents/collaboration/event-bus.ts","../src/agents/collaboration/event-bus-topics.ts","../src/adapters/resilient-adapter.ts","../src/adapters/model-bound-adapter.ts","../src/adapters/unified-registry.ts"],"sourcesContent":["/**\n * Event Bus Helper Functions\n *\n * Pure utility functions for event bus operations.\n * Extracted from event-bus.ts to maintain file size limits.\n *\n * @module agents/collaboration/event-bus-helpers\n * (Source: Issue #182, ARCHITECTURE.md Hybrid Architecture)\n */\n\nimport { randomUUID } from 'node:crypto';\nimport { getTimeProvider } from '../../core/index.js';\nimport type { SubscriptionId, TopicPattern, DomainEvent, EventFilter } from './event-bus-types.js';\n\n/** Default maximum history size */\nexport const DEFAULT_MAX_HISTORY_SIZE = 1000;\n\n/** Maximum number of subscriptions per bus */\nexport const MAX_SUBSCRIPTIONS = 500;\n\n/**\n * Internal subscription record.\n */\nexport interface SubscriptionRecord {\n readonly id: SubscriptionId;\n readonly pattern: TopicPattern;\n readonly regex: RegExp;\n readonly listener: (event: DomainEvent) => void | Promise<void>;\n}\n\n/** Maximum allowed topic pattern length */\nconst MAX_TOPIC_PATTERN_LENGTH = 200;\n\n/**\n * Convert a topic pattern to a regex for matching.\n * Supports wildcard patterns:\n * - 'session.created' -> exact match\n * - 'session.*' -> matches session.anything\n * - '*' -> matches everything\n *\n * Security Note (Issue #341): This function is safe from ReDoS because:\n * 1. The input is fully escaped before regex construction\n * 2. Only `*` wildcards are converted to `[^.]+` (bounded, non-greedy)\n * 3. Pattern length is bounded to prevent memory issues\n *\n * @throws Error if pattern exceeds MAX_TOPIC_PATTERN_LENGTH\n */\nexport function patternToRegex(pattern: TopicPattern): RegExp {\n // Validate length to prevent memory issues (Issue #341)\n if (pattern.length > MAX_TOPIC_PATTERN_LENGTH) {\n throw new Error(`Topic pattern exceeds maximum length of ${String(MAX_TOPIC_PATTERN_LENGTH)}`);\n }\n\n if (pattern === '*') {\n return /^.+$/;\n }\n // Use placeholder for * before escaping, then restore as regex wildcard\n // WILDCARD_PLACEHOLDER is a static constant, safe for RegExp (Issue #341)\n const WILDCARD_PLACEHOLDER = '\\x00WILDCARD\\x00';\n const withPlaceholder = pattern.replace(/\\*/g, WILDCARD_PLACEHOLDER);\n // Escape all regex special characters - this makes the pattern safe\n const escaped = withPlaceholder.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\n // Replace placeholder with bounded wildcard - safe since input was escaped\n const withWildcards = escaped.replace(new RegExp(WILDCARD_PLACEHOLDER, 'g'), '[^.]+');\n return new RegExp(`^${withWildcards}$`);\n}\n\n/**\n * Check if a topic matches a pattern.\n */\nexport function topicMatchesPattern(topic: string, regex: RegExp): boolean {\n return regex.test(topic);\n}\n\n/**\n * Generate a unique event ID.\n */\nexport function generateEventId(): string {\n return `evt-${String(getTimeProvider().now())}-${randomUUID().slice(0, 8)}`;\n}\n\n/**\n * Generate a unique subscription ID.\n */\nexport function generateSubscriptionId(): SubscriptionId {\n return `sub-${String(getTimeProvider().now())}-${randomUUID().slice(0, 8)}`;\n}\n\n/**\n * Generate a unique correlation ID for request tracing.\n * (Source: Issue #224, Sprint #228)\n *\n * @example\n * ```typescript\n * const correlationId = generateCorrelationId();\n * // -> 'cor_a1b2c3d4'\n * ```\n */\nexport function generateCorrelationId(): string {\n return `cor_${randomUUID().slice(0, 8)}`;\n}\n\n/**\n * Create a child correlation ID that chains to a parent.\n * Enables hierarchical tracing of subtasks.\n * (Source: Issue #224, Sprint #228)\n *\n * @param parentCorrelationId - The parent correlation ID to chain from\n * @returns A new correlation ID in format 'parentId.child_xxxxxxxx'\n *\n * @example\n * ```typescript\n * const parentId = generateCorrelationId();\n * // -> 'cor_a1b2c3d4'\n *\n * const childId = createChildCorrelationId(parentId);\n * // -> 'cor_a1b2c3d4.child_e5f6g7h8'\n * ```\n */\nexport function createChildCorrelationId(parentCorrelationId: string): string {\n return `${parentCorrelationId}.child_${randomUUID().slice(0, 8)}`;\n}\n\n/**\n * Apply topic, session, correlation, and timestamp filters to events.\n */\nexport function applyHistoryFilters(history: DomainEvent[], filter: EventFilter): DomainEvent[] {\n let result: DomainEvent[] = history;\n\n if (filter.topic !== undefined && filter.topic !== '') {\n const regex = patternToRegex(filter.topic);\n result = result.filter((e) => topicMatchesPattern(e.topic, regex));\n }\n\n if (filter.sessionId !== undefined && filter.sessionId !== '') {\n result = result.filter((e) => e.sessionId === filter.sessionId);\n }\n\n if (filter.correlationId !== undefined && filter.correlationId !== '') {\n result = result.filter((e) => e.correlationId === filter.correlationId);\n }\n\n return applyTimestampFilters(result, filter);\n}\n\n/**\n * Apply timestamp-based filters to events.\n */\nexport function applyTimestampFilters(result: DomainEvent[], filter: EventFilter): DomainEvent[] {\n let filtered = result;\n\n if (filter.after !== undefined && filter.after !== '') {\n const afterTimestamp = filter.after;\n filtered = filtered.filter((e) => e.timestamp > afterTimestamp);\n }\n\n if (filter.before !== undefined && filter.before !== '') {\n const beforeTimestamp = filter.before;\n filtered = filtered.filter((e) => e.timestamp < beforeTimestamp);\n }\n\n return filtered;\n}\n\n/**\n * Apply limit to history results.\n */\nexport function applyHistoryLimit(result: DomainEvent[], filter: EventFilter): DomainEvent[] {\n if (filter.limit !== undefined && filter.limit > 0) {\n return result.slice(-filter.limit);\n }\n return result;\n}\n\n/**\n * Enrich event with generated fields if missing.\n */\nexport function enrichEvent(event: DomainEvent): DomainEvent {\n return {\n ...event,\n eventId: event.eventId || generateEventId(),\n timestamp: event.timestamp || getTimeProvider().nowIso(),\n };\n}\n\n/**\n * Count subscribers matching a topic from a subscription map.\n */\nexport function countMatchingSubscribers(\n topic: string,\n subscriptions: Map<SubscriptionId, SubscriptionRecord>\n): number {\n let count = 0;\n for (const record of subscriptions.values()) {\n if (topicMatchesPattern(topic, record.regex)) {\n count++;\n }\n }\n return count;\n}\n","/**\n * Event Bus Implementation\n *\n * Async message passing for agent-to-agent communication.\n * Supports topic-based routing, wildcard patterns, and event history.\n *\n * @module agents/collaboration/event-bus\n * (Source: Issue #182, ARCHITECTURE.md Hybrid Architecture)\n */\n\nimport { getTimeProvider } from '../../core/index.js';\nimport type {\n ICollaborationEventBus,\n DomainEvent,\n EventListener,\n Subscription,\n SubscriptionId,\n TopicPattern,\n EventFilter,\n EventBusOptions,\n EventBusStats,\n} from './event-bus-types.js';\n\nimport {\n DEFAULT_MAX_HISTORY_SIZE,\n MAX_SUBSCRIPTIONS,\n type SubscriptionRecord,\n patternToRegex,\n topicMatchesPattern,\n generateEventId,\n generateSubscriptionId,\n applyHistoryFilters,\n applyHistoryLimit,\n enrichEvent,\n countMatchingSubscribers,\n} from './event-bus-helpers.js';\n\nimport { CircularBuffer } from '../../core/circular-buffer.js';\n\n// Re-export correlation ID helpers for public API\nexport { generateCorrelationId, createChildCorrelationId } from './event-bus-helpers.js';\n\n/**\n * Event Bus for agent-to-agent communication.\n *\n * Features:\n * - Topic-based pub/sub with wildcard support\n * - Async and sync event emission\n * - Event history with filtering\n * - Error isolation (one listener failure doesn't block others)\n *\n * @example\n * ```typescript\n * const bus = new CollaborationEventBus();\n *\n * // Subscribe to all session events\n * const sub = bus.subscribe('session.*', (event) => {\n * console.log('Session event:', event.topic);\n * });\n *\n * // Emit an event\n * bus.emit(createSessionCreatedEvent({ sessionId: '123', ... }));\n *\n * // Cleanup\n * sub.unsubscribe();\n * ```\n */\nexport class CollaborationEventBus implements ICollaborationEventBus {\n private readonly subscriptions: Map<SubscriptionId, SubscriptionRecord> = new Map();\n private readonly history: CircularBuffer<DomainEvent>;\n private readonly asyncHandling: boolean;\n private readonly logger?: EventBusOptions['logger'];\n\n private stats: EventBusStats = {\n eventsEmitted: 0,\n subscriptionsCreated: 0,\n activeSubscriptions: 0,\n historySize: 0,\n errorCount: 0,\n };\n\n constructor(options: EventBusOptions = {}) {\n const maxHistorySize = options.maxHistorySize ?? DEFAULT_MAX_HISTORY_SIZE;\n this.history = new CircularBuffer<DomainEvent>(maxHistorySize);\n this.asyncHandling = options.asyncHandling ?? false;\n this.logger = options.logger;\n }\n\n /**\n * Emit an event synchronously to all matching subscribers.\n */\n emit(event: DomainEvent): void {\n const enrichedEvent = enrichEvent(event);\n this.addToHistory(enrichedEvent);\n this.stats.eventsEmitted++;\n\n this.logger?.debug('Event emitted', {\n topic: enrichedEvent.topic,\n eventId: enrichedEvent.eventId,\n subscriberCount: countMatchingSubscribers(enrichedEvent.topic, this.subscriptions),\n });\n\n for (const record of this.subscriptions.values()) {\n if (topicMatchesPattern(enrichedEvent.topic, record.regex)) {\n this.invokeListener(record, enrichedEvent);\n }\n }\n }\n\n /**\n * Emit an event and wait for all async handlers to complete.\n */\n async emitAsync(event: DomainEvent): Promise<void> {\n const enrichedEvent = enrichEvent(event);\n this.addToHistory(enrichedEvent);\n this.stats.eventsEmitted++;\n\n this.logger?.debug('Async event emitted', {\n topic: enrichedEvent.topic,\n eventId: enrichedEvent.eventId,\n });\n\n const promises: Promise<void>[] = [];\n\n for (const record of this.subscriptions.values()) {\n if (topicMatchesPattern(enrichedEvent.topic, record.regex)) {\n promises.push(this.invokeListenerAsync(record, enrichedEvent));\n }\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Subscribe to events matching a topic pattern.\n */\n subscribe<T extends DomainEvent = DomainEvent>(\n pattern: TopicPattern,\n listener: EventListener<T>\n ): Subscription {\n if (this.subscriptions.size >= MAX_SUBSCRIPTIONS) {\n throw new Error(\n `Maximum subscription limit reached (${String(MAX_SUBSCRIPTIONS)}). ` +\n 'Unsubscribe from unused patterns before adding new ones.'\n );\n }\n\n const id = generateSubscriptionId();\n const regex = patternToRegex(pattern);\n\n const record: SubscriptionRecord = {\n id,\n pattern,\n regex,\n listener: listener as EventListener,\n };\n\n this.subscriptions.set(id, record);\n this.stats.subscriptionsCreated++;\n this.stats.activeSubscriptions = this.subscriptions.size;\n\n this.logger?.debug('Subscription created', { id, pattern });\n\n return {\n id,\n pattern,\n unsubscribe: () => {\n this.unsubscribe(id);\n },\n };\n }\n\n /**\n * Unsubscribe from events.\n */\n unsubscribe(subscriptionId: SubscriptionId): void {\n const existed = this.subscriptions.delete(subscriptionId);\n if (existed) {\n this.stats.activeSubscriptions = this.subscriptions.size;\n this.logger?.debug('Subscription removed', { subscriptionId });\n }\n }\n\n /**\n * Get event history matching filter criteria.\n */\n getHistory(filter?: EventFilter): readonly DomainEvent[] {\n const historyArray = this.history.toArray();\n if (filter === undefined) {\n return historyArray;\n }\n\n const filtered = applyHistoryFilters(historyArray, filter);\n return applyHistoryLimit(filtered, filter);\n }\n\n /**\n * Clear event history.\n */\n clearHistory(): void {\n this.history.clear();\n this.stats.historySize = 0;\n this.logger?.debug('History cleared');\n }\n\n /**\n * Get event bus statistics.\n */\n getStats(): EventBusStats {\n return { ...this.stats };\n }\n\n /**\n * Check if a topic pattern has any subscribers.\n */\n hasSubscribers(pattern: TopicPattern): boolean {\n const regex = patternToRegex(pattern);\n for (const record of this.subscriptions.values()) {\n // Check if the patterns could overlap\n if (\n topicMatchesPattern(pattern, record.regex) ||\n topicMatchesPattern(record.pattern, regex)\n ) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Add event to history, maintaining size limit via O(1) circular buffer.\n * @see Issue #407 - Performance optimization\n */\n private addToHistory(event: DomainEvent): void {\n this.history.push(event);\n this.stats.historySize = this.history.size;\n }\n\n /**\n * Invoke a listener synchronously with error isolation.\n */\n private invokeListener(record: SubscriptionRecord, event: DomainEvent): void {\n try {\n const result = record.listener(event);\n // If async handling is enabled and listener returns a promise, don't wait\n if (this.asyncHandling && result instanceof Promise) {\n result.catch((error: unknown) => {\n this.handleListenerError(record, event, error);\n });\n }\n } catch (error) {\n this.handleListenerError(record, event, error);\n }\n }\n\n /**\n * Invoke a listener asynchronously.\n */\n private async invokeListenerAsync(record: SubscriptionRecord, event: DomainEvent): Promise<void> {\n try {\n await record.listener(event);\n } catch (error) {\n this.handleListenerError(record, event, error);\n }\n }\n\n /**\n * Handle listener errors without disrupting other listeners.\n */\n private handleListenerError(\n record: SubscriptionRecord,\n event: DomainEvent,\n error: unknown\n ): void {\n this.stats.errorCount++;\n const errorObj = error instanceof Error ? error : new Error(String(error));\n this.logger?.error('Event listener error', errorObj, {\n subscriptionId: record.id,\n pattern: record.pattern,\n eventTopic: event.topic,\n eventId: event.eventId,\n });\n }\n}\n\n/**\n * Create a singleton event bus instance for global coordination.\n * Use with caution - prefer dependency injection for testability.\n */\nlet globalBus: CollaborationEventBus | null = null;\n\nexport function getGlobalEventBus(options?: EventBusOptions): CollaborationEventBus {\n globalBus ??= new CollaborationEventBus(options);\n return globalBus;\n}\n\n/**\n * Reset the global event bus (for testing).\n */\nexport function resetGlobalEventBus(): void {\n globalBus = null;\n}\n\n/**\n * Factory functions for creating typed events.\n */\nexport function createEvent<T extends DomainEvent>(\n topic: T['topic'],\n payload: T['payload'],\n options?: {\n sessionId?: string;\n correlationId?: string;\n }\n): T {\n return {\n eventId: generateEventId(),\n timestamp: getTimeProvider().nowIso(),\n topic,\n payload,\n sessionId: options?.sessionId,\n correlationId: options?.correlationId,\n } as T;\n}\n","/**\n * Event Bus Topic Constants\n *\n * Type-safe topic constants for event subscription.\n *\n * @module agents/collaboration/event-bus-topics\n * (Source: Issue #182, ARCHITECTURE.md Hybrid Architecture)\n */\n\n/**\n * Topic constants for type-safe subscription.\n */\nexport const EventTopics = {\n // Session events\n SESSION_CREATED: 'session.created',\n SESSION_STATUS_CHANGED: 'session.status_changed',\n SESSION_PARTICIPANT_JOINED: 'session.participant_joined',\n SESSION_RESULT_SUBMITTED: 'session.result_submitted',\n SESSION_FINALIZED: 'session.finalized',\n SESSION_ALL: 'session.*',\n\n // Message events\n MESSAGE_SENT: 'message.sent',\n MESSAGE_RECEIVED: 'message.received',\n MESSAGE_ALL: 'message.*',\n\n // Agent events\n AGENT_TASK_DELEGATED: 'agent.task_delegated',\n AGENT_RESULT_BROADCAST: 'agent.result_broadcast',\n AGENT_ALL: 'agent.*',\n\n // Consensus events\n CONSENSUS_VOTE_REQUESTED: 'consensus.vote_requested',\n CONSENSUS_VOTE_CAST: 'consensus.vote_cast',\n CONSENSUS_REACHED: 'consensus.reached',\n CONSENSUS_ALL: 'consensus.*',\n\n // Protocol events\n PROTOCOL_STARTED: 'protocol.started',\n PROTOCOL_ITERATION: 'protocol.iteration',\n PROTOCOL_COMPLETED: 'protocol.completed',\n PROTOCOL_ALL: 'protocol.*',\n\n // Aegean phase events (Issue #216)\n AEGEAN_ROUND_STARTED: 'protocol.aegean.round_started',\n AEGEAN_VOTE_COLLECTED: 'protocol.aegean.vote_collected',\n AEGEAN_QUORUM_DETECTED: 'protocol.aegean.quorum_detected',\n AEGEAN_ALL: 'protocol.aegean.*',\n\n // Reflexion phase events (Issue #216)\n REFLEXION_CRITIQUE_STARTED: 'protocol.reflexion.critique_started',\n REFLEXION_CRITIQUE_COMPLETED: 'protocol.reflexion.critique_completed',\n REFLEXION_SYNTHESIS: 'protocol.reflexion.synthesis',\n REFLEXION_ALL: 'protocol.reflexion.*',\n\n // Trinity phase events (Issue #216)\n TRINITY_PHASE_STARTED: 'protocol.trinity.phase_started',\n TRINITY_PHASE_COMPLETED: 'protocol.trinity.phase_completed',\n TRINITY_ALL: 'protocol.trinity.*',\n\n // Byzantine detection events (Issue #218)\n BYZANTINE_WEIGHT_UPDATED: 'byzantine.weight_updated',\n BYZANTINE_PATTERN_DETECTED: 'byzantine.pattern_detected',\n BYZANTINE_AGENT_FLAGGED: 'byzantine.agent_flagged',\n BYZANTINE_COLLUSION_SUSPECTED: 'byzantine.collusion_suspected',\n BYZANTINE_ALL: 'byzantine.*',\n\n // Wildcard\n ALL: '*',\n} as const;\n","/**\n * Resilient Model Adapter\n *\n * Transparent proxy implementing IModelAdapter with lazy detection,\n * automatic failover on circuit breaker events, and observable health.\n *\n * Key design: ResilientAdapter IS an IModelAdapter. Every existing consumer\n * works unchanged. The health/failover API lives on IResilientAdapter for\n * dashboard and monitoring consumers only.\n *\n * @module adapters/resilient-adapter\n * (Source: Issue #811 - Resilient model adapter architecture)\n */\n\nimport type {\n IModelAdapter,\n CompletionRequest,\n CompletionResponse,\n StreamChunk,\n ModelCapability,\n} from '../core/types/model.js';\nimport type { Result } from '../core/result.js';\nimport { ok, err } from '../core/result.js';\nimport { ModelError, ConfigError } from '../core/errors.js';\nimport type { ILogger } from '../core/index.js';\nimport { getTimeProvider, getRandomProvider } from '../core/index.js';\nimport { getErrorMessage, createLogger } from '../core/index.js';\nimport { UNRESOLVED_MODEL_ID } from '../config/model-equivalence.js';\n\nimport { createAutoAdapter, type AdapterSelection } from './auto-adapter.js';\nimport { isCallerCancelled } from './abort-utils.js';\nimport { ensureGatewayDiscovered, gatewayDiscoveryGeneration } from './gateway-rediscovery.js';\nimport {\n isRateLimitLikeError,\n isDurableCapacityError,\n toRateLimitError,\n recordRateLimitEvent,\n} from './rate-limit-detector.js';\nimport type { CliName, EndpointArmId } from '../cli-adapters/types.js';\nimport { isEndpointArmId } from '../cli-adapters/types.js';\nimport type {\n IResilientAdapter,\n AdapterHealthInfo,\n ResilientAdapterConfig,\n} from './resilient-adapter-types.js';\nimport type { CircuitStateChangeEvent } from '../cli-adapters/circuit-breaker-types.js';\nimport type { CircuitBreakerRegistry } from '../cli-adapters/circuit-breaker.js';\nimport { mapModelErrorToCategory } from '../cli-adapters/circuit-breaker.js';\nimport { getGlobalEventBus } from '../core/event-bus.js';\n\n// ============================================================================\n// Factory\n// ============================================================================\n\n/**\n * Creates a resilient adapter with lazy detection and automatic failover.\n *\n * @example\n * ```typescript\n * const adapter = createResilientAdapter({ logger });\n * // No detection at creation time — detection happens on first use\n * const result = await adapter.complete(request); // triggers detection\n * ```\n */\nexport function createResilientAdapter(config?: ResilientAdapterConfig): IResilientAdapter {\n return new ResilientAdapter(config);\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Resilient adapter proxy. Implements IModelAdapter transparently.\n */\nexport class ResilientAdapter implements IResilientAdapter {\n private readonly logger: ILogger;\n private currentAdapter: IModelAdapter | undefined;\n private currentSelection: AdapterSelection | undefined;\n private hasEverDetected = false;\n private health: AdapterHealthInfo | undefined;\n private preferredCli: CliName | undefined;\n private readonly failoverCallbacks = new Set<(info: AdapterHealthInfo) => void>();\n private circuitBreakerRegistry: CircuitBreakerRegistry | undefined;\n private circuitListener: ((event: CircuitStateChangeEvent) => void) | undefined;\n private disposed = false;\n private readonly defaultCliTimeoutMs: number | undefined;\n /** Inflight detection promise for coalescing concurrent calls (Issue #1423). */\n private detectionPromise: Promise<IModelAdapter | undefined> | undefined;\n /** The {@link gatewayDiscoveryGeneration} the current selection was made under (#6659). */\n private detectedAtGeneration = 0;\n\n constructor(config?: ResilientAdapterConfig) {\n this.logger = config?.logger ?? createLogger({ component: 'resilient-adapter' });\n this.preferredCli = config?.preferredCli;\n this.defaultCliTimeoutMs = config?.defaultCliTimeoutMs;\n\n // #4659: arm at construction. The previous `attach`-only API was not on\n // IResilientAdapter, so neither production construction site could reach\n // it and the breaker never fired.\n if (config?.circuitBreakerRegistry !== undefined) {\n this.attachCircuitBreakerRegistry(config.circuitBreakerRegistry);\n }\n }\n\n // --- IModelAdapter properties (forwarded) ---\n\n /**\n * Before detection a CLI-pinned proxy identifies as the CLI it was asked\n * for (`cli-<name>`, the id its detected `CliToModelAdapter` will carry);\n * an unpinned proxy stays `resilient-proxy`.\n *\n * #6119: the voter fallover (#3587) keys seats by this id and skips a seat\n * whose key equals the fallback's. When codex never detected, the pinned\n * seat and the unpinned default were BOTH `resilient-proxy`, so the seat was\n * read as \"already on the fallback\" and errored instead of falling over.\n */\n get providerId(): string {\n if (this.currentAdapter !== undefined) return this.currentAdapter.providerId;\n return this.preferredCli === undefined ? 'resilient-proxy' : `cli-${this.preferredCli}`;\n }\n\n get modelId(): string {\n return this.currentAdapter?.modelId ?? UNRESOLVED_MODEL_ID;\n }\n\n get capabilities(): readonly ModelCapability[] {\n return this.currentAdapter?.capabilities ?? [];\n }\n\n /**\n * The gateway arm of the adapter currently serving this proxy, when a\n * gateway model serves it (#6604 family slots); otherwise undefined. A\n * telemetry writer handed this proxy reads it (`isGatewayModelAdapter`) to\n * price the call by the gateway's `NEXUS_GATEWAY_COST` declaration instead\n * of a list price.\n */\n get gatewayArm(): EndpointArmId | undefined {\n const arm: unknown = (this.currentAdapter as { gatewayArm?: unknown } | undefined)?.gatewayArm;\n return typeof arm === 'string' && isEndpointArmId(arm) ? arm : undefined;\n }\n\n // --- IModelAdapter methods ---\n\n async complete(request: CompletionRequest): Promise<Result<CompletionResponse, ModelError>> {\n const adapter = await this.ensureAdapter();\n if (adapter === undefined) {\n return err(new ModelError('No model adapter available'));\n }\n const result = await adapter.complete(request);\n if (!result.ok) {\n if (isRateLimitLikeError(result.error)) {\n const rlError = toRateLimitError(result.error, adapter.providerId);\n recordRateLimitEvent({\n provider: adapter.providerId,\n timestamp: getTimeProvider().now(),\n retryAfterMs: rlError.retryAfterMs,\n });\n this.logger.warn('Rate limit detected', {\n provider: adapter.providerId,\n retryAfterMs: rlError.retryAfterMs,\n });\n }\n this.recordBreakerFailure(adapter, result.error);\n }\n return result;\n }\n\n async *stream(request: CompletionRequest): AsyncIterable<StreamChunk> {\n const adapter = await this.ensureAdapter();\n if (adapter === undefined) {\n // #3105: error like complete() rather than yielding an empty stream — a\n // silent-empty stream masks \"no adapter available\" as a clean empty\n // completion, so streamWithFallback can't tell failure from a\n // legitimately-empty result.\n throw new ModelError('No model adapter available');\n }\n yield* adapter.stream(request);\n }\n\n async countTokens(text: string): Promise<number> {\n const adapter = await this.ensureAdapter();\n if (adapter === undefined) {\n return 0;\n }\n return adapter.countTokens(text);\n }\n\n validateConfig(): Result<void, ConfigError> {\n if (this.currentAdapter !== undefined) {\n return this.currentAdapter.validateConfig();\n }\n // Before first use, config is trivially valid\n return ok(undefined);\n }\n\n // --- IResilientAdapter methods ---\n\n getHealth(): AdapterHealthInfo | undefined {\n return this.health;\n }\n\n async refresh(): Promise<void> {\n this.currentAdapter = undefined;\n this.currentSelection = undefined;\n this.detectionPromise = undefined;\n await this.ensureAdapter();\n }\n\n setPreferredCli(cli: CliName | undefined): void {\n this.preferredCli = cli;\n this.currentAdapter = undefined;\n this.currentSelection = undefined;\n }\n\n onFailover(cb: (info: AdapterHealthInfo) => void): () => void {\n this.failoverCallbacks.add(cb);\n return () => {\n this.failoverCallbacks.delete(cb);\n };\n }\n\n /**\n * Attach a circuit breaker registry for automatic failover.\n * When the current adapter's circuit opens, the cached adapter\n * is cleared so the next call triggers re-detection.\n */\n /** The registry arming failover, or undefined if this adapter is unarmed (#4659). */\n getCircuitBreakerRegistry(): CircuitBreakerRegistry | undefined {\n return this.circuitBreakerRegistry;\n }\n\n attachCircuitBreakerRegistry(registry: CircuitBreakerRegistry): void {\n this.detachCircuitBreakerRegistry();\n this.circuitBreakerRegistry = registry;\n this.circuitListener = (event: CircuitStateChangeEvent) => {\n this.handleCircuitStateChange(event);\n };\n registry.addGlobalStateChangeListener(this.circuitListener);\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.detachCircuitBreakerRegistry();\n this.failoverCallbacks.clear();\n }\n\n // --- Private methods ---\n\n private async ensureAdapter(): Promise<IModelAdapter | undefined> {\n // #6659: the shared acquisition seam re-discovers a gateway that was down\n // at boot (backoff-bounded, one shared attempt; a no-op unless armed).\n // Once one is found, an adapter detected before it re-detects ONCE, so the\n // default and the family slots move onto the gateway. Not a failover: the\n // adapter left behind did not fail.\n // An adapter that already serves calls never waits on discovery: it fires\n // the attempt and keeps serving, and the generation check below switches\n // it on a LATER call. Only an adapter with nothing to serve yet waits,\n // since the discovery may be what gives it something (#6671 review).\n if (this.currentAdapter === undefined) {\n await ensureGatewayDiscovered();\n } else {\n void ensureGatewayDiscovered();\n }\n if (\n this.currentAdapter !== undefined &&\n this.detectedAtGeneration !== gatewayDiscoveryGeneration()\n ) {\n this.currentAdapter = undefined;\n this.currentSelection = undefined;\n this.hasEverDetected = false;\n }\n if (this.currentAdapter !== undefined) {\n return this.currentAdapter;\n }\n // Coalesce concurrent detection calls into a single probe (Issue #1423)\n this.detectionPromise ??= this.detectAdapter().finally(() => {\n this.detectionPromise = undefined;\n });\n return this.detectionPromise;\n }\n\n private async detectAdapter(): Promise<IModelAdapter | undefined> {\n // Read BEFORE detecting: a discovery that lands mid-detection leaves this\n // selection tagged stale, so the next call re-detects instead of keeping it.\n const generation = gatewayDiscoveryGeneration();\n try {\n this.logger.info('Detecting model adapter (lazy)');\n const config = {\n logger: this.logger,\n ...(this.preferredCli !== undefined && { preferredCli: this.preferredCli }),\n ...(this.defaultCliTimeoutMs !== undefined && {\n defaultCliTimeoutMs: this.defaultCliTimeoutMs,\n }),\n };\n const selection = await createAutoAdapter(config);\n this.applySelection(selection);\n this.detectedAtGeneration = generation;\n return this.currentAdapter;\n } catch (error) {\n const message = getErrorMessage(error);\n this.logger.warn('No model adapter available', { error: message });\n this.health = {\n source: 'api',\n state: 'unavailable',\n selectedAt: new Date(),\n failoverCount: this.health?.failoverCount ?? 0,\n lastError: message,\n };\n return undefined;\n }\n }\n\n private applySelection(selection: AdapterSelection): void {\n const isFailover = this.hasEverDetected;\n // #4670: capture the OUTGOING health before it is overwritten below. The\n // failover signal is about the adapter we are leaving — `unhealthyCliFrom`\n // reads `payload.source` as \"which CLI is unhealthy\" — and that state was\n // being destroyed one statement before `emitFailover` read it.\n const outgoingHealth = this.health;\n this.currentAdapter = selection.adapter;\n this.currentSelection = selection;\n this.hasEverDetected = true;\n\n const source = mapSelectionSource(selection);\n const failoverCount = (this.health?.failoverCount ?? 0) + (isFailover ? 1 : 0);\n\n this.health = {\n source,\n state: 'healthy',\n selectedAt: new Date(),\n failoverCount,\n };\n\n this.logger.info('Adapter selected', {\n source: selection.source,\n name: selection.name,\n model: selection.adapter.modelId,\n provider: selection.adapter.providerId,\n failover: isFailover,\n });\n\n if (isFailover) {\n // The state/source describe the adapter we LEFT; `failoverCount` is a\n // run-level counter, so it carries the post-increment value.\n this.emitFailover(\n outgoingHealth === undefined ? undefined : { ...outgoingHealth, failoverCount }\n );\n }\n }\n\n /**\n * Record a direct-API failure to the circuit breaker so API adapters get the\n * same degradation/failover learning that CLI subprocess failures get (#3423).\n *\n * The breaker key is `currentSelection.name` — distinct from the `api:<vendor>`\n * arm key used by the ModelToCliAdapter path (#3422).\n *\n * A CLI selection is NOT recorded here (#6712). Its CLI adapter's retry loop\n * (`executeCliRetryLoop`) has already recorded the failure in the same\n * registry under the same key, the CLI name, with the category taken from\n * the CliError code. Recording it again counted every CLI failure twice (the\n * second time usually as `unknown`), so the breaker opened at about half its\n * configured threshold. Only a direct-API selection, which has no inner\n * recorder, is recorded by this layer.\n *\n * Rate-limit failures are deliberately skipped here: they are already recorded\n * by the `recordRateLimitEvent` telemetry branch in `complete()`, and the\n * breaker counts rate limits as failures by default\n * (`countRateLimitsAsFailures`), so recording them again would double-count.\n *\n * Security (#3422 constraint): the logged payload carries only `provider` and\n * `category` — never `error.message`, the request, or the ModelError object,\n * any of which could embed credentials.\n */\n private recordBreakerFailure(adapter: IModelAdapter, error: ModelError): void {\n if (this.circuitBreakerRegistry === undefined || this.currentSelection === undefined) {\n return;\n }\n // #6712: the CLI adapter's retry loop owns recording for a CLI selection.\n if (this.currentSelection.source === 'cli') return;\n\n // #6691: a call its caller cancelled (cancel_job) is not a health signal.\n if (isCallerCancelled(error)) return;\n\n const category = mapModelErrorToCategory(error);\n // Skip rate limits: already accounted for by the rate-limit telemetry branch\n // (and the breaker counts them by default). Check BOTH the mapped category\n // AND the telemetry predicate — their rate-limit pattern lists differ\n // (`isRateLimitLikeError` matches \"quota exceeded\"/\"throttl\"/… that\n // `categorizeError` does not), so a code-less MODEL_ERROR could otherwise\n // fire the telemetry branch yet fall through to a counted failure here,\n // double-counting against the threshold (#3423 review).\n // #5359: a DURABLE capacity cap is excluded from this exemption. The\n // exemption is right for a transient throttle — an ordinary panel trips a\n // per-minute limit while plenty of quota remains, and opening a breaker on\n // that would empty the candidate pool for a condition clearing within the\n // minute. It is wrong for an exhausted credential, which does not clear:\n // never counting it means the breaker never opens, so every subsequent call\n // pays the same futile retries against the same dead key.\n if (isDurableCapacityError(error)) {\n this.circuitBreakerRegistry\n .getBreaker(this.currentSelection.name as CliName)\n .recordFailure(category);\n this.logger.warn('Durable capacity cap recorded to circuit breaker', {\n provider: adapter.providerId,\n category,\n });\n return;\n }\n\n if (category === 'rate_limit' || isRateLimitLikeError(error)) {\n return;\n }\n\n this.circuitBreakerRegistry\n .getBreaker(this.currentSelection.name as CliName)\n .recordFailure(category);\n\n this.logger.warn('API failure recorded to circuit breaker', {\n provider: adapter.providerId,\n category,\n });\n }\n\n private handleCircuitStateChange(event: CircuitStateChangeEvent): void {\n if (event.newState !== 'open') return;\n\n const currentSource = this.currentSelection?.name;\n if (currentSource === undefined || currentSource !== event.cliName) {\n return; // Not our current adapter\n }\n\n this.logger.warn('Current adapter circuit opened, clearing cache for re-detection', {\n cli: event.cliName,\n reason: event.reason,\n });\n\n this.currentAdapter = undefined;\n this.currentSelection = undefined;\n\n if (this.health !== undefined) {\n this.health = {\n ...this.health,\n state: 'degraded',\n lastError: event.reason,\n };\n }\n }\n\n /**\n * Emit the failover signal describing the adapter we failed AWAY FROM (#4670).\n *\n * This used to read `this.health`, which `applySelection` had just replaced\n * with the incoming adapter's `state: 'healthy'`. So every `adapter.failover`\n * payload said healthy, `unhealthyCliFrom` (`observability/failover-signals.ts`)\n * returned undefined for all of them, and `signal.swarm_unhealthy` was never\n * produced by this — the more reliable of its two producers.\n *\n * An undefined outgoing health emits NOTHING rather than falling back to the\n * current one. Falling back would silently restore the old behaviour, and a\n * failover whose prior state we cannot describe is not evidence that the\n * prior adapter was healthy.\n */\n private emitFailover(outgoingHealth: AdapterHealthInfo | undefined): void {\n const info = outgoingHealth;\n if (info === undefined) return;\n\n for (const cb of this.failoverCallbacks) {\n try {\n cb(info);\n } catch (error: unknown) {\n this.logger.debug('Failover callback error', { error: getErrorMessage(error) });\n }\n }\n\n try {\n const eventBus = getGlobalEventBus();\n eventBus.emit({\n eventId: `failover-${getTimeProvider().now().toString(36)}-${getRandomProvider().random().toString(36).slice(2, 8)}`,\n timestamp: new Date().toISOString(),\n topic: 'adapter.failover',\n payload: info,\n });\n } catch (error: unknown) {\n this.logger.debug('CollaborationEventBus emit failed during failover', {\n error: getErrorMessage(error),\n });\n }\n }\n\n private detachCircuitBreakerRegistry(): void {\n if (this.circuitBreakerRegistry !== undefined && this.circuitListener !== undefined) {\n this.circuitBreakerRegistry.removeGlobalStateChangeListener(this.circuitListener);\n }\n this.circuitBreakerRegistry = undefined;\n this.circuitListener = undefined;\n }\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction mapSelectionSource(selection: AdapterSelection): CliName | 'api' {\n if (selection.source === 'cli') {\n return selection.name as CliName;\n }\n return 'api';\n}\n","/**\n * A CLI slot adapter bound to one requested model (#6599).\n *\n * `UnifiedAdapterRegistry.getAdapterForModel` resolves a model preference to\n * its CLI slot, and the slot adapter is shared and CLI-scoped: it has no\n * model of its own beyond the CLI default. Returning it bare dropped the\n * model, so `execute_expert` ran the CLI's default whatever was asked for.\n * This view stamps the model onto every request that does not name its own,\n * and delegates everything else to the shared slot adapter, which the\n * registry still owns.\n *\n * @module adapters/model-bound-adapter\n */\n\nimport type {\n CompletionRequest,\n CompletionResponse,\n ConfigError,\n ModelCapability,\n ModelError,\n Result,\n} from '../core/index.js';\nimport type { StreamChunk } from '../core/types/model.js';\nimport type { CliName } from '../cli-adapters/types.js';\nimport type { CircuitBreakerRegistry } from '../cli-adapters/circuit-breaker.js';\nimport type { AdapterHealthInfo, IResilientAdapter } from './resilient-adapter-types.js';\n\nexport class ModelBoundAdapter implements IResilientAdapter {\n constructor(\n private readonly slot: IResilientAdapter,\n /** Canonical registry id every unmodelled request is sent with. */\n readonly boundModel: string\n ) {}\n\n get providerId(): string {\n return this.slot.providerId;\n }\n\n get modelId(): string {\n return this.slot.modelId;\n }\n\n get capabilities(): readonly ModelCapability[] {\n return this.slot.capabilities;\n }\n\n private bind(request: CompletionRequest): CompletionRequest {\n return request.model !== undefined ? request : { ...request, model: this.boundModel };\n }\n\n complete(request: CompletionRequest): Promise<Result<CompletionResponse, ModelError>> {\n return this.slot.complete(this.bind(request));\n }\n\n stream(request: CompletionRequest): AsyncIterable<StreamChunk> {\n return this.slot.stream(this.bind(request));\n }\n\n countTokens(text: string): Promise<number> {\n return this.slot.countTokens(text);\n }\n\n validateConfig(): Result<void, ConfigError> {\n return this.slot.validateConfig();\n }\n\n getHealth(): AdapterHealthInfo | undefined {\n return this.slot.getHealth();\n }\n\n refresh(): Promise<void> {\n return this.slot.refresh();\n }\n\n setPreferredCli(cli: CliName | undefined): void {\n this.slot.setPreferredCli(cli);\n }\n\n onFailover(cb: (info: AdapterHealthInfo) => void): () => void {\n return this.slot.onFailover(cb);\n }\n\n getCircuitBreakerRegistry(): CircuitBreakerRegistry | undefined {\n return this.slot.getCircuitBreakerRegistry?.();\n }\n\n /** No-op: the shared slot adapter belongs to the registry, which disposes it. */\n dispose(): void {\n // Intentionally empty — disposing the view must not dispose the slot.\n }\n}\n","/**\n * Unified Adapter Registry — single entry point for all model adapter access.\n *\n * Pre-computes task-to-CLI routing from the canonical model registry and\n * task specialization matrix at creation time. All consumers get adapters\n * through this registry instead of calling createAutoAdapter/createResilientAdapter\n * directly.\n *\n * Design:\n * - One IResilientAdapter per CLI (claude/gemini/codex), created lazily on first access\n * - One \"default\" adapter for unscoped requests (uses createAutoAdapter priority)\n * - Task routing is deterministic: category → primary CLI → cached adapter\n * - Session-scoped: create once at MCP startup, reuse for the session lifetime\n *\n * @module adapters/unified-registry\n * (Source: Issue #1149 — Unified Adapter Registry)\n * (Source: Issue #1151 — Single adapter entry point)\n */\n\nimport type { ILogger } from '../core/index.js';\nimport { ConfigError } from '../core/errors.js';\nimport { getDefaultCliCircuitBreakerRegistry } from '../cli-adapters/cli-circuit-breaker.js';\nimport { createLogger } from '../core/index.js';\nimport { createResilientAdapter } from './resilient-adapter.js';\nimport { ModelBoundAdapter } from './model-bound-adapter.js';\nimport { isGatewayArmId, warnIfGatewayCostUndeclared } from './sdk/gateway-cost.js';\nimport type { IResilientAdapter } from './resilient-adapter-types.js';\nimport type { CliName, EndpointArmId, ObservedArmId } from '../cli-adapters/types.js';\nimport { isCliName, isEndpointArmId } from '../cli-adapters/types.js';\nimport { TASK_SPECIALIZATION_MATRIX, detectTaskCategory } from '../config/task-specialization.js';\nimport type { TaskCategory } from '../config/task-specialization-types.js';\nimport {\n getDefaultModelForCli,\n getInTreeCapabilitiesMatrix,\n} from '../config/model-config-helpers.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Configuration for the unified registry. */\nexport interface UnifiedRegistryConfig {\n /** Logger instance */\n readonly logger?: ILogger;\n /** Default CLI timeout for subprocess calls (ms) */\n readonly defaultCliTimeoutMs?: number;\n}\n\n/** Summary of the pre-computed task routing table. */\nexport interface TaskRoutingEntry {\n readonly category: TaskCategory;\n readonly primaryCli: CliName;\n readonly secondaryCli: CliName;\n readonly primaryModel: string;\n}\n\n/** Snapshot of registry state for observability. */\nexport interface RegistrySnapshot {\n readonly taskRouting: readonly TaskRoutingEntry[];\n /**\n * CLI-slot view of {@link cachedArms}: the lazily created CLI slots only.\n * A registered `api:*` arm is never listed here (#6290 panel: this field\n * keeps its `CliName[]` type; it is retired in 9.0, #6291).\n */\n readonly cachedAdapters: readonly CliName[];\n /** Every cached arm: lazily created CLI slots and registered `api:*` endpoint arms (#4392). */\n readonly cachedArms: readonly ObservedArmId[];\n readonly availableModels: number;\n}\n\n// ============================================================================\n// Registry\n// ============================================================================\n\n/**\n * Unified adapter registry. Centralizes all adapter creation and task routing.\n *\n * Usage:\n * ```typescript\n * const registry = createUnifiedRegistry({ logger });\n * const adapter = registry.getAdapter('code_generation'); // → codex adapter\n * const adapter2 = registry.getAdapterForCli('claude'); // → claude adapter\n * const adapter3 = registry.getDefault(); // → best available\n * ```\n */\n\nexport class UnifiedAdapterRegistry {\n private readonly logger: ILogger;\n private readonly defaultCliTimeoutMs: number | undefined;\n\n /**\n * Per-arm adapter cache. CLI slots are created lazily by\n * {@link getAdapterForCli}; `api:*` arms enter only through\n * {@link registerApiArm} and are never synthesised (#4392).\n */\n private readonly cliAdapters = new Map<ObservedArmId, IResilientAdapter>();\n\n /** Default adapter for unscoped requests. */\n private defaultAdapter: IResilientAdapter | undefined;\n\n constructor(config?: UnifiedRegistryConfig) {\n this.logger = config?.logger ?? createLogger({ component: 'unified-registry' });\n this.defaultCliTimeoutMs = config?.defaultCliTimeoutMs;\n this.logger.info('UnifiedAdapterRegistry initialized', {\n categories: TASK_SPECIALIZATION_MATRIX.length,\n models: getInTreeCapabilitiesMatrix().models.length,\n });\n }\n\n // --------------------------------------------------------------------------\n // Public API\n // --------------------------------------------------------------------------\n\n /** Logger used by this registry. Exposed so singleton helpers can warn. */\n getLogger(): ILogger {\n return this.logger;\n }\n\n /**\n * Get adapter for a task category. Routing is re-resolved on every read\n * (#3185) so a post-startup overlay/registry update propagates without a\n * restart. Falls back to default adapter if category unknown.\n */\n getAdapter(category: TaskCategory): IResilientAdapter {\n const routing = this.getRouting(category);\n if (routing === undefined) {\n this.logger.warn('Unknown task category, using default', { category });\n return this.getDefault();\n }\n return this.getAdapterForCli(routing.primaryCli);\n }\n\n /**\n * Get adapter for a free-text task description.\n * Detects category from keywords, falls back to default.\n */\n getAdapterForTask(taskDescription: string): IResilientAdapter {\n const match = detectTaskCategory(taskDescription);\n if (match !== null) {\n this.logger.debug('Task category detected', {\n category: match.category,\n cli: match.primaryCli,\n });\n return this.getAdapterForCli(match.primaryCli);\n }\n return this.getDefault();\n }\n\n /**\n * Get adapter pinned to a specific CLI.\n * Creates and caches one IResilientAdapter per CLI.\n */\n getAdapterForCli(cli: CliName): IResilientAdapter {\n const cached = this.cliAdapters.get(cli);\n if (cached !== undefined) return cached;\n\n const raw = createResilientAdapter({\n logger: this.logger,\n preferredCli: cli,\n // #4659: the SHARED registry — the same one that already gates\n // voter-panel availability (#4330). Per-adapter registries would let one\n // adapter keep routing to a CLI another has already seen fail.\n circuitBreakerRegistry: getDefaultCliCircuitBreakerRegistry(),\n ...(this.defaultCliTimeoutMs !== undefined && {\n defaultCliTimeoutMs: this.defaultCliTimeoutMs,\n }),\n });\n const adapter = raw;\n this.cliAdapters.set(cli, adapter);\n this.logger.info('Created CLI-specific adapter', {\n cli,\n });\n return adapter;\n }\n\n /**\n * Get the adapter for a routing arm (#4392). A CLI slot resolves exactly as\n * {@link getAdapterForCli} (created lazily, cached, armed with the shared\n * breaker registry). An `api:*` arm resolves to what {@link registerApiArm}\n * supplied, or `undefined` — never to a CLI slot, and never by creating one.\n */\n getAdapterForArm(arm: ObservedArmId): IResilientAdapter | undefined {\n // Split on CLI-slot membership, not on the validator: an `api:` string\n // that fails validation must read as \"not registered\", never be handed\n // to getAdapterForCli to mint a slot adapter under a garbage name.\n if (isCliName(arm)) {\n return this.getAdapterForCli(arm);\n }\n return this.cliAdapters.get(arm);\n }\n\n /**\n * Register an `api:*` arm's adapter under its endpoint identity (#4392).\n * Refuses built-in vendor arms (`api:anthropic`, `api:openai`, `api:google`, `api:gemini`)\n * to prevent hijacking or redirecting vendor traffic without authorization.\n * Accepts a dynamic `EndpointArmId`; the id is re-validated at runtime\n * because the `EndpointArmId` type admits any `api:` string, so a cast from an\n * unvalidated name is exactly what this refuses.\n * Registering an id twice replaces (and disposes) the earlier adapter.\n * CLI-slot behaviour is untouched. A registered endpoint arm is observable\n * here and in the breaker registry but is NOT a `RoutingArmId`: it cannot\n * enter outcome records until #6291. A gateway arm registered without a\n * `NEXUS_GATEWAY_COST` declaration is warned about here, once, at the\n * moment it becomes routable (#4392 increment 2).\n */\n registerApiArm(arm: EndpointArmId, adapter: IResilientAdapter): void {\n if (!isEndpointArmId(arm)) {\n throw new Error(`Invalid api arm id: ${JSON.stringify(arm)} (expected api:<endpoint>)`);\n }\n if (!isGatewayArmId(arm) || arm === 'api:gemini') {\n throw new Error(`Cannot overwrite built-in vendor arm: ${arm}`);\n }\n this.cliAdapters.get(arm)?.dispose();\n this.cliAdapters.set(arm, adapter);\n this.logger.info('Registered api arm adapter', { arm });\n warnIfGatewayCostUndeclared(arm, this.logger);\n }\n\n /**\n * Get adapter for a model preference string (e.g., \"claude-opus-4-6\").\n * Resolves the model to its CLI via the canonical registry.\n * Falls back to default adapter if model not recognized.\n *\n * An exact match returns the CLI slot adapter bound to the matched registry\n * id, so the model reaches the CLI instead of its default (#6599). A prefix\n * match routes to the CLI only, as before: the name was not an entry.\n */\n getAdapterForModel(modelPreference: string): IResilientAdapter {\n // Prefer exact matches (id / cliAlias / cliModelName) over prefix matches.\n // For prefix fallback, longest-prefix-wins so a future registry containing\n // both 'gemini-pro' and 'gemini-pro-experimental' resolves correctly even\n // though the registry's natural array order isn't sorted by id length.\n // Defense-in-depth — no current registry has prefix overlaps. (#2192)\n const allModels = getInTreeCapabilitiesMatrix().models;\n const exact = allModels.find(\n (m) =>\n m.id === modelPreference ||\n m.cliAlias === modelPreference ||\n m.cliModelName === modelPreference\n );\n const prefix =\n exact ??\n [...allModels]\n .filter((m) => modelPreference.startsWith(m.id))\n .sort((a, b) => b.id.length - a.id.length)[0];\n const model = prefix;\n if (model !== undefined) {\n this.logger.debug('Model resolved to CLI', {\n model: modelPreference,\n cli: model.cliName,\n });\n const slot = this.getAdapterForCli(model.cliName as CliName);\n return exact !== undefined ? new ModelBoundAdapter(slot, exact.id) : slot;\n }\n this.logger.debug('Model not in registry, using default', {\n model: modelPreference,\n });\n return this.getDefault();\n }\n\n /**\n * Get adapter for an expert role (e.g., \"code_expert\").\n * Uses ROLE_TO_TASK_CATEGORY mapping → task specialization → CLI.\n */\n getAdapterForRole(role: string): IResilientAdapter {\n const category = ROLE_TO_CATEGORY[role];\n if (category !== undefined) return this.getAdapter(category);\n return this.getDefault();\n }\n\n /**\n * Get the default adapter (no CLI preference — auto-detection priority).\n */\n getDefault(): IResilientAdapter {\n if (this.defaultAdapter !== undefined) return this.defaultAdapter;\n const raw = createResilientAdapter({\n logger: this.logger,\n circuitBreakerRegistry: getDefaultCliCircuitBreakerRegistry(),\n ...(this.defaultCliTimeoutMs !== undefined && {\n defaultCliTimeoutMs: this.defaultCliTimeoutMs,\n }),\n });\n this.defaultAdapter = raw;\n return this.defaultAdapter;\n }\n\n /**\n * Get snapshot of registry state for observability/debugging. Routing is\n * re-resolved on read (#3185) so the snapshot reflects the live registry.\n */\n getSnapshot(): RegistrySnapshot {\n return {\n taskRouting: TASK_SPECIALIZATION_MATRIX.map((spec) => this.resolveRouting(spec)),\n cachedAdapters: [...this.cliAdapters.keys()].filter(isCliName),\n cachedArms: [...this.cliAdapters.keys()],\n availableModels: getInTreeCapabilitiesMatrix().models.length,\n };\n }\n\n /**\n * Resolve the routing for a specific category.\n *\n * Computed on every read (#3185) rather than cached at construction, so a\n * post-startup model-registry / overlay update (e.g. a default-model change\n * surfaced via `getDefaultModelForCli`) propagates to routing decisions\n * without a process restart. The matrix is ~10 categories — the per-read\n * resolution cost is negligible.\n */\n getRouting(category: TaskCategory): TaskRoutingEntry | undefined {\n const spec = TASK_SPECIALIZATION_MATRIX.find((s) => s.category === category);\n if (spec === undefined) return undefined;\n return this.resolveRouting(spec);\n }\n\n /**\n * Dispose all cached adapters.\n */\n dispose(): void {\n for (const adapter of this.cliAdapters.values()) {\n adapter.dispose();\n }\n this.cliAdapters.clear();\n this.defaultAdapter?.dispose();\n this.defaultAdapter = undefined;\n this.logger.info('UnifiedAdapterRegistry disposed');\n }\n\n // --------------------------------------------------------------------------\n // Private\n // --------------------------------------------------------------------------\n\n /**\n * Resolve one specialization-matrix row into a routing entry, re-reading the\n * primary model from the (overlay-aware) model registry each call (#3185).\n */\n private resolveRouting(spec: (typeof TASK_SPECIALIZATION_MATRIX)[number]): TaskRoutingEntry {\n return {\n category: spec.category,\n primaryCli: spec.primaryCli,\n secondaryCli: spec.secondaryCli,\n primaryModel: resolveDefaultModel(spec.primaryCli),\n };\n }\n}\n\n// ============================================================================\n// Role → Category Mapping (consolidated from create-expert-routing.ts)\n// ============================================================================\n\n/** Maps expert roles to task categories for CLI specialization. */\nconst ROLE_TO_CATEGORY: Record<string, TaskCategory> = {\n code_expert: 'code_generation',\n architecture_expert: 'architecture',\n security_expert: 'security_review',\n documentation_expert: 'documentation',\n testing_expert: 'testing',\n devops_expert: 'devops',\n research_expert: 'research',\n pm_expert: 'planning',\n ux_expert: 'planning',\n infrastructure_expert: 'devops',\n};\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Resolve the default model name for a CLI from the canonical registry. */\nfunction resolveDefaultModel(cli: string): string {\n if (isCliName(cli)) {\n return getDefaultModelForCli(cli);\n }\n return cli;\n}\n\n// ============================================================================\n// Factory & Singleton\n// ============================================================================\n\nlet globalRegistry: UnifiedAdapterRegistry | undefined;\n\n/**\n * Create a new UnifiedAdapterRegistry instance.\n * For most uses, prefer `getGlobalRegistry()` instead.\n */\nexport function createUnifiedRegistry(config?: UnifiedRegistryConfig): UnifiedAdapterRegistry {\n return new UnifiedAdapterRegistry(config);\n}\n\n/**\n * Claim the global registry for a process entry point, choosing its logger\n * (#6012). Idempotent and SILENT when the registry already exists — unlike\n * {@link getGlobalRegistry} with a config, which warns.\n *\n * That difference is the point. There is not exactly one composition root: the\n * bundled CLI enters through `cli.ts main()`, and an embedder can start the MCP\n * server directly without it. Both should be able to claim, first-one-wins,\n * without the second producing a warning an operator cannot act on — which is\n * what a config-passing `getGlobalRegistry` call does, and is the noise this\n * whole change removes.\n *\n * This does NOT provide per-caller log attribution: the singleton has one\n * logger. It makes that one logger a deliberate choice rather than a\n * consequence of which module happened to run first.\n */\nexport function claimGlobalRegistry(logger: ILogger): UnifiedAdapterRegistry {\n globalRegistry ??= new UnifiedAdapterRegistry({ logger });\n return globalRegistry;\n}\n\n/**\n * Thrown by {@link getGlobalRegistry} when a non-empty config arrives after\n * the singleton exists (#5211). The registry has no way to apply it — the\n * logger and `defaultCliTimeoutMs` are fixed at construction — so until this\n * error existed the config was logged at `warn` and dropped, and the caller\n * went on with a registry built from someone else's settings. A config that is\n * accepted and ignored is an instrument that misreports what it was given.\n *\n * The check is on presence, not on equality with the live config: the registry\n * does not keep the config it was built from, and a caller re-supplying the\n * same values is still a caller that believes it configured something.\n */\nexport class RegistryAlreadyInitializedError extends ConfigError {\n constructor(providedKeys: readonly string[]) {\n super(\n 'UnifiedAdapterRegistry singleton is already initialized, so getGlobalRegistry() cannot ' +\n `apply the supplied config (keys: ${providedKeys.join(', ')}). Call resetGlobalRegistry() ` +\n 'first if reconfiguration is intentional, or getGlobalRegistry() with no config to use the ' +\n 'existing instance; claimGlobalRegistry(logger) is the idempotent way to name the logger.',\n { context: { providedKeys: [...providedKeys] } }\n );\n this.name = 'RegistryAlreadyInitializedError';\n }\n}\n\n/**\n * Get the global singleton registry.\n * Creates it on first access with default config.\n *\n * If the singleton already exists and a non-empty config is supplied, this\n * throws {@link RegistryAlreadyInitializedError} — the config cannot be\n * applied, and returning the existing instance would silently hand the caller\n * a registry configured by whoever ran first (#5211). Omitting the config, or\n * passing an empty object, returns the existing instance as before.\n */\nexport function getGlobalRegistry(config?: UnifiedRegistryConfig): UnifiedAdapterRegistry {\n if (globalRegistry === undefined) {\n globalRegistry = new UnifiedAdapterRegistry(config);\n return globalRegistry;\n }\n if (config !== undefined && Object.keys(config).length > 0) {\n throw new RegistryAlreadyInitializedError(Object.keys(config));\n }\n return globalRegistry;\n}\n\n/** Reset the global registry (for testing). */\nexport function resetGlobalRegistry(): void {\n globalRegistry?.dispose();\n globalRegistry = undefined;\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveClassGuardMs
3
- } from "./chunk-Y4ZLHASZ.js";
3
+ } from "./chunk-7S7DKO4D.js";
4
4
 
5
5
  // src/cli/cli-readiness.ts
6
6
  var READINESS_LEVELS = ["installed", "authenticated", "serves"];
@@ -107,4 +107,4 @@ export {
107
107
  SERVES_PROBE_PROMPT,
108
108
  probeServes
109
109
  };
110
- //# sourceMappingURL=chunk-I2FZPV7P.js.map
110
+ //# sourceMappingURL=chunk-5TRZCY36.js.map
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-W654ME6B.js";
4
4
  import {
5
5
  resolveToken
6
- } from "./chunk-QDDTFVW7.js";
6
+ } from "./chunk-PWWOIE47.js";
7
7
  import {
8
8
  REGISTRY_PATH,
9
9
  getProjectRoot,
10
10
  loadPapersRegistry,
11
11
  loadTechniquesRegistry,
12
12
  savePapersRegistry
13
- } from "./chunk-76XX7NPA.js";
13
+ } from "./chunk-IS2PAAEU.js";
14
14
  import {
15
15
  resolveInsideRoot
16
16
  } from "./chunk-XEPZSDN5.js";
@@ -21,7 +21,7 @@ import {
21
21
  rankedItemTrustTier,
22
22
  trustTierLabel,
23
23
  withoutUntrustedMemory
24
- } from "./chunk-7JKUA5X6.js";
24
+ } from "./chunk-DP7JQSU7.js";
25
25
  import {
26
26
  capitalizeWords,
27
27
  tokenizeFiltered,
@@ -50,7 +50,7 @@ import {
50
50
  ok,
51
51
  registerPersistentDistillerFactory,
52
52
  sigmoidConfidence
53
- } from "./chunk-Y4ZLHASZ.js";
53
+ } from "./chunk-7S7DKO4D.js";
54
54
  import {
55
55
  ensureLearningDir,
56
56
  getRulesFile
@@ -4287,4 +4287,4 @@ export {
4287
4287
  DEFAULT_CONTEXT_BUDGET_TOKENS,
4288
4288
  getContextPromptPrefix
4289
4289
  };
4290
- //# sourceMappingURL=chunk-LLG4XR6P.js.map
4290
+ //# sourceMappingURL=chunk-67GC5TY5.js.map
@@ -1,21 +1,58 @@
1
1
  import {
2
2
  ensureGatewayDiscovered,
3
3
  gatewayDiscoveryGeneration
4
- } from "./chunk-LYZ2OXI7.js";
4
+ } from "./chunk-X3S62T3S.js";
5
5
  import {
6
6
  resolveCliSlot
7
- } from "./chunk-3SY2GPU3.js";
7
+ } from "./chunk-RWKINNVG.js";
8
8
  import {
9
9
  createLogger,
10
10
  getTimeProvider,
11
11
  isRateLimitText
12
- } from "./chunk-Y4ZLHASZ.js";
12
+ } from "./chunk-7S7DKO4D.js";
13
+
14
+ // src/pipeline/expert-access-mode.ts
15
+ var logger = createLogger({ component: "expert-bridge" });
16
+ function servedAccessOf(value) {
17
+ return {
18
+ ...value.accessMode !== void 0 && { accessMode: value.accessMode },
19
+ ...value.textOnly === true && { textOnly: true },
20
+ ...value.permissionDenials !== void 0 && { permissionDenials: value.permissionDenials }
21
+ };
22
+ }
23
+ var EXECUTION_ACCESS_MODES = {
24
+ default: true,
25
+ "read-only-analysis": true,
26
+ "workspace-edit": true
27
+ };
28
+ function assertAccessMode(accessMode) {
29
+ if (accessMode === void 0) return;
30
+ if (typeof accessMode === "string" && Object.hasOwn(EXECUTION_ACCESS_MODES, accessMode)) return;
31
+ throw new TypeError(
32
+ `executeExpert: unknown accessMode ${JSON.stringify(accessMode)}; expected one of ${Object.keys(
33
+ EXECUTION_ACCESS_MODES
34
+ ).join(", ")}`
35
+ );
36
+ }
37
+ function withRequestedAccessMode(result, requestedAccessMode, expertType) {
38
+ logger.debug("Expert call access mode", {
39
+ expertType,
40
+ requestedAccessMode,
41
+ accessMode: result.accessMode,
42
+ servedBy: result.routedArm ?? result.cli,
43
+ textOnly: result.textOnly === true
44
+ });
45
+ return { ...result, requestedAccessMode };
46
+ }
47
+ function requestedAccessModeOf(options) {
48
+ return options?.accessMode ?? "default";
49
+ }
13
50
 
14
51
  // src/pipeline/expert-bridge.ts
15
52
  function resolveCliFromModelString(model) {
16
53
  return resolveCliSlot(model);
17
54
  }
18
- var logger = createLogger({ component: "expert-bridge" });
55
+ var logger2 = createLogger({ component: "expert-bridge" });
19
56
  var RATE_LIMIT_BASE_DELAY_MS = 3e3;
20
57
  function routedAttribution(routed, model) {
21
58
  const cli = routed.routedCli ?? resolveCliFromModelString(model);
@@ -34,7 +71,7 @@ async function getMcpConfigPath() {
34
71
  if (cachedMcpConfigPath !== null) return cachedMcpConfigPath;
35
72
  mcpConfigInitPromise ??= (async () => {
36
73
  try {
37
- const { generateMcpConfig } = await import("./child-mcp-config-BYNNNVZF.js");
74
+ const { generateMcpConfig } = await import("./child-mcp-config-CLT4G6JV.js");
38
75
  const config = await generateMcpConfig();
39
76
  cachedMcpConfigPath = config.configPath;
40
77
  cachedMcpConfigCleanup = config.cleanup;
@@ -56,7 +93,7 @@ async function shutdownExpertBridge() {
56
93
  await cleanup();
57
94
  } catch (error) {
58
95
  const msg = error instanceof Error ? error.message : String(error);
59
- logger.debug("Expert-bridge MCP-config cleanup failed", { error: msg });
96
+ logger2.debug("Expert-bridge MCP-config cleanup failed", { error: msg });
60
97
  }
61
98
  }
62
99
  var cachedCircuitBreaker = null;
@@ -100,7 +137,9 @@ function adaptCompositeRouter(compositeRouter) {
100
137
  ...split !== void 0 && { tokensIn: split.tokensIn, tokensOut: split.tokensOut },
101
138
  // #6624: which gateway served the model, so its cost is priced by
102
139
  // the gateway's declaration.
103
- ...result.value.gatewayArm !== void 0 && { gatewayArm: result.value.gatewayArm }
140
+ ...result.value.gatewayArm !== void 0 && { gatewayArm: result.value.gatewayArm },
141
+ // #6792: what the served arm reported about its host access.
142
+ ...servedAccessOf(result.value)
104
143
  },
105
144
  error: { message: "" }
106
145
  };
@@ -126,8 +165,8 @@ async function getRouter() {
126
165
  }
127
166
  if (cachedRouter !== null) return cachedRouter;
128
167
  routerInitPromise ??= (async () => {
129
- const { createAllAdapters } = await import("./factory-ZGYUWL2O.js");
130
- const { createCompositeRouter } = await import("./composite-router-OEN6DCPK.js");
168
+ const { createAllAdapters } = await import("./factory-NCCP3VNN.js");
169
+ const { createCompositeRouter } = await import("./composite-router-FCW4AZCS.js");
131
170
  const adapters = createAllAdapters();
132
171
  const superseded = generation !== routerGeneration;
133
172
  if (adapters.size === 0) {
@@ -138,11 +177,11 @@ async function getRouter() {
138
177
  if (superseded) return router;
139
178
  cachedRouter = router;
140
179
  try {
141
- const { createCliCircuitBreakerIntegration } = await import("./cli-circuit-breaker-KR72NLMQ.js");
180
+ const { createCliCircuitBreakerIntegration } = await import("./cli-circuit-breaker-NY4BI2M4.js");
142
181
  cachedCircuitBreaker = createCliCircuitBreakerIntegration([...adapters.values()]);
143
182
  } catch (error) {
144
183
  const msg = error instanceof Error ? error.message : String(error);
145
- logger.debug("Circuit breaker init failed; continuing without it", { error: msg });
184
+ logger2.debug("Circuit breaker init failed; continuing without it", { error: msg });
146
185
  }
147
186
  return router;
148
187
  })();
@@ -178,7 +217,8 @@ function toSuccessResult(value, expertType, durationMs) {
178
217
  ...value.model !== void 0 && { model: value.model },
179
218
  ...value.tokensIn !== void 0 && { tokensIn: value.tokensIn },
180
219
  ...value.tokensOut !== void 0 && { tokensOut: value.tokensOut },
181
- ...value.gatewayArm !== void 0 && { gatewayArm: value.gatewayArm }
220
+ ...value.gatewayArm !== void 0 && { gatewayArm: value.gatewayArm },
221
+ ...servedAccessOf(value)
182
222
  };
183
223
  }
184
224
  async function dispatchWithRateLimitRetry(router, task, expertType, start, signal) {
@@ -187,7 +227,7 @@ async function dispatchWithRateLimitRetry(router, task, expertType, start, signa
187
227
  const result = signal === void 0 ? await router.executeTask(task) : await router.executeTask(task, { signal });
188
228
  const durationMs = getTimeProvider().now() - start;
189
229
  if (result.ok) {
190
- logger.info("Expert executed successfully", {
230
+ logger2.info("Expert executed successfully", {
191
231
  expertType,
192
232
  durationMs,
193
233
  cli: result.value.cli
@@ -197,11 +237,11 @@ async function dispatchWithRateLimitRetry(router, task, expertType, start, signa
197
237
  const isRateLimit = isRateLimitText(result.error.message);
198
238
  if (isRateLimit && attempt < maxAttempts - 1 && signal?.aborted !== true) {
199
239
  const backoffMs = RATE_LIMIT_BASE_DELAY_MS * (attempt + 1);
200
- logger.warn("Expert rate limited, retrying", { expertType, attempt: attempt + 1, backoffMs });
240
+ logger2.warn("Expert rate limited, retrying", { expertType, attempt: attempt + 1, backoffMs });
201
241
  await new Promise((resolve) => setTimeout(resolve, backoffMs));
202
242
  continue;
203
243
  }
204
- logger.warn("Expert execution failed", { expertType, error: result.error.message });
244
+ logger2.warn("Expert execution failed", { expertType, error: result.error.message });
205
245
  return {
206
246
  success: false,
207
247
  text: "",
@@ -219,23 +259,10 @@ async function dispatchWithRateLimitRetry(router, task, expertType, start, signa
219
259
  error: "Max retry attempts exceeded"
220
260
  };
221
261
  }
222
- var EXECUTION_ACCESS_MODES = {
223
- default: true,
224
- "read-only-analysis": true
225
- };
226
- function assertAccessMode(accessMode) {
227
- if (accessMode === void 0) return;
228
- if (typeof accessMode === "string" && Object.hasOwn(EXECUTION_ACCESS_MODES, accessMode)) return;
229
- throw new TypeError(
230
- `executeExpert: unknown accessMode ${JSON.stringify(accessMode)}; expected one of ${Object.keys(
231
- EXECUTION_ACCESS_MODES
232
- ).join(", ")}`
233
- );
234
- }
235
262
  async function buildBridgeTask(content, options) {
236
263
  const task = { content };
237
- const readOnly = options?.accessMode === "read-only-analysis";
238
- const mcpConfigPath = readOnly ? null : await getMcpConfigPath();
264
+ const restricted = requestedAccessModeOf(options) !== "default";
265
+ const mcpConfigPath = restricted ? null : await getMcpConfigPath();
239
266
  if (mcpConfigPath !== null) task.options = { mcpConfigPath };
240
267
  if (options?.workDir !== void 0) {
241
268
  task.options = { ...task.options, workDir: options.workDir };
@@ -245,6 +272,10 @@ async function buildBridgeTask(content, options) {
245
272
  }
246
273
  async function executeExpert(expertType, prompt, options) {
247
274
  assertAccessMode(options?.accessMode);
275
+ const result = await runExpertCall(expertType, prompt, options);
276
+ return withRequestedAccessMode(result, requestedAccessModeOf(options), expertType);
277
+ }
278
+ async function runExpertCall(expertType, prompt, options) {
248
279
  const start = getTimeProvider().now();
249
280
  try {
250
281
  const { BUILT_IN_EXPERTS } = await import("./expert-config-JSQTCTSE.js");
@@ -264,7 +295,7 @@ ${prompt}`;
264
295
  }
265
296
  const health = checkCircuitHealth();
266
297
  if (!health.healthy) {
267
- logger.warn("Circuit breaker: all CLIs unavailable", { expertType, reason: health.message });
298
+ logger2.warn("Circuit breaker: all CLIs unavailable", { expertType, reason: health.message });
268
299
  return {
269
300
  success: false,
270
301
  text: "",
@@ -283,7 +314,7 @@ ${prompt}`;
283
314
  } catch (error) {
284
315
  const durationMs = getTimeProvider().now() - start;
285
316
  const msg = error instanceof Error ? error.message : String(error);
286
- logger.warn("Expert bridge error", { expertType, error: msg });
317
+ logger2.warn("Expert bridge error", { expertType, error: msg });
287
318
  return { success: false, text: "", expertType, durationMs, error: msg };
288
319
  }
289
320
  }
@@ -294,4 +325,4 @@ export {
294
325
  tokenSplitFromUsage,
295
326
  executeExpert
296
327
  };
297
- //# sourceMappingURL=chunk-6RYPMOR6.js.map
328
+ //# sourceMappingURL=chunk-6RN764V2.js.map