@jsonstudio/llms 0.6.2172 → 0.6.3214

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 (524) hide show
  1. package/README.md +2 -0
  2. package/dist/conversion/args-mapping.js +8 -0
  3. package/dist/conversion/bridge-actions.js +367 -0
  4. package/dist/conversion/bridge-id-utils.js +13 -0
  5. package/dist/conversion/{shared/bridge-instructions.js → bridge-instructions.js} +2 -1
  6. package/dist/conversion/{shared/bridge-message-utils.d.ts → bridge-message-utils.d.ts} +1 -1
  7. package/dist/conversion/{shared/bridge-message-utils.js → bridge-message-utils.js} +5 -150
  8. package/dist/conversion/{shared/bridge-metadata.d.ts → bridge-metadata.d.ts} +1 -0
  9. package/dist/conversion/bridge-metadata.js +5 -0
  10. package/dist/conversion/bridge-policies.js +11 -0
  11. package/dist/conversion/codecs/gemini-openai-codec.js +27 -8
  12. package/dist/conversion/codecs/responses-openai-codec.js +1 -1
  13. package/dist/conversion/{shared/compaction-detect.d.ts → compaction-detect.d.ts} +1 -1
  14. package/dist/conversion/compaction-detect.js +4 -0
  15. package/dist/conversion/compat/actions/apply-patch-fixer.js +2 -2
  16. package/dist/conversion/compat/actions/deepseek-web-response.d.ts +0 -1
  17. package/dist/conversion/compat/actions/deepseek-web-response.js +15 -405
  18. package/dist/conversion/compat/actions/harvest-tool-calls-from-text.js +1 -1
  19. package/dist/conversion/compat/actions/lmstudio-responses-fc-ids.js +1 -1
  20. package/dist/conversion/compat/actions/qwen-transform.js +74 -2
  21. package/dist/conversion/compat/actions/snapshot.js +1 -1
  22. package/dist/conversion/compat/antigravity-session-signature.js +71 -1
  23. package/dist/conversion/compat/profiles/chat-deepseek-web.json +0 -22
  24. package/dist/conversion/compat/profiles/chat-gemini-cli.json +0 -7
  25. package/dist/conversion/compat/profiles/chat-gemini.json +0 -6
  26. package/dist/conversion/compat/profiles/chat-glm.json +251 -72
  27. package/dist/conversion/compat/profiles/chat-iflow.json +174 -39
  28. package/dist/conversion/compat/profiles/chat-lmstudio.json +43 -14
  29. package/dist/conversion/hub/core/detour-registry.d.ts +2 -0
  30. package/dist/conversion/hub/core/hub-context.d.ts +3 -1
  31. package/dist/conversion/hub/core/index.d.ts +1 -0
  32. package/dist/conversion/hub/core/stage-driver.js +2 -0
  33. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +15 -4
  34. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +15 -4
  35. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +15 -4
  36. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +15 -4
  37. package/dist/conversion/hub/hub-feature.js +3 -2
  38. package/dist/conversion/hub/node-support.js +9 -4
  39. package/dist/conversion/hub/operation-table/operation-table-runner.js +12 -8
  40. package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +3 -3
  41. package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +16 -13
  42. package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +6 -10
  43. package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +21 -73
  44. package/dist/conversion/hub/ops/operations.js +2 -121
  45. package/dist/conversion/hub/pipeline/compat/compat-engine.js +6 -0
  46. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +1 -1
  47. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +33 -1042
  48. package/dist/conversion/hub/pipeline/compat/compat-profile-resolver.js +2 -0
  49. package/dist/conversion/hub/pipeline/compat/compat-profile-store.js +2 -0
  50. package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +14 -17
  51. package/dist/conversion/hub/pipeline/compat/native-adapter-context.d.ts +3 -0
  52. package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +39 -0
  53. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +1 -0
  54. package/dist/conversion/hub/pipeline/hub-pipeline.js +165 -265
  55. package/dist/conversion/hub/pipeline/session-identifiers.js +6 -196
  56. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.d.ts +1 -2
  57. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +37 -1
  58. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.d.ts +1 -1
  59. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +69 -81
  60. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.d.ts +14 -0
  61. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.js +24 -0
  62. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.d.ts +2 -0
  63. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.js +157 -0
  64. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.d.ts +16 -0
  65. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.js +29 -0
  66. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js +3 -1
  67. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.d.ts +2 -15
  68. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +8 -595
  69. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.d.ts +8 -0
  70. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.js +28 -0
  71. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.d.ts +2 -0
  72. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.js +4 -0
  73. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.d.ts +10 -0
  74. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.js +12 -0
  75. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.d.ts +3 -0
  76. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.js +30 -0
  77. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +9 -129
  78. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -4
  79. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +9 -26
  80. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +32 -14
  81. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.d.ts +2 -2
  82. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +48 -8
  83. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +20 -3
  84. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +11 -199
  85. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.d.ts +3 -0
  86. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.js +81 -0
  87. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.d.ts +1 -2
  88. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +36 -1
  89. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +3 -1
  90. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.d.ts +6 -0
  91. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.js +17 -0
  92. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.d.ts +9 -0
  93. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +28 -0
  94. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -2
  95. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +14 -102
  96. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +3 -1
  97. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +54 -39
  98. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +18 -5
  99. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.d.ts +11 -1
  100. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.js +10 -32
  101. package/dist/conversion/hub/pipeline/stages/utils.js +17 -1
  102. package/dist/conversion/hub/pipeline/target-utils.js +14 -91
  103. package/dist/conversion/hub/pipelines/inbound.js +3 -1
  104. package/dist/conversion/hub/pipelines/outbound.js +2 -0
  105. package/dist/conversion/hub/policy/policy-engine.js +9 -3
  106. package/dist/conversion/hub/policy/protocol-spec.js +21 -149
  107. package/dist/conversion/hub/process/chat-process-anthropic-alias.d.ts +2 -0
  108. package/dist/conversion/hub/process/chat-process-anthropic-alias.js +36 -0
  109. package/dist/conversion/hub/process/chat-process-clock-directive-parser.d.ts +5 -0
  110. package/dist/conversion/hub/process/chat-process-clock-directive-parser.js +48 -0
  111. package/dist/conversion/hub/process/chat-process-clock-directives.d.ts +24 -0
  112. package/dist/conversion/hub/process/chat-process-clock-directives.js +98 -0
  113. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.d.ts +8 -0
  114. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.js +42 -0
  115. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.d.ts +14 -0
  116. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.js +10 -0
  117. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.d.ts +5 -0
  118. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.js +10 -0
  119. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.d.ts +30 -0
  120. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.js +68 -0
  121. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.d.ts +9 -0
  122. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.js +18 -0
  123. package/dist/conversion/hub/process/chat-process-clock-reminders.d.ts +2 -0
  124. package/dist/conversion/hub/process/chat-process-clock-reminders.js +104 -0
  125. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.d.ts +3 -0
  126. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.js +233 -0
  127. package/dist/conversion/hub/process/chat-process-clock-tools.d.ts +6 -0
  128. package/dist/conversion/hub/process/chat-process-clock-tools.js +41 -0
  129. package/dist/conversion/hub/process/chat-process-continue-execution.d.ts +11 -0
  130. package/dist/conversion/hub/process/chat-process-continue-execution.js +82 -0
  131. package/dist/conversion/hub/process/chat-process-governance-context.d.ts +15 -0
  132. package/dist/conversion/hub/process/chat-process-governance-context.js +7 -0
  133. package/dist/conversion/hub/process/chat-process-governance-finalize.d.ts +16 -0
  134. package/dist/conversion/hub/process/chat-process-governance-finalize.js +11 -0
  135. package/dist/conversion/hub/process/chat-process-governance-orchestration.d.ts +9 -0
  136. package/dist/conversion/hub/process/chat-process-governance-orchestration.js +47 -0
  137. package/dist/conversion/hub/process/chat-process-governed-control-ops.d.ts +8 -0
  138. package/dist/conversion/hub/process/chat-process-governed-control-ops.js +5 -0
  139. package/dist/conversion/hub/process/chat-process-governed-filter-call.d.ts +12 -0
  140. package/dist/conversion/hub/process/chat-process-governed-filter-call.js +18 -0
  141. package/dist/conversion/hub/process/chat-process-governed-merge.d.ts +8 -0
  142. package/dist/conversion/hub/process/chat-process-governed-merge.js +11 -0
  143. package/dist/conversion/hub/process/chat-process-media.d.ts +3 -0
  144. package/dist/conversion/hub/process/chat-process-media.js +18 -0
  145. package/dist/conversion/hub/process/chat-process-node-result.d.ts +23 -0
  146. package/dist/conversion/hub/process/chat-process-node-result.js +24 -0
  147. package/dist/conversion/hub/process/chat-process-pending-tool-sync.d.ts +14 -0
  148. package/dist/conversion/hub/process/chat-process-pending-tool-sync.js +52 -0
  149. package/dist/conversion/hub/process/chat-process-post-governed-normalization.d.ts +8 -0
  150. package/dist/conversion/hub/process/chat-process-post-governed-normalization.js +16 -0
  151. package/dist/conversion/hub/process/chat-process-review.d.ts +2 -0
  152. package/dist/conversion/hub/process/chat-process-review.js +8 -0
  153. package/dist/conversion/hub/process/chat-process-servertool-orchestration.d.ts +8 -0
  154. package/dist/conversion/hub/process/chat-process-servertool-orchestration.js +22 -0
  155. package/dist/conversion/hub/process/chat-process-tool-normalization.d.ts +2 -0
  156. package/dist/conversion/hub/process/chat-process-tool-normalization.js +4 -0
  157. package/dist/conversion/hub/process/chat-process-web-search-intent.d.ts +12 -0
  158. package/dist/conversion/hub/process/chat-process-web-search-intent.js +13 -0
  159. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.d.ts +3 -0
  160. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.js +4 -0
  161. package/dist/conversion/hub/process/chat-process-web-search.d.ts +8 -0
  162. package/dist/conversion/hub/process/chat-process-web-search.js +26 -0
  163. package/dist/conversion/hub/process/chat-process.d.ts +2 -19
  164. package/dist/conversion/hub/process/chat-process.js +12 -1701
  165. package/dist/conversion/hub/process/client-inject-readiness.d.ts +1 -0
  166. package/dist/conversion/hub/process/client-inject-readiness.js +4 -0
  167. package/dist/conversion/hub/registry.js +5 -2
  168. package/dist/conversion/hub/response/chat-response-utils.js +5 -86
  169. package/dist/conversion/hub/response/provider-response.d.ts +9 -0
  170. package/dist/conversion/hub/response/provider-response.js +20 -26
  171. package/dist/conversion/hub/response/response-mappers.js +25 -27
  172. package/dist/conversion/hub/response/response-runtime.js +30 -98
  173. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +1 -0
  174. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +1 -0
  175. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +1 -0
  176. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +1 -0
  177. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +1 -0
  178. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +1 -0
  179. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +1 -0
  180. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +1 -0
  181. package/dist/conversion/hub/snapshot-recorder.js +11 -4
  182. package/dist/conversion/hub/standardized-bridge.js +11 -288
  183. package/dist/conversion/hub/tool-governance/engine.d.ts +8 -0
  184. package/dist/conversion/hub/tool-governance/engine.js +25 -63
  185. package/dist/conversion/hub/tool-governance/rules.js +73 -69
  186. package/dist/conversion/hub/tool-session-compat.d.ts +2 -2
  187. package/dist/conversion/hub/tool-session-compat.js +17 -231
  188. package/dist/conversion/hub/tool-surface/tool-surface-engine.js +6 -4
  189. package/dist/conversion/index.d.ts +1 -2
  190. package/dist/conversion/index.js +1 -2
  191. package/dist/conversion/jsonish.js +20 -0
  192. package/dist/conversion/mcp-injection.js +7 -0
  193. package/dist/conversion/media.js +4 -0
  194. package/dist/conversion/{shared/metadata-passthrough.d.ts → metadata-passthrough.d.ts} +1 -1
  195. package/dist/conversion/metadata-passthrough.js +20 -0
  196. package/dist/conversion/payload-budget.js +47 -0
  197. package/dist/conversion/protocol-field-allowlists.d.ts +7 -0
  198. package/dist/conversion/protocol-field-allowlists.js +9 -0
  199. package/dist/conversion/{shared/protocol-state.d.ts → protocol-state.d.ts} +2 -2
  200. package/dist/conversion/protocol-state.js +27 -0
  201. package/dist/conversion/{shared/errors.d.ts → provider-protocol-error.d.ts} +0 -3
  202. package/dist/conversion/provider-protocol-error.js +25 -0
  203. package/dist/conversion/responses/responses-host-policy.js +2 -12
  204. package/dist/conversion/responses/responses-openai-bridge/response-payload.js +14 -87
  205. package/dist/conversion/responses/responses-openai-bridge/types.d.ts +2 -1
  206. package/dist/conversion/responses/responses-openai-bridge.d.ts +1 -1
  207. package/dist/conversion/responses/responses-openai-bridge.js +62 -62
  208. package/dist/conversion/{shared/runtime-metadata.d.ts → runtime-metadata.d.ts} +1 -1
  209. package/dist/conversion/runtime-metadata.js +31 -0
  210. package/dist/conversion/shared/anthropic-message-utils.js +170 -21
  211. package/dist/conversion/shared/chat-envelope-validator.js +2 -126
  212. package/dist/conversion/shared/chat-output-normalizer.js +2 -54
  213. package/dist/conversion/shared/chat-request-filters.d.ts +3 -4
  214. package/dist/conversion/shared/chat-request-filters.js +22 -78
  215. package/dist/conversion/shared/gemini-tool-utils.d.ts +1 -1
  216. package/dist/conversion/shared/gemini-tool-utils.js +9 -524
  217. package/dist/conversion/shared/openai-finalizer.js +3 -1
  218. package/dist/conversion/shared/openai-message-normalize.js +13 -285
  219. package/dist/conversion/shared/output-content-normalizer.js +9 -112
  220. package/dist/conversion/shared/reasoning-mapping.js +2 -6
  221. package/dist/conversion/shared/reasoning-normalizer.js +10 -1
  222. package/dist/conversion/shared/reasoning-tool-normalizer.js +14 -126
  223. package/dist/conversion/shared/reasoning-tool-parser.js +4 -87
  224. package/dist/conversion/shared/reasoning-utils.js +7 -8
  225. package/dist/conversion/shared/responses-conversation-store.js +5 -83
  226. package/dist/conversion/shared/responses-output-builder.js +63 -55
  227. package/dist/conversion/shared/responses-reasoning-registry.d.ts +14 -2
  228. package/dist/conversion/shared/responses-reasoning-registry.js +41 -7
  229. package/dist/conversion/shared/responses-request-adapter.d.ts +7 -1
  230. package/dist/conversion/shared/responses-request-adapter.js +14 -1
  231. package/dist/conversion/shared/responses-response-utils.js +103 -14
  232. package/dist/conversion/shared/responses-tool-utils.d.ts +1 -0
  233. package/dist/conversion/shared/responses-tool-utils.js +91 -15
  234. package/dist/conversion/shared/streaming-text-extractor.js +2 -7
  235. package/dist/conversion/shared/text-markup-normalizer/normalize.d.ts +2 -2
  236. package/dist/conversion/shared/text-markup-normalizer/normalize.js +43 -17
  237. package/dist/conversion/shared/text-markup-normalizer.d.ts +3 -2
  238. package/dist/conversion/shared/text-markup-normalizer.js +2 -1
  239. package/dist/conversion/shared/thought-signature-validator.js +3 -2
  240. package/dist/conversion/shared/tool-argument-repairer.js +2 -2
  241. package/dist/conversion/shared/tool-call-id-manager.js +5 -7
  242. package/dist/conversion/shared/tool-call-utils.js +3 -45
  243. package/dist/conversion/shared/tool-filter-pipeline.js +5 -100
  244. package/dist/conversion/shared/tool-governor.d.ts +6 -0
  245. package/dist/conversion/shared/tool-governor.js +45 -127
  246. package/dist/conversion/shared/tool-harvester.js +2 -8
  247. package/dist/conversion/shared/tool-mapping.d.ts +1 -1
  248. package/dist/conversion/shared/tool-mapping.js +2 -5
  249. package/dist/conversion/shared/tooling.d.ts +0 -4
  250. package/dist/conversion/shared/tooling.js +18 -0
  251. package/dist/conversion/{shared/snapshot-utils.d.ts → snapshot-utils.d.ts} +11 -0
  252. package/dist/conversion/{shared/snapshot-utils.js → snapshot-utils.js} +14 -23
  253. package/dist/conversion/{shared → types}/bridge-message-types.d.ts +2 -0
  254. package/dist/conversion/types/text-markup-normalizer.d.ts +13 -0
  255. package/dist/filters/special/request-tools-normalize.js +1 -1
  256. package/dist/filters/special/response-tool-text-canonicalize.js +2 -2
  257. package/dist/native/router_hotpath_napi.node +0 -0
  258. package/dist/quota/quota-manager.js +31 -59
  259. package/dist/quota/quota-state.js +14 -7
  260. package/dist/router/virtual-router/bootstrap/profile-builder.d.ts +1 -0
  261. package/dist/router/virtual-router/bootstrap/profile-builder.js +13 -0
  262. package/dist/router/virtual-router/bootstrap/provider-normalization.d.ts +2 -0
  263. package/dist/router/virtual-router/bootstrap/provider-normalization.js +4 -1
  264. package/dist/router/virtual-router/bootstrap/streaming-helpers.d.ts +7 -0
  265. package/dist/router/virtual-router/bootstrap/streaming-helpers.js +44 -0
  266. package/dist/router/virtual-router/bootstrap.js +2 -0
  267. package/dist/router/virtual-router/engine/provider-key/parse.d.ts +1 -6
  268. package/dist/router/virtual-router/engine/provider-key/parse.js +1 -43
  269. package/dist/router/virtual-router/engine/routing-state/store.d.ts +1 -2
  270. package/dist/router/virtual-router/engine/routing-state/store.js +50 -14
  271. package/dist/router/virtual-router/engine-legacy/config.d.ts +11 -0
  272. package/dist/router/virtual-router/engine-legacy/config.js +108 -0
  273. package/dist/router/virtual-router/engine-legacy/direct-model.d.ts +10 -0
  274. package/dist/router/virtual-router/engine-legacy/direct-model.js +38 -0
  275. package/dist/router/virtual-router/engine-legacy/health.d.ts +13 -0
  276. package/dist/router/virtual-router/engine-legacy/health.js +104 -0
  277. package/dist/router/virtual-router/engine-legacy/helpers.d.ts +16 -0
  278. package/dist/router/virtual-router/engine-legacy/helpers.js +226 -0
  279. package/dist/router/virtual-router/engine-legacy/route-finalize.d.ts +9 -0
  280. package/dist/router/virtual-router/engine-legacy/route-finalize.js +84 -0
  281. package/dist/router/virtual-router/engine-legacy/route-selection.d.ts +17 -0
  282. package/dist/router/virtual-router/engine-legacy/route-selection.js +205 -0
  283. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.d.ts +3 -0
  284. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.js +36 -0
  285. package/dist/router/virtual-router/engine-legacy/route-state.d.ts +12 -0
  286. package/dist/router/virtual-router/engine-legacy/route-state.js +386 -0
  287. package/dist/router/virtual-router/engine-legacy/route-utils.d.ts +19 -0
  288. package/dist/router/virtual-router/engine-legacy/route-utils.js +212 -0
  289. package/dist/router/virtual-router/engine-legacy/routing.d.ts +8 -0
  290. package/dist/router/virtual-router/engine-legacy/routing.js +8 -0
  291. package/dist/router/virtual-router/engine-legacy/selection-core.d.ts +28 -0
  292. package/dist/router/virtual-router/engine-legacy/selection-core.js +112 -0
  293. package/dist/router/virtual-router/engine-legacy/selection-state.d.ts +16 -0
  294. package/dist/router/virtual-router/engine-legacy/selection-state.js +187 -0
  295. package/dist/router/virtual-router/engine-legacy/state-accessors.d.ts +21 -0
  296. package/dist/router/virtual-router/engine-legacy/state-accessors.js +118 -0
  297. package/dist/router/virtual-router/engine-legacy.d.ts +123 -0
  298. package/dist/router/virtual-router/engine-legacy.js +194 -0
  299. package/dist/router/virtual-router/engine-logging.d.ts +2 -0
  300. package/dist/router/virtual-router/engine-logging.js +11 -5
  301. package/dist/router/virtual-router/engine-selection/alias-selection.js +45 -83
  302. package/dist/router/virtual-router/engine-selection/key-parsing.js +9 -26
  303. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.d.ts +20 -0
  304. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js +163 -0
  305. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.d.ts +7 -0
  306. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.js +103 -0
  307. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.d.ts +10 -0
  308. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.js +110 -0
  309. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.d.ts +8 -0
  310. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js +281 -0
  311. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.d.ts +1 -0
  312. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.js +25 -0
  313. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.d.ts +4 -0
  314. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.js +44 -0
  315. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.d.ts +2 -0
  316. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.js +62 -0
  317. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.d.ts +40 -0
  318. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.js +484 -0
  319. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.d.ts +9 -0
  320. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.js +64 -0
  321. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.d.ts +5 -0
  322. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.js +163 -0
  323. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.d.ts +1 -0
  324. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.js +49 -0
  325. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.d.ts +30 -0
  326. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js +446 -0
  327. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.d.ts +1 -0
  328. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.js +49 -0
  329. package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.d.ts +1 -0
  330. package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.js +54 -0
  331. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +134 -0
  332. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +729 -0
  333. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.d.ts +72 -0
  334. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js +405 -0
  335. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.d.ts +18 -0
  336. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js +317 -0
  337. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.d.ts +22 -0
  338. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.js +154 -0
  339. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.d.ts +22 -0
  340. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.js +426 -0
  341. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.d.ts +57 -0
  342. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js +705 -0
  343. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.d.ts +46 -0
  344. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js +503 -0
  345. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +146 -0
  346. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js +570 -0
  347. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.d.ts +25 -0
  348. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.js +148 -0
  349. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +25 -0
  350. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +637 -0
  351. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.d.ts +11 -0
  352. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js +207 -0
  353. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.d.ts +3 -0
  354. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js +128 -0
  355. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.d.ts +57 -0
  356. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.js +217 -0
  357. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.d.ts +5 -0
  358. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +320 -0
  359. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.d.ts +5 -0
  360. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.js +18 -0
  361. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.d.ts +25 -0
  362. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.js +85 -0
  363. package/dist/router/virtual-router/engine-selection/native-router-hotpath.d.ts +59 -0
  364. package/dist/router/virtual-router/engine-selection/native-router-hotpath.js +117 -0
  365. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +151 -0
  366. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +1371 -0
  367. package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.d.ts +2 -0
  368. package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.js +69 -0
  369. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.d.ts +16 -0
  370. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.js +96 -0
  371. package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.d.ts +16 -0
  372. package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.js +14 -0
  373. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.d.ts +2 -0
  374. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.js +86 -0
  375. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.d.ts +6 -0
  376. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.js +85 -0
  377. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.d.ts +9 -0
  378. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.js +70 -0
  379. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.d.ts +2 -0
  380. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.js +76 -0
  381. package/dist/router/virtual-router/engine-selection/route-utils.js +1 -1
  382. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.d.ts +10 -0
  383. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.js +231 -0
  384. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.d.ts +4 -0
  385. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.js +43 -0
  386. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.d.ts +27 -0
  387. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.js +216 -0
  388. package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +1 -1
  389. package/dist/router/virtual-router/engine-selection/tier-selection-select.js +128 -129
  390. package/dist/router/virtual-router/engine-selection/tier-selection.js +2 -265
  391. package/dist/router/virtual-router/engine.d.ts +22 -105
  392. package/dist/router/virtual-router/engine.js +274 -1632
  393. package/dist/router/virtual-router/features.js +2 -2
  394. package/dist/router/virtual-router/load-balancer.d.ts +8 -0
  395. package/dist/router/virtual-router/load-balancer.js +65 -2
  396. package/dist/router/virtual-router/provider-registry.js +2 -0
  397. package/dist/router/virtual-router/routing-instructions/clean.d.ts +3 -0
  398. package/dist/router/virtual-router/routing-instructions/clean.js +34 -0
  399. package/dist/router/virtual-router/routing-instructions/parse.d.ts +18 -0
  400. package/dist/router/virtual-router/routing-instructions/parse.js +377 -0
  401. package/dist/router/virtual-router/routing-instructions/state.d.ts +4 -0
  402. package/dist/router/virtual-router/routing-instructions/state.js +245 -0
  403. package/dist/router/virtual-router/routing-instructions/types.d.ts +70 -0
  404. package/dist/router/virtual-router/routing-instructions/types.js +2 -0
  405. package/dist/router/virtual-router/routing-instructions.d.ts +5 -91
  406. package/dist/router/virtual-router/routing-instructions.js +4 -628
  407. package/dist/router/virtual-router/routing-stop-message-actions.js +91 -112
  408. package/dist/router/virtual-router/routing-stop-message-parser.js +9 -132
  409. package/dist/router/virtual-router/routing-stop-message-state-codec.d.ts +1 -0
  410. package/dist/router/virtual-router/routing-stop-message-state-codec.js +58 -71
  411. package/dist/router/virtual-router/sticky-session-store.d.ts +4 -0
  412. package/dist/router/virtual-router/sticky-session-store.js +23 -83
  413. package/dist/router/virtual-router/stop-message-file-resolver.d.ts +1 -0
  414. package/dist/router/virtual-router/stop-message-file-resolver.js +10 -0
  415. package/dist/router/virtual-router/stop-message-state-sync.d.ts +1 -1
  416. package/dist/router/virtual-router/stop-message-state-sync.js +3 -7
  417. package/dist/router/virtual-router/token-counter.js +0 -9
  418. package/dist/router/virtual-router/tool-signals.js +21 -3
  419. package/dist/router/virtual-router/types.d.ts +13 -7
  420. package/dist/servertool/clock/config.js +23 -51
  421. package/dist/servertool/clock/io.js +1 -0
  422. package/dist/servertool/clock/session-scope.d.ts +2 -2
  423. package/dist/servertool/clock/session-scope.js +29 -40
  424. package/dist/servertool/engine.d.ts +9 -0
  425. package/dist/servertool/engine.js +267 -79
  426. package/dist/servertool/handlers/antigravity-thought-signature-bootstrap.js +3 -3
  427. package/dist/servertool/handlers/clock-auto.js +1 -1
  428. package/dist/servertool/handlers/clock.js +2 -2
  429. package/dist/servertool/handlers/compaction-detect.d.ts +1 -1
  430. package/dist/servertool/handlers/compaction-detect.js +1 -1
  431. package/dist/servertool/handlers/continue-execution.js +8 -4
  432. package/dist/servertool/handlers/followup-request-builder.js +18 -1
  433. package/dist/servertool/handlers/gemini-empty-reply-continue.js +8 -2
  434. package/dist/servertool/handlers/iflow-model-error-retry.js +1 -1
  435. package/dist/servertool/handlers/recursive-detection-guard.js +1 -1
  436. package/dist/servertool/handlers/review.d.ts +1 -0
  437. package/dist/servertool/handlers/review.js +180 -0
  438. package/dist/servertool/handlers/stop-message-auto/blocked-report.js +59 -1
  439. package/dist/servertool/handlers/stop-message-auto/iflow-followup.d.ts +23 -2
  440. package/dist/servertool/handlers/stop-message-auto/iflow-followup.js +398 -90
  441. package/dist/servertool/handlers/stop-message-auto/routing-state.d.ts +5 -15
  442. package/dist/servertool/handlers/stop-message-auto/routing-state.js +29 -55
  443. package/dist/servertool/handlers/stop-message-auto/runtime-utils.d.ts +6 -0
  444. package/dist/servertool/handlers/stop-message-auto/runtime-utils.js +36 -62
  445. package/dist/servertool/handlers/stop-message-auto.js +393 -77
  446. package/dist/servertool/handlers/vision.js +1 -1
  447. package/dist/servertool/handlers/web-search.js +1 -1
  448. package/dist/servertool/reenter-backend.js +1 -1
  449. package/dist/servertool/server-side-tools.d.ts +1 -0
  450. package/dist/servertool/server-side-tools.js +92 -54
  451. package/dist/servertool/stop-gateway-context.js +1 -1
  452. package/dist/servertool/stop-message-compare-context.js +1 -1
  453. package/dist/servertool/types.d.ts +17 -0
  454. package/dist/sse/json-to-sse/event-generators/responses.d.ts +4 -0
  455. package/dist/sse/json-to-sse/event-generators/responses.js +95 -1
  456. package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +6 -4
  457. package/dist/sse/sse-to-json/builders/response-builder.d.ts +8 -0
  458. package/dist/sse/sse-to-json/builders/response-builder.js +162 -4
  459. package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +2 -0
  460. package/dist/sse/types/responses-types.d.ts +6 -2
  461. package/dist/tools/apply-patch/patch-text/normalize.js +11 -0
  462. package/dist/tools/apply-patch/structured/coercion.js +5 -0
  463. package/dist/tools/args-json.js +29 -0
  464. package/dist/tools/exec-command/validator.d.ts +4 -1
  465. package/dist/tools/exec-command/validator.js +87 -3
  466. package/dist/tools/tool-registry.d.ts +7 -1
  467. package/dist/tools/tool-registry.js +3 -2
  468. package/package.json +121 -10
  469. package/dist/conversion/shared/args-mapping.js +0 -221
  470. package/dist/conversion/shared/bridge-actions.js +0 -881
  471. package/dist/conversion/shared/bridge-id-utils.js +0 -79
  472. package/dist/conversion/shared/bridge-metadata.js +0 -1
  473. package/dist/conversion/shared/bridge-policies.js +0 -195
  474. package/dist/conversion/shared/compaction-detect.js +0 -59
  475. package/dist/conversion/shared/errors.js +0 -31
  476. package/dist/conversion/shared/jsonish.js +0 -177
  477. package/dist/conversion/shared/mcp-injection.js +0 -173
  478. package/dist/conversion/shared/media.js +0 -9
  479. package/dist/conversion/shared/metadata-passthrough.js +0 -57
  480. package/dist/conversion/shared/payload-budget.js +0 -248
  481. package/dist/conversion/shared/protocol-field-allowlists.d.ts +0 -7
  482. package/dist/conversion/shared/protocol-field-allowlists.js +0 -149
  483. package/dist/conversion/shared/protocol-state.js +0 -23
  484. package/dist/conversion/shared/runtime-metadata.js +0 -23
  485. package/dist/conversion/shared/snapshot-hooks.d.ts +0 -11
  486. package/dist/conversion/shared/snapshot-hooks.js +0 -503
  487. package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.d.ts +0 -2
  488. package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.js +0 -129
  489. package/dist/conversion/shared/text-markup-normalizer/extractors-json.d.ts +0 -4
  490. package/dist/conversion/shared/text-markup-normalizer/extractors-json.js +0 -637
  491. package/dist/conversion/shared/text-markup-normalizer/extractors-shared.d.ts +0 -21
  492. package/dist/conversion/shared/text-markup-normalizer/extractors-shared.js +0 -177
  493. package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.d.ts +0 -5
  494. package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.js +0 -385
  495. package/dist/conversion/shared/text-markup-normalizer/extractors-xml.d.ts +0 -10
  496. package/dist/conversion/shared/text-markup-normalizer/extractors-xml.js +0 -602
  497. package/dist/conversion/shared/text-markup-normalizer/extractors.d.ts +0 -5
  498. package/dist/conversion/shared/text-markup-normalizer/extractors.js +0 -4
  499. package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
  500. package/dist/conversion/shared/tool-canonicalizer.js +0 -42
  501. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.d.ts +0 -18
  502. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.js +0 -398
  503. package/dist/servertool/handlers/stop-message-stage-policy/decision.d.ts +0 -9
  504. package/dist/servertool/handlers/stop-message-stage-policy/decision.js +0 -127
  505. package/dist/servertool/handlers/stop-message-stage-policy/observation.d.ts +0 -2
  506. package/dist/servertool/handlers/stop-message-stage-policy/observation.js +0 -179
  507. package/dist/servertool/handlers/stop-message-stage-policy/templates.d.ts +0 -4
  508. package/dist/servertool/handlers/stop-message-stage-policy/templates.js +0 -96
  509. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.d.ts +0 -9
  510. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.js +0 -89
  511. package/dist/servertool/handlers/stop-message-stage-policy/types.d.ts +0 -59
  512. package/dist/servertool/handlers/stop-message-stage-policy.d.ts +0 -3
  513. package/dist/servertool/handlers/stop-message-stage-policy.js +0 -2
  514. /package/dist/conversion/{shared/args-mapping.d.ts → args-mapping.d.ts} +0 -0
  515. /package/dist/conversion/{shared/bridge-actions.d.ts → bridge-actions.d.ts} +0 -0
  516. /package/dist/conversion/{shared/bridge-id-utils.d.ts → bridge-id-utils.d.ts} +0 -0
  517. /package/dist/conversion/{shared/bridge-instructions.d.ts → bridge-instructions.d.ts} +0 -0
  518. /package/dist/conversion/{shared/bridge-policies.d.ts → bridge-policies.d.ts} +0 -0
  519. /package/dist/conversion/{shared/jsonish.d.ts → jsonish.d.ts} +0 -0
  520. /package/dist/conversion/{shared/mcp-injection.d.ts → mcp-injection.d.ts} +0 -0
  521. /package/dist/conversion/{shared/media.d.ts → media.d.ts} +0 -0
  522. /package/dist/conversion/{shared/payload-budget.d.ts → payload-budget.d.ts} +0 -0
  523. /package/dist/conversion/{shared → types}/bridge-message-types.js +0 -0
  524. /package/dist/{servertool/handlers/stop-message-stage-policy/types.js → conversion/types/text-markup-normalizer.js} +0 -0
@@ -0,0 +1,118 @@
1
+ import { resolveStopMessageScope, getRoutingInstructionState, persistRoutingInstructionState } from '../engine/routing-state/store.js';
2
+ import { hasClientInjectScopedFields, stripClientInjectScopedFields } from './helpers.js';
3
+ import { flattenPoolTargets } from './route-utils.js';
4
+ export function getStopMessageState(engine, metadata) {
5
+ const hasArmedStopState = (candidate) => {
6
+ if (!candidate) {
7
+ return false;
8
+ }
9
+ const text = typeof candidate.stopMessageText === 'string' ? candidate.stopMessageText.trim() : '';
10
+ const maxRepeats = typeof candidate.stopMessageMaxRepeats === 'number' && Number.isFinite(candidate.stopMessageMaxRepeats)
11
+ ? Math.max(1, Math.floor(candidate.stopMessageMaxRepeats))
12
+ : 0;
13
+ const mode = typeof candidate.stopMessageStageMode === 'string'
14
+ ? candidate.stopMessageStageMode.trim().toLowerCase()
15
+ : '';
16
+ if (mode === 'off') {
17
+ return false;
18
+ }
19
+ return Boolean(text) && maxRepeats > 0;
20
+ };
21
+ const stopMessageScope = resolveStopMessageScope(metadata);
22
+ if (!stopMessageScope) {
23
+ const sessionScope = engine.resolveSessionScope(metadata);
24
+ if (sessionScope) {
25
+ const legacyState = getRoutingInstructionState(sessionScope, engine.routingInstructionState, engine.routingStateStore);
26
+ if (hasClientInjectScopedFields(legacyState)) {
27
+ const cleared = stripClientInjectScopedFields(legacyState);
28
+ engine.routingInstructionState.set(sessionScope, cleared);
29
+ persistRoutingInstructionState(sessionScope, cleared, engine.routingStateStore);
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ const effectiveState = getRoutingInstructionState(stopMessageScope, engine.routingInstructionState, engine.routingStateStore);
35
+ if (!hasArmedStopState(effectiveState)) {
36
+ return null;
37
+ }
38
+ const text = typeof effectiveState.stopMessageText === 'string' ? effectiveState.stopMessageText.trim() : '';
39
+ const maxRepeats = typeof effectiveState.stopMessageMaxRepeats === 'number' && Number.isFinite(effectiveState.stopMessageMaxRepeats)
40
+ ? Math.max(1, Math.floor(effectiveState.stopMessageMaxRepeats))
41
+ : 0;
42
+ const stageModeRaw = typeof effectiveState.stopMessageStageMode === 'string'
43
+ ? effectiveState.stopMessageStageMode.trim().toLowerCase()
44
+ : '';
45
+ const stageModeNormalized = stageModeRaw === 'on' || stageModeRaw === 'off' || stageModeRaw === 'auto'
46
+ ? stageModeRaw
47
+ : undefined;
48
+ const aiModeRaw = typeof effectiveState.stopMessageAiMode === 'string'
49
+ ? effectiveState.stopMessageAiMode.trim().toLowerCase()
50
+ : '';
51
+ const aiModeNormalized = aiModeRaw === 'on' || aiModeRaw === 'off' ? aiModeRaw : undefined;
52
+ if (stageModeNormalized === 'off' || !text || maxRepeats <= 0) {
53
+ return null;
54
+ }
55
+ return {
56
+ ...(text ? { stopMessageText: text } : {}),
57
+ stopMessageMaxRepeats: maxRepeats,
58
+ ...(typeof effectiveState.stopMessageSource === 'string' && effectiveState.stopMessageSource.trim()
59
+ ? { stopMessageSource: effectiveState.stopMessageSource.trim() }
60
+ : {}),
61
+ ...(typeof effectiveState.stopMessageUsed === 'number' && Number.isFinite(effectiveState.stopMessageUsed)
62
+ ? { stopMessageUsed: Math.max(0, Math.floor(effectiveState.stopMessageUsed)) }
63
+ : {}),
64
+ ...(typeof effectiveState.stopMessageUpdatedAt === 'number' && Number.isFinite(effectiveState.stopMessageUpdatedAt)
65
+ ? { stopMessageUpdatedAt: effectiveState.stopMessageUpdatedAt }
66
+ : {}),
67
+ ...(typeof effectiveState.stopMessageLastUsedAt === 'number' && Number.isFinite(effectiveState.stopMessageLastUsedAt)
68
+ ? { stopMessageLastUsedAt: effectiveState.stopMessageLastUsedAt }
69
+ : {}),
70
+ ...(stageModeNormalized ? { stopMessageStageMode: stageModeNormalized } : {}),
71
+ ...(aiModeNormalized ? { stopMessageAiMode: aiModeNormalized } : {}),
72
+ ...(typeof effectiveState.stopMessageAiSeedPrompt === 'string' && effectiveState.stopMessageAiSeedPrompt.trim()
73
+ ? { stopMessageAiSeedPrompt: effectiveState.stopMessageAiSeedPrompt.trim() }
74
+ : {}),
75
+ ...(Array.isArray(effectiveState.stopMessageAiHistory)
76
+ ? { stopMessageAiHistory: effectiveState.stopMessageAiHistory }
77
+ : {})
78
+ };
79
+ }
80
+ export function getPreCommandState(engine, metadata) {
81
+ const stopMessageScope = resolveStopMessageScope(metadata);
82
+ if (!stopMessageScope) {
83
+ return null;
84
+ }
85
+ const effectiveState = getRoutingInstructionState(stopMessageScope, engine.routingInstructionState, engine.routingStateStore);
86
+ if (!effectiveState) {
87
+ return null;
88
+ }
89
+ const scriptPath = typeof effectiveState.preCommandScriptPath === 'string' ? effectiveState.preCommandScriptPath.trim() : '';
90
+ if (!scriptPath) {
91
+ return null;
92
+ }
93
+ return {
94
+ preCommandScriptPath: scriptPath,
95
+ ...(typeof effectiveState.preCommandSource === 'string' && effectiveState.preCommandSource.trim()
96
+ ? { preCommandSource: effectiveState.preCommandSource.trim() }
97
+ : {}),
98
+ ...(typeof effectiveState.preCommandUpdatedAt === 'number' && Number.isFinite(effectiveState.preCommandUpdatedAt)
99
+ ? { preCommandUpdatedAt: effectiveState.preCommandUpdatedAt }
100
+ : {})
101
+ };
102
+ }
103
+ export function getStatus(engine) {
104
+ const routes = {};
105
+ for (const [route, pools] of Object.entries(engine.routing)) {
106
+ const stats = engine.routeAnalytics.getRouteStats(route);
107
+ routes[route] = {
108
+ providers: flattenPoolTargets(engine, pools),
109
+ hits: stats?.hits ?? 0,
110
+ lastUsedProvider: stats?.lastProvider,
111
+ ...(stats?.lastHit ? { lastHit: { ...stats.lastHit } } : {})
112
+ };
113
+ }
114
+ return {
115
+ routes,
116
+ health: engine.healthManager.getSnapshot()
117
+ };
118
+ }
@@ -0,0 +1,123 @@
1
+ import { ProviderHealthManager } from './health-manager.js';
2
+ import { ProviderRegistry } from './provider-registry.js';
3
+ import { RouteLoadBalancer } from './load-balancer.js';
4
+ import { RoutingClassifier } from './classifier.js';
5
+ import { ContextAdvisor } from './context-advisor.js';
6
+ import type { ProcessedRequest, StandardizedRequest } from '../../conversion/hub/types/standardized.js';
7
+ import { type RoutingPools, type RoutingDecision, type RoutingDiagnostics, type StopMessageStateSnapshot, type PreCommandStateSnapshot, type RoutePoolTier, type RouterMetadataInput, type RoutingFeatures, type VirtualRouterConfig, type VirtualRouterContextRoutingConfig, type TargetMetadata, type ProviderFailureEvent, type ProviderErrorEvent, type ProviderSuccessEvent, type VirtualRouterHealthStore } from './types.js';
8
+ import type { RoutingInstructionState } from './routing-instructions.js';
9
+ import type { ProviderQuotaView } from './types.js';
10
+ import type { RoutingInstructionStateStoreLike } from './engine/routing-state/store.js';
11
+ import { RouteAnalytics } from './engine/route-analytics.js';
12
+ import { StickySessionManager } from './engine/sticky-session-manager.js';
13
+ import { CooldownManager } from './engine/cooldown-manager.js';
14
+ import { getStatus as getStatusImpl } from './engine-legacy/state-accessors.js';
15
+ export declare class VirtualRouterEngine {
16
+ routing: RoutingPools;
17
+ readonly providerRegistry: ProviderRegistry;
18
+ readonly healthManager: ProviderHealthManager;
19
+ loadBalancer: RouteLoadBalancer;
20
+ classifier: RoutingClassifier;
21
+ readonly contextAdvisor: ContextAdvisor;
22
+ contextRouting: VirtualRouterContextRoutingConfig | undefined;
23
+ readonly routeAnalytics: RouteAnalytics;
24
+ stickySessionManager: StickySessionManager;
25
+ cooldownManager: CooldownManager;
26
+ antigravityLeasePersistence: {
27
+ loadedOnce: boolean;
28
+ loadedMtimeMs: number | null;
29
+ flushTimer: ReturnType<typeof setTimeout> | null;
30
+ };
31
+ readonly debug: Console;
32
+ healthConfig: VirtualRouterConfig['health'] | null;
33
+ readonly statsCenter: import("../../index.js").StatsCenter;
34
+ webSearchForce: boolean;
35
+ healthStore?: VirtualRouterHealthStore;
36
+ routingStateStore: RoutingInstructionStateStoreLike;
37
+ routingInstructionState: Map<string, RoutingInstructionState>;
38
+ quotaView?: ProviderQuotaView;
39
+ /**
40
+ * Backward-compatible test/debug surface used by existing regression scripts.
41
+ * Keep this as a read-only view over StickySessionManager storage.
42
+ */
43
+ get antigravitySessionAliasStore(): Map<string, string>;
44
+ constructor(deps?: {
45
+ healthStore?: VirtualRouterHealthStore;
46
+ routingStateStore?: RoutingInstructionStateStoreLike;
47
+ quotaView?: ProviderQuotaView;
48
+ });
49
+ updateDeps(deps: {
50
+ healthStore?: VirtualRouterHealthStore | null;
51
+ routingStateStore?: RoutingInstructionStateStoreLike | null;
52
+ quotaView?: ProviderQuotaView | null;
53
+ }): void;
54
+ initialize(config: VirtualRouterConfig): void;
55
+ route(request: StandardizedRequest | ProcessedRequest, metadata: RouterMetadataInput): {
56
+ target: TargetMetadata;
57
+ decision: RoutingDecision;
58
+ diagnostics: RoutingDiagnostics;
59
+ };
60
+ getStopMessageState(metadata: RouterMetadataInput): StopMessageStateSnapshot | null;
61
+ getPreCommandState(metadata: RouterMetadataInput): PreCommandStateSnapshot | null;
62
+ handleProviderFailure(event: ProviderFailureEvent): void;
63
+ handleProviderError(event: ProviderErrorEvent): void;
64
+ handleProviderSuccess(event: ProviderSuccessEvent): void;
65
+ getStatus(): ReturnType<typeof getStatusImpl>;
66
+ normalizeRouteAlias(routeName: string | undefined): string;
67
+ buildRouteCandidates(requestedRoute: string, classificationCandidates: string[] | undefined, features: RoutingFeatures): string[];
68
+ reorderForInlineVision(routeNames: string[]): string[];
69
+ reorderForPreferredModel(routeNames: string[], modelId: string): string[];
70
+ routeSupportsModel(routeName: string, modelId: string): boolean;
71
+ routeSupportsInlineVision(routeName: string): boolean;
72
+ sortByPriority(routeNames: string[]): string[];
73
+ routeWeight(routeName: string): number;
74
+ routeHasForceFlag(routeName: string): boolean;
75
+ routeHasTargets(pools?: RoutePoolTier[]): boolean;
76
+ hasPrimaryPool(pools?: RoutePoolTier[]): boolean;
77
+ sortRoutePools(pools?: RoutePoolTier[]): RoutePoolTier[];
78
+ flattenPoolTargets(pools?: RoutePoolTier[]): string[];
79
+ markProviderCooldown(providerKey: string, cooldownMs: number | undefined): void;
80
+ clearProviderCooldown(providerKey: string): void;
81
+ isProviderCoolingDown(providerKey: string): boolean;
82
+ getProviderCooldownRemainingMs(providerKey: string): number;
83
+ restoreHealthFromStore(): void;
84
+ buildHealthSnapshot(): import("./types.js").VirtualRouterHealthSnapshot;
85
+ persistHealthSnapshot(): void;
86
+ parseDirectProviderModel(model: string | undefined): {
87
+ providerId: string;
88
+ modelId: string;
89
+ } | null;
90
+ shouldFallbackDirectModelForMedia(direct: {
91
+ providerId: string;
92
+ modelId: string;
93
+ }, features: RoutingFeatures): boolean;
94
+ selectProvider(requestedRoute: string, metadata: RouterMetadataInput, classification: any, features: RoutingFeatures, routingState?: RoutingInstructionState): {
95
+ providerKey: string;
96
+ routeUsed: string;
97
+ pool: string[];
98
+ poolId?: string;
99
+ };
100
+ selectFromCandidates(routes: string[], metadata: RouterMetadataInput, classification: any, features: RoutingFeatures, state: RoutingInstructionState, requiredProviderKeys?: Set<string>, allowAliasRotation?: boolean): {
101
+ providerKey: string;
102
+ routeUsed: string;
103
+ pool: string[];
104
+ poolId?: string;
105
+ };
106
+ selectFromStickyPool(stickyKeySet: Set<string>, metadata: RouterMetadataInput, features: RoutingFeatures, state: RoutingInstructionState, allowAliasRotation?: boolean): {
107
+ providerKey: string;
108
+ routeUsed: string;
109
+ pool: string[];
110
+ poolId?: string;
111
+ } | null;
112
+ extractExcludedProviderKeySet(metadata: RouterMetadataInput | undefined): Set<string>;
113
+ resolveSelectionPenalty(providerKey: string): number | undefined;
114
+ resolveInstructionProcessModeForSelection(providerKey: string, routingState: RoutingInstructionState): 'chat' | 'passthrough' | undefined;
115
+ resolveInstructionTarget(target: NonNullable<RoutingInstructionState['forcedTarget']>): {
116
+ mode: 'exact' | 'filter';
117
+ keys: string[];
118
+ } | null;
119
+ buildStickyRouteCandidatesFromFiltered(filteredCandidates: string[], stickyKeySet: Set<string>): string[];
120
+ filterCandidatesByRoutingState(routes: string[], state: RoutingInstructionState): string[];
121
+ resolveStickyKey(metadata: RouterMetadataInput): string | undefined;
122
+ resolveSessionScope(metadata: RouterMetadataInput): string | undefined;
123
+ }
@@ -0,0 +1,194 @@
1
+ import { ProviderHealthManager } from './health-manager.js';
2
+ import { ProviderRegistry } from './provider-registry.js';
3
+ import { RouteLoadBalancer } from './load-balancer.js';
4
+ import { RoutingClassifier } from './classifier.js';
5
+ import { ContextAdvisor } from './context-advisor.js';
6
+ import { getStatsCenter } from '../../telemetry/stats-center.js';
7
+ import { loadRoutingInstructionStateSync, saveRoutingInstructionStateAsync, saveRoutingInstructionStateSync } from './sticky-session-store.js';
8
+ import { resolveStickyKey as resolveStickyKeyImpl, resolveSessionScope as resolveSessionScopeImpl } from './engine/routing-state/keys.js';
9
+ import { RouteAnalytics } from './engine/route-analytics.js';
10
+ import { StickySessionManager } from './engine/sticky-session-manager.js';
11
+ import { CooldownManager } from './engine/cooldown-manager.js';
12
+ import { routeRequest } from './engine-legacy/routing.js';
13
+ import { updateDeps as updateDepsImpl, initialize as initializeImpl } from './engine-legacy/config.js';
14
+ import { handleProviderError as handleProviderErrorImpl, handleProviderFailure as handleProviderFailureImpl, handleProviderSuccess as handleProviderSuccessImpl, buildHealthSnapshot as buildHealthSnapshotImpl, persistHealthSnapshot as persistHealthSnapshotImpl, markProviderCooldown as markProviderCooldownImpl, clearProviderCooldown as clearProviderCooldownImpl, isProviderCoolingDown as isProviderCoolingDownImpl, getProviderCooldownRemainingMs as getProviderCooldownRemainingMsImpl, restoreHealthFromStore as restoreHealthFromStoreImpl } from './engine-legacy/health.js';
15
+ import { getStopMessageState as getStopMessageStateImpl, getPreCommandState as getPreCommandStateImpl, getStatus as getStatusImpl } from './engine-legacy/state-accessors.js';
16
+ import { selectProvider as selectProviderImpl, selectFromCandidates as selectFromCandidatesImpl, selectFromStickyPool as selectFromStickyPoolImpl, extractExcludedProviderKeySet as extractExcludedProviderKeySetImpl } from './engine-legacy/selection-core.js';
17
+ import { parseDirectProviderModel as parseDirectProviderModelImpl, shouldFallbackDirectModelForMedia as shouldFallbackDirectModelForMediaImpl } from './engine-legacy/direct-model.js';
18
+ import { normalizeRouteAlias as normalizeRouteAliasImpl, buildRouteCandidates as buildRouteCandidatesImpl, reorderForInlineVision as reorderForInlineVisionImpl, reorderForPreferredModel as reorderForPreferredModelImpl, routeSupportsModel as routeSupportsModelImpl, routeSupportsInlineVision as routeSupportsInlineVisionImpl, sortByPriority as sortByPriorityImpl, routeWeight as routeWeightImpl, routeHasForceFlag as routeHasForceFlagImpl, routeHasTargets as routeHasTargetsImpl, hasPrimaryPool as hasPrimaryPoolImpl, sortRoutePools as sortRoutePoolsImpl, flattenPoolTargets as flattenPoolTargetsImpl } from './engine-legacy/route-utils.js';
19
+ import { resolveSelectionPenalty as resolveSelectionPenaltyImpl, resolveInstructionProcessModeForSelection as resolveInstructionProcessModeForSelectionImpl, resolveInstructionTarget as resolveInstructionTargetImpl, filterCandidatesByRoutingState as filterCandidatesByRoutingStateImpl, buildStickyRouteCandidatesFromFiltered as buildStickyRouteCandidatesFromFilteredImpl } from './engine-legacy/selection-state.js';
20
+ export class VirtualRouterEngine {
21
+ routing = {};
22
+ providerRegistry = new ProviderRegistry();
23
+ healthManager = new ProviderHealthManager();
24
+ loadBalancer = new RouteLoadBalancer();
25
+ classifier = new RoutingClassifier({});
26
+ contextAdvisor = new ContextAdvisor();
27
+ contextRouting;
28
+ routeAnalytics = new RouteAnalytics();
29
+ stickySessionManager = new StickySessionManager();
30
+ cooldownManager;
31
+ antigravityLeasePersistence = { loadedOnce: false, loadedMtimeMs: null, flushTimer: null };
32
+ debug = console; // thin hook; host may monkey-patch for colored logging
33
+ healthConfig = null;
34
+ statsCenter = getStatsCenter();
35
+ // Derived flags from VirtualRouterConfig/routing used by process / response layers.
36
+ webSearchForce = false;
37
+ healthStore;
38
+ routingStateStore = {
39
+ loadSync: loadRoutingInstructionStateSync,
40
+ saveAsync: saveRoutingInstructionStateAsync,
41
+ saveSync: saveRoutingInstructionStateSync
42
+ };
43
+ routingInstructionState = new Map();
44
+ quotaView;
45
+ /**
46
+ * Backward-compatible test/debug surface used by existing regression scripts.
47
+ * Keep this as a read-only view over StickySessionManager storage.
48
+ */
49
+ get antigravitySessionAliasStore() {
50
+ return this.stickySessionManager.getAllStores().sessionAliasStore;
51
+ }
52
+ constructor(deps) {
53
+ this.cooldownManager = new CooldownManager({
54
+ healthStore: deps?.healthStore,
55
+ healthConfig: this.healthConfig,
56
+ quotaView: deps?.quotaView
57
+ });
58
+ if (deps?.healthStore) {
59
+ this.healthStore = deps.healthStore;
60
+ }
61
+ if (deps?.routingStateStore) {
62
+ this.routingStateStore = deps.routingStateStore;
63
+ }
64
+ if (deps?.quotaView) {
65
+ this.quotaView = deps.quotaView;
66
+ }
67
+ }
68
+ updateDeps(deps) {
69
+ updateDepsImpl(this, deps);
70
+ }
71
+ initialize(config) {
72
+ initializeImpl(this, config);
73
+ }
74
+ route(request, metadata) {
75
+ return routeRequest(this, request, metadata);
76
+ }
77
+ getStopMessageState(metadata) {
78
+ return getStopMessageStateImpl(this, metadata);
79
+ }
80
+ getPreCommandState(metadata) {
81
+ return getPreCommandStateImpl(this, metadata);
82
+ }
83
+ handleProviderFailure(event) {
84
+ handleProviderFailureImpl(this, event);
85
+ }
86
+ handleProviderError(event) {
87
+ handleProviderErrorImpl(this, event);
88
+ }
89
+ handleProviderSuccess(event) {
90
+ handleProviderSuccessImpl(this, event);
91
+ }
92
+ getStatus() {
93
+ return getStatusImpl(this);
94
+ }
95
+ normalizeRouteAlias(routeName) {
96
+ return normalizeRouteAliasImpl(routeName);
97
+ }
98
+ buildRouteCandidates(requestedRoute, classificationCandidates, features) {
99
+ return buildRouteCandidatesImpl(this, requestedRoute, classificationCandidates, features);
100
+ }
101
+ reorderForInlineVision(routeNames) {
102
+ return reorderForInlineVisionImpl(this, routeNames);
103
+ }
104
+ reorderForPreferredModel(routeNames, modelId) {
105
+ return reorderForPreferredModelImpl(this, routeNames, modelId);
106
+ }
107
+ routeSupportsModel(routeName, modelId) {
108
+ return routeSupportsModelImpl(this, routeName, modelId);
109
+ }
110
+ routeSupportsInlineVision(routeName) {
111
+ return routeSupportsInlineVisionImpl(this, routeName);
112
+ }
113
+ sortByPriority(routeNames) {
114
+ return sortByPriorityImpl(routeNames);
115
+ }
116
+ routeWeight(routeName) {
117
+ return routeWeightImpl(routeName);
118
+ }
119
+ routeHasForceFlag(routeName) {
120
+ return routeHasForceFlagImpl(this, routeName);
121
+ }
122
+ routeHasTargets(pools) {
123
+ return routeHasTargetsImpl(this, pools);
124
+ }
125
+ hasPrimaryPool(pools) {
126
+ return hasPrimaryPoolImpl(this, pools);
127
+ }
128
+ sortRoutePools(pools) {
129
+ return sortRoutePoolsImpl(this, pools);
130
+ }
131
+ flattenPoolTargets(pools) {
132
+ return flattenPoolTargetsImpl(this, pools);
133
+ }
134
+ markProviderCooldown(providerKey, cooldownMs) {
135
+ markProviderCooldownImpl(this, providerKey, cooldownMs);
136
+ }
137
+ clearProviderCooldown(providerKey) {
138
+ clearProviderCooldownImpl(this, providerKey);
139
+ }
140
+ isProviderCoolingDown(providerKey) {
141
+ return isProviderCoolingDownImpl(this, providerKey);
142
+ }
143
+ getProviderCooldownRemainingMs(providerKey) {
144
+ return getProviderCooldownRemainingMsImpl(this, providerKey);
145
+ }
146
+ restoreHealthFromStore() {
147
+ restoreHealthFromStoreImpl(this);
148
+ }
149
+ buildHealthSnapshot() {
150
+ return buildHealthSnapshotImpl(this);
151
+ }
152
+ persistHealthSnapshot() {
153
+ persistHealthSnapshotImpl(this);
154
+ }
155
+ parseDirectProviderModel(model) {
156
+ return parseDirectProviderModelImpl(this, model);
157
+ }
158
+ shouldFallbackDirectModelForMedia(direct, features) {
159
+ return shouldFallbackDirectModelForMediaImpl(this, direct, features);
160
+ }
161
+ selectProvider(requestedRoute, metadata, classification, features, routingState) {
162
+ return selectProviderImpl(this, requestedRoute, metadata, classification, features, routingState);
163
+ }
164
+ selectFromCandidates(routes, metadata, classification, features, state, requiredProviderKeys, allowAliasRotation) {
165
+ return selectFromCandidatesImpl(this, routes, metadata, classification, features, state, requiredProviderKeys, allowAliasRotation);
166
+ }
167
+ selectFromStickyPool(stickyKeySet, metadata, features, state, allowAliasRotation) {
168
+ return selectFromStickyPoolImpl(this, stickyKeySet, metadata, features, state, allowAliasRotation);
169
+ }
170
+ extractExcludedProviderKeySet(metadata) {
171
+ return extractExcludedProviderKeySetImpl(this, metadata);
172
+ }
173
+ resolveSelectionPenalty(providerKey) {
174
+ return resolveSelectionPenaltyImpl(this, providerKey);
175
+ }
176
+ resolveInstructionProcessModeForSelection(providerKey, routingState) {
177
+ return resolveInstructionProcessModeForSelectionImpl(this, providerKey, routingState);
178
+ }
179
+ resolveInstructionTarget(target) {
180
+ return resolveInstructionTargetImpl(this, target);
181
+ }
182
+ buildStickyRouteCandidatesFromFiltered(filteredCandidates, stickyKeySet) {
183
+ return buildStickyRouteCandidatesFromFilteredImpl(this, filteredCandidates, stickyKeySet);
184
+ }
185
+ filterCandidatesByRoutingState(routes, state) {
186
+ return filterCandidatesByRoutingStateImpl(this, routes, state);
187
+ }
188
+ resolveStickyKey(metadata) {
189
+ return resolveStickyKeyImpl(metadata);
190
+ }
191
+ resolveSessionScope(metadata) {
192
+ return resolveSessionScopeImpl(metadata);
193
+ }
194
+ }
@@ -19,6 +19,7 @@ export type StopMessageRuntimeSummary = {
19
19
  };
20
20
  export type VirtualRouterHitRecord = {
21
21
  timestampMs: number;
22
+ requestId?: string;
22
23
  routeName: string;
23
24
  poolId?: string;
24
25
  providerKey: string;
@@ -34,6 +35,7 @@ export type VirtualRouterHitEventMeta = {
34
35
  entryEndpoint?: string;
35
36
  };
36
37
  export declare function createVirtualRouterHitRecord(input: {
38
+ requestId?: string;
37
39
  routeName: string;
38
40
  poolId?: string;
39
41
  providerKey: string;
@@ -18,23 +18,24 @@ function summarizeStopMessageRuntime(state) {
18
18
  const parsedMaxRepeats = typeof state.stopMessageMaxRepeats === 'number' && Number.isFinite(state.stopMessageMaxRepeats)
19
19
  ? Math.max(0, Math.floor(state.stopMessageMaxRepeats))
20
20
  : 0;
21
+ const hasGoalText = Boolean(text);
21
22
  const maxRepeats = parsedMaxRepeats > 0
22
23
  ? parsedMaxRepeats
23
- : mode === 'on' || mode === 'auto'
24
+ : hasGoalText && (mode === 'on' || mode === 'auto')
24
25
  ? DEFAULT_STOP_MESSAGE_MAX_REPEATS
25
26
  : 0;
26
27
  const used = typeof state.stopMessageUsed === 'number' && Number.isFinite(state.stopMessageUsed)
27
28
  ? Math.max(0, Math.floor(state.stopMessageUsed))
28
29
  : 0;
29
30
  const remaining = maxRepeats > 0 ? Math.max(0, maxRepeats - used) : -1;
30
- const active = mode !== 'off' && maxRepeats > 0 && (Boolean(text) || mode === 'on' || mode === 'auto');
31
+ const active = mode !== 'off' && hasGoalText && maxRepeats > 0;
31
32
  const updatedAt = typeof state.stopMessageUpdatedAt === 'number' && Number.isFinite(state.stopMessageUpdatedAt)
32
33
  ? state.stopMessageUpdatedAt
33
34
  : undefined;
34
35
  const lastUsedAt = typeof state.stopMessageLastUsedAt === 'number' && Number.isFinite(state.stopMessageLastUsedAt)
35
36
  ? state.stopMessageLastUsedAt
36
37
  : undefined;
37
- const hasAny = Boolean(text) || maxRepeats > 0 || mode !== 'unset' || used > 0;
38
+ const hasAny = hasGoalText || maxRepeats > 0 || used > 0;
38
39
  return {
39
40
  hasAny,
40
41
  ...(safeText ? { safeText } : {}),
@@ -64,6 +65,7 @@ export function createVirtualRouterHitRecord(input) {
64
65
  timestampMs: typeof input.timestampMs === 'number' && Number.isFinite(input.timestampMs)
65
66
  ? input.timestampMs
66
67
  : Date.now(),
68
+ ...(input.requestId ? { requestId: input.requestId } : {}),
67
69
  routeName: input.routeName,
68
70
  ...(input.poolId ? { poolId: input.poolId } : {}),
69
71
  providerKey: input.providerKey,
@@ -248,6 +250,8 @@ export function formatVirtualRouterHit(record) {
248
250
  const { providerLabel, resolvedModel } = describeTargetProvider(record.providerKey, record.modelId);
249
251
  const routeLabel = record.poolId ? `${record.routeName}/${record.poolId}` : record.routeName;
250
252
  const targetLabel = `${routeLabel} -> ${providerLabel}${resolvedModel ? '.' + resolvedModel : ''}`;
253
+ const requestId = typeof record.requestId === 'string' ? record.requestId : '';
254
+ const requestLabel = requestId && !requestId.includes('unknown') ? ` req=${requestId}` : '';
251
255
  const stickyText = formatStickyScope(record.stickyScope);
252
256
  const stickyLabel = stickyText ? ` ${stickyColor}[sticky:${stickyText}]${reset}` : '';
253
257
  const reasonLabel = record.hitReason ? ` reason=${record.hitReason}` : '';
@@ -275,7 +279,7 @@ export function formatVirtualRouterHit(record) {
275
279
  }
276
280
  stopLabel = ` ${stopColor}[stopMessage:${parts.join(' ')}]${reset}`;
277
281
  }
278
- return `${prefix} ${timeLabel} ${routeColor}${targetLabel}${stickyLabel}${reasonLabel}${requestTokenLabel}${penaltyLabel}${stopLabel}${reset}`;
282
+ return `${prefix} ${timeLabel}${requestLabel} ${routeColor}${targetLabel}${stickyLabel}${reasonLabel}${requestTokenLabel}${penaltyLabel}${stopLabel}${reset}`;
279
283
  }
280
284
  catch {
281
285
  const now = new Date(record.timestampMs);
@@ -283,6 +287,8 @@ export function formatVirtualRouterHit(record) {
283
287
  const routeLabel = record.poolId ? `${record.routeName}/${record.poolId}` : record.routeName;
284
288
  const stickyText = formatStickyScope(record.stickyScope);
285
289
  const stickyLabel = stickyText ? ` [sticky:${stickyText}]` : '';
290
+ const requestId = typeof record.requestId === 'string' ? record.requestId : '';
291
+ const requestLabel = requestId && !requestId.includes('unknown') ? ` req=${requestId}` : '';
286
292
  const requestTokenLabel = typeof record.requestTokens === 'number' && Number.isFinite(record.requestTokens)
287
293
  ? ` reqTokens=${Math.max(0, Math.round(record.requestTokens))}`
288
294
  : '';
@@ -297,6 +303,6 @@ export function formatVirtualRouterHit(record) {
297
303
  const left = stop.remaining >= 0 ? String(stop.remaining) : 'n/a';
298
304
  stopLabel = ` [stopMessage:${safeText} mode=${stop.mode} round=${rounds} active=${stop.active ? 'yes' : 'no'} left=${left}]`;
299
305
  }
300
- return `[virtual-router-hit] ${timestamp} ${routeLabel} -> ${record.providerKey}${record.modelId ? '.' + record.modelId : ''}${stickyLabel}${record.hitReason ? ` reason=${record.hitReason}` : ''}${requestTokenLabel}${penaltyLabel}${stopLabel}`;
306
+ return `[virtual-router-hit] ${timestamp}${requestLabel} ${routeLabel} -> ${record.providerKey}${record.modelId ? '.' + record.modelId : ''}${stickyLabel}${record.hitReason ? ` reason=${record.hitReason}` : ''}${requestTokenLabel}${penaltyLabel}${stopLabel}`;
301
307
  }
302
308
  }