@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,737 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-In-The-Loop (HITL) Approval System
|
|
3
|
+
* Main approval orchestration module for tool workflows requiring human validation
|
|
4
|
+
*
|
|
5
|
+
* FEATURES:
|
|
6
|
+
* - Tool-level approval workflows
|
|
7
|
+
* - Flexible approval rules and conditions
|
|
8
|
+
* - Approval queue management (in-memory and Redis)
|
|
9
|
+
* - Middleware integration for automatic interception
|
|
10
|
+
* - Approval tracking and audit trails
|
|
11
|
+
* - Modification support during approval
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { logInfo } from '@repo/shared/logs';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Approval request that needs human review
|
|
18
|
+
*/
|
|
19
|
+
export interface ApprovalRequest {
|
|
20
|
+
/** Unique identifier for this approval request */
|
|
21
|
+
id: string;
|
|
22
|
+
|
|
23
|
+
/** Name of the tool requiring approval */
|
|
24
|
+
toolName: string;
|
|
25
|
+
|
|
26
|
+
/** Arguments passed to the tool */
|
|
27
|
+
args: Record<string, unknown>;
|
|
28
|
+
|
|
29
|
+
/** Reason why approval is needed */
|
|
30
|
+
reason: string;
|
|
31
|
+
|
|
32
|
+
/** Additional context for approval decision */
|
|
33
|
+
context?: Record<string, unknown>;
|
|
34
|
+
|
|
35
|
+
/** When the request was created */
|
|
36
|
+
requestedAt: Date;
|
|
37
|
+
|
|
38
|
+
/** When the request expires (null = no expiration) */
|
|
39
|
+
expiresAt?: Date;
|
|
40
|
+
|
|
41
|
+
/** Priority level for approval queue */
|
|
42
|
+
priority?: 'low' | 'normal' | 'high' | 'critical';
|
|
43
|
+
|
|
44
|
+
/** Requester information */
|
|
45
|
+
requestedBy?: string;
|
|
46
|
+
|
|
47
|
+
/** Callback URL for approval notification (webhook) */
|
|
48
|
+
notificationUrl?: string;
|
|
49
|
+
|
|
50
|
+
/** Request status */
|
|
51
|
+
status: 'pending' | 'approved' | 'rejected' | 'expired' | 'cancelled';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Result of an approval decision
|
|
56
|
+
*/
|
|
57
|
+
export interface ApprovalResult {
|
|
58
|
+
/** Whether the tool was approved */
|
|
59
|
+
approved: boolean;
|
|
60
|
+
|
|
61
|
+
/** User ID of the approver */
|
|
62
|
+
approvedBy?: string;
|
|
63
|
+
|
|
64
|
+
/** When the approval was decided */
|
|
65
|
+
approvedAt?: Date;
|
|
66
|
+
|
|
67
|
+
/** Modifications to the original args by approver */
|
|
68
|
+
modifications?: Record<string, unknown>;
|
|
69
|
+
|
|
70
|
+
/** Reason for approval/rejection decision */
|
|
71
|
+
reason?: string;
|
|
72
|
+
|
|
73
|
+
/** Additional metadata */
|
|
74
|
+
metadata?: Record<string, unknown>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Approval rule to determine if a tool needs approval
|
|
79
|
+
*/
|
|
80
|
+
export interface ApprovalRule {
|
|
81
|
+
/** Tool name pattern (supports wildcards) */
|
|
82
|
+
toolPattern: string | RegExp;
|
|
83
|
+
|
|
84
|
+
/** Condition function to determine approval requirement */
|
|
85
|
+
condition?: (args: unknown, context?: Record<string, unknown>) => boolean;
|
|
86
|
+
|
|
87
|
+
/** Priority for approval */
|
|
88
|
+
priority?: 'low' | 'normal' | 'high' | 'critical';
|
|
89
|
+
|
|
90
|
+
/** Expiration time in milliseconds */
|
|
91
|
+
expirationMs?: number;
|
|
92
|
+
|
|
93
|
+
/** Custom reason message */
|
|
94
|
+
reason?: string | ((args: unknown) => string);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Configuration options for approval system
|
|
99
|
+
*/
|
|
100
|
+
export interface ApprovalOptions {
|
|
101
|
+
/** Array of rules determining approval requirements */
|
|
102
|
+
rules?: ApprovalRule[];
|
|
103
|
+
|
|
104
|
+
/** Global expiration time in milliseconds */
|
|
105
|
+
defaultExpirationMs?: number;
|
|
106
|
+
|
|
107
|
+
/** Default priority for approvals */
|
|
108
|
+
defaultPriority?: 'low' | 'normal' | 'high' | 'critical';
|
|
109
|
+
|
|
110
|
+
/** Enable logging for debugging */
|
|
111
|
+
enableLogging?: boolean;
|
|
112
|
+
|
|
113
|
+
/** Approval backend to use */
|
|
114
|
+
backend?: ApprovalBackend;
|
|
115
|
+
|
|
116
|
+
/** Custom approval handler */
|
|
117
|
+
handler?: ApprovalHandler;
|
|
118
|
+
|
|
119
|
+
/** Timeout for approval decision in milliseconds */
|
|
120
|
+
approvalTimeoutMs?: number;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Handler for approval decisions
|
|
125
|
+
*/
|
|
126
|
+
export interface ApprovalHandler {
|
|
127
|
+
/** Request approval from user */
|
|
128
|
+
requestApproval(request: ApprovalRequest): Promise<ApprovalResult>;
|
|
129
|
+
|
|
130
|
+
/** Notify approval decision */
|
|
131
|
+
notifyApproval(request: ApprovalRequest, result: ApprovalResult): Promise<void>;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface RedisClient {
|
|
135
|
+
get: (key: string) => Promise<string | null> | string | null;
|
|
136
|
+
set: (
|
|
137
|
+
key: string,
|
|
138
|
+
value: string,
|
|
139
|
+
mode?: string,
|
|
140
|
+
durationSeconds?: number,
|
|
141
|
+
) => Promise<unknown> | unknown;
|
|
142
|
+
keys: (pattern: string) => Promise<string[]> | string[];
|
|
143
|
+
del: (key: string) => Promise<number> | number;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Tool interface for approval wrapping
|
|
148
|
+
*/
|
|
149
|
+
export interface Tool<T = unknown> {
|
|
150
|
+
/** Tool name */
|
|
151
|
+
name: string;
|
|
152
|
+
|
|
153
|
+
/** Tool description */
|
|
154
|
+
description?: string;
|
|
155
|
+
|
|
156
|
+
/** Execute the tool */
|
|
157
|
+
execute(args: Record<string, unknown>): Promise<T>;
|
|
158
|
+
|
|
159
|
+
/** Validate tool arguments */
|
|
160
|
+
validate?(args: unknown): boolean;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Backend interface for approval storage and retrieval
|
|
165
|
+
*/
|
|
166
|
+
export interface ApprovalBackend {
|
|
167
|
+
/** Store approval request */
|
|
168
|
+
store(request: ApprovalRequest): Promise<void>;
|
|
169
|
+
|
|
170
|
+
/** Retrieve approval request by ID */
|
|
171
|
+
get(requestId: string): Promise<ApprovalRequest | null>;
|
|
172
|
+
|
|
173
|
+
/** List pending approvals */
|
|
174
|
+
listPending(): Promise<ApprovalRequest[]>;
|
|
175
|
+
|
|
176
|
+
/** Update approval request status */
|
|
177
|
+
updateStatus(requestId: string, status: ApprovalRequest['status']): Promise<void>;
|
|
178
|
+
|
|
179
|
+
/** Delete approval request */
|
|
180
|
+
delete(requestId: string): Promise<void>;
|
|
181
|
+
|
|
182
|
+
/** Clear expired requests */
|
|
183
|
+
clearExpired(): Promise<number>;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Approval queue interface
|
|
188
|
+
*/
|
|
189
|
+
export interface ApprovalQueue {
|
|
190
|
+
/** Add request to queue */
|
|
191
|
+
enqueue(request: ApprovalRequest): Promise<void>;
|
|
192
|
+
|
|
193
|
+
/** Get next request from queue */
|
|
194
|
+
dequeue(): Promise<ApprovalRequest | null>;
|
|
195
|
+
|
|
196
|
+
/** Get request by ID */
|
|
197
|
+
get(requestId: string): Promise<ApprovalRequest | null>;
|
|
198
|
+
|
|
199
|
+
/** List all pending requests */
|
|
200
|
+
listPending(limit?: number, offset?: number): Promise<ApprovalRequest[]>;
|
|
201
|
+
|
|
202
|
+
/** Update request status */
|
|
203
|
+
updateStatus(
|
|
204
|
+
requestId: string,
|
|
205
|
+
status: ApprovalRequest['status'],
|
|
206
|
+
result?: ApprovalResult,
|
|
207
|
+
): Promise<void>;
|
|
208
|
+
|
|
209
|
+
/** Remove request from queue */
|
|
210
|
+
remove(requestId: string): Promise<void>;
|
|
211
|
+
|
|
212
|
+
/** Get queue statistics */
|
|
213
|
+
getStats(): Promise<QueueStats>;
|
|
214
|
+
|
|
215
|
+
/** Clear expired requests */
|
|
216
|
+
clearExpired(): Promise<number>;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Statistics about the approval queue
|
|
221
|
+
*/
|
|
222
|
+
export interface QueueStats {
|
|
223
|
+
/** Total pending requests */
|
|
224
|
+
totalPending: number;
|
|
225
|
+
|
|
226
|
+
/** Requests by priority */
|
|
227
|
+
byPriority: Record<string, number>;
|
|
228
|
+
|
|
229
|
+
/** Oldest pending request age in milliseconds */
|
|
230
|
+
oldestRequestAgeMs?: number;
|
|
231
|
+
|
|
232
|
+
/** Average time in queue (milliseconds) */
|
|
233
|
+
averageTimeInQueueMs?: number;
|
|
234
|
+
|
|
235
|
+
/** Total requests processed */
|
|
236
|
+
totalProcessed: number;
|
|
237
|
+
|
|
238
|
+
/** Approval rate (0-1) */
|
|
239
|
+
approvalRate: number;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Tool wrapper that requires approval
|
|
244
|
+
*
|
|
245
|
+
* @param tool - Tool to wrap
|
|
246
|
+
* @param options - Approval options
|
|
247
|
+
* @returns Wrapped tool that requires approval
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```typescript
|
|
251
|
+
* const deleteTool = {
|
|
252
|
+
* name: 'deleteDatabase',
|
|
253
|
+
* execute: async (args) => { ... }
|
|
254
|
+
* };
|
|
255
|
+
*
|
|
256
|
+
* const approvedDeleteTool = withApproval(deleteTool, {
|
|
257
|
+
* rules: [{
|
|
258
|
+
* toolPattern: 'delete*',
|
|
259
|
+
* priority: 'critical',
|
|
260
|
+
* reason: 'Database operations require approval'
|
|
261
|
+
* }],
|
|
262
|
+
* handler: myApprovalHandler
|
|
263
|
+
* });
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
export function withApproval<T = unknown>(tool: Tool<T>, options?: ApprovalOptions): Tool<T> {
|
|
267
|
+
const logger = options?.enableLogging ? logInfo : () => {};
|
|
268
|
+
let approvalQueue: ApprovalQueue | null = null;
|
|
269
|
+
|
|
270
|
+
return {
|
|
271
|
+
name: tool.name,
|
|
272
|
+
description: tool.description,
|
|
273
|
+
|
|
274
|
+
async execute(args: Record<string, unknown>): Promise<T> {
|
|
275
|
+
// Check if approval is needed
|
|
276
|
+
const needsApprovalResult = needsApproval(tool.name, args, options?.rules);
|
|
277
|
+
|
|
278
|
+
if (!needsApprovalResult.required) {
|
|
279
|
+
logger(`[Approval] Tool '${tool.name}' does not require approval`);
|
|
280
|
+
return tool.execute(args);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
logger(`[Approval] Tool '${tool.name}' requires approval`);
|
|
284
|
+
|
|
285
|
+
// Create approval request
|
|
286
|
+
const requestId = generateRequestId();
|
|
287
|
+
const request: ApprovalRequest = {
|
|
288
|
+
id: requestId,
|
|
289
|
+
toolName: tool.name,
|
|
290
|
+
args,
|
|
291
|
+
reason: needsApprovalResult.reason,
|
|
292
|
+
context: needsApprovalResult.context,
|
|
293
|
+
requestedAt: new Date(),
|
|
294
|
+
expiresAt: options?.defaultExpirationMs
|
|
295
|
+
? new Date(Date.now() + options.defaultExpirationMs)
|
|
296
|
+
: undefined,
|
|
297
|
+
priority: needsApprovalResult.priority || options?.defaultPriority || 'normal',
|
|
298
|
+
status: 'pending',
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
// Store in queue
|
|
302
|
+
approvalQueue =
|
|
303
|
+
approvalQueue || (options?.backend ? createQueueFromBackend(options.backend) : null);
|
|
304
|
+
if (approvalQueue) {
|
|
305
|
+
await approvalQueue.enqueue(request);
|
|
306
|
+
logger(`[Approval] Request ${requestId} enqueued`);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Request approval from handler
|
|
310
|
+
const handler = options?.handler;
|
|
311
|
+
if (!handler) {
|
|
312
|
+
throw new Error(`No approval handler configured for tool '${tool.name}'`);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const result = await handler.requestApproval(request);
|
|
316
|
+
|
|
317
|
+
if (!result.approved) {
|
|
318
|
+
logger(`[Approval] Request ${requestId} rejected: ${result.reason}`);
|
|
319
|
+
throw new Error(`Approval denied for tool '${tool.name}': ${result.reason}`);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
logger(`[Approval] Request ${requestId} approved`);
|
|
323
|
+
|
|
324
|
+
// Apply modifications if any
|
|
325
|
+
const finalArgs = result.modifications ? { ...args, ...result.modifications } : args;
|
|
326
|
+
|
|
327
|
+
// Notify approval
|
|
328
|
+
try {
|
|
329
|
+
await handler.notifyApproval(request, result);
|
|
330
|
+
} catch (error) {
|
|
331
|
+
logger(`[Approval] Notification failed: ${error}`);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Update queue status
|
|
335
|
+
if (approvalQueue) {
|
|
336
|
+
await approvalQueue.updateStatus(requestId, 'approved', result);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Execute tool with approved args
|
|
340
|
+
return tool.execute(finalArgs);
|
|
341
|
+
},
|
|
342
|
+
|
|
343
|
+
validate: tool.validate,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Check if a tool needs approval based on rules
|
|
349
|
+
*
|
|
350
|
+
* @param toolName - Name of the tool
|
|
351
|
+
* @param args - Tool arguments
|
|
352
|
+
* @param rules - Approval rules
|
|
353
|
+
* @returns Object indicating if approval is needed and metadata
|
|
354
|
+
*
|
|
355
|
+
* @example
|
|
356
|
+
* ```typescript
|
|
357
|
+
* const result = needsApproval('deleteUser', { userId: '123' }, [
|
|
358
|
+
* {
|
|
359
|
+
* toolPattern: 'delete*',
|
|
360
|
+
* priority: 'critical',
|
|
361
|
+
* reason: 'Delete operations require approval'
|
|
362
|
+
* }
|
|
363
|
+
* ]);
|
|
364
|
+
*
|
|
365
|
+
* if (result.required) {
|
|
366
|
+
* logInfo(`Approval needed: ${result.reason}`);
|
|
367
|
+
* }
|
|
368
|
+
* ```
|
|
369
|
+
*/
|
|
370
|
+
export function needsApproval(
|
|
371
|
+
toolName: string,
|
|
372
|
+
args: unknown,
|
|
373
|
+
rules?: ApprovalRule[],
|
|
374
|
+
): {
|
|
375
|
+
required: boolean;
|
|
376
|
+
reason: string;
|
|
377
|
+
priority?: ApprovalRequest['priority'];
|
|
378
|
+
context?: Record<string, unknown>;
|
|
379
|
+
} {
|
|
380
|
+
if (!rules || rules.length === 0) {
|
|
381
|
+
return { required: false, reason: 'No approval rules defined' };
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
for (const rule of rules) {
|
|
385
|
+
const matches = matchPattern(toolName, rule.toolPattern);
|
|
386
|
+
if (!matches) continue;
|
|
387
|
+
|
|
388
|
+
// Check condition if provided
|
|
389
|
+
if (rule.condition && !rule.condition(args)) {
|
|
390
|
+
continue;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Tool matches this rule
|
|
394
|
+
const reason =
|
|
395
|
+
typeof rule.reason === 'function'
|
|
396
|
+
? rule.reason(args)
|
|
397
|
+
: rule.reason || `Tool '${toolName}' requires approval`;
|
|
398
|
+
|
|
399
|
+
return {
|
|
400
|
+
required: true,
|
|
401
|
+
reason,
|
|
402
|
+
priority: rule.priority,
|
|
403
|
+
context: { toolName, argsPreview: JSON.stringify(args).substring(0, 200) },
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return { required: false, reason: 'No matching approval rules' };
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Create an approval queue with in-memory backend
|
|
412
|
+
*
|
|
413
|
+
* @param options - Queue options
|
|
414
|
+
* @returns ApprovalQueue instance
|
|
415
|
+
*
|
|
416
|
+
* @example
|
|
417
|
+
* ```typescript
|
|
418
|
+
* const queue = createApprovalQueue();
|
|
419
|
+
*
|
|
420
|
+
* // Add request
|
|
421
|
+
* await queue.enqueue(request);
|
|
422
|
+
*
|
|
423
|
+
* // Process requests
|
|
424
|
+
* const pending = await queue.listPending();
|
|
425
|
+
* ```
|
|
426
|
+
*/
|
|
427
|
+
export function createApprovalQueue(options?: { enableLogging?: boolean }): ApprovalQueue {
|
|
428
|
+
const backend = createInMemoryBackend();
|
|
429
|
+
return createQueueFromBackend(backend, options);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Create approval queue with Redis backend
|
|
434
|
+
*
|
|
435
|
+
* @param redisClient - Redis client instance
|
|
436
|
+
* @param options - Queue options
|
|
437
|
+
* @returns ApprovalQueue instance
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
440
|
+
* ```typescript
|
|
441
|
+
* const redis = new Redis();
|
|
442
|
+
* const queue = createApprovalQueueWithRedis(redis);
|
|
443
|
+
* ```
|
|
444
|
+
*/
|
|
445
|
+
export async function createApprovalQueueWithRedis(
|
|
446
|
+
redisClient: RedisClient,
|
|
447
|
+
options?: {
|
|
448
|
+
keyPrefix?: string;
|
|
449
|
+
enableLogging?: boolean;
|
|
450
|
+
},
|
|
451
|
+
): Promise<ApprovalQueue> {
|
|
452
|
+
const backend = createRedisBackend(redisClient, options?.keyPrefix || 'approval:');
|
|
453
|
+
return createQueueFromBackend(backend, options);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Create a basic approval handler (stub for user implementation)
|
|
458
|
+
*
|
|
459
|
+
* @param implementation - Custom implementation
|
|
460
|
+
* @returns ApprovalHandler
|
|
461
|
+
*
|
|
462
|
+
* @example
|
|
463
|
+
* ```typescript
|
|
464
|
+
* const handler = createApprovalHandler({
|
|
465
|
+
* requestApproval: async (request) => {
|
|
466
|
+
* // Notify user via email/Slack/etc
|
|
467
|
+
* await notifyUser(request);
|
|
468
|
+
* // Wait for approval...
|
|
469
|
+
* return { approved: true, approvedBy: 'user@example.com' };
|
|
470
|
+
* }
|
|
471
|
+
* });
|
|
472
|
+
* ```
|
|
473
|
+
*/
|
|
474
|
+
export function createApprovalHandler(implementation: Partial<ApprovalHandler>): ApprovalHandler {
|
|
475
|
+
return {
|
|
476
|
+
requestApproval: implementation.requestApproval || (async () => ({ approved: false })),
|
|
477
|
+
notifyApproval: implementation.notifyApproval || (async () => {}),
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Create approval middleware for intercepting tool calls
|
|
483
|
+
*
|
|
484
|
+
* @param options - Middleware options
|
|
485
|
+
* @returns Middleware function
|
|
486
|
+
*
|
|
487
|
+
* @example
|
|
488
|
+
* ```typescript
|
|
489
|
+
* const middleware = createApprovalMiddleware({
|
|
490
|
+
* rules: approvalRules,
|
|
491
|
+
* handler: approvalHandler,
|
|
492
|
+
* enableLogging: true
|
|
493
|
+
* });
|
|
494
|
+
*
|
|
495
|
+
* // Use in your tool execution pipeline
|
|
496
|
+
* tools = tools.map(tool => middleware(tool));
|
|
497
|
+
* ```
|
|
498
|
+
*/
|
|
499
|
+
export function createApprovalMiddleware(options: ApprovalOptions) {
|
|
500
|
+
return function approvalMiddleware<T>(tool: Tool<T>): Tool<T> {
|
|
501
|
+
return withApproval(tool, options);
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// ============================================================================
|
|
506
|
+
// INTERNAL HELPER FUNCTIONS
|
|
507
|
+
// ============================================================================
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Generate a unique approval request ID
|
|
511
|
+
*/
|
|
512
|
+
function generateRequestId(): string {
|
|
513
|
+
return `apr_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Match tool name against pattern (supports wildcards)
|
|
518
|
+
*/
|
|
519
|
+
function matchPattern(toolName: string, pattern: string | RegExp): boolean {
|
|
520
|
+
if (pattern instanceof RegExp) {
|
|
521
|
+
return pattern.test(toolName);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// Convert wildcard pattern to regex
|
|
525
|
+
const regexPattern = pattern.replace(/\./g, '\\.').replace(/\*/g, '.*').replace(/\?/g, '.');
|
|
526
|
+
|
|
527
|
+
return new RegExp(`^${regexPattern}$`).test(toolName);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* Create in-memory backend for approval queue
|
|
532
|
+
*/
|
|
533
|
+
function createInMemoryBackend(): ApprovalBackend {
|
|
534
|
+
const requests = new Map<string, ApprovalRequest>();
|
|
535
|
+
const results = new Map<string, ApprovalResult>();
|
|
536
|
+
|
|
537
|
+
return {
|
|
538
|
+
async store(request: ApprovalRequest): Promise<void> {
|
|
539
|
+
requests.set(request.id, { ...request });
|
|
540
|
+
},
|
|
541
|
+
|
|
542
|
+
async get(requestId: string): Promise<ApprovalRequest | null> {
|
|
543
|
+
return requests.get(requestId) || null;
|
|
544
|
+
},
|
|
545
|
+
|
|
546
|
+
async listPending(): Promise<ApprovalRequest[]> {
|
|
547
|
+
return Array.from(requests.values()).filter(r => r.status === 'pending');
|
|
548
|
+
},
|
|
549
|
+
|
|
550
|
+
async updateStatus(requestId: string, status: ApprovalRequest['status']): Promise<void> {
|
|
551
|
+
const request = requests.get(requestId);
|
|
552
|
+
if (request) {
|
|
553
|
+
request.status = status;
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
|
|
557
|
+
async delete(requestId: string): Promise<void> {
|
|
558
|
+
requests.delete(requestId);
|
|
559
|
+
results.delete(requestId);
|
|
560
|
+
},
|
|
561
|
+
|
|
562
|
+
async clearExpired(): Promise<number> {
|
|
563
|
+
const now = new Date();
|
|
564
|
+
let count = 0;
|
|
565
|
+
|
|
566
|
+
for (const [id, request] of requests.entries()) {
|
|
567
|
+
if (request.expiresAt && request.expiresAt < now) {
|
|
568
|
+
requests.delete(id);
|
|
569
|
+
count += 1;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
return count;
|
|
574
|
+
},
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Create Redis backend for approval queue
|
|
580
|
+
*/
|
|
581
|
+
function createRedisBackend(redisClient: RedisClient, keyPrefix: string): ApprovalBackend {
|
|
582
|
+
return {
|
|
583
|
+
async store(request: ApprovalRequest): Promise<void> {
|
|
584
|
+
const key = `${keyPrefix}${request.id}`;
|
|
585
|
+
await redisClient.set(key, JSON.stringify(request), 'EX', 86400); // 24h TTL
|
|
586
|
+
},
|
|
587
|
+
|
|
588
|
+
async get(requestId: string): Promise<ApprovalRequest | null> {
|
|
589
|
+
const key = `${keyPrefix}${requestId}`;
|
|
590
|
+
const data = await redisClient.get(key);
|
|
591
|
+
return data ? JSON.parse(data) : null;
|
|
592
|
+
},
|
|
593
|
+
|
|
594
|
+
async listPending(): Promise<ApprovalRequest[]> {
|
|
595
|
+
const pattern = `${keyPrefix}*`;
|
|
596
|
+
const keys = await redisClient.keys(pattern);
|
|
597
|
+
const requests: ApprovalRequest[] = [];
|
|
598
|
+
|
|
599
|
+
for (const key of keys) {
|
|
600
|
+
const data = await redisClient.get(key);
|
|
601
|
+
if (data) {
|
|
602
|
+
const request = JSON.parse(data);
|
|
603
|
+
if (request.status === 'pending') {
|
|
604
|
+
requests.push(request);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
return requests;
|
|
610
|
+
},
|
|
611
|
+
|
|
612
|
+
async updateStatus(requestId: string, status: ApprovalRequest['status']): Promise<void> {
|
|
613
|
+
const key = `${keyPrefix}${requestId}`;
|
|
614
|
+
const data = await redisClient.get(key);
|
|
615
|
+
if (data) {
|
|
616
|
+
const request = JSON.parse(data);
|
|
617
|
+
request.status = status;
|
|
618
|
+
await redisClient.set(key, JSON.stringify(request), 'EX', 86400);
|
|
619
|
+
}
|
|
620
|
+
},
|
|
621
|
+
|
|
622
|
+
async delete(requestId: string): Promise<void> {
|
|
623
|
+
const key = `${keyPrefix}${requestId}`;
|
|
624
|
+
await redisClient.del(key);
|
|
625
|
+
},
|
|
626
|
+
|
|
627
|
+
async clearExpired(): Promise<number> {
|
|
628
|
+
// Redis TTL handles expiration, return 0
|
|
629
|
+
return 0;
|
|
630
|
+
},
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* Create queue from backend
|
|
636
|
+
*/
|
|
637
|
+
function createQueueFromBackend(
|
|
638
|
+
backend: ApprovalBackend,
|
|
639
|
+
options?: { enableLogging?: boolean },
|
|
640
|
+
): ApprovalQueue {
|
|
641
|
+
const logger = options?.enableLogging ? logInfo : () => {};
|
|
642
|
+
const processedRequests = new Map<string, ApprovalResult>();
|
|
643
|
+
|
|
644
|
+
return {
|
|
645
|
+
async enqueue(request: ApprovalRequest): Promise<void> {
|
|
646
|
+
logger(`[Queue] Enqueuing request ${request.id}`);
|
|
647
|
+
await backend.store(request);
|
|
648
|
+
},
|
|
649
|
+
|
|
650
|
+
async dequeue(): Promise<ApprovalRequest | null> {
|
|
651
|
+
const pending = await backend.listPending();
|
|
652
|
+
if (pending.length === 0) return null;
|
|
653
|
+
|
|
654
|
+
// Sort by priority (critical > high > normal > low) and requestedAt
|
|
655
|
+
pending.sort((a, b) => {
|
|
656
|
+
const priorityOrder: Record<string, number> = {
|
|
657
|
+
critical: 0,
|
|
658
|
+
high: 1,
|
|
659
|
+
normal: 2,
|
|
660
|
+
low: 3,
|
|
661
|
+
};
|
|
662
|
+
const defaultPriority = priorityOrder.normal ?? 2;
|
|
663
|
+
const aPriority = priorityOrder[a.priority ?? 'normal'];
|
|
664
|
+
const bPriority = priorityOrder[b.priority ?? 'normal'];
|
|
665
|
+
const aValue = typeof aPriority === 'number' ? aPriority : defaultPriority;
|
|
666
|
+
const bValue = typeof bPriority === 'number' ? bPriority : defaultPriority;
|
|
667
|
+
|
|
668
|
+
if (aValue !== bValue) return aValue - bValue;
|
|
669
|
+
return a.requestedAt.getTime() - b.requestedAt.getTime();
|
|
670
|
+
});
|
|
671
|
+
|
|
672
|
+
return pending[0] ?? null;
|
|
673
|
+
},
|
|
674
|
+
|
|
675
|
+
async get(requestId: string): Promise<ApprovalRequest | null> {
|
|
676
|
+
return backend.get(requestId);
|
|
677
|
+
},
|
|
678
|
+
|
|
679
|
+
async listPending(limit = 100, offset = 0): Promise<ApprovalRequest[]> {
|
|
680
|
+
const pending = await backend.listPending();
|
|
681
|
+
return pending.slice(offset, offset + limit);
|
|
682
|
+
},
|
|
683
|
+
|
|
684
|
+
async updateStatus(
|
|
685
|
+
requestId: string,
|
|
686
|
+
status: ApprovalRequest['status'],
|
|
687
|
+
result?: ApprovalResult,
|
|
688
|
+
): Promise<void> {
|
|
689
|
+
await backend.updateStatus(requestId, status);
|
|
690
|
+
if (result) {
|
|
691
|
+
processedRequests.set(requestId, result);
|
|
692
|
+
}
|
|
693
|
+
},
|
|
694
|
+
|
|
695
|
+
async remove(requestId: string): Promise<void> {
|
|
696
|
+
await backend.delete(requestId);
|
|
697
|
+
processedRequests.delete(requestId);
|
|
698
|
+
},
|
|
699
|
+
|
|
700
|
+
async getStats(): Promise<QueueStats> {
|
|
701
|
+
const pending = await backend.listPending();
|
|
702
|
+
const byPriority: Record<string, number> = {
|
|
703
|
+
critical: 0,
|
|
704
|
+
high: 0,
|
|
705
|
+
normal: 0,
|
|
706
|
+
low: 0,
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
let oldestTime = Date.now();
|
|
710
|
+
for (const req of pending) {
|
|
711
|
+
const priority = req.priority ?? 'normal';
|
|
712
|
+
const key = priority in byPriority ? priority : 'normal';
|
|
713
|
+
byPriority[key] = (byPriority[key] ?? 0) + 1;
|
|
714
|
+
oldestTime = Math.min(oldestTime, req.requestedAt.getTime());
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
const oldestRequestAgeMs = pending.length > 0 ? Date.now() - oldestTime : undefined;
|
|
718
|
+
const totalProcessed = processedRequests.size;
|
|
719
|
+
const approvalRate =
|
|
720
|
+
totalProcessed > 0
|
|
721
|
+
? Array.from(processedRequests.values()).filter(r => r.approved).length / totalProcessed
|
|
722
|
+
: 0;
|
|
723
|
+
|
|
724
|
+
return {
|
|
725
|
+
totalPending: pending.length,
|
|
726
|
+
byPriority,
|
|
727
|
+
oldestRequestAgeMs,
|
|
728
|
+
totalProcessed,
|
|
729
|
+
approvalRate,
|
|
730
|
+
};
|
|
731
|
+
},
|
|
732
|
+
|
|
733
|
+
async clearExpired(): Promise<number> {
|
|
734
|
+
return backend.clearExpired();
|
|
735
|
+
},
|
|
736
|
+
};
|
|
737
|
+
}
|