@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
@@ -1,7 +1,6 @@
1
1
  import { Readable } from 'node:stream';
2
2
  import { isJsonObject, jsonClone } from '../types/json.js';
3
3
  import { VirtualRouterEngine } from '../../../router/virtual-router/engine.js';
4
- import { parseRoutingInstructions } from '../../../router/virtual-router/routing-instructions.js';
5
4
  import { providerErrorCenter } from '../../../router/virtual-router/error-center.js';
6
5
  import { providerSuccessCenter } from '../../../router/virtual-router/success-center.js';
7
6
  import { defaultSseCodecRegistry } from '../../../sse/index.js';
@@ -14,10 +13,11 @@ import { GeminiSemanticMapper } from '../semantic-mappers/gemini-mapper.js';
14
13
  import { ChatFormatAdapter } from '../format-adapters/chat-format-adapter.js';
15
14
  import { ChatSemanticMapper } from '../semantic-mappers/chat-mapper.js';
16
15
  import { createSnapshotRecorder } from '../snapshot-recorder.js';
17
- import { shouldRecordSnapshots } from '../../shared/snapshot-utils.js';
16
+ import { shouldRecordSnapshots } from '../../snapshot-utils.js';
18
17
  import { runReqInboundStage1FormatParse } from './stages/req_inbound/req_inbound_stage1_format_parse/index.js';
19
18
  import { runReqInboundStage2SemanticMap } from './stages/req_inbound/req_inbound_stage2_semantic_map/index.js';
20
19
  import { runChatContextCapture, captureResponsesContextSnapshot } from './stages/req_inbound/req_inbound_stage3_context_capture/index.js';
20
+ import { normalizeReqInboundToolCallIdStyleWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
21
21
  import { createResponsesContextCapture, createNoopContextCapture } from './stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js';
22
22
  import { runReqProcessStage1ToolGovernance } from './stages/req_process/req_process_stage1_tool_governance/index.js';
23
23
  import { runReqProcessStage2RouteSelect } from './stages/req_process/req_process_stage2_route_select/index.js';
@@ -26,11 +26,12 @@ import { runReqOutboundStage2FormatBuild } from './stages/req_outbound/req_outbo
26
26
  import { runReqOutboundStage3Compat } from './stages/req_outbound/req_outbound_stage3_compat/index.js';
27
27
  import { extractSessionIdentifiersFromMetadata } from './session-identifiers.js';
28
28
  import { computeRequestTokens } from '../../../router/virtual-router/token-estimator.js';
29
- import { isCompactionRequest } from '../../shared/compaction-detect.js';
29
+ import { annotatePassthroughGovernanceSkipWithNative, attachPassthroughProviderInputAuditWithNative, buildPassthroughAuditWithNative, applyOutboundStreamPreferenceWithNative, normalizeHubEndpointWithNative, extractAdapterContextMetadataFieldsWithNative, resolveApplyPatchToolModeFromToolsWithNative, resolveHubClientProtocolWithNative, resolveHubPolicyOverrideFromMetadataWithNative, resolveHubProviderProtocolWithNative, resolveOutboundStreamIntentWithNative, resolveHubShadowCompareConfigWithNative, resolveActiveProcessModeWithNative, findMappableSemanticsKeysWithNative, resolveHubSseProtocolFromMetadataWithNative, resolveStopMessageRouterMetadataWithNative, runHubPipelineOrchestrationWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js';
30
+ import { normalizeAliasMapWithNative, resolveAliasMapFromRespSemanticsWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js';
31
+ import { isCompactionRequest } from '../../compaction-detect.js';
30
32
  import { applyHubProviderOutboundPolicy, recordHubPolicyObservation, setHubPolicyRuntimePolicy } from '../policy/policy-engine.js';
31
33
  import { applyProviderOutboundToolSurface } from '../tool-surface/tool-surface-engine.js';
32
- import { applyHubOperations } from '../ops/operations.js';
33
- import { cloneRuntimeMetadata, ensureRuntimeMetadata, readRuntimeMetadata } from '../../shared/runtime-metadata.js';
34
+ import { cloneRuntimeMetadata, ensureRuntimeMetadata, readRuntimeMetadata } from '../../runtime-metadata.js';
34
35
  function isTruthyEnv(value) {
35
36
  const v = typeof value === 'string' ? value.trim().toLowerCase() : '';
36
37
  return v === '1' || v === 'true' || v === 'yes' || v === 'on';
@@ -49,142 +50,51 @@ function resolveApplyPatchToolModeFromEnv() {
49
50
  return undefined;
50
51
  }
51
52
  function resolveApplyPatchToolModeFromTools(toolsRaw) {
52
- if (!Array.isArray(toolsRaw) || toolsRaw.length === 0) {
53
- return undefined;
54
- }
55
- for (const entry of toolsRaw) {
56
- if (!entry || typeof entry !== 'object' || Array.isArray(entry))
57
- continue;
58
- const record = entry;
59
- const type = typeof record.type === 'string' ? record.type.trim().toLowerCase() : '';
60
- if (type && type !== 'function')
61
- continue;
62
- const fn = record.function && typeof record.function === 'object' && !Array.isArray(record.function)
63
- ? record.function
64
- : undefined;
65
- const name = typeof fn?.name === 'string' ? fn.name.trim().toLowerCase() : '';
66
- if (name !== 'apply_patch')
67
- continue;
68
- const format = typeof record.format === 'string'
69
- ? record.format.trim().toLowerCase()
70
- : typeof fn?.format === 'string'
71
- ? String(fn.format).trim().toLowerCase()
72
- : '';
73
- if (format === 'freeform')
74
- return 'freeform';
75
- // If apply_patch is present without explicit freeform marker, default to schema mode.
76
- return 'schema';
77
- }
78
- return undefined;
53
+ return resolveApplyPatchToolModeFromToolsWithNative(toolsRaw);
79
54
  }
80
55
  function extractHubPolicyOverride(metadata) {
81
- const raw = metadata ? metadata.__hubPolicyOverride : undefined;
82
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
83
- return undefined;
84
- }
85
- const obj = raw;
86
- const mode = typeof obj.mode === 'string' ? obj.mode.trim().toLowerCase() : '';
87
- const sampleRate = typeof obj.sampleRate === 'number' && Number.isFinite(obj.sampleRate) ? obj.sampleRate : undefined;
88
- if (mode !== 'off' && mode !== 'observe' && mode !== 'enforce') {
56
+ const parsed = resolveHubPolicyOverrideFromMetadataWithNative(metadata);
57
+ if (!parsed) {
89
58
  return undefined;
90
59
  }
91
60
  return {
92
- mode: mode,
93
- ...(sampleRate !== undefined ? { sampleRate } : {})
61
+ mode: parsed.mode,
62
+ ...(parsed.sampleRate !== undefined ? { sampleRate: parsed.sampleRate } : {})
94
63
  };
95
64
  }
65
+ function propagateAdapterContextMetadataFields(adapterContext, metadata, keys) {
66
+ const picked = extractAdapterContextMetadataFieldsWithNative(metadata, keys);
67
+ Object.assign(adapterContext, picked);
68
+ }
69
+ function resolveStopMessageRouterMetadata(metadata) {
70
+ return resolveStopMessageRouterMetadataWithNative(metadata);
71
+ }
96
72
  function extractHubShadowCompareConfig(metadata) {
97
- const raw = metadata ? metadata.__hubShadowCompare : undefined;
98
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
99
- return undefined;
100
- }
101
- const obj = raw;
102
- const modeCandidate = typeof obj.baselineMode === 'string'
103
- ? obj.baselineMode.trim().toLowerCase()
104
- : typeof obj.mode === 'string'
105
- ? obj.mode.trim().toLowerCase()
106
- : '';
107
- if (modeCandidate !== 'off' && modeCandidate !== 'observe' && modeCandidate !== 'enforce') {
73
+ const parsed = resolveHubShadowCompareConfigWithNative(metadata);
74
+ if (!parsed) {
108
75
  return undefined;
109
76
  }
110
- return { baselineMode: modeCandidate };
111
- }
112
- const PASSTHROUGH_CANONICAL_CHAT_KEYS = new Set([
113
- 'model',
114
- 'messages',
115
- 'tools',
116
- 'parameters',
117
- 'metadata',
118
- 'semantics',
119
- 'stream'
120
- ]);
121
- function cloneJsonRecord(payload) {
122
- try {
123
- return jsonClone(payload);
124
- }
125
- catch {
126
- return { ...payload };
127
- }
128
- }
129
- function collectPassthroughTodoTopLevelKeys(payload) {
130
- return Object.keys(payload)
131
- .filter((key) => !PASSTHROUGH_CANONICAL_CHAT_KEYS.has(key))
132
- .sort();
77
+ return { baselineMode: parsed.baselineMode };
133
78
  }
134
79
  function buildPassthroughAudit(rawInbound, providerProtocol) {
135
- return {
136
- raw: {
137
- inbound: cloneJsonRecord(rawInbound)
138
- },
139
- todo: {
140
- inbound: {
141
- unmappedTopLevelKeys: collectPassthroughTodoTopLevelKeys(rawInbound),
142
- providerProtocol,
143
- note: 'passthrough_mode_parse_record_only'
144
- }
145
- }
146
- };
80
+ return buildPassthroughAuditWithNative(rawInbound, providerProtocol);
147
81
  }
148
82
  function annotatePassthroughGovernanceSkip(audit) {
149
- const todo = audit.todo && typeof audit.todo === 'object' && !Array.isArray(audit.todo)
150
- ? audit.todo
151
- : (audit.todo = {});
152
- todo.governance = {
153
- skipped: true,
154
- reason: 'process_mode_passthrough'
155
- };
83
+ const next = annotatePassthroughGovernanceSkipWithNative(audit);
84
+ for (const key of Object.keys(audit)) {
85
+ delete audit[key];
86
+ }
87
+ Object.assign(audit, next);
156
88
  }
157
89
  function attachPassthroughProviderInputAudit(audit, providerPayload, providerProtocol) {
158
- const raw = audit.raw && typeof audit.raw === 'object' && !Array.isArray(audit.raw)
159
- ? audit.raw
160
- : (audit.raw = {});
161
- raw.providerInput = cloneJsonRecord(providerPayload);
162
- const todo = audit.todo && typeof audit.todo === 'object' && !Array.isArray(audit.todo)
163
- ? audit.todo
164
- : (audit.todo = {});
165
- todo.outbound = {
166
- unmappedTopLevelKeys: collectPassthroughTodoTopLevelKeys(providerPayload),
167
- providerProtocol,
168
- note: 'provider_payload_not_mapped_back_to_chat_semantics'
169
- };
170
- }
171
- function hasInstructionRequestedPassthrough(messages) {
172
- if (!Array.isArray(messages) || messages.length === 0) {
173
- return false;
174
- }
175
- try {
176
- const instructions = parseRoutingInstructions(messages);
177
- return instructions.some((instruction) => instruction.processMode === 'passthrough');
178
- }
179
- catch {
180
- return false;
90
+ const next = attachPassthroughProviderInputAuditWithNative(audit, providerPayload, providerProtocol);
91
+ for (const key of Object.keys(audit)) {
92
+ delete audit[key];
181
93
  }
94
+ Object.assign(audit, next);
182
95
  }
183
96
  function resolveActiveProcessMode(baseMode, messages) {
184
- if (baseMode === 'passthrough') {
185
- return 'passthrough';
186
- }
187
- return hasInstructionRequestedPassthrough(messages) ? 'passthrough' : 'chat';
97
+ return resolveActiveProcessModeWithNative(baseMode, messages);
188
98
  }
189
99
  export class HubPipeline {
190
100
  routerEngine;
@@ -279,7 +189,6 @@ export class HubPipeline {
279
189
  }
280
190
  }
281
191
  async executeRequestStagePipeline(normalized, hooks) {
282
- const formatAdapter = hooks.createFormatAdapter();
283
192
  const semanticMapper = hooks.createSemanticMapper();
284
193
  const rawRequest = this.asJsonObject(normalized.payload);
285
194
  // Detect applyPatchToolMode (runtime/tooling hint). Client tool schemas are captured as chat semantics
@@ -320,7 +229,6 @@ export class HubPipeline {
320
229
  const formatEnvelope = await runReqInboundStage1FormatParse({
321
230
  rawRequest,
322
231
  adapterContext: inboundAdapterContext,
323
- formatAdapter,
324
232
  stageRecorder: inboundRecorder
325
233
  });
326
234
  const responsesResumeFromMetadata = normalized.metadata && typeof normalized.metadata.responsesResume === 'object'
@@ -483,6 +391,11 @@ export class HubPipeline {
483
391
  normalized.metadata.conversationId = sessionIdentifiers.conversationId;
484
392
  }
485
393
  const disableStickyRoutes = readRuntimeMetadata(normalized.metadata)?.disableStickyRoutes === true;
394
+ const stopMessageRouterMetadata = resolveStopMessageRouterMetadata(normalized.metadata);
395
+ const estimatedInputTokens = (() => {
396
+ const value = normalized.metadata?.estimatedInputTokens;
397
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
398
+ })();
486
399
  const metadataInput = {
487
400
  requestId: normalized.id,
488
401
  entryEndpoint: normalized.entryEndpoint,
@@ -493,10 +406,12 @@ export class HubPipeline {
493
406
  routeHint: normalized.routeHint,
494
407
  stage: normalized.stage,
495
408
  responsesResume: responsesResume,
409
+ ...(estimatedInputTokens !== undefined ? { estimatedInputTokens } : {}),
496
410
  ...(disableStickyRoutes ? { disableStickyRoutes: true } : {}),
497
411
  ...(serverToolRequired ? { serverToolRequired: true } : {}),
498
412
  ...(sessionIdentifiers.sessionId ? { sessionId: sessionIdentifiers.sessionId } : {}),
499
- ...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {})
413
+ ...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {}),
414
+ ...stopMessageRouterMetadata
500
415
  };
501
416
  const routing = runReqProcessStage2RouteSelect({
502
417
  routerEngine: this.routerEngine,
@@ -531,6 +446,7 @@ export class HubPipeline {
531
446
  }
532
447
  const outboundStream = this.resolveOutboundStreamIntent(routing.target?.streaming);
533
448
  workingRequest = this.applyOutboundStreamPreference(workingRequest, outboundStream, activeProcessMode);
449
+ this.applyMaxTokensPolicy(workingRequest, routing.target);
534
450
  const outboundAdapterContext = this.buildAdapterContext(normalized, routing.target);
535
451
  if (routing.target?.compatibilityProfile) {
536
452
  outboundAdapterContext.compatibilityProfile = routing.target.compatibilityProfile;
@@ -549,7 +465,7 @@ export class HubPipeline {
549
465
  let providerPayload;
550
466
  let shadowBaselineProviderPayload;
551
467
  if (activeProcessMode === 'passthrough') {
552
- providerPayload = cloneJsonRecord(rawRequest);
468
+ providerPayload = jsonClone(rawRequest);
553
469
  if (typeof outboundStream === 'boolean') {
554
470
  providerPayload.stream = outboundStream;
555
471
  }
@@ -564,7 +480,6 @@ export class HubPipeline {
564
480
  throw new Error(`[HubPipeline] Unsupported provider protocol for hub pipeline: ${outboundProtocol}`);
565
481
  }
566
482
  const outboundSemanticMapper = protocolSwitch ? outboundHooks.createSemanticMapper() : semanticMapper;
567
- const outboundFormatAdapter = protocolSwitch ? outboundHooks.createFormatAdapter() : formatAdapter;
568
483
  const outboundContextMetadataKey = protocolSwitch ? outboundHooks.contextMetadataKey : hooks.contextMetadataKey;
569
484
  const outboundContextSnapshot = protocolSwitch ? undefined : contextSnapshot;
570
485
  const outboundStage1 = await runReqOutboundStage1SemanticMap({
@@ -577,8 +492,6 @@ export class HubPipeline {
577
492
  });
578
493
  let formattedPayload = await runReqOutboundStage2FormatBuild({
579
494
  formatEnvelope: outboundStage1.formatEnvelope,
580
- adapterContext: outboundAdapterContext,
581
- formatAdapter: outboundFormatAdapter,
582
495
  stageRecorder: outboundRecorder
583
496
  });
584
497
  formattedPayload = await runReqOutboundStage3Compat({
@@ -734,11 +647,10 @@ export class HubPipeline {
734
647
  };
735
648
  }
736
649
  resolveClientProtocol(entryEndpoint) {
737
- const lowered = String(entryEndpoint || '').toLowerCase();
738
- if (lowered.includes('/v1/responses'))
739
- return 'openai-responses';
740
- if (lowered.includes('/v1/messages'))
741
- return 'anthropic-messages';
650
+ const protocol = resolveHubClientProtocolWithNative(entryEndpoint);
651
+ if (protocol === 'openai-responses' || protocol === 'anthropic-messages' || protocol === 'openai-chat') {
652
+ return protocol;
653
+ }
742
654
  return 'openai-chat';
743
655
  }
744
656
  coerceStandardizedRequestFromPayload(payload, normalized) {
@@ -964,6 +876,7 @@ export class HubPipeline {
964
876
  normalized.metadata.conversationId = sessionIdentifiers.conversationId;
965
877
  }
966
878
  const disableStickyRoutes = readRuntimeMetadata(normalized.metadata)?.disableStickyRoutes === true;
879
+ const stopMessageRouterMetadata = resolveStopMessageRouterMetadata(normalized.metadata);
967
880
  const metadataInput = {
968
881
  requestId: normalized.id,
969
882
  entryEndpoint: normalized.entryEndpoint,
@@ -977,7 +890,8 @@ export class HubPipeline {
977
890
  ...(disableStickyRoutes ? { disableStickyRoutes: true } : {}),
978
891
  ...(serverToolRequired ? { serverToolRequired: true } : {}),
979
892
  ...(sessionIdentifiers.sessionId ? { sessionId: sessionIdentifiers.sessionId } : {}),
980
- ...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {})
893
+ ...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {}),
894
+ ...stopMessageRouterMetadata
981
895
  };
982
896
  const routing = runReqProcessStage2RouteSelect({
983
897
  routerEngine: this.routerEngine,
@@ -1026,7 +940,7 @@ export class HubPipeline {
1026
940
  const outboundStart = Date.now();
1027
941
  let providerPayload;
1028
942
  if (activeProcessMode === 'passthrough') {
1029
- providerPayload = cloneJsonRecord(rawPayloadInput);
943
+ providerPayload = jsonClone(rawPayloadInput);
1030
944
  if (typeof outboundStream === 'boolean') {
1031
945
  providerPayload.stream = outboundStream;
1032
946
  }
@@ -1041,7 +955,6 @@ export class HubPipeline {
1041
955
  throw new Error(`[HubPipeline] Unsupported provider protocol for hub pipeline: ${outboundProtocol}`);
1042
956
  }
1043
957
  const outboundSemanticMapper = protocolSwitch ? outboundHooks.createSemanticMapper() : hooks.createSemanticMapper();
1044
- const outboundFormatAdapter = protocolSwitch ? outboundHooks.createFormatAdapter() : hooks.createFormatAdapter();
1045
958
  const outboundContextMetadataKey = protocolSwitch ? outboundHooks.contextMetadataKey : hooks.contextMetadataKey;
1046
959
  const outboundContextSnapshot = undefined;
1047
960
  const outboundStage1 = await runReqOutboundStage1SemanticMap({
@@ -1054,8 +967,6 @@ export class HubPipeline {
1054
967
  });
1055
968
  let formattedPayload = await runReqOutboundStage2FormatBuild({
1056
969
  formatEnvelope: outboundStage1.formatEnvelope,
1057
- adapterContext: outboundAdapterContext,
1058
- formatAdapter: outboundFormatAdapter,
1059
970
  stageRecorder: outboundRecorder
1060
971
  });
1061
972
  formattedPayload = await runReqOutboundStage3Compat({
@@ -1260,7 +1171,7 @@ export class HubPipeline {
1260
1171
  // Never inherit stale top-level metadata.compatibilityProfile from a previous hop.
1261
1172
  const compatibilityProfile = target ? targetCompatProfile : metadataCompatProfile;
1262
1173
  const streamingHint = normalized.stream === true ? 'force' : normalized.stream === false ? 'disable' : 'auto';
1263
- const toolCallIdStyle = normalizeToolCallIdStyleCandidate(metadata.toolCallIdStyle);
1174
+ const toolCallIdStyle = normalizeReqInboundToolCallIdStyleWithNative(metadata.toolCallIdStyle);
1264
1175
  const adapterContext = {
1265
1176
  requestId: normalized.id,
1266
1177
  entryEndpoint: normalized.entryEndpoint || '/v1/chat/completions',
@@ -1338,6 +1249,23 @@ export class HubPipeline {
1338
1249
  if (conversationId) {
1339
1250
  adapterContext.conversationId = conversationId;
1340
1251
  }
1252
+ propagateAdapterContextMetadataFields(adapterContext, metadata, [
1253
+ 'clockDaemonId',
1254
+ 'clockClientDaemonId',
1255
+ 'clock_daemon_id',
1256
+ 'clock_client_daemon_id',
1257
+ 'tmuxSessionId',
1258
+ 'tmux_session_id',
1259
+ 'clientType',
1260
+ 'clockClientType',
1261
+ 'clientInjectReady',
1262
+ 'clientInjectReason',
1263
+ 'client_inject_ready',
1264
+ 'client_inject_reason',
1265
+ 'workdir',
1266
+ 'cwd',
1267
+ 'workingDirectory'
1268
+ ]);
1341
1269
  const clientConnectionState = metadata.clientConnectionState;
1342
1270
  if (clientConnectionState && typeof clientConnectionState === 'object' && !Array.isArray(clientConnectionState)) {
1343
1271
  const stateRecord = clientConnectionState;
@@ -1356,6 +1284,47 @@ export class HubPipeline {
1356
1284
  }
1357
1285
  return adapterContext;
1358
1286
  }
1287
+ applyMaxTokensPolicy(request, target) {
1288
+ if (!target) {
1289
+ return;
1290
+ }
1291
+ const params = request.parameters || (request.parameters = {});
1292
+ const direct = typeof params.max_tokens === 'number' && Number.isFinite(params.max_tokens)
1293
+ ? Math.floor(params.max_tokens)
1294
+ : undefined;
1295
+ const maxOutputRaw = typeof params.max_output_tokens === 'number' &&
1296
+ Number.isFinite(params.max_output_tokens)
1297
+ ? Math.floor(params.max_output_tokens)
1298
+ : undefined;
1299
+ let desired = direct ?? maxOutputRaw;
1300
+ // Default max tokens = 8k when client does not set.
1301
+ if (!desired || desired <= 0) {
1302
+ desired = 8192;
1303
+ }
1304
+ let providerCap = typeof target.maxOutputTokens === 'number' && Number.isFinite(target.maxOutputTokens)
1305
+ ? Math.floor(target.maxOutputTokens)
1306
+ : undefined;
1307
+ if (!providerCap) {
1308
+ const registry = this.routerEngine
1309
+ .providerRegistry;
1310
+ const profile = registry?.get?.(target.providerKey);
1311
+ const candidate = typeof profile?.maxOutputTokens === 'number' && Number.isFinite(profile.maxOutputTokens)
1312
+ ? Math.floor(profile.maxOutputTokens)
1313
+ : undefined;
1314
+ if (candidate && candidate > 0) {
1315
+ providerCap = candidate;
1316
+ }
1317
+ }
1318
+ if (providerCap && providerCap > 0) {
1319
+ desired = Math.min(desired, providerCap);
1320
+ }
1321
+ if (desired && desired > 0) {
1322
+ params.max_tokens = desired;
1323
+ if (params.max_output_tokens !== undefined) {
1324
+ params.max_output_tokens = desired;
1325
+ }
1326
+ }
1327
+ }
1359
1328
  maybeCreateStageRecorder(context, endpoint, options) {
1360
1329
  if (options?.disableSnapshots === true) {
1361
1330
  return undefined;
@@ -1418,12 +1387,45 @@ export class HubPipeline {
1418
1387
  const stream = Boolean(metadataRecord.stream ||
1419
1388
  resolvedReadable ||
1420
1389
  (request.payload && typeof request.payload === 'object' && request.payload.stream));
1421
- const payload = await this.materializePayload(request.payload, {
1390
+ let payload = await this.materializePayload(request.payload, {
1422
1391
  requestId: id,
1423
1392
  entryEndpoint,
1424
1393
  providerProtocol,
1425
1394
  metadata: metadataRecord
1426
1395
  }, resolvedReadable);
1396
+ const routeHint = typeof metadataRecord.routeHint === 'string' ? metadataRecord.routeHint : undefined;
1397
+ const orchestrationResult = runHubPipelineOrchestrationWithNative({
1398
+ requestId: id,
1399
+ endpoint,
1400
+ entryEndpoint,
1401
+ providerProtocol,
1402
+ payload,
1403
+ metadata: {
1404
+ entryEndpoint,
1405
+ providerProtocol,
1406
+ processMode,
1407
+ direction,
1408
+ stage,
1409
+ stream,
1410
+ ...(routeHint ? { routeHint } : {})
1411
+ },
1412
+ stream,
1413
+ processMode,
1414
+ direction,
1415
+ stage
1416
+ });
1417
+ if (!orchestrationResult.success) {
1418
+ const code = orchestrationResult.error && typeof orchestrationResult.error.code === 'string'
1419
+ ? orchestrationResult.error.code.trim()
1420
+ : 'hub_pipeline_native_failed';
1421
+ const message = orchestrationResult.error && typeof orchestrationResult.error.message === 'string'
1422
+ ? orchestrationResult.error.message.trim()
1423
+ : 'Native hub pipeline orchestration failed';
1424
+ throw new Error(`[${code}] ${message}`);
1425
+ }
1426
+ if (orchestrationResult.payload) {
1427
+ payload = orchestrationResult.payload;
1428
+ }
1427
1429
  const normalizedMetadata = {
1428
1430
  ...metadataRecord,
1429
1431
  entryEndpoint,
@@ -1431,9 +1433,9 @@ export class HubPipeline {
1431
1433
  processMode,
1432
1434
  direction,
1433
1435
  stage,
1434
- stream
1436
+ stream,
1437
+ ...(orchestrationResult.metadata ?? {})
1435
1438
  };
1436
- const routeHint = typeof metadataRecord.routeHint === 'string' ? metadataRecord.routeHint : undefined;
1437
1439
  if (routeHint) {
1438
1440
  normalizedMetadata.routeHint = routeHint;
1439
1441
  }
@@ -1538,156 +1540,54 @@ export class HubPipeline {
1538
1540
  return undefined;
1539
1541
  }
1540
1542
  resolveOutboundStreamIntent(providerPreference) {
1541
- if (providerPreference === 'always') {
1542
- return true;
1543
- }
1544
- if (providerPreference === 'never') {
1545
- return false;
1546
- }
1547
- return undefined;
1543
+ return resolveOutboundStreamIntentWithNative(providerPreference);
1548
1544
  }
1549
1545
  applyOutboundStreamPreference(request, stream, processMode) {
1550
1546
  if (!request || typeof request !== 'object') {
1551
1547
  return request;
1552
1548
  }
1553
- if (processMode === 'passthrough' && stream === undefined) {
1554
- return request;
1555
- }
1556
- const ops = [];
1557
- if (typeof stream === 'boolean') {
1558
- ops.push({ op: 'set_request_parameter_fields', fields: { stream } });
1559
- ops.push({ op: 'set_request_metadata_fields', fields: { outboundStream: stream } });
1560
- }
1561
- else {
1562
- ops.push({ op: 'unset_request_parameter_keys', keys: ['stream'] });
1563
- ops.push({ op: 'unset_request_metadata_keys', keys: ['outboundStream'] });
1564
- }
1565
- return applyHubOperations(request, ops);
1566
- }
1567
- }
1568
- function normalizeToolCallIdStyleCandidate(value) {
1569
- if (typeof value !== 'string') {
1570
- return undefined;
1571
- }
1572
- const normalized = value.trim().toLowerCase();
1573
- if (normalized === 'fc') {
1574
- return 'fc';
1549
+ return applyOutboundStreamPreferenceWithNative(request, stream, processMode);
1575
1550
  }
1576
- if (normalized === 'preserve') {
1577
- return 'preserve';
1578
- }
1579
- return undefined;
1580
1551
  }
1581
1552
  function normalizeEndpoint(endpoint) {
1582
- if (!endpoint)
1583
- return '/v1/chat/completions';
1584
- const trimmed = endpoint.trim();
1585
- if (!trimmed)
1586
- return '/v1/chat/completions';
1587
- const normalized = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
1588
- return normalized.replace(/\/{2,}/g, '/');
1553
+ return normalizeHubEndpointWithNative(endpoint);
1589
1554
  }
1590
1555
  function resolveProviderProtocol(value) {
1591
- if (typeof value !== 'string' || !value.trim()) {
1592
- return 'openai-chat';
1556
+ try {
1557
+ const normalized = resolveHubProviderProtocolWithNative(value);
1558
+ if (normalized === 'openai-chat' ||
1559
+ normalized === 'openai-responses' ||
1560
+ normalized === 'anthropic-messages' ||
1561
+ normalized === 'gemini-chat') {
1562
+ return normalized;
1563
+ }
1593
1564
  }
1594
- const normalized = value.trim().toLowerCase();
1595
- const mapped = PROVIDER_PROTOCOL_ALIASES[normalized];
1596
- if (mapped) {
1597
- return mapped;
1565
+ catch {
1566
+ // Keep legacy caller-facing error shape below.
1598
1567
  }
1599
1568
  throw new Error(`[HubPipeline] Unsupported providerProtocol "${value}". Configure a valid protocol (openai-chat|openai-responses|anthropic-messages|gemini-chat).`);
1600
1569
  }
1601
- const PROVIDER_PROTOCOL_ALIASES = {
1602
- 'openai-chat': 'openai-chat',
1603
- openai: 'openai-chat',
1604
- chat: 'openai-chat',
1605
- 'responses': 'openai-responses',
1606
- 'openai-responses': 'openai-responses',
1607
- 'anthropic': 'anthropic-messages',
1608
- 'anthropic-messages': 'anthropic-messages',
1609
- 'messages': 'anthropic-messages',
1610
- 'gemini': 'gemini-chat',
1611
- 'google-gemini': 'gemini-chat',
1612
- 'gemini-chat': 'gemini-chat'
1613
- };
1614
- function resolveEndpointForProviderProtocol(protocol) {
1615
- if (!protocol) {
1616
- return undefined;
1617
- }
1618
- const value = protocol.toLowerCase();
1619
- if (value === 'openai-responses')
1620
- return '/v1/responses';
1621
- if (value === 'openai-chat')
1622
- return '/v1/chat/completions';
1623
- if (value === 'anthropic-messages' || value === 'anthropic')
1624
- return '/v1/messages';
1625
- if (value === 'gemini-chat' || value === 'gemini' || value === 'google-gemini')
1626
- return '/v1/responses';
1627
- return undefined;
1628
- }
1629
1570
  function resolveSseProtocolFromMetadata(metadata) {
1630
- const candidate = metadata.sseProtocol ?? metadata.clientSseProtocol ?? metadata.routeSseProtocol;
1631
- if (typeof candidate !== 'string' || !candidate.trim()) {
1571
+ const resolved = resolveHubSseProtocolFromMetadataWithNative(metadata);
1572
+ if (!resolved) {
1632
1573
  return undefined;
1633
1574
  }
1634
- return resolveProviderProtocol(candidate);
1575
+ return resolveProviderProtocol(resolved);
1635
1576
  }
1636
1577
  function coerceAliasMap(candidate) {
1637
- if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) {
1638
- return undefined;
1639
- }
1640
- const normalized = {};
1641
- for (const [key, value] of Object.entries(candidate)) {
1642
- if (typeof key !== 'string' || typeof value !== 'string') {
1643
- continue;
1644
- }
1645
- const trimmedKey = key.trim();
1646
- const trimmedValue = value.trim();
1647
- if (!trimmedKey.length || !trimmedValue.length) {
1648
- continue;
1649
- }
1650
- normalized[trimmedKey] = trimmedValue;
1651
- }
1652
- return Object.keys(normalized).length ? normalized : undefined;
1578
+ return normalizeAliasMapWithNative(candidate);
1653
1579
  }
1654
1580
  function readAliasMapFromSemantics(chatEnvelope) {
1655
- if (!chatEnvelope?.semantics || typeof chatEnvelope.semantics !== 'object') {
1656
- return undefined;
1657
- }
1658
- const node = chatEnvelope.semantics.tools;
1659
- if (!node || !isJsonObject(node)) {
1581
+ if (!chatEnvelope?.semantics || typeof chatEnvelope.semantics !== 'object' || Array.isArray(chatEnvelope.semantics)) {
1660
1582
  return undefined;
1661
1583
  }
1662
- const candidate = node.toolNameAliasMap ??
1663
- node.toolAliasMap;
1664
- return coerceAliasMap(candidate);
1584
+ return resolveAliasMapFromRespSemanticsWithNative(chatEnvelope.semantics);
1665
1585
  }
1666
1586
  function assertNoMappableSemanticsInMetadata(metadata, scope) {
1667
1587
  if (!metadata || typeof metadata !== 'object') {
1668
1588
  return;
1669
1589
  }
1670
- const banned = [
1671
- 'responsesResume',
1672
- 'responses_resume',
1673
- 'clientToolsRaw',
1674
- 'client_tools_raw',
1675
- 'anthropicToolNameMap',
1676
- 'anthropic_tool_name_map',
1677
- // Responses semantics must be stored in chat.semantics.responses.context, not metadata.
1678
- 'responsesContext',
1679
- 'responses_context',
1680
- 'responseFormat',
1681
- 'response_format',
1682
- // OpenAI Chat legacy semantics must be stored in chat.semantics (system/tools/providerExtras), not metadata.
1683
- 'systemInstructions',
1684
- 'system_instructions',
1685
- 'toolsFieldPresent',
1686
- 'tools_field_present',
1687
- 'extraFields',
1688
- 'extra_fields'
1689
- ];
1690
- const present = banned.filter((k) => Object.prototype.hasOwnProperty.call(metadata, k));
1590
+ const present = findMappableSemanticsKeysWithNative(metadata);
1691
1591
  if (present.length) {
1692
1592
  throw new Error(`[HubPipeline][semantic_gate] Mappable semantics must not be stored in metadata (${scope}): ${present.join(', ')}`);
1693
1593
  }