@jsonstudio/llms 0.6.2172 → 0.6.3214
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/conversion/args-mapping.js +8 -0
- package/dist/conversion/bridge-actions.js +367 -0
- package/dist/conversion/bridge-id-utils.js +13 -0
- package/dist/conversion/{shared/bridge-instructions.js → bridge-instructions.js} +2 -1
- package/dist/conversion/{shared/bridge-message-utils.d.ts → bridge-message-utils.d.ts} +1 -1
- package/dist/conversion/{shared/bridge-message-utils.js → bridge-message-utils.js} +5 -150
- package/dist/conversion/{shared/bridge-metadata.d.ts → bridge-metadata.d.ts} +1 -0
- package/dist/conversion/bridge-metadata.js +5 -0
- package/dist/conversion/bridge-policies.js +11 -0
- package/dist/conversion/codecs/gemini-openai-codec.js +27 -8
- package/dist/conversion/codecs/responses-openai-codec.js +1 -1
- package/dist/conversion/{shared/compaction-detect.d.ts → compaction-detect.d.ts} +1 -1
- package/dist/conversion/compaction-detect.js +4 -0
- package/dist/conversion/compat/actions/apply-patch-fixer.js +2 -2
- package/dist/conversion/compat/actions/deepseek-web-response.d.ts +0 -1
- package/dist/conversion/compat/actions/deepseek-web-response.js +15 -405
- package/dist/conversion/compat/actions/harvest-tool-calls-from-text.js +1 -1
- package/dist/conversion/compat/actions/lmstudio-responses-fc-ids.js +1 -1
- package/dist/conversion/compat/actions/qwen-transform.js +74 -2
- package/dist/conversion/compat/actions/snapshot.js +1 -1
- package/dist/conversion/compat/antigravity-session-signature.js +71 -1
- package/dist/conversion/compat/profiles/chat-deepseek-web.json +0 -22
- package/dist/conversion/compat/profiles/chat-gemini-cli.json +0 -7
- package/dist/conversion/compat/profiles/chat-gemini.json +0 -6
- package/dist/conversion/compat/profiles/chat-glm.json +251 -72
- package/dist/conversion/compat/profiles/chat-iflow.json +174 -39
- package/dist/conversion/compat/profiles/chat-lmstudio.json +43 -14
- package/dist/conversion/hub/core/detour-registry.d.ts +2 -0
- package/dist/conversion/hub/core/hub-context.d.ts +3 -1
- package/dist/conversion/hub/core/index.d.ts +1 -0
- package/dist/conversion/hub/core/stage-driver.js +2 -0
- package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +15 -4
- package/dist/conversion/hub/format-adapters/chat-format-adapter.js +15 -4
- package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +15 -4
- package/dist/conversion/hub/format-adapters/responses-format-adapter.js +15 -4
- package/dist/conversion/hub/hub-feature.js +3 -2
- package/dist/conversion/hub/node-support.js +9 -4
- package/dist/conversion/hub/operation-table/operation-table-runner.js +12 -8
- package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +3 -3
- package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +16 -13
- package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +6 -10
- package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +21 -73
- package/dist/conversion/hub/ops/operations.js +2 -121
- package/dist/conversion/hub/pipeline/compat/compat-engine.js +6 -0
- package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.d.ts +1 -1
- package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +33 -1042
- package/dist/conversion/hub/pipeline/compat/compat-profile-resolver.js +2 -0
- package/dist/conversion/hub/pipeline/compat/compat-profile-store.js +2 -0
- package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +14 -17
- package/dist/conversion/hub/pipeline/compat/native-adapter-context.d.ts +3 -0
- package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +39 -0
- package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +1 -0
- package/dist/conversion/hub/pipeline/hub-pipeline.js +165 -265
- package/dist/conversion/hub/pipeline/session-identifiers.js +6 -196
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.d.ts +1 -2
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +37 -1
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.d.ts +1 -1
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +69 -81
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.d.ts +14 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/semantic-lift.js +24 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.d.ts +2 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/archive/shell-like-tool-call-normalization-fallback.js +157 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.d.ts +16 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-capture-orchestration.js +29 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js +3 -1
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.d.ts +2 -15
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +8 -595
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.d.ts +8 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/responses-context-snapshot.js +28 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.d.ts +2 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-diagnostics.js +4 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.d.ts +10 -0
- package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/tool-output-snapshot.js +12 -0
- package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.d.ts +3 -0
- package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/context-merge.js +30 -0
- package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +9 -129
- package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -4
- package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +9 -26
- package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +32 -14
- package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.d.ts +2 -2
- package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +48 -8
- package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +20 -3
- package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +11 -199
- package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.d.ts +3 -0
- package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/stream-json-sniffer.js +81 -0
- package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.d.ts +1 -2
- package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +36 -1
- package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +3 -1
- package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.d.ts +6 -0
- package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/chat-process-semantics-bridge.js +17 -0
- package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.d.ts +9 -0
- package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +28 -0
- package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -2
- package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +14 -102
- package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +3 -1
- package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +54 -39
- package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +18 -5
- package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.d.ts +11 -1
- package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage3_servertool_orchestration/index.js +10 -32
- package/dist/conversion/hub/pipeline/stages/utils.js +17 -1
- package/dist/conversion/hub/pipeline/target-utils.js +14 -91
- package/dist/conversion/hub/pipelines/inbound.js +3 -1
- package/dist/conversion/hub/pipelines/outbound.js +2 -0
- package/dist/conversion/hub/policy/policy-engine.js +9 -3
- package/dist/conversion/hub/policy/protocol-spec.js +21 -149
- package/dist/conversion/hub/process/chat-process-anthropic-alias.d.ts +2 -0
- package/dist/conversion/hub/process/chat-process-anthropic-alias.js +36 -0
- package/dist/conversion/hub/process/chat-process-clock-directive-parser.d.ts +5 -0
- package/dist/conversion/hub/process/chat-process-clock-directive-parser.js +48 -0
- package/dist/conversion/hub/process/chat-process-clock-directives.d.ts +24 -0
- package/dist/conversion/hub/process/chat-process-clock-directives.js +98 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-directives.d.ts +8 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-directives.js +42 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.d.ts +14 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-finalize.js +10 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-messages.d.ts +5 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-messages.js +10 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.d.ts +30 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-orchestration.js +68 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.d.ts +9 -0
- package/dist/conversion/hub/process/chat-process-clock-reminder-time-tag.js +18 -0
- package/dist/conversion/hub/process/chat-process-clock-reminders.d.ts +2 -0
- package/dist/conversion/hub/process/chat-process-clock-reminders.js +104 -0
- package/dist/conversion/hub/process/chat-process-clock-tool-schemas.d.ts +3 -0
- package/dist/conversion/hub/process/chat-process-clock-tool-schemas.js +233 -0
- package/dist/conversion/hub/process/chat-process-clock-tools.d.ts +6 -0
- package/dist/conversion/hub/process/chat-process-clock-tools.js +41 -0
- package/dist/conversion/hub/process/chat-process-continue-execution.d.ts +11 -0
- package/dist/conversion/hub/process/chat-process-continue-execution.js +82 -0
- package/dist/conversion/hub/process/chat-process-governance-context.d.ts +15 -0
- package/dist/conversion/hub/process/chat-process-governance-context.js +7 -0
- package/dist/conversion/hub/process/chat-process-governance-finalize.d.ts +16 -0
- package/dist/conversion/hub/process/chat-process-governance-finalize.js +11 -0
- package/dist/conversion/hub/process/chat-process-governance-orchestration.d.ts +9 -0
- package/dist/conversion/hub/process/chat-process-governance-orchestration.js +47 -0
- package/dist/conversion/hub/process/chat-process-governed-control-ops.d.ts +8 -0
- package/dist/conversion/hub/process/chat-process-governed-control-ops.js +5 -0
- package/dist/conversion/hub/process/chat-process-governed-filter-call.d.ts +12 -0
- package/dist/conversion/hub/process/chat-process-governed-filter-call.js +18 -0
- package/dist/conversion/hub/process/chat-process-governed-merge.d.ts +8 -0
- package/dist/conversion/hub/process/chat-process-governed-merge.js +11 -0
- package/dist/conversion/hub/process/chat-process-media.d.ts +3 -0
- package/dist/conversion/hub/process/chat-process-media.js +18 -0
- package/dist/conversion/hub/process/chat-process-node-result.d.ts +23 -0
- package/dist/conversion/hub/process/chat-process-node-result.js +24 -0
- package/dist/conversion/hub/process/chat-process-pending-tool-sync.d.ts +14 -0
- package/dist/conversion/hub/process/chat-process-pending-tool-sync.js +52 -0
- package/dist/conversion/hub/process/chat-process-post-governed-normalization.d.ts +8 -0
- package/dist/conversion/hub/process/chat-process-post-governed-normalization.js +16 -0
- package/dist/conversion/hub/process/chat-process-review.d.ts +2 -0
- package/dist/conversion/hub/process/chat-process-review.js +8 -0
- package/dist/conversion/hub/process/chat-process-servertool-orchestration.d.ts +8 -0
- package/dist/conversion/hub/process/chat-process-servertool-orchestration.js +22 -0
- package/dist/conversion/hub/process/chat-process-tool-normalization.d.ts +2 -0
- package/dist/conversion/hub/process/chat-process-tool-normalization.js +4 -0
- package/dist/conversion/hub/process/chat-process-web-search-intent.d.ts +12 -0
- package/dist/conversion/hub/process/chat-process-web-search-intent.js +13 -0
- package/dist/conversion/hub/process/chat-process-web-search-tool-schema.d.ts +3 -0
- package/dist/conversion/hub/process/chat-process-web-search-tool-schema.js +4 -0
- package/dist/conversion/hub/process/chat-process-web-search.d.ts +8 -0
- package/dist/conversion/hub/process/chat-process-web-search.js +26 -0
- package/dist/conversion/hub/process/chat-process.d.ts +2 -19
- package/dist/conversion/hub/process/chat-process.js +12 -1701
- package/dist/conversion/hub/process/client-inject-readiness.d.ts +1 -0
- package/dist/conversion/hub/process/client-inject-readiness.js +4 -0
- package/dist/conversion/hub/registry.js +5 -2
- package/dist/conversion/hub/response/chat-response-utils.js +5 -86
- package/dist/conversion/hub/response/provider-response.d.ts +9 -0
- package/dist/conversion/hub/response/provider-response.js +20 -26
- package/dist/conversion/hub/response/response-mappers.js +25 -27
- package/dist/conversion/hub/response/response-runtime.js +30 -98
- package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +1 -0
- package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +1 -0
- package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +1 -0
- package/dist/conversion/hub/semantic-mappers/chat-mapper.js +1 -0
- package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +1 -0
- package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +1 -0
- package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +1 -0
- package/dist/conversion/hub/semantic-mappers/responses-mapper.js +1 -0
- package/dist/conversion/hub/snapshot-recorder.js +11 -4
- package/dist/conversion/hub/standardized-bridge.js +11 -288
- package/dist/conversion/hub/tool-governance/engine.d.ts +8 -0
- package/dist/conversion/hub/tool-governance/engine.js +25 -63
- package/dist/conversion/hub/tool-governance/rules.js +73 -69
- package/dist/conversion/hub/tool-session-compat.d.ts +2 -2
- package/dist/conversion/hub/tool-session-compat.js +17 -231
- package/dist/conversion/hub/tool-surface/tool-surface-engine.js +6 -4
- package/dist/conversion/index.d.ts +1 -2
- package/dist/conversion/index.js +1 -2
- package/dist/conversion/jsonish.js +20 -0
- package/dist/conversion/mcp-injection.js +7 -0
- package/dist/conversion/media.js +4 -0
- package/dist/conversion/{shared/metadata-passthrough.d.ts → metadata-passthrough.d.ts} +1 -1
- package/dist/conversion/metadata-passthrough.js +20 -0
- package/dist/conversion/payload-budget.js +47 -0
- package/dist/conversion/protocol-field-allowlists.d.ts +7 -0
- package/dist/conversion/protocol-field-allowlists.js +9 -0
- package/dist/conversion/{shared/protocol-state.d.ts → protocol-state.d.ts} +2 -2
- package/dist/conversion/protocol-state.js +27 -0
- package/dist/conversion/{shared/errors.d.ts → provider-protocol-error.d.ts} +0 -3
- package/dist/conversion/provider-protocol-error.js +25 -0
- package/dist/conversion/responses/responses-host-policy.js +2 -12
- package/dist/conversion/responses/responses-openai-bridge/response-payload.js +14 -87
- package/dist/conversion/responses/responses-openai-bridge/types.d.ts +2 -1
- package/dist/conversion/responses/responses-openai-bridge.d.ts +1 -1
- package/dist/conversion/responses/responses-openai-bridge.js +62 -62
- package/dist/conversion/{shared/runtime-metadata.d.ts → runtime-metadata.d.ts} +1 -1
- package/dist/conversion/runtime-metadata.js +31 -0
- package/dist/conversion/shared/anthropic-message-utils.js +170 -21
- package/dist/conversion/shared/chat-envelope-validator.js +2 -126
- package/dist/conversion/shared/chat-output-normalizer.js +2 -54
- package/dist/conversion/shared/chat-request-filters.d.ts +3 -4
- package/dist/conversion/shared/chat-request-filters.js +22 -78
- package/dist/conversion/shared/gemini-tool-utils.d.ts +1 -1
- package/dist/conversion/shared/gemini-tool-utils.js +9 -524
- package/dist/conversion/shared/openai-finalizer.js +3 -1
- package/dist/conversion/shared/openai-message-normalize.js +13 -285
- package/dist/conversion/shared/output-content-normalizer.js +9 -112
- package/dist/conversion/shared/reasoning-mapping.js +2 -6
- package/dist/conversion/shared/reasoning-normalizer.js +10 -1
- package/dist/conversion/shared/reasoning-tool-normalizer.js +14 -126
- package/dist/conversion/shared/reasoning-tool-parser.js +4 -87
- package/dist/conversion/shared/reasoning-utils.js +7 -8
- package/dist/conversion/shared/responses-conversation-store.js +5 -83
- package/dist/conversion/shared/responses-output-builder.js +63 -55
- package/dist/conversion/shared/responses-reasoning-registry.d.ts +14 -2
- package/dist/conversion/shared/responses-reasoning-registry.js +41 -7
- package/dist/conversion/shared/responses-request-adapter.d.ts +7 -1
- package/dist/conversion/shared/responses-request-adapter.js +14 -1
- package/dist/conversion/shared/responses-response-utils.js +103 -14
- package/dist/conversion/shared/responses-tool-utils.d.ts +1 -0
- package/dist/conversion/shared/responses-tool-utils.js +91 -15
- package/dist/conversion/shared/streaming-text-extractor.js +2 -7
- package/dist/conversion/shared/text-markup-normalizer/normalize.d.ts +2 -2
- package/dist/conversion/shared/text-markup-normalizer/normalize.js +43 -17
- package/dist/conversion/shared/text-markup-normalizer.d.ts +3 -2
- package/dist/conversion/shared/text-markup-normalizer.js +2 -1
- package/dist/conversion/shared/thought-signature-validator.js +3 -2
- package/dist/conversion/shared/tool-argument-repairer.js +2 -2
- package/dist/conversion/shared/tool-call-id-manager.js +5 -7
- package/dist/conversion/shared/tool-call-utils.js +3 -45
- package/dist/conversion/shared/tool-filter-pipeline.js +5 -100
- package/dist/conversion/shared/tool-governor.d.ts +6 -0
- package/dist/conversion/shared/tool-governor.js +45 -127
- package/dist/conversion/shared/tool-harvester.js +2 -8
- package/dist/conversion/shared/tool-mapping.d.ts +1 -1
- package/dist/conversion/shared/tool-mapping.js +2 -5
- package/dist/conversion/shared/tooling.d.ts +0 -4
- package/dist/conversion/shared/tooling.js +18 -0
- package/dist/conversion/{shared/snapshot-utils.d.ts → snapshot-utils.d.ts} +11 -0
- package/dist/conversion/{shared/snapshot-utils.js → snapshot-utils.js} +14 -23
- package/dist/conversion/{shared → types}/bridge-message-types.d.ts +2 -0
- package/dist/conversion/types/text-markup-normalizer.d.ts +13 -0
- package/dist/filters/special/request-tools-normalize.js +1 -1
- package/dist/filters/special/response-tool-text-canonicalize.js +2 -2
- package/dist/native/router_hotpath_napi.node +0 -0
- package/dist/quota/quota-manager.js +31 -59
- package/dist/quota/quota-state.js +14 -7
- package/dist/router/virtual-router/bootstrap/profile-builder.d.ts +1 -0
- package/dist/router/virtual-router/bootstrap/profile-builder.js +13 -0
- package/dist/router/virtual-router/bootstrap/provider-normalization.d.ts +2 -0
- package/dist/router/virtual-router/bootstrap/provider-normalization.js +4 -1
- package/dist/router/virtual-router/bootstrap/streaming-helpers.d.ts +7 -0
- package/dist/router/virtual-router/bootstrap/streaming-helpers.js +44 -0
- package/dist/router/virtual-router/bootstrap.js +2 -0
- package/dist/router/virtual-router/engine/provider-key/parse.d.ts +1 -6
- package/dist/router/virtual-router/engine/provider-key/parse.js +1 -43
- package/dist/router/virtual-router/engine/routing-state/store.d.ts +1 -2
- package/dist/router/virtual-router/engine/routing-state/store.js +50 -14
- package/dist/router/virtual-router/engine-legacy/config.d.ts +11 -0
- package/dist/router/virtual-router/engine-legacy/config.js +108 -0
- package/dist/router/virtual-router/engine-legacy/direct-model.d.ts +10 -0
- package/dist/router/virtual-router/engine-legacy/direct-model.js +38 -0
- package/dist/router/virtual-router/engine-legacy/health.d.ts +13 -0
- package/dist/router/virtual-router/engine-legacy/health.js +104 -0
- package/dist/router/virtual-router/engine-legacy/helpers.d.ts +16 -0
- package/dist/router/virtual-router/engine-legacy/helpers.js +226 -0
- package/dist/router/virtual-router/engine-legacy/route-finalize.d.ts +9 -0
- package/dist/router/virtual-router/engine-legacy/route-finalize.js +84 -0
- package/dist/router/virtual-router/engine-legacy/route-selection.d.ts +17 -0
- package/dist/router/virtual-router/engine-legacy/route-selection.js +205 -0
- package/dist/router/virtual-router/engine-legacy/route-state-allowlist.d.ts +3 -0
- package/dist/router/virtual-router/engine-legacy/route-state-allowlist.js +36 -0
- package/dist/router/virtual-router/engine-legacy/route-state.d.ts +12 -0
- package/dist/router/virtual-router/engine-legacy/route-state.js +386 -0
- package/dist/router/virtual-router/engine-legacy/route-utils.d.ts +19 -0
- package/dist/router/virtual-router/engine-legacy/route-utils.js +212 -0
- package/dist/router/virtual-router/engine-legacy/routing.d.ts +8 -0
- package/dist/router/virtual-router/engine-legacy/routing.js +8 -0
- package/dist/router/virtual-router/engine-legacy/selection-core.d.ts +28 -0
- package/dist/router/virtual-router/engine-legacy/selection-core.js +112 -0
- package/dist/router/virtual-router/engine-legacy/selection-state.d.ts +16 -0
- package/dist/router/virtual-router/engine-legacy/selection-state.js +187 -0
- package/dist/router/virtual-router/engine-legacy/state-accessors.d.ts +21 -0
- package/dist/router/virtual-router/engine-legacy/state-accessors.js +118 -0
- package/dist/router/virtual-router/engine-legacy.d.ts +123 -0
- package/dist/router/virtual-router/engine-legacy.js +194 -0
- package/dist/router/virtual-router/engine-logging.d.ts +2 -0
- package/dist/router/virtual-router/engine-logging.js +11 -5
- package/dist/router/virtual-router/engine-selection/alias-selection.js +45 -83
- package/dist/router/virtual-router/engine-selection/key-parsing.js +9 -26
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.d.ts +20 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-directive-parser.js +163 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.d.ts +7 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-directives.js +103 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.d.ts +10 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-orchestration-semantics.js +110 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.d.ts +8 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-semantics.js +281 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.d.ts +1 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminder-time-tag-semantics.js +25 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.d.ts +4 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-reminders-semantics.js +44 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.d.ts +2 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-clock-tool-schema-semantics.js +62 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.d.ts +40 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-governance-semantics.js +484 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.d.ts +9 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-governed-filter-semantics.js +64 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.d.ts +5 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-node-result-semantics.js +163 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.d.ts +1 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-post-governed-normalization-semantics.js +49 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.d.ts +30 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-servertool-orchestration-semantics.js +446 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.d.ts +1 -0
- package/dist/router/virtual-router/engine-selection/native-chat-process-web-search-intent-semantics.js +49 -0
- package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.d.ts +1 -0
- package/dist/router/virtual-router/engine-selection/native-chat-request-filter-semantics.js +54 -0
- package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +134 -0
- package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +729 -0
- package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.d.ts +72 -0
- package/dist/router/virtual-router/engine-selection/native-hub-bridge-policy-semantics.js +405 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.d.ts +18 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-edge-stage-semantics.js +317 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.d.ts +22 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-governance-semantics.js +154 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.d.ts +22 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-inbound-outbound-semantics.js +426 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.d.ts +57 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js +705 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.d.ts +46 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js +503 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +146 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js +570 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.d.ts +25 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-process-semantics.js +148 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +25 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +637 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.d.ts +11 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-session-identifiers-semantics.js +207 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.d.ts +3 -0
- package/dist/router/virtual-router/engine-selection/native-hub-pipeline-target-semantics.js +128 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.d.ts +57 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-analysis.js +217 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.d.ts +5 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +320 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.d.ts +5 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-policy.js +18 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.d.ts +25 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath-quota-buckets.js +85 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath.d.ts +59 -0
- package/dist/router/virtual-router/engine-selection/native-router-hotpath.js +117 -0
- package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +151 -0
- package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +1371 -0
- package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.d.ts +2 -0
- package/dist/router/virtual-router/engine-selection/native-snapshot-hooks.js +69 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.d.ts +16 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-alias-selection-semantics.js +96 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.d.ts +16 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-engine-proxy.js +14 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.d.ts +2 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.js +86 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.d.ts +6 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-actions-semantics.js +85 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.d.ts +9 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-semantics.js +70 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.d.ts +2 -0
- package/dist/router/virtual-router/engine-selection/native-virtual-router-stop-message-state-semantics.js +76 -0
- package/dist/router/virtual-router/engine-selection/route-utils.js +1 -1
- package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.d.ts +10 -0
- package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-session-lease.js +231 -0
- package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.d.ts +4 -0
- package/dist/router/virtual-router/engine-selection/tier-selection-antigravity-target-split.js +43 -0
- package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.d.ts +27 -0
- package/dist/router/virtual-router/engine-selection/tier-selection-quota-integration.js +216 -0
- package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +1 -1
- package/dist/router/virtual-router/engine-selection/tier-selection-select.js +128 -129
- package/dist/router/virtual-router/engine-selection/tier-selection.js +2 -265
- package/dist/router/virtual-router/engine.d.ts +22 -105
- package/dist/router/virtual-router/engine.js +274 -1632
- package/dist/router/virtual-router/features.js +2 -2
- package/dist/router/virtual-router/load-balancer.d.ts +8 -0
- package/dist/router/virtual-router/load-balancer.js +65 -2
- package/dist/router/virtual-router/provider-registry.js +2 -0
- package/dist/router/virtual-router/routing-instructions/clean.d.ts +3 -0
- package/dist/router/virtual-router/routing-instructions/clean.js +34 -0
- package/dist/router/virtual-router/routing-instructions/parse.d.ts +18 -0
- package/dist/router/virtual-router/routing-instructions/parse.js +377 -0
- package/dist/router/virtual-router/routing-instructions/state.d.ts +4 -0
- package/dist/router/virtual-router/routing-instructions/state.js +245 -0
- package/dist/router/virtual-router/routing-instructions/types.d.ts +70 -0
- package/dist/router/virtual-router/routing-instructions/types.js +2 -0
- package/dist/router/virtual-router/routing-instructions.d.ts +5 -91
- package/dist/router/virtual-router/routing-instructions.js +4 -628
- package/dist/router/virtual-router/routing-stop-message-actions.js +91 -112
- package/dist/router/virtual-router/routing-stop-message-parser.js +9 -132
- package/dist/router/virtual-router/routing-stop-message-state-codec.d.ts +1 -0
- package/dist/router/virtual-router/routing-stop-message-state-codec.js +58 -71
- package/dist/router/virtual-router/sticky-session-store.d.ts +4 -0
- package/dist/router/virtual-router/sticky-session-store.js +23 -83
- package/dist/router/virtual-router/stop-message-file-resolver.d.ts +1 -0
- package/dist/router/virtual-router/stop-message-file-resolver.js +10 -0
- package/dist/router/virtual-router/stop-message-state-sync.d.ts +1 -1
- package/dist/router/virtual-router/stop-message-state-sync.js +3 -7
- package/dist/router/virtual-router/token-counter.js +0 -9
- package/dist/router/virtual-router/tool-signals.js +21 -3
- package/dist/router/virtual-router/types.d.ts +13 -7
- package/dist/servertool/clock/config.js +23 -51
- package/dist/servertool/clock/io.js +1 -0
- package/dist/servertool/clock/session-scope.d.ts +2 -2
- package/dist/servertool/clock/session-scope.js +29 -40
- package/dist/servertool/engine.d.ts +9 -0
- package/dist/servertool/engine.js +267 -79
- package/dist/servertool/handlers/antigravity-thought-signature-bootstrap.js +3 -3
- package/dist/servertool/handlers/clock-auto.js +1 -1
- package/dist/servertool/handlers/clock.js +2 -2
- package/dist/servertool/handlers/compaction-detect.d.ts +1 -1
- package/dist/servertool/handlers/compaction-detect.js +1 -1
- package/dist/servertool/handlers/continue-execution.js +8 -4
- package/dist/servertool/handlers/followup-request-builder.js +18 -1
- package/dist/servertool/handlers/gemini-empty-reply-continue.js +8 -2
- package/dist/servertool/handlers/iflow-model-error-retry.js +1 -1
- package/dist/servertool/handlers/recursive-detection-guard.js +1 -1
- package/dist/servertool/handlers/review.d.ts +1 -0
- package/dist/servertool/handlers/review.js +180 -0
- package/dist/servertool/handlers/stop-message-auto/blocked-report.js +59 -1
- package/dist/servertool/handlers/stop-message-auto/iflow-followup.d.ts +23 -2
- package/dist/servertool/handlers/stop-message-auto/iflow-followup.js +398 -90
- package/dist/servertool/handlers/stop-message-auto/routing-state.d.ts +5 -15
- package/dist/servertool/handlers/stop-message-auto/routing-state.js +29 -55
- package/dist/servertool/handlers/stop-message-auto/runtime-utils.d.ts +6 -0
- package/dist/servertool/handlers/stop-message-auto/runtime-utils.js +36 -62
- package/dist/servertool/handlers/stop-message-auto.js +393 -77
- package/dist/servertool/handlers/vision.js +1 -1
- package/dist/servertool/handlers/web-search.js +1 -1
- package/dist/servertool/reenter-backend.js +1 -1
- package/dist/servertool/server-side-tools.d.ts +1 -0
- package/dist/servertool/server-side-tools.js +92 -54
- package/dist/servertool/stop-gateway-context.js +1 -1
- package/dist/servertool/stop-message-compare-context.js +1 -1
- package/dist/servertool/types.d.ts +17 -0
- package/dist/sse/json-to-sse/event-generators/responses.d.ts +4 -0
- package/dist/sse/json-to-sse/event-generators/responses.js +95 -1
- package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +6 -4
- package/dist/sse/sse-to-json/builders/response-builder.d.ts +8 -0
- package/dist/sse/sse-to-json/builders/response-builder.js +162 -4
- package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +2 -0
- package/dist/sse/types/responses-types.d.ts +6 -2
- package/dist/tools/apply-patch/patch-text/normalize.js +11 -0
- package/dist/tools/apply-patch/structured/coercion.js +5 -0
- package/dist/tools/args-json.js +29 -0
- package/dist/tools/exec-command/validator.d.ts +4 -1
- package/dist/tools/exec-command/validator.js +87 -3
- package/dist/tools/tool-registry.d.ts +7 -1
- package/dist/tools/tool-registry.js +3 -2
- package/package.json +121 -10
- package/dist/conversion/shared/args-mapping.js +0 -221
- package/dist/conversion/shared/bridge-actions.js +0 -881
- package/dist/conversion/shared/bridge-id-utils.js +0 -79
- package/dist/conversion/shared/bridge-metadata.js +0 -1
- package/dist/conversion/shared/bridge-policies.js +0 -195
- package/dist/conversion/shared/compaction-detect.js +0 -59
- package/dist/conversion/shared/errors.js +0 -31
- package/dist/conversion/shared/jsonish.js +0 -177
- package/dist/conversion/shared/mcp-injection.js +0 -173
- package/dist/conversion/shared/media.js +0 -9
- package/dist/conversion/shared/metadata-passthrough.js +0 -57
- package/dist/conversion/shared/payload-budget.js +0 -248
- package/dist/conversion/shared/protocol-field-allowlists.d.ts +0 -7
- package/dist/conversion/shared/protocol-field-allowlists.js +0 -149
- package/dist/conversion/shared/protocol-state.js +0 -23
- package/dist/conversion/shared/runtime-metadata.js +0 -23
- package/dist/conversion/shared/snapshot-hooks.d.ts +0 -11
- package/dist/conversion/shared/snapshot-hooks.js +0 -503
- package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.d.ts +0 -2
- package/dist/conversion/shared/text-markup-normalizer/extractors-apply-patch.js +0 -129
- package/dist/conversion/shared/text-markup-normalizer/extractors-json.d.ts +0 -4
- package/dist/conversion/shared/text-markup-normalizer/extractors-json.js +0 -637
- package/dist/conversion/shared/text-markup-normalizer/extractors-shared.d.ts +0 -21
- package/dist/conversion/shared/text-markup-normalizer/extractors-shared.js +0 -177
- package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.d.ts +0 -5
- package/dist/conversion/shared/text-markup-normalizer/extractors-transcript.js +0 -385
- package/dist/conversion/shared/text-markup-normalizer/extractors-xml.d.ts +0 -10
- package/dist/conversion/shared/text-markup-normalizer/extractors-xml.js +0 -602
- package/dist/conversion/shared/text-markup-normalizer/extractors.d.ts +0 -5
- package/dist/conversion/shared/text-markup-normalizer/extractors.js +0 -4
- package/dist/conversion/shared/tool-canonicalizer.d.ts +0 -2
- package/dist/conversion/shared/tool-canonicalizer.js +0 -42
- package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.d.ts +0 -18
- package/dist/servertool/handlers/stop-message-stage-policy/bd-runtime.js +0 -398
- package/dist/servertool/handlers/stop-message-stage-policy/decision.d.ts +0 -9
- package/dist/servertool/handlers/stop-message-stage-policy/decision.js +0 -127
- package/dist/servertool/handlers/stop-message-stage-policy/observation.d.ts +0 -2
- package/dist/servertool/handlers/stop-message-stage-policy/observation.js +0 -179
- package/dist/servertool/handlers/stop-message-stage-policy/templates.d.ts +0 -4
- package/dist/servertool/handlers/stop-message-stage-policy/templates.js +0 -96
- package/dist/servertool/handlers/stop-message-stage-policy/text-utils.d.ts +0 -9
- package/dist/servertool/handlers/stop-message-stage-policy/text-utils.js +0 -89
- package/dist/servertool/handlers/stop-message-stage-policy/types.d.ts +0 -59
- package/dist/servertool/handlers/stop-message-stage-policy.d.ts +0 -3
- package/dist/servertool/handlers/stop-message-stage-policy.js +0 -2
- /package/dist/conversion/{shared/args-mapping.d.ts → args-mapping.d.ts} +0 -0
- /package/dist/conversion/{shared/bridge-actions.d.ts → bridge-actions.d.ts} +0 -0
- /package/dist/conversion/{shared/bridge-id-utils.d.ts → bridge-id-utils.d.ts} +0 -0
- /package/dist/conversion/{shared/bridge-instructions.d.ts → bridge-instructions.d.ts} +0 -0
- /package/dist/conversion/{shared/bridge-policies.d.ts → bridge-policies.d.ts} +0 -0
- /package/dist/conversion/{shared/jsonish.d.ts → jsonish.d.ts} +0 -0
- /package/dist/conversion/{shared/mcp-injection.d.ts → mcp-injection.d.ts} +0 -0
- /package/dist/conversion/{shared/media.d.ts → media.d.ts} +0 -0
- /package/dist/conversion/{shared/payload-budget.d.ts → payload-budget.d.ts} +0 -0
- /package/dist/conversion/{shared → types}/bridge-message-types.js +0 -0
- /package/dist/{servertool/handlers/stop-message-stage-policy/types.js → conversion/types/text-markup-normalizer.js} +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Readable } from 'node:stream';
|
|
2
2
|
import { isJsonObject, jsonClone } from '../types/json.js';
|
|
3
3
|
import { VirtualRouterEngine } from '../../../router/virtual-router/engine.js';
|
|
4
|
-
import { parseRoutingInstructions } from '../../../router/virtual-router/routing-instructions.js';
|
|
5
4
|
import { providerErrorCenter } from '../../../router/virtual-router/error-center.js';
|
|
6
5
|
import { providerSuccessCenter } from '../../../router/virtual-router/success-center.js';
|
|
7
6
|
import { defaultSseCodecRegistry } from '../../../sse/index.js';
|
|
@@ -14,10 +13,11 @@ import { GeminiSemanticMapper } from '../semantic-mappers/gemini-mapper.js';
|
|
|
14
13
|
import { ChatFormatAdapter } from '../format-adapters/chat-format-adapter.js';
|
|
15
14
|
import { ChatSemanticMapper } from '../semantic-mappers/chat-mapper.js';
|
|
16
15
|
import { createSnapshotRecorder } from '../snapshot-recorder.js';
|
|
17
|
-
import { shouldRecordSnapshots } from '../../
|
|
16
|
+
import { shouldRecordSnapshots } from '../../snapshot-utils.js';
|
|
18
17
|
import { runReqInboundStage1FormatParse } from './stages/req_inbound/req_inbound_stage1_format_parse/index.js';
|
|
19
18
|
import { runReqInboundStage2SemanticMap } from './stages/req_inbound/req_inbound_stage2_semantic_map/index.js';
|
|
20
19
|
import { runChatContextCapture, captureResponsesContextSnapshot } from './stages/req_inbound/req_inbound_stage3_context_capture/index.js';
|
|
20
|
+
import { normalizeReqInboundToolCallIdStyleWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
|
|
21
21
|
import { createResponsesContextCapture, createNoopContextCapture } from './stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js';
|
|
22
22
|
import { runReqProcessStage1ToolGovernance } from './stages/req_process/req_process_stage1_tool_governance/index.js';
|
|
23
23
|
import { runReqProcessStage2RouteSelect } from './stages/req_process/req_process_stage2_route_select/index.js';
|
|
@@ -26,11 +26,12 @@ import { runReqOutboundStage2FormatBuild } from './stages/req_outbound/req_outbo
|
|
|
26
26
|
import { runReqOutboundStage3Compat } from './stages/req_outbound/req_outbound_stage3_compat/index.js';
|
|
27
27
|
import { extractSessionIdentifiersFromMetadata } from './session-identifiers.js';
|
|
28
28
|
import { computeRequestTokens } from '../../../router/virtual-router/token-estimator.js';
|
|
29
|
-
import {
|
|
29
|
+
import { annotatePassthroughGovernanceSkipWithNative, attachPassthroughProviderInputAuditWithNative, buildPassthroughAuditWithNative, applyOutboundStreamPreferenceWithNative, normalizeHubEndpointWithNative, extractAdapterContextMetadataFieldsWithNative, resolveApplyPatchToolModeFromToolsWithNative, resolveHubClientProtocolWithNative, resolveHubPolicyOverrideFromMetadataWithNative, resolveHubProviderProtocolWithNative, resolveOutboundStreamIntentWithNative, resolveHubShadowCompareConfigWithNative, resolveActiveProcessModeWithNative, findMappableSemanticsKeysWithNative, resolveHubSseProtocolFromMetadataWithNative, resolveStopMessageRouterMetadataWithNative, runHubPipelineOrchestrationWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-orchestration-semantics.js';
|
|
30
|
+
import { normalizeAliasMapWithNative, resolveAliasMapFromRespSemanticsWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js';
|
|
31
|
+
import { isCompactionRequest } from '../../compaction-detect.js';
|
|
30
32
|
import { applyHubProviderOutboundPolicy, recordHubPolicyObservation, setHubPolicyRuntimePolicy } from '../policy/policy-engine.js';
|
|
31
33
|
import { applyProviderOutboundToolSurface } from '../tool-surface/tool-surface-engine.js';
|
|
32
|
-
import {
|
|
33
|
-
import { cloneRuntimeMetadata, ensureRuntimeMetadata, readRuntimeMetadata } from '../../shared/runtime-metadata.js';
|
|
34
|
+
import { cloneRuntimeMetadata, ensureRuntimeMetadata, readRuntimeMetadata } from '../../runtime-metadata.js';
|
|
34
35
|
function isTruthyEnv(value) {
|
|
35
36
|
const v = typeof value === 'string' ? value.trim().toLowerCase() : '';
|
|
36
37
|
return v === '1' || v === 'true' || v === 'yes' || v === 'on';
|
|
@@ -49,142 +50,51 @@ function resolveApplyPatchToolModeFromEnv() {
|
|
|
49
50
|
return undefined;
|
|
50
51
|
}
|
|
51
52
|
function resolveApplyPatchToolModeFromTools(toolsRaw) {
|
|
52
|
-
|
|
53
|
-
return undefined;
|
|
54
|
-
}
|
|
55
|
-
for (const entry of toolsRaw) {
|
|
56
|
-
if (!entry || typeof entry !== 'object' || Array.isArray(entry))
|
|
57
|
-
continue;
|
|
58
|
-
const record = entry;
|
|
59
|
-
const type = typeof record.type === 'string' ? record.type.trim().toLowerCase() : '';
|
|
60
|
-
if (type && type !== 'function')
|
|
61
|
-
continue;
|
|
62
|
-
const fn = record.function && typeof record.function === 'object' && !Array.isArray(record.function)
|
|
63
|
-
? record.function
|
|
64
|
-
: undefined;
|
|
65
|
-
const name = typeof fn?.name === 'string' ? fn.name.trim().toLowerCase() : '';
|
|
66
|
-
if (name !== 'apply_patch')
|
|
67
|
-
continue;
|
|
68
|
-
const format = typeof record.format === 'string'
|
|
69
|
-
? record.format.trim().toLowerCase()
|
|
70
|
-
: typeof fn?.format === 'string'
|
|
71
|
-
? String(fn.format).trim().toLowerCase()
|
|
72
|
-
: '';
|
|
73
|
-
if (format === 'freeform')
|
|
74
|
-
return 'freeform';
|
|
75
|
-
// If apply_patch is present without explicit freeform marker, default to schema mode.
|
|
76
|
-
return 'schema';
|
|
77
|
-
}
|
|
78
|
-
return undefined;
|
|
53
|
+
return resolveApplyPatchToolModeFromToolsWithNative(toolsRaw);
|
|
79
54
|
}
|
|
80
55
|
function extractHubPolicyOverride(metadata) {
|
|
81
|
-
const
|
|
82
|
-
if (!
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
const obj = raw;
|
|
86
|
-
const mode = typeof obj.mode === 'string' ? obj.mode.trim().toLowerCase() : '';
|
|
87
|
-
const sampleRate = typeof obj.sampleRate === 'number' && Number.isFinite(obj.sampleRate) ? obj.sampleRate : undefined;
|
|
88
|
-
if (mode !== 'off' && mode !== 'observe' && mode !== 'enforce') {
|
|
56
|
+
const parsed = resolveHubPolicyOverrideFromMetadataWithNative(metadata);
|
|
57
|
+
if (!parsed) {
|
|
89
58
|
return undefined;
|
|
90
59
|
}
|
|
91
60
|
return {
|
|
92
|
-
mode: mode,
|
|
93
|
-
...(sampleRate !== undefined ? { sampleRate } : {})
|
|
61
|
+
mode: parsed.mode,
|
|
62
|
+
...(parsed.sampleRate !== undefined ? { sampleRate: parsed.sampleRate } : {})
|
|
94
63
|
};
|
|
95
64
|
}
|
|
65
|
+
function propagateAdapterContextMetadataFields(adapterContext, metadata, keys) {
|
|
66
|
+
const picked = extractAdapterContextMetadataFieldsWithNative(metadata, keys);
|
|
67
|
+
Object.assign(adapterContext, picked);
|
|
68
|
+
}
|
|
69
|
+
function resolveStopMessageRouterMetadata(metadata) {
|
|
70
|
+
return resolveStopMessageRouterMetadataWithNative(metadata);
|
|
71
|
+
}
|
|
96
72
|
function extractHubShadowCompareConfig(metadata) {
|
|
97
|
-
const
|
|
98
|
-
if (!
|
|
99
|
-
return undefined;
|
|
100
|
-
}
|
|
101
|
-
const obj = raw;
|
|
102
|
-
const modeCandidate = typeof obj.baselineMode === 'string'
|
|
103
|
-
? obj.baselineMode.trim().toLowerCase()
|
|
104
|
-
: typeof obj.mode === 'string'
|
|
105
|
-
? obj.mode.trim().toLowerCase()
|
|
106
|
-
: '';
|
|
107
|
-
if (modeCandidate !== 'off' && modeCandidate !== 'observe' && modeCandidate !== 'enforce') {
|
|
73
|
+
const parsed = resolveHubShadowCompareConfigWithNative(metadata);
|
|
74
|
+
if (!parsed) {
|
|
108
75
|
return undefined;
|
|
109
76
|
}
|
|
110
|
-
return { baselineMode:
|
|
111
|
-
}
|
|
112
|
-
const PASSTHROUGH_CANONICAL_CHAT_KEYS = new Set([
|
|
113
|
-
'model',
|
|
114
|
-
'messages',
|
|
115
|
-
'tools',
|
|
116
|
-
'parameters',
|
|
117
|
-
'metadata',
|
|
118
|
-
'semantics',
|
|
119
|
-
'stream'
|
|
120
|
-
]);
|
|
121
|
-
function cloneJsonRecord(payload) {
|
|
122
|
-
try {
|
|
123
|
-
return jsonClone(payload);
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
return { ...payload };
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
function collectPassthroughTodoTopLevelKeys(payload) {
|
|
130
|
-
return Object.keys(payload)
|
|
131
|
-
.filter((key) => !PASSTHROUGH_CANONICAL_CHAT_KEYS.has(key))
|
|
132
|
-
.sort();
|
|
77
|
+
return { baselineMode: parsed.baselineMode };
|
|
133
78
|
}
|
|
134
79
|
function buildPassthroughAudit(rawInbound, providerProtocol) {
|
|
135
|
-
return
|
|
136
|
-
raw: {
|
|
137
|
-
inbound: cloneJsonRecord(rawInbound)
|
|
138
|
-
},
|
|
139
|
-
todo: {
|
|
140
|
-
inbound: {
|
|
141
|
-
unmappedTopLevelKeys: collectPassthroughTodoTopLevelKeys(rawInbound),
|
|
142
|
-
providerProtocol,
|
|
143
|
-
note: 'passthrough_mode_parse_record_only'
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
};
|
|
80
|
+
return buildPassthroughAuditWithNative(rawInbound, providerProtocol);
|
|
147
81
|
}
|
|
148
82
|
function annotatePassthroughGovernanceSkip(audit) {
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
reason: 'process_mode_passthrough'
|
|
155
|
-
};
|
|
83
|
+
const next = annotatePassthroughGovernanceSkipWithNative(audit);
|
|
84
|
+
for (const key of Object.keys(audit)) {
|
|
85
|
+
delete audit[key];
|
|
86
|
+
}
|
|
87
|
+
Object.assign(audit, next);
|
|
156
88
|
}
|
|
157
89
|
function attachPassthroughProviderInputAudit(audit, providerPayload, providerProtocol) {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
raw.providerInput = cloneJsonRecord(providerPayload);
|
|
162
|
-
const todo = audit.todo && typeof audit.todo === 'object' && !Array.isArray(audit.todo)
|
|
163
|
-
? audit.todo
|
|
164
|
-
: (audit.todo = {});
|
|
165
|
-
todo.outbound = {
|
|
166
|
-
unmappedTopLevelKeys: collectPassthroughTodoTopLevelKeys(providerPayload),
|
|
167
|
-
providerProtocol,
|
|
168
|
-
note: 'provider_payload_not_mapped_back_to_chat_semantics'
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
function hasInstructionRequestedPassthrough(messages) {
|
|
172
|
-
if (!Array.isArray(messages) || messages.length === 0) {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
try {
|
|
176
|
-
const instructions = parseRoutingInstructions(messages);
|
|
177
|
-
return instructions.some((instruction) => instruction.processMode === 'passthrough');
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
return false;
|
|
90
|
+
const next = attachPassthroughProviderInputAuditWithNative(audit, providerPayload, providerProtocol);
|
|
91
|
+
for (const key of Object.keys(audit)) {
|
|
92
|
+
delete audit[key];
|
|
181
93
|
}
|
|
94
|
+
Object.assign(audit, next);
|
|
182
95
|
}
|
|
183
96
|
function resolveActiveProcessMode(baseMode, messages) {
|
|
184
|
-
|
|
185
|
-
return 'passthrough';
|
|
186
|
-
}
|
|
187
|
-
return hasInstructionRequestedPassthrough(messages) ? 'passthrough' : 'chat';
|
|
97
|
+
return resolveActiveProcessModeWithNative(baseMode, messages);
|
|
188
98
|
}
|
|
189
99
|
export class HubPipeline {
|
|
190
100
|
routerEngine;
|
|
@@ -279,7 +189,6 @@ export class HubPipeline {
|
|
|
279
189
|
}
|
|
280
190
|
}
|
|
281
191
|
async executeRequestStagePipeline(normalized, hooks) {
|
|
282
|
-
const formatAdapter = hooks.createFormatAdapter();
|
|
283
192
|
const semanticMapper = hooks.createSemanticMapper();
|
|
284
193
|
const rawRequest = this.asJsonObject(normalized.payload);
|
|
285
194
|
// Detect applyPatchToolMode (runtime/tooling hint). Client tool schemas are captured as chat semantics
|
|
@@ -320,7 +229,6 @@ export class HubPipeline {
|
|
|
320
229
|
const formatEnvelope = await runReqInboundStage1FormatParse({
|
|
321
230
|
rawRequest,
|
|
322
231
|
adapterContext: inboundAdapterContext,
|
|
323
|
-
formatAdapter,
|
|
324
232
|
stageRecorder: inboundRecorder
|
|
325
233
|
});
|
|
326
234
|
const responsesResumeFromMetadata = normalized.metadata && typeof normalized.metadata.responsesResume === 'object'
|
|
@@ -483,6 +391,11 @@ export class HubPipeline {
|
|
|
483
391
|
normalized.metadata.conversationId = sessionIdentifiers.conversationId;
|
|
484
392
|
}
|
|
485
393
|
const disableStickyRoutes = readRuntimeMetadata(normalized.metadata)?.disableStickyRoutes === true;
|
|
394
|
+
const stopMessageRouterMetadata = resolveStopMessageRouterMetadata(normalized.metadata);
|
|
395
|
+
const estimatedInputTokens = (() => {
|
|
396
|
+
const value = normalized.metadata?.estimatedInputTokens;
|
|
397
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
398
|
+
})();
|
|
486
399
|
const metadataInput = {
|
|
487
400
|
requestId: normalized.id,
|
|
488
401
|
entryEndpoint: normalized.entryEndpoint,
|
|
@@ -493,10 +406,12 @@ export class HubPipeline {
|
|
|
493
406
|
routeHint: normalized.routeHint,
|
|
494
407
|
stage: normalized.stage,
|
|
495
408
|
responsesResume: responsesResume,
|
|
409
|
+
...(estimatedInputTokens !== undefined ? { estimatedInputTokens } : {}),
|
|
496
410
|
...(disableStickyRoutes ? { disableStickyRoutes: true } : {}),
|
|
497
411
|
...(serverToolRequired ? { serverToolRequired: true } : {}),
|
|
498
412
|
...(sessionIdentifiers.sessionId ? { sessionId: sessionIdentifiers.sessionId } : {}),
|
|
499
|
-
...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {})
|
|
413
|
+
...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {}),
|
|
414
|
+
...stopMessageRouterMetadata
|
|
500
415
|
};
|
|
501
416
|
const routing = runReqProcessStage2RouteSelect({
|
|
502
417
|
routerEngine: this.routerEngine,
|
|
@@ -531,6 +446,7 @@ export class HubPipeline {
|
|
|
531
446
|
}
|
|
532
447
|
const outboundStream = this.resolveOutboundStreamIntent(routing.target?.streaming);
|
|
533
448
|
workingRequest = this.applyOutboundStreamPreference(workingRequest, outboundStream, activeProcessMode);
|
|
449
|
+
this.applyMaxTokensPolicy(workingRequest, routing.target);
|
|
534
450
|
const outboundAdapterContext = this.buildAdapterContext(normalized, routing.target);
|
|
535
451
|
if (routing.target?.compatibilityProfile) {
|
|
536
452
|
outboundAdapterContext.compatibilityProfile = routing.target.compatibilityProfile;
|
|
@@ -549,7 +465,7 @@ export class HubPipeline {
|
|
|
549
465
|
let providerPayload;
|
|
550
466
|
let shadowBaselineProviderPayload;
|
|
551
467
|
if (activeProcessMode === 'passthrough') {
|
|
552
|
-
providerPayload =
|
|
468
|
+
providerPayload = jsonClone(rawRequest);
|
|
553
469
|
if (typeof outboundStream === 'boolean') {
|
|
554
470
|
providerPayload.stream = outboundStream;
|
|
555
471
|
}
|
|
@@ -564,7 +480,6 @@ export class HubPipeline {
|
|
|
564
480
|
throw new Error(`[HubPipeline] Unsupported provider protocol for hub pipeline: ${outboundProtocol}`);
|
|
565
481
|
}
|
|
566
482
|
const outboundSemanticMapper = protocolSwitch ? outboundHooks.createSemanticMapper() : semanticMapper;
|
|
567
|
-
const outboundFormatAdapter = protocolSwitch ? outboundHooks.createFormatAdapter() : formatAdapter;
|
|
568
483
|
const outboundContextMetadataKey = protocolSwitch ? outboundHooks.contextMetadataKey : hooks.contextMetadataKey;
|
|
569
484
|
const outboundContextSnapshot = protocolSwitch ? undefined : contextSnapshot;
|
|
570
485
|
const outboundStage1 = await runReqOutboundStage1SemanticMap({
|
|
@@ -577,8 +492,6 @@ export class HubPipeline {
|
|
|
577
492
|
});
|
|
578
493
|
let formattedPayload = await runReqOutboundStage2FormatBuild({
|
|
579
494
|
formatEnvelope: outboundStage1.formatEnvelope,
|
|
580
|
-
adapterContext: outboundAdapterContext,
|
|
581
|
-
formatAdapter: outboundFormatAdapter,
|
|
582
495
|
stageRecorder: outboundRecorder
|
|
583
496
|
});
|
|
584
497
|
formattedPayload = await runReqOutboundStage3Compat({
|
|
@@ -734,11 +647,10 @@ export class HubPipeline {
|
|
|
734
647
|
};
|
|
735
648
|
}
|
|
736
649
|
resolveClientProtocol(entryEndpoint) {
|
|
737
|
-
const
|
|
738
|
-
if (
|
|
739
|
-
return
|
|
740
|
-
|
|
741
|
-
return 'anthropic-messages';
|
|
650
|
+
const protocol = resolveHubClientProtocolWithNative(entryEndpoint);
|
|
651
|
+
if (protocol === 'openai-responses' || protocol === 'anthropic-messages' || protocol === 'openai-chat') {
|
|
652
|
+
return protocol;
|
|
653
|
+
}
|
|
742
654
|
return 'openai-chat';
|
|
743
655
|
}
|
|
744
656
|
coerceStandardizedRequestFromPayload(payload, normalized) {
|
|
@@ -964,6 +876,7 @@ export class HubPipeline {
|
|
|
964
876
|
normalized.metadata.conversationId = sessionIdentifiers.conversationId;
|
|
965
877
|
}
|
|
966
878
|
const disableStickyRoutes = readRuntimeMetadata(normalized.metadata)?.disableStickyRoutes === true;
|
|
879
|
+
const stopMessageRouterMetadata = resolveStopMessageRouterMetadata(normalized.metadata);
|
|
967
880
|
const metadataInput = {
|
|
968
881
|
requestId: normalized.id,
|
|
969
882
|
entryEndpoint: normalized.entryEndpoint,
|
|
@@ -977,7 +890,8 @@ export class HubPipeline {
|
|
|
977
890
|
...(disableStickyRoutes ? { disableStickyRoutes: true } : {}),
|
|
978
891
|
...(serverToolRequired ? { serverToolRequired: true } : {}),
|
|
979
892
|
...(sessionIdentifiers.sessionId ? { sessionId: sessionIdentifiers.sessionId } : {}),
|
|
980
|
-
...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {})
|
|
893
|
+
...(sessionIdentifiers.conversationId ? { conversationId: sessionIdentifiers.conversationId } : {}),
|
|
894
|
+
...stopMessageRouterMetadata
|
|
981
895
|
};
|
|
982
896
|
const routing = runReqProcessStage2RouteSelect({
|
|
983
897
|
routerEngine: this.routerEngine,
|
|
@@ -1026,7 +940,7 @@ export class HubPipeline {
|
|
|
1026
940
|
const outboundStart = Date.now();
|
|
1027
941
|
let providerPayload;
|
|
1028
942
|
if (activeProcessMode === 'passthrough') {
|
|
1029
|
-
providerPayload =
|
|
943
|
+
providerPayload = jsonClone(rawPayloadInput);
|
|
1030
944
|
if (typeof outboundStream === 'boolean') {
|
|
1031
945
|
providerPayload.stream = outboundStream;
|
|
1032
946
|
}
|
|
@@ -1041,7 +955,6 @@ export class HubPipeline {
|
|
|
1041
955
|
throw new Error(`[HubPipeline] Unsupported provider protocol for hub pipeline: ${outboundProtocol}`);
|
|
1042
956
|
}
|
|
1043
957
|
const outboundSemanticMapper = protocolSwitch ? outboundHooks.createSemanticMapper() : hooks.createSemanticMapper();
|
|
1044
|
-
const outboundFormatAdapter = protocolSwitch ? outboundHooks.createFormatAdapter() : hooks.createFormatAdapter();
|
|
1045
958
|
const outboundContextMetadataKey = protocolSwitch ? outboundHooks.contextMetadataKey : hooks.contextMetadataKey;
|
|
1046
959
|
const outboundContextSnapshot = undefined;
|
|
1047
960
|
const outboundStage1 = await runReqOutboundStage1SemanticMap({
|
|
@@ -1054,8 +967,6 @@ export class HubPipeline {
|
|
|
1054
967
|
});
|
|
1055
968
|
let formattedPayload = await runReqOutboundStage2FormatBuild({
|
|
1056
969
|
formatEnvelope: outboundStage1.formatEnvelope,
|
|
1057
|
-
adapterContext: outboundAdapterContext,
|
|
1058
|
-
formatAdapter: outboundFormatAdapter,
|
|
1059
970
|
stageRecorder: outboundRecorder
|
|
1060
971
|
});
|
|
1061
972
|
formattedPayload = await runReqOutboundStage3Compat({
|
|
@@ -1260,7 +1171,7 @@ export class HubPipeline {
|
|
|
1260
1171
|
// Never inherit stale top-level metadata.compatibilityProfile from a previous hop.
|
|
1261
1172
|
const compatibilityProfile = target ? targetCompatProfile : metadataCompatProfile;
|
|
1262
1173
|
const streamingHint = normalized.stream === true ? 'force' : normalized.stream === false ? 'disable' : 'auto';
|
|
1263
|
-
const toolCallIdStyle =
|
|
1174
|
+
const toolCallIdStyle = normalizeReqInboundToolCallIdStyleWithNative(metadata.toolCallIdStyle);
|
|
1264
1175
|
const adapterContext = {
|
|
1265
1176
|
requestId: normalized.id,
|
|
1266
1177
|
entryEndpoint: normalized.entryEndpoint || '/v1/chat/completions',
|
|
@@ -1338,6 +1249,23 @@ export class HubPipeline {
|
|
|
1338
1249
|
if (conversationId) {
|
|
1339
1250
|
adapterContext.conversationId = conversationId;
|
|
1340
1251
|
}
|
|
1252
|
+
propagateAdapterContextMetadataFields(adapterContext, metadata, [
|
|
1253
|
+
'clockDaemonId',
|
|
1254
|
+
'clockClientDaemonId',
|
|
1255
|
+
'clock_daemon_id',
|
|
1256
|
+
'clock_client_daemon_id',
|
|
1257
|
+
'tmuxSessionId',
|
|
1258
|
+
'tmux_session_id',
|
|
1259
|
+
'clientType',
|
|
1260
|
+
'clockClientType',
|
|
1261
|
+
'clientInjectReady',
|
|
1262
|
+
'clientInjectReason',
|
|
1263
|
+
'client_inject_ready',
|
|
1264
|
+
'client_inject_reason',
|
|
1265
|
+
'workdir',
|
|
1266
|
+
'cwd',
|
|
1267
|
+
'workingDirectory'
|
|
1268
|
+
]);
|
|
1341
1269
|
const clientConnectionState = metadata.clientConnectionState;
|
|
1342
1270
|
if (clientConnectionState && typeof clientConnectionState === 'object' && !Array.isArray(clientConnectionState)) {
|
|
1343
1271
|
const stateRecord = clientConnectionState;
|
|
@@ -1356,6 +1284,47 @@ export class HubPipeline {
|
|
|
1356
1284
|
}
|
|
1357
1285
|
return adapterContext;
|
|
1358
1286
|
}
|
|
1287
|
+
applyMaxTokensPolicy(request, target) {
|
|
1288
|
+
if (!target) {
|
|
1289
|
+
return;
|
|
1290
|
+
}
|
|
1291
|
+
const params = request.parameters || (request.parameters = {});
|
|
1292
|
+
const direct = typeof params.max_tokens === 'number' && Number.isFinite(params.max_tokens)
|
|
1293
|
+
? Math.floor(params.max_tokens)
|
|
1294
|
+
: undefined;
|
|
1295
|
+
const maxOutputRaw = typeof params.max_output_tokens === 'number' &&
|
|
1296
|
+
Number.isFinite(params.max_output_tokens)
|
|
1297
|
+
? Math.floor(params.max_output_tokens)
|
|
1298
|
+
: undefined;
|
|
1299
|
+
let desired = direct ?? maxOutputRaw;
|
|
1300
|
+
// Default max tokens = 8k when client does not set.
|
|
1301
|
+
if (!desired || desired <= 0) {
|
|
1302
|
+
desired = 8192;
|
|
1303
|
+
}
|
|
1304
|
+
let providerCap = typeof target.maxOutputTokens === 'number' && Number.isFinite(target.maxOutputTokens)
|
|
1305
|
+
? Math.floor(target.maxOutputTokens)
|
|
1306
|
+
: undefined;
|
|
1307
|
+
if (!providerCap) {
|
|
1308
|
+
const registry = this.routerEngine
|
|
1309
|
+
.providerRegistry;
|
|
1310
|
+
const profile = registry?.get?.(target.providerKey);
|
|
1311
|
+
const candidate = typeof profile?.maxOutputTokens === 'number' && Number.isFinite(profile.maxOutputTokens)
|
|
1312
|
+
? Math.floor(profile.maxOutputTokens)
|
|
1313
|
+
: undefined;
|
|
1314
|
+
if (candidate && candidate > 0) {
|
|
1315
|
+
providerCap = candidate;
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
if (providerCap && providerCap > 0) {
|
|
1319
|
+
desired = Math.min(desired, providerCap);
|
|
1320
|
+
}
|
|
1321
|
+
if (desired && desired > 0) {
|
|
1322
|
+
params.max_tokens = desired;
|
|
1323
|
+
if (params.max_output_tokens !== undefined) {
|
|
1324
|
+
params.max_output_tokens = desired;
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1359
1328
|
maybeCreateStageRecorder(context, endpoint, options) {
|
|
1360
1329
|
if (options?.disableSnapshots === true) {
|
|
1361
1330
|
return undefined;
|
|
@@ -1418,12 +1387,45 @@ export class HubPipeline {
|
|
|
1418
1387
|
const stream = Boolean(metadataRecord.stream ||
|
|
1419
1388
|
resolvedReadable ||
|
|
1420
1389
|
(request.payload && typeof request.payload === 'object' && request.payload.stream));
|
|
1421
|
-
|
|
1390
|
+
let payload = await this.materializePayload(request.payload, {
|
|
1422
1391
|
requestId: id,
|
|
1423
1392
|
entryEndpoint,
|
|
1424
1393
|
providerProtocol,
|
|
1425
1394
|
metadata: metadataRecord
|
|
1426
1395
|
}, resolvedReadable);
|
|
1396
|
+
const routeHint = typeof metadataRecord.routeHint === 'string' ? metadataRecord.routeHint : undefined;
|
|
1397
|
+
const orchestrationResult = runHubPipelineOrchestrationWithNative({
|
|
1398
|
+
requestId: id,
|
|
1399
|
+
endpoint,
|
|
1400
|
+
entryEndpoint,
|
|
1401
|
+
providerProtocol,
|
|
1402
|
+
payload,
|
|
1403
|
+
metadata: {
|
|
1404
|
+
entryEndpoint,
|
|
1405
|
+
providerProtocol,
|
|
1406
|
+
processMode,
|
|
1407
|
+
direction,
|
|
1408
|
+
stage,
|
|
1409
|
+
stream,
|
|
1410
|
+
...(routeHint ? { routeHint } : {})
|
|
1411
|
+
},
|
|
1412
|
+
stream,
|
|
1413
|
+
processMode,
|
|
1414
|
+
direction,
|
|
1415
|
+
stage
|
|
1416
|
+
});
|
|
1417
|
+
if (!orchestrationResult.success) {
|
|
1418
|
+
const code = orchestrationResult.error && typeof orchestrationResult.error.code === 'string'
|
|
1419
|
+
? orchestrationResult.error.code.trim()
|
|
1420
|
+
: 'hub_pipeline_native_failed';
|
|
1421
|
+
const message = orchestrationResult.error && typeof orchestrationResult.error.message === 'string'
|
|
1422
|
+
? orchestrationResult.error.message.trim()
|
|
1423
|
+
: 'Native hub pipeline orchestration failed';
|
|
1424
|
+
throw new Error(`[${code}] ${message}`);
|
|
1425
|
+
}
|
|
1426
|
+
if (orchestrationResult.payload) {
|
|
1427
|
+
payload = orchestrationResult.payload;
|
|
1428
|
+
}
|
|
1427
1429
|
const normalizedMetadata = {
|
|
1428
1430
|
...metadataRecord,
|
|
1429
1431
|
entryEndpoint,
|
|
@@ -1431,9 +1433,9 @@ export class HubPipeline {
|
|
|
1431
1433
|
processMode,
|
|
1432
1434
|
direction,
|
|
1433
1435
|
stage,
|
|
1434
|
-
stream
|
|
1436
|
+
stream,
|
|
1437
|
+
...(orchestrationResult.metadata ?? {})
|
|
1435
1438
|
};
|
|
1436
|
-
const routeHint = typeof metadataRecord.routeHint === 'string' ? metadataRecord.routeHint : undefined;
|
|
1437
1439
|
if (routeHint) {
|
|
1438
1440
|
normalizedMetadata.routeHint = routeHint;
|
|
1439
1441
|
}
|
|
@@ -1538,156 +1540,54 @@ export class HubPipeline {
|
|
|
1538
1540
|
return undefined;
|
|
1539
1541
|
}
|
|
1540
1542
|
resolveOutboundStreamIntent(providerPreference) {
|
|
1541
|
-
|
|
1542
|
-
return true;
|
|
1543
|
-
}
|
|
1544
|
-
if (providerPreference === 'never') {
|
|
1545
|
-
return false;
|
|
1546
|
-
}
|
|
1547
|
-
return undefined;
|
|
1543
|
+
return resolveOutboundStreamIntentWithNative(providerPreference);
|
|
1548
1544
|
}
|
|
1549
1545
|
applyOutboundStreamPreference(request, stream, processMode) {
|
|
1550
1546
|
if (!request || typeof request !== 'object') {
|
|
1551
1547
|
return request;
|
|
1552
1548
|
}
|
|
1553
|
-
|
|
1554
|
-
return request;
|
|
1555
|
-
}
|
|
1556
|
-
const ops = [];
|
|
1557
|
-
if (typeof stream === 'boolean') {
|
|
1558
|
-
ops.push({ op: 'set_request_parameter_fields', fields: { stream } });
|
|
1559
|
-
ops.push({ op: 'set_request_metadata_fields', fields: { outboundStream: stream } });
|
|
1560
|
-
}
|
|
1561
|
-
else {
|
|
1562
|
-
ops.push({ op: 'unset_request_parameter_keys', keys: ['stream'] });
|
|
1563
|
-
ops.push({ op: 'unset_request_metadata_keys', keys: ['outboundStream'] });
|
|
1564
|
-
}
|
|
1565
|
-
return applyHubOperations(request, ops);
|
|
1566
|
-
}
|
|
1567
|
-
}
|
|
1568
|
-
function normalizeToolCallIdStyleCandidate(value) {
|
|
1569
|
-
if (typeof value !== 'string') {
|
|
1570
|
-
return undefined;
|
|
1571
|
-
}
|
|
1572
|
-
const normalized = value.trim().toLowerCase();
|
|
1573
|
-
if (normalized === 'fc') {
|
|
1574
|
-
return 'fc';
|
|
1549
|
+
return applyOutboundStreamPreferenceWithNative(request, stream, processMode);
|
|
1575
1550
|
}
|
|
1576
|
-
if (normalized === 'preserve') {
|
|
1577
|
-
return 'preserve';
|
|
1578
|
-
}
|
|
1579
|
-
return undefined;
|
|
1580
1551
|
}
|
|
1581
1552
|
function normalizeEndpoint(endpoint) {
|
|
1582
|
-
|
|
1583
|
-
return '/v1/chat/completions';
|
|
1584
|
-
const trimmed = endpoint.trim();
|
|
1585
|
-
if (!trimmed)
|
|
1586
|
-
return '/v1/chat/completions';
|
|
1587
|
-
const normalized = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
|
|
1588
|
-
return normalized.replace(/\/{2,}/g, '/');
|
|
1553
|
+
return normalizeHubEndpointWithNative(endpoint);
|
|
1589
1554
|
}
|
|
1590
1555
|
function resolveProviderProtocol(value) {
|
|
1591
|
-
|
|
1592
|
-
|
|
1556
|
+
try {
|
|
1557
|
+
const normalized = resolveHubProviderProtocolWithNative(value);
|
|
1558
|
+
if (normalized === 'openai-chat' ||
|
|
1559
|
+
normalized === 'openai-responses' ||
|
|
1560
|
+
normalized === 'anthropic-messages' ||
|
|
1561
|
+
normalized === 'gemini-chat') {
|
|
1562
|
+
return normalized;
|
|
1563
|
+
}
|
|
1593
1564
|
}
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
if (mapped) {
|
|
1597
|
-
return mapped;
|
|
1565
|
+
catch {
|
|
1566
|
+
// Keep legacy caller-facing error shape below.
|
|
1598
1567
|
}
|
|
1599
1568
|
throw new Error(`[HubPipeline] Unsupported providerProtocol "${value}". Configure a valid protocol (openai-chat|openai-responses|anthropic-messages|gemini-chat).`);
|
|
1600
1569
|
}
|
|
1601
|
-
const PROVIDER_PROTOCOL_ALIASES = {
|
|
1602
|
-
'openai-chat': 'openai-chat',
|
|
1603
|
-
openai: 'openai-chat',
|
|
1604
|
-
chat: 'openai-chat',
|
|
1605
|
-
'responses': 'openai-responses',
|
|
1606
|
-
'openai-responses': 'openai-responses',
|
|
1607
|
-
'anthropic': 'anthropic-messages',
|
|
1608
|
-
'anthropic-messages': 'anthropic-messages',
|
|
1609
|
-
'messages': 'anthropic-messages',
|
|
1610
|
-
'gemini': 'gemini-chat',
|
|
1611
|
-
'google-gemini': 'gemini-chat',
|
|
1612
|
-
'gemini-chat': 'gemini-chat'
|
|
1613
|
-
};
|
|
1614
|
-
function resolveEndpointForProviderProtocol(protocol) {
|
|
1615
|
-
if (!protocol) {
|
|
1616
|
-
return undefined;
|
|
1617
|
-
}
|
|
1618
|
-
const value = protocol.toLowerCase();
|
|
1619
|
-
if (value === 'openai-responses')
|
|
1620
|
-
return '/v1/responses';
|
|
1621
|
-
if (value === 'openai-chat')
|
|
1622
|
-
return '/v1/chat/completions';
|
|
1623
|
-
if (value === 'anthropic-messages' || value === 'anthropic')
|
|
1624
|
-
return '/v1/messages';
|
|
1625
|
-
if (value === 'gemini-chat' || value === 'gemini' || value === 'google-gemini')
|
|
1626
|
-
return '/v1/responses';
|
|
1627
|
-
return undefined;
|
|
1628
|
-
}
|
|
1629
1570
|
function resolveSseProtocolFromMetadata(metadata) {
|
|
1630
|
-
const
|
|
1631
|
-
if (
|
|
1571
|
+
const resolved = resolveHubSseProtocolFromMetadataWithNative(metadata);
|
|
1572
|
+
if (!resolved) {
|
|
1632
1573
|
return undefined;
|
|
1633
1574
|
}
|
|
1634
|
-
return resolveProviderProtocol(
|
|
1575
|
+
return resolveProviderProtocol(resolved);
|
|
1635
1576
|
}
|
|
1636
1577
|
function coerceAliasMap(candidate) {
|
|
1637
|
-
|
|
1638
|
-
return undefined;
|
|
1639
|
-
}
|
|
1640
|
-
const normalized = {};
|
|
1641
|
-
for (const [key, value] of Object.entries(candidate)) {
|
|
1642
|
-
if (typeof key !== 'string' || typeof value !== 'string') {
|
|
1643
|
-
continue;
|
|
1644
|
-
}
|
|
1645
|
-
const trimmedKey = key.trim();
|
|
1646
|
-
const trimmedValue = value.trim();
|
|
1647
|
-
if (!trimmedKey.length || !trimmedValue.length) {
|
|
1648
|
-
continue;
|
|
1649
|
-
}
|
|
1650
|
-
normalized[trimmedKey] = trimmedValue;
|
|
1651
|
-
}
|
|
1652
|
-
return Object.keys(normalized).length ? normalized : undefined;
|
|
1578
|
+
return normalizeAliasMapWithNative(candidate);
|
|
1653
1579
|
}
|
|
1654
1580
|
function readAliasMapFromSemantics(chatEnvelope) {
|
|
1655
|
-
if (!chatEnvelope?.semantics || typeof chatEnvelope.semantics !== 'object') {
|
|
1656
|
-
return undefined;
|
|
1657
|
-
}
|
|
1658
|
-
const node = chatEnvelope.semantics.tools;
|
|
1659
|
-
if (!node || !isJsonObject(node)) {
|
|
1581
|
+
if (!chatEnvelope?.semantics || typeof chatEnvelope.semantics !== 'object' || Array.isArray(chatEnvelope.semantics)) {
|
|
1660
1582
|
return undefined;
|
|
1661
1583
|
}
|
|
1662
|
-
|
|
1663
|
-
node.toolAliasMap;
|
|
1664
|
-
return coerceAliasMap(candidate);
|
|
1584
|
+
return resolveAliasMapFromRespSemanticsWithNative(chatEnvelope.semantics);
|
|
1665
1585
|
}
|
|
1666
1586
|
function assertNoMappableSemanticsInMetadata(metadata, scope) {
|
|
1667
1587
|
if (!metadata || typeof metadata !== 'object') {
|
|
1668
1588
|
return;
|
|
1669
1589
|
}
|
|
1670
|
-
const
|
|
1671
|
-
'responsesResume',
|
|
1672
|
-
'responses_resume',
|
|
1673
|
-
'clientToolsRaw',
|
|
1674
|
-
'client_tools_raw',
|
|
1675
|
-
'anthropicToolNameMap',
|
|
1676
|
-
'anthropic_tool_name_map',
|
|
1677
|
-
// Responses semantics must be stored in chat.semantics.responses.context, not metadata.
|
|
1678
|
-
'responsesContext',
|
|
1679
|
-
'responses_context',
|
|
1680
|
-
'responseFormat',
|
|
1681
|
-
'response_format',
|
|
1682
|
-
// OpenAI Chat legacy semantics must be stored in chat.semantics (system/tools/providerExtras), not metadata.
|
|
1683
|
-
'systemInstructions',
|
|
1684
|
-
'system_instructions',
|
|
1685
|
-
'toolsFieldPresent',
|
|
1686
|
-
'tools_field_present',
|
|
1687
|
-
'extraFields',
|
|
1688
|
-
'extra_fields'
|
|
1689
|
-
];
|
|
1690
|
-
const present = banned.filter((k) => Object.prototype.hasOwnProperty.call(metadata, k));
|
|
1590
|
+
const present = findMappableSemanticsKeysWithNative(metadata);
|
|
1691
1591
|
if (present.length) {
|
|
1692
1592
|
throw new Error(`[HubPipeline][semantic_gate] Mappable semantics must not be stored in metadata (${scope}): ${present.join(', ')}`);
|
|
1693
1593
|
}
|