@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,206 +1,16 @@
1
+ import { coerceClientHeadersWithNative, extractSessionIdentifiersFromMetadataWithNative, findHeaderValueWithNative, normalizeHeaderKeyWithNative, pickHeaderWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js';
1
2
  export function extractSessionIdentifiersFromMetadata(metadata) {
2
- const directSession = normalizeIdentifier(metadata?.sessionId);
3
- const directConversation = normalizeIdentifier(metadata?.conversationId);
4
- const headers = coerceClientHeaders(metadata?.clientHeaders);
5
- let sessionId = directSession ||
6
- (headers ? pickHeader(headers, ['session_id', 'session-id', 'x-session-id', 'anthropic-session-id']) : undefined);
7
- let conversationId = directConversation ||
8
- (headers
9
- ? pickHeader(headers, [
10
- 'conversation_id',
11
- 'conversation-id',
12
- 'x-conversation-id',
13
- 'anthropic-conversation-id',
14
- 'openai-conversation-id'
15
- ])
16
- : undefined);
17
- if (!sessionId || !conversationId) {
18
- const fallback = deriveIdentifiersFromRawPayload(metadata);
19
- sessionId = sessionId || fallback.sessionId;
20
- conversationId = conversationId || fallback.conversationId || fallback.sessionId;
21
- }
22
- return {
23
- ...(sessionId ? { sessionId } : {}),
24
- ...(conversationId ? { conversationId } : {})
25
- };
3
+ return extractSessionIdentifiersFromMetadataWithNative(metadata);
26
4
  }
27
5
  export function coerceClientHeaders(raw) {
28
- if (!raw || typeof raw !== 'object') {
29
- return undefined;
30
- }
31
- const normalized = {};
32
- for (const [key, value] of Object.entries(raw)) {
33
- if (typeof value === 'string' && value.trim()) {
34
- normalized[key] = value;
35
- }
36
- }
37
- return Object.keys(normalized).length ? normalized : undefined;
6
+ return coerceClientHeadersWithNative(raw);
38
7
  }
39
8
  export function pickHeader(headers, candidates) {
40
- for (const name of candidates) {
41
- const value = findHeaderValue(headers, name);
42
- if (value) {
43
- return value;
44
- }
45
- }
46
- return undefined;
9
+ return pickHeaderWithNative(headers, candidates);
47
10
  }
48
11
  export function findHeaderValue(headers, target) {
49
- const lowered = typeof target === 'string' ? target.toLowerCase() : '';
50
- if (!lowered) {
51
- return undefined;
52
- }
53
- const normalizedTarget = normalizeHeaderKey(lowered);
54
- for (const [key, value] of Object.entries(headers)) {
55
- if (typeof value !== 'string') {
56
- continue;
57
- }
58
- const trimmed = value.trim();
59
- if (!trimmed) {
60
- continue;
61
- }
62
- const loweredKey = key.toLowerCase();
63
- if (loweredKey === lowered) {
64
- return trimmed;
65
- }
66
- if (normalizeHeaderKey(loweredKey) === normalizedTarget) {
67
- return trimmed;
68
- }
69
- }
70
- return undefined;
12
+ return findHeaderValueWithNative(headers, target);
71
13
  }
72
14
  export function normalizeHeaderKey(value) {
73
- return value.replace(/[\s_-]+/g, '');
74
- }
75
- function normalizeIdentifier(value) {
76
- if (typeof value !== 'string') {
77
- return undefined;
78
- }
79
- const trimmed = value.trim();
80
- return trimmed || undefined;
81
- }
82
- const SESSION_TOKEN_REGEX = /session[_:\-\s]?([0-9a-f]{8,}(?:-[0-9a-f]{4,}){0,5})/i;
83
- const CONVERSATION_TOKEN_REGEX = /conversation[_:\-\s]?([0-9a-f]{8,}(?:-[0-9a-f]{4,}){0,5})/i;
84
- const SESSION_FIELD_KEYS = ['sessionid', 'session_id', 'session-id', 'anthropic-session-id'];
85
- const CONVERSATION_FIELD_KEYS = ['conversationid', 'conversation_id', 'conversation-id', 'anthropic-conversation-id', 'openai-conversation-id'];
86
- function deriveIdentifiersFromRawPayload(metadata) {
87
- if (!metadata || typeof metadata !== 'object') {
88
- return {};
89
- }
90
- const raw = metadata.__raw_request_body;
91
- const targets = [];
92
- let rawUserMetadataSession;
93
- if (raw !== undefined) {
94
- targets.push(raw);
95
- if (typeof raw === 'object' && raw !== null) {
96
- const rawRecord = raw;
97
- rawUserMetadataSession = extractSessionIdFromUserMetadata(rawRecord);
98
- if (rawRecord.metadata) {
99
- targets.push(rawRecord.metadata);
100
- }
101
- if (rawRecord.rawText) {
102
- targets.push(rawRecord.rawText);
103
- }
104
- if (rawRecord.events) {
105
- targets.push(rawRecord.events);
106
- }
107
- }
108
- }
109
- let sessionId;
110
- let conversationId;
111
- if (rawUserMetadataSession) {
112
- sessionId = rawUserMetadataSession;
113
- conversationId = rawUserMetadataSession;
114
- }
115
- for (const candidate of targets) {
116
- if (!sessionId) {
117
- sessionId = findIdentifier(candidate, SESSION_FIELD_KEYS, SESSION_TOKEN_REGEX);
118
- }
119
- if (!conversationId) {
120
- conversationId = findIdentifier(candidate, CONVERSATION_FIELD_KEYS, CONVERSATION_TOKEN_REGEX);
121
- }
122
- if (sessionId && conversationId) {
123
- break;
124
- }
125
- }
126
- if (!sessionId && conversationId) {
127
- sessionId = conversationId;
128
- }
129
- else if (sessionId && !conversationId) {
130
- conversationId = sessionId;
131
- }
132
- return {
133
- ...(sessionId ? { sessionId } : {}),
134
- ...(conversationId ? { conversationId } : {})
135
- };
136
- }
137
- function extractSessionIdFromUserMetadata(raw) {
138
- const metadataNode = raw.metadata;
139
- if (!metadataNode || typeof metadataNode !== 'object') {
140
- return undefined;
141
- }
142
- const userId = metadataNode.user_id;
143
- if (typeof userId !== 'string') {
144
- return undefined;
145
- }
146
- const trimmed = userId.trim();
147
- if (!trimmed) {
148
- return undefined;
149
- }
150
- const match = trimmed.match(SESSION_TOKEN_REGEX);
151
- if (match && match[1]) {
152
- return match[1];
153
- }
154
- return undefined;
155
- }
156
- function findIdentifier(source, preferredKeys, regex) {
157
- if (source === undefined || source === null) {
158
- return undefined;
159
- }
160
- if (typeof source === 'string') {
161
- const trimmed = source.trim();
162
- if (!trimmed) {
163
- return undefined;
164
- }
165
- const match = trimmed.match(regex);
166
- if (match && match[1]) {
167
- return match[1];
168
- }
169
- if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
170
- try {
171
- const parsed = JSON.parse(trimmed);
172
- return findIdentifier(parsed, preferredKeys, regex);
173
- }
174
- catch {
175
- return undefined;
176
- }
177
- }
178
- return undefined;
179
- }
180
- if (Array.isArray(source)) {
181
- for (const entry of source) {
182
- const candidate = findIdentifier(entry, preferredKeys, regex);
183
- if (candidate) {
184
- return candidate;
185
- }
186
- }
187
- return undefined;
188
- }
189
- if (typeof source === 'object') {
190
- const record = source;
191
- for (const [key, value] of Object.entries(record)) {
192
- const lowered = typeof key === 'string' ? key.toLowerCase() : '';
193
- if (preferredKeys.includes(lowered)) {
194
- const normalized = normalizeIdentifier(value);
195
- if (normalized) {
196
- return normalized;
197
- }
198
- }
199
- const fromNested = findIdentifier(value, preferredKeys, regex);
200
- if (fromNested) {
201
- return fromNested;
202
- }
203
- }
204
- }
205
- return undefined;
15
+ return normalizeHeaderKeyWithNative(value);
206
16
  }
@@ -1,11 +1,10 @@
1
1
  import type { AdapterContext } from '../../../../types/chat-envelope.js';
2
2
  import type { FormatEnvelope } from '../../../../types/format-envelope.js';
3
3
  import type { JsonObject } from '../../../../types/json.js';
4
- import type { FormatAdapter, StageRecorder } from '../../../../format-adapters/index.js';
4
+ import type { StageRecorder } from '../../../../format-adapters/index.js';
5
5
  export interface ReqInboundStage1FormatParseOptions {
6
6
  rawRequest: JsonObject;
7
7
  adapterContext: AdapterContext;
8
- formatAdapter: Pick<FormatAdapter, 'parseRequest'>;
9
8
  stageRecorder?: StageRecorder;
10
9
  }
11
10
  export declare function runReqInboundStage1FormatParse(options: ReqInboundStage1FormatParseOptions): Promise<FormatEnvelope<JsonObject>>;
@@ -1,6 +1,42 @@
1
1
  import { recordStage } from '../../../stages/utils.js';
2
+ import { sanitizeReqInboundFormatEnvelopeWithNative } from '../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
3
+ import { parseReqInboundFormatEnvelopeWithNative } from '../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js';
4
+ import { normalizeReasoningInAnthropicPayload, normalizeReasoningInChatPayload, normalizeReasoningInGeminiPayload, normalizeReasoningInResponsesPayload } from '../../../../../shared/reasoning-normalizer.js';
5
+ function resolveProtocolToken(adapterContext) {
6
+ const candidate = typeof adapterContext.providerProtocol === 'string' && adapterContext.providerProtocol.trim().length
7
+ ? adapterContext.providerProtocol.trim().toLowerCase()
8
+ : '';
9
+ if (candidate === 'openai-chat' || candidate === 'openai-responses' || candidate === 'anthropic-messages' || candidate === 'gemini-chat') {
10
+ return candidate;
11
+ }
12
+ return 'openai-chat';
13
+ }
14
+ function applyReasoningNormalization(rawRequest, protocol) {
15
+ if (protocol === 'openai-responses') {
16
+ normalizeReasoningInResponsesPayload(rawRequest, {
17
+ includeInput: true,
18
+ includeInstructions: true
19
+ });
20
+ return;
21
+ }
22
+ if (protocol === 'anthropic-messages') {
23
+ normalizeReasoningInAnthropicPayload(rawRequest);
24
+ return;
25
+ }
26
+ if (protocol === 'gemini-chat') {
27
+ normalizeReasoningInGeminiPayload(rawRequest);
28
+ return;
29
+ }
30
+ normalizeReasoningInChatPayload(rawRequest);
31
+ }
2
32
  export async function runReqInboundStage1FormatParse(options) {
3
- const envelope = (await options.formatAdapter.parseRequest(options.rawRequest, options.adapterContext));
33
+ const protocol = resolveProtocolToken(options.adapterContext);
34
+ applyReasoningNormalization(options.rawRequest, protocol);
35
+ const envelopeRaw = parseReqInboundFormatEnvelopeWithNative({
36
+ rawRequest: options.rawRequest,
37
+ protocol
38
+ });
39
+ const envelope = sanitizeReqInboundFormatEnvelopeWithNative(envelopeRaw);
4
40
  recordStage(options.stageRecorder, 'chat_process.req.stage1.format_parse', envelope);
5
41
  return envelope;
6
42
  }
@@ -1,9 +1,8 @@
1
- import { chatEnvelopeToStandardized } from '../../../../standardized-bridge.js';
2
- import { validateChatEnvelope } from '../../../../../shared/chat-envelope-validator.js';
3
- import { buildAnthropicToolAliasMap } from '../../../../../shared/anthropic-message-utils.js';
4
1
  import { applyHubOperationTableInbound } from '../../../../operation-table/operation-table-runner.js';
5
2
  import { recordStage } from '../../../stages/utils.js';
6
- import { isJsonObject, jsonClone } from '../../../../types/json.js';
3
+ import { liftReqInboundSemantics } from './semantic-lift.js';
4
+ import { validateChatEnvelopeWithNative } from '../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js';
5
+ import { chatEnvelopeToStandardizedWithNative } from '../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
7
6
  export async function runReqInboundStage2SemanticMap(options) {
8
7
  const chatEnvelope = await options.semanticMapper.toChat(options.formatEnvelope, options.adapterContext);
9
8
  applyHubOperationTableInbound({
@@ -13,92 +12,19 @@ export async function runReqInboundStage2SemanticMap(options) {
13
12
  });
14
13
  // Semantic Gate (request): before entering chat_process, lift any mappable protocol semantics
15
14
  // into ChatEnvelope.semantics. Do not persist these in metadata.
16
- try {
17
- if (!chatEnvelope.semantics || typeof chatEnvelope.semantics !== 'object') {
18
- chatEnvelope.semantics = {};
19
- }
20
- const semantics = chatEnvelope.semantics;
21
- if (!semantics.tools || !isJsonObject(semantics.tools)) {
22
- semantics.tools = {};
23
- }
24
- const toolsNode = semantics.tools;
25
- const rawTools = Array.isArray(options.formatEnvelope.payload?.tools)
26
- ? (options.formatEnvelope.payload.tools ?? [])
27
- : [];
28
- if (rawTools.length && toolsNode.clientToolsRaw === undefined) {
29
- toolsNode.clientToolsRaw = jsonClone(rawTools);
30
- }
31
- // /v1/messages tool names are case-sensitive to the client (e.g. Bash/Glob/Read).
32
- // Capture an alias map here (from the *raw* client tools) so later response remap
33
- // can convert canonical tool calls (e.g. shell_command/glob/read) back to the
34
- // original client tool names.
35
- try {
36
- const protocol = String(options.formatEnvelope?.protocol || '').toLowerCase();
37
- const endpoint = String(options.adapterContext?.entryEndpoint || '').toLowerCase();
38
- const shouldCapture = protocol === 'anthropic-messages' || endpoint.includes('/v1/messages');
39
- const hasAliasMap = isJsonObject(toolsNode.toolNameAliasMap) || isJsonObject(toolsNode.toolAliasMap);
40
- if (shouldCapture && !hasAliasMap && rawTools.length) {
41
- const aliasMap = buildAnthropicToolAliasMap(rawTools);
42
- if (aliasMap) {
43
- toolsNode.toolNameAliasMap = jsonClone(aliasMap);
44
- }
45
- }
46
- }
47
- catch {
48
- // best-effort: never block request handling due to alias map propagation failures
49
- }
50
- if (options.responsesResume && isJsonObject(options.responsesResume)) {
51
- if (!semantics.responses || !isJsonObject(semantics.responses)) {
52
- semantics.responses = {};
53
- }
54
- const responsesNode = semantics.responses;
55
- if (responsesNode.resume === undefined) {
56
- responsesNode.resume = jsonClone(options.responsesResume);
57
- }
58
- // If this is a Responses submit/resume hop, tool outputs may exist only in resume metadata.
59
- // Lift them into canonical chat.toolOutputs so chat_process sees a single unified surface.
60
- const hasDirectToolOutputs = Array.isArray(chatEnvelope.toolOutputs) && chatEnvelope.toolOutputs.length > 0;
61
- if (!hasDirectToolOutputs) {
62
- const detailed = Array.isArray(options.responsesResume.toolOutputsDetailed)
63
- ? options.responsesResume.toolOutputsDetailed
64
- : undefined;
65
- if (detailed && detailed.length) {
66
- const mapped = detailed
67
- .map((entry, index) => {
68
- if (!entry || typeof entry !== 'object')
69
- return undefined;
70
- const callId = typeof entry.callId === 'string' && String(entry.callId).trim().length
71
- ? String(entry.callId).trim()
72
- : typeof entry.originalId === 'string' && String(entry.originalId).trim().length
73
- ? String(entry.originalId).trim()
74
- : `resume_tool_${index + 1}`;
75
- const outputText = typeof entry.outputText === 'string'
76
- ? entry.outputText
77
- : (() => { try {
78
- return JSON.stringify(entry.outputText ?? '');
79
- }
80
- catch {
81
- return String(entry.outputText ?? '');
82
- } })();
83
- return { tool_call_id: callId, content: outputText };
84
- })
85
- .filter(Boolean);
86
- if (mapped.length) {
87
- chatEnvelope.toolOutputs = mapped;
88
- }
89
- }
90
- }
91
- }
92
- }
93
- catch {
94
- // fail-fast is enforced at chat_process entry; this gate is best-effort
95
- }
96
- validateChatEnvelope(chatEnvelope, {
15
+ liftReqInboundSemantics({
16
+ chatEnvelope,
17
+ formatEnvelope: options.formatEnvelope,
18
+ adapterContext: options.adapterContext,
19
+ responsesResume: options.responsesResume
20
+ });
21
+ validateChatEnvelopeWithNative(chatEnvelope, {
97
22
  stage: 'req_inbound',
98
23
  direction: 'request'
99
24
  });
100
25
  recordStage(options.stageRecorder, 'chat_process.req.stage2.semantic_map', chatEnvelope);
101
- const standardizedRequest = chatEnvelopeToStandardized(chatEnvelope, {
26
+ const standardizedRequest = chatEnvelopeToStandardizedWithNative({
27
+ chatEnvelope: chatEnvelope,
102
28
  adapterContext: options.adapterContext,
103
29
  endpoint: options.adapterContext.entryEndpoint,
104
30
  requestId: options.adapterContext.requestId
@@ -0,0 +1,14 @@
1
+ import type { AdapterContext, ChatEnvelope } from '../../../../types/chat-envelope.js';
2
+ import type { FormatEnvelope } from '../../../../types/format-envelope.js';
3
+ import type { JsonObject } from '../../../../types/json.js';
4
+ export interface ReqInboundSemanticLiftOptions {
5
+ chatEnvelope: ChatEnvelope;
6
+ formatEnvelope: FormatEnvelope<JsonObject>;
7
+ adapterContext: AdapterContext;
8
+ responsesResume?: JsonObject;
9
+ }
10
+ export declare function liftReqInboundSemantics(options: ReqInboundSemanticLiftOptions): void;
11
+ export declare function mapResumeToolOutputsDetailed(responsesResume: JsonObject): Array<{
12
+ tool_call_id: string;
13
+ content: string;
14
+ }>;
@@ -0,0 +1,24 @@
1
+ import { isJsonObject } from '../../../../types/json.js';
2
+ import { applyReqInboundSemanticLiftWithNative, mapReqInboundResumeToolOutputsDetailedWithNative } from '../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
3
+ export function liftReqInboundSemantics(options) {
4
+ const normalizedResponsesResume = options.responsesResume && isJsonObject(options.responsesResume) ? options.responsesResume : undefined;
5
+ const lifted = applyReqInboundSemanticLiftWithNative({
6
+ chatEnvelope: options.chatEnvelope,
7
+ payload: options.formatEnvelope.payload,
8
+ protocol: options.formatEnvelope.protocol,
9
+ entryEndpoint: options.adapterContext.entryEndpoint,
10
+ responsesResume: normalizedResponsesResume
11
+ });
12
+ replaceEnvelope(options.chatEnvelope, lifted);
13
+ }
14
+ export function mapResumeToolOutputsDetailed(responsesResume) {
15
+ return mapReqInboundResumeToolOutputsDetailedWithNative(responsesResume);
16
+ }
17
+ function replaceEnvelope(target, source) {
18
+ for (const key of Object.keys(target)) {
19
+ if (!Object.prototype.hasOwnProperty.call(source, key)) {
20
+ delete target[key];
21
+ }
22
+ }
23
+ Object.assign(target, source);
24
+ }
@@ -0,0 +1,2 @@
1
+ import type { JsonObject } from '../../../../../types/json.js';
2
+ export declare function normalizeShellLikeToolCallsBeforeGovernanceFallback(payload: JsonObject): void;
@@ -0,0 +1,157 @@
1
+ import { isShellLikeToolNameTokenWithNative } from '../../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
2
+ const SHELL_LIKE_TOOL_NAMES = new Set(['exec_command', 'shell_command', 'shell', 'bash', 'terminal']);
3
+ function readTrimmedString(value) {
4
+ if (typeof value !== 'string') {
5
+ return undefined;
6
+ }
7
+ const trimmed = value.trim();
8
+ return trimmed.length ? trimmed : undefined;
9
+ }
10
+ function isRecord(value) {
11
+ return !!value && typeof value === 'object' && !Array.isArray(value);
12
+ }
13
+ function readStringArrayCommand(value) {
14
+ if (!Array.isArray(value)) {
15
+ return undefined;
16
+ }
17
+ const tokens = value
18
+ .map((item) => (item == null ? '' : String(item).trim()))
19
+ .filter((item) => item.length > 0);
20
+ return tokens.length ? tokens.join(' ') : undefined;
21
+ }
22
+ function parseJsonRecord(value) {
23
+ if (isRecord(value)) {
24
+ return value;
25
+ }
26
+ if (typeof value !== 'string') {
27
+ return undefined;
28
+ }
29
+ const trimmed = value.trim();
30
+ if (!trimmed) {
31
+ return {};
32
+ }
33
+ try {
34
+ const parsed = JSON.parse(trimmed);
35
+ return isRecord(parsed) ? parsed : undefined;
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ function readCommandFromArgs(args) {
42
+ const input = isRecord(args.input) ? args.input : undefined;
43
+ const direct = readTrimmedString(args.cmd) ??
44
+ readTrimmedString(args.command) ??
45
+ readTrimmedString(args.script) ??
46
+ readTrimmedString(args.toon) ??
47
+ readStringArrayCommand(args.cmd) ??
48
+ readStringArrayCommand(args.command);
49
+ if (direct) {
50
+ return direct;
51
+ }
52
+ if (!input) {
53
+ return undefined;
54
+ }
55
+ return (readTrimmedString(input.cmd) ??
56
+ readTrimmedString(input.command) ??
57
+ readTrimmedString(input.script) ??
58
+ readStringArrayCommand(input.cmd) ??
59
+ readStringArrayCommand(input.command));
60
+ }
61
+ function readWorkdirFromArgs(args) {
62
+ const input = isRecord(args.input) ? args.input : undefined;
63
+ return (readTrimmedString(args.workdir) ??
64
+ readTrimmedString(args.cwd) ??
65
+ readTrimmedString(args.workDir) ??
66
+ readTrimmedString(input?.workdir) ??
67
+ readTrimmedString(input?.cwd));
68
+ }
69
+ function collectRequestedToolNames(payload) {
70
+ const names = new Set();
71
+ const root = payload;
72
+ const tools = Array.isArray(root.tools) ? root.tools : [];
73
+ for (const tool of tools) {
74
+ if (!isRecord(tool))
75
+ continue;
76
+ const fn = isRecord(tool.function) ? tool.function : undefined;
77
+ const name = readTrimmedString(fn?.name) ?? readTrimmedString(tool.name);
78
+ if (name) {
79
+ names.add(name);
80
+ }
81
+ }
82
+ return names;
83
+ }
84
+ function resolveShellLikeToolName(rawName, requestedToolNames) {
85
+ if (requestedToolNames.size === 0) {
86
+ return rawName;
87
+ }
88
+ if (requestedToolNames.has(rawName)) {
89
+ return rawName;
90
+ }
91
+ if (requestedToolNames.has('exec_command')) {
92
+ return 'exec_command';
93
+ }
94
+ if (requestedToolNames.has('shell_command')) {
95
+ return 'shell_command';
96
+ }
97
+ return rawName;
98
+ }
99
+ export function normalizeShellLikeToolCallsBeforeGovernanceFallback(payload) {
100
+ const root = payload;
101
+ const messages = Array.isArray(root.messages) ? root.messages : [];
102
+ if (!messages.length) {
103
+ return;
104
+ }
105
+ const requestedToolNames = collectRequestedToolNames(payload);
106
+ for (const message of messages) {
107
+ if (!isRecord(message))
108
+ continue;
109
+ const role = readTrimmedString(message.role)?.toLowerCase();
110
+ if (role !== 'assistant')
111
+ continue;
112
+ const toolCalls = Array.isArray(message.tool_calls) ? message.tool_calls : [];
113
+ if (!toolCalls.length)
114
+ continue;
115
+ for (const call of toolCalls) {
116
+ if (!isRecord(call))
117
+ continue;
118
+ const fn = isRecord(call.function) ? call.function : undefined;
119
+ if (!fn)
120
+ continue;
121
+ const rawName = readTrimmedString(fn.name);
122
+ if (!rawName)
123
+ continue;
124
+ const isShellLike = isShellLikeToolNameTokenWithNative(rawName);
125
+ if (!isShellLike)
126
+ continue;
127
+ const resolvedName = resolveShellLikeToolName(rawName, requestedToolNames);
128
+ if (resolvedName !== rawName) {
129
+ fn.name = resolvedName;
130
+ }
131
+ const parsedArgs = parseJsonRecord(fn.arguments);
132
+ const args = parsedArgs ?? {};
133
+ const cmd = readCommandFromArgs(args);
134
+ if (!cmd) {
135
+ continue;
136
+ }
137
+ const nextArgs = {
138
+ ...args,
139
+ cmd,
140
+ command: cmd
141
+ };
142
+ const workdir = readWorkdirFromArgs(args);
143
+ if (workdir) {
144
+ nextArgs.workdir = workdir;
145
+ }
146
+ if (Object.prototype.hasOwnProperty.call(nextArgs, 'toon')) {
147
+ delete nextArgs.toon;
148
+ }
149
+ try {
150
+ fn.arguments = JSON.stringify(nextArgs);
151
+ }
152
+ catch {
153
+ fn.arguments = JSON.stringify({ cmd, command: cmd, ...(workdir ? { workdir } : {}) });
154
+ }
155
+ }
156
+ }
157
+ }
@@ -0,0 +1,16 @@
1
+ import type { AdapterContext } from '../../../../types/chat-envelope.js';
2
+ import type { StageRecorder } from '../../../../format-adapters/index.js';
3
+ import type { JsonObject } from '../../../../types/json.js';
4
+ export interface ContextCaptureOptions {
5
+ rawRequest: JsonObject;
6
+ adapterContext: AdapterContext;
7
+ stageRecorder?: StageRecorder;
8
+ }
9
+ export type ContextCaptureHandler = (options: ContextCaptureOptions) => Promise<Record<string, unknown> | undefined> | Record<string, unknown> | undefined;
10
+ export interface ReqInboundStage3ContextCaptureOptions {
11
+ rawRequest: JsonObject;
12
+ adapterContext: AdapterContext;
13
+ captureContext?: ContextCaptureHandler;
14
+ stageRecorder?: StageRecorder;
15
+ }
16
+ export declare function runReqInboundStage3ContextCaptureOrchestration(options: ReqInboundStage3ContextCaptureOptions): Promise<Record<string, unknown> | undefined>;
@@ -0,0 +1,29 @@
1
+ import { recordStage } from '../../../stages/utils.js';
2
+ import { buildToolOutputSnapshot } from './tool-output-snapshot.js';
3
+ import { augmentReqInboundContextSnapshotWithNative, resolveReqInboundServerToolFollowupSnapshotWithNative } from '../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
4
+ const CONTEXT_CAPTURE_STAGE_ID = 'chat_process.req.stage3.context_capture';
5
+ export async function runReqInboundStage3ContextCaptureOrchestration(options) {
6
+ const followupSnapshot = resolveReqInboundServerToolFollowupSnapshotWithNative(options.adapterContext);
7
+ if (followupSnapshot) {
8
+ recordStage(options.stageRecorder, CONTEXT_CAPTURE_STAGE_ID, followupSnapshot);
9
+ return followupSnapshot;
10
+ }
11
+ let context;
12
+ if (options.captureContext) {
13
+ try {
14
+ context = await options.captureContext({
15
+ rawRequest: options.rawRequest,
16
+ adapterContext: options.adapterContext
17
+ });
18
+ }
19
+ catch {
20
+ context = undefined;
21
+ }
22
+ }
23
+ const baseSnapshot = buildToolOutputSnapshot(options.rawRequest, options.adapterContext.providerProtocol);
24
+ const snapshot = context
25
+ ? augmentReqInboundContextSnapshotWithNative(context, baseSnapshot)
26
+ : baseSnapshot;
27
+ recordStage(options.stageRecorder, CONTEXT_CAPTURE_STAGE_ID, snapshot);
28
+ return snapshot;
29
+ }
@@ -1,4 +1,5 @@
1
1
  import { runReqInboundStage3ContextCapture } from './index.js';
2
+ import { normalizeContextCaptureLabelWithNative } from '../../../../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
2
3
  export function createResponsesContextCapture(captureImpl) {
3
4
  return (options) => runReqInboundStage3ContextCapture({
4
5
  rawRequest: options.rawRequest,
@@ -8,10 +9,11 @@ export function createResponsesContextCapture(captureImpl) {
8
9
  });
9
10
  }
10
11
  export function createNoopContextCapture(label) {
12
+ const normalizedLabel = normalizeContextCaptureLabelWithNative(label);
11
13
  return (options) => runReqInboundStage3ContextCapture({
12
14
  rawRequest: options.rawRequest,
13
15
  adapterContext: options.adapterContext,
14
16
  stageRecorder: options.stageRecorder,
15
- captureContext: () => ({ stage: label })
17
+ captureContext: () => ({ stage: normalizedLabel })
16
18
  });
17
19
  }