@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,438 @@
|
|
|
1
|
+
import { n as hashInput } from "./crypto-8ABhc3TD.mjs";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
|
|
4
|
+
//#region src/governance/compliance/abac/policy-engine.ts
|
|
5
|
+
/**
|
|
6
|
+
* Global policy registry
|
|
7
|
+
*/
|
|
8
|
+
const policyRegistry = /* @__PURE__ */ new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Register a policy
|
|
11
|
+
*/
|
|
12
|
+
function registerPolicy(policy) {
|
|
13
|
+
policyRegistry.set(policy.id, policy);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Unregister a policy
|
|
17
|
+
*/
|
|
18
|
+
function unregisterPolicy(policyId) {
|
|
19
|
+
policyRegistry.delete(policyId);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get all registered policies
|
|
23
|
+
*/
|
|
24
|
+
function getPolicies() {
|
|
25
|
+
return [...policyRegistry.values()].sort((a, b) => b.priority - a.priority);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Evaluate access decision using all registered policies
|
|
29
|
+
* Policies are evaluated in priority order (highest first)
|
|
30
|
+
* First DENY wins, otherwise all must ALLOW
|
|
31
|
+
*/
|
|
32
|
+
async function evaluatePolicy(context, resource, action) {
|
|
33
|
+
const startTime = Date.now();
|
|
34
|
+
const policiesEvaluated = [];
|
|
35
|
+
const policies = getPolicies();
|
|
36
|
+
if (policies.length === 0) return {
|
|
37
|
+
decision: {
|
|
38
|
+
allowed: false,
|
|
39
|
+
reason: "No policies configured",
|
|
40
|
+
policyId: "default-deny"
|
|
41
|
+
},
|
|
42
|
+
policiesEvaluated: [],
|
|
43
|
+
evaluationTimeMs: Date.now() - startTime
|
|
44
|
+
};
|
|
45
|
+
for (const policy of policies) {
|
|
46
|
+
policiesEvaluated.push(policy.id);
|
|
47
|
+
try {
|
|
48
|
+
const decision = await policy.evaluate(context, resource, action);
|
|
49
|
+
if (!decision.allowed) return {
|
|
50
|
+
decision,
|
|
51
|
+
policiesEvaluated,
|
|
52
|
+
evaluationTimeMs: Date.now() - startTime
|
|
53
|
+
};
|
|
54
|
+
} catch (error) {
|
|
55
|
+
return {
|
|
56
|
+
decision: {
|
|
57
|
+
allowed: false,
|
|
58
|
+
reason: `Policy evaluation error: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
59
|
+
policyId: policy.id
|
|
60
|
+
},
|
|
61
|
+
policiesEvaluated,
|
|
62
|
+
evaluationTimeMs: Date.now() - startTime
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
decision: {
|
|
68
|
+
allowed: true,
|
|
69
|
+
policyId: "all-policies-allowed"
|
|
70
|
+
},
|
|
71
|
+
policiesEvaluated,
|
|
72
|
+
evaluationTimeMs: Date.now() - startTime
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create ABAC context from request metadata
|
|
77
|
+
*/
|
|
78
|
+
function createABACContext(actorId, roles, purpose, attributes = {}, environment = {}) {
|
|
79
|
+
return {
|
|
80
|
+
actor: {
|
|
81
|
+
id: actorId,
|
|
82
|
+
roles,
|
|
83
|
+
attributes
|
|
84
|
+
},
|
|
85
|
+
environment: {
|
|
86
|
+
timestamp: /* @__PURE__ */ new Date(),
|
|
87
|
+
...environment
|
|
88
|
+
},
|
|
89
|
+
purpose
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Helper: Check if actor has role
|
|
94
|
+
*/
|
|
95
|
+
function hasRole(context, role) {
|
|
96
|
+
return context.actor.roles.includes(role);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Helper: Check if actor has any of the roles
|
|
100
|
+
*/
|
|
101
|
+
function hasAnyRole(context, roles) {
|
|
102
|
+
return roles.some((role) => context.actor.roles.includes(role));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Helper: Check if actor has all of the roles
|
|
106
|
+
*/
|
|
107
|
+
function hasAllRoles(context, roles) {
|
|
108
|
+
return roles.every((role) => context.actor.roles.includes(role));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Helper: Check resource sensitivity level
|
|
112
|
+
*/
|
|
113
|
+
function isResourceSensitive(resource) {
|
|
114
|
+
return resource.sensitivity === "confidential" || resource.sensitivity === "restricted";
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Helper: Create ALLOW decision
|
|
118
|
+
*/
|
|
119
|
+
function allow(policyId, conditions) {
|
|
120
|
+
return {
|
|
121
|
+
allowed: true,
|
|
122
|
+
policyId,
|
|
123
|
+
conditions
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Helper: Create DENY decision
|
|
128
|
+
*/
|
|
129
|
+
function deny(policyId, reason) {
|
|
130
|
+
return {
|
|
131
|
+
allowed: false,
|
|
132
|
+
policyId,
|
|
133
|
+
reason
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region src/server/cache/performance.ts
|
|
139
|
+
/**
|
|
140
|
+
* @fileoverview Performance optimization helper functions
|
|
141
|
+
* Provides caching for expensive operations like PHI detection
|
|
142
|
+
*/
|
|
143
|
+
/**
|
|
144
|
+
* In-memory cache for detection results
|
|
145
|
+
* In production, consider using Redis or another distributed cache
|
|
146
|
+
*/
|
|
147
|
+
const detectionCache = /* @__PURE__ */ new Map();
|
|
148
|
+
/**
|
|
149
|
+
* Cache detection results for a given input
|
|
150
|
+
* @param input - Input data that was analyzed
|
|
151
|
+
* @param result - Detection results to cache
|
|
152
|
+
* @param ttl - Time to live in milliseconds (default: 1 hour)
|
|
153
|
+
*/
|
|
154
|
+
function cacheDetections(input, result, ttl = 36e5) {
|
|
155
|
+
const key = hashInput(input);
|
|
156
|
+
detectionCache.set(key, {
|
|
157
|
+
result,
|
|
158
|
+
timestamp: Date.now(),
|
|
159
|
+
ttl
|
|
160
|
+
});
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
detectionCache.delete(key);
|
|
163
|
+
}, ttl);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get cached detection results for a given input
|
|
167
|
+
* @param input - Input data to look up
|
|
168
|
+
* @returns Cached results if available and not expired, otherwise undefined
|
|
169
|
+
*/
|
|
170
|
+
function getCachedDetections(input) {
|
|
171
|
+
const key = hashInput(input);
|
|
172
|
+
const cached = detectionCache.get(key);
|
|
173
|
+
if (!cached) return;
|
|
174
|
+
const entry = cached;
|
|
175
|
+
if (Date.now() - entry.timestamp > entry.ttl) {
|
|
176
|
+
detectionCache.delete(key);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
return entry.result;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
//#endregion
|
|
183
|
+
//#region src/governance/compliance/validators/safe-harbor.ts
|
|
184
|
+
/**
|
|
185
|
+
* Regex patterns for detecting HIPAA Safe Harbor identifiers
|
|
186
|
+
* Note: These are basic patterns and should be enhanced with NER for production
|
|
187
|
+
*
|
|
188
|
+
* Security note: Some patterns below use eslint-disable for detect-unsafe-regex.
|
|
189
|
+
* These patterns have been reviewed and are safe in this context because:
|
|
190
|
+
* 1. Input text is validated and length-limited before processing
|
|
191
|
+
* 2. The patterns match specific, bounded structures (phone numbers, IPs, etc.)
|
|
192
|
+
* 3. The nested quantifiers are necessary for real-world format variations
|
|
193
|
+
*/
|
|
194
|
+
const SAFE_HARBOR_PATTERNS = {
|
|
195
|
+
ssn: /\b\d{3}-\d{2}-\d{4}\b|\b\d{9}\b/g,
|
|
196
|
+
mrn: /\b(?:mrn|medical record|patient id)[\s#:]*([\da-z]{6,10})\b/gi,
|
|
197
|
+
phone: /\b(?:\+?1[\s.-]?)?\(?(\d{3})\)?[\s.-]?(\d{3})[\s.-]?(\d{4})\b/g,
|
|
198
|
+
fax: /\b(?:fax|facsimile)[\s:]*(?:\+?1[\s.-]?)?\(?(\d{3})\)?[\s.-]?(\d{3})[\s.-]?(\d{4})\b/gi,
|
|
199
|
+
email: /\b[\w%+.-]+@[\d.A-Za-z-]+\.[A-Za-z|]{2,}\b/g,
|
|
200
|
+
ip_address: /\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|(?:[\da-f]{1,4}:){7}[\da-f]{1,4}/gi,
|
|
201
|
+
url: /\bhttps?:\/\/(?:w{3}\.)?[\w#%+.:=@~-]{1,256}\.[\d()a-z]{1,6}\b[\w#%&()+./:=?@~-]*/gi,
|
|
202
|
+
date: /\b(?:0?[1-9]|1[0-2])[./\-](?:0?[1-9]|[12]\d|3[01])[./\-](?:19|20)\d{2}\b|\b(?:19|20)\d{2}[./\-](?:0?[1-9]|1[0-2])[./\-](?:0?[1-9]|[12]\d|3[01])\b/g,
|
|
203
|
+
name: /\b(?:mr\.|mrs\.|ms\.|dr\.|prof\.)(?:\s+[A-Z][a-z]+)+\b/g,
|
|
204
|
+
geographic: /\b\d+\s+(?:[a-z]{2,}\s+){1,3}(?:street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|circle|cir|way|boulevard|blvd|parkway|pkwy|place|pl)\b/gi,
|
|
205
|
+
account_number: /\b(?:account|acct|policy)[\s#:]*(\d{8,16})\b/gi,
|
|
206
|
+
license_number: /\b(?:license|lic|dl)[\s#:]*([a-z]{2}\d{6,12})\b/gi,
|
|
207
|
+
vehicle_id: /\bvin[\s#:]*([\da-hj-npr-z]{17})\b/gi,
|
|
208
|
+
device_id: /\b(?:[\da-f]{2}[:-]){5}[\da-f]{2}\b|\b[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}\b/gi,
|
|
209
|
+
biometric: /\b(?:fingerprint|voiceprint|retina scan|iris scan|facial recognition|biometric)\b/gi,
|
|
210
|
+
photo: /\b(?:photo|photograph|image|picture)\s+(?:of|showing|depicting)\b/gi,
|
|
211
|
+
other_unique_id: /\b(?:id|identifier|code)[\s#:]*([\da-z\-]{8,})\b/gi
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* High-confidence patterns that are almost certainly PHI
|
|
215
|
+
*/
|
|
216
|
+
const HIGH_CONFIDENCE_PATTERNS = {
|
|
217
|
+
ssn: SAFE_HARBOR_PATTERNS.ssn,
|
|
218
|
+
email: SAFE_HARBOR_PATTERNS.email,
|
|
219
|
+
phone: SAFE_HARBOR_PATTERNS.phone,
|
|
220
|
+
ip_address: SAFE_HARBOR_PATTERNS.ip_address,
|
|
221
|
+
url: SAFE_HARBOR_PATTERNS.url
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* Get confidence score for a PHI type
|
|
225
|
+
* Higher score = more certain it's actually PHI
|
|
226
|
+
*/
|
|
227
|
+
function getConfidenceScore(type, value) {
|
|
228
|
+
if (type in HIGH_CONFIDENCE_PATTERNS) return .95;
|
|
229
|
+
if (type === "name" || type === "geographic" || type === "date") return .6;
|
|
230
|
+
return .4;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Check if a pattern match is likely a false positive
|
|
234
|
+
*/
|
|
235
|
+
function isFalsePositive(type, value) {
|
|
236
|
+
if (type === "date" && /^\d{4}$/.test(value.trim())) return true;
|
|
237
|
+
if (type === "name") return [
|
|
238
|
+
"The",
|
|
239
|
+
"This",
|
|
240
|
+
"That",
|
|
241
|
+
"These",
|
|
242
|
+
"Those"
|
|
243
|
+
].some((word) => value.includes(word));
|
|
244
|
+
if (type === "account_number" && /^(0+|1+|12345678)$/.test(value)) return true;
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
//#endregion
|
|
249
|
+
//#region src/governance/compliance/validators/phi-detector.ts
|
|
250
|
+
/**
|
|
251
|
+
* @fileoverview PHI Detection Engine
|
|
252
|
+
* PHI Detection Engine
|
|
253
|
+
* Scans text for HIPAA Safe Harbor 18 identifiers
|
|
254
|
+
* Includes performance caching for repeated detections
|
|
255
|
+
*/
|
|
256
|
+
/**
|
|
257
|
+
* Detect PHI in text using regex patterns
|
|
258
|
+
* Returns array of detections with positions and confidence scores
|
|
259
|
+
* Results are cached for performance
|
|
260
|
+
*/
|
|
261
|
+
function detectPHI(text, options = {}) {
|
|
262
|
+
const { minConfidence = .5, excludeTypes = [], useCache = true } = options;
|
|
263
|
+
if (useCache) {
|
|
264
|
+
const cached = getCachedDetections(text);
|
|
265
|
+
if (cached) return cached.filter((d) => d.confidence >= minConfidence && !excludeTypes.includes(d.type));
|
|
266
|
+
}
|
|
267
|
+
const detections = [];
|
|
268
|
+
for (const [type, pattern] of Object.entries(SAFE_HARBOR_PATTERNS)) {
|
|
269
|
+
const phiType = type;
|
|
270
|
+
if (excludeTypes.includes(phiType)) continue;
|
|
271
|
+
pattern.lastIndex = 0;
|
|
272
|
+
let match;
|
|
273
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
274
|
+
const value = match[0];
|
|
275
|
+
const start = match.index;
|
|
276
|
+
const end = start + value.length;
|
|
277
|
+
const confidence = getConfidenceScore(phiType, value);
|
|
278
|
+
if (confidence < minConfidence || isFalsePositive(phiType, value)) continue;
|
|
279
|
+
detections.push({
|
|
280
|
+
type: phiType,
|
|
281
|
+
value,
|
|
282
|
+
start,
|
|
283
|
+
end,
|
|
284
|
+
confidence
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const sorted = detections.sort((a, b) => a.start - b.start);
|
|
289
|
+
if (useCache) cacheDetections(text, sorted);
|
|
290
|
+
return sorted;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Check if text contains any PHI
|
|
294
|
+
*/
|
|
295
|
+
function containsPHI(text, options) {
|
|
296
|
+
return detectPHI(text, options).length > 0;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get PHI statistics for text
|
|
300
|
+
*/
|
|
301
|
+
function analyzePHI(text) {
|
|
302
|
+
const detections = detectPHI(text);
|
|
303
|
+
const byType = detections.reduce((acc, d) => {
|
|
304
|
+
acc[d.type] = (acc[d.type] || 0) + 1;
|
|
305
|
+
return acc;
|
|
306
|
+
}, {});
|
|
307
|
+
const averageConfidence = detections.length > 0 ? detections.reduce((sum, d) => sum + d.confidence, 0) / detections.length : 0;
|
|
308
|
+
return {
|
|
309
|
+
hasPHI: detections.length > 0,
|
|
310
|
+
totalDetections: detections.length,
|
|
311
|
+
byType,
|
|
312
|
+
averageConfidence
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Validate that text is Safe Harbor compliant
|
|
317
|
+
* Returns true if no PHI detected above threshold
|
|
318
|
+
*/
|
|
319
|
+
function isSafeHarborCompliant(text, minConfidence = .7) {
|
|
320
|
+
const violations = detectPHI(text, { minConfidence });
|
|
321
|
+
return {
|
|
322
|
+
compliant: violations.length === 0,
|
|
323
|
+
violations
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
//#endregion
|
|
328
|
+
//#region src/governance/compliance/validators/redaction-utils.ts
|
|
329
|
+
/**
|
|
330
|
+
* @fileoverview PHI Redaction Utilities
|
|
331
|
+
* PHI Redaction Utilities
|
|
332
|
+
* Implements different redaction strategies for HIPAA compliance
|
|
333
|
+
*/
|
|
334
|
+
/**
|
|
335
|
+
* Redact PHI from text using specified strategy
|
|
336
|
+
*/
|
|
337
|
+
function redactPHI(text, strategy = "MASK", options = {}) {
|
|
338
|
+
const { customMask = "[REDACTED]", preserveLength = false, minConfidence } = options;
|
|
339
|
+
const detections = detectPHI(text, { minConfidence });
|
|
340
|
+
if (detections.length === 0) return {
|
|
341
|
+
redacted: text,
|
|
342
|
+
detections: []
|
|
343
|
+
};
|
|
344
|
+
let redacted = text;
|
|
345
|
+
const sortedDetections = [...detections].sort((a, b) => b.start - a.start);
|
|
346
|
+
for (const detection of sortedDetections) {
|
|
347
|
+
const { start, end, value, type } = detection;
|
|
348
|
+
const replacement = getRedactionReplacement(value, type, strategy, customMask, preserveLength);
|
|
349
|
+
redacted = redacted.slice(0, start) + replacement + redacted.slice(end);
|
|
350
|
+
}
|
|
351
|
+
return {
|
|
352
|
+
redacted,
|
|
353
|
+
detections
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Get replacement text for a detected PHI value
|
|
358
|
+
*/
|
|
359
|
+
function getRedactionReplacement(value, type, strategy, customMask, preserveLength) {
|
|
360
|
+
switch (strategy) {
|
|
361
|
+
case "MASK":
|
|
362
|
+
if (preserveLength) return "*".repeat(value.length);
|
|
363
|
+
return customMask;
|
|
364
|
+
case "HASH": return `[${type.toUpperCase()}_${hashString(value)}]`;
|
|
365
|
+
case "TOKENIZE": return `[TOKEN_${type.toUpperCase()}_${generateToken(value)}]`;
|
|
366
|
+
default: return customMask;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Cryptographically hash a string for HASH strategy
|
|
371
|
+
* Uses SHA-256 for consistent, secure hashing
|
|
372
|
+
*/
|
|
373
|
+
function hashString(value) {
|
|
374
|
+
return createHash("sha256").update(value).digest("hex").slice(0, 8).toUpperCase();
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Generate a reversible token (simplified - use proper tokenization in production)
|
|
378
|
+
*/
|
|
379
|
+
function generateToken(value) {
|
|
380
|
+
return Buffer.from(value).toString("base64").slice(0, 12);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Redact specific PHI types only
|
|
384
|
+
*/
|
|
385
|
+
function redactSpecificTypes(text, types, strategy = "MASK") {
|
|
386
|
+
const filteredDetections = detectPHI(text).filter((d) => types.includes(d.type));
|
|
387
|
+
let redacted = text;
|
|
388
|
+
const sortedDetections = [...filteredDetections].sort((a, b) => b.start - a.start);
|
|
389
|
+
for (const detection of sortedDetections) {
|
|
390
|
+
const { start, end, value, type } = detection;
|
|
391
|
+
const replacement = getRedactionReplacement(value, type, strategy, "[REDACTED]", false);
|
|
392
|
+
redacted = redacted.slice(0, start) + replacement + redacted.slice(end);
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
redacted,
|
|
396
|
+
detections: filteredDetections
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Preview redactions without applying them
|
|
401
|
+
*/
|
|
402
|
+
function previewRedactions(text) {
|
|
403
|
+
const detections = detectPHI(text);
|
|
404
|
+
let preview = text;
|
|
405
|
+
const sortedDetections = [...detections].sort((a, b) => b.start - a.start);
|
|
406
|
+
for (const detection of sortedDetections) {
|
|
407
|
+
const { start, end, type } = detection;
|
|
408
|
+
const replacement = `[${type.toUpperCase()}]`;
|
|
409
|
+
preview = preview.slice(0, start) + replacement + preview.slice(end);
|
|
410
|
+
}
|
|
411
|
+
const byType = detections.reduce((acc, d) => {
|
|
412
|
+
acc[d.type] = (acc[d.type] || 0) + 1;
|
|
413
|
+
return acc;
|
|
414
|
+
}, {});
|
|
415
|
+
return {
|
|
416
|
+
original: text,
|
|
417
|
+
preview,
|
|
418
|
+
detections,
|
|
419
|
+
stats: {
|
|
420
|
+
totalPHI: detections.length,
|
|
421
|
+
byType
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Sanitize text for logging (aggressive redaction)
|
|
427
|
+
*/
|
|
428
|
+
function sanitizeForLogging(text) {
|
|
429
|
+
const { redacted } = redactPHI(text, "MASK", {
|
|
430
|
+
customMask: "[REDACTED]",
|
|
431
|
+
minConfidence: .3
|
|
432
|
+
});
|
|
433
|
+
return redacted;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
//#endregion
|
|
437
|
+
export { unregisterPolicy as C, registerPolicy as S, getPolicies as _, analyzePHI as a, hasRole as b, isSafeHarborCompliant as c, getConfidenceScore as d, isFalsePositive as f, evaluatePolicy as g, deny as h, sanitizeForLogging as i, HIGH_CONFIDENCE_PATTERNS as l, createABACContext as m, redactPHI as n, containsPHI as o, allow as p, redactSpecificTypes as r, detectPHI as s, previewRedactions as t, SAFE_HARBOR_PATTERNS as u, hasAllRoles as v, isResourceSensitive as x, hasAnyRole as y };
|
|
438
|
+
//# sourceMappingURL=redaction-utils-DcQwsiNh.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction-utils-DcQwsiNh.mjs","names":[],"sources":["../src/governance/compliance/abac/policy-engine.ts","../src/server/cache/performance.ts","../src/governance/compliance/validators/safe-harbor.ts","../src/governance/compliance/validators/phi-detector.ts","../src/governance/compliance/validators/redaction-utils.ts"],"sourcesContent":["/**\n * @fileoverview ABAC Policy Engine\n * ABAC Policy Engine\n * Implements Attribute-Based Access Control for HIPAA minimum necessary\n */\n\nimport type { ABACContext, ABACDecision, Action, Resource } from '../types';\nimport type { ABACEvaluationResult, Policy, PolicyRegistry } from './types';\n\n/**\n * Global policy registry\n */\nconst policyRegistry: PolicyRegistry = new Map();\n\n/**\n * Register a policy\n */\nexport function registerPolicy(policy: Policy): void {\n policyRegistry.set(policy.id, policy);\n}\n\n/**\n * Unregister a policy\n */\nexport function unregisterPolicy(policyId: string): void {\n policyRegistry.delete(policyId);\n}\n\n/**\n * Get all registered policies\n */\nexport function getPolicies(): Policy[] {\n return [...policyRegistry.values()].sort((a, b) => b.priority - a.priority);\n}\n\n/**\n * Evaluate access decision using all registered policies\n * Policies are evaluated in priority order (highest first)\n * First DENY wins, otherwise all must ALLOW\n */\nexport async function evaluatePolicy(\n context: ABACContext,\n resource: Resource,\n action: Action,\n): Promise<ABACEvaluationResult> {\n const startTime = Date.now();\n const policiesEvaluated: string[] = [];\n const policies = getPolicies();\n\n // Default deny if no policies\n if (policies.length === 0) {\n return {\n decision: {\n allowed: false,\n reason: 'No policies configured',\n policyId: 'default-deny',\n },\n policiesEvaluated: [],\n evaluationTimeMs: Date.now() - startTime,\n };\n }\n\n // Evaluate each policy\n for (const policy of policies) {\n policiesEvaluated.push(policy.id);\n\n try {\n const decision = await policy.evaluate(context, resource, action);\n\n // First explicit DENY wins\n if (!decision.allowed) {\n return {\n decision,\n policiesEvaluated,\n evaluationTimeMs: Date.now() - startTime,\n };\n }\n } catch (error) {\n // Policy evaluation error = DENY\n return {\n decision: {\n allowed: false,\n reason: `Policy evaluation error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n policyId: policy.id,\n },\n policiesEvaluated,\n evaluationTimeMs: Date.now() - startTime,\n };\n }\n }\n\n // All policies allowed\n return {\n decision: {\n allowed: true,\n policyId: 'all-policies-allowed',\n },\n policiesEvaluated,\n evaluationTimeMs: Date.now() - startTime,\n };\n}\n\n/**\n * Create ABAC context from request metadata\n */\nexport function createABACContext(\n actorId: string,\n roles: string[],\n purpose: ABACContext['purpose'],\n attributes: Record<string, unknown> = {},\n environment: Partial<ABACContext['environment']> = {},\n): ABACContext {\n return {\n actor: {\n id: actorId,\n roles,\n attributes,\n },\n environment: {\n timestamp: new Date(),\n ...environment,\n },\n purpose,\n };\n}\n\n/**\n * Helper: Check if actor has role\n */\nexport function hasRole(context: ABACContext, role: string): boolean {\n return context.actor.roles.includes(role);\n}\n\n/**\n * Helper: Check if actor has any of the roles\n */\nexport function hasAnyRole(context: ABACContext, roles: string[]): boolean {\n return roles.some(role => context.actor.roles.includes(role));\n}\n\n/**\n * Helper: Check if actor has all of the roles\n */\nexport function hasAllRoles(context: ABACContext, roles: string[]): boolean {\n return roles.every(role => context.actor.roles.includes(role));\n}\n\n/**\n * Helper: Check resource sensitivity level\n */\nexport function isResourceSensitive(resource: Resource): boolean {\n return resource.sensitivity === 'confidential' || resource.sensitivity === 'restricted';\n}\n\n/**\n * Helper: Create ALLOW decision\n */\nexport function allow(policyId: string, conditions?: string[]): ABACDecision {\n return {\n allowed: true,\n policyId,\n conditions,\n };\n}\n\n/**\n * Helper: Create DENY decision\n */\nexport function deny(policyId: string, reason: string): ABACDecision {\n return {\n allowed: false,\n policyId,\n reason,\n };\n}\n","/**\n * @fileoverview Performance optimization helper functions\n * Provides caching for expensive operations like PHI detection\n */\n\nimport { hashInput } from './crypto';\n\n/**\n * In-memory cache for detection results\n * In production, consider using Redis or another distributed cache\n */\nconst detectionCache = new Map<string, unknown>();\n\n/**\n * Cache detection results for a given input\n * @param input - Input data that was analyzed\n * @param result - Detection results to cache\n * @param ttl - Time to live in milliseconds (default: 1 hour)\n */\nexport function cacheDetections<T>(\n input: string | Record<string, unknown>,\n result: T,\n ttl: number = 3600000,\n): void {\n const key = hashInput(input);\n detectionCache.set(key, {\n result,\n timestamp: Date.now(),\n ttl,\n });\n\n // Auto-cleanup expired entries\n setTimeout(() => {\n detectionCache.delete(key);\n }, ttl);\n}\n\n/**\n * Get cached detection results for a given input\n * @param input - Input data to look up\n * @returns Cached results if available and not expired, otherwise undefined\n */\nexport function getCachedDetections<T>(input: string | Record<string, unknown>): T | undefined {\n const key = hashInput(input);\n const cached = detectionCache.get(key);\n\n if (!cached) {\n return undefined;\n }\n\n const entry = cached as { result: T; timestamp: number; ttl: number };\n const isExpired = Date.now() - entry.timestamp > entry.ttl;\n\n if (isExpired) {\n detectionCache.delete(key);\n return undefined;\n }\n\n return entry.result;\n}\n\n/**\n * Clear all cached detections\n * Useful for testing or memory management\n */\nexport function clearDetectionCache(): void {\n detectionCache.clear();\n}\n\n/**\n * Get cache statistics\n * @returns Object with cache size and entries\n */\nexport function getCacheStats() {\n return {\n size: detectionCache.size,\n keys: Array.from(detectionCache.keys()),\n };\n}\n","/**\n * @fileoverview HIPAA Safe Harbor 18 - Regex patterns for PHI detection\n * HIPAA Safe Harbor 18 - Regex patterns for PHI detection\n * Reference: 45 CFR § 164.514(b)(2)\n */\n\nimport type { PHIType } from '../types';\n\n/**\n * Regex patterns for detecting HIPAA Safe Harbor identifiers\n * Note: These are basic patterns and should be enhanced with NER for production\n *\n * Security note: Some patterns below use eslint-disable for detect-unsafe-regex.\n * These patterns have been reviewed and are safe in this context because:\n * 1. Input text is validated and length-limited before processing\n * 2. The patterns match specific, bounded structures (phone numbers, IPs, etc.)\n * 3. The nested quantifiers are necessary for real-world format variations\n */\nexport const SAFE_HARBOR_PATTERNS: Record<PHIType, RegExp> = {\n // SSN: xxx-xx-xxxx or xxxxxxxxx\n ssn: /\\b\\d{3}-\\d{2}-\\d{4}\\b|\\b\\d{9}\\b/g,\n\n // MRN: Common medical record number formats (6-10 digits, sometimes with prefix)\n mrn: /\\b(?:mrn|medical record|patient id)[\\s#:]*([\\da-z]{6,10})\\b/gi,\n\n // Phone: (xxx) xxx-xxxx, xxx-xxx-xxxx, xxx.xxx.xxxx\n // eslint-disable-next-line security/detect-unsafe-regex -- Pattern is bounded by digit groups, safe for phone number matching\n phone: /\\b(?:\\+?1[\\s.-]?)?\\(?(\\d{3})\\)?[\\s.-]?(\\d{3})[\\s.-]?(\\d{4})\\b/g,\n\n // Fax: Similar to phone\n // eslint-disable-next-line security/detect-unsafe-regex -- Pattern is bounded by digit groups, safe for fax number matching\n fax: /\\b(?:fax|facsimile)[\\s:]*(?:\\+?1[\\s.-]?)?\\(?(\\d{3})\\)?[\\s.-]?(\\d{3})[\\s.-]?(\\d{4})\\b/gi,\n\n // Email: Basic email pattern\n email: /\\b[\\w%+.-]+@[\\d.A-Za-z-]+\\.[A-Za-z|]{2,}\\b/g,\n\n // IP Address: IPv4 and basic IPv6\n // Pattern matches fixed-structure IP addresses with bounded repetitions\n ip_address:\n /\\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|(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}/gi, // eslint-disable-line security/detect-unsafe-regex\n\n // URL: Web URLs\n // eslint-disable-next-line security/detect-unsafe-regex -- URL pattern has explicit length limits (1,256 and 1,6) preventing ReDoS\n url: /\\bhttps?:\\/\\/(?:w{3}\\.)?[\\w#%+.:=@~-]{1,256}\\.[\\d()a-z]{1,6}\\b[\\w#%&()+./:=?@~-]*/gi,\n\n // Dates: MM/DD/YYYY, MM-DD-YYYY, YYYY-MM-DD, etc. (except standalone years)\n date: /\\b(?:0?[1-9]|1[0-2])[./\\-](?:0?[1-9]|[12]\\d|3[01])[./\\-](?:19|20)\\d{2}\\b|\\b(?:19|20)\\d{2}[./\\-](?:0?[1-9]|1[0-2])[./\\-](?:0?[1-9]|[12]\\d|3[01])\\b/g,\n\n // Names: Capitalized words (simple heuristic, should use NER in production)\n // This is a simplified pattern - in production, use Named Entity Recognition\n // eslint-disable-next-line security/detect-unsafe-regex -- Pattern matches title + name format with bounded word repetition (1-5 words typical)\n name: /\\b(?:mr\\.|mrs\\.|ms\\.|dr\\.|prof\\.)(?:\\s+[A-Z][a-z]+)+\\b/g,\n\n // Geographic: Specific addresses (simplified - requires NER for accuracy)\n // Matches: 123 Main St, 456 Oak Avenue, etc.\n\n geographic:\n /\\b\\d+\\s+(?:[a-z]{2,}\\s+){1,3}(?:street|st|avenue|ave|road|rd|drive|dr|lane|ln|court|ct|circle|cir|way|boulevard|blvd|parkway|pkwy|place|pl)\\b/gi, // eslint-disable-line security/detect-unsafe-regex\n\n // Account numbers: 8-16 digit sequences\n account_number: /\\b(?:account|acct|policy)[\\s#:]*(\\d{8,16})\\b/gi,\n\n // License numbers: State + digits (e.g., CA123456789)\n license_number: /\\b(?:license|lic|dl)[\\s#:]*([a-z]{2}\\d{6,12})\\b/gi,\n\n // Vehicle identifiers: VIN (17 characters)\n vehicle_id: /\\bvin[\\s#:]*([\\da-hj-npr-z]{17})\\b/gi,\n\n // Device identifiers: MAC addresses, UUIDs, serial numbers\n // eslint-disable-next-line security/detect-unsafe-regex -- Pattern matches fixed-structure MAC (6 octets) and UUID (8-4-4-4-12) formats\n device_id: /\\b(?:[\\da-f]{2}[:-]){5}[\\da-f]{2}\\b|\\b[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}\\b/gi,\n\n // Biometric: References to biometric data\n biometric: /\\b(?:fingerprint|voiceprint|retina scan|iris scan|facial recognition|biometric)\\b/gi,\n\n // Photo: References to photos\n photo: /\\b(?:photo|photograph|image|picture)\\s+(?:of|showing|depicting)\\b/gi,\n\n // Other unique identifiers: Generic patterns for IDs\n other_unique_id: /\\b(?:id|identifier|code)[\\s#:]*([\\da-z\\-]{8,})\\b/gi,\n};\n\n/**\n * High-confidence patterns that are almost certainly PHI\n */\nexport const HIGH_CONFIDENCE_PATTERNS: Partial<Record<PHIType, RegExp>> = {\n ssn: SAFE_HARBOR_PATTERNS.ssn,\n email: SAFE_HARBOR_PATTERNS.email,\n phone: SAFE_HARBOR_PATTERNS.phone,\n ip_address: SAFE_HARBOR_PATTERNS.ip_address,\n url: SAFE_HARBOR_PATTERNS.url,\n};\n\n/**\n * Get confidence score for a PHI type\n * Higher score = more certain it's actually PHI\n */\nexport function getConfidenceScore(type: PHIType, value: string): number {\n void value;\n // High confidence patterns\n if (type in HIGH_CONFIDENCE_PATTERNS) {\n return 0.95;\n }\n\n // Medium confidence patterns (require context)\n if (type === 'name' || type === 'geographic' || type === 'date') {\n return 0.6;\n }\n\n // Lower confidence - could be false positives\n return 0.4;\n}\n\n/**\n * Check if a pattern match is likely a false positive\n */\nexport function isFalsePositive(type: PHIType, value: string): boolean {\n // Dates: Allow standalone years\n if (type === 'date' && /^\\d{4}$/.test(value.trim())) {\n return true;\n }\n\n // Names: Filter out common words\n if (type === 'name') {\n const commonWords = ['The', 'This', 'That', 'These', 'Those'];\n return commonWords.some(word => value.includes(word));\n }\n\n // Account numbers: Filter out common test values\n if (type === 'account_number' && /^(0+|1+|12345678)$/.test(value)) {\n return true;\n }\n\n return false;\n}\n","/**\n * @fileoverview PHI Detection Engine\n * PHI Detection Engine\n * Scans text for HIPAA Safe Harbor 18 identifiers\n * Includes performance caching for repeated detections\n */\n\nimport { cacheDetections, getCachedDetections } from '../../../server/cache/performance';\n\nimport { SAFE_HARBOR_PATTERNS, getConfidenceScore, isFalsePositive } from './safe-harbor';\n\nimport type { PHIDetection, PHIType } from '../types';\n\n/**\n * Detect PHI in text using regex patterns\n * Returns array of detections with positions and confidence scores\n * Results are cached for performance\n */\nexport function detectPHI(\n text: string,\n options: {\n minConfidence?: number;\n excludeTypes?: PHIType[];\n useCache?: boolean;\n } = {},\n): PHIDetection[] {\n const { minConfidence = 0.5, excludeTypes = [], useCache = true } = options;\n\n // Check cache first\n if (useCache) {\n const cached = getCachedDetections<PHIDetection[]>(text);\n if (cached) {\n // Filter cached results based on current options\n return cached.filter(\n (d: PHIDetection) => d.confidence >= minConfidence && !excludeTypes.includes(d.type),\n );\n }\n }\n\n const detections: PHIDetection[] = [];\n\n // Scan text with each pattern\n for (const [type, pattern] of Object.entries(SAFE_HARBOR_PATTERNS)) {\n const phiType = type as PHIType;\n\n // Skip excluded types\n if (excludeTypes.includes(phiType)) {\n continue;\n }\n\n // Reset regex lastIndex\n pattern.lastIndex = 0;\n\n let match;\n while ((match = pattern.exec(text)) !== null) {\n const value = match[0];\n const start = match.index;\n const end = start + value.length;\n\n // Calculate confidence\n const confidence = getConfidenceScore(phiType, value);\n\n // Filter low confidence and false positives\n if (confidence < minConfidence || isFalsePositive(phiType, value)) {\n continue;\n }\n\n detections.push({\n type: phiType,\n value,\n start,\n end,\n confidence,\n });\n }\n }\n\n // Sort by position in text\n const sorted = detections.sort((a, b) => a.start - b.start);\n\n // Cache results\n if (useCache) {\n cacheDetections(text, sorted);\n }\n\n return sorted;\n}\n\n/**\n * Check if text contains any PHI\n */\nexport function containsPHI(text: string, options?: Parameters<typeof detectPHI>[1]): boolean {\n return detectPHI(text, options).length > 0;\n}\n\n/**\n * Get PHI statistics for text\n */\nexport function analyzePHI(text: string): {\n hasPHI: boolean;\n totalDetections: number;\n byType: Record<PHIType, number>;\n averageConfidence: number;\n} {\n const detections = detectPHI(text);\n\n const byType = detections.reduce(\n (acc, d) => {\n acc[d.type] = (acc[d.type] || 0) + 1;\n return acc;\n },\n {} as Record<PHIType, number>,\n );\n\n const averageConfidence =\n detections.length > 0\n ? detections.reduce((sum, d) => sum + d.confidence, 0) / detections.length\n : 0;\n\n return {\n hasPHI: detections.length > 0,\n totalDetections: detections.length,\n byType,\n averageConfidence,\n };\n}\n\n/**\n * Validate that text is Safe Harbor compliant\n * Returns true if no PHI detected above threshold\n */\nexport function isSafeHarborCompliant(\n text: string,\n minConfidence: number = 0.7,\n): {\n compliant: boolean;\n violations: PHIDetection[];\n} {\n const violations = detectPHI(text, { minConfidence });\n\n return {\n compliant: violations.length === 0,\n violations,\n };\n}\n","/**\n * @fileoverview PHI Redaction Utilities\n * PHI Redaction Utilities\n * Implements different redaction strategies for HIPAA compliance\n */\n\nimport { createHash } from 'node:crypto';\n\nimport { detectPHI } from './phi-detector';\n\nimport type { PHIDetection, RedactionStrategy } from '../types';\n\n/**\n * Redact PHI from text using specified strategy\n */\nexport function redactPHI(\n text: string,\n strategy: RedactionStrategy = 'MASK',\n options: {\n customMask?: string;\n preserveLength?: boolean;\n minConfidence?: number;\n } = {},\n): {\n redacted: string;\n detections: PHIDetection[];\n} {\n const { customMask = '[REDACTED]', preserveLength = false, minConfidence } = options;\n\n // Detect PHI\n const detections = detectPHI(text, { minConfidence });\n\n if (detections.length === 0) {\n return { redacted: text, detections: [] };\n }\n\n // Build redacted text by replacing from end to start (preserves indices)\n let redacted = text;\n const sortedDetections = [...detections].sort((a, b) => b.start - a.start);\n\n for (const detection of sortedDetections) {\n const { start, end, value, type } = detection;\n const replacement = getRedactionReplacement(value, type, strategy, customMask, preserveLength);\n\n redacted = redacted.slice(0, start) + replacement + redacted.slice(end);\n }\n\n return { redacted, detections };\n}\n\n/**\n * Get replacement text for a detected PHI value\n */\nfunction getRedactionReplacement(\n value: string,\n type: string,\n strategy: RedactionStrategy,\n customMask: string,\n preserveLength: boolean,\n): string {\n switch (strategy) {\n case 'MASK':\n if (preserveLength) {\n return '*'.repeat(value.length);\n }\n return customMask;\n\n case 'HASH':\n // Use crypto-safe hash for consistency\n return `[${type.toUpperCase()}_${hashString(value)}]`;\n\n case 'TOKENIZE':\n // Reversible tokenization (requires key management)\n return `[TOKEN_${type.toUpperCase()}_${generateToken(value)}]`;\n\n default:\n return customMask;\n }\n}\n\n/**\n * Cryptographically hash a string for HASH strategy\n * Uses SHA-256 for consistent, secure hashing\n */\nfunction hashString(value: string): string {\n const hash = createHash('sha256').update(value).digest('hex');\n return hash.slice(0, 8).toUpperCase();\n}\n\n/**\n * Generate a reversible token (simplified - use proper tokenization in production)\n */\nfunction generateToken(value: string): string {\n // In production, use a proper tokenization service with key management\n // Using base64 encoding for reversible tokenization\n return Buffer.from(value).toString('base64').slice(0, 12);\n}\n\n/**\n * Redact specific PHI types only\n */\nexport function redactSpecificTypes(\n text: string,\n types: string[],\n strategy: RedactionStrategy = 'MASK',\n): {\n redacted: string;\n detections: PHIDetection[];\n} {\n const allDetections = detectPHI(text);\n const filteredDetections = allDetections.filter(d => types.includes(d.type));\n\n let redacted = text;\n const sortedDetections = [...filteredDetections].sort((a, b) => b.start - a.start);\n\n for (const detection of sortedDetections) {\n const { start, end, value, type } = detection;\n const replacement = getRedactionReplacement(value, type, strategy, '[REDACTED]', false);\n redacted = redacted.slice(0, start) + replacement + redacted.slice(end);\n }\n\n return { redacted, detections: filteredDetections };\n}\n\n/**\n * Preview redactions without applying them\n */\nexport function previewRedactions(text: string): {\n original: string;\n preview: string;\n detections: PHIDetection[];\n stats: {\n totalPHI: number;\n byType: Record<string, number>;\n };\n} {\n const detections = detectPHI(text);\n\n let preview = text;\n const sortedDetections = [...detections].sort((a, b) => b.start - a.start);\n\n for (const detection of sortedDetections) {\n const { start, end, type } = detection;\n const replacement = `[${type.toUpperCase()}]`;\n preview = preview.slice(0, start) + replacement + preview.slice(end);\n }\n\n const byType = detections.reduce(\n (acc, d) => {\n acc[d.type] = (acc[d.type] || 0) + 1;\n return acc;\n },\n {} as Record<string, number>,\n );\n\n return {\n original: text,\n preview,\n detections,\n stats: {\n totalPHI: detections.length,\n byType,\n },\n };\n}\n\n/**\n * Sanitize text for logging (aggressive redaction)\n */\nexport function sanitizeForLogging(text: string): string {\n const { redacted } = redactPHI(text, 'MASK', {\n customMask: '[REDACTED]',\n minConfidence: 0.3, // Lower threshold for logging\n });\n return redacted;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { logWarn } from "@od-oneapp/shared/logs";
|
|
2
|
+
|
|
3
|
+
//#region src/caching/adapters/memory.ts
|
|
4
|
+
/**
|
|
5
|
+
* In-memory cache adapter
|
|
6
|
+
* Suitable for development, testing, and single-instance deployments
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const adapter = new MemoryCacheAdapter({ maxSize: 1000 });
|
|
11
|
+
* const caching = createCachingMiddleware({ adapter });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
var MemoryCacheAdapter = class {
|
|
15
|
+
cache = /* @__PURE__ */ new Map();
|
|
16
|
+
maxSize;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.maxSize = options.maxSize ?? 1e4;
|
|
19
|
+
}
|
|
20
|
+
async get(key) {
|
|
21
|
+
const entry = this.cache.get(key);
|
|
22
|
+
if (!entry) return null;
|
|
23
|
+
if (Date.now() > entry.expiresAt) {
|
|
24
|
+
this.cache.delete(key);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
this.cache.delete(key);
|
|
28
|
+
this.cache.set(key, entry);
|
|
29
|
+
return structuredClone(entry.value);
|
|
30
|
+
}
|
|
31
|
+
async set(key, value, ttl) {
|
|
32
|
+
if (this.cache.has(key)) this.cache.delete(key);
|
|
33
|
+
else if (this.cache.size >= this.maxSize) {
|
|
34
|
+
const oldestKey = this.cache.keys().next().value;
|
|
35
|
+
if (oldestKey !== void 0) this.cache.delete(oldestKey);
|
|
36
|
+
}
|
|
37
|
+
this.cache.set(key, {
|
|
38
|
+
value: structuredClone(value),
|
|
39
|
+
expiresAt: Date.now() + ttl * 1e3
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async delete(key) {
|
|
43
|
+
this.cache.delete(key);
|
|
44
|
+
}
|
|
45
|
+
async clear() {
|
|
46
|
+
this.cache.clear();
|
|
47
|
+
}
|
|
48
|
+
/** Get current cache size */
|
|
49
|
+
get size() {
|
|
50
|
+
return this.cache.size;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/caching/adapters/redis.ts
|
|
56
|
+
/**
|
|
57
|
+
* Redis cache adapter for distributed deployments
|
|
58
|
+
*/
|
|
59
|
+
/**
|
|
60
|
+
* Redis cache adapter for distributed deployments
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* import { createUpstashRedis } from '../../integrations/redis';
|
|
65
|
+
* const redis = createUpstashRedis({ url: '...', token: '...' });
|
|
66
|
+
* const adapter = new RedisCacheAdapter(redis, { prefix: "ai-cache:" });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
var RedisCacheAdapter = class {
|
|
70
|
+
redis;
|
|
71
|
+
prefix;
|
|
72
|
+
constructor(redis, options = {}) {
|
|
73
|
+
this.redis = redis;
|
|
74
|
+
this.prefix = options.prefix ?? "ai-cache:";
|
|
75
|
+
}
|
|
76
|
+
getKey(key) {
|
|
77
|
+
return `${this.prefix}${key}`;
|
|
78
|
+
}
|
|
79
|
+
async get(key) {
|
|
80
|
+
const data = await this.redis.get(this.getKey(key));
|
|
81
|
+
if (!data) return null;
|
|
82
|
+
try {
|
|
83
|
+
return JSON.parse(data);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
logWarn(`[RedisCacheAdapter] Failed to parse cached data for key "${key}"`, { error: error instanceof Error ? error : new Error(String(error)) });
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async set(key, value, ttl) {
|
|
90
|
+
await this.redis.set(this.getKey(key), JSON.stringify(value), "EX", ttl);
|
|
91
|
+
}
|
|
92
|
+
async delete(key) {
|
|
93
|
+
await this.redis.del(this.getKey(key));
|
|
94
|
+
}
|
|
95
|
+
async clear() {
|
|
96
|
+
if (this.redis.flushdb) await this.redis.flushdb();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
//#endregion
|
|
101
|
+
export { MemoryCacheAdapter as n, RedisCacheAdapter as t };
|
|
102
|
+
//# sourceMappingURL=redis-CpsSrF8K.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-CpsSrF8K.mjs","names":[],"sources":["../src/caching/adapters/memory.ts","../src/caching/adapters/redis.ts"],"sourcesContent":["/**\n * In-memory cache adapter for development and testing\n */\n\nimport type { CacheAdapter, CachedResponse } from '../types';\n\ninterface CacheEntry {\n value: CachedResponse;\n expiresAt: number;\n}\n\n/**\n * In-memory cache adapter\n * Suitable for development, testing, and single-instance deployments\n *\n * @example\n * ```ts\n * const adapter = new MemoryCacheAdapter({ maxSize: 1000 });\n * const caching = createCachingMiddleware({ adapter });\n * ```\n */\nexport class MemoryCacheAdapter implements CacheAdapter {\n private cache = new Map<string, CacheEntry>();\n private maxSize: number;\n\n constructor(options: { maxSize?: number } = {}) {\n this.maxSize = options.maxSize ?? 10000;\n }\n\n async get(key: string): Promise<CachedResponse | null> {\n const entry = this.cache.get(key);\n\n if (!entry) return null;\n\n if (Date.now() > entry.expiresAt) {\n this.cache.delete(key);\n return null;\n }\n\n // Refresh recency for LRU by re-inserting\n this.cache.delete(key);\n this.cache.set(key, entry);\n // Return a clone to prevent external mutation of cached data\n return structuredClone(entry.value);\n }\n\n async set(key: string, value: CachedResponse, ttl: number): Promise<void> {\n // LRU eviction if at capacity\n if (this.cache.has(key)) {\n // Delete first to refresh position (move to end)\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n const oldestKey = this.cache.keys().next().value;\n // Use !== undefined to handle empty-string keys correctly\n if (oldestKey !== undefined) this.cache.delete(oldestKey);\n }\n\n // Clone value to prevent external mutation affecting cached data\n this.cache.set(key, {\n value: structuredClone(value),\n expiresAt: Date.now() + ttl * 1000,\n });\n }\n\n async delete(key: string): Promise<void> {\n this.cache.delete(key);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n }\n\n /** Get current cache size */\n get size(): number {\n return this.cache.size;\n }\n}\n","/**\n * Redis cache adapter for distributed deployments\n */\n\nimport { logWarn } from '@repo/shared/logs';\n\nimport type { RedisClient } from '../../integrations/redis';\nimport type { CacheAdapter, CachedResponse } from '../types';\n\n/**\n * Redis cache adapter for distributed deployments\n *\n * @example\n * ```ts\n * import { createUpstashRedis } from '../../integrations/redis';\n * const redis = createUpstashRedis({ url: '...', token: '...' });\n * const adapter = new RedisCacheAdapter(redis, { prefix: \"ai-cache:\" });\n * ```\n */\nexport class RedisCacheAdapter implements CacheAdapter {\n private redis: RedisClient;\n private prefix: string;\n\n constructor(redis: RedisClient, options: { prefix?: string } = {}) {\n this.redis = redis;\n this.prefix = options.prefix ?? 'ai-cache:';\n }\n\n private getKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n async get(key: string): Promise<CachedResponse | null> {\n const data = await this.redis.get(this.getKey(key));\n if (!data) return null;\n\n try {\n return JSON.parse(data) as CachedResponse;\n } catch (error) {\n logWarn(`[RedisCacheAdapter] Failed to parse cached data for key \"${key}\"`, {\n error: error instanceof Error ? error : new Error(String(error)),\n });\n return null;\n }\n }\n\n async set(key: string, value: CachedResponse, ttl: number): Promise<void> {\n await this.redis.set(this.getKey(key), JSON.stringify(value), 'EX', ttl);\n }\n\n async delete(key: string): Promise<void> {\n await this.redis.del(this.getKey(key));\n }\n\n async clear(): Promise<void> {\n if (this.redis.flushdb) {\n await this.redis.flushdb();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAa,qBAAb,MAAwD;CACtD,AAAQ,wBAAQ,IAAI,KAAyB;CAC7C,AAAQ;CAER,YAAY,UAAgC,EAAE,EAAE;AAC9C,OAAK,UAAU,QAAQ,WAAW;;CAGpC,MAAM,IAAI,KAA6C;EACrD,MAAM,QAAQ,KAAK,MAAM,IAAI,IAAI;AAEjC,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,KAAK,KAAK,GAAG,MAAM,WAAW;AAChC,QAAK,MAAM,OAAO,IAAI;AACtB,UAAO;;AAIT,OAAK,MAAM,OAAO,IAAI;AACtB,OAAK,MAAM,IAAI,KAAK,MAAM;AAE1B,SAAO,gBAAgB,MAAM,MAAM;;CAGrC,MAAM,IAAI,KAAa,OAAuB,KAA4B;AAExE,MAAI,KAAK,MAAM,IAAI,IAAI,CAErB,MAAK,MAAM,OAAO,IAAI;WACb,KAAK,MAAM,QAAQ,KAAK,SAAS;GAC1C,MAAM,YAAY,KAAK,MAAM,MAAM,CAAC,MAAM,CAAC;AAE3C,OAAI,cAAc,OAAW,MAAK,MAAM,OAAO,UAAU;;AAI3D,OAAK,MAAM,IAAI,KAAK;GAClB,OAAO,gBAAgB,MAAM;GAC7B,WAAW,KAAK,KAAK,GAAG,MAAM;GAC/B,CAAC;;CAGJ,MAAM,OAAO,KAA4B;AACvC,OAAK,MAAM,OAAO,IAAI;;CAGxB,MAAM,QAAuB;AAC3B,OAAK,MAAM,OAAO;;;CAIpB,IAAI,OAAe;AACjB,SAAO,KAAK,MAAM;;;;;;;;;;;;;;;;;;;ACvDtB,IAAa,oBAAb,MAAuD;CACrD,AAAQ;CACR,AAAQ;CAER,YAAY,OAAoB,UAA+B,EAAE,EAAE;AACjE,OAAK,QAAQ;AACb,OAAK,SAAS,QAAQ,UAAU;;CAGlC,AAAQ,OAAO,KAAqB;AAClC,SAAO,GAAG,KAAK,SAAS;;CAG1B,MAAM,IAAI,KAA6C;EACrD,MAAM,OAAO,MAAM,KAAK,MAAM,IAAI,KAAK,OAAO,IAAI,CAAC;AACnD,MAAI,CAAC,KAAM,QAAO;AAElB,MAAI;AACF,UAAO,KAAK,MAAM,KAAK;WAChB,OAAO;AACd,WAAQ,4DAA4D,IAAI,IAAI,EAC1E,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC,EACjE,CAAC;AACF,UAAO;;;CAIX,MAAM,IAAI,KAAa,OAAuB,KAA4B;AACxE,QAAM,KAAK,MAAM,IAAI,KAAK,OAAO,IAAI,EAAE,KAAK,UAAU,MAAM,EAAE,MAAM,IAAI;;CAG1E,MAAM,OAAO,KAA4B;AACvC,QAAM,KAAK,MAAM,IAAI,KAAK,OAAO,IAAI,CAAC;;CAGxC,MAAM,QAAuB;AAC3B,MAAI,KAAK,MAAM,QACb,OAAM,KAAK,MAAM,SAAS"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { t as RedisClient } from "./types-By-r93bE.mjs";
|
|
2
|
+
import { r as CachedResponse, t as CacheAdapter } from "./types-BPnq3GQo.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/caching/adapters/memory.d.ts
|
|
5
|
+
declare class MemoryCacheAdapter implements CacheAdapter {
|
|
6
|
+
private cache;
|
|
7
|
+
private maxSize;
|
|
8
|
+
constructor(options?: {
|
|
9
|
+
maxSize?: number;
|
|
10
|
+
});
|
|
11
|
+
get(key: string): Promise<CachedResponse | null>;
|
|
12
|
+
set(key: string, value: CachedResponse, ttl: number): Promise<void>;
|
|
13
|
+
delete(key: string): Promise<void>;
|
|
14
|
+
clear(): Promise<void>;
|
|
15
|
+
get size(): number;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/caching/adapters/redis.d.ts
|
|
19
|
+
declare class RedisCacheAdapter implements CacheAdapter {
|
|
20
|
+
private redis;
|
|
21
|
+
private prefix;
|
|
22
|
+
constructor(redis: RedisClient, options?: {
|
|
23
|
+
prefix?: string;
|
|
24
|
+
});
|
|
25
|
+
private getKey;
|
|
26
|
+
get(key: string): Promise<CachedResponse | null>;
|
|
27
|
+
set(key: string, value: CachedResponse, ttl: number): Promise<void>;
|
|
28
|
+
delete(key: string): Promise<void>;
|
|
29
|
+
clear(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { MemoryCacheAdapter as n, RedisCacheAdapter as t };
|
|
33
|
+
//# sourceMappingURL=redis-CwguYFGh.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-CwguYFGh.d.mts","names":[],"sources":["../src/caching/adapters/memory.ts","../src/caching/adapters/redis.ts"],"mappings":";;;;cAqBa,kBAAA,YAA8B,YAAA;EAAA,QACjC,KAAA;EAAA,QACA,OAAA;cAEI,OAAA;IAAW,OAAA;EAAA;EAIjB,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,cAAA;EAiB1B,GAAA,CAAI,GAAA,UAAa,KAAA,EAAO,cAAA,EAAgB,GAAA,WAAc,OAAA;EAkBtD,MAAA,CAAO,GAAA,WAAc,OAAA;EAIrB,KAAA,CAAA,GAAS,OAAA;EAAA,IAKX,IAAA,CAAA;AAAA;;;cCtDO,iBAAA,YAA6B,YAAA;EAAA,QAChC,KAAA;EAAA,QACA,MAAA;cAEI,KAAA,EAAO,WAAA,EAAa,OAAA;IAAW,MAAA;EAAA;EAAA,QAKnC,MAAA;EAIF,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,cAAA;EAc1B,GAAA,CAAI,GAAA,UAAa,KAAA,EAAO,cAAA,EAAgB,GAAA,WAAc,OAAA;EAItD,MAAA,CAAO,GAAA,WAAc,OAAA;EAIrB,KAAA,CAAA,GAAS,OAAA;AAAA"}
|