@jsonstudio/llms 0.6.2172 → 0.6.2979

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 (362) hide show
  1. package/README.md +2 -0
  2. package/dist/conversion/compat/antigravity-session-signature.js +35 -1
  3. package/dist/conversion/compat/profiles/chat-gemini-cli.json +0 -7
  4. package/dist/conversion/compat/profiles/chat-gemini.json +0 -6
  5. package/dist/conversion/hub/core/detour-registry.d.ts +2 -0
  6. package/dist/conversion/hub/core/hub-context.d.ts +3 -1
  7. package/dist/conversion/hub/core/index.d.ts +1 -0
  8. package/dist/conversion/hub/core/stage-driver.js +2 -0
  9. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +15 -4
  10. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +15 -4
  11. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +15 -4
  12. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +15 -4
  13. package/dist/conversion/hub/hub-feature.js +3 -2
  14. package/dist/conversion/hub/node-support.js +9 -4
  15. package/dist/conversion/hub/operation-table/operation-table-runner.js +10 -6
  16. package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +2 -2
  17. package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +10 -10
  18. package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +4 -8
  19. package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +19 -65
  20. package/dist/conversion/hub/ops/operations.js +2 -121
  21. package/dist/conversion/hub/pipeline/compat/compat-engine.js +6 -0
  22. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +1 -1
  23. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +33 -1042
  24. package/dist/conversion/hub/pipeline/compat/compat-profile-resolver.js +2 -0
  25. package/dist/conversion/hub/pipeline/compat/compat-profile-store.js +2 -0
  26. package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +14 -17
  27. package/dist/conversion/hub/pipeline/compat/native-adapter-context.d.ts +3 -0
  28. package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +39 -0
  29. package/dist/conversion/hub/pipeline/hub-pipeline.js +115 -262
  30. package/dist/conversion/hub/pipeline/session-identifiers.js +6 -196
  31. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.d.ts +1 -2
  32. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +37 -1
  33. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +12 -86
  34. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.d.ts +14 -0
  35. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.js +24 -0
  36. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.d.ts +2 -0
  37. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.js +157 -0
  38. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.d.ts +16 -0
  39. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.js +29 -0
  40. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js +3 -1
  41. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.d.ts +2 -15
  42. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +8 -595
  43. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.d.ts +8 -0
  44. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.js +28 -0
  45. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.d.ts +2 -0
  46. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.js +4 -0
  47. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.d.ts +10 -0
  48. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.js +12 -0
  49. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.d.ts +3 -0
  50. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.js +30 -0
  51. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +9 -129
  52. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -4
  53. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +9 -26
  54. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +32 -14
  55. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.d.ts +2 -2
  56. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +48 -8
  57. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +18 -3
  58. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +10 -198
  59. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.d.ts +3 -0
  60. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.js +81 -0
  61. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.d.ts +1 -2
  62. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +36 -1
  63. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +3 -1
  64. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.d.ts +6 -0
  65. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.js +17 -0
  66. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.d.ts +9 -0
  67. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +28 -0
  68. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -2
  69. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +14 -102
  70. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +3 -1
  71. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +12 -10
  72. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +6 -5
  73. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.d.ts +11 -1
  74. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.js +10 -32
  75. package/dist/conversion/hub/pipeline/stages/utils.js +17 -1
  76. package/dist/conversion/hub/pipeline/target-utils.js +14 -91
  77. package/dist/conversion/hub/pipelines/inbound.js +3 -1
  78. package/dist/conversion/hub/pipelines/outbound.js +2 -0
  79. package/dist/conversion/hub/policy/policy-engine.js +9 -3
  80. package/dist/conversion/hub/policy/protocol-spec.js +20 -148
  81. package/dist/conversion/hub/process/chat-process-anthropic-alias.d.ts +2 -0
  82. package/dist/conversion/hub/process/chat-process-anthropic-alias.js +36 -0
  83. package/dist/conversion/hub/process/chat-process-clock-directive-parser.d.ts +5 -0
  84. package/dist/conversion/hub/process/chat-process-clock-directive-parser.js +48 -0
  85. package/dist/conversion/hub/process/chat-process-clock-directives.d.ts +24 -0
  86. package/dist/conversion/hub/process/chat-process-clock-directives.js +98 -0
  87. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.d.ts +8 -0
  88. package/dist/conversion/hub/process/chat-process-clock-reminder-directives.js +42 -0
  89. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.d.ts +14 -0
  90. package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.js +10 -0
  91. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.d.ts +5 -0
  92. package/dist/conversion/hub/process/chat-process-clock-reminder-messages.js +10 -0
  93. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.d.ts +30 -0
  94. package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.js +68 -0
  95. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.d.ts +9 -0
  96. package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.js +18 -0
  97. package/dist/conversion/hub/process/chat-process-clock-reminders.d.ts +2 -0
  98. package/dist/conversion/hub/process/chat-process-clock-reminders.js +104 -0
  99. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.d.ts +3 -0
  100. package/dist/conversion/hub/process/chat-process-clock-tool-schemas.js +233 -0
  101. package/dist/conversion/hub/process/chat-process-clock-tools.d.ts +6 -0
  102. package/dist/conversion/hub/process/chat-process-clock-tools.js +41 -0
  103. package/dist/conversion/hub/process/chat-process-continue-execution.d.ts +11 -0
  104. package/dist/conversion/hub/process/chat-process-continue-execution.js +82 -0
  105. package/dist/conversion/hub/process/chat-process-governance-context.d.ts +15 -0
  106. package/dist/conversion/hub/process/chat-process-governance-context.js +7 -0
  107. package/dist/conversion/hub/process/chat-process-governance-finalize.d.ts +16 -0
  108. package/dist/conversion/hub/process/chat-process-governance-finalize.js +11 -0
  109. package/dist/conversion/hub/process/chat-process-governance-orchestration.d.ts +9 -0
  110. package/dist/conversion/hub/process/chat-process-governance-orchestration.js +47 -0
  111. package/dist/conversion/hub/process/chat-process-governed-control-ops.d.ts +8 -0
  112. package/dist/conversion/hub/process/chat-process-governed-control-ops.js +5 -0
  113. package/dist/conversion/hub/process/chat-process-governed-filter-call.d.ts +12 -0
  114. package/dist/conversion/hub/process/chat-process-governed-filter-call.js +18 -0
  115. package/dist/conversion/hub/process/chat-process-governed-merge.d.ts +8 -0
  116. package/dist/conversion/hub/process/chat-process-governed-merge.js +11 -0
  117. package/dist/conversion/hub/process/chat-process-media.d.ts +3 -0
  118. package/dist/conversion/hub/process/chat-process-media.js +18 -0
  119. package/dist/conversion/hub/process/chat-process-node-result.d.ts +23 -0
  120. package/dist/conversion/hub/process/chat-process-node-result.js +24 -0
  121. package/dist/conversion/hub/process/chat-process-pending-tool-sync.d.ts +14 -0
  122. package/dist/conversion/hub/process/chat-process-pending-tool-sync.js +52 -0
  123. package/dist/conversion/hub/process/chat-process-post-governed-normalization.d.ts +8 -0
  124. package/dist/conversion/hub/process/chat-process-post-governed-normalization.js +16 -0
  125. package/dist/conversion/hub/process/chat-process-review.d.ts +2 -0
  126. package/dist/conversion/hub/process/chat-process-review.js +8 -0
  127. package/dist/conversion/hub/process/chat-process-servertool-orchestration.d.ts +8 -0
  128. package/dist/conversion/hub/process/chat-process-servertool-orchestration.js +22 -0
  129. package/dist/conversion/hub/process/chat-process-tool-normalization.d.ts +2 -0
  130. package/dist/conversion/hub/process/chat-process-tool-normalization.js +4 -0
  131. package/dist/conversion/hub/process/chat-process-web-search-intent.d.ts +12 -0
  132. package/dist/conversion/hub/process/chat-process-web-search-intent.js +13 -0
  133. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.d.ts +3 -0
  134. package/dist/conversion/hub/process/chat-process-web-search-tool-schema.js +4 -0
  135. package/dist/conversion/hub/process/chat-process-web-search.d.ts +8 -0
  136. package/dist/conversion/hub/process/chat-process-web-search.js +26 -0
  137. package/dist/conversion/hub/process/chat-process.d.ts +2 -19
  138. package/dist/conversion/hub/process/chat-process.js +12 -1701
  139. package/dist/conversion/hub/process/client-inject-readiness.d.ts +1 -0
  140. package/dist/conversion/hub/process/client-inject-readiness.js +4 -0
  141. package/dist/conversion/hub/registry.js +5 -2
  142. package/dist/conversion/hub/response/chat-response-utils.js +5 -86
  143. package/dist/conversion/hub/response/provider-response.d.ts +9 -0
  144. package/dist/conversion/hub/response/provider-response.js +6 -21
  145. package/dist/conversion/hub/response/response-mappers.js +2 -26
  146. package/dist/conversion/hub/response/response-runtime.js +2 -93
  147. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +1 -0
  148. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +1 -0
  149. package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +1 -0
  150. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +1 -0
  151. package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +1 -0
  152. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +1 -0
  153. package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +1 -0
  154. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +1 -0
  155. package/dist/conversion/hub/snapshot-recorder.js +10 -3
  156. package/dist/conversion/hub/standardized-bridge.js +11 -288
  157. package/dist/conversion/hub/tool-governance/engine.js +5 -0
  158. package/dist/conversion/hub/tool-governance/rules.js +10 -10
  159. package/dist/conversion/hub/tool-session-compat.d.ts +2 -2
  160. package/dist/conversion/hub/tool-session-compat.js +17 -231
  161. package/dist/conversion/hub/tool-surface/tool-surface-engine.js +5 -3
  162. package/dist/conversion/responses/responses-host-policy.js +2 -12
  163. package/dist/conversion/responses/responses-openai-bridge/response-payload.js +6 -82
  164. package/dist/conversion/responses/responses-openai-bridge/types.d.ts +1 -0
  165. package/dist/conversion/responses/responses-openai-bridge.js +21 -54
  166. package/dist/conversion/shared/anthropic-message-utils.js +151 -13
  167. package/dist/conversion/shared/args-mapping.js +2 -146
  168. package/dist/conversion/shared/bridge-actions.js +203 -718
  169. package/dist/conversion/shared/bridge-id-utils.js +5 -71
  170. package/dist/conversion/shared/bridge-instructions.js +2 -1
  171. package/dist/conversion/shared/bridge-message-types.d.ts +2 -0
  172. package/dist/conversion/shared/bridge-message-utils.js +1 -2
  173. package/dist/conversion/shared/bridge-metadata.d.ts +1 -0
  174. package/dist/conversion/shared/bridge-metadata.js +4 -0
  175. package/dist/conversion/shared/bridge-policies.js +5 -189
  176. package/dist/conversion/shared/chat-envelope-validator.js +2 -126
  177. package/dist/conversion/shared/chat-output-normalizer.js +2 -54
  178. package/dist/conversion/shared/compaction-detect.js +2 -57
  179. package/dist/conversion/shared/gemini-tool-utils.js +9 -524
  180. package/dist/conversion/shared/jsonish.js +3 -160
  181. package/dist/conversion/shared/mcp-injection.js +3 -169
  182. package/dist/conversion/shared/media.js +2 -7
  183. package/dist/conversion/shared/metadata-passthrough.js +9 -46
  184. package/dist/conversion/shared/openai-finalizer.js +2 -1
  185. package/dist/conversion/shared/openai-message-normalize.js +11 -283
  186. package/dist/conversion/shared/output-content-normalizer.js +9 -112
  187. package/dist/conversion/shared/payload-budget.js +2 -85
  188. package/dist/conversion/shared/protocol-state.js +11 -7
  189. package/dist/conversion/shared/reasoning-mapping.js +2 -6
  190. package/dist/conversion/shared/reasoning-normalizer.js +4 -1
  191. package/dist/conversion/shared/reasoning-tool-normalizer.js +14 -126
  192. package/dist/conversion/shared/reasoning-tool-parser.js +4 -87
  193. package/dist/conversion/shared/reasoning-utils.js +2 -6
  194. package/dist/conversion/shared/responses-conversation-store.js +4 -82
  195. package/dist/conversion/shared/responses-output-builder.js +11 -47
  196. package/dist/conversion/shared/responses-reasoning-registry.js +7 -1
  197. package/dist/conversion/shared/responses-request-adapter.d.ts +7 -1
  198. package/dist/conversion/shared/responses-request-adapter.js +14 -1
  199. package/dist/conversion/shared/responses-response-utils.js +6 -7
  200. package/dist/conversion/shared/responses-tool-utils.d.ts +1 -0
  201. package/dist/conversion/shared/responses-tool-utils.js +90 -14
  202. package/dist/conversion/shared/runtime-metadata.js +13 -5
  203. package/dist/conversion/shared/streaming-text-extractor.js +2 -7
  204. package/dist/conversion/shared/text-markup-normalizer/normalize.d.ts +1 -1
  205. package/dist/conversion/shared/text-markup-normalizer/normalize.js +43 -17
  206. package/dist/conversion/shared/text-markup-normalizer.d.ts +1 -0
  207. package/dist/conversion/shared/text-markup-normalizer.js +1 -0
  208. package/dist/conversion/shared/thought-signature-validator.js +3 -2
  209. package/dist/conversion/shared/tool-argument-repairer.js +2 -2
  210. package/dist/conversion/shared/tool-call-id-manager.js +5 -7
  211. package/dist/conversion/shared/tool-call-utils.js +3 -45
  212. package/dist/conversion/shared/tool-canonicalizer.js +25 -29
  213. package/dist/conversion/shared/tool-filter-pipeline.js +4 -99
  214. package/dist/conversion/shared/tool-governor.d.ts +6 -0
  215. package/dist/conversion/shared/tool-governor.js +43 -125
  216. package/dist/conversion/shared/tool-harvester.js +2 -8
  217. package/dist/conversion/shared/tool-mapping.js +2 -5
  218. package/dist/conversion/shared/tooling.d.ts +0 -4
  219. package/dist/conversion/shared/tooling.js +18 -0
  220. package/dist/native/router_hotpath_napi.node +0 -0
  221. package/dist/router/virtual-router/engine/provider-key/parse.d.ts +1 -6
  222. package/dist/router/virtual-router/engine/provider-key/parse.js +1 -43
  223. package/dist/router/virtual-router/engine/routing-state/store.js +48 -12
  224. package/dist/router/virtual-router/engine-logging.js +4 -3
  225. package/dist/router/virtual-router/engine-selection/alias-selection.js +45 -83
  226. package/dist/router/virtual-router/engine-selection/key-parsing.js +9 -23
  227. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.d.ts +20 -0
  228. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js +163 -0
  229. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.d.ts +7 -0
  230. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.js +103 -0
  231. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.d.ts +10 -0
  232. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.js +110 -0
  233. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.d.ts +8 -0
  234. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js +281 -0
  235. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.d.ts +1 -0
  236. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.js +25 -0
  237. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.d.ts +4 -0
  238. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.js +44 -0
  239. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.d.ts +2 -0
  240. package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.js +62 -0
  241. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.d.ts +40 -0
  242. package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.js +484 -0
  243. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.d.ts +9 -0
  244. package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.js +64 -0
  245. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.d.ts +5 -0
  246. package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.js +163 -0
  247. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.d.ts +1 -0
  248. package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.js +49 -0
  249. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.d.ts +30 -0
  250. package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js +446 -0
  251. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.d.ts +1 -0
  252. package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.js +49 -0
  253. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +134 -0
  254. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +729 -0
  255. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.d.ts +62 -0
  256. package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js +338 -0
  257. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.d.ts +18 -0
  258. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js +317 -0
  259. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.d.ts +22 -0
  260. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.js +426 -0
  261. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.d.ts +57 -0
  262. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js +705 -0
  263. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.d.ts +46 -0
  264. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js +503 -0
  265. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +146 -0
  266. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js +570 -0
  267. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.d.ts +25 -0
  268. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.js +148 -0
  269. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +25 -0
  270. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +637 -0
  271. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.d.ts +11 -0
  272. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js +207 -0
  273. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.d.ts +3 -0
  274. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js +128 -0
  275. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.d.ts +57 -0
  276. package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.js +217 -0
  277. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.d.ts +5 -0
  278. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +284 -0
  279. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.d.ts +5 -0
  280. package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.js +18 -0
  281. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.d.ts +25 -0
  282. package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.js +85 -0
  283. package/dist/router/virtual-router/engine-selection/native-router-hotpath.d.ts +59 -0
  284. package/dist/router/virtual-router/engine-selection/native-router-hotpath.js +117 -0
  285. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +76 -0
  286. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +1166 -0
  287. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.d.ts +16 -0
  288. package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.js +96 -0
  289. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.d.ts +6 -0
  290. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.js +85 -0
  291. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.d.ts +9 -0
  292. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.js +70 -0
  293. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.d.ts +2 -0
  294. package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.js +76 -0
  295. package/dist/router/virtual-router/engine-selection/route-utils.js +1 -1
  296. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.d.ts +10 -0
  297. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.js +231 -0
  298. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.d.ts +4 -0
  299. package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.js +43 -0
  300. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.d.ts +27 -0
  301. package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.js +116 -0
  302. package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +1 -1
  303. package/dist/router/virtual-router/engine-selection/tier-selection-select.js +29 -129
  304. package/dist/router/virtual-router/engine-selection/tier-selection.js +2 -265
  305. package/dist/router/virtual-router/engine.js +258 -249
  306. package/dist/router/virtual-router/features.js +2 -2
  307. package/dist/router/virtual-router/routing-instructions.d.ts +5 -7
  308. package/dist/router/virtual-router/routing-instructions.js +93 -66
  309. package/dist/router/virtual-router/routing-stop-message-actions.js +91 -112
  310. package/dist/router/virtual-router/routing-stop-message-parser.js +9 -132
  311. package/dist/router/virtual-router/routing-stop-message-state-codec.d.ts +1 -0
  312. package/dist/router/virtual-router/routing-stop-message-state-codec.js +58 -71
  313. package/dist/router/virtual-router/sticky-session-store.js +4 -2
  314. package/dist/router/virtual-router/stop-message-file-resolver.d.ts +1 -0
  315. package/dist/router/virtual-router/stop-message-file-resolver.js +10 -0
  316. package/dist/router/virtual-router/stop-message-state-sync.d.ts +1 -1
  317. package/dist/router/virtual-router/stop-message-state-sync.js +3 -7
  318. package/dist/router/virtual-router/token-counter.js +0 -9
  319. package/dist/router/virtual-router/types.d.ts +9 -7
  320. package/dist/servertool/clock/config.js +23 -51
  321. package/dist/servertool/clock/io.js +1 -0
  322. package/dist/servertool/clock/session-scope.d.ts +2 -2
  323. package/dist/servertool/clock/session-scope.js +5 -47
  324. package/dist/servertool/engine.d.ts +9 -0
  325. package/dist/servertool/engine.js +196 -79
  326. package/dist/servertool/handlers/antigravity-thought-signature-bootstrap.js +2 -2
  327. package/dist/servertool/handlers/clock.js +1 -1
  328. package/dist/servertool/handlers/continue-execution.js +8 -4
  329. package/dist/servertool/handlers/followup-request-builder.js +18 -1
  330. package/dist/servertool/handlers/gemini-empty-reply-continue.js +7 -1
  331. package/dist/servertool/handlers/review.js +180 -0
  332. package/dist/servertool/handlers/stop-message-auto/blocked-report.js +59 -1
  333. package/dist/servertool/handlers/stop-message-auto/iflow-followup.d.ts +23 -2
  334. package/dist/servertool/handlers/stop-message-auto/iflow-followup.js +397 -89
  335. package/dist/servertool/handlers/stop-message-auto/routing-state.d.ts +5 -15
  336. package/dist/servertool/handlers/stop-message-auto/routing-state.js +29 -55
  337. package/dist/servertool/handlers/stop-message-auto/runtime-utils.d.ts +6 -0
  338. package/dist/servertool/handlers/stop-message-auto/runtime-utils.js +35 -61
  339. package/dist/servertool/handlers/stop-message-auto.js +392 -76
  340. package/dist/servertool/server-side-tools.d.ts +1 -0
  341. package/dist/servertool/server-side-tools.js +90 -52
  342. package/dist/servertool/types.d.ts +17 -0
  343. package/dist/tools/apply-patch/patch-text/normalize.js +11 -0
  344. package/dist/tools/exec-command/validator.d.ts +4 -1
  345. package/dist/tools/exec-command/validator.js +87 -3
  346. package/dist/tools/tool-registry.d.ts +7 -1
  347. package/dist/tools/tool-registry.js +3 -2
  348. package/package.json +115 -7
  349. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.d.ts +0 -18
  350. package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.js +0 -398
  351. package/dist/servertool/handlers/stop-message-stage-policy/decision.d.ts +0 -9
  352. package/dist/servertool/handlers/stop-message-stage-policy/decision.js +0 -127
  353. package/dist/servertool/handlers/stop-message-stage-policy/observation.d.ts +0 -2
  354. package/dist/servertool/handlers/stop-message-stage-policy/observation.js +0 -179
  355. package/dist/servertool/handlers/stop-message-stage-policy/templates.d.ts +0 -4
  356. package/dist/servertool/handlers/stop-message-stage-policy/templates.js +0 -96
  357. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.d.ts +0 -9
  358. package/dist/servertool/handlers/stop-message-stage-policy/text-utils.js +0 -89
  359. package/dist/servertool/handlers/stop-message-stage-policy/types.d.ts +0 -59
  360. package/dist/servertool/handlers/stop-message-stage-policy.d.ts +0 -3
  361. package/dist/servertool/handlers/stop-message-stage-policy.js +0 -2
  362. /package/dist/servertool/handlers/{stop-message-stage-policy/types.js → review.d.ts} +0 -0
@@ -1,11 +1,8 @@
1
1
  import { runChatResponseToolFilters } from '../../../../../shared/tool-filter-pipeline.js';
2
- import { normalizeApplyPatchToolCallsOnResponse } from '../../../../../shared/tool-governor.js';
3
2
  import { buildChatResponseFromResponses } from '../../../../../shared/responses-response-utils.js';
4
3
  import { normalizeAssistantTextToToolCalls } from '../../../../../shared/text-markup-normalizer.js';
5
- import { stripOrphanFunctionCallsTag } from '../../../../../compat/actions/strip-orphan-function-calls-tag.js';
6
- import { ToolGovernanceEngine } from '../../../../tool-governance/index.js';
7
4
  import { recordStage } from '../../../stages/utils.js';
8
- const toolGovernanceEngine = new ToolGovernanceEngine();
5
+ import { applyRespProcessToolGovernanceWithNative, stripOrphanFunctionCallsTagWithNative } from '../../../../../../router/virtual-router/engine-selection/native-chat-process-governance-semantics.js';
9
6
  const TOOL_CALL_JSON_MARKER = /["']tool_calls["']\s*:/i;
10
7
  const SHELL_TOOL_NAME_ALIASES = {
11
8
  shell_command: 'exec_command',
@@ -94,7 +91,7 @@ function maybeHarvestEmptyToolCallsFromJsonContent(payload) {
94
91
  return payload;
95
92
  }
96
93
  function sanitizeResponseShapeBeforeGovernance(payload) {
97
- return stripOrphanFunctionCallsTag(payload);
94
+ return stripOrphanFunctionCallsTagWithNative(payload);
98
95
  }
99
96
  export async function runRespProcessStage1ToolGovernance(options) {
100
97
  const canonicalInput = coerceToCanonicalChatCompletion(options.payload);
@@ -110,12 +107,17 @@ export async function runRespProcessStage1ToolGovernance(options) {
110
107
  requestId: options.requestId,
111
108
  profile: 'openai-chat'
112
109
  });
113
- const patched = normalizeApplyPatchToolCallsOnResponse(filtered);
114
- const { payload: governed, summary } = toolGovernanceEngine.governResponse(patched, options.clientProtocol);
110
+ const patchedNative = applyRespProcessToolGovernanceWithNative({
111
+ payload: filtered,
112
+ clientProtocol: options.clientProtocol,
113
+ entryEndpoint: options.entryEndpoint,
114
+ requestId: options.requestId
115
+ });
116
+ const governed = patchedNative.governedPayload;
115
117
  recordStage(options.stageRecorder, 'chat_process.resp.stage7.tool_governance', {
116
- summary,
117
- applied: summary?.applied,
118
- filteredPayload: patched,
118
+ summary: patchedNative.summary,
119
+ applied: patchedNative.summary?.applied === true,
120
+ filteredPayload: filtered,
119
121
  governedPayload: governed
120
122
  });
121
123
  return { governedPayload: governed };
@@ -1,12 +1,13 @@
1
- import { finalizeOpenAIChatResponse } from '../../../../../shared/openai-finalizer.js';
2
1
  import { buildProcessedRequestFromChatResponse } from '../../../../response/chat-response-utils.js';
3
2
  import { recordStage } from '../../../stages/utils.js';
3
+ import { finalizeRespProcessChatResponseWithNative } from '../../../../../../router/virtual-router/engine-selection/native-chat-process-governance-semantics.js';
4
4
  export async function runRespProcessStage2Finalize(options) {
5
- const finalized = (await finalizeOpenAIChatResponse(options.payload, {
6
- requestId: options.requestId,
7
- endpoint: options.entryEndpoint,
5
+ const finalized = (await finalizeRespProcessChatResponseWithNative({
6
+ payload: options.payload,
8
7
  stream: options.wantsStream,
9
- reasoningMode: options.reasoningMode
8
+ reasoningMode: options.reasoningMode,
9
+ endpoint: options.entryEndpoint,
10
+ requestId: options.requestId
10
11
  }));
11
12
  const processedRequest = buildProcessedRequestFromChatResponse(finalized, {
12
13
  stream: options.wantsStream
@@ -14,6 +14,15 @@ type ReenterPipeline = (options: {
14
14
  __sse_responses?: NodeJS.ReadableStream;
15
15
  format?: string;
16
16
  }>;
17
+ type ClientInjectDispatch = (options: {
18
+ entryEndpoint: string;
19
+ requestId: string;
20
+ body?: JsonObject;
21
+ metadata?: JsonObject;
22
+ }) => Promise<{
23
+ ok: boolean;
24
+ reason?: string;
25
+ }>;
17
26
  export interface RespProcessStage3ServerToolOrchestrationOptions {
18
27
  payload: ChatCompletionLike;
19
28
  adapterContext: AdapterContext;
@@ -23,12 +32,13 @@ export interface RespProcessStage3ServerToolOrchestrationOptions {
23
32
  stageRecorder?: StageRecorder;
24
33
  providerInvoker?: ProviderInvoker;
25
34
  reenterPipeline?: ReenterPipeline;
35
+ clientInjectDispatch?: ClientInjectDispatch;
26
36
  }
27
37
  export interface RespProcessStage3ServerToolOrchestrationResult {
28
38
  payload: ChatCompletionLike;
29
39
  executed: boolean;
30
40
  flowId?: string;
31
- skipReason?: 'no_servertool_support' | 'missing_reenter_pipeline';
41
+ skipReason?: 'no_servertool_support';
32
42
  }
33
43
  export declare function runRespProcessStage3ServerToolOrchestration(options: RespProcessStage3ServerToolOrchestrationOptions): Promise<RespProcessStage3ServerToolOrchestrationResult>;
34
44
  export {};
@@ -1,26 +1,14 @@
1
1
  import { runServerToolOrchestration } from '../../../../../../servertool/engine.js';
2
+ import { detectProviderResponseShapeWithNative } from '../../../../../../router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js';
2
3
  import { recordStage } from '../../../stages/utils.js';
3
- function detectProviderResponseShape(payload) {
4
- if (!payload || typeof payload !== 'object' || Array.isArray(payload))
5
- return 'unknown';
6
- const p = payload;
7
- if (Array.isArray(p.choices))
8
- return 'openai-chat';
9
- if ((typeof p.object === 'string' && p.object === 'response') || Array.isArray(p.output))
10
- return 'openai-responses';
11
- if (Array.isArray(p.content) || typeof p.stop_reason === 'string')
12
- return 'anthropic-messages';
13
- if (Array.isArray(p.candidates))
14
- return 'gemini-chat';
15
- return 'unknown';
16
- }
17
4
  export async function runRespProcessStage3ServerToolOrchestration(options) {
18
- const hasServerToolSupport = Boolean(options.providerInvoker) || Boolean(options.reenterPipeline);
5
+ const hasServerToolSupport = Boolean(options.providerInvoker) || Boolean(options.reenterPipeline) || Boolean(options.clientInjectDispatch);
6
+ const inputShape = detectProviderResponseShapeWithNative(options.payload);
19
7
  if (!hasServerToolSupport) {
20
8
  recordStage(options.stageRecorder, 'chat_process.resp.stage5.servertool_orchestration', {
21
9
  executed: false,
22
10
  skipReason: 'no_servertool_support',
23
- inputShape: detectProviderResponseShape(options.payload)
11
+ inputShape
24
12
  });
25
13
  return {
26
14
  payload: options.payload,
@@ -28,18 +16,6 @@ export async function runRespProcessStage3ServerToolOrchestration(options) {
28
16
  skipReason: 'no_servertool_support'
29
17
  };
30
18
  }
31
- if (!options.reenterPipeline) {
32
- recordStage(options.stageRecorder, 'chat_process.resp.stage5.servertool_orchestration', {
33
- executed: false,
34
- skipReason: 'missing_reenter_pipeline',
35
- inputShape: detectProviderResponseShape(options.payload)
36
- });
37
- return {
38
- payload: options.payload,
39
- executed: false,
40
- skipReason: 'missing_reenter_pipeline'
41
- };
42
- }
43
19
  const orchestration = await runServerToolOrchestration({
44
20
  chat: options.payload,
45
21
  adapterContext: options.adapterContext,
@@ -48,15 +24,17 @@ export async function runRespProcessStage3ServerToolOrchestration(options) {
48
24
  providerProtocol: options.providerProtocol,
49
25
  stageRecorder: options.stageRecorder,
50
26
  providerInvoker: options.providerInvoker,
51
- reenterPipeline: options.reenterPipeline
27
+ reenterPipeline: options.reenterPipeline,
28
+ clientInjectDispatch: options.clientInjectDispatch
52
29
  });
53
30
  if (orchestration.executed) {
54
31
  const outputPayload = orchestration.chat;
32
+ const outputShape = detectProviderResponseShapeWithNative(outputPayload);
55
33
  recordStage(options.stageRecorder, 'chat_process.resp.stage5.servertool_orchestration', {
56
34
  executed: true,
57
35
  flowId: orchestration.flowId,
58
- inputShape: detectProviderResponseShape(options.payload),
59
- outputShape: detectProviderResponseShape(outputPayload)
36
+ inputShape,
37
+ outputShape
60
38
  });
61
39
  return {
62
40
  payload: outputPayload,
@@ -66,7 +44,7 @@ export async function runRespProcessStage3ServerToolOrchestration(options) {
66
44
  }
67
45
  recordStage(options.stageRecorder, 'chat_process.resp.stage5.servertool_orchestration', {
68
46
  executed: false,
69
- inputShape: detectProviderResponseShape(options.payload)
47
+ inputShape
70
48
  });
71
49
  return {
72
50
  payload: options.payload,
@@ -1,9 +1,25 @@
1
+ import { parseLenientJsonishWithNative } from '../../../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
2
+ function normalizeRecordPayload(payload) {
3
+ if (payload && typeof payload === 'object' && !Array.isArray(payload)) {
4
+ return payload;
5
+ }
6
+ try {
7
+ const nativeParsed = parseLenientJsonishWithNative(payload);
8
+ if (nativeParsed && typeof nativeParsed === 'object' && !Array.isArray(nativeParsed)) {
9
+ return nativeParsed;
10
+ }
11
+ }
12
+ catch {
13
+ // native normalization is best-effort
14
+ }
15
+ return {};
16
+ }
1
17
  export function recordStage(recorder, stageId, payload) {
2
18
  if (!recorder) {
3
19
  return;
4
20
  }
5
21
  try {
6
- recorder.record(stageId, (payload ?? {}));
22
+ recorder.record(stageId, normalizeRecordPayload(payload));
7
23
  }
8
24
  catch {
9
25
  // Snapshot failures should not block the pipeline.
@@ -1,103 +1,26 @@
1
- import { ensureRuntimeMetadata } from '../../shared/runtime-metadata.js';
1
+ import { applyTargetMetadataWithNative, applyTargetToSubjectWithNative, extractTargetModelIdWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js';
2
+ function replaceRecord(target, source) {
3
+ for (const key of Object.keys(target)) {
4
+ if (!Object.prototype.hasOwnProperty.call(source, key)) {
5
+ delete target[key];
6
+ }
7
+ }
8
+ Object.assign(target, source);
9
+ }
2
10
  export function applyTargetMetadata(metadata, target, routeName, originalModel) {
3
11
  if (!metadata || typeof metadata !== 'object') {
4
12
  return;
5
13
  }
6
- metadata.routeName = routeName;
7
- metadata.pipelineId = target.providerKey;
8
- metadata.target = target;
9
- metadata.providerKey = target.providerKey;
10
- metadata.providerType = target.providerType;
11
- metadata.modelId = target.modelId;
12
- metadata.processMode = target.processMode || 'chat';
13
- if (target.forceWebSearch === true || target.forceVision === true) {
14
- const rt = ensureRuntimeMetadata(metadata);
15
- if (target.forceWebSearch === true) {
16
- rt.forceWebSearch = true;
17
- }
18
- if (target.forceVision === true) {
19
- rt.forceVision = true;
20
- }
21
- }
22
- if (target.responsesConfig?.toolCallIdStyle) {
23
- metadata.toolCallIdStyle = target.responsesConfig.toolCallIdStyle;
24
- }
25
- if (target.streaming) {
26
- metadata.targetStreaming = target.streaming;
27
- }
28
- if (originalModel && typeof originalModel === 'string' && originalModel.trim()) {
29
- const trimmed = originalModel.trim();
30
- if (typeof metadata.originalModelId !== 'string' || !metadata.originalModelId) {
31
- metadata.originalModelId = trimmed;
32
- }
33
- if (typeof metadata.clientModelId !== 'string' || !metadata.clientModelId) {
34
- metadata.clientModelId = trimmed;
35
- }
36
- }
37
- if (typeof target.modelId === 'string' && target.modelId.trim()) {
38
- metadata.assignedModelId = target.modelId.trim();
39
- }
14
+ const updated = applyTargetMetadataWithNative(metadata, target, routeName, originalModel);
15
+ replaceRecord(metadata, updated);
40
16
  }
41
17
  export function applyTargetToSubject(subject, target, originalModel) {
42
18
  if (!subject || typeof subject !== 'object') {
43
19
  return;
44
20
  }
45
- const newModel = extractModelFromTarget(target);
46
- if (!newModel) {
47
- return;
48
- }
49
- subject.model = newModel;
50
- if (subject.parameters && typeof subject.parameters === 'object') {
51
- subject.parameters = {
52
- ...subject.parameters,
53
- model: newModel
54
- };
55
- }
56
- else {
57
- subject.parameters = { model: newModel };
58
- }
59
- const metadata = (subject.metadata && typeof subject.metadata === 'object'
60
- ? subject.metadata
61
- : { originalEndpoint: '/v1/chat/completions' });
62
- metadata.providerKey = target.providerKey;
63
- metadata.providerType = target.providerType;
64
- metadata.processMode = target.processMode || 'chat';
65
- subject.metadata = metadata;
66
- const subjectMeta = metadata;
67
- if (target.responsesConfig?.toolCallIdStyle) {
68
- subjectMeta.toolCallIdStyle = target.responsesConfig.toolCallIdStyle;
69
- }
70
- if (originalModel && typeof originalModel === 'string' && originalModel.trim()) {
71
- const trimmed = originalModel.trim();
72
- if (typeof subjectMeta.originalModelId !== 'string' || !subjectMeta.originalModelId) {
73
- subjectMeta.originalModelId = trimmed;
74
- }
75
- if (typeof subjectMeta.clientModelId !== 'string' || !subjectMeta.clientModelId) {
76
- subjectMeta.clientModelId = trimmed;
77
- }
78
- }
79
- subjectMeta.assignedModelId = newModel;
21
+ const updated = applyTargetToSubjectWithNative(subject, target, originalModel);
22
+ replaceRecord(subject, updated);
80
23
  }
81
24
  export function extractModelFromTarget(target) {
82
- if (!target || typeof target.providerKey !== 'string') {
83
- return null;
84
- }
85
- if (typeof target.modelId === 'string' && target.modelId.trim()) {
86
- return target.modelId.trim();
87
- }
88
- if (typeof target.runtimeKey === 'string' && target.runtimeKey.length) {
89
- const prefix = `${target.runtimeKey}.`;
90
- if (target.providerKey.startsWith(prefix)) {
91
- const candidate = target.providerKey.slice(prefix.length).trim();
92
- if (candidate.length) {
93
- return candidate;
94
- }
95
- }
96
- }
97
- const firstDot = target.providerKey.indexOf('.');
98
- if (firstDot <= 0 || firstDot === target.providerKey.length - 1) {
99
- return null;
100
- }
101
- const fallback = target.providerKey.slice(firstDot + 1).trim();
102
- return fallback.length ? fallback : null;
25
+ return extractTargetModelIdWithNative(target);
103
26
  }
@@ -1,3 +1,4 @@
1
+ import { normalizeProviderProtocolTokenWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
1
2
  function recordStage(recorder, stage, payload) {
2
3
  if (!recorder)
3
4
  return;
@@ -11,8 +12,9 @@ function recordStage(recorder, stage, payload) {
11
12
  function ensureFormatEnvelope(envelope, rawRequest, plan, context) {
12
13
  if (envelope)
13
14
  return envelope;
15
+ const normalizedProtocol = normalizeProviderProtocolTokenWithNative(plan.protocol || context.providerProtocol);
14
16
  return {
15
- protocol: plan.protocol || context.providerProtocol,
17
+ protocol: normalizedProtocol ?? plan.protocol ?? context.providerProtocol,
16
18
  direction: 'request',
17
19
  payload: rawRequest
18
20
  };
@@ -1,3 +1,4 @@
1
+ import { normalizeProviderProtocolTokenWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
1
2
  function recordStage(recorder, stage, payload) {
2
3
  if (!recorder)
3
4
  return;
@@ -12,6 +13,7 @@ export async function runOutboundPipeline(options) {
12
13
  const { chat, context, plan, stageRecorder } = options;
13
14
  if (!plan)
14
15
  throw new Error('Outbound plan is required');
16
+ normalizeProviderProtocolTokenWithNative(plan.protocol || context.providerProtocol);
15
17
  if (plan.passthrough?.mode === 'protocol') {
16
18
  if (!plan.passthrough.factory) {
17
19
  throw new Error('Outbound passthrough requires factory');
@@ -1,4 +1,5 @@
1
1
  import { resolveHubProtocolSpec } from './protocol-spec.js';
2
+ import { normalizeProviderProtocolTokenWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
2
3
  let hubPolicyRuntime = undefined;
3
4
  export function setHubPolicyRuntimePolicy(policy) {
4
5
  hubPolicyRuntime = policy;
@@ -41,6 +42,9 @@ function isGeminiCliPayload(payload) {
41
42
  typeof record.requestId === 'string' ||
42
43
  hasGeminiCliRequestWrapper(payload));
43
44
  }
45
+ function normalizeHubProviderProtocol(providerProtocol) {
46
+ return normalizeProviderProtocolTokenWithNative(providerProtocol) ?? providerProtocol;
47
+ }
44
48
  function extendGeminiAllowlistIfNeeded(providerProtocol, payload, allowedTopLevelKeys) {
45
49
  if (providerProtocol !== 'gemini-chat') {
46
50
  return allowedTopLevelKeys;
@@ -214,11 +218,12 @@ export function recordHubPolicyObservation(options) {
214
218
  if (!shouldSample(effectivePolicy?.sampleRate)) {
215
219
  return;
216
220
  }
221
+ const normalizedProviderProtocol = normalizeHubProviderProtocol(options.providerProtocol);
217
222
  try {
218
223
  const phase = options.phase ?? 'provider_outbound';
219
224
  const observation = observeProviderPayload({
220
225
  phase,
221
- providerProtocol: options.providerProtocol,
226
+ providerProtocol: normalizedProviderProtocol,
222
227
  payload: options.payload
223
228
  });
224
229
  if (observation.summary.totalViolations <= 0) {
@@ -240,18 +245,19 @@ export function applyHubProviderOutboundPolicy(options) {
240
245
  if (mode !== 'enforce') {
241
246
  return options.payload;
242
247
  }
248
+ const normalizedProviderProtocol = normalizeHubProviderProtocol(options.providerProtocol);
243
249
  const compatibilityProfile = typeof options.compatibilityProfile === 'string' ? options.compatibilityProfile.trim().toLowerCase() : '';
244
250
  if (compatibilityProfile === 'chat:deepseek-web') {
245
251
  return options.payload;
246
252
  }
247
- const result = applyProviderOutboundPolicy(options.providerProtocol, options.payload);
253
+ const result = applyProviderOutboundPolicy(normalizedProviderProtocol, options.payload);
248
254
  if (!result.changed) {
249
255
  return options.payload;
250
256
  }
251
257
  try {
252
258
  options.stageRecorder?.record('hub_policy.enforce.provider_outbound', {
253
259
  requestId: options.requestId,
254
- providerProtocol: options.providerProtocol,
260
+ providerProtocol: normalizedProviderProtocol,
255
261
  removedTopLevelKeys: result.removedTopLevelKeys,
256
262
  flattenedWrappers: result.flattenedWrappers
257
263
  });
@@ -1,155 +1,27 @@
1
1
  import { ANTHROPIC_ALLOWED_FIELDS, ANTHROPIC_PARAMETERS_WRAPPER_ALLOW_KEYS, GEMINI_ALLOWED_FIELDS, OPENAI_CHAT_ALLOWED_FIELDS, OPENAI_CHAT_PARAMETERS_WRAPPER_ALLOW_KEYS, OPENAI_RESPONSES_ALLOWED_FIELDS, OPENAI_RESPONSES_PARAMETERS_WRAPPER_ALLOW_KEYS } from '../../shared/protocol-field-allowlists.js';
2
- const RESPONSES_SPEC = {
3
- id: 'openai-responses',
4
- providerOutbound: {
5
- enforceEnabled: true,
6
- allowedTopLevelKeys: OPENAI_RESPONSES_ALLOWED_FIELDS,
7
- enforceAllowedTopLevelKeys: true,
8
- forbidWrappers: [
9
- {
10
- code: 'forbid_wrapper',
11
- path: 'parameters',
12
- detail: 'Responses provider payload must not contain a top-level parameters wrapper (expects flattened fields).'
13
- },
14
- {
15
- code: 'forbid_wrapper',
16
- path: 'request',
17
- detail: 'Responses provider payload must not contain a nested request wrapper.'
18
- }
19
- ],
20
- reservedKeyPrefixes: ['__', '_'],
21
- flattenWrappers: [
22
- {
23
- wrapperKey: 'request',
24
- onlyIfTargetMissing: true
25
- },
26
- {
27
- wrapperKey: 'parameters',
28
- onlyIfTargetMissing: true,
29
- aliasKeys: {
30
- max_tokens: 'max_output_tokens'
31
- },
32
- allowKeys: [...OPENAI_RESPONSES_PARAMETERS_WRAPPER_ALLOW_KEYS]
33
- }
34
- ]
35
- },
36
- toolSurface: {
37
- expectedToolFormat: 'openai',
38
- expectedHistoryCarrier: 'input'
39
- }
40
- };
41
- const DEFAULT_SPEC = {
42
- id: 'openai-chat',
43
- providerOutbound: {
44
- enforceEnabled: true,
45
- allowedTopLevelKeys: OPENAI_CHAT_ALLOWED_FIELDS,
46
- enforceAllowedTopLevelKeys: true,
47
- forbidWrappers: [
48
- {
49
- code: 'forbid_wrapper',
50
- path: 'parameters',
51
- detail: 'OpenAI Chat provider payload must not contain a top-level parameters wrapper (expects flattened fields).'
52
- },
53
- {
54
- code: 'forbid_wrapper',
55
- path: 'request',
56
- detail: 'OpenAI Chat provider payload must not contain a nested request wrapper.'
57
- }
58
- ],
59
- reservedKeyPrefixes: ['__', '_'],
60
- flattenWrappers: [
61
- {
62
- wrapperKey: 'request',
63
- onlyIfTargetMissing: true
64
- },
65
- {
66
- wrapperKey: 'parameters',
67
- onlyIfTargetMissing: true,
68
- aliasKeys: {
69
- max_output_tokens: 'max_tokens'
70
- },
71
- allowKeys: [...OPENAI_CHAT_PARAMETERS_WRAPPER_ALLOW_KEYS]
72
- }
73
- ]
74
- },
75
- toolSurface: {
76
- expectedToolFormat: 'openai',
77
- expectedHistoryCarrier: 'messages'
78
- }
2
+ import { resolveHubProtocolSpecWithNative } from '../../../router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js';
3
+ const ALLOWLISTS = {
4
+ openaiChatAllowedFields: OPENAI_CHAT_ALLOWED_FIELDS,
5
+ openaiChatParametersWrapperAllowKeys: OPENAI_CHAT_PARAMETERS_WRAPPER_ALLOW_KEYS,
6
+ openaiResponsesAllowedFields: OPENAI_RESPONSES_ALLOWED_FIELDS,
7
+ openaiResponsesParametersWrapperAllowKeys: OPENAI_RESPONSES_PARAMETERS_WRAPPER_ALLOW_KEYS,
8
+ anthropicAllowedFields: ANTHROPIC_ALLOWED_FIELDS,
9
+ anthropicParametersWrapperAllowKeys: ANTHROPIC_PARAMETERS_WRAPPER_ALLOW_KEYS,
10
+ geminiAllowedFields: GEMINI_ALLOWED_FIELDS
79
11
  };
12
+ function buildSpec(protocol) {
13
+ return resolveHubProtocolSpecWithNative({
14
+ protocol,
15
+ allowlists: ALLOWLISTS
16
+ });
17
+ }
80
18
  export const HUB_PROTOCOL_SPECS = {
81
- 'openai-chat': DEFAULT_SPEC,
82
- 'openai-responses': RESPONSES_SPEC,
83
- 'anthropic-messages': {
84
- id: 'anthropic-messages',
85
- providerOutbound: {
86
- enforceEnabled: true,
87
- allowedTopLevelKeys: ANTHROPIC_ALLOWED_FIELDS,
88
- enforceAllowedTopLevelKeys: true,
89
- forbidWrappers: [
90
- {
91
- code: 'forbid_wrapper',
92
- path: 'parameters',
93
- detail: 'Anthropic Messages provider payload must not contain a top-level parameters wrapper.'
94
- },
95
- {
96
- code: 'forbid_wrapper',
97
- path: 'request',
98
- detail: 'Anthropic Messages provider payload must not contain a nested request wrapper.'
99
- }
100
- ],
101
- reservedKeyPrefixes: ['__', '_'],
102
- flattenWrappers: [
103
- {
104
- wrapperKey: 'request',
105
- onlyIfTargetMissing: true
106
- },
107
- {
108
- wrapperKey: 'parameters',
109
- onlyIfTargetMissing: true,
110
- aliasKeys: {
111
- max_output_tokens: 'max_tokens'
112
- },
113
- allowKeys: [...ANTHROPIC_PARAMETERS_WRAPPER_ALLOW_KEYS]
114
- }
115
- ]
116
- },
117
- toolSurface: {
118
- expectedToolFormat: 'anthropic'
119
- }
120
- },
121
- 'gemini-chat': {
122
- id: 'gemini-chat',
123
- providerOutbound: {
124
- enforceEnabled: true,
125
- allowedTopLevelKeys: GEMINI_ALLOWED_FIELDS,
126
- enforceAllowedTopLevelKeys: true,
127
- forbidWrappers: [
128
- {
129
- code: 'forbid_wrapper',
130
- path: 'parameters',
131
- detail: 'Gemini provider payload must not contain a top-level parameters wrapper.'
132
- },
133
- {
134
- code: 'forbid_wrapper',
135
- path: 'request',
136
- detail: 'Gemini provider payload must not contain a nested request wrapper.'
137
- }
138
- ],
139
- reservedKeyPrefixes: ['__', '_'],
140
- flattenWrappers: [
141
- {
142
- wrapperKey: 'request',
143
- onlyIfTargetMissing: true
144
- }
145
- ]
146
- },
147
- toolSurface: {
148
- expectedToolFormat: 'gemini'
149
- }
150
- }
19
+ 'openai-chat': buildSpec('openai-chat'),
20
+ 'openai-responses': buildSpec('openai-responses'),
21
+ 'anthropic-messages': buildSpec('anthropic-messages'),
22
+ 'gemini-chat': buildSpec('gemini-chat')
151
23
  };
152
24
  export function resolveHubProtocolSpec(protocol) {
153
25
  const normalized = (protocol || '').trim().toLowerCase();
154
- return HUB_PROTOCOL_SPECS[normalized] ?? DEFAULT_SPEC;
26
+ return HUB_PROTOCOL_SPECS[normalized] ?? HUB_PROTOCOL_SPECS['openai-chat'];
155
27
  }
@@ -0,0 +1,2 @@
1
+ import type { StandardizedRequest } from '../types/standardized.js';
2
+ export declare function applyAnthropicToolAliasSemantics(request: StandardizedRequest, entryEndpoint: string): StandardizedRequest;
@@ -0,0 +1,36 @@
1
+ import { isJsonObject } from '../types/json.js';
2
+ import { buildAnthropicToolAliasMapWithNative } from '../../../router/virtual-router/engine-selection/native-chat-process-governance-semantics.js';
3
+ export function applyAnthropicToolAliasSemantics(request, entryEndpoint) {
4
+ try {
5
+ const endpoint = typeof entryEndpoint === 'string' ? entryEndpoint.trim().toLowerCase() : '';
6
+ if (!endpoint.includes('/v1/messages')) {
7
+ return request;
8
+ }
9
+ request.semantics = asObjectRecord(request.semantics);
10
+ const semantics = request.semantics;
11
+ const semanticsTools = asObjectRecord(semantics.tools);
12
+ semantics.tools = semanticsTools;
13
+ const hasAlias = isJsonObject(semanticsTools.toolNameAliasMap) ||
14
+ isJsonObject(semanticsTools.toolAliasMap);
15
+ if (hasAlias) {
16
+ return request;
17
+ }
18
+ const sourceTools = Array.isArray(semanticsTools.clientToolsRaw) && semanticsTools.clientToolsRaw.length
19
+ ? semanticsTools.clientToolsRaw
20
+ : request.tools;
21
+ const aliasMap = buildAnthropicToolAliasMapWithNative(sourceTools);
22
+ if (aliasMap) {
23
+ semanticsTools.toolNameAliasMap = aliasMap;
24
+ }
25
+ }
26
+ catch {
27
+ // best-effort: alias-map propagation must never block request handling
28
+ }
29
+ return request;
30
+ }
31
+ function asObjectRecord(value) {
32
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
33
+ return value;
34
+ }
35
+ return {};
36
+ }
@@ -0,0 +1,5 @@
1
+ import { type ClockScheduleDirectiveCandidate } from '../../../router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js';
2
+ import type { ClockScheduleDirective } from './chat-process-clock-directives.js';
3
+ export declare function hydrateClockScheduleDirectiveCandidate(candidate: ClockScheduleDirectiveCandidate): ClockScheduleDirective | null;
4
+ export declare function parseClockScheduleDirectiveCandidatePayload(payload: string): ClockScheduleDirectiveCandidate | null;
5
+ export declare function parseClockScheduleDirectivePayload(payload: string): ClockScheduleDirective | null;