@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,7 @@
|
|
|
1
1
|
import { FilterEngine } from '../../filters/index.js';
|
|
2
2
|
import { loadFieldMapConfig } from '../../filters/utils/fieldmap-loader.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { createSnapshotWriter } from '../snapshot-utils.js';
|
|
4
|
+
import { normalizeChatResponseReasoningToolsWithNative as normalizeChatResponseReasoningTools } from '../../router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js';
|
|
5
5
|
const REQUEST_FILTER_STAGES = [
|
|
6
6
|
'request_pre',
|
|
7
7
|
'request_map',
|
|
@@ -100,104 +100,11 @@ export async function runChatRequestToolFilters(chatRequest, options = {}) {
|
|
|
100
100
|
recordStage('req_process_tool_filters_output', staged);
|
|
101
101
|
return staged;
|
|
102
102
|
}
|
|
103
|
-
function applyLocalToolGovernance(chatRequest,
|
|
103
|
+
function applyLocalToolGovernance(chatRequest, _rawPayload) {
|
|
104
104
|
if (!chatRequest || typeof chatRequest !== 'object') {
|
|
105
105
|
return chatRequest;
|
|
106
106
|
}
|
|
107
|
-
|
|
108
|
-
const tools = Array.isArray(chatRequest.tools) ? chatRequest.tools : undefined;
|
|
109
|
-
if (!tools || !tools.length) {
|
|
110
|
-
return chatRequest;
|
|
111
|
-
}
|
|
112
|
-
const hasImageHint = detectImageHint(messages, rawPayload);
|
|
113
|
-
if (hasImageHint) {
|
|
114
|
-
// 有图片线索时不干预工具列表,保持由上游(Codex 等)决定 view_image 的暴露与使用。
|
|
115
|
-
return chatRequest;
|
|
116
|
-
}
|
|
117
|
-
const filteredTools = tools.filter((tool) => {
|
|
118
|
-
if (!tool || typeof tool !== 'object')
|
|
119
|
-
return false;
|
|
120
|
-
const fn = tool.function;
|
|
121
|
-
if (!fn || typeof fn !== 'object')
|
|
122
|
-
return true;
|
|
123
|
-
const name = fn.name;
|
|
124
|
-
if (typeof name !== 'string')
|
|
125
|
-
return true;
|
|
126
|
-
return name.trim() !== 'view_image';
|
|
127
|
-
});
|
|
128
|
-
if (filteredTools.length === tools.length) {
|
|
129
|
-
return chatRequest;
|
|
130
|
-
}
|
|
131
|
-
return {
|
|
132
|
-
...chatRequest,
|
|
133
|
-
tools: filteredTools
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
function detectImageHint(messages, rawPayload) {
|
|
137
|
-
const patterns = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg'];
|
|
138
|
-
const hasImageExt = (value) => {
|
|
139
|
-
if (typeof value !== 'string' || !value)
|
|
140
|
-
return false;
|
|
141
|
-
const lower = value.toLowerCase();
|
|
142
|
-
return patterns.some(ext => lower.includes(ext));
|
|
143
|
-
};
|
|
144
|
-
const hasImageInMessage = (msg) => {
|
|
145
|
-
if (!msg || typeof msg !== 'object')
|
|
146
|
-
return false;
|
|
147
|
-
const m = msg;
|
|
148
|
-
const content = m.content;
|
|
149
|
-
if (typeof content === 'string') {
|
|
150
|
-
if (hasImageExt(content))
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
else if (Array.isArray(content)) {
|
|
154
|
-
for (const part of content) {
|
|
155
|
-
if (!part || typeof part !== 'object')
|
|
156
|
-
continue;
|
|
157
|
-
const p = part;
|
|
158
|
-
const t = String(p.type || '').toLowerCase();
|
|
159
|
-
if (t.includes('image')) {
|
|
160
|
-
return true;
|
|
161
|
-
}
|
|
162
|
-
if (hasImageExt(p.text))
|
|
163
|
-
return true;
|
|
164
|
-
const imageUrl = typeof p.image_url === 'string'
|
|
165
|
-
? p.image_url
|
|
166
|
-
: p.image_url && typeof p.image_url.url === 'string'
|
|
167
|
-
? p.image_url.url
|
|
168
|
-
: typeof p.url === 'string'
|
|
169
|
-
? p.url
|
|
170
|
-
: undefined;
|
|
171
|
-
if (hasImageExt(imageUrl))
|
|
172
|
-
return true;
|
|
173
|
-
if (hasImageExt(p.path))
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return false;
|
|
178
|
-
};
|
|
179
|
-
// 仅考虑“当前这一轮”的用户输入是否包含图片链接或图片负载,避免因为历史上下文中曾经出现过图片而在后续轮次持续暴露 view_image。
|
|
180
|
-
if (Array.isArray(messages)) {
|
|
181
|
-
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
182
|
-
const msg = messages[i];
|
|
183
|
-
if (!msg || typeof msg !== 'object')
|
|
184
|
-
continue;
|
|
185
|
-
const role = String(msg.role || '').toLowerCase();
|
|
186
|
-
if (role !== 'user')
|
|
187
|
-
continue;
|
|
188
|
-
if (hasImageInMessage(msg)) {
|
|
189
|
-
return true;
|
|
190
|
-
}
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
if (rawPayload && typeof rawPayload === 'object') {
|
|
195
|
-
const text = rawPayload.content;
|
|
196
|
-
if (hasImageExt(text)) {
|
|
197
|
-
return true;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return false;
|
|
107
|
+
return chatRequest;
|
|
201
108
|
}
|
|
202
109
|
export async function runChatResponseToolFilters(chatJson, options = {}) {
|
|
203
110
|
const resCtxBase = {
|
|
@@ -220,9 +127,7 @@ export async function runChatResponseToolFilters(chatJson, options = {}) {
|
|
|
220
127
|
recordStage('resp_process_tool_filters_input', chatJson);
|
|
221
128
|
try {
|
|
222
129
|
if (chatJson && typeof chatJson === 'object') {
|
|
223
|
-
normalizeChatResponseReasoningTools(chatJson,
|
|
224
|
-
idPrefixBase: 'reasoning_choice'
|
|
225
|
-
});
|
|
130
|
+
chatJson = normalizeChatResponseReasoningTools(chatJson, 'reasoning_choice');
|
|
226
131
|
}
|
|
227
132
|
}
|
|
228
133
|
catch {
|
|
@@ -8,6 +8,12 @@ export interface ToolGovernanceOptions {
|
|
|
8
8
|
baseDir?: string;
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Process OpenAI Chat request (messages/tools) with unified 标准 governance.
|
|
13
|
+
* - Augment tools (strict schemas)
|
|
14
|
+
* - Inject/Refine system tool guidance (idempotent)
|
|
15
|
+
* - Canonicalize structured tool_calls; set content=null when applicable
|
|
16
|
+
*/
|
|
11
17
|
export declare function processChatRequestTools(request: Unknown, opts?: ToolGovernanceOptions): Unknown;
|
|
12
18
|
export declare function normalizeApplyPatchToolCallsOnResponse(chat: Unknown): Unknown;
|
|
13
19
|
export declare function normalizeApplyPatchToolCallsOnRequest(request: Unknown): Unknown;
|
|
@@ -6,9 +6,38 @@ import { augmentOpenAITools } from '../../guidance/index.js';
|
|
|
6
6
|
import { validateToolCall } from '../../tools/tool-registry.js';
|
|
7
7
|
import { captureApplyPatchRegression } from '../../tools/patch-regression-capturer.js';
|
|
8
8
|
import { normalizeExecCommandArgs } from '../../tools/exec-command/normalize.js';
|
|
9
|
+
import { readRuntimeMetadata } from '../runtime-metadata.js';
|
|
10
|
+
import { normalizeChatResponseReasoningToolsWithNative } from '../../router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js';
|
|
9
11
|
function isObject(v) { return !!v && typeof v === 'object' && !Array.isArray(v); }
|
|
10
12
|
// Note: tool schema strict augmentation removed per alignment
|
|
11
13
|
function enforceChatBudget(chat, _modelId) { return chat; }
|
|
14
|
+
function resolveExecCommandGuardValidationOptions(payload) {
|
|
15
|
+
const carrier = isObject(payload.metadata)
|
|
16
|
+
? payload.metadata
|
|
17
|
+
: payload;
|
|
18
|
+
const rt = readRuntimeMetadata(carrier);
|
|
19
|
+
if (!rt || typeof rt !== 'object') {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const guardRaw = rt.execCommandGuard;
|
|
23
|
+
if (!guardRaw || typeof guardRaw !== 'object' || Array.isArray(guardRaw)) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const guard = guardRaw;
|
|
27
|
+
const enabled = guard.enabled === true;
|
|
28
|
+
if (!enabled) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const policyFile = typeof guard.policyFile === 'string' && guard.policyFile.trim().length
|
|
32
|
+
? guard.policyFile.trim()
|
|
33
|
+
: undefined;
|
|
34
|
+
return {
|
|
35
|
+
execCommandGuard: {
|
|
36
|
+
enabled: true,
|
|
37
|
+
...(policyFile ? { policyFile } : {})
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
12
41
|
function isTruthyEnv(value) {
|
|
13
42
|
const v = typeof value === 'string' ? value.trim().toLowerCase() : '';
|
|
14
43
|
return v === '1' || v === 'true' || v === 'yes' || v === 'on';
|
|
@@ -116,9 +145,11 @@ function buildExecCommandGuardScript(reason, message) {
|
|
|
116
145
|
? 'blocked by exec_command guard: git reset --hard is forbidden. Use git reset --mixed REF or git restore --source REF -- FILE.'
|
|
117
146
|
: reason === 'forbidden_git_checkout_scope'
|
|
118
147
|
? 'blocked by exec_command guard: git checkout is allowed only for a single file. Use git checkout -- FILE or git checkout REF -- FILE.'
|
|
119
|
-
:
|
|
120
|
-
? `
|
|
121
|
-
:
|
|
148
|
+
: reason === 'forbidden_exec_command_policy'
|
|
149
|
+
? `policy 不允许: ${(message || '').trim() || 'command blocked by policy'}`
|
|
150
|
+
: message && message.trim()
|
|
151
|
+
? `blocked by exec_command guard: ${message.trim()}`
|
|
152
|
+
: fallback;
|
|
122
153
|
const compact = detail.replace(/\s+/g, ' ').trim() || fallback;
|
|
123
154
|
return `bash -lc "printf '%s\\n' ${shellSingleQuote(compact)} >&2; exit 2"`;
|
|
124
155
|
}
|
|
@@ -158,7 +189,7 @@ function buildBlockedExecCommandArgs(rawArgs, reason, message) {
|
|
|
158
189
|
}
|
|
159
190
|
}
|
|
160
191
|
const EXEC_COMMAND_NAME_AS_COMMAND_PATTERN = /^(?:rg|wc|cat|ls|find|grep|git|sed|head|tail|awk|bash|sh|zsh|node|npm|pnpm|yarn|bd|echo|cp|mv|rm|mkdir|python|python3|perl|ruby)\b/i;
|
|
161
|
-
function repairCommandNameAsExecToolCall(fn) {
|
|
192
|
+
function repairCommandNameAsExecToolCall(fn, validationOptions) {
|
|
162
193
|
try {
|
|
163
194
|
if (!fn)
|
|
164
195
|
return false;
|
|
@@ -195,7 +226,7 @@ function repairCommandNameAsExecToolCall(fn) {
|
|
|
195
226
|
if (typeof argsObj.cwd === 'string' && (!argsObj.workdir || typeof argsObj.workdir !== 'string')) {
|
|
196
227
|
argsObj.workdir = String(argsObj.cwd);
|
|
197
228
|
}
|
|
198
|
-
const validation = validateToolCall('exec_command', JSON.stringify(argsObj));
|
|
229
|
+
const validation = validateToolCall('exec_command', JSON.stringify(argsObj), validationOptions);
|
|
199
230
|
if (validation.ok && typeof validation.normalizedArgs === 'string') {
|
|
200
231
|
fn.arguments = validation.normalizedArgs;
|
|
201
232
|
}
|
|
@@ -247,114 +278,6 @@ function tryWriteSnapshot(options, stage, data) {
|
|
|
247
278
|
* - Inject/Refine system tool guidance (idempotent)
|
|
248
279
|
* - Canonicalize structured tool_calls; set content=null when applicable
|
|
249
280
|
*/
|
|
250
|
-
const IMAGE_EXT_RE = /\.(png|jpe?g|gif|webp|bmp|svg)(?:[?#].*)?$/i;
|
|
251
|
-
function hasImageReference(messages) {
|
|
252
|
-
if (!Array.isArray(messages))
|
|
253
|
-
return false;
|
|
254
|
-
for (const entry of messages) {
|
|
255
|
-
if (!entry || typeof entry !== 'object')
|
|
256
|
-
continue;
|
|
257
|
-
const content = entry.content;
|
|
258
|
-
if (!content)
|
|
259
|
-
continue;
|
|
260
|
-
if (Array.isArray(content)) {
|
|
261
|
-
if (content.some((part) => isImagePart(part)))
|
|
262
|
-
return true;
|
|
263
|
-
}
|
|
264
|
-
else if (isObject(content)) {
|
|
265
|
-
if (isImagePart(content))
|
|
266
|
-
return true;
|
|
267
|
-
}
|
|
268
|
-
else if (typeof content === 'string') {
|
|
269
|
-
if (stringHasImageLink(content))
|
|
270
|
-
return true;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
return false;
|
|
274
|
-
}
|
|
275
|
-
function hasInputImage(entries) {
|
|
276
|
-
if (!Array.isArray(entries))
|
|
277
|
-
return false;
|
|
278
|
-
for (const entry of entries) {
|
|
279
|
-
if (!entry || typeof entry !== 'object')
|
|
280
|
-
continue;
|
|
281
|
-
const type = String(entry.type || '').toLowerCase();
|
|
282
|
-
if (type.includes('image'))
|
|
283
|
-
return true;
|
|
284
|
-
const content = entry.content;
|
|
285
|
-
if (!content)
|
|
286
|
-
continue;
|
|
287
|
-
if (Array.isArray(content)) {
|
|
288
|
-
if (content.some((part) => isImagePart(part)))
|
|
289
|
-
return true;
|
|
290
|
-
}
|
|
291
|
-
else if (isObject(content)) {
|
|
292
|
-
if (isImagePart(content))
|
|
293
|
-
return true;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return false;
|
|
297
|
-
}
|
|
298
|
-
function attachmentsHaveImage(payload) {
|
|
299
|
-
const attachments = payload?.attachments;
|
|
300
|
-
if (!Array.isArray(attachments))
|
|
301
|
-
return false;
|
|
302
|
-
for (const attachment of attachments) {
|
|
303
|
-
if (!attachment || typeof attachment !== 'object')
|
|
304
|
-
continue;
|
|
305
|
-
const mime = typeof attachment.mime === 'string' ? attachment.mime.toLowerCase() : '';
|
|
306
|
-
if (mime.startsWith('image/'))
|
|
307
|
-
return true;
|
|
308
|
-
const name = typeof attachment.name === 'string' ? attachment.name : '';
|
|
309
|
-
if (IMAGE_EXT_RE.test(name))
|
|
310
|
-
return true;
|
|
311
|
-
const url = typeof attachment.url === 'string' ? attachment.url : '';
|
|
312
|
-
if (stringHasImageLink(url))
|
|
313
|
-
return true;
|
|
314
|
-
}
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
function stringHasImageLink(value) {
|
|
318
|
-
if (!value)
|
|
319
|
-
return false;
|
|
320
|
-
if (value.includes('cid:'))
|
|
321
|
-
return true;
|
|
322
|
-
if (IMAGE_EXT_RE.test(value))
|
|
323
|
-
return true;
|
|
324
|
-
const lowered = value.toLowerCase();
|
|
325
|
-
return lowered.includes('image://');
|
|
326
|
-
}
|
|
327
|
-
function isImagePart(part) {
|
|
328
|
-
if (!part || typeof part !== 'object')
|
|
329
|
-
return false;
|
|
330
|
-
const type = String(part.type || '').toLowerCase();
|
|
331
|
-
if (type.includes('image'))
|
|
332
|
-
return true;
|
|
333
|
-
const imageUrl = part.image_url || part.imageUrl;
|
|
334
|
-
if (typeof imageUrl === 'string')
|
|
335
|
-
return true;
|
|
336
|
-
if (isObject(imageUrl) && typeof imageUrl.url === 'string')
|
|
337
|
-
return true;
|
|
338
|
-
const url = part.url;
|
|
339
|
-
if (typeof url === 'string' && stringHasImageLink(url))
|
|
340
|
-
return true;
|
|
341
|
-
return false;
|
|
342
|
-
}
|
|
343
|
-
function shouldExposeViewImage(payload) {
|
|
344
|
-
if (hasImageReference(payload?.messages))
|
|
345
|
-
return true;
|
|
346
|
-
if (hasInputImage(payload?.input))
|
|
347
|
-
return true;
|
|
348
|
-
if (attachmentsHaveImage(payload))
|
|
349
|
-
return true;
|
|
350
|
-
return false;
|
|
351
|
-
}
|
|
352
|
-
function isViewImageTool(tool) {
|
|
353
|
-
if (!tool || typeof tool !== 'object')
|
|
354
|
-
return false;
|
|
355
|
-
const name = String(tool.name || tool?.function?.name || '').toLowerCase();
|
|
356
|
-
return name === 'view_image';
|
|
357
|
-
}
|
|
358
281
|
export function processChatRequestTools(request, opts) {
|
|
359
282
|
const options = { ...(opts || {}) };
|
|
360
283
|
if (!isObject(request))
|
|
@@ -365,13 +288,6 @@ export function processChatRequestTools(request, opts) {
|
|
|
365
288
|
try {
|
|
366
289
|
let tools = Array.isArray(out?.tools) ? out.tools : [];
|
|
367
290
|
if (tools.length > 0) {
|
|
368
|
-
if (!shouldExposeViewImage(out)) {
|
|
369
|
-
const filtered = tools.filter((tool) => !isViewImageTool(tool));
|
|
370
|
-
if (filtered.length !== tools.length) {
|
|
371
|
-
tools = filtered;
|
|
372
|
-
out.tools = tools;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
291
|
for (const t of tools) {
|
|
376
292
|
if (!t || typeof t !== 'object')
|
|
377
293
|
continue;
|
|
@@ -425,10 +341,11 @@ export function processChatRequestTools(request, opts) {
|
|
|
425
341
|
* Process OpenAI Chat response (choices[0].message) with unified 标准 governance.
|
|
426
342
|
* - Canonicalize structured tool_calls; ensure finish_reason and content=null policy
|
|
427
343
|
*/
|
|
428
|
-
import {
|
|
344
|
+
import { parseLenientJsonishWithNative as parseLenient, repairArgumentsToStringWithNative as repairArgumentsToString } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
|
|
429
345
|
export function normalizeApplyPatchToolCallsOnResponse(chat) {
|
|
430
346
|
try {
|
|
431
347
|
const out = JSON.parse(JSON.stringify(chat));
|
|
348
|
+
const validationOptions = resolveExecCommandGuardValidationOptions(out);
|
|
432
349
|
const choices = Array.isArray(out?.choices) ? out.choices : [];
|
|
433
350
|
for (const ch of choices) {
|
|
434
351
|
const msg = ch && ch.message ? ch.message : undefined;
|
|
@@ -438,7 +355,7 @@ export function normalizeApplyPatchToolCallsOnResponse(chat) {
|
|
|
438
355
|
for (const tc of tcs) {
|
|
439
356
|
try {
|
|
440
357
|
const fn = tc && tc.function ? tc.function : undefined;
|
|
441
|
-
repairCommandNameAsExecToolCall(fn);
|
|
358
|
+
repairCommandNameAsExecToolCall(fn, validationOptions);
|
|
442
359
|
rewriteExecCommandApplyPatchCall(fn);
|
|
443
360
|
const name = typeof fn?.name === 'string' ? String(fn.name).trim().toLowerCase() : '';
|
|
444
361
|
if (name !== 'apply_patch')
|
|
@@ -488,6 +405,7 @@ export function normalizeApplyPatchToolCallsOnRequest(request) {
|
|
|
488
405
|
function normalizeSpecialToolCallsOnRequest(request) {
|
|
489
406
|
try {
|
|
490
407
|
const out = JSON.parse(JSON.stringify(request));
|
|
408
|
+
const validationOptions = resolveExecCommandGuardValidationOptions(out);
|
|
491
409
|
const messages = Array.isArray(out?.messages) ? out.messages : [];
|
|
492
410
|
// 仅针对「当轮」工具调用做校验与形态修复:选择最后一条 assistant 消息
|
|
493
411
|
let lastAssistantIndex = -1;
|
|
@@ -516,7 +434,7 @@ function normalizeSpecialToolCallsOnRequest(request) {
|
|
|
516
434
|
for (const tc of tcs) {
|
|
517
435
|
try {
|
|
518
436
|
const fn = tc && tc.function ? tc.function : undefined;
|
|
519
|
-
repairCommandNameAsExecToolCall(fn);
|
|
437
|
+
repairCommandNameAsExecToolCall(fn, validationOptions);
|
|
520
438
|
if (rewriteExecCommandApplyPatchCall(fn)) {
|
|
521
439
|
rewrittenNestedApplyPatchCount += 1;
|
|
522
440
|
}
|
|
@@ -555,7 +473,7 @@ function normalizeSpecialToolCallsOnRequest(request) {
|
|
|
555
473
|
// exec_command 兼容:TOON / map / string 一律收敛为 { cmd, command, workdir, ... }
|
|
556
474
|
if (name === 'exec_command') {
|
|
557
475
|
const argsStr = repairArgumentsToString(rawArgs);
|
|
558
|
-
const validation = validateToolCall('exec_command', argsStr);
|
|
476
|
+
const validation = validateToolCall('exec_command', argsStr, validationOptions);
|
|
559
477
|
if (validation && validation.ok && typeof validation.normalizedArgs === 'string') {
|
|
560
478
|
fn.arguments = validation.normalizedArgs;
|
|
561
479
|
}
|
|
@@ -603,6 +521,7 @@ function enhanceResponseToolArguments(chat) {
|
|
|
603
521
|
if (!enable)
|
|
604
522
|
return chat;
|
|
605
523
|
const out = JSON.parse(JSON.stringify(chat));
|
|
524
|
+
const validationOptions = resolveExecCommandGuardValidationOptions(out);
|
|
606
525
|
const choices = Array.isArray(out?.choices) ? out.choices : [];
|
|
607
526
|
for (const ch of choices) {
|
|
608
527
|
const msg = ch && ch.message ? ch.message : undefined;
|
|
@@ -686,7 +605,7 @@ function enhanceResponseToolArguments(chat) {
|
|
|
686
605
|
}
|
|
687
606
|
}
|
|
688
607
|
else if (name === 'exec_command') {
|
|
689
|
-
const validation = validateToolCall('exec_command', repaired);
|
|
608
|
+
const validation = validateToolCall('exec_command', repaired, validationOptions);
|
|
690
609
|
if (validation.ok && typeof validation.normalizedArgs === 'string') {
|
|
691
610
|
finalStr = validation.normalizedArgs;
|
|
692
611
|
}
|
|
@@ -721,8 +640,7 @@ export function processChatResponseTools(resp) {
|
|
|
721
640
|
if (!isObject(resp))
|
|
722
641
|
return resp;
|
|
723
642
|
try {
|
|
724
|
-
const
|
|
725
|
-
const canon = canonicalizeChatResponseTools(resp);
|
|
643
|
+
const canon = normalizeChatResponseReasoningToolsWithNative(resp);
|
|
726
644
|
const withPatch = normalizeApplyPatchToolCallsOnResponse(canon);
|
|
727
645
|
return enhanceResponseToolArguments(withPatch);
|
|
728
646
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// - Handles structural shapes (function_call legacy, tool_calls)
|
|
5
5
|
// - Normalizes arguments (single JSON string), sets finish_reason when applicable
|
|
6
6
|
import { isStructuredApplyPatchPayload } from '../../tools/apply-patch-structured.js';
|
|
7
|
+
import { repairArgumentsToStringWithNative } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
|
|
7
8
|
function isObject(v) {
|
|
8
9
|
return !!v && typeof v === 'object' && !Array.isArray(v);
|
|
9
10
|
}
|
|
@@ -18,14 +19,7 @@ function hashString(s) {
|
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
function toJsonString(v) {
|
|
21
|
-
|
|
22
|
-
return v;
|
|
23
|
-
try {
|
|
24
|
-
return JSON.stringify(v ?? {});
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return '{}';
|
|
28
|
-
}
|
|
22
|
+
return repairArgumentsToStringWithNative(v);
|
|
29
23
|
}
|
|
30
24
|
function genId(ctx, i = 0) {
|
|
31
25
|
const p = ctx?.idPrefix || 'call';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ChatToolDefinition } from '../hub/types/chat-envelope.js';
|
|
2
|
-
import type { BridgeToolDefinition } from '
|
|
2
|
+
import type { BridgeToolDefinition } from '../types/bridge-message-types.js';
|
|
3
3
|
export interface ToolCallFunction {
|
|
4
4
|
name: string;
|
|
5
5
|
arguments: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sanitizeResponsesFunctionNameWithNative } from '../../router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js';
|
|
1
2
|
export function stringifyArgs(args) {
|
|
2
3
|
if (typeof args === 'string')
|
|
3
4
|
return args;
|
|
@@ -73,11 +74,7 @@ function enforceBuiltinToolSchema(name, candidate) {
|
|
|
73
74
|
return asSchema(candidate);
|
|
74
75
|
}
|
|
75
76
|
const DEFAULT_SANITIZER = (value) => {
|
|
76
|
-
|
|
77
|
-
const trimmed = value.trim();
|
|
78
|
-
return trimmed.length ? trimmed : undefined;
|
|
79
|
-
}
|
|
80
|
-
return undefined;
|
|
77
|
+
return sanitizeResponsesFunctionNameWithNative(value);
|
|
81
78
|
};
|
|
82
79
|
function resolveToolName(candidate, options) {
|
|
83
80
|
const sanitized = options?.sanitizeName?.(candidate);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Shared helpers for standard tool normalization (shell packing rules).
|
|
3
3
|
* The goal is deterministic, minimal shaping so executors succeed consistently.
|
|
4
4
|
*/
|
|
5
|
+
import { parseLenientJsonishWithNative } from '../../router/virtual-router/engine-selection/native-shared-conversion-semantics.js';
|
|
5
6
|
// We intentionally do NOT evaluate shell control operators (&&, |, etc.).
|
|
6
7
|
// Codex CLI executor runs argv directly (execvp-like), not through a shell.
|
|
7
8
|
// So we avoid wrapping with "bash -lc" and leave such tokens as-is.
|
|
@@ -45,6 +46,23 @@ export function splitCommandString(input) {
|
|
|
45
46
|
const s = input.trim();
|
|
46
47
|
if (!s)
|
|
47
48
|
return [];
|
|
49
|
+
try {
|
|
50
|
+
if (s.startsWith('{') || s.startsWith('[')) {
|
|
51
|
+
const parsed = parseLenientJsonishWithNative(s);
|
|
52
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
53
|
+
const command = parsed.command;
|
|
54
|
+
if (Array.isArray(command)) {
|
|
55
|
+
const tokens = command.map((entry) => String(entry ?? '')).map((entry) => entry.trim()).filter(Boolean);
|
|
56
|
+
if (tokens.length) {
|
|
57
|
+
return tokens;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Keep legacy parser path when native parse returns non-command payload.
|
|
65
|
+
}
|
|
48
66
|
const out = [];
|
|
49
67
|
let cur = '';
|
|
50
68
|
let inSingle = false;
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
export interface SnapshotHookOptions {
|
|
2
|
+
endpoint: string;
|
|
3
|
+
stage: string;
|
|
4
|
+
requestId: string;
|
|
5
|
+
data: unknown;
|
|
6
|
+
verbosity?: 'minimal' | 'verbose';
|
|
7
|
+
channel?: string;
|
|
8
|
+
providerKey?: string;
|
|
9
|
+
groupRequestId?: string;
|
|
10
|
+
}
|
|
1
11
|
interface SnapshotPayload {
|
|
2
12
|
stage: string;
|
|
3
13
|
requestId: string;
|
|
@@ -8,6 +18,7 @@ interface SnapshotPayload {
|
|
|
8
18
|
groupRequestId?: string;
|
|
9
19
|
}
|
|
10
20
|
export declare function shouldRecordSnapshots(): boolean;
|
|
21
|
+
export declare function writeSnapshotViaHooks(options: SnapshotHookOptions): Promise<void>;
|
|
11
22
|
export declare function recordSnapshot(options: SnapshotPayload): Promise<void>;
|
|
12
23
|
export type SnapshotWriter = (stage: string, payload: unknown) => void;
|
|
13
24
|
export declare function createSnapshotWriter(opts: {
|
|
@@ -1,27 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
function resolveBoolFromEnv(value, fallback) {
|
|
3
|
-
if (!value) {
|
|
4
|
-
return fallback;
|
|
5
|
-
}
|
|
6
|
-
const normalized = value.trim().toLowerCase();
|
|
7
|
-
if (['1', 'true', 'yes', 'on'].includes(normalized)) {
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
if (['0', 'false', 'no', 'off'].includes(normalized)) {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
return fallback;
|
|
14
|
-
}
|
|
1
|
+
import { shouldRecordSnapshotsWithNative, writeSnapshotViaHooksWithNative } from '../router/virtual-router/engine-selection/native-snapshot-hooks.js';
|
|
15
2
|
export function shouldRecordSnapshots() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
return shouldRecordSnapshotsWithNative();
|
|
4
|
+
}
|
|
5
|
+
export async function writeSnapshotViaHooks(options) {
|
|
6
|
+
writeSnapshotViaHooksWithNative({
|
|
7
|
+
endpoint: options.endpoint,
|
|
8
|
+
stage: options.stage,
|
|
9
|
+
requestId: options.requestId,
|
|
10
|
+
data: options.data,
|
|
11
|
+
verbosity: options.verbosity,
|
|
12
|
+
channel: options.channel,
|
|
13
|
+
providerKey: options.providerKey,
|
|
14
|
+
groupRequestId: options.groupRequestId
|
|
15
|
+
});
|
|
25
16
|
}
|
|
26
17
|
export async function recordSnapshot(options) {
|
|
27
18
|
if (!shouldRecordSnapshots())
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { NativeReqInboundSemanticLiftApplyInput } from '../../router/virtual-router/engine-selection/native-hub-pipeline-req-inbound-semantics.js';
|
|
1
2
|
export type BridgeContentPart = {
|
|
2
3
|
type: string;
|
|
3
4
|
text?: string;
|
|
@@ -37,3 +38,4 @@ export type BridgeToolDefinition = {
|
|
|
37
38
|
parameters?: unknown;
|
|
38
39
|
};
|
|
39
40
|
};
|
|
41
|
+
export type BridgeNativeEnvelope = NativeReqInboundSemanticLiftApplyInput['chatEnvelope'];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type JsonToolArgumentAliasMap = Record<string, string[]>;
|
|
2
|
+
export type JsonToolRepairConfig = {
|
|
3
|
+
toolNameAliases?: Record<string, string>;
|
|
4
|
+
argumentAliases?: Record<string, JsonToolArgumentAliasMap>;
|
|
5
|
+
};
|
|
6
|
+
export type TextMarkupNormalizeOptions = {
|
|
7
|
+
jsonToolRepair?: JsonToolRepairConfig;
|
|
8
|
+
};
|
|
9
|
+
export type ToolCallLite = {
|
|
10
|
+
id?: string;
|
|
11
|
+
name: string;
|
|
12
|
+
args: string;
|
|
13
|
+
};
|
|
@@ -26,7 +26,7 @@ export class RequestOpenAIToolsNormalizeFilter {
|
|
|
26
26
|
}
|
|
27
27
|
let normalizedList = [];
|
|
28
28
|
try {
|
|
29
|
-
const mod = await import('../../conversion/
|
|
29
|
+
const mod = await import('../../conversion/args-mapping.js');
|
|
30
30
|
const normalizeTools = mod?.normalizeTools;
|
|
31
31
|
if (typeof normalizeTools === 'function')
|
|
32
32
|
normalizedList = normalizeTools(tools);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { normalizeChatResponseReasoningToolsWithNative } from '../../router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js';
|
|
2
2
|
/**
|
|
3
3
|
* Canonicalize structured tool_calls (Chat path).
|
|
4
4
|
*
|
|
@@ -10,7 +10,7 @@ export class ResponseToolTextCanonicalizeFilter {
|
|
|
10
10
|
name = 'response_tool_text_canonicalize';
|
|
11
11
|
stage = 'response_pre';
|
|
12
12
|
apply(input) {
|
|
13
|
-
const out =
|
|
13
|
+
const out = normalizeChatResponseReasoningToolsWithNative(input);
|
|
14
14
|
return { ok: true, data: out };
|
|
15
15
|
}
|
|
16
16
|
}
|
|
Binary file
|