@od-oneapp/ai-platform 0.1.0
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 +235 -0
- package/dist/agents-base.d.mts +12 -0
- package/dist/agents-base.d.mts.map +1 -0
- package/dist/agents-base.mjs +20 -0
- package/dist/agents-base.mjs.map +1 -0
- package/dist/agents-control-flow.d.mts +115 -0
- package/dist/agents-control-flow.d.mts.map +1 -0
- package/dist/agents-control-flow.mjs +514 -0
- package/dist/agents-control-flow.mjs.map +1 -0
- package/dist/agents-coordinator.d.mts +11 -0
- package/dist/agents-coordinator.d.mts.map +1 -0
- package/dist/agents-coordinator.mjs +12 -0
- package/dist/agents-coordinator.mjs.map +1 -0
- package/dist/agents-experimental.d.mts +153 -0
- package/dist/agents-experimental.d.mts.map +1 -0
- package/dist/agents-experimental.mjs +580 -0
- package/dist/agents-experimental.mjs.map +1 -0
- package/dist/agents-fallback.d.mts +10 -0
- package/dist/agents-fallback.d.mts.map +1 -0
- package/dist/agents-fallback.mjs +15 -0
- package/dist/agents-fallback.mjs.map +1 -0
- package/dist/agents-multi-swarm.d.mts +9 -0
- package/dist/agents-multi-swarm.d.mts.map +1 -0
- package/dist/agents-multi-swarm.mjs +44 -0
- package/dist/agents-multi-swarm.mjs.map +1 -0
- package/dist/agents-multi.d.mts +10 -0
- package/dist/agents-multi.d.mts.map +1 -0
- package/dist/agents-multi.mjs +44 -0
- package/dist/agents-multi.mjs.map +1 -0
- package/dist/agents-observability.d.mts +161 -0
- package/dist/agents-observability.d.mts.map +1 -0
- package/dist/agents-observability.mjs +550 -0
- package/dist/agents-observability.mjs.map +1 -0
- package/dist/agents-patterns.d.mts +9 -0
- package/dist/agents-patterns.d.mts.map +1 -0
- package/dist/agents-patterns.mjs +18 -0
- package/dist/agents-patterns.mjs.map +1 -0
- package/dist/agents-persistence.d.mts +234 -0
- package/dist/agents-persistence.d.mts.map +1 -0
- package/dist/agents-persistence.mjs +447 -0
- package/dist/agents-persistence.mjs.map +1 -0
- package/dist/agents-triage.d.mts +11 -0
- package/dist/agents-triage.d.mts.map +1 -0
- package/dist/agents-triage.mjs +13 -0
- package/dist/agents-triage.mjs.map +1 -0
- package/dist/agents-workflows.d.mts +9 -0
- package/dist/agents-workflows.d.mts.map +1 -0
- package/dist/agents-workflows.mjs +9 -0
- package/dist/agents-workflows.mjs.map +1 -0
- package/dist/agents.d.mts +30 -0
- package/dist/agents.d.mts.map +1 -0
- package/dist/agents.mjs +50 -0
- package/dist/agents.mjs.map +1 -0
- package/dist/aggregation-8KJF1uzp.d.mts +276 -0
- package/dist/aggregation-8KJF1uzp.d.mts.map +1 -0
- package/dist/aggregation-BDop87kL.mjs +1180 -0
- package/dist/aggregation-BDop87kL.mjs.map +1 -0
- package/dist/ai-runtime-CDzQztTt.mjs +85 -0
- package/dist/ai-runtime-CDzQztTt.mjs.map +1 -0
- package/dist/ai-runtime-DIwOEc6g.d.mts +56 -0
- package/dist/ai-runtime-DIwOEc6g.d.mts.map +1 -0
- package/dist/ai-sdk-error-integration-D0GDqrM0.d.mts +553 -0
- package/dist/ai-sdk-error-integration-D0GDqrM0.d.mts.map +1 -0
- package/dist/approval-queue-BcDDQ4oQ.mjs +104 -0
- package/dist/approval-queue-BcDDQ4oQ.mjs.map +1 -0
- package/dist/approval-queue-CiKiFT9z.d.mts +21 -0
- package/dist/approval-queue-CiKiFT9z.d.mts.map +1 -0
- package/dist/audio-BzvN7r10.d.mts +79 -0
- package/dist/audio-BzvN7r10.d.mts.map +1 -0
- package/dist/audio-vBG_62ME.mjs +226 -0
- package/dist/audio-vBG_62ME.mjs.map +1 -0
- package/dist/audit-logger-Bb2JIcIk.d.mts +12 -0
- package/dist/audit-logger-Bb2JIcIk.d.mts.map +1 -0
- package/dist/audit-logger-CHIP8bRO.mjs +596 -0
- package/dist/audit-logger-CHIP8bRO.mjs.map +1 -0
- package/dist/auto-resume-BpUNbPtp.d.mts +160 -0
- package/dist/auto-resume-BpUNbPtp.d.mts.map +1 -0
- package/dist/auto-resume-BuFRNvAX.mjs +638 -0
- package/dist/auto-resume-BuFRNvAX.mjs.map +1 -0
- package/dist/budget-guard-C83KCH9V.d.mts +52 -0
- package/dist/budget-guard-C83KCH9V.d.mts.map +1 -0
- package/dist/budget-guard-d_b5rq4u.mjs +158 -0
- package/dist/budget-guard-d_b5rq4u.mjs.map +1 -0
- package/dist/budget-guard-gyhJS00s.mjs +234 -0
- package/dist/budget-guard-gyhJS00s.mjs.map +1 -0
- package/dist/buffer-BC8mvXHE.d.mts +98 -0
- package/dist/buffer-BC8mvXHE.d.mts.map +1 -0
- package/dist/buffer-CefJGbRy.mjs +289 -0
- package/dist/buffer-CefJGbRy.mjs.map +1 -0
- package/dist/caching-adapters.d.mts +5 -0
- package/dist/caching-adapters.mjs +3 -0
- package/dist/caching-strategies.d.mts +52 -0
- package/dist/caching-strategies.d.mts.map +1 -0
- package/dist/caching-strategies.mjs +703 -0
- package/dist/caching-strategies.mjs.map +1 -0
- package/dist/caching.d.mts +14 -0
- package/dist/caching.d.mts.map +1 -0
- package/dist/caching.mjs +15 -0
- package/dist/caching.mjs.map +1 -0
- package/dist/catalog.d.mts +19 -0
- package/dist/catalog.d.mts.map +1 -0
- package/dist/catalog.mjs +1114 -0
- package/dist/catalog.mjs.map +1 -0
- package/dist/chunk-CkzbjWQW.mjs +20 -0
- package/dist/circuit-breaker-DoKWPORd.mjs +262 -0
- package/dist/circuit-breaker-DoKWPORd.mjs.map +1 -0
- package/dist/circuit-breaker-Mey3E7tW.d.mts +64 -0
- package/dist/circuit-breaker-Mey3E7tW.d.mts.map +1 -0
- package/dist/citation-generator-C-9RpbHq.mjs +103 -0
- package/dist/citation-generator-C-9RpbHq.mjs.map +1 -0
- package/dist/citation-generator-CDSymDs_.d.mts +18 -0
- package/dist/citation-generator-CDSymDs_.d.mts.map +1 -0
- package/dist/client-CpacYDIE.mjs +882 -0
- package/dist/client-CpacYDIE.mjs.map +1 -0
- package/dist/client.d.mts +103 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +470 -0
- package/dist/client.mjs.map +1 -0
- package/dist/compliance-approval-queue-DQGLojAm.mjs +172 -0
- package/dist/compliance-approval-queue-DQGLojAm.mjs.map +1 -0
- package/dist/compliance-approval-queue-IrMxFfSJ.d.mts +99 -0
- package/dist/compliance-approval-queue-IrMxFfSJ.d.mts.map +1 -0
- package/dist/compliance-wrapper-CrOMHhHN.mjs +528 -0
- package/dist/compliance-wrapper-CrOMHhHN.mjs.map +1 -0
- package/dist/conditions-DmQ6Y1Wt.mjs +179 -0
- package/dist/conditions-DmQ6Y1Wt.mjs.map +1 -0
- package/dist/conditions-zDrKfrc3.d.mts +42 -0
- package/dist/conditions-zDrKfrc3.d.mts.map +1 -0
- package/dist/console-BGMxxPZN.mjs +181 -0
- package/dist/console-BGMxxPZN.mjs.map +1 -0
- package/dist/console-DqEqZd4A.d.mts +76 -0
- package/dist/console-DqEqZd4A.d.mts.map +1 -0
- package/dist/controller-BOy3-xbC.mjs +501 -0
- package/dist/controller-BOy3-xbC.mjs.map +1 -0
- package/dist/controller-Y0NGosbJ.d.mts +104 -0
- package/dist/controller-Y0NGosbJ.d.mts.map +1 -0
- package/dist/coordinator-agent-BglqZLwo.d.mts +54 -0
- package/dist/coordinator-agent-BglqZLwo.d.mts.map +1 -0
- package/dist/coordinator-agent-WFWBRL-G.mjs +236 -0
- package/dist/coordinator-agent-WFWBRL-G.mjs.map +1 -0
- package/dist/crypto-8ABhc3TD.mjs +40 -0
- package/dist/crypto-8ABhc3TD.mjs.map +1 -0
- package/dist/environment-CSoJb0SW.mjs +255 -0
- package/dist/environment-CSoJb0SW.mjs.map +1 -0
- package/dist/error-handling-DNVkm6RY.mjs +1334 -0
- package/dist/error-handling-DNVkm6RY.mjs.map +1 -0
- package/dist/errors-CQ8tF4dP.mjs +985 -0
- package/dist/errors-CQ8tF4dP.mjs.map +1 -0
- package/dist/errors-CfYdVeum.d.mts +212 -0
- package/dist/errors-CfYdVeum.d.mts.map +1 -0
- package/dist/errors-Dtn-UeRi.mjs +61 -0
- package/dist/errors-Dtn-UeRi.mjs.map +1 -0
- package/dist/evaluator-Cs84qkr8.mjs +91 -0
- package/dist/evaluator-Cs84qkr8.mjs.map +1 -0
- package/dist/evaluator-optimizer-De67_mJC.mjs +1086 -0
- package/dist/evaluator-optimizer-De67_mJC.mjs.map +1 -0
- package/dist/evaluator-optimizer-pattern-B5939s2Z.mjs +367 -0
- package/dist/evaluator-optimizer-pattern-B5939s2Z.mjs.map +1 -0
- package/dist/evaluator-optimizer-pattern-D1AJrzBD.d.mts +72 -0
- package/dist/evaluator-optimizer-pattern-D1AJrzBD.d.mts.map +1 -0
- package/dist/factory-DP6VSl8C.mjs +307 -0
- package/dist/factory-DP6VSl8C.mjs.map +1 -0
- package/dist/generative-ui-catalog.d.mts +8 -0
- package/dist/generative-ui-catalog.d.mts.map +1 -0
- package/dist/generative-ui-catalog.mjs +679 -0
- package/dist/generative-ui-catalog.mjs.map +1 -0
- package/dist/generative-ui-registry.d.mts +195 -0
- package/dist/generative-ui-registry.d.mts.map +1 -0
- package/dist/generative-ui-registry.mjs +250 -0
- package/dist/generative-ui-registry.mjs.map +1 -0
- package/dist/generative-ui-stream.d.mts +23 -0
- package/dist/generative-ui-stream.d.mts.map +1 -0
- package/dist/generative-ui-stream.mjs +219 -0
- package/dist/generative-ui-stream.mjs.map +1 -0
- package/dist/generative-ui-types.d.mts +123 -0
- package/dist/generative-ui-types.d.mts.map +1 -0
- package/dist/generative-ui-types.mjs +1 -0
- package/dist/generative-ui.d.mts +13 -0
- package/dist/generative-ui.d.mts.map +1 -0
- package/dist/generative-ui.mjs +21 -0
- package/dist/generative-ui.mjs.map +1 -0
- package/dist/governance-audit.d.mts +3 -0
- package/dist/governance-audit.mjs +3 -0
- package/dist/governance-compliance.d.mts +5 -0
- package/dist/governance-compliance.mjs +4 -0
- package/dist/governance-policies.d.mts +4 -0
- package/dist/governance-policies.mjs +4 -0
- package/dist/governance-tenancy.d.mts +3 -0
- package/dist/governance-tenancy.mjs +3 -0
- package/dist/governance.d.mts +88 -0
- package/dist/governance.d.mts.map +1 -0
- package/dist/governance.mjs +432 -0
- package/dist/governance.mjs.map +1 -0
- package/dist/grounding-attribution.d.mts +63 -0
- package/dist/grounding-attribution.d.mts.map +1 -0
- package/dist/grounding-attribution.mjs +259 -0
- package/dist/grounding-attribution.mjs.map +1 -0
- package/dist/grounding-citation.d.mts +2 -0
- package/dist/grounding-citation.mjs +3 -0
- package/dist/grounding-context.d.mts +9 -0
- package/dist/grounding-context.d.mts.map +1 -0
- package/dist/grounding-context.mjs +19 -0
- package/dist/grounding-context.mjs.map +1 -0
- package/dist/grounding-embed.d.mts +102 -0
- package/dist/grounding-embed.d.mts.map +1 -0
- package/dist/grounding-embed.mjs +417 -0
- package/dist/grounding-embed.mjs.map +1 -0
- package/dist/grounding-hallucination.d.mts +44 -0
- package/dist/grounding-hallucination.d.mts.map +1 -0
- package/dist/grounding-hallucination.mjs +115 -0
- package/dist/grounding-hallucination.mjs.map +1 -0
- package/dist/grounding-proof-map.d.mts +9 -0
- package/dist/grounding-proof-map.d.mts.map +1 -0
- package/dist/grounding-proof-map.mjs +26 -0
- package/dist/grounding-proof-map.mjs.map +1 -0
- package/dist/grounding-rag.d.mts +10 -0
- package/dist/grounding-rag.d.mts.map +1 -0
- package/dist/grounding-rag.mjs +27 -0
- package/dist/grounding-rag.mjs.map +1 -0
- package/dist/grounding-verification.d.mts +48 -0
- package/dist/grounding-verification.d.mts.map +1 -0
- package/dist/grounding-verification.mjs +224 -0
- package/dist/grounding-verification.mjs.map +1 -0
- package/dist/grounding.d.mts +24 -0
- package/dist/grounding.d.mts.map +1 -0
- package/dist/grounding.mjs +77 -0
- package/dist/grounding.mjs.map +1 -0
- package/dist/hitl-active-learning.d.mts +41 -0
- package/dist/hitl-active-learning.d.mts.map +1 -0
- package/dist/hitl-active-learning.mjs +178 -0
- package/dist/hitl-active-learning.mjs.map +1 -0
- package/dist/hitl-annotation.d.mts +74 -0
- package/dist/hitl-annotation.d.mts.map +1 -0
- package/dist/hitl-annotation.mjs +170 -0
- package/dist/hitl-annotation.mjs.map +1 -0
- package/dist/hitl-approval.d.mts +2 -0
- package/dist/hitl-approval.mjs +3 -0
- package/dist/hitl-feedback.d.mts +59 -0
- package/dist/hitl-feedback.d.mts.map +1 -0
- package/dist/hitl-feedback.mjs +137 -0
- package/dist/hitl-feedback.mjs.map +1 -0
- package/dist/hitl-review.d.mts +2 -0
- package/dist/hitl-review.mjs +3 -0
- package/dist/hitl.d.mts +14 -0
- package/dist/hitl.d.mts.map +1 -0
- package/dist/hitl.mjs +22 -0
- package/dist/hitl.mjs.map +1 -0
- package/dist/index-B17HT-VL.d.mts +285 -0
- package/dist/index-B17HT-VL.d.mts.map +1 -0
- package/dist/index-BDwgsK9B.d.mts +101 -0
- package/dist/index-BDwgsK9B.d.mts.map +1 -0
- package/dist/index-BGgMn_Ev.d.mts +2615 -0
- package/dist/index-BGgMn_Ev.d.mts.map +1 -0
- package/dist/index-DOqe5r9G.d.mts +318 -0
- package/dist/index-DOqe5r9G.d.mts.map +1 -0
- package/dist/index-DotINT7o.d.mts +1004 -0
- package/dist/index-DotINT7o.d.mts.map +1 -0
- package/dist/index-URlW7aD1.d.mts +67 -0
- package/dist/index-URlW7aD1.d.mts.map +1 -0
- package/dist/index.d.mts +64 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +46 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integrations-blob-storage.d.mts +25 -0
- package/dist/integrations-blob-storage.d.mts.map +1 -0
- package/dist/integrations-blob-storage.mjs +3 -0
- package/dist/integrations-notifications.d.mts +2 -0
- package/dist/integrations-notifications.mjs +3 -0
- package/dist/integrations-rate-limit.d.mts +27 -0
- package/dist/integrations-rate-limit.d.mts.map +1 -0
- package/dist/integrations-rate-limit.mjs +30 -0
- package/dist/integrations-rate-limit.mjs.map +1 -0
- package/dist/integrations-redis.d.mts +3 -0
- package/dist/integrations-redis.mjs +3 -0
- package/dist/integrations-stream.d.mts +14 -0
- package/dist/integrations-stream.d.mts.map +1 -0
- package/dist/integrations-stream.mjs +3 -0
- package/dist/integrations.d.mts +7 -0
- package/dist/integrations.mjs +7 -0
- package/dist/log-adapter-BLegSZtz.d.mts +16 -0
- package/dist/log-adapter-BLegSZtz.d.mts.map +1 -0
- package/dist/log-adapter-PPe_2Pwv.mjs +28 -0
- package/dist/log-adapter-PPe_2Pwv.mjs.map +1 -0
- package/dist/loop-BOYEtr2g.mjs +520 -0
- package/dist/loop-BOYEtr2g.mjs.map +1 -0
- package/dist/loop-C-tBBOqi.d.mts +219 -0
- package/dist/loop-C-tBBOqi.d.mts.map +1 -0
- package/dist/middleware-5wQ9bANW.mjs +306 -0
- package/dist/middleware-5wQ9bANW.mjs.map +1 -0
- package/dist/middleware-C1apSrj0.mjs +613 -0
- package/dist/middleware-C1apSrj0.mjs.map +1 -0
- package/dist/middleware-C7k0uItW.d.mts +9 -0
- package/dist/middleware-C7k0uItW.d.mts.map +1 -0
- package/dist/middleware-CZQCTHfl.mjs +366 -0
- package/dist/middleware-CZQCTHfl.mjs.map +1 -0
- package/dist/models.d.mts +11 -0
- package/dist/models.d.mts.map +1 -0
- package/dist/models.mjs +32 -0
- package/dist/models.mjs.map +1 -0
- package/dist/observability-analytics.d.mts +107 -0
- package/dist/observability-analytics.d.mts.map +1 -0
- package/dist/observability-analytics.mjs +409 -0
- package/dist/observability-analytics.mjs.map +1 -0
- package/dist/observability-cost.d.mts +10 -0
- package/dist/observability-cost.d.mts.map +1 -0
- package/dist/observability-cost.mjs +15 -0
- package/dist/observability-cost.mjs.map +1 -0
- package/dist/observability-telemetry.d.mts +111 -0
- package/dist/observability-telemetry.d.mts.map +1 -0
- package/dist/observability-telemetry.mjs +343 -0
- package/dist/observability-telemetry.mjs.map +1 -0
- package/dist/observability-tracing.d.mts +10 -0
- package/dist/observability-tracing.d.mts.map +1 -0
- package/dist/observability-tracing.mjs +17 -0
- package/dist/observability-tracing.mjs.map +1 -0
- package/dist/observability.d.mts +15 -0
- package/dist/observability.d.mts.map +1 -0
- package/dist/observability.mjs +17 -0
- package/dist/observability.mjs.map +1 -0
- package/dist/optimizer-DhXXpci6.mjs +97 -0
- package/dist/optimizer-DhXXpci6.mjs.map +1 -0
- package/dist/output-multimodal.d.mts +9 -0
- package/dist/output-multimodal.d.mts.map +1 -0
- package/dist/output-multimodal.mjs +18 -0
- package/dist/output-multimodal.mjs.map +1 -0
- package/dist/output.d.mts +11 -0
- package/dist/output.d.mts.map +1 -0
- package/dist/output.mjs +40 -0
- package/dist/output.mjs.map +1 -0
- package/dist/pii-filter-3AxmYSiu.d.mts +23 -0
- package/dist/pii-filter-3AxmYSiu.d.mts.map +1 -0
- package/dist/pipelines.d.mts +448 -0
- package/dist/pipelines.d.mts.map +1 -0
- package/dist/pipelines.mjs +1534 -0
- package/dist/pipelines.mjs.map +1 -0
- package/dist/prompt-injection-DQXchzsV.d.mts +8 -0
- package/dist/prompt-injection-DQXchzsV.d.mts.map +1 -0
- package/dist/prompt-injection-RpoLPwSa.mjs +52 -0
- package/dist/prompt-injection-RpoLPwSa.mjs.map +1 -0
- package/dist/prompts.d.mts +192 -0
- package/dist/prompts.d.mts.map +1 -0
- package/dist/prompts.mjs +732 -0
- package/dist/prompts.mjs.map +1 -0
- package/dist/protocol-DfBiEsnl.d.mts +112 -0
- package/dist/protocol-DfBiEsnl.d.mts.map +1 -0
- package/dist/quota-manager-0iPMkQWN.d.mts +62 -0
- package/dist/quota-manager-0iPMkQWN.d.mts.map +1 -0
- package/dist/quota-manager-D_N7FuQ2.mjs +180 -0
- package/dist/quota-manager-D_N7FuQ2.mjs.map +1 -0
- package/dist/redaction-utils-DcQwsiNh.mjs +438 -0
- package/dist/redaction-utils-DcQwsiNh.mjs.map +1 -0
- package/dist/redis-CpsSrF8K.mjs +102 -0
- package/dist/redis-CpsSrF8K.mjs.map +1 -0
- package/dist/redis-CwguYFGh.d.mts +33 -0
- package/dist/redis-CwguYFGh.d.mts.map +1 -0
- package/dist/registry-CsD3iTIx.mjs +190 -0
- package/dist/registry-CsD3iTIx.mjs.map +1 -0
- package/dist/registry-DVPWzkXR.d.mts +36 -0
- package/dist/registry-DVPWzkXR.d.mts.map +1 -0
- package/dist/reranking-BpWYhYzl.d.mts +72 -0
- package/dist/reranking-BpWYhYzl.d.mts.map +1 -0
- package/dist/reranking-Ck8aKZW7.mjs +331 -0
- package/dist/reranking-Ck8aKZW7.mjs.map +1 -0
- package/dist/resumable-adapter-CO1HtsgJ.mjs +21 -0
- package/dist/resumable-adapter-CO1HtsgJ.mjs.map +1 -0
- package/dist/review-trigger-DmAsiQlM.d.mts +24 -0
- package/dist/review-trigger-DmAsiQlM.d.mts.map +1 -0
- package/dist/review-trigger-DwXfpww9.mjs +112 -0
- package/dist/review-trigger-DwXfpww9.mjs.map +1 -0
- package/dist/safe-context-BynhkTKR.d.mts +54 -0
- package/dist/safe-context-BynhkTKR.d.mts.map +1 -0
- package/dist/safe-context-C5A3Wv3b.mjs +143 -0
- package/dist/safe-context-C5A3Wv3b.mjs.map +1 -0
- package/dist/schema-Bu2noOZ4.mjs +27 -0
- package/dist/schema-Bu2noOZ4.mjs.map +1 -0
- package/dist/schema-CwFvuCnA.mjs +97 -0
- package/dist/schema-CwFvuCnA.mjs.map +1 -0
- package/dist/schema-Wz-1-ro9.d.mts +37 -0
- package/dist/schema-Wz-1-ro9.d.mts.map +1 -0
- package/dist/schemas-CxQtxIga.mjs +62 -0
- package/dist/schemas-CxQtxIga.mjs.map +1 -0
- package/dist/schemas-DBOhxgW7.d.mts +32 -0
- package/dist/schemas-DBOhxgW7.d.mts.map +1 -0
- package/dist/schemas-Dp_OCqBt.d.mts +63 -0
- package/dist/schemas-Dp_OCqBt.d.mts.map +1 -0
- package/dist/schemas-SwCsnT0z.mjs +83 -0
- package/dist/schemas-SwCsnT0z.mjs.map +1 -0
- package/dist/sdk-errors.d.mts +2 -0
- package/dist/sdk-errors.mjs +3 -0
- package/dist/sdk-experimental.d.mts +59 -0
- package/dist/sdk-experimental.d.mts.map +1 -0
- package/dist/sdk-experimental.mjs +193 -0
- package/dist/sdk-experimental.mjs.map +1 -0
- package/dist/sdk-stop-conditions.d.mts +3 -0
- package/dist/sdk-stop-conditions.mjs +3 -0
- package/dist/sdk.d.mts +15 -0
- package/dist/sdk.d.mts.map +1 -0
- package/dist/sdk.mjs +50 -0
- package/dist/sdk.mjs.map +1 -0
- package/dist/security-guardrails.d.mts +3 -0
- package/dist/security-guardrails.mjs +3 -0
- package/dist/security-injection.d.mts +2 -0
- package/dist/security-injection.mjs +3 -0
- package/dist/security.d.mts +12 -0
- package/dist/security.d.mts.map +1 -0
- package/dist/security.mjs +18 -0
- package/dist/security.mjs.map +1 -0
- package/dist/server.d.mts +420 -0
- package/dist/server.d.mts.map +1 -0
- package/dist/server.mjs +2225 -0
- package/dist/server.mjs.map +1 -0
- package/dist/shared.d.mts +2 -0
- package/dist/shared.mjs +3 -0
- package/dist/streaming-control.d.mts +2 -0
- package/dist/streaming-control.mjs +4 -0
- package/dist/streaming-core.d.mts +4 -0
- package/dist/streaming-core.mjs +3 -0
- package/dist/streaming-infra-resilience.d.mts +120 -0
- package/dist/streaming-infra-resilience.d.mts.map +1 -0
- package/dist/streaming-infra-resilience.mjs +358 -0
- package/dist/streaming-infra-resilience.mjs.map +1 -0
- package/dist/streaming-infra-transport.d.mts +57 -0
- package/dist/streaming-infra-transport.d.mts.map +1 -0
- package/dist/streaming-infra-transport.mjs +488 -0
- package/dist/streaming-infra-transport.mjs.map +1 -0
- package/dist/streaming-infra.d.mts +5 -0
- package/dist/streaming-infra.mjs +5 -0
- package/dist/streaming.d.mts +17 -0
- package/dist/streaming.d.mts.map +1 -0
- package/dist/streaming.mjs +71 -0
- package/dist/streaming.mjs.map +1 -0
- package/dist/telemetry-2eKMojIb.mjs +1046 -0
- package/dist/telemetry-2eKMojIb.mjs.map +1 -0
- package/dist/telemetry-C2t03dwD.d.mts +59 -0
- package/dist/telemetry-C2t03dwD.d.mts.map +1 -0
- package/dist/tool-Btbththq.d.mts +253 -0
- package/dist/tool-Btbththq.d.mts.map +1 -0
- package/dist/tool-JSf8JXZ8.mjs +1150 -0
- package/dist/tool-JSf8JXZ8.mjs.map +1 -0
- package/dist/tool-safety-CZO8a4D4.d.mts +60 -0
- package/dist/tool-safety-CZO8a4D4.d.mts.map +1 -0
- package/dist/tool-safety-DXtYDXod.mjs +319 -0
- package/dist/tool-safety-DXtYDXod.mjs.map +1 -0
- package/dist/tools-BuS2Uv0q.mjs +1708 -0
- package/dist/tools-BuS2Uv0q.mjs.map +1 -0
- package/dist/tools-approval.d.mts +99 -0
- package/dist/tools-approval.d.mts.map +1 -0
- package/dist/tools-approval.mjs +395 -0
- package/dist/tools-approval.mjs.map +1 -0
- package/dist/tools-compliance.d.mts +67 -0
- package/dist/tools-compliance.d.mts.map +1 -0
- package/dist/tools-compliance.mjs +330 -0
- package/dist/tools-compliance.mjs.map +1 -0
- package/dist/tools-computer.d.mts +25 -0
- package/dist/tools-computer.d.mts.map +1 -0
- package/dist/tools-computer.mjs +64 -0
- package/dist/tools-computer.mjs.map +1 -0
- package/dist/tools-core.d.mts +3 -0
- package/dist/tools-core.mjs +3 -0
- package/dist/tools-mcp.d.mts +3 -0
- package/dist/tools-mcp.mjs +5 -0
- package/dist/tools-superpowers.d.mts +2 -0
- package/dist/tools-superpowers.mjs +3 -0
- package/dist/tools.d.mts +401 -0
- package/dist/tools.d.mts.map +1 -0
- package/dist/tools.mjs +1921 -0
- package/dist/tools.mjs.map +1 -0
- package/dist/transport-selector-D-Ib05X1.mjs +1936 -0
- package/dist/transport-selector-D-Ib05X1.mjs.map +1 -0
- package/dist/triage-agent-BEsXg5sw.d.mts +63 -0
- package/dist/triage-agent-BEsXg5sw.d.mts.map +1 -0
- package/dist/triage-agent-CBsfX-HW.mjs +167 -0
- package/dist/triage-agent-CBsfX-HW.mjs.map +1 -0
- package/dist/types-BPnq3GQo.d.mts +23 -0
- package/dist/types-BPnq3GQo.d.mts.map +1 -0
- package/dist/types-BjWgimpY.d.mts +16 -0
- package/dist/types-BjWgimpY.d.mts.map +1 -0
- package/dist/types-BxD-5btB.d.mts +41 -0
- package/dist/types-BxD-5btB.d.mts.map +1 -0
- package/dist/types-By-r93bE.d.mts +36 -0
- package/dist/types-By-r93bE.d.mts.map +1 -0
- package/dist/types-CLBWFRZN.d.mts +69 -0
- package/dist/types-CLBWFRZN.d.mts.map +1 -0
- package/dist/types-CQ0HFd0u.d.mts +62 -0
- package/dist/types-CQ0HFd0u.d.mts.map +1 -0
- package/dist/types-D3zJb59_.d.mts +47 -0
- package/dist/types-D3zJb59_.d.mts.map +1 -0
- package/dist/types-DJnugQX0.d.mts +80 -0
- package/dist/types-DJnugQX0.d.mts.map +1 -0
- package/dist/types-DbUfMCnT.d.mts +70 -0
- package/dist/types-DbUfMCnT.d.mts.map +1 -0
- package/dist/upstash-adapter-D96Caq2O.mjs +22 -0
- package/dist/upstash-adapter-D96Caq2O.mjs.map +1 -0
- package/dist/upstash-adapter-DD4433dx.d.mts +8 -0
- package/dist/upstash-adapter-DD4433dx.d.mts.map +1 -0
- package/dist/utils-BlYhcD6M.mjs +319 -0
- package/dist/utils-BlYhcD6M.mjs.map +1 -0
- package/dist/utils-DpJGOb3y.d.mts +120 -0
- package/dist/utils-DpJGOb3y.d.mts.map +1 -0
- package/dist/vercel-blob-adapter-CkOXLT2D.mjs +25 -0
- package/dist/vercel-blob-adapter-CkOXLT2D.mjs.map +1 -0
- package/dist/xai-CbV_dCnP.mjs +1600 -0
- package/dist/xai-CbV_dCnP.mjs.map +1 -0
- package/package.json +479 -0
- package/src/agents/base/factory.ts +382 -0
- package/src/agents/base/index.ts +8 -0
- package/src/agents/base/schemas.ts +117 -0
- package/src/agents/base/types.ts +192 -0
- package/src/agents/control-flow/index.ts +683 -0
- package/src/agents/coordinator/coordinator-agent.ts +381 -0
- package/src/agents/coordinator/index.ts +6 -0
- package/src/agents/default-agent.ts +211 -0
- package/src/agents/evaluator-optimizer/README.md +612 -0
- package/src/agents/evaluator-optimizer/evaluator-optimizer.example.ts +437 -0
- package/src/agents/evaluator-optimizer/evaluator.ts +282 -0
- package/src/agents/evaluator-optimizer/index.test.ts +416 -0
- package/src/agents/evaluator-optimizer/index.ts +519 -0
- package/src/agents/evaluator-optimizer/optimizer.ts +322 -0
- package/src/agents/evaluator-optimizer/schema.ts +302 -0
- package/src/agents/evaluator-optimizer/utils.ts +42 -0
- package/src/agents/experimental/index.ts +1095 -0
- package/src/agents/experimental/types.ts +212 -0
- package/src/agents/fallback/index.ts +18 -0
- package/src/agents/fallback/recovery/circuit-breaker.ts +166 -0
- package/src/agents/fallback/strategies/model-fallback.ts +192 -0
- package/src/agents/fallback/types.ts +87 -0
- package/src/agents/governance-agent.ts +446 -0
- package/src/agents/index.ts +79 -0
- package/src/agents/multi/coordination/index.ts +6 -0
- package/src/agents/multi/coordination/message-bus.ts +144 -0
- package/src/agents/multi/index.ts +6 -0
- package/src/agents/multi/state/index.ts +162 -0
- package/src/agents/multi/supervisor/index.ts +7 -0
- package/src/agents/multi/supervisor/supervisor.ts +254 -0
- package/src/agents/multi/swarm/aggregation.ts +466 -0
- package/src/agents/multi/swarm/communication.ts +388 -0
- package/src/agents/multi/swarm/coordination.ts +380 -0
- package/src/agents/multi/swarm/index.ts +73 -0
- package/src/agents/multi/swarm/swarm-executor.ts +479 -0
- package/src/agents/multi/types.ts +181 -0
- package/src/agents/observability/index.ts +914 -0
- package/src/agents/orchestrator.ts +218 -0
- package/src/agents/patterns/README.md +512 -0
- package/src/agents/patterns/evaluator-optimizer-pattern.example.ts +455 -0
- package/src/agents/patterns/evaluator-optimizer-pattern.ts +653 -0
- package/src/agents/patterns/index.ts +26 -0
- package/src/agents/persistence/index.ts +726 -0
- package/src/agents/tools/index.ts +291 -0
- package/src/agents/tools/mcp.ts +188 -0
- package/src/agents/triage/index.ts +6 -0
- package/src/agents/triage/triage-agent.ts +280 -0
- package/src/agents/workflows/index.ts +6 -0
- package/src/agents/workflows/interfaces.ts +36 -0
- package/src/agents/workflows/schema.ts +20 -0
- package/src/caching/adapters/index.ts +7 -0
- package/src/caching/adapters/memory.ts +77 -0
- package/src/caching/adapters/redis.ts +60 -0
- package/src/caching/index.ts +17 -0
- package/src/caching/middleware.ts +452 -0
- package/src/caching/strategies/index.ts +1008 -0
- package/src/caching/types.ts +47 -0
- package/src/catalog.ts +921 -0
- package/src/client/chat-usage.ts +53 -0
- package/src/client/hooks.ts +343 -0
- package/src/client/index.ts +36 -0
- package/src/client/message-utils.ts +29 -0
- package/src/client/use-generative-ui.ts +174 -0
- package/src/client/utils.ts +66 -0
- package/src/generative-ui/catalog.ts +653 -0
- package/src/generative-ui/index.ts +82 -0
- package/src/generative-ui/registry.ts +273 -0
- package/src/generative-ui/stream.ts +324 -0
- package/src/generative-ui/types.ts +376 -0
- package/src/governance/audit/audit-logger.ts +239 -0
- package/src/governance/audit/audit-schema.ts +82 -0
- package/src/governance/audit/index.ts +6 -0
- package/src/governance/compliance/abac/policy-engine.ts +175 -0
- package/src/governance/compliance/abac/types.ts +40 -0
- package/src/governance/compliance/approval/compliance-approval-queue.ts +217 -0
- package/src/governance/compliance/index.ts +16 -0
- package/src/governance/compliance/schemas.ts +68 -0
- package/src/governance/compliance/types.ts +143 -0
- package/src/governance/compliance/validators/phi-detector.ts +145 -0
- package/src/governance/compliance/validators/redaction-utils.ts +176 -0
- package/src/governance/compliance/validators/safe-harbor.ts +135 -0
- package/src/governance/entitlements/index.ts +585 -0
- package/src/governance/entitlements/middleware.ts +651 -0
- package/src/governance/entitlements/rate-limiter.ts +711 -0
- package/src/governance/index.ts +32 -0
- package/src/governance/policies/guardrails.ts +1121 -0
- package/src/governance/policies/index.ts +42 -0
- package/src/governance/policies/loop-controls.ts +136 -0
- package/src/governance/policies/telemetry.ts +63 -0
- package/src/governance/tenancy/index.ts +30 -0
- package/src/governance/tenancy/isolation/context.ts +92 -0
- package/src/governance/tenancy/isolation/index.ts +13 -0
- package/src/governance/tenancy/quotas/index.ts +11 -0
- package/src/governance/tenancy/quotas/quota-manager.ts +180 -0
- package/src/governance/tenancy/types.ts +66 -0
- package/src/governance/types.ts +16 -0
- package/src/governance/versioning/index.ts +573 -0
- package/src/grounding/attribution/index.ts +424 -0
- package/src/grounding/citation/citation-generator.ts +174 -0
- package/src/grounding/citation/index.ts +12 -0
- package/src/grounding/context/index.ts +32 -0
- package/src/grounding/context/safe-context.ts +116 -0
- package/src/grounding/context/types.ts +62 -0
- package/src/grounding/context-engineering/error-handling.ts +359 -0
- package/src/grounding/context-engineering/index.ts +23 -0
- package/src/grounding/context-engineering/memory.ts +559 -0
- package/src/grounding/context-engineering/tool-masking.ts +338 -0
- package/src/grounding/embed/index.ts +704 -0
- package/src/grounding/embed/reranking.ts +604 -0
- package/src/grounding/hallucination/index.ts +223 -0
- package/src/grounding/index.ts +82 -0
- package/src/grounding/proof-map/applyPatch.ts +172 -0
- package/src/grounding/proof-map/index.ts +41 -0
- package/src/grounding/proof-map/loop.ts +275 -0
- package/src/grounding/proof-map/schema.ts +217 -0
- package/src/grounding/rag/__tests__/pipeline.test.ts +274 -0
- package/src/grounding/rag/__tests__/tool.test.ts +202 -0
- package/src/grounding/rag/__tests__/trace.test.ts +229 -0
- package/src/grounding/rag/circuit-breaker.ts +152 -0
- package/src/grounding/rag/index.ts +64 -0
- package/src/grounding/rag/pipeline.ts +602 -0
- package/src/grounding/rag/tool.ts +281 -0
- package/src/grounding/rag/trace.ts +503 -0
- package/src/grounding/rag/types.ts +284 -0
- package/src/grounding/retrieval/in-memory-store.ts +107 -0
- package/src/grounding/sources/index.ts +943 -0
- package/src/grounding/tests/applyPatch.test.ts +194 -0
- package/src/grounding/tests/loop.test.ts +141 -0
- package/src/grounding/tests/schema.test.ts +160 -0
- package/src/grounding/types.ts +100 -0
- package/src/grounding/verification/index.ts +419 -0
- package/src/hitl/active-learning/index.ts +332 -0
- package/src/hitl/annotation/index.ts +362 -0
- package/src/hitl/approval/approval-queue.ts +132 -0
- package/src/hitl/approval/index.ts +5 -0
- package/src/hitl/feedback/index.ts +284 -0
- package/src/hitl/index.ts +69 -0
- package/src/hitl/review/index.ts +6 -0
- package/src/hitl/review/review-trigger.ts +162 -0
- package/src/hitl/types.ts +126 -0
- package/src/index.ts +125 -0
- package/src/integrations/blob-storage/index.ts +7 -0
- package/src/integrations/blob-storage/types.ts +28 -0
- package/src/integrations/blob-storage/vercel-blob-adapter.ts +35 -0
- package/src/integrations/index.ts +15 -0
- package/src/integrations/notifications/index.ts +7 -0
- package/src/integrations/notifications/log-adapter.ts +30 -0
- package/src/integrations/notifications/types.ts +27 -0
- package/src/integrations/rate-limit/index.ts +7 -0
- package/src/integrations/rate-limit/types.ts +26 -0
- package/src/integrations/rate-limit/upstash-adapter.ts +45 -0
- package/src/integrations/redis/index.ts +7 -0
- package/src/integrations/redis/types.ts +67 -0
- package/src/integrations/redis/upstash-adapter.ts +18 -0
- package/src/integrations/stream/index.ts +7 -0
- package/src/integrations/stream/resumable-adapter.ts +20 -0
- package/src/integrations/stream/types.ts +21 -0
- package/src/internal/__tests__/hallucination.test.ts +162 -0
- package/src/internal/__tests__/models.test.ts +104 -0
- package/src/internal/__tests__/sdk-errors.test.ts +201 -0
- package/src/internal/__tests__/stop-conditions.test.ts +210 -0
- package/src/internal/shared/ai-types.ts +942 -0
- package/src/internal/testing/evaluators.ts +575 -0
- package/src/internal/testing/index.ts +960 -0
- package/src/internal/ui/data-parts.ts +511 -0
- package/src/internal/ui/type-guards.ts +344 -0
- package/src/internal/ui-factories/__tests__/ui-factories.test.ts +548 -0
- package/src/internal/ui-factories/artifact-factory.ts +667 -0
- package/src/internal/ui-factories/index.ts +82 -0
- package/src/internal/ui-factories/shimmer-manager.ts +220 -0
- package/src/internal/ui-factories/status-helpers.ts +149 -0
- package/src/internal/ui-factories/tool-renderer.ts +167 -0
- package/src/internal/ui-factories/types.ts +235 -0
- package/src/models/capabilities.ts +88 -0
- package/src/models/index.ts +16 -0
- package/src/models/provider-factory.ts +229 -0
- package/src/models/providers/anthropic.ts +539 -0
- package/src/models/providers/google.ts +354 -0
- package/src/models/providers/index.ts +21 -0
- package/src/models/providers/openai.ts +346 -0
- package/src/models/providers/perplexity.ts +276 -0
- package/src/models/providers/shared.ts +90 -0
- package/src/models/providers/xai.ts +269 -0
- package/src/models/registry.ts +208 -0
- package/src/models/routing/index.ts +45 -0
- package/src/models/routing/intent-router.ts +143 -0
- package/src/models/routing/model-router.ts +300 -0
- package/src/models/routing/types.ts +106 -0
- package/src/models/types.ts +23 -0
- package/src/observability/analytics/index.ts +593 -0
- package/src/observability/cost/index.ts +16 -0
- package/src/observability/cost/tracking/budget-guard.ts +110 -0
- package/src/observability/cost/tracking/usage-tracker.ts +120 -0
- package/src/observability/cost/types.ts +85 -0
- package/src/observability/index.ts +17 -0
- package/src/observability/telemetry/index.ts +508 -0
- package/src/observability/tracing/index.ts +30 -0
- package/src/observability/tracing/otel/ai-instrumentation.ts +193 -0
- package/src/observability/tracing/otel/exporters/console.ts +58 -0
- package/src/observability/tracing/otel/exporters/index.ts +6 -0
- package/src/observability/tracing/provenance.ts +769 -0
- package/src/observability/tracing/types.ts +92 -0
- package/src/output/__tests__/output.test.ts +737 -0
- package/src/output/element-stream.ts +678 -0
- package/src/output/errors.ts +108 -0
- package/src/output/factories.ts +392 -0
- package/src/output/index.ts +98 -0
- package/src/output/multimodal/EXPORTS.md +306 -0
- package/src/output/multimodal/IMPLEMENTATION_SUMMARY.md +421 -0
- package/src/output/multimodal/README.md +349 -0
- package/src/output/multimodal/SETUP_GUIDE.md +472 -0
- package/src/output/multimodal/audio.ts +650 -0
- package/src/output/multimodal/image.ts +22 -0
- package/src/output/multimodal/index.ts +32 -0
- package/src/output/multimodal/providers.example.ts +375 -0
- package/src/output/validator.ts +495 -0
- package/src/pipelines/adapters/trace-storage-blob.ts +458 -0
- package/src/pipelines/adapters/trace-storage-memory.ts +319 -0
- package/src/pipelines/defaults.ts +109 -0
- package/src/pipelines/index.ts +24 -0
- package/src/pipelines/message-transforms.ts +107 -0
- package/src/pipelines/multi-step-wrapper.ts +433 -0
- package/src/pipelines/pipeline-presets.ts +339 -0
- package/src/pipelines/step-executor.ts +257 -0
- package/src/pipelines/storage-factory.ts +85 -0
- package/src/pipelines/trace-storage-interface.ts +216 -0
- package/src/pipelines/types.ts +255 -0
- package/src/pipelines/validation.ts +323 -0
- package/src/prompts/index.ts +271 -0
- package/src/prompts/model-variants.ts +410 -0
- package/src/prompts/templates.ts +327 -0
- package/src/sdk/errors/base.ts +296 -0
- package/src/sdk/errors/index.ts +31 -0
- package/src/sdk/errors/utils.ts +148 -0
- package/src/sdk/experimental/index.ts +286 -0
- package/src/sdk/index.ts +25 -0
- package/src/sdk/middleware/ai-middleware.ts +95 -0
- package/src/sdk/middleware/cache.ts +154 -0
- package/src/sdk/middleware/circuit-breaker.ts +388 -0
- package/src/sdk/middleware/compose.ts +81 -0
- package/src/sdk/middleware/deduplication.ts +307 -0
- package/src/sdk/middleware/index.ts +660 -0
- package/src/sdk/middleware/model-middleware.ts +200 -0
- package/src/sdk/stop-conditions/conditions.ts +209 -0
- package/src/sdk/stop-conditions/index.ts +35 -0
- package/src/sdk/stop-conditions/types.ts +59 -0
- package/src/security/guardrails/index.ts +6 -0
- package/src/security/guardrails/middleware.ts +465 -0
- package/src/security/guardrails/pii-filter.ts +396 -0
- package/src/security/index.ts +33 -0
- package/src/security/injection/index.ts +5 -0
- package/src/security/injection/prompt-injection.ts +64 -0
- package/src/security/types.ts +85 -0
- package/src/server/cache/crypto.ts +47 -0
- package/src/server/cache/performance.ts +79 -0
- package/src/server/error-handler.ts +93 -0
- package/src/server/errors.ts +73 -0
- package/src/server/helpers.ts +944 -0
- package/src/server/http.ts +156 -0
- package/src/server/index.ts +12 -0
- package/src/server/messages/__tests__/messages.test.ts +720 -0
- package/src/server/messages/converter.ts +245 -0
- package/src/server/messages/data-parts.ts +338 -0
- package/src/server/messages/extraction.ts +328 -0
- package/src/server/messages/index.ts +126 -0
- package/src/server/messages/types.ts +355 -0
- package/src/server/messages/window.ts +450 -0
- package/src/server/rate-limit/env.ts +8 -0
- package/src/server/rate-limit/rate-limit.ts +165 -0
- package/src/server/routes/HEALTH_CHECK.md +502 -0
- package/src/server/routes/IMPLEMENTATION_SUMMARY.md +432 -0
- package/src/server/routes/QUICK_START.md +327 -0
- package/src/server/routes/README.md +357 -0
- package/src/server/routes/__tests__/routes.test.ts +628 -0
- package/src/server/routes/agent-route.ts +224 -0
- package/src/server/routes/agent-routes.ts +191 -0
- package/src/server/routes/embed-config.ts +181 -0
- package/src/server/routes/health-check.example.ts +507 -0
- package/src/server/routes/health-check.test.ts +533 -0
- package/src/server/routes/health-check.ts +639 -0
- package/src/server/routes/health-check.types.ts +217 -0
- package/src/server/routes/index.ts +32 -0
- package/src/server/routes/types.ts +274 -0
- package/src/shared/__tests__/schemas.test.ts +317 -0
- package/src/shared/ai-runtime.ts +139 -0
- package/src/shared/ai-types.ts +133 -0
- package/src/shared/index.ts +30 -0
- package/src/shared/sdk-runtime.ts +198 -0
- package/src/shared/sdk-types.ts +301 -0
- package/src/streaming/control/__tests__/streaming-control.test.ts +708 -0
- package/src/streaming/control/budget-guard.ts +264 -0
- package/src/streaming/control/controller.ts +255 -0
- package/src/streaming/control/index.ts +105 -0
- package/src/streaming/control/smoothing.ts +201 -0
- package/src/streaming/control/step-limit.ts +215 -0
- package/src/streaming/control/types.ts +234 -0
- package/src/streaming/core/auto-resume.ts +276 -0
- package/src/streaming/core/index.ts +85 -0
- package/src/streaming/core/multi-step.ts +471 -0
- package/src/streaming/core/protocol.ts +194 -0
- package/src/streaming/core/types.ts +182 -0
- package/src/streaming/index.ts +97 -0
- package/src/streaming/infra/backpressure/buffer.ts +210 -0
- package/src/streaming/infra/backpressure/index.ts +6 -0
- package/src/streaming/infra/index.ts +75 -0
- package/src/streaming/infra/multiplexing/index.ts +311 -0
- package/src/streaming/infra/resilience/index.ts +684 -0
- package/src/streaming/infra/transform/index.ts +15 -0
- package/src/streaming/infra/transform/stream-transforms.ts +166 -0
- package/src/streaming/infra/transport/index.ts +774 -0
- package/src/streaming/infra/types.ts +118 -0
- package/src/streaming/infra-extra/types.ts +118 -0
- package/src/tools/advanced/caching.ts +299 -0
- package/src/tools/advanced/generator.ts +267 -0
- package/src/tools/advanced/hitl.ts +251 -0
- package/src/tools/advanced/index.ts +9 -0
- package/src/tools/advanced/llm-tool.ts +208 -0
- package/src/tools/approval/FILES.md +449 -0
- package/src/tools/approval/IMPLEMENTATION_SUMMARY.md +567 -0
- package/src/tools/approval/QUICK_START.md +362 -0
- package/src/tools/approval/README.md +514 -0
- package/src/tools/approval/advanced-approval-queue.ts +7 -0
- package/src/tools/approval/approval.example.ts +571 -0
- package/src/tools/approval/in-memory-queue.ts +405 -0
- package/src/tools/approval/index.ts +737 -0
- package/src/tools/approval/middleware.ts +590 -0
- package/src/tools/approval/queue-factory.ts +162 -0
- package/src/tools/approval/redis-queue.ts +327 -0
- package/src/tools/approval/testing.ts +493 -0
- package/src/tools/approval/types.ts +221 -0
- package/src/tools/approval/with-approval.ts +366 -0
- package/src/tools/artifacts/artifact-tools.ts +273 -0
- package/src/tools/artifacts/index.ts +6 -0
- package/src/tools/compliance/compliance-wrapper.ts +789 -0
- package/src/tools/compliance/create-compliant-stream.ts +226 -0
- package/src/tools/compliance/index.ts +8 -0
- package/src/tools/compliance/phi-redaction.ts +406 -0
- package/src/tools/compliance/tool-wrapper.ts +306 -0
- package/src/tools/computer/index.ts +99 -0
- package/src/tools/computer/types.ts +41 -0
- package/src/tools/core/abort.ts +202 -0
- package/src/tools/core/factory.ts +197 -0
- package/src/tools/core/index.ts +8 -0
- package/src/tools/core/tool-safety.ts +112 -0
- package/src/tools/generic/index.ts +9 -0
- package/src/tools/generic/json-schema-tool.ts +301 -0
- package/src/tools/generic/tiptap-context.ts +619 -0
- package/src/tools/generic/web-search-tool.ts +82 -0
- package/src/tools/generic/web-search.ts +142 -0
- package/src/tools/index.ts +36 -0
- package/src/tools/mcp/ai-sdk-error-integration.ts +401 -0
- package/src/tools/mcp/client.ts +988 -0
- package/src/tools/mcp/connection-manager.ts +380 -0
- package/src/tools/mcp/connection-pool.ts +408 -0
- package/src/tools/mcp/edge-runtime.ts +318 -0
- package/src/tools/mcp/environment.ts +310 -0
- package/src/tools/mcp/index.ts +20 -0
- package/src/tools/mcp/next-pattern.ts +401 -0
- package/src/tools/mcp/stream-lifecycle-integration.ts +617 -0
- package/src/tools/mcp/tool-cache.ts +359 -0
- package/src/tools/mcp/transport-selector.ts +492 -0
- package/src/tools/mcp/transports.ts +99 -0
- package/src/tools/simple-factory.ts +55 -0
- package/src/tools/superpowers/index.ts +122 -0
- package/src/tools/superpowers/prompts/index.ts +533 -0
- package/src/tools/superpowers/schemas/index.ts +701 -0
- package/src/tools/superpowers/tools/index.ts +721 -0
- package/src/tools/validation-wrapper.ts +97 -0
|
@@ -0,0 +1,1046 @@
|
|
|
1
|
+
import { jt as stepCountIs } from "./ai-runtime-CDzQztTt.mjs";
|
|
2
|
+
import { t as complianceSignalSchema } from "./schemas-CxQtxIga.mjs";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
|
|
5
|
+
//#region src/governance/policies/guardrails.ts
|
|
6
|
+
/**
|
|
7
|
+
* @fileoverview Guardrails and content filtering policies
|
|
8
|
+
*
|
|
9
|
+
* Provides multi-layer defense for AI agent inputs and outputs including:
|
|
10
|
+
* - Pattern blocking (SQL injection, destructive commands, privilege escalation)
|
|
11
|
+
* - PII sanitization (email, SSN, phone, credit card, addresses, etc.)
|
|
12
|
+
* - Stream monitoring (real-time output validation)
|
|
13
|
+
*
|
|
14
|
+
* @module @od-oneapp/ai-platform/policies/guardrails
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Banned patterns for content filtering.
|
|
18
|
+
* Detects dangerous SQL commands, injection attempts, and privilege escalation.
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
const BANNED_PATTERNS = [
|
|
22
|
+
{
|
|
23
|
+
pattern: /drop\s+(table|database|schema|index)/gi,
|
|
24
|
+
reason: "Destructive SQL command detected (DROP)",
|
|
25
|
+
risk: "high"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
pattern: /truncate\s+table/gi,
|
|
29
|
+
reason: "Destructive SQL command detected (TRUNCATE)",
|
|
30
|
+
risk: "high"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
pattern: /delete\s+from\s+\w+\s+(where\s+1\s*=\s*1|without\s+where)/gi,
|
|
34
|
+
reason: "Dangerous DELETE operation without proper WHERE clause",
|
|
35
|
+
risk: "high"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
pattern: /select\s+\*\s+from\s+(users|passwords|credentials|secrets|tokens)/gi,
|
|
39
|
+
reason: "Direct sensitive data extraction requires manual approval",
|
|
40
|
+
risk: "high"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
pattern: /update\s+(users|accounts)\s+set\s+(role|permissions|is_admin)/gi,
|
|
44
|
+
reason: "Privilege escalation attempt detected",
|
|
45
|
+
risk: "high"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
pattern: /;\s*(drop|delete|update|insert)/gi,
|
|
49
|
+
reason: "Potential SQL injection with chained commands",
|
|
50
|
+
risk: "high"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
pattern: /(union\s+select|union\s+all\s+select)/gi,
|
|
54
|
+
reason: "Potential SQL injection with UNION",
|
|
55
|
+
risk: "high"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
pattern: /(exec|execute)\s+(xp_|sp_)/gi,
|
|
59
|
+
reason: "Potential system stored procedure execution",
|
|
60
|
+
risk: "high"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
pattern: /into\s+outfile|load_file\(/gi,
|
|
64
|
+
reason: "File system access attempt detected",
|
|
65
|
+
risk: "high"
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Validates credit card number using Luhn algorithm.
|
|
70
|
+
* @param num - Numeric string to validate
|
|
71
|
+
* @returns True if valid Luhn checksum
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
const isValidLuhn = (num) => {
|
|
75
|
+
const digits = num.replace(/\D/g, "");
|
|
76
|
+
if (digits.length < 13 || digits.length > 19) return false;
|
|
77
|
+
let sum = 0;
|
|
78
|
+
let isEven = false;
|
|
79
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
80
|
+
let digit = parseInt(digits[i] ?? "0", 10);
|
|
81
|
+
if (isEven) {
|
|
82
|
+
digit *= 2;
|
|
83
|
+
if (digit > 9) digit -= 9;
|
|
84
|
+
}
|
|
85
|
+
sum += digit;
|
|
86
|
+
isEven = !isEven;
|
|
87
|
+
}
|
|
88
|
+
return sum % 10 === 0;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Checks if context keywords exist within a window around a match position.
|
|
92
|
+
* @param text - Full text to search
|
|
93
|
+
* @param matchStart - Start position of the match
|
|
94
|
+
* @param matchEnd - End position of the match
|
|
95
|
+
* @param keywords - Keywords to search for
|
|
96
|
+
* @param windowSize - Character window to search
|
|
97
|
+
* @returns True if any keyword is found within the window
|
|
98
|
+
* @internal
|
|
99
|
+
*/
|
|
100
|
+
const hasContextKeyword = (text, matchStart, matchEnd, keywords, windowSize) => {
|
|
101
|
+
const windowStart = Math.max(0, matchStart - windowSize);
|
|
102
|
+
const windowEnd = Math.min(text.length, matchEnd + windowSize);
|
|
103
|
+
const contextText = text.slice(windowStart, windowEnd).toLowerCase();
|
|
104
|
+
return keywords.some((keyword) => contextText.includes(keyword.toLowerCase()));
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Enterprise-grade PII patterns with context-aware detection.
|
|
108
|
+
* Reduces false positives by requiring context keywords for ambiguous patterns.
|
|
109
|
+
* @internal
|
|
110
|
+
*/
|
|
111
|
+
const PII_PATTERNS = [
|
|
112
|
+
{
|
|
113
|
+
regex: /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,
|
|
114
|
+
placeholder: "[redacted-email]",
|
|
115
|
+
type: "guardrail.sanitized"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
regex: /\b\d{3}-\d{2}-\d{4}\b/g,
|
|
119
|
+
placeholder: "[redacted-ssn]",
|
|
120
|
+
type: "guardrail.sanitized"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
regex: /\b\d{9}\b/g,
|
|
124
|
+
placeholder: "[redacted-ssn]",
|
|
125
|
+
type: "guardrail.sanitized",
|
|
126
|
+
contextKeywords: [
|
|
127
|
+
"ssn",
|
|
128
|
+
"social security",
|
|
129
|
+
"social-security",
|
|
130
|
+
"tax id",
|
|
131
|
+
"taxpayer"
|
|
132
|
+
],
|
|
133
|
+
contextWindow: 50
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
regex: /\b(?:\+1[-.\s]?)?(?:\(?\d{3}\)?[-.\s]?)?\d{3}[-.\s]?\d{4}\b/g,
|
|
137
|
+
placeholder: "[redacted-phone]",
|
|
138
|
+
type: "guardrail.sanitized",
|
|
139
|
+
contextKeywords: [
|
|
140
|
+
"phone",
|
|
141
|
+
"call",
|
|
142
|
+
"tel",
|
|
143
|
+
"mobile",
|
|
144
|
+
"cell",
|
|
145
|
+
"contact",
|
|
146
|
+
"fax",
|
|
147
|
+
"number"
|
|
148
|
+
],
|
|
149
|
+
contextWindow: 30
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
regex: /\b(?:\d{4}[-\s]?){3}\d{4,7}\b/g,
|
|
153
|
+
placeholder: "[redacted-card]",
|
|
154
|
+
type: "guardrail.sanitized",
|
|
155
|
+
luhnValidation: true
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
regex: /\b\d{13,19}\b/g,
|
|
159
|
+
placeholder: "[redacted-card]",
|
|
160
|
+
type: "guardrail.sanitized",
|
|
161
|
+
contextKeywords: [
|
|
162
|
+
"card",
|
|
163
|
+
"credit",
|
|
164
|
+
"debit",
|
|
165
|
+
"visa",
|
|
166
|
+
"mastercard",
|
|
167
|
+
"amex",
|
|
168
|
+
"discover",
|
|
169
|
+
"payment"
|
|
170
|
+
],
|
|
171
|
+
contextWindow: 40,
|
|
172
|
+
luhnValidation: true
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
regex: /\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})\b/g,
|
|
176
|
+
placeholder: "[redacted-ip]",
|
|
177
|
+
type: "guardrail.sanitized",
|
|
178
|
+
validator: (match) => {
|
|
179
|
+
if ([
|
|
180
|
+
"127.0.0.1",
|
|
181
|
+
"0.0.0.0",
|
|
182
|
+
"255.255.255.255"
|
|
183
|
+
].includes(match)) return false;
|
|
184
|
+
return match.split(".").map(Number).every((o) => o >= 0 && o <= 255);
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
regex: /\b[A-Z]?\d{8,9}\b/g,
|
|
189
|
+
placeholder: "[redacted-passport]",
|
|
190
|
+
type: "guardrail.sanitized",
|
|
191
|
+
contextKeywords: [
|
|
192
|
+
"passport",
|
|
193
|
+
"travel document",
|
|
194
|
+
"travel doc",
|
|
195
|
+
"passport number",
|
|
196
|
+
"passport#"
|
|
197
|
+
],
|
|
198
|
+
contextWindow: 60
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
regex: /\b(0?[1-9]|1[0-2])[\/\-](0?[1-9]|[12]\d|3[01])[\/\-](19|20)\d{2}\b/g,
|
|
202
|
+
placeholder: "[redacted-dob]",
|
|
203
|
+
type: "guardrail.sanitized",
|
|
204
|
+
contextKeywords: [
|
|
205
|
+
"dob",
|
|
206
|
+
"birth",
|
|
207
|
+
"birthday",
|
|
208
|
+
"born",
|
|
209
|
+
"date of birth",
|
|
210
|
+
"birthdate",
|
|
211
|
+
"d.o.b",
|
|
212
|
+
"age"
|
|
213
|
+
],
|
|
214
|
+
contextWindow: 40
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
regex: /\b\d+\s+[A-Za-z]+(?:\s+[A-Za-z]+)?\s+(?:Street|St|Avenue|Ave|Road|Rd|Drive|Dr|Lane|Ln|Court|Ct|Boulevard|Blvd|Way|Place|Pl|Circle|Cir)\.?\b/gi,
|
|
218
|
+
placeholder: "[redacted-address]",
|
|
219
|
+
type: "guardrail.sanitized"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
regex: /\b\d{5}(?:-\d{4})?\b/g,
|
|
223
|
+
placeholder: "[redacted-zip]",
|
|
224
|
+
type: "guardrail.sanitized",
|
|
225
|
+
contextKeywords: [
|
|
226
|
+
"zip",
|
|
227
|
+
"postal",
|
|
228
|
+
"address",
|
|
229
|
+
"city",
|
|
230
|
+
"state",
|
|
231
|
+
"mail",
|
|
232
|
+
"ship"
|
|
233
|
+
],
|
|
234
|
+
contextWindow: 50
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
regex: /\b\d{8,17}\b/g,
|
|
238
|
+
placeholder: "[redacted-account]",
|
|
239
|
+
type: "guardrail.sanitized",
|
|
240
|
+
contextKeywords: [
|
|
241
|
+
"account",
|
|
242
|
+
"acct",
|
|
243
|
+
"routing",
|
|
244
|
+
"bank",
|
|
245
|
+
"iban",
|
|
246
|
+
"aba",
|
|
247
|
+
"swift",
|
|
248
|
+
"wire",
|
|
249
|
+
"deposit",
|
|
250
|
+
"checking",
|
|
251
|
+
"savings"
|
|
252
|
+
],
|
|
253
|
+
contextWindow: 50
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
regex: /\b[A-Z]{1,2}\d{5,8}\b/g,
|
|
257
|
+
placeholder: "[redacted-license]",
|
|
258
|
+
type: "guardrail.sanitized",
|
|
259
|
+
contextKeywords: [
|
|
260
|
+
"license",
|
|
261
|
+
"licence",
|
|
262
|
+
"dl",
|
|
263
|
+
"driver's",
|
|
264
|
+
"drivers",
|
|
265
|
+
"dmv",
|
|
266
|
+
"driving"
|
|
267
|
+
],
|
|
268
|
+
contextWindow: 40
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
regex: /\b(?:AKIA|ABIA|ACCA|ASIA)[A-Z0-9]{16}\b/g,
|
|
272
|
+
placeholder: "[redacted-aws-key]",
|
|
273
|
+
type: "guardrail.sanitized"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
regex: /\b[a-zA-Z0-9_-]{32,64}\b/g,
|
|
277
|
+
placeholder: "[redacted-token]",
|
|
278
|
+
type: "guardrail.sanitized",
|
|
279
|
+
contextKeywords: [
|
|
280
|
+
"api_key",
|
|
281
|
+
"apikey",
|
|
282
|
+
"api-key",
|
|
283
|
+
"token",
|
|
284
|
+
"secret",
|
|
285
|
+
"password",
|
|
286
|
+
"bearer",
|
|
287
|
+
"authorization",
|
|
288
|
+
"auth"
|
|
289
|
+
],
|
|
290
|
+
contextWindow: 30
|
|
291
|
+
}
|
|
292
|
+
];
|
|
293
|
+
/**
|
|
294
|
+
* Redacts PII (Personally Identifiable Information) from text.
|
|
295
|
+
* Uses enterprise-grade context-aware detection to minimize false positives
|
|
296
|
+
* while maintaining strong security coverage.
|
|
297
|
+
*
|
|
298
|
+
* Features:
|
|
299
|
+
* - Context-aware detection for ambiguous patterns (e.g., 9-digit numbers)
|
|
300
|
+
* - Luhn validation for credit card numbers
|
|
301
|
+
* - Custom validators for IP address filtering
|
|
302
|
+
* - AWS key and API token detection
|
|
303
|
+
*
|
|
304
|
+
* @param text - Text to sanitize.
|
|
305
|
+
* @returns Object containing redacted text and compliance signals.
|
|
306
|
+
* @internal
|
|
307
|
+
* @example
|
|
308
|
+
* ```ts
|
|
309
|
+
* const { redacted } = redactPii('Contact me at jane@example.com');
|
|
310
|
+
* // redacted === 'Contact me at [redacted-email]'
|
|
311
|
+
*
|
|
312
|
+
* // Context-aware: only redacts when context keywords present
|
|
313
|
+
* const { redacted: r1 } = redactPii('My passport number is 123456789');
|
|
314
|
+
* // r1 === 'My passport number is [redacted-passport]'
|
|
315
|
+
*
|
|
316
|
+
* const { redacted: r2 } = redactPii('Order 123456789 shipped');
|
|
317
|
+
* // r2 === 'Order 123456789 shipped' (no redaction - no context)
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
const redactPii = (text) => {
|
|
321
|
+
let result = text;
|
|
322
|
+
const signals = [];
|
|
323
|
+
const processedRanges = [];
|
|
324
|
+
for (const pattern of PII_PATTERNS) {
|
|
325
|
+
pattern.regex.lastIndex = 0;
|
|
326
|
+
let match;
|
|
327
|
+
const matches = [];
|
|
328
|
+
while ((match = pattern.regex.exec(result)) !== null) {
|
|
329
|
+
const matchStart = match.index;
|
|
330
|
+
const matchEnd = match.index + match[0].length;
|
|
331
|
+
if (processedRanges.some((range) => matchStart >= range.start && matchStart < range.end || matchEnd > range.start && matchEnd <= range.end)) continue;
|
|
332
|
+
if (pattern.contextKeywords && pattern.contextKeywords.length > 0) {
|
|
333
|
+
const windowSize = pattern.contextWindow ?? 50;
|
|
334
|
+
if (!hasContextKeyword(result, matchStart, matchEnd, pattern.contextKeywords, windowSize)) continue;
|
|
335
|
+
}
|
|
336
|
+
if (pattern.luhnValidation) {
|
|
337
|
+
if (!isValidLuhn(match[0])) continue;
|
|
338
|
+
}
|
|
339
|
+
if (pattern.validator && !pattern.validator(match[0], result)) continue;
|
|
340
|
+
matches.push({
|
|
341
|
+
match: match[0],
|
|
342
|
+
start: matchStart,
|
|
343
|
+
end: matchEnd
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
for (let i = matches.length - 1; i >= 0; i--) {
|
|
347
|
+
const item = matches[i];
|
|
348
|
+
if (!item) continue;
|
|
349
|
+
const { start, end } = item;
|
|
350
|
+
result = result.slice(0, start) + pattern.placeholder + result.slice(end);
|
|
351
|
+
processedRanges.push({
|
|
352
|
+
start,
|
|
353
|
+
end
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
if (matches.length > 0) signals.push(complianceSignalSchema.parse({
|
|
357
|
+
id: randomUUID(),
|
|
358
|
+
type: pattern.type,
|
|
359
|
+
message: `Automatically sanitized ${matches.length} sensitive value(s) (${pattern.placeholder})`,
|
|
360
|
+
runId: "guardrail",
|
|
361
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
362
|
+
metadata: {
|
|
363
|
+
count: matches.length,
|
|
364
|
+
pattern: pattern.placeholder
|
|
365
|
+
}
|
|
366
|
+
}));
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
redacted: result,
|
|
370
|
+
signals
|
|
371
|
+
};
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Inspects a prompt for banned patterns and PII.
|
|
375
|
+
* Checks against banned patterns first, then sanitizes PII if not blocked.
|
|
376
|
+
*
|
|
377
|
+
* @param prompt - Prompt text to inspect.
|
|
378
|
+
* @returns Guardrail result with sanitization status and signals.
|
|
379
|
+
* @internal
|
|
380
|
+
* @example
|
|
381
|
+
* ```ts
|
|
382
|
+
* const result = inspectPrompt('drop table users;');
|
|
383
|
+
* // result.blocked === true
|
|
384
|
+
* ```
|
|
385
|
+
*/
|
|
386
|
+
const inspectPrompt = (prompt) => {
|
|
387
|
+
const signals = [];
|
|
388
|
+
let blocked = false;
|
|
389
|
+
let risk = "low";
|
|
390
|
+
for (const { pattern, reason, risk: patternRisk } of BANNED_PATTERNS) {
|
|
391
|
+
pattern.lastIndex = 0;
|
|
392
|
+
if (pattern.test(prompt)) {
|
|
393
|
+
blocked = true;
|
|
394
|
+
risk = patternRisk;
|
|
395
|
+
signals.push(complianceSignalSchema.parse({
|
|
396
|
+
id: randomUUID(),
|
|
397
|
+
type: "guardrail.blocked",
|
|
398
|
+
message: reason,
|
|
399
|
+
runId: "guardrail",
|
|
400
|
+
riskLevel: patternRisk,
|
|
401
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
402
|
+
}));
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (blocked) return {
|
|
406
|
+
blocked,
|
|
407
|
+
sanitizedPrompt: null,
|
|
408
|
+
signals,
|
|
409
|
+
risk
|
|
410
|
+
};
|
|
411
|
+
const { redacted, signals: piiSignals } = redactPii(prompt);
|
|
412
|
+
signals.push(...piiSignals);
|
|
413
|
+
return {
|
|
414
|
+
blocked,
|
|
415
|
+
sanitizedPrompt: redacted,
|
|
416
|
+
signals,
|
|
417
|
+
risk
|
|
418
|
+
};
|
|
419
|
+
};
|
|
420
|
+
/**
|
|
421
|
+
* Attaches guardrail signals to a target object.
|
|
422
|
+
* Used to propagate compliance signals through the request/response chain.
|
|
423
|
+
*
|
|
424
|
+
* @param target - Target object to attach signals to.
|
|
425
|
+
* @param signals - Compliance signals to attach.
|
|
426
|
+
* @internal
|
|
427
|
+
* @example
|
|
428
|
+
* ```ts
|
|
429
|
+
* const payload: any = {};
|
|
430
|
+
* attachGuardrailSignals(payload, [complianceSignalSchema.parse({ id: '1', type: 'guardrail.blocked', message: 'Blocked', runId: 'guardrail', timestamp: new Date().toISOString(), riskLevel: 'high' })]);
|
|
431
|
+
* ```
|
|
432
|
+
*/
|
|
433
|
+
const attachGuardrailSignals = (target, signals) => {
|
|
434
|
+
if (!signals.length || !target || typeof target !== "object") return;
|
|
435
|
+
const container = target;
|
|
436
|
+
container.guardrailSignals = [...Array.isArray(container.guardrailSignals) ? container.guardrailSignals : [], ...signals];
|
|
437
|
+
};
|
|
438
|
+
/**
|
|
439
|
+
* Creates a guardrail error with attached signals.
|
|
440
|
+
*
|
|
441
|
+
* @param signals - Compliance signals explaining why the request was blocked.
|
|
442
|
+
* @returns Error object with guardrail signals attached.
|
|
443
|
+
* @internal
|
|
444
|
+
* @example
|
|
445
|
+
* ```ts
|
|
446
|
+
* const error = createGuardrailError([
|
|
447
|
+
* // signals
|
|
448
|
+
* ]);
|
|
449
|
+
* ```
|
|
450
|
+
*/
|
|
451
|
+
const createGuardrailError = (signals) => {
|
|
452
|
+
const error = /* @__PURE__ */ new Error("Request blocked by guardrails");
|
|
453
|
+
attachGuardrailSignals(error, signals);
|
|
454
|
+
return error;
|
|
455
|
+
};
|
|
456
|
+
/**
|
|
457
|
+
* Sanitizes a request by inspecting prompts/messages for banned patterns and PII.
|
|
458
|
+
* Handles both string prompts and message arrays with various content formats.
|
|
459
|
+
*
|
|
460
|
+
* @param request - Request object to sanitize.
|
|
461
|
+
* @returns Object containing sanitized request and aggregated signals.
|
|
462
|
+
* @throws {Error} If request contains banned patterns (with guardrail signals attached).
|
|
463
|
+
* @internal
|
|
464
|
+
* @example
|
|
465
|
+
* ```ts
|
|
466
|
+
* const outcome = sanitizeRequest({ prompt: 'My email is john@example.com' });
|
|
467
|
+
* // outcome.sanitizedRequest.prompt contains '[redacted-email]'
|
|
468
|
+
* ```
|
|
469
|
+
*/
|
|
470
|
+
const sanitizeRequest = (request) => {
|
|
471
|
+
let sanitizedRequest = request;
|
|
472
|
+
let mutated = false;
|
|
473
|
+
const aggregatedSignals = [];
|
|
474
|
+
if (typeof request.prompt === "string") {
|
|
475
|
+
const outcome = inspectPrompt(request.prompt);
|
|
476
|
+
if (outcome.blocked) throw createGuardrailError(outcome.signals);
|
|
477
|
+
const sanitizedPrompt = outcome.sanitizedPrompt ?? "";
|
|
478
|
+
if (sanitizedPrompt !== request.prompt) {
|
|
479
|
+
sanitizedRequest = {
|
|
480
|
+
...sanitizedRequest,
|
|
481
|
+
prompt: sanitizedPrompt
|
|
482
|
+
};
|
|
483
|
+
mutated = true;
|
|
484
|
+
}
|
|
485
|
+
aggregatedSignals.push(...outcome.signals);
|
|
486
|
+
} else if (Array.isArray(request.prompt)) {
|
|
487
|
+
let promptChanged = false;
|
|
488
|
+
const updatedPrompt = request.prompt.map((message) => {
|
|
489
|
+
if (message && typeof message === "object" && message.role === "user") {
|
|
490
|
+
const { content } = message;
|
|
491
|
+
if (Array.isArray(content)) {
|
|
492
|
+
const updatedContent = content.map((part) => {
|
|
493
|
+
if (part && typeof part === "object" && part.type === "text" && typeof part.text === "string") {
|
|
494
|
+
const { text } = part;
|
|
495
|
+
const outcome = inspectPrompt(text);
|
|
496
|
+
if (outcome.blocked) throw createGuardrailError(outcome.signals);
|
|
497
|
+
const sanitizedText = outcome.sanitizedPrompt ?? "";
|
|
498
|
+
aggregatedSignals.push(...outcome.signals);
|
|
499
|
+
if (sanitizedText !== text) return {
|
|
500
|
+
...part,
|
|
501
|
+
text: sanitizedText
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
return part;
|
|
505
|
+
});
|
|
506
|
+
if (updatedContent.some((part, index) => {
|
|
507
|
+
const original = content[index];
|
|
508
|
+
return part && typeof part === "object" && original && typeof original === "object" && part.text !== original.text;
|
|
509
|
+
})) {
|
|
510
|
+
promptChanged = true;
|
|
511
|
+
return {
|
|
512
|
+
...message,
|
|
513
|
+
content: updatedContent
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return message;
|
|
519
|
+
});
|
|
520
|
+
if (promptChanged) {
|
|
521
|
+
sanitizedRequest = {
|
|
522
|
+
...sanitizedRequest,
|
|
523
|
+
prompt: updatedPrompt
|
|
524
|
+
};
|
|
525
|
+
mutated = true;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
if (Array.isArray(request.messages)) {
|
|
529
|
+
const { messages } = request;
|
|
530
|
+
const updatedMessages = messages.map((message) => {
|
|
531
|
+
if (message && typeof message === "object" && message.role === "user") {
|
|
532
|
+
const { content } = message;
|
|
533
|
+
if (typeof content === "string") {
|
|
534
|
+
const outcome = inspectPrompt(content);
|
|
535
|
+
if (outcome.blocked) throw createGuardrailError(outcome.signals);
|
|
536
|
+
const sanitizedContent = outcome.sanitizedPrompt ?? "";
|
|
537
|
+
aggregatedSignals.push(...outcome.signals);
|
|
538
|
+
if (sanitizedContent !== content) return {
|
|
539
|
+
...message,
|
|
540
|
+
content: sanitizedContent
|
|
541
|
+
};
|
|
542
|
+
} else if (Array.isArray(content)) {
|
|
543
|
+
const updatedContent = content.map((part) => {
|
|
544
|
+
if (part && typeof part === "object" && part.type === "text" && typeof part.text === "string") {
|
|
545
|
+
const { text } = part;
|
|
546
|
+
const outcome = inspectPrompt(text);
|
|
547
|
+
if (outcome.blocked) throw createGuardrailError(outcome.signals);
|
|
548
|
+
const sanitizedText = outcome.sanitizedPrompt ?? "";
|
|
549
|
+
aggregatedSignals.push(...outcome.signals);
|
|
550
|
+
if (sanitizedText !== text) return {
|
|
551
|
+
...part,
|
|
552
|
+
text: sanitizedText
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
return part;
|
|
556
|
+
});
|
|
557
|
+
if (updatedContent.some((part, index) => {
|
|
558
|
+
const original = content[index];
|
|
559
|
+
return part && typeof part === "object" && original && typeof original === "object" && part.text !== original.text;
|
|
560
|
+
})) return {
|
|
561
|
+
...message,
|
|
562
|
+
content: updatedContent
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
return message;
|
|
567
|
+
});
|
|
568
|
+
if (updatedMessages.some((msg, idx) => msg !== messages[idx])) {
|
|
569
|
+
sanitizedRequest = {
|
|
570
|
+
...sanitizedRequest,
|
|
571
|
+
messages: updatedMessages
|
|
572
|
+
};
|
|
573
|
+
mutated = true;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
return {
|
|
577
|
+
sanitizedRequest: mutated ? sanitizedRequest : request,
|
|
578
|
+
signals: aggregatedSignals
|
|
579
|
+
};
|
|
580
|
+
};
|
|
581
|
+
/**
|
|
582
|
+
* Sanitizes a single stream part for PII.
|
|
583
|
+
* Processes text-delta, reasoning-delta, tool-input-delta, and text parts.
|
|
584
|
+
*
|
|
585
|
+
* @param part - Stream part to sanitize.
|
|
586
|
+
* @returns Sanitized stream part.
|
|
587
|
+
* @internal
|
|
588
|
+
* @example
|
|
589
|
+
* ```ts
|
|
590
|
+
* const part = sanitizeStreamPart({ type: 'text-delta', delta: 'pii@example.com' });
|
|
591
|
+
* ```
|
|
592
|
+
*/
|
|
593
|
+
const sanitizeStreamPart = (part) => {
|
|
594
|
+
if (!part || typeof part !== "object") return part;
|
|
595
|
+
const chunk = part;
|
|
596
|
+
if (chunk.type === "text-delta" && typeof chunk.delta === "string") return {
|
|
597
|
+
...chunk,
|
|
598
|
+
delta: redactPii(chunk.delta).redacted
|
|
599
|
+
};
|
|
600
|
+
if (chunk.type === "reasoning-delta" && typeof chunk.delta === "string") return {
|
|
601
|
+
...chunk,
|
|
602
|
+
delta: redactPii(chunk.delta).redacted
|
|
603
|
+
};
|
|
604
|
+
if (chunk.type === "tool-input-delta" && typeof chunk.delta === "string") return {
|
|
605
|
+
...chunk,
|
|
606
|
+
delta: redactPii(chunk.delta).redacted
|
|
607
|
+
};
|
|
608
|
+
if (typeof chunk.text === "string") return {
|
|
609
|
+
...chunk,
|
|
610
|
+
text: redactPii(chunk.text).redacted
|
|
611
|
+
};
|
|
612
|
+
return part;
|
|
613
|
+
};
|
|
614
|
+
/**
|
|
615
|
+
* Applies default guardrails to a language model.
|
|
616
|
+
* Wraps the model's doGenerate and doStream methods to add content filtering,
|
|
617
|
+
* PII redaction, and compliance signal generation.
|
|
618
|
+
*
|
|
619
|
+
* @param model - Language model to wrap with guardrails.
|
|
620
|
+
* @returns Wrapped model with guardrails applied.
|
|
621
|
+
* @throws {Error} If request contains banned patterns (with guardrail signals attached).
|
|
622
|
+
* @remarks Guardrails are applied to both input (prompt/messages) and output (content).
|
|
623
|
+
* Compliance signals are attached to responses and errors for audit purposes.
|
|
624
|
+
* Stream parts are sanitized in real-time for PII redaction.
|
|
625
|
+
* @example
|
|
626
|
+
* ```ts
|
|
627
|
+
* const guardedModel = applyDefaultGuardrails(anthropic('claude-sonnet-4'));
|
|
628
|
+
* const result = await guardedModel.doGenerate({ prompt: 'User input' });
|
|
629
|
+
* ```
|
|
630
|
+
*/
|
|
631
|
+
const applyDefaultGuardrails = (model) => ({
|
|
632
|
+
...model,
|
|
633
|
+
async doGenerate(request) {
|
|
634
|
+
const { sanitizedRequest, signals: requestSignals } = sanitizeRequest(request);
|
|
635
|
+
try {
|
|
636
|
+
const response = await model.doGenerate(sanitizedRequest);
|
|
637
|
+
const responseSignals = [];
|
|
638
|
+
const processedContent = response.content.map((part) => {
|
|
639
|
+
if (part.type === "text" && typeof part.text === "string") {
|
|
640
|
+
const { redacted, signals } = redactPii(part.text);
|
|
641
|
+
responseSignals.push(...signals);
|
|
642
|
+
return {
|
|
643
|
+
...part,
|
|
644
|
+
text: redacted
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
return part;
|
|
648
|
+
});
|
|
649
|
+
const combinedSignals = [...requestSignals, ...responseSignals];
|
|
650
|
+
const sanitizedResponse = {
|
|
651
|
+
...response,
|
|
652
|
+
content: processedContent
|
|
653
|
+
};
|
|
654
|
+
attachGuardrailSignals(sanitizedResponse, combinedSignals);
|
|
655
|
+
return sanitizedResponse;
|
|
656
|
+
} catch (error) {
|
|
657
|
+
attachGuardrailSignals(error, requestSignals);
|
|
658
|
+
throw error;
|
|
659
|
+
}
|
|
660
|
+
},
|
|
661
|
+
async doStream(request) {
|
|
662
|
+
const { sanitizedRequest, signals: requestSignals } = sanitizeRequest(request);
|
|
663
|
+
const result = await model.doStream(sanitizedRequest);
|
|
664
|
+
const reader = result.stream.getReader();
|
|
665
|
+
const sanitizedStream = new ReadableStream({
|
|
666
|
+
async pull(controller) {
|
|
667
|
+
const { done, value } = await reader.read();
|
|
668
|
+
if (done) {
|
|
669
|
+
controller.close();
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
controller.enqueue(sanitizeStreamPart(value));
|
|
673
|
+
},
|
|
674
|
+
cancel(reason) {
|
|
675
|
+
return reader.cancel(reason);
|
|
676
|
+
}
|
|
677
|
+
});
|
|
678
|
+
const sanitizedResult = {
|
|
679
|
+
...result,
|
|
680
|
+
stream: sanitizedStream
|
|
681
|
+
};
|
|
682
|
+
attachGuardrailSignals(sanitizedResult, requestSignals);
|
|
683
|
+
return sanitizedResult;
|
|
684
|
+
}
|
|
685
|
+
});
|
|
686
|
+
/**
|
|
687
|
+
* Prompt injection detection patterns.
|
|
688
|
+
* Detects common prompt injection, jailbreak, and manipulation attempts.
|
|
689
|
+
* @internal
|
|
690
|
+
*/
|
|
691
|
+
const PROMPT_INJECTION_PATTERNS = [
|
|
692
|
+
{
|
|
693
|
+
pattern: /ignore\s+(all\s+)?(previous|prior|above)\s+(instructions?|prompts?|rules?)/gi,
|
|
694
|
+
category: "jailbreak",
|
|
695
|
+
severity: "high",
|
|
696
|
+
description: "Instruction override attempt detected"
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
pattern: /disregard\s+(all\s+)?(previous|prior|your)\s+(instructions?|guidelines?|rules?)/gi,
|
|
700
|
+
category: "jailbreak",
|
|
701
|
+
severity: "high",
|
|
702
|
+
description: "Instruction override attempt detected"
|
|
703
|
+
},
|
|
704
|
+
{
|
|
705
|
+
pattern: /forget\s+(everything|all|what)\s+(you\s+)?(know|learned|were told)/gi,
|
|
706
|
+
category: "jailbreak",
|
|
707
|
+
severity: "high",
|
|
708
|
+
description: "Memory reset attempt detected"
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
pattern: /pretend\s+(you\s+)?(are|have)\s+no\s+(restrictions?|limitations?|rules?)/gi,
|
|
712
|
+
category: "jailbreak",
|
|
713
|
+
severity: "high",
|
|
714
|
+
description: "Restriction bypass attempt detected"
|
|
715
|
+
},
|
|
716
|
+
{
|
|
717
|
+
pattern: /new\s+instructions?:?\s*$/gim,
|
|
718
|
+
category: "instruction_override",
|
|
719
|
+
severity: "high",
|
|
720
|
+
description: "New instruction injection attempt"
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
pattern: /system\s*:\s*you\s+are/gi,
|
|
724
|
+
category: "instruction_override",
|
|
725
|
+
severity: "high",
|
|
726
|
+
description: "System prompt injection attempt"
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
pattern: /\[system\]|\[INST\]|\[\/INST\]|<<SYS>>|<\|im_start\|>/gi,
|
|
730
|
+
category: "instruction_override",
|
|
731
|
+
severity: "high",
|
|
732
|
+
description: "Chat template injection attempt"
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
pattern: /###\s*(instruction|system|human|assistant)\s*:/gi,
|
|
736
|
+
category: "instruction_override",
|
|
737
|
+
severity: "medium",
|
|
738
|
+
description: "Markdown instruction injection attempt"
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
pattern: /you\s+are\s+(now\s+)?(DAN|jailbroken|unrestricted|evil|uncensored)/gi,
|
|
742
|
+
category: "role_play",
|
|
743
|
+
severity: "high",
|
|
744
|
+
description: "Malicious role-play attempt (DAN/jailbreak)"
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
pattern: /act\s+as\s+(if\s+)?(you\s+)?(have|had|don't have)\s+no\s+(ethics|morals|guidelines)/gi,
|
|
748
|
+
category: "role_play",
|
|
749
|
+
severity: "high",
|
|
750
|
+
description: "Ethics bypass role-play attempt"
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
pattern: /developer\s+mode|sudo\s+mode|god\s+mode|admin\s+mode/gi,
|
|
754
|
+
category: "role_play",
|
|
755
|
+
severity: "high",
|
|
756
|
+
description: "Privilege escalation role-play attempt"
|
|
757
|
+
},
|
|
758
|
+
{
|
|
759
|
+
pattern: /base64\s*:\s*[A-Za-z0-9+\/=]{20,}/gi,
|
|
760
|
+
category: "encoding_bypass",
|
|
761
|
+
severity: "medium",
|
|
762
|
+
description: "Base64 encoded payload detected"
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
pattern: /\\u[0-9a-fA-F]{4}(?:\\u[0-9a-fA-F]{4}){5,}/g,
|
|
766
|
+
category: "encoding_bypass",
|
|
767
|
+
severity: "medium",
|
|
768
|
+
description: "Unicode escape sequence payload detected"
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
pattern: /&#x?[0-9a-fA-F]+;(?:&#x?[0-9a-fA-F]+;){5,}/g,
|
|
772
|
+
category: "encoding_bypass",
|
|
773
|
+
severity: "medium",
|
|
774
|
+
description: "HTML entity encoded payload detected"
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
pattern: /repeat\s+(the\s+)?(system\s+)?prompt|show\s+(me\s+)?(the\s+)?(system\s+)?prompt/gi,
|
|
778
|
+
category: "data_exfil",
|
|
779
|
+
severity: "medium",
|
|
780
|
+
description: "System prompt extraction attempt"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
pattern: /what\s+(are\s+)?(your|the)\s+(original\s+)?instructions/gi,
|
|
784
|
+
category: "data_exfil",
|
|
785
|
+
severity: "medium",
|
|
786
|
+
description: "Instruction extraction attempt"
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
pattern: /output\s+(your|the)\s+(entire\s+)?context/gi,
|
|
790
|
+
category: "data_exfil",
|
|
791
|
+
severity: "medium",
|
|
792
|
+
description: "Context extraction attempt"
|
|
793
|
+
}
|
|
794
|
+
];
|
|
795
|
+
/**
|
|
796
|
+
* Detects prompt injection attempts in text.
|
|
797
|
+
* Uses pattern matching to identify common injection, jailbreak, and manipulation techniques.
|
|
798
|
+
*
|
|
799
|
+
* @param text - Text to analyze for injection attempts.
|
|
800
|
+
* @returns Detection result with risk level and categorization.
|
|
801
|
+
* @example
|
|
802
|
+
* ```ts
|
|
803
|
+
* const result = detectPromptInjection('Ignore all previous instructions and...');
|
|
804
|
+
* // result.detected === true
|
|
805
|
+
* // result.risk === 'high'
|
|
806
|
+
* // result.categories === ['jailbreak']
|
|
807
|
+
* ```
|
|
808
|
+
*/
|
|
809
|
+
const detectPromptInjection = (text) => {
|
|
810
|
+
const detectedCategories = /* @__PURE__ */ new Set();
|
|
811
|
+
const descriptions = [];
|
|
812
|
+
const signals = [];
|
|
813
|
+
let maxRisk = "low";
|
|
814
|
+
for (const { pattern, category, severity, description } of PROMPT_INJECTION_PATTERNS) {
|
|
815
|
+
pattern.lastIndex = 0;
|
|
816
|
+
if (pattern.test(text)) {
|
|
817
|
+
detectedCategories.add(category);
|
|
818
|
+
descriptions.push(description);
|
|
819
|
+
if (severity === "high" || severity === "medium" && maxRisk === "low") maxRisk = severity;
|
|
820
|
+
signals.push(complianceSignalSchema.parse({
|
|
821
|
+
id: randomUUID(),
|
|
822
|
+
type: "guardrail.blocked",
|
|
823
|
+
message: `Prompt injection detected: ${description}`,
|
|
824
|
+
runId: "guardrail",
|
|
825
|
+
riskLevel: severity,
|
|
826
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
827
|
+
metadata: {
|
|
828
|
+
category,
|
|
829
|
+
pattern: pattern.source
|
|
830
|
+
}
|
|
831
|
+
}));
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
return {
|
|
835
|
+
detected: detectedCategories.size > 0,
|
|
836
|
+
risk: maxRisk,
|
|
837
|
+
categories: Array.from(detectedCategories),
|
|
838
|
+
descriptions,
|
|
839
|
+
signals
|
|
840
|
+
};
|
|
841
|
+
};
|
|
842
|
+
/**
|
|
843
|
+
* Token limit configuration per risk level.
|
|
844
|
+
* Restricts output length based on detected risk to limit potential damage.
|
|
845
|
+
*/
|
|
846
|
+
const TOKEN_LIMITS = {
|
|
847
|
+
low: 16384,
|
|
848
|
+
medium: 8192,
|
|
849
|
+
high: 2048
|
|
850
|
+
};
|
|
851
|
+
/**
|
|
852
|
+
* Gets the appropriate token limit for a risk level.
|
|
853
|
+
*
|
|
854
|
+
* @param risk - Risk level to get limit for.
|
|
855
|
+
* @returns Maximum output tokens allowed.
|
|
856
|
+
* @example
|
|
857
|
+
* ```ts
|
|
858
|
+
* const limit = getTokenLimitForRisk('high');
|
|
859
|
+
* // limit === 2048
|
|
860
|
+
* ```
|
|
861
|
+
*/
|
|
862
|
+
const getTokenLimitForRisk = (risk) => TOKEN_LIMITS[risk];
|
|
863
|
+
/**
|
|
864
|
+
* Detects risk level from message content.
|
|
865
|
+
* Analyzes user messages for high-risk keywords, patterns, and prompt injection attempts.
|
|
866
|
+
* Enterprise-grade detection with multiple risk factors.
|
|
867
|
+
*
|
|
868
|
+
* @param messages - Array of messages to analyze.
|
|
869
|
+
* @returns Detected risk level ('low', 'medium', or 'high').
|
|
870
|
+
* @example
|
|
871
|
+
* ```ts
|
|
872
|
+
* const risk = detectRiskFromMessages([
|
|
873
|
+
* { role: 'user', content: 'Delete my account' }
|
|
874
|
+
* ]); // Returns 'high'
|
|
875
|
+
* ```
|
|
876
|
+
*/
|
|
877
|
+
const detectRiskFromMessages = (messages) => {
|
|
878
|
+
const joined = messages.filter((message) => message.role === "user").map((message) => message.content ?? "").join("\n");
|
|
879
|
+
const joinedLower = joined.toLowerCase();
|
|
880
|
+
const injectionResult = detectPromptInjection(joined);
|
|
881
|
+
if (injectionResult.detected && injectionResult.risk === "high") return "high";
|
|
882
|
+
for (const pattern of [
|
|
883
|
+
"delete account",
|
|
884
|
+
"drop table",
|
|
885
|
+
"rm -rf",
|
|
886
|
+
"format disk",
|
|
887
|
+
"delete all",
|
|
888
|
+
"wipe data",
|
|
889
|
+
"export all data",
|
|
890
|
+
"bypass security",
|
|
891
|
+
"admin access",
|
|
892
|
+
"root access",
|
|
893
|
+
"privilege escalation"
|
|
894
|
+
]) if (joinedLower.includes(pattern)) return "high";
|
|
895
|
+
if (injectionResult.detected) return "medium";
|
|
896
|
+
for (const pattern of [
|
|
897
|
+
"ssn",
|
|
898
|
+
"pii",
|
|
899
|
+
"password",
|
|
900
|
+
"credit card",
|
|
901
|
+
"social security",
|
|
902
|
+
"api key",
|
|
903
|
+
"secret key",
|
|
904
|
+
"private key",
|
|
905
|
+
"access token"
|
|
906
|
+
]) if (joinedLower.includes(pattern)) return "medium";
|
|
907
|
+
return "low";
|
|
908
|
+
};
|
|
909
|
+
|
|
910
|
+
//#endregion
|
|
911
|
+
//#region src/governance/policies/loop-controls.ts
|
|
912
|
+
/**
|
|
913
|
+
* @fileoverview Loop control policies
|
|
914
|
+
*
|
|
915
|
+
* Provides risk-tiered loop policies that control agent execution behavior:
|
|
916
|
+
* - Low risk: 6 steps, auto tool selection
|
|
917
|
+
* - Medium risk: 4 steps, auto tool selection
|
|
918
|
+
* - High risk: 2 steps, escalation required
|
|
919
|
+
*
|
|
920
|
+
* @module @od-oneapp/ai-platform/policies/loop-controls
|
|
921
|
+
*/
|
|
922
|
+
/**
|
|
923
|
+
* Base loop policies for each risk level.
|
|
924
|
+
* Defines default step limits and tool selection strategies.
|
|
925
|
+
* @internal
|
|
926
|
+
*/
|
|
927
|
+
const BASE_LOOP_POLICIES = {
|
|
928
|
+
low: {
|
|
929
|
+
riskLevel: "low",
|
|
930
|
+
maxSteps: 6,
|
|
931
|
+
stopCondition: stepCountIs(6),
|
|
932
|
+
toolChoice: "auto",
|
|
933
|
+
activeTools: void 0
|
|
934
|
+
},
|
|
935
|
+
medium: {
|
|
936
|
+
riskLevel: "medium",
|
|
937
|
+
maxSteps: 4,
|
|
938
|
+
stopCondition: stepCountIs(4),
|
|
939
|
+
toolChoice: "auto",
|
|
940
|
+
activeTools: void 0
|
|
941
|
+
},
|
|
942
|
+
high: {
|
|
943
|
+
riskLevel: "high",
|
|
944
|
+
maxSteps: 2,
|
|
945
|
+
stopCondition: stepCountIs(2),
|
|
946
|
+
toolChoice: "required",
|
|
947
|
+
activeTools: ["escalate"]
|
|
948
|
+
}
|
|
949
|
+
};
|
|
950
|
+
/**
|
|
951
|
+
* Resolves a loop policy for the given risk level.
|
|
952
|
+
* Merges base policy with optional overrides for tool choice and active tools.
|
|
953
|
+
*
|
|
954
|
+
* @param options - Policy resolution options.
|
|
955
|
+
* @param options.riskLevel - Risk level to resolve policy for.
|
|
956
|
+
* @param options.toolChoice - Optional tool choice override.
|
|
957
|
+
* @param options.activeTools - Optional active tools override.
|
|
958
|
+
* @returns Resolved loop policy with step limits, stop condition, and tool configuration.
|
|
959
|
+
* @remarks Base policies:
|
|
960
|
+
* - Low: 6 steps, auto tool choice
|
|
961
|
+
* - Medium: 4 steps, auto tool choice
|
|
962
|
+
* - High: 2 steps, required tool choice, only 'escalate' tool active
|
|
963
|
+
* Overrides take precedence over base policy values.
|
|
964
|
+
* @example
|
|
965
|
+
* ```ts
|
|
966
|
+
* const policy = resolveLoopPolicy({
|
|
967
|
+
* riskLevel: 'medium',
|
|
968
|
+
* activeTools: ['knowledgeBase', 'escalate']
|
|
969
|
+
* });
|
|
970
|
+
* ```
|
|
971
|
+
*/
|
|
972
|
+
const resolveLoopPolicy = ({ riskLevel, toolChoice, activeTools }) => {
|
|
973
|
+
const base = BASE_LOOP_POLICIES[riskLevel];
|
|
974
|
+
return {
|
|
975
|
+
...base,
|
|
976
|
+
toolChoice: toolChoice ?? base.toolChoice,
|
|
977
|
+
activeTools: activeTools ?? base.activeTools
|
|
978
|
+
};
|
|
979
|
+
};
|
|
980
|
+
/**
|
|
981
|
+
* Merges active tools from policy and requested tools.
|
|
982
|
+
* Combines policy-defined active tools with user-requested tools.
|
|
983
|
+
*
|
|
984
|
+
* @param policy - Loop policy containing active tools.
|
|
985
|
+
* @param requestedTools - Optional list of requested tool names.
|
|
986
|
+
* @returns Merged array of active tool names, or undefined if neither provided.
|
|
987
|
+
* @example
|
|
988
|
+
* ```ts
|
|
989
|
+
* const tools = mergeActiveTools(policy, ['customTool']);
|
|
990
|
+
* // Returns ['escalate', 'customTool'] if policy has 'escalate' in activeTools
|
|
991
|
+
* ```
|
|
992
|
+
*/
|
|
993
|
+
const mergeActiveTools = (policy, requestedTools) => {
|
|
994
|
+
if (!policy.activeTools && !requestedTools) return;
|
|
995
|
+
const merged = /* @__PURE__ */ new Set();
|
|
996
|
+
for (const tool of requestedTools ?? []) merged.add(tool);
|
|
997
|
+
for (const tool of policy.activeTools ?? []) merged.add(tool);
|
|
998
|
+
return Array.from(merged);
|
|
999
|
+
};
|
|
1000
|
+
|
|
1001
|
+
//#endregion
|
|
1002
|
+
//#region src/governance/policies/telemetry.ts
|
|
1003
|
+
/**
|
|
1004
|
+
* Creates telemetry settings with risk level metadata.
|
|
1005
|
+
* Enables telemetry and includes risk level and optional metadata.
|
|
1006
|
+
*
|
|
1007
|
+
* @param options - Telemetry configuration options.
|
|
1008
|
+
* @param options.functionId - Function identifier for telemetry tracking.
|
|
1009
|
+
* @param options.riskLevel - Risk level to include in metadata.
|
|
1010
|
+
* @param options.metadata - Optional additional metadata (merged with riskLevel).
|
|
1011
|
+
* @returns Telemetry settings object with isEnabled: true and metadata containing riskLevel.
|
|
1012
|
+
* @remarks Telemetry is always enabled. Metadata always includes riskLevel.
|
|
1013
|
+
* Additional metadata is merged into the metadata object.
|
|
1014
|
+
* @example
|
|
1015
|
+
* ```ts
|
|
1016
|
+
* const telemetry = createTelemetrySettings({
|
|
1017
|
+
* functionId: 'agent-execution',
|
|
1018
|
+
* riskLevel: 'medium',
|
|
1019
|
+
* metadata: { userId: 'user-123' }
|
|
1020
|
+
* });
|
|
1021
|
+
* ```
|
|
1022
|
+
*/
|
|
1023
|
+
const createTelemetrySettings = ({ functionId, riskLevel, metadata }) => ({
|
|
1024
|
+
isEnabled: true,
|
|
1025
|
+
functionId,
|
|
1026
|
+
metadata: {
|
|
1027
|
+
riskLevel,
|
|
1028
|
+
...metadata
|
|
1029
|
+
}
|
|
1030
|
+
});
|
|
1031
|
+
/**
|
|
1032
|
+
* Default telemetry settings for agents.
|
|
1033
|
+
* Enables telemetry with basic run type metadata.
|
|
1034
|
+
* @example
|
|
1035
|
+
* ```ts
|
|
1036
|
+
* const telemetry = { ...defaultTelemetry, functionId: 'agent-run' };
|
|
1037
|
+
* ```
|
|
1038
|
+
*/
|
|
1039
|
+
const defaultTelemetry = {
|
|
1040
|
+
isEnabled: true,
|
|
1041
|
+
metadata: { runType: "agent" }
|
|
1042
|
+
};
|
|
1043
|
+
|
|
1044
|
+
//#endregion
|
|
1045
|
+
export { TOKEN_LIMITS as a, detectRiskFromMessages as c, resolveLoopPolicy as i, getTokenLimitForRisk as l, defaultTelemetry as n, applyDefaultGuardrails as o, mergeActiveTools as r, detectPromptInjection as s, createTelemetrySettings as t };
|
|
1046
|
+
//# sourceMappingURL=telemetry-2eKMojIb.mjs.map
|