@jsonstudio/llms 0.4.2
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 +265 -0
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.js +11 -0
- package/dist/api/llmswitch-config.d.ts +15 -0
- package/dist/api/llmswitch-config.js +415 -0
- package/dist/api/llmswitch-types.d.ts +412 -0
- package/dist/api/llmswitch-types.js +60 -0
- package/dist/bridge/routecodex-adapter.d.ts +74 -0
- package/dist/bridge/routecodex-adapter.js +226 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.js +5 -0
- package/dist/config-unified/enhanced-path-resolver.d.ts +5 -0
- package/dist/config-unified/enhanced-path-resolver.js +38 -0
- package/dist/config-unified/unified-config.d.ts +26 -0
- package/dist/config-unified/unified-config.js +187 -0
- package/dist/conversion/codec-registry.d.ts +10 -0
- package/dist/conversion/codec-registry.js +25 -0
- package/dist/conversion/codecs/anthropic-openai-codec.d.ts +23 -0
- package/dist/conversion/codecs/anthropic-openai-codec.js +546 -0
- package/dist/conversion/codecs/gemini-openai-codec.d.ts +16 -0
- package/dist/conversion/codecs/gemini-openai-codec.js +437 -0
- package/dist/conversion/codecs/openai-openai-codec.d.ts +12 -0
- package/dist/conversion/codecs/openai-openai-codec.js +125 -0
- package/dist/conversion/codecs/responses-openai-codec.d.ts +12 -0
- package/dist/conversion/codecs/responses-openai-codec.js +154 -0
- package/dist/conversion/config/config-manager.d.ts +212 -0
- package/dist/conversion/config/config-manager.js +310 -0
- package/dist/conversion/conversion-v3/adapters/index.d.ts +2 -0
- package/dist/conversion/conversion-v3/adapters/index.js +1 -0
- package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.d.ts +38 -0
- package/dist/conversion/conversion-v3/adapters/v3-to-standard-adapter.js +55 -0
- package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.d.ts +22 -0
- package/dist/conversion/conversion-v3/compatibility/compatibility-profiles.js +84 -0
- package/dist/conversion/conversion-v3/compatibility/compatibility-stages.d.ts +4 -0
- package/dist/conversion/conversion-v3/compatibility/compatibility-stages.js +285 -0
- package/dist/conversion/conversion-v3/compatibility/index.d.ts +3 -0
- package/dist/conversion/conversion-v3/compatibility/index.js +2 -0
- package/dist/conversion/conversion-v3/config/default-configs.d.ts +48 -0
- package/dist/conversion/conversion-v3/config/default-configs.js +1083 -0
- package/dist/conversion/conversion-v3/config/index.d.ts +5 -0
- package/dist/conversion/conversion-v3/config/index.js +5 -0
- package/dist/conversion/conversion-v3/config/pipeline-config-manager.d.ts +49 -0
- package/dist/conversion/conversion-v3/config/pipeline-config-manager.js +65 -0
- package/dist/conversion/conversion-v3/index.d.ts +11 -0
- package/dist/conversion/conversion-v3/index.js +17 -0
- package/dist/conversion/conversion-v3/nodes/index.d.ts +56 -0
- package/dist/conversion/conversion-v3/nodes/index.js +149 -0
- package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.d.ts +25 -0
- package/dist/conversion/conversion-v3/nodes/input/anthropic-input-node.js +56 -0
- package/dist/conversion/conversion-v3/nodes/input/base-input-node.d.ts +75 -0
- package/dist/conversion/conversion-v3/nodes/input/base-input-node.js +237 -0
- package/dist/conversion/conversion-v3/nodes/input/chat-input-node.d.ts +25 -0
- package/dist/conversion/conversion-v3/nodes/input/chat-input-node.js +56 -0
- package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.d.ts +4 -0
- package/dist/conversion/conversion-v3/nodes/input/chat-shape-helpers.js +197 -0
- package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.d.ts +16 -0
- package/dist/conversion/conversion-v3/nodes/input/gemini-input-node.js +125 -0
- package/dist/conversion/conversion-v3/nodes/input/index.d.ts +8 -0
- package/dist/conversion/conversion-v3/nodes/input/index.js +8 -0
- package/dist/conversion/conversion-v3/nodes/input/input-decision.d.ts +46 -0
- package/dist/conversion/conversion-v3/nodes/input/input-decision.js +125 -0
- package/dist/conversion/conversion-v3/nodes/input/responses-input-node.d.ts +20 -0
- package/dist/conversion/conversion-v3/nodes/input/responses-input-node.js +51 -0
- package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.d.ts +71 -0
- package/dist/conversion/conversion-v3/nodes/output/anthropic-output-node.js +320 -0
- package/dist/conversion/conversion-v3/nodes/output/base-output-node.d.ts +116 -0
- package/dist/conversion/conversion-v3/nodes/output/base-output-node.js +512 -0
- package/dist/conversion/conversion-v3/nodes/output/index.d.ts +7 -0
- package/dist/conversion/conversion-v3/nodes/output/index.js +7 -0
- package/dist/conversion/conversion-v3/nodes/output/openai-output-node.d.ts +71 -0
- package/dist/conversion/conversion-v3/nodes/output/openai-output-node.js +293 -0
- package/dist/conversion/conversion-v3/nodes/output/output-decision.d.ts +68 -0
- package/dist/conversion/conversion-v3/nodes/output/output-decision.js +161 -0
- package/dist/conversion/conversion-v3/nodes/output/responses-output-node.d.ts +64 -0
- package/dist/conversion/conversion-v3/nodes/output/responses-output-node.js +323 -0
- package/dist/conversion/conversion-v3/nodes/process/base-process-node.d.ts +72 -0
- package/dist/conversion/conversion-v3/nodes/process/base-process-node.js +246 -0
- package/dist/conversion/conversion-v3/nodes/process/chat-process-node.d.ts +135 -0
- package/dist/conversion/conversion-v3/nodes/process/chat-process-node.js +854 -0
- package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.d.ts +29 -0
- package/dist/conversion/conversion-v3/nodes/process/compatibility-process-node.js +181 -0
- package/dist/conversion/conversion-v3/nodes/process/index.d.ts +10 -0
- package/dist/conversion/conversion-v3/nodes/process/index.js +10 -0
- package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.d.ts +59 -0
- package/dist/conversion/conversion-v3/nodes/process/passthrough-process-node.js +243 -0
- package/dist/conversion/conversion-v3/nodes/process/response-process-node.d.ts +17 -0
- package/dist/conversion/conversion-v3/nodes/process/response-process-node.js +213 -0
- package/dist/conversion/conversion-v3/nodes/process/tool-process-node.d.ts +26 -0
- package/dist/conversion/conversion-v3/nodes/process/tool-process-node.js +299 -0
- package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.d.ts +40 -0
- package/dist/conversion/conversion-v3/nodes/process/virtual-router-process-node.js +430 -0
- package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.d.ts +12 -0
- package/dist/conversion/conversion-v3/nodes/response/anthropic-response-input-node.js +129 -0
- package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.d.ts +15 -0
- package/dist/conversion/conversion-v3/nodes/response/chat-to-responses-response-node.js +57 -0
- package/dist/conversion/conversion-v3/nodes/response/index.d.ts +4 -0
- package/dist/conversion/conversion-v3/nodes/response/index.js +4 -0
- package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.d.ts +15 -0
- package/dist/conversion/conversion-v3/nodes/response/openai-response-input-node.js +87 -0
- package/dist/conversion/conversion-v3/nodes/response/response-utils.d.ts +1 -0
- package/dist/conversion/conversion-v3/nodes/response/response-utils.js +1 -0
- package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.d.ts +12 -0
- package/dist/conversion/conversion-v3/nodes/response/responses-response-input-node.js +67 -0
- package/dist/conversion/conversion-v3/nodes/sse/index.d.ts +3 -0
- package/dist/conversion/conversion-v3/nodes/sse/index.js +3 -0
- package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.d.ts +27 -0
- package/dist/conversion/conversion-v3/nodes/sse/sse-input-node.js +165 -0
- package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.d.ts +19 -0
- package/dist/conversion/conversion-v3/nodes/sse/sse-output-node.js +267 -0
- package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.d.ts +18 -0
- package/dist/conversion/conversion-v3/nodes/sse/sse-passthrough-node.js +48 -0
- package/dist/conversion/conversion-v3/pipelines/index.d.ts +6 -0
- package/dist/conversion/conversion-v3/pipelines/index.js +6 -0
- package/dist/conversion/conversion-v3/pipelines/super-pipeline.d.ts +112 -0
- package/dist/conversion/conversion-v3/pipelines/super-pipeline.js +566 -0
- package/dist/conversion/conversion-v3/response/provider-response-converter.d.ts +28 -0
- package/dist/conversion/conversion-v3/response/provider-response-converter.js +249 -0
- package/dist/conversion/conversion-v3/sse/index.d.ts +140 -0
- package/dist/conversion/conversion-v3/sse/index.js +115 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +11 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/anthropic-json-to-sse-converter.js +79 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.d.ts +79 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/chat-json-to-sse-converter.js +296 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.d.ts +55 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/chat.js +233 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.d.ts +99 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/event-generators/responses.js +599 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/index.d.ts +6 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/index.js +7 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.d.ts +79 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/responses-json-to-sse-converter.js +322 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.d.ts +37 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/chat-sequencer.js +218 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.d.ts +40 -0
- package/dist/conversion/conversion-v3/sse/json-to-sse/sequencers/responses-sequencer.js +263 -0
- package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.d.ts +32 -0
- package/dist/conversion/conversion-v3/sse/registry/sse-codec-registry.js +106 -0
- package/dist/conversion/conversion-v3/sse/shared/chat-serializer.d.ts +4 -0
- package/dist/conversion/conversion-v3/sse/shared/chat-serializer.js +40 -0
- package/dist/conversion/conversion-v3/sse/shared/constants.d.ts +272 -0
- package/dist/conversion/conversion-v3/sse/shared/constants.js +321 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.d.ts +158 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/base-serializer.js +210 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.d.ts +82 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/chat-event-serializer.js +275 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/index.d.ts +39 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/index.js +54 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.d.ts +123 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/responses-event-serializer.js +356 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/types.d.ts +51 -0
- package/dist/conversion/conversion-v3/sse/shared/serializers/types.js +4 -0
- package/dist/conversion/conversion-v3/sse/shared/utils.d.ts +254 -0
- package/dist/conversion/conversion-v3/sse/shared/utils.js +543 -0
- package/dist/conversion/conversion-v3/sse/shared/writer.d.ts +111 -0
- package/dist/conversion/conversion-v3/sse/shared/writer.js +268 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +13 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/anthropic-sse-to-json-converter.js +139 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.d.ts +165 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/builders/response-builder.js +776 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.d.ts +106 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/chat-sse-to-json-converter.js +540 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/index.d.ts +6 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/index.js +7 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.d.ts +73 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/parsers/sse-parser.js +332 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.d.ts +59 -0
- package/dist/conversion/conversion-v3/sse/sse-to-json/responses-sse-to-json-converter.js +270 -0
- package/dist/conversion/conversion-v3/sse/types/anthropic-types.d.ts +87 -0
- package/dist/conversion/conversion-v3/sse/types/anthropic-types.js +5 -0
- package/dist/conversion/conversion-v3/sse/types/chat-types.d.ts +308 -0
- package/dist/conversion/conversion-v3/sse/types/chat-types.js +32 -0
- package/dist/conversion/conversion-v3/sse/types/conversion-context.d.ts +211 -0
- package/dist/conversion/conversion-v3/sse/types/conversion-context.js +20 -0
- package/dist/conversion/conversion-v3/sse/types/core-interfaces.d.ts +90 -0
- package/dist/conversion/conversion-v3/sse/types/core-interfaces.js +5 -0
- package/dist/conversion/conversion-v3/sse/types/index.d.ts +14 -0
- package/dist/conversion/conversion-v3/sse/types/index.js +7 -0
- package/dist/conversion/conversion-v3/sse/types/responses-types.d.ts +328 -0
- package/dist/conversion/conversion-v3/sse/types/responses-types.js +38 -0
- package/dist/conversion/conversion-v3/sse/types/sse-events.d.ts +180 -0
- package/dist/conversion/conversion-v3/sse/types/sse-events.js +150 -0
- package/dist/conversion/conversion-v3/sse/types/stream-state.d.ts +204 -0
- package/dist/conversion/conversion-v3/sse/types/stream-state.js +44 -0
- package/dist/conversion/conversion-v3/sse/types/utility-types.d.ts +230 -0
- package/dist/conversion/conversion-v3/sse/types/utility-types.js +49 -0
- package/dist/conversion/conversion-v3/standards/context-adapter.d.ts +146 -0
- package/dist/conversion/conversion-v3/standards/context-adapter.js +438 -0
- package/dist/conversion/conversion-v3/standards/errors.d.ts +38 -0
- package/dist/conversion/conversion-v3/standards/errors.js +27 -0
- package/dist/conversion/conversion-v3/standards/index.d.ts +15 -0
- package/dist/conversion/conversion-v3/standards/index.js +11 -0
- package/dist/conversion/conversion-v3/standards/node-capabilities.d.ts +123 -0
- package/dist/conversion/conversion-v3/standards/node-capabilities.js +330 -0
- package/dist/conversion/conversion-v3/standards/pipeline-context.d.ts +237 -0
- package/dist/conversion/conversion-v3/standards/pipeline-context.js +84 -0
- package/dist/conversion/conversion-v3/standards/pipeline-node.d.ts +196 -0
- package/dist/conversion/conversion-v3/standards/pipeline-node.js +316 -0
- package/dist/conversion/conversion-v3/standards/snapshot-handles.d.ts +24 -0
- package/dist/conversion/conversion-v3/standards/snapshot-handles.js +49 -0
- package/dist/conversion/conversion-v3/types/config-types.d.ts +242 -0
- package/dist/conversion/conversion-v3/types/config-types.js +13 -0
- package/dist/conversion/conversion-v3/types/index.d.ts +8 -0
- package/dist/conversion/conversion-v3/types/index.js +11 -0
- package/dist/conversion/conversion-v3/types/node-types.d.ts +211 -0
- package/dist/conversion/conversion-v3/types/node-types.js +20 -0
- package/dist/conversion/conversion-v3/types/pipeline-types.d.ts +246 -0
- package/dist/conversion/conversion-v3/types/pipeline-types.js +26 -0
- package/dist/conversion/conversion-v3/types/request-types.d.ts +293 -0
- package/dist/conversion/conversion-v3/types/request-types.js +26 -0
- package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.d.ts +10 -0
- package/dist/conversion/conversion-v3/utils/provider-payload-sanitizer.js +103 -0
- package/dist/conversion/conversion-v3/validations/index.d.ts +8 -0
- package/dist/conversion/conversion-v3/validations/index.js +7 -0
- package/dist/conversion/conversion-v3/validations/node-graph-validator.d.ts +116 -0
- package/dist/conversion/conversion-v3/validations/node-graph-validator.js +505 -0
- package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.d.ts +139 -0
- package/dist/conversion/conversion-v3/validations/tool-governance-enforcer.js +338 -0
- package/dist/conversion/hub/config/types.d.ts +26 -0
- package/dist/conversion/hub/config/types.js +1 -0
- package/dist/conversion/hub/core/detour-registry.d.ts +9 -0
- package/dist/conversion/hub/core/detour-registry.js +23 -0
- package/dist/conversion/hub/core/hub-context.d.ts +21 -0
- package/dist/conversion/hub/core/hub-context.js +1 -0
- package/dist/conversion/hub/core/index.d.ts +3 -0
- package/dist/conversion/hub/core/index.js +3 -0
- package/dist/conversion/hub/core/stage-driver.d.ts +30 -0
- package/dist/conversion/hub/core/stage-driver.js +31 -0
- package/dist/conversion/hub/format-adapters/anthropic-format-adapter.d.ts +16 -0
- package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +23 -0
- package/dist/conversion/hub/format-adapters/chat-format-adapter.d.ts +17 -0
- package/dist/conversion/hub/format-adapters/chat-format-adapter.js +23 -0
- package/dist/conversion/hub/format-adapters/gemini-format-adapter.d.ts +16 -0
- package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +23 -0
- package/dist/conversion/hub/format-adapters/index.d.ts +21 -0
- package/dist/conversion/hub/format-adapters/index.js +4 -0
- package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +17 -0
- package/dist/conversion/hub/format-adapters/responses-format-adapter.js +23 -0
- package/dist/conversion/hub/hub-feature.d.ts +1 -0
- package/dist/conversion/hub/hub-feature.js +25 -0
- package/dist/conversion/hub/node-support.d.ts +19 -0
- package/dist/conversion/hub/node-support.js +115 -0
- package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +68 -0
- package/dist/conversion/hub/pipeline/hub-pipeline.js +421 -0
- package/dist/conversion/hub/pipelines/inbound.d.ts +22 -0
- package/dist/conversion/hub/pipelines/inbound.js +64 -0
- package/dist/conversion/hub/pipelines/outbound.d.ts +22 -0
- package/dist/conversion/hub/pipelines/outbound.js +57 -0
- package/dist/conversion/hub/process/chat-process.d.ts +13 -0
- package/dist/conversion/hub/process/chat-process.js +50 -0
- package/dist/conversion/hub/registry.d.ts +28 -0
- package/dist/conversion/hub/registry.js +98 -0
- package/dist/conversion/hub/response/chat-response-utils.d.ts +6 -0
- package/dist/conversion/hub/response/chat-response-utils.js +89 -0
- package/dist/conversion/hub/response/provider-response.d.ts +20 -0
- package/dist/conversion/hub/response/provider-response.js +196 -0
- package/dist/conversion/hub/response/response-mappers.d.ts +19 -0
- package/dist/conversion/hub/response/response-mappers.js +23 -0
- package/dist/conversion/hub/response/response-runtime.d.ts +3 -0
- package/dist/conversion/hub/response/response-runtime.js +206 -0
- package/dist/conversion/hub/semantic-mappers/anthropic-mapper.d.ts +7 -0
- package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +308 -0
- package/dist/conversion/hub/semantic-mappers/chat-mapper.d.ts +7 -0
- package/dist/conversion/hub/semantic-mappers/chat-mapper.js +304 -0
- package/dist/conversion/hub/semantic-mappers/gemini-mapper.d.ts +7 -0
- package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +477 -0
- package/dist/conversion/hub/semantic-mappers/index.d.ts +4 -0
- package/dist/conversion/hub/semantic-mappers/index.js +4 -0
- package/dist/conversion/hub/semantic-mappers/responses-mapper.d.ts +21 -0
- package/dist/conversion/hub/semantic-mappers/responses-mapper.js +379 -0
- package/dist/conversion/hub/snapshot-recorder.d.ts +12 -0
- package/dist/conversion/hub/snapshot-recorder.js +69 -0
- package/dist/conversion/hub/standardized-bridge.d.ts +12 -0
- package/dist/conversion/hub/standardized-bridge.js +248 -0
- package/dist/conversion/hub/types/chat-envelope.d.ts +67 -0
- package/dist/conversion/hub/types/chat-envelope.js +1 -0
- package/dist/conversion/hub/types/chat-schema.d.ts +112 -0
- package/dist/conversion/hub/types/chat-schema.js +1 -0
- package/dist/conversion/hub/types/errors.d.ts +5 -0
- package/dist/conversion/hub/types/errors.js +13 -0
- package/dist/conversion/hub/types/format-envelope.d.ts +7 -0
- package/dist/conversion/hub/types/format-envelope.js +1 -0
- package/dist/conversion/hub/types/index.d.ts +6 -0
- package/dist/conversion/hub/types/index.js +6 -0
- package/dist/conversion/hub/types/json.d.ts +9 -0
- package/dist/conversion/hub/types/json.js +9 -0
- package/dist/conversion/hub/types/node.d.ts +31 -0
- package/dist/conversion/hub/types/node.js +1 -0
- package/dist/conversion/hub/types/standardized.d.ts +94 -0
- package/dist/conversion/hub/types/standardized.js +1 -0
- package/dist/conversion/index.d.ts +28 -0
- package/dist/conversion/index.js +28 -0
- package/dist/conversion/responses/responses-openai-bridge.d.ts +95 -0
- package/dist/conversion/responses/responses-openai-bridge.js +1330 -0
- package/dist/conversion/schema-validator.d.ts +7 -0
- package/dist/conversion/schema-validator.js +67 -0
- package/dist/conversion/shared/args-mapping.d.ts +18 -0
- package/dist/conversion/shared/args-mapping.js +213 -0
- package/dist/conversion/shared/chat-request-filters.d.ts +9 -0
- package/dist/conversion/shared/chat-request-filters.js +74 -0
- package/dist/conversion/shared/jsonish.d.ts +3 -0
- package/dist/conversion/shared/jsonish.js +177 -0
- package/dist/conversion/shared/mcp-injection.d.ts +2 -0
- package/dist/conversion/shared/mcp-injection.js +89 -0
- package/dist/conversion/shared/media.d.ts +1 -0
- package/dist/conversion/shared/media.js +9 -0
- package/dist/conversion/shared/openai-finalizer.d.ts +9 -0
- package/dist/conversion/shared/openai-finalizer.js +104 -0
- package/dist/conversion/shared/openai-message-normalize.d.ts +1 -0
- package/dist/conversion/shared/openai-message-normalize.js +442 -0
- package/dist/conversion/shared/payload-budget.d.ts +13 -0
- package/dist/conversion/shared/payload-budget.js +248 -0
- package/dist/conversion/shared/reasoning-mapping.d.ts +5 -0
- package/dist/conversion/shared/reasoning-mapping.js +8 -0
- package/dist/conversion/shared/responses-conversation-store.d.ts +41 -0
- package/dist/conversion/shared/responses-conversation-store.js +285 -0
- package/dist/conversion/shared/responses-id-utils.d.ts +7 -0
- package/dist/conversion/shared/responses-id-utils.js +29 -0
- package/dist/conversion/shared/responses-instructions.d.ts +1 -0
- package/dist/conversion/shared/responses-instructions.js +113 -0
- package/dist/conversion/shared/responses-metadata.d.ts +1 -0
- package/dist/conversion/shared/responses-metadata.js +1 -0
- package/dist/conversion/shared/responses-request-adapter.d.ts +66 -0
- package/dist/conversion/shared/responses-request-adapter.js +461 -0
- package/dist/conversion/shared/snapshot-hooks.d.ts +12 -0
- package/dist/conversion/shared/snapshot-hooks.js +7 -0
- package/dist/conversion/shared/streaming-text-extractor.d.ts +26 -0
- package/dist/conversion/shared/streaming-text-extractor.js +145 -0
- package/dist/conversion/shared/text-markup-normalizer.d.ts +9 -0
- package/dist/conversion/shared/text-markup-normalizer.js +319 -0
- package/dist/conversion/shared/tool-canonicalizer.d.ts +2 -0
- package/dist/conversion/shared/tool-canonicalizer.js +50 -0
- package/dist/conversion/shared/tool-filter-pipeline.d.ts +17 -0
- package/dist/conversion/shared/tool-filter-pipeline.js +79 -0
- package/dist/conversion/shared/tool-governor.d.ts +27 -0
- package/dist/conversion/shared/tool-governor.js +269 -0
- package/dist/conversion/shared/tool-harvester.d.ts +31 -0
- package/dist/conversion/shared/tool-harvester.js +321 -0
- package/dist/conversion/shared/tool-mapping.d.ts +10 -0
- package/dist/conversion/shared/tool-mapping.js +10 -0
- package/dist/conversion/shared/tooling.d.ts +26 -0
- package/dist/conversion/shared/tooling.js +143 -0
- package/dist/conversion/types.d.ts +33 -0
- package/dist/conversion/types.js +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.js +9 -0
- package/dist/core/llmswitch-engine-v2.d.ts +132 -0
- package/dist/core/llmswitch-engine-v2.js +649 -0
- package/dist/core/llmswitch-factory-v2.d.ts +123 -0
- package/dist/core/llmswitch-factory-v2.js +521 -0
- package/dist/endpoints/base-endpoint-handler.d.ts +128 -0
- package/dist/endpoints/base-endpoint-handler.js +545 -0
- package/dist/endpoints/chat-endpoint-handler.d.ts +115 -0
- package/dist/endpoints/chat-endpoint-handler.js +218 -0
- package/dist/endpoints/endpoint-router.d.ts +127 -0
- package/dist/endpoints/endpoint-router.js +438 -0
- package/dist/endpoints/index.d.ts +13 -0
- package/dist/endpoints/index.js +11 -0
- package/dist/endpoints/messages-endpoint-handler.d.ts +171 -0
- package/dist/endpoints/messages-endpoint-handler.js +238 -0
- package/dist/endpoints/responses-endpoint-handler.d.ts +147 -0
- package/dist/endpoints/responses-endpoint-handler.js +233 -0
- package/dist/filters/builtin/add-fields-filter.d.ts +8 -0
- package/dist/filters/builtin/add-fields-filter.js +16 -0
- package/dist/filters/builtin/blacklist-filter.d.ts +8 -0
- package/dist/filters/builtin/blacklist-filter.js +19 -0
- package/dist/filters/builtin/whitelist-filter.d.ts +8 -0
- package/dist/filters/builtin/whitelist-filter.js +19 -0
- package/dist/filters/engine.d.ts +16 -0
- package/dist/filters/engine.js +167 -0
- package/dist/filters/index.d.ts +19 -0
- package/dist/filters/index.js +24 -0
- package/dist/filters/special/request-streaming-to-nonstreaming.d.ts +12 -0
- package/dist/filters/special/request-streaming-to-nonstreaming.js +27 -0
- package/dist/filters/special/request-tool-choice-policy.d.ts +11 -0
- package/dist/filters/special/request-tool-choice-policy.js +27 -0
- package/dist/filters/special/request-tool-list-filter.d.ts +11 -0
- package/dist/filters/special/request-tool-list-filter.js +167 -0
- package/dist/filters/special/request-toolcalls-stringify.d.ts +10 -0
- package/dist/filters/special/request-toolcalls-stringify.js +44 -0
- package/dist/filters/special/request-tools-normalize.d.ts +12 -0
- package/dist/filters/special/request-tools-normalize.js +140 -0
- package/dist/filters/special/response-finish-invariants.d.ts +11 -0
- package/dist/filters/special/response-finish-invariants.js +30 -0
- package/dist/filters/special/response-openai-to-responses-bridge.d.ts +13 -0
- package/dist/filters/special/response-openai-to-responses-bridge.js +24 -0
- package/dist/filters/special/response-tool-arguments-blacklist.d.ts +12 -0
- package/dist/filters/special/response-tool-arguments-blacklist.js +63 -0
- package/dist/filters/special/response-tool-arguments-schema-converge.d.ts +13 -0
- package/dist/filters/special/response-tool-arguments-schema-converge.js +63 -0
- package/dist/filters/special/response-tool-arguments-stringify.d.ts +9 -0
- package/dist/filters/special/response-tool-arguments-stringify.js +134 -0
- package/dist/filters/special/response-tool-arguments-toon-decode.d.ts +10 -0
- package/dist/filters/special/response-tool-arguments-toon-decode.js +94 -0
- package/dist/filters/special/response-tool-arguments-whitelist.d.ts +11 -0
- package/dist/filters/special/response-tool-arguments-whitelist.js +56 -0
- package/dist/filters/special/response-tool-text-canonicalize.d.ts +10 -0
- package/dist/filters/special/response-tool-text-canonicalize.js +20 -0
- package/dist/filters/special/tool-filter-hooks.d.ts +19 -0
- package/dist/filters/special/tool-filter-hooks.js +341 -0
- package/dist/filters/special/tool-post-constraints.d.ts +31 -0
- package/dist/filters/special/tool-post-constraints.js +120 -0
- package/dist/filters/types.d.ts +68 -0
- package/dist/filters/types.js +3 -0
- package/dist/filters/utils/fieldmap-loader.d.ts +2 -0
- package/dist/filters/utils/fieldmap-loader.js +16 -0
- package/dist/filters/utils/snapshot-writer.d.ts +10 -0
- package/dist/filters/utils/snapshot-writer.js +47 -0
- package/dist/guidance/index.d.ts +3 -0
- package/dist/guidance/index.js +228 -0
- package/dist/hooks/hooks-integration.d.ts +161 -0
- package/dist/hooks/hooks-integration.js +519 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.js +13 -0
- package/dist/html-to-markdown.d.ts +5 -0
- package/dist/html-to-markdown.js +66 -0
- package/dist/http/sse-response.d.ts +22 -0
- package/dist/http/sse-response.js +103 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/router/virtual-router/bootstrap.d.ts +6 -0
- package/dist/router/virtual-router/bootstrap.js +620 -0
- package/dist/router/virtual-router/classifier.d.ts +10 -0
- package/dist/router/virtual-router/classifier.js +99 -0
- package/dist/router/virtual-router/engine.d.ts +35 -0
- package/dist/router/virtual-router/engine.js +260 -0
- package/dist/router/virtual-router/error-center.d.ts +10 -0
- package/dist/router/virtual-router/error-center.js +39 -0
- package/dist/router/virtual-router/features.d.ts +3 -0
- package/dist/router/virtual-router/features.js +162 -0
- package/dist/router/virtual-router/health-manager.d.ts +18 -0
- package/dist/router/virtual-router/health-manager.js +98 -0
- package/dist/router/virtual-router/load-balancer.d.ts +18 -0
- package/dist/router/virtual-router/load-balancer.js +67 -0
- package/dist/router/virtual-router/provider-registry.d.ts +11 -0
- package/dist/router/virtual-router/provider-registry.js +74 -0
- package/dist/router/virtual-router/types.d.ts +206 -0
- package/dist/router/virtual-router/types.js +31 -0
- package/dist/sse/index.d.ts +140 -0
- package/dist/sse/index.js +115 -0
- package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +11 -0
- package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.js +79 -0
- package/dist/sse/json-to-sse/chat-json-to-sse-converter.d.ts +79 -0
- package/dist/sse/json-to-sse/chat-json-to-sse-converter.js +296 -0
- package/dist/sse/json-to-sse/event-generators/chat.d.ts +55 -0
- package/dist/sse/json-to-sse/event-generators/chat.js +233 -0
- package/dist/sse/json-to-sse/event-generators/responses.d.ts +99 -0
- package/dist/sse/json-to-sse/event-generators/responses.js +599 -0
- package/dist/sse/json-to-sse/index.d.ts +6 -0
- package/dist/sse/json-to-sse/index.js +7 -0
- package/dist/sse/json-to-sse/responses-json-to-sse-converter.d.ts +79 -0
- package/dist/sse/json-to-sse/responses-json-to-sse-converter.js +322 -0
- package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +37 -0
- package/dist/sse/json-to-sse/sequencers/chat-sequencer.js +218 -0
- package/dist/sse/json-to-sse/sequencers/responses-sequencer.d.ts +40 -0
- package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +263 -0
- package/dist/sse/registry/sse-codec-registry.d.ts +32 -0
- package/dist/sse/registry/sse-codec-registry.js +106 -0
- package/dist/sse/shared/chat-serializer.d.ts +4 -0
- package/dist/sse/shared/chat-serializer.js +40 -0
- package/dist/sse/shared/constants.d.ts +272 -0
- package/dist/sse/shared/constants.js +321 -0
- package/dist/sse/shared/serializers/base-serializer.d.ts +158 -0
- package/dist/sse/shared/serializers/base-serializer.js +210 -0
- package/dist/sse/shared/serializers/chat-event-serializer.d.ts +82 -0
- package/dist/sse/shared/serializers/chat-event-serializer.js +275 -0
- package/dist/sse/shared/serializers/index.d.ts +39 -0
- package/dist/sse/shared/serializers/index.js +54 -0
- package/dist/sse/shared/serializers/responses-event-serializer.d.ts +123 -0
- package/dist/sse/shared/serializers/responses-event-serializer.js +356 -0
- package/dist/sse/shared/serializers/types.d.ts +51 -0
- package/dist/sse/shared/serializers/types.js +4 -0
- package/dist/sse/shared/utils.d.ts +254 -0
- package/dist/sse/shared/utils.js +543 -0
- package/dist/sse/shared/writer.d.ts +111 -0
- package/dist/sse/shared/writer.js +268 -0
- package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +13 -0
- package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.js +139 -0
- package/dist/sse/sse-to-json/builders/response-builder.d.ts +165 -0
- package/dist/sse/sse-to-json/builders/response-builder.js +776 -0
- package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +106 -0
- package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +540 -0
- package/dist/sse/sse-to-json/index.d.ts +6 -0
- package/dist/sse/sse-to-json/index.js +7 -0
- package/dist/sse/sse-to-json/parsers/sse-parser.d.ts +73 -0
- package/dist/sse/sse-to-json/parsers/sse-parser.js +340 -0
- package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +59 -0
- package/dist/sse/sse-to-json/responses-sse-to-json-converter.js +270 -0
- package/dist/sse/types/anthropic-types.d.ts +87 -0
- package/dist/sse/types/anthropic-types.js +5 -0
- package/dist/sse/types/chat-types.d.ts +308 -0
- package/dist/sse/types/chat-types.js +32 -0
- package/dist/sse/types/conversion-context.d.ts +211 -0
- package/dist/sse/types/conversion-context.js +20 -0
- package/dist/sse/types/core-interfaces.d.ts +90 -0
- package/dist/sse/types/core-interfaces.js +5 -0
- package/dist/sse/types/index.d.ts +14 -0
- package/dist/sse/types/index.js +7 -0
- package/dist/sse/types/responses-types.d.ts +328 -0
- package/dist/sse/types/responses-types.js +38 -0
- package/dist/sse/types/sse-events.d.ts +180 -0
- package/dist/sse/types/sse-events.js +150 -0
- package/dist/sse/types/stream-state.d.ts +204 -0
- package/dist/sse/types/stream-state.js +44 -0
- package/dist/sse/types/utility-types.d.ts +230 -0
- package/dist/sse/types/utility-types.js +49 -0
- package/dist/tools/proxy/anthropic-tool-proxy.d.ts +19 -0
- package/dist/tools/proxy/anthropic-tool-proxy.js +57 -0
- package/dist/tools/proxy/executors/web-fetch.d.ts +6 -0
- package/dist/tools/proxy/executors/web-fetch.js +39 -0
- package/dist/tools/proxy/registry.d.ts +8 -0
- package/dist/tools/proxy/registry.js +14 -0
- package/dist/tools/proxy/types.d.ts +29 -0
- package/dist/tools/proxy/types.js +1 -0
- package/dist/tools/tool-registry.d.ts +8 -0
- package/dist/tools/tool-registry.js +154 -0
- package/dist/tools/web-fetch-html.d.ts +15 -0
- package/dist/tools/web-fetch-html.js +83 -0
- package/dist/utils/conversion-adapter.d.ts +65 -0
- package/dist/utils/conversion-adapter.js +183 -0
- package/dist/utils/error-factory.d.ts +88 -0
- package/dist/utils/error-factory.js +138 -0
- package/dist/utils/error-utils.d.ts +334 -0
- package/dist/utils/error-utils.js +782 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.js +13 -0
- package/dist/utils/performance-utils.d.ts +205 -0
- package/dist/utils/performance-utils.js +440 -0
- package/dist/utils/profile-mapper.d.ts +32 -0
- package/dist/utils/profile-mapper.js +269 -0
- package/dist/utils/request-processor.d.ts +52 -0
- package/dist/utils/request-processor.js +210 -0
- package/dist/utils/request-utils.d.ts +117 -0
- package/dist/utils/request-utils.js +333 -0
- package/dist/utils/response-utils.d.ts +127 -0
- package/dist/utils/response-utils.js +516 -0
- package/dist/utils/token-counter.d.ts +89 -0
- package/dist/utils/token-counter.js +541 -0
- package/package.json +65 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as fsp from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
export async function loadFieldMapConfig(relativeJsonPath) {
|
|
5
|
+
try {
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = path.dirname(__filename);
|
|
8
|
+
const p = path.resolve(__dirname, '..', 'config', relativeJsonPath);
|
|
9
|
+
const text = await fsp.readFile(p, 'utf-8');
|
|
10
|
+
const obj = JSON.parse(text);
|
|
11
|
+
return obj;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FilterStage } from '../types.js';
|
|
2
|
+
export declare function writeFilterSnapshot(options: {
|
|
3
|
+
requestId?: string;
|
|
4
|
+
endpoint?: string;
|
|
5
|
+
profile?: string;
|
|
6
|
+
stage: FilterStage;
|
|
7
|
+
name?: string;
|
|
8
|
+
tag?: string;
|
|
9
|
+
data: unknown;
|
|
10
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import * as fsp from 'node:fs/promises';
|
|
4
|
+
function mapEndpointToFolder(ep) {
|
|
5
|
+
const e = String(ep || '').toLowerCase();
|
|
6
|
+
if (e.includes('/v1/responses'))
|
|
7
|
+
return 'openai-responses';
|
|
8
|
+
if (e.includes('/v1/messages') || e.includes('anthropic'))
|
|
9
|
+
return 'anthropic-messages';
|
|
10
|
+
return 'openai-chat';
|
|
11
|
+
}
|
|
12
|
+
function isSnapshotEnabled() {
|
|
13
|
+
const v = String(process?.env?.RCC_FILTER_SNAPSHOT || process?.env?.RCC_HOOKS_VERBOSITY || '').toLowerCase();
|
|
14
|
+
return v === '1' || v === 'true' || v === 'verbose';
|
|
15
|
+
}
|
|
16
|
+
export async function writeFilterSnapshot(options) {
|
|
17
|
+
try {
|
|
18
|
+
if (!isSnapshotEnabled())
|
|
19
|
+
return;
|
|
20
|
+
const rid = options.requestId || `req_${Date.now()}`;
|
|
21
|
+
const baseOverride = process?.env?.RCC_SNAPSHOT_DIR;
|
|
22
|
+
const base = baseOverride && baseOverride.trim()
|
|
23
|
+
? baseOverride.trim()
|
|
24
|
+
: path.join(os.homedir(), '.routecodex', 'codex-samples');
|
|
25
|
+
const folder = mapEndpointToFolder(options.endpoint);
|
|
26
|
+
const dir = path.join(base, folder);
|
|
27
|
+
await fsp.mkdir(dir, { recursive: true });
|
|
28
|
+
const parts = ['filters', options.stage.replace(/\s+/g, ''), options.tag || (options.name ? `after_${options.name}` : 'after')]
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.join('_');
|
|
31
|
+
const file = path.join(dir, `${rid}_${parts}.json`);
|
|
32
|
+
const payload = {
|
|
33
|
+
meta: {
|
|
34
|
+
requestId: rid,
|
|
35
|
+
stage: options.stage,
|
|
36
|
+
name: options.name,
|
|
37
|
+
tag: options.tag,
|
|
38
|
+
profile: options.profile,
|
|
39
|
+
endpoint: options.endpoint,
|
|
40
|
+
ts: new Date().toISOString()
|
|
41
|
+
},
|
|
42
|
+
data: options.data
|
|
43
|
+
};
|
|
44
|
+
await fsp.writeFile(file, JSON.stringify(payload, null, 2), 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
catch { /* ignore snapshot errors */ }
|
|
47
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// Tool guidance augmentation utilities (OpenAI + Anthropic shapes)
|
|
2
|
+
// Standalone module to keep guidance policy centralized and easy to evolve.
|
|
3
|
+
function isObject(v) {
|
|
4
|
+
return !!v && typeof v === 'object' && !Array.isArray(v);
|
|
5
|
+
}
|
|
6
|
+
function ensureObjectSchema(obj) {
|
|
7
|
+
const o = (obj && typeof obj === 'object') ? obj : {};
|
|
8
|
+
if (typeof o.type !== 'string')
|
|
9
|
+
o.type = 'object';
|
|
10
|
+
if (!isObject(o.properties))
|
|
11
|
+
o.properties = {};
|
|
12
|
+
if (typeof o.additionalProperties !== 'boolean')
|
|
13
|
+
o.additionalProperties = true;
|
|
14
|
+
return o;
|
|
15
|
+
}
|
|
16
|
+
function appendOnce(desc, guidance, marker) {
|
|
17
|
+
const base = (typeof desc === 'string') ? desc : '';
|
|
18
|
+
if (base.includes(marker))
|
|
19
|
+
return base;
|
|
20
|
+
return base ? `${base}\n\n${guidance}` : guidance;
|
|
21
|
+
}
|
|
22
|
+
function augmentShell(fn) {
|
|
23
|
+
const marker = '[Codex Shell Guidance]';
|
|
24
|
+
const guidance = [
|
|
25
|
+
marker,
|
|
26
|
+
'Execute shell commands. Two accepted forms:',
|
|
27
|
+
' 1) argv tokens: ["ls","-la"]',
|
|
28
|
+
' 2) bash -lc with a single string: ["bash","-lc","<single command string>"] (required for complex/multi-line/pipe/&&/||/here-doc to interpreter).',
|
|
29
|
+
'The 3rd arg of bash -lc MUST be exactly one string. Do not split meta-operators (|, >, &&, ||) into separate elements.',
|
|
30
|
+
'Do not invent extra keys. File writes are FORBIDDEN via shell (no redirection, here-doc to files, sed -i, ed -s, tee). Use apply_patch to edit files.',
|
|
31
|
+
'Examples: ["ls","-la","Obsidian"]; ["bash","-lc","cd Obsidian && ls -la"]; ["bash","-lc","python3 - <<\'PY\'\\nprint(\\"ok\\")\\nPY"]',
|
|
32
|
+
'If arguments are invalid (e.g., bash -lc without a single string), return a structured error as the tool result (role=tool, same tool_call_id) and continue the conversation.',
|
|
33
|
+
'Prefer ripgrep (rg) when available. Keep explanations in assistant text; do not mix narration into tool arguments.'
|
|
34
|
+
].join('\n');
|
|
35
|
+
const params = ensureObjectSchema(fn.parameters);
|
|
36
|
+
const props = params.properties;
|
|
37
|
+
// 强约束:仅允许数组形态。分支A:严格 bash -lc 3 元组;分支B:纯 argv(无强校验,运行时由 governor 处理元字符)。
|
|
38
|
+
props.command = {
|
|
39
|
+
description: 'Shell command. Use argv tokens OR ["bash","-lc","<single command string>"] for complex commands.',
|
|
40
|
+
oneOf: [
|
|
41
|
+
{
|
|
42
|
+
type: 'array',
|
|
43
|
+
minItems: 3,
|
|
44
|
+
maxItems: 3,
|
|
45
|
+
items: [
|
|
46
|
+
{ const: 'bash' },
|
|
47
|
+
{ const: '-lc' },
|
|
48
|
+
{ type: 'string' }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: 'array',
|
|
53
|
+
items: { type: 'string' }
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
};
|
|
57
|
+
params.additionalProperties = false;
|
|
58
|
+
fn.parameters = params;
|
|
59
|
+
fn.description = appendOnce(fn.description, guidance, marker);
|
|
60
|
+
}
|
|
61
|
+
function augmentApplyPatch(fn) {
|
|
62
|
+
const marker = '[Codex ApplyPatch Guidance]';
|
|
63
|
+
const guidance = [
|
|
64
|
+
marker,
|
|
65
|
+
'Edit files by applying a unified diff patch. Return ONLY the patch text with *** Begin Patch/*** End Patch blocks.',
|
|
66
|
+
'Example:',
|
|
67
|
+
'*** Begin Patch',
|
|
68
|
+
'*** Update File: path/to/file.ts',
|
|
69
|
+
'@@',
|
|
70
|
+
'- old line',
|
|
71
|
+
'+ new line',
|
|
72
|
+
'*** End Patch'
|
|
73
|
+
].join('\n');
|
|
74
|
+
const params = ensureObjectSchema(fn.parameters);
|
|
75
|
+
const props = params.properties;
|
|
76
|
+
if (!isObject(props.patch)) {
|
|
77
|
+
props.patch = { type: 'string', description: 'Unified diff patch text' };
|
|
78
|
+
}
|
|
79
|
+
if (!Array.isArray(params.required)) {
|
|
80
|
+
params.required = [];
|
|
81
|
+
}
|
|
82
|
+
if (!params.required.includes('patch')) {
|
|
83
|
+
params.required.push('patch');
|
|
84
|
+
}
|
|
85
|
+
params.additionalProperties = false;
|
|
86
|
+
fn.parameters = params;
|
|
87
|
+
fn.description = appendOnce(fn.description, guidance, marker);
|
|
88
|
+
}
|
|
89
|
+
function augmentUpdatePlan(fn) {
|
|
90
|
+
const marker = '[Codex Plan Guidance]';
|
|
91
|
+
const guidance = [
|
|
92
|
+
marker,
|
|
93
|
+
'Maintain a short stepwise plan. Exactly one step should be in_progress; others pending/completed.'
|
|
94
|
+
].join('\n');
|
|
95
|
+
fn.description = appendOnce(fn.description, guidance, marker);
|
|
96
|
+
}
|
|
97
|
+
function augmentViewImage(fn) {
|
|
98
|
+
const marker = '[Codex ViewImage Guidance]';
|
|
99
|
+
const guidance = [
|
|
100
|
+
marker,
|
|
101
|
+
'Attach a local image only. Path must point to an existing image file (.png .jpg .jpeg .gif .webp .bmp .svg .tif .tiff .ico .heic .jxl).',
|
|
102
|
+
'Never use view_image to read text documents (e.g., .md/.ts/.js/.json). For text content, use shell: {"command":["cat","<path>"]}.'
|
|
103
|
+
].join('\n');
|
|
104
|
+
const params = ensureObjectSchema(fn.parameters);
|
|
105
|
+
const props = params.properties;
|
|
106
|
+
if (!isObject(props.path)) {
|
|
107
|
+
props.path = { type: 'string', description: 'Local filesystem path to an image file' };
|
|
108
|
+
}
|
|
109
|
+
params.additionalProperties = false;
|
|
110
|
+
fn.parameters = params;
|
|
111
|
+
fn.description = appendOnce(fn.description, guidance, marker);
|
|
112
|
+
}
|
|
113
|
+
function augmentMCP(fn, toolName) {
|
|
114
|
+
const marker = `[Codex MCP Guidance:${toolName}]`;
|
|
115
|
+
const guidance = [
|
|
116
|
+
marker,
|
|
117
|
+
'Use MCP resources sparingly. Provide only required fields; avoid unnecessary large reads.'
|
|
118
|
+
].join('\n');
|
|
119
|
+
fn.description = appendOnce(fn.description, guidance, marker);
|
|
120
|
+
}
|
|
121
|
+
// For OpenAI tool shape: { type:'function', function:{ name, description?, parameters } }
|
|
122
|
+
export function augmentOpenAITools(tools) {
|
|
123
|
+
if (!Array.isArray(tools))
|
|
124
|
+
return tools;
|
|
125
|
+
const out = [];
|
|
126
|
+
for (const t of tools) {
|
|
127
|
+
if (!t || typeof t !== 'object') {
|
|
128
|
+
out.push(t);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const copy = JSON.parse(JSON.stringify(t));
|
|
132
|
+
const fn = isObject(copy.function) ? copy.function : null;
|
|
133
|
+
const name = fn && typeof fn.name === 'string' ? String(fn.name) : undefined;
|
|
134
|
+
if (fn && name) {
|
|
135
|
+
const n = name.trim();
|
|
136
|
+
try {
|
|
137
|
+
if (n === 'shell')
|
|
138
|
+
augmentShell(fn);
|
|
139
|
+
else if (n === 'apply_patch')
|
|
140
|
+
augmentApplyPatch(fn);
|
|
141
|
+
else if (n === 'update_plan')
|
|
142
|
+
augmentUpdatePlan(fn);
|
|
143
|
+
else if (n === 'view_image')
|
|
144
|
+
augmentViewImage(fn);
|
|
145
|
+
else if (n === 'list_mcp_resources' || n === 'read_mcp_resource' || n === 'list_mcp_resource_templates')
|
|
146
|
+
augmentMCP(fn, n);
|
|
147
|
+
}
|
|
148
|
+
catch { /* ignore */ }
|
|
149
|
+
}
|
|
150
|
+
out.push(copy);
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
// For Anthropic tool shape: { name, description?, input_schema }
|
|
155
|
+
export function augmentAnthropicTools(tools) {
|
|
156
|
+
if (!Array.isArray(tools))
|
|
157
|
+
return tools;
|
|
158
|
+
const out = [];
|
|
159
|
+
for (const t of tools) {
|
|
160
|
+
if (!t || typeof t !== 'object') {
|
|
161
|
+
out.push(t);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const copy = JSON.parse(JSON.stringify(t));
|
|
165
|
+
const name = typeof copy.name === 'string' ? String(copy.name) : undefined;
|
|
166
|
+
const desc = typeof copy.description === 'string' ? String(copy.description) : undefined;
|
|
167
|
+
const schema = ensureObjectSchema(copy.input_schema);
|
|
168
|
+
if (name) {
|
|
169
|
+
const n = name.trim();
|
|
170
|
+
try {
|
|
171
|
+
if (n === 'apply_patch') {
|
|
172
|
+
if (!isObject(schema.properties?.patch)) {
|
|
173
|
+
schema.properties.patch = { type: 'string', description: 'Unified diff patch text' };
|
|
174
|
+
}
|
|
175
|
+
if (!Array.isArray(schema.required))
|
|
176
|
+
schema.required = [];
|
|
177
|
+
if (!schema.required.includes('patch'))
|
|
178
|
+
schema.required.push('patch');
|
|
179
|
+
schema.additionalProperties = false;
|
|
180
|
+
copy.input_schema = schema;
|
|
181
|
+
const marker = '[Codex ApplyPatch Guidance]';
|
|
182
|
+
const guidance = [
|
|
183
|
+
marker,
|
|
184
|
+
'Use unified diff patch with *** Begin Patch/End Patch. Return only the patch text.'
|
|
185
|
+
].join('\n');
|
|
186
|
+
copy.description = appendOnce(desc, guidance, marker);
|
|
187
|
+
}
|
|
188
|
+
if (n === 'shell') {
|
|
189
|
+
const marker = '[Codex Shell Guidance]';
|
|
190
|
+
const guidance = [marker, 'Execute commands via argv tokens only (no redirection).'].join('\n');
|
|
191
|
+
copy.description = appendOnce(desc, guidance, marker);
|
|
192
|
+
}
|
|
193
|
+
if (n === 'update_plan') {
|
|
194
|
+
const marker = '[Codex Plan Guidance]';
|
|
195
|
+
const guidance = [marker, 'Maintain a short plan; one in_progress step only.'].join('\n');
|
|
196
|
+
copy.description = appendOnce(desc, guidance, marker);
|
|
197
|
+
}
|
|
198
|
+
if (n === 'view_image' || n === 'list_mcp_resources' || n === 'read_mcp_resource' || n === 'list_mcp_resource_templates') {
|
|
199
|
+
const marker = `[Codex MCP Guidance:${n}]`;
|
|
200
|
+
const guidance = [marker, 'Use minimally; avoid unnecessary large reads.'].join('\n');
|
|
201
|
+
copy.description = appendOnce(desc, guidance, marker);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch { /* ignore */ }
|
|
205
|
+
}
|
|
206
|
+
out.push(copy);
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
// Build a minimal, consistent system tool guidance string (OpenAI tool_calls model)
|
|
211
|
+
export function buildSystemToolGuidance() {
|
|
212
|
+
const bullet = (s) => `- ${s}`;
|
|
213
|
+
const lines = [];
|
|
214
|
+
lines.push('Tool usage guidance (OpenAI tool_calls) / 工具使用指引(OpenAI 标准)');
|
|
215
|
+
lines.push(bullet('Always use assistant.tool_calls[].function.{name,arguments}; never embed tool calls in plain text. / 一律通过 tool_calls 调用工具,不要把工具调用写进普通文本。'));
|
|
216
|
+
lines.push(bullet('function.arguments must be a single JSON string. / arguments 必须是单个 JSON 字符串。'));
|
|
217
|
+
lines.push(bullet('shell: Place ALL intent into the command argv array only; do not invent extra keys. / shell 所有意图写入 command 数组,不要添加额外键名。'));
|
|
218
|
+
lines.push(bullet('File writes are FORBIDDEN via shell (no redirection, no here-doc, no sed -i, no ed -s, no tee). Use apply_patch ONLY. / 通过 shell 写文件一律禁止(不得使用重定向、heredoc、sed -i、ed -s、tee);必须使用 apply_patch。'));
|
|
219
|
+
lines.push(bullet('apply_patch: Provide a unified diff patch with *** Begin Patch/*** End Patch only. / 仅输出统一 diff 补丁。'));
|
|
220
|
+
lines.push(bullet('apply_patch example / 示例:\n*** Begin Patch\n*** Update File: path/to/file.ts\n@@\n- old line\n+ new line\n*** End Patch'));
|
|
221
|
+
lines.push(bullet('update_plan: Keep exactly one step in_progress; others pending/completed. / 仅一个 in_progress 步骤。'));
|
|
222
|
+
lines.push(bullet('view_image: Path must be an image file (.png .jpg .jpeg .gif .webp .bmp .svg). / 仅图片路径。'));
|
|
223
|
+
lines.push(bullet('Do NOT use view_image for text files (.md/.ts/.js/.json). Use shell: {"command":["cat","<path>"]}. / 文本文件请用 shell: cat。'));
|
|
224
|
+
// Preamble alignment with harness: keep a single concise preamble, but no tool-call meta narration.
|
|
225
|
+
lines.push(bullet('Preamble: Before making tool calls, send ONE brief sentence about immediate next steps (skip for trivial reads); then emit tool_calls. Do not narrate tool-call meta (e.g., “工具调用已生成”). / 预叙:调用工具前可发送一句简短计划(琐碎读取可省略),随后直接生成 tool_calls;不要叙述“已生成工具调用”等元信息。'));
|
|
226
|
+
return lines.join('\n');
|
|
227
|
+
}
|
|
228
|
+
// 注意:我们不再提供"精炼/替换"已有 system 提示词的能力。
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLMSwitch V2 Hooks 集成器(业务命名)
|
|
3
|
+
*
|
|
4
|
+
* 集成现有2hooks系统到LLMSwitch V2架构
|
|
5
|
+
*/
|
|
6
|
+
import type { LLMSwitchHookContext, LLMSwitchProcessingResult, EndpointType, ProtocolType, ProcessingMode } from '../api/llmswitch-types.js';
|
|
7
|
+
import { LLMSwitchHookStage } from '../api/llmswitch-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Hook执行结果
|
|
10
|
+
*/
|
|
11
|
+
export interface HookExecutionResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
data?: any;
|
|
14
|
+
results?: any[];
|
|
15
|
+
error?: Error;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Hook适配器配置
|
|
19
|
+
*/
|
|
20
|
+
export interface HooksIntegrationConfig {
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
timeout: number;
|
|
23
|
+
retryAttempts: number;
|
|
24
|
+
parallel: boolean;
|
|
25
|
+
snapshot: {
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
level?: 'verbose' | 'normal' | 'silent';
|
|
28
|
+
basePath: string;
|
|
29
|
+
endpointIsolation: {
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
pathStructure: 'endpoint/date' | 'endpoint/request' | 'endpoint/timestamp';
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
modulePolicies?: Record<string, {
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
snapshotEnabled?: boolean;
|
|
37
|
+
level?: 'verbose' | 'normal' | 'silent';
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Hook执行上下文构建器
|
|
42
|
+
*/
|
|
43
|
+
export declare class HookContextBuilder {
|
|
44
|
+
/**
|
|
45
|
+
* 构建Hook执行上下文
|
|
46
|
+
*/
|
|
47
|
+
static buildContext(stage: LLMSwitchHookStage, endpoint: EndpointType, originalProtocol: ProtocolType, targetProtocol: ProtocolType, pathIdentifier: string, processingMode: ProcessingMode, hookSequence: number, totalHooks: number, additionalData?: Record<string, any>): LLMSwitchHookContext;
|
|
48
|
+
/**
|
|
49
|
+
* 生成执行ID
|
|
50
|
+
*/
|
|
51
|
+
private static generateExecutionId;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 快照服务配置
|
|
55
|
+
*/
|
|
56
|
+
export interface SnapshotServiceConfig {
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
level?: 'verbose' | 'normal' | 'silent';
|
|
59
|
+
basePath: string;
|
|
60
|
+
endpointIsolation: {
|
|
61
|
+
enabled: boolean;
|
|
62
|
+
pathStructure: 'endpoint/date' | 'endpoint/request' | 'endpoint/timestamp';
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 简化的快照服务
|
|
67
|
+
*/
|
|
68
|
+
export declare class SnapshotService {
|
|
69
|
+
private config;
|
|
70
|
+
constructor(config: SnapshotServiceConfig);
|
|
71
|
+
start(): Promise<void>;
|
|
72
|
+
stop(): Promise<void>;
|
|
73
|
+
saveSnapshot(path: string, data: any): Promise<void>;
|
|
74
|
+
getStats(): any;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Hook管理器(简化实现)
|
|
78
|
+
*/
|
|
79
|
+
export declare class HookManager {
|
|
80
|
+
private handlers;
|
|
81
|
+
registerHandler(stage: string, handler: Function): void;
|
|
82
|
+
executeHook(stage: string, params: any): Promise<HookExecutionResult>;
|
|
83
|
+
getStats(): any;
|
|
84
|
+
clear(): void;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* LLMSwitch V2 Hooks适配器
|
|
88
|
+
*/
|
|
89
|
+
export declare class HooksIntegration {
|
|
90
|
+
private hookManager;
|
|
91
|
+
private snapshotService;
|
|
92
|
+
private config;
|
|
93
|
+
private modulePolicies;
|
|
94
|
+
constructor(config: HooksIntegrationConfig);
|
|
95
|
+
/**
|
|
96
|
+
* 初始化Hook适配器
|
|
97
|
+
*/
|
|
98
|
+
initialize(): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* 执行Hook
|
|
101
|
+
*/
|
|
102
|
+
executeHook(stage: LLMSwitchHookStage, context: LLMSwitchHookContext, data?: any): Promise<LLMSwitchProcessingResult>;
|
|
103
|
+
/**
|
|
104
|
+
* 批量执行Hooks
|
|
105
|
+
*/
|
|
106
|
+
executeHooks(stages: LLMSwitchHookStage[], context: LLMSwitchHookContext, data?: any): Promise<LLMSwitchProcessingResult[]>;
|
|
107
|
+
/**
|
|
108
|
+
* 注册Hook处理器
|
|
109
|
+
*/
|
|
110
|
+
registerHookHandler(stage: LLMSwitchHookStage, handler: Function): void;
|
|
111
|
+
/**
|
|
112
|
+
* 获取Hook统计信息
|
|
113
|
+
*/
|
|
114
|
+
getHookStats(): Record<string, any>;
|
|
115
|
+
/**
|
|
116
|
+
* 获取快照统计信息
|
|
117
|
+
*/
|
|
118
|
+
getSnapshotStats(): Record<string, any>;
|
|
119
|
+
/**
|
|
120
|
+
* 执行Hook的核心逻辑
|
|
121
|
+
*/
|
|
122
|
+
private performHookExecution;
|
|
123
|
+
/**
|
|
124
|
+
* 处理快照
|
|
125
|
+
*/
|
|
126
|
+
private handleSnapshot;
|
|
127
|
+
/**
|
|
128
|
+
* 构建快照路径
|
|
129
|
+
*/
|
|
130
|
+
private buildSnapshotPath;
|
|
131
|
+
private static loadModulePoliciesFromEnv;
|
|
132
|
+
/**
|
|
133
|
+
* 启动适配器
|
|
134
|
+
*/
|
|
135
|
+
start(): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* 停止适配器
|
|
138
|
+
*/
|
|
139
|
+
stop(): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* 销毁适配器
|
|
142
|
+
*/
|
|
143
|
+
destroy(): Promise<void>;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 创建Hook适配器的工厂函数
|
|
147
|
+
*/
|
|
148
|
+
export declare function createHooksIntegration(config?: Partial<HooksIntegrationConfig>): HooksIntegration;
|
|
149
|
+
/**
|
|
150
|
+
* Lightweight helper: write a snapshot using the same SnapshotService and
|
|
151
|
+
* path conventions as HooksIntegration, without requiring a live hooks
|
|
152
|
+
* pipeline. Intended for external callers (server/provider/compat) that
|
|
153
|
+
* want to unify snapshot emission through the core hooks system.
|
|
154
|
+
*/
|
|
155
|
+
export declare function writeSnapshotViaHooks(options: {
|
|
156
|
+
endpoint: string;
|
|
157
|
+
stage: string;
|
|
158
|
+
requestId: string;
|
|
159
|
+
data: any;
|
|
160
|
+
verbosity?: 'verbose' | 'normal' | 'silent';
|
|
161
|
+
}): Promise<void>;
|