@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 @@
|
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["jsonError","DEFAULT_CONFIG","normalizeError"],"sources":["../src/server/routes/health-check.ts","../src/server/messages/extraction.ts","../src/server/routes/agent-routes.ts","../src/server/messages/converter.ts","../src/server/messages/data-parts.ts","../src/server/messages/window.ts","../src/server/helpers.ts","../src/server/error-handler.ts","../src/server/http.ts"],"sourcesContent":["/**\n * Health Check Endpoint Implementation\n * Production health check endpoint for deployment verification, monitoring, and load balancer integration\n * Based on VERCEL_AI_SDK_V6_PATTERNS.md section 5.7\n */\n\nimport type {\n HealthCheckConfig,\n HealthCheckResult,\n HealthChecks,\n ComponentHealth,\n DatabaseHealth,\n RedisHealth,\n AIProviderHealth,\n MemoryHealth,\n ServiceStatus,\n RequestHandler,\n HealthCheckMiddlewareOptions,\n} from './health-check.types';\n\ntype NodeRequest = {\n path?: string;\n url?: string;\n};\n\ntype NodeResponse = {\n setHeader: (name: string, value: string) => void;\n status: (code: number) => { json: (body: unknown) => void };\n};\n\ntype NextHandler = (req: Request) => Promise<Response>;\n\n/**\n * Check database connectivity\n */\nasync function checkDatabase(\n config: HealthCheckConfig,\n timeoutMs: number,\n): Promise<DatabaseHealth> {\n if (config.enableDatabase === false) {\n return {\n connected: true,\n status: 'up',\n };\n }\n\n const databaseUrl = config.databaseUrl || process.env.DATABASE_URL || process.env.POSTGRES_URL;\n\n if (!databaseUrl) {\n return {\n connected: false,\n status: 'down',\n error: 'DATABASE_URL not configured',\n };\n }\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n // Try to connect using native fetch or standard connection methods\n // This is a generic implementation - adapt based on your actual database\n const startTime = Date.now();\n\n // For PostgreSQL using postgres client\n try {\n // Dynamic import so this package can compile without postgres installed.\n // When `postgres` is available at runtime we use it; otherwise this branch throws.\n const postgresModuleId: string = 'postgres';\n const postgresModule = (await import(postgresModuleId)) as unknown;\n const postgresDefault =\n postgresModule && typeof postgresModule === 'object' && 'default' in postgresModule\n ? (postgresModule as { default: unknown }).default\n : undefined;\n\n if (typeof postgresDefault !== 'function') {\n throw new Error('postgres module is unavailable');\n }\n\n type PostgresClient = {\n (strings: TemplateStringsArray, ...values: unknown[]): Promise<unknown>;\n end: () => Promise<void>;\n };\n\n type PostgresFactory = (\n connectionString: string,\n options: Record<string, unknown>,\n ) => PostgresClient;\n\n const client = (postgresDefault as PostgresFactory)(databaseUrl, {\n prepare: false,\n max: 1,\n idle_timeout: 3,\n });\n\n await Promise.race([\n client`SELECT 1`,\n new Promise((resolve, reject) => {\n void resolve;\n setTimeout(() => reject(new Error('Timeout')), timeoutMs);\n }),\n ]);\n\n await client.end();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Database connection failed: ${errorMessage}`);\n }\n\n const latency = Date.now() - startTime;\n clearTimeout(timeout);\n\n return {\n connected: true,\n status: 'up',\n latency,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n connected: false,\n status: 'down',\n error: config.includeSensitiveDetails ? errorMessage : 'Connection failed',\n };\n }\n}\n\n/**\n * Check Redis connectivity\n */\nasync function checkRedis(config: HealthCheckConfig, timeoutMs: number): Promise<RedisHealth> {\n if (config.enableRedis === false) {\n return {\n connected: true,\n status: 'up',\n };\n }\n\n const redisUrl = config.redisUrl || process.env.REDIS_URL;\n\n if (!redisUrl) {\n return {\n connected: true,\n status: 'up',\n // Redis is optional, not an error\n };\n }\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n const startTime = Date.now();\n\n try {\n // Dynamic import so this package can compile without redis installed.\n // When `redis` is available at runtime we use it; otherwise we fall back to fetch.\n const redisModuleId: string = 'redis';\n const redisModule = (await import(redisModuleId)) as unknown;\n const createClient =\n redisModule && typeof redisModule === 'object' && 'createClient' in redisModule\n ? (redisModule as { createClient: unknown }).createClient\n : undefined;\n\n if (typeof createClient !== 'function') {\n throw new Error('redis module is unavailable');\n }\n\n type RedisClient = {\n connect: () => Promise<void>;\n ping: () => Promise<unknown>;\n close: () => Promise<void>;\n };\n\n const redisClient = (\n createClient as (options: {\n url: string;\n socket: { reconnectStrategy: () => false };\n }) => RedisClient\n )({\n url: redisUrl,\n socket: { reconnectStrategy: () => false },\n });\n\n await Promise.race([\n redisClient.connect().then(() => redisClient.ping()),\n new Promise((resolve, reject) => {\n void resolve;\n setTimeout(() => reject(new Error('Timeout')), timeoutMs);\n }),\n ]);\n\n await redisClient.close();\n } catch {\n // Fallback for other Redis clients or connection methods\n const response = await Promise.race([\n fetch(redisUrl, { signal: controller.signal }),\n new Promise((resolve, reject) => {\n void resolve;\n setTimeout(() => reject(new Error('Timeout')), timeoutMs);\n }),\n ]);\n\n if (!response || (response as Response).status >= 400) {\n throw new Error('Redis connection failed');\n }\n }\n\n const latency = Date.now() - startTime;\n clearTimeout(timeout);\n\n return {\n connected: true,\n status: 'up',\n latency,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n connected: false,\n status: 'down',\n error: config.includeSensitiveDetails ? errorMessage : 'Connection failed',\n };\n }\n}\n\n/**\n * Check AI provider availability\n */\nasync function checkAIProvider(\n config: HealthCheckConfig,\n timeoutMs: number,\n): Promise<AIProviderHealth> {\n if (config.enableAIProvider === false) {\n return {\n available: true,\n status: 'up',\n };\n }\n\n try {\n const startTime = Date.now();\n\n // Quick test with multiple providers\n const providers = {\n openai: true,\n anthropic: true,\n gemini: true,\n };\n\n if (config.enableAIProviderTest) {\n try {\n // Try importing and testing AI SDK - this is a minimal test\n // In production, you'd want to test actual model availability\n const { generateText } = await import('ai');\n const { openai } = await import('@ai-sdk/openai');\n\n // Set up timeout for the test\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n // Test with a minimal request to verify connectivity\n // This is a mock test - adapt based on your actual provider setup\n await Promise.race([\n generateText({\n model: openai('gpt-4o-mini'),\n prompt: 'health',\n maxOutputTokens: 1,\n abortSignal: controller.signal,\n }).catch(() => {\n // Provider test failure is ok for health check\n // We're just checking connectivity\n return null;\n }),\n new Promise((resolve, reject) => {\n void resolve;\n setTimeout(() => reject(new Error('Timeout')), timeoutMs);\n }),\n ]);\n } finally {\n clearTimeout(timeout);\n }\n } catch {\n // AI SDK not available or test failed\n // This is acceptable for health check\n }\n }\n\n const latency = Date.now() - startTime;\n\n return {\n available: true,\n status: 'up',\n providers,\n latency,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n available: false,\n status: 'down',\n error: config.includeSensitiveDetails ? errorMessage : 'Provider check failed',\n };\n }\n}\n\n/**\n * Check system memory usage\n */\nfunction checkMemory(config: HealthCheckConfig): MemoryHealth {\n if (config.enableMemory === false) {\n return {\n heapUsed: 0,\n heapTotal: 0,\n external: 0,\n rss: 0,\n heapUsedPercent: 0,\n status: 'ok',\n };\n }\n\n const memUsage = process.memoryUsage();\n const heapUsedPercent = (memUsage.heapUsed / memUsage.heapTotal) * 100;\n\n const warningThreshold = config.memoryWarningThreshold ?? 80;\n const criticalThreshold = config.memoryCriticalThreshold ?? 90;\n\n let status: 'ok' | 'warning' | 'critical' = 'ok';\n if (heapUsedPercent >= criticalThreshold) {\n status = 'critical';\n } else if (heapUsedPercent >= warningThreshold) {\n status = 'warning';\n }\n\n return {\n heapUsed: Math.round(memUsage.heapUsed),\n heapTotal: Math.round(memUsage.heapTotal),\n external: Math.round(memUsage.external),\n rss: Math.round(memUsage.rss),\n heapUsedPercent: Math.round(heapUsedPercent * 100) / 100,\n status,\n };\n}\n\n/**\n * Determine overall service status based on component health\n */\nfunction determineStatus(\n database: DatabaseHealth | undefined,\n redis: RedisHealth | undefined,\n aiProvider: AIProviderHealth | undefined,\n memory: MemoryHealth | undefined,\n): ServiceStatus {\n // Critical: Database down\n if (database && !database.connected) {\n return 'unhealthy';\n }\n\n // Degraded: Redis or AI provider down (non-critical)\n if ((redis && !redis.connected) || (aiProvider && !aiProvider.available)) {\n return 'degraded';\n }\n\n // Degraded: High memory usage\n if (memory?.status === 'critical') {\n return 'degraded';\n }\n\n return 'healthy';\n}\n\n/**\n * Execute custom health checks\n */\nasync function executeCustomChecks(\n customChecks: Array<{ name: string; check: () => Promise<unknown> }>,\n timeoutMs: number,\n): Promise<HealthChecks> {\n const results: HealthChecks = {};\n\n for (const customCheck of customChecks) {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n const result = await Promise.race([\n customCheck.check(),\n new Promise((resolve, reject) => {\n void resolve;\n setTimeout(() => reject(new Error('Timeout')), timeoutMs);\n }),\n ]);\n results[customCheck.name] = normalizeCustomCheckResult(result);\n\n clearTimeout(timeout);\n } catch (error) {\n results[customCheck.name] = {\n status: 'down',\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return results;\n}\n\nfunction normalizeCustomCheckResult(value: unknown): ComponentHealth {\n if (typeof value === 'object' && value !== null) {\n return value as ComponentHealth;\n }\n\n return {\n status: 'down',\n error: 'Custom check returned invalid result',\n };\n}\n\n/**\n * Main health check function\n * Performs comprehensive health checks on all configured dependencies\n *\n * @param config - Health check configuration\n * @returns Promise<HealthCheckResult> - Comprehensive health check result\n */\nexport async function checkHealth(config: HealthCheckConfig): Promise<HealthCheckResult> {\n const startTime = Date.now();\n const timeoutMs = config.checkTimeoutMs ?? 2000;\n const version = config.version ?? process.env.npm_package_version ?? '1.0.0';\n const environment = process.env.NODE_ENV ?? 'development';\n\n // Run all checks in parallel\n const [database, redis, aiProvider, memory] = await Promise.all([\n config.enableDatabase !== false ? checkDatabase(config, timeoutMs) : Promise.resolve(undefined),\n config.enableRedis !== false ? checkRedis(config, timeoutMs) : Promise.resolve(undefined),\n config.enableAIProvider !== false\n ? checkAIProvider(config, timeoutMs)\n : Promise.resolve(undefined),\n config.enableMemory !== false ? checkMemory(config) : Promise.resolve(undefined),\n ]);\n\n // Execute custom checks if provided\n let customChecksResults: HealthChecks = {};\n if (config.customChecks && config.customChecks.length > 0) {\n customChecksResults = await executeCustomChecks(config.customChecks, timeoutMs);\n }\n\n // Build results\n const checks: HealthChecks = {};\n\n if (database !== undefined) {\n checks.database = database;\n }\n\n if (redis !== undefined) {\n checks.redis = redis;\n }\n\n if (aiProvider !== undefined) {\n checks.aiProvider = aiProvider;\n }\n\n if (memory !== undefined) {\n checks.memory = memory;\n }\n\n // Add custom check results\n Object.assign(checks, customChecksResults);\n\n // Determine overall status\n const status = determineStatus(database, redis, aiProvider, memory);\n\n // Calculate response time\n const responseTime = Date.now() - startTime;\n\n const result: HealthCheckResult = {\n status,\n timestamp: new Date().toISOString(),\n version,\n environment,\n uptime: process.uptime(),\n responseTime,\n checks,\n };\n\n return result;\n}\n\n/**\n * Create a health check request handler\n * Returns a function compatible with Express, Next.js, or other Node.js frameworks\n *\n * @param config - Health check configuration\n * @returns RequestHandler function\n *\n * @example\n * // Express\n * app.get('/health', createHealthCheckHandler({ enableDatabase: true }));\n *\n * // Next.js Route Handler\n * export const GET = createHealthCheckHandler({ enableDatabase: true });\n */\nexport function createHealthCheckHandler(\n config: HealthCheckConfig,\n): RequestHandler<NodeRequest, NodeResponse> {\n return async (req: NodeRequest, res: NodeResponse) => {\n void req;\n try {\n const result = await checkHealth(config);\n\n // Determine HTTP status code\n const statusCode = result.status === 'unhealthy' ? 503 : 200;\n\n // Set response headers\n res.setHeader('Content-Type', 'application/json');\n res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');\n\n // Send response\n res.status(statusCode).json(result);\n } catch (error) {\n // Fallback error response\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n res.setHeader('Content-Type', 'application/json');\n res.status(503).json({\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n error: config.includeSensitiveDetails ? errorMessage : 'Health check failed',\n version: config.version ?? process.env.npm_package_version ?? '1.0.0',\n environment: process.env.NODE_ENV ?? 'development',\n });\n }\n };\n}\n\n/**\n * Create a health check handler for Next.js 13+ Route Handlers\n * Returns NextResponse compatible handler\n *\n * @param config - Health check configuration\n * @returns Handler function for Next.js Route Handlers\n *\n * @example\n * // app/api/health/route.ts\n * export const GET = createNextHealthCheckHandler({ enableDatabase: true });\n */\nexport function createNextHealthCheckHandler(config: HealthCheckConfig) {\n const handler: NextHandler = async () => {\n try {\n const result = await checkHealth(config);\n const statusCode = result.status === 'unhealthy' ? 503 : 200;\n\n return new Response(JSON.stringify(result), {\n status: statusCode,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n return new Response(\n JSON.stringify({\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n error: config.includeSensitiveDetails ? errorMessage : 'Health check failed',\n version: config.version ?? process.env.npm_package_version ?? '1.0.0',\n environment: process.env.NODE_ENV ?? 'development',\n }),\n { status: 503, headers: { 'Content-Type': 'application/json' } },\n );\n }\n };\n\n return handler;\n}\n\n/**\n * Express middleware factory for health check endpoint\n *\n * @param config - Health check configuration\n * @returns Express middleware function\n *\n * @example\n * import express from 'express';\n * import { createHealthCheckMiddleware } from './health-check';\n *\n * const app = express();\n * app.use(createHealthCheckMiddleware({ enableDatabase: true }));\n */\nexport function createHealthCheckMiddleware(config: HealthCheckMiddlewareOptions) {\n let cachedResult: HealthCheckResult | null = null;\n let cacheTime = 0;\n const cacheDuration = config.cacheDurationMs ?? 0;\n\n return async (req: NodeRequest, res: NodeResponse, next: (error?: unknown) => void) => {\n // Only handle health check path\n if (!req.path?.endsWith('/health') && !req.url?.endsWith('/health')) {\n return next?.();\n }\n\n try {\n // Check cache\n if (cachedResult && cacheDuration > 0) {\n const now = Date.now();\n if (now - cacheTime < cacheDuration) {\n const statusCode = cachedResult.status === 'unhealthy' ? 503 : 200;\n return res.status(statusCode).json(cachedResult);\n }\n }\n\n const result = await checkHealth(config);\n\n // Cache result if caching is enabled\n if (cacheDuration > 0) {\n cachedResult = result;\n cacheTime = Date.now();\n }\n\n const statusCode = result.status === 'unhealthy' ? 503 : 200;\n\n res.setHeader('Content-Type', 'application/json');\n res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');\n\n res.status(statusCode).json(result);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n res.setHeader('Content-Type', 'application/json');\n res.status(503).json({\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n error: config.includeSensitiveDetails ? errorMessage : 'Health check failed',\n version: config.version ?? process.env.npm_package_version ?? '1.0.0',\n environment: process.env.NODE_ENV ?? 'development',\n });\n }\n };\n}\n\nexport default checkHealth;\n","/**\n * @fileoverview Message extraction and session utilities migrated from @repo/ai.\n *\n * Provides functions for extracting content from UI messages, validating messages,\n * session initialization, and message persistence helpers.\n *\n * @module @od-oneapp/ai-platform/server/messages/extraction\n */\n\nimport { generateId } from '../../shared';\n\nimport type { SDKUIMessage, JSONValue } from '../../shared';\n\n// =============================================================================\n// Local types for message part introspection\n// =============================================================================\n\n/** Minimal part shape used for extraction type guards. */\ninterface MessagePartLike {\n type?: string;\n text?: string;\n name?: string;\n url?: string;\n mimeType?: string;\n state?: string;\n}\n\n/** File attachment extracted from a UIMessage. */\nexport interface ExtractedFilePart {\n readonly type: 'file';\n readonly name: string;\n readonly url: string;\n readonly mimeType: string;\n readonly size?: number;\n}\n\n// =============================================================================\n// Session Types\n// =============================================================================\n\n/** Initializes or retrieves a session, returning its ID and newness flag. */\nexport type InitializeSessionFn = (\n sessionId?: string,\n) => Promise<{ sessionId: string; isNew: boolean }>;\n\n/** Persists a message to storage for a given session. */\nexport type PersistMessageFn = (\n sessionId: string,\n content: string,\n options?: { autoTitle?: boolean },\n) => Promise<void>;\n\n/** Sets up a resumable stream for a given response and session. */\nexport type SetupResumableStreamFn = (response: Response, sessionId: string) => Promise<void>;\n\n// =============================================================================\n// Message Extraction Functions\n// =============================================================================\n\n/**\n * Extract text content from a UIMessage by joining all text parts.\n *\n * @param message - UI message to extract text from\n * @returns Concatenated text from all text parts, or empty string\n *\n * @example\n * ```ts\n * const text = extractTextContent(message);\n * ```\n */\nexport function extractTextContent(message: SDKUIMessage): string {\n if (!message.parts) return '';\n\n return message.parts\n .filter((part): part is { type: 'text'; text: string } => {\n const p = part as MessagePartLike;\n return p.type === 'text' && 'text' in part;\n })\n .map(part => part.text)\n .join('\\n');\n}\n\n/**\n * Extract file attachments from a UIMessage.\n *\n * @param message - UI message to extract files from\n * @returns Array of extracted file parts\n *\n * @example\n * ```ts\n * const files = extractFileAttachments(message);\n * ```\n */\nexport function extractFileAttachments(message: SDKUIMessage): ExtractedFilePart[] {\n if (!message.parts) return [];\n\n return message.parts.filter(part => {\n const p = part as MessagePartLike;\n return p.type === 'file' && 'name' in part && 'url' in part && 'mimeType' in part;\n }) as unknown as ExtractedFilePart[];\n}\n\n/**\n * Find the last user message in an array of messages.\n *\n * @param messages - Array of UIMessage objects\n * @returns The last user message or null if none found\n *\n * @example\n * ```ts\n * const lastUser = getLastUserMessage(messages);\n * if (lastUser) {\n * console.log(extractTextContent(lastUser));\n * }\n * ```\n */\nexport function getLastUserMessage(messages: SDKUIMessage[]): SDKUIMessage | null {\n return messages.findLast(message => message.role === 'user') ?? null;\n}\n\n/**\n * Basic message validator for UIMessage arrays.\n *\n * @param messages - Unknown value to validate\n * @returns Type guard confirming the value is a UIMessage array\n */\nexport function defaultValidateMessages(messages: unknown): messages is SDKUIMessage[] {\n return Array.isArray(messages);\n}\n\n/**\n * Extract text from a UIMessage that may contain parts or plain content.\n *\n * @param message - UI message to extract text from\n * @returns Plain text string from the message\n */\nexport function defaultGetMessageText(message: SDKUIMessage): string {\n if ('content' in message && typeof (message as { content?: unknown }).content === 'string') {\n return (message as { content: string }).content;\n }\n\n if ('parts' in message && Array.isArray((message as { parts?: JSONValue[] }).parts)) {\n return (message as { parts: Array<{ type: string; text?: string }> }).parts\n .filter(\n (p): p is { type: 'text'; text: string } => p.type === 'text' && typeof p.text === 'string',\n )\n .map(p => p.text)\n .join('');\n }\n\n return '';\n}\n\n// =============================================================================\n// Session Helpers\n// =============================================================================\n\n/**\n * Minimal default session initializer using in-memory IDs.\n * Consumers can override with database-backed implementations.\n */\nexport const inMemoryInitializeSession: InitializeSessionFn = async sessionId => ({\n sessionId: sessionId ?? generateId(),\n isNew: !sessionId,\n});\n\n/** No-op persistence helper for environments without storage. */\nexport const noopPersistMessage: PersistMessageFn = async () => {};\n\n/** No-op resumable stream helper for environments without resumption support. */\nexport const noopSetupResumableStream: SetupResumableStreamFn = async () => {};\n\n// =============================================================================\n// Reasoning & Finish Event Utilities\n// =============================================================================\n\n/**\n * Extract reasoning text from a finish event.\n * Handles both array and string formats for reasoning.\n *\n * @param finishEvent - Finish event from streamText/generateText\n * @returns Reasoning text string or undefined\n *\n * @example\n * ```ts\n * const reasoning = extractReasoningText(event);\n * if (reasoning) {\n * console.log('Model reasoning:', reasoning);\n * }\n * ```\n */\nexport function extractReasoningText(finishEvent: {\n reasoning?: Array<{ text?: string }> | string;\n}): string | undefined {\n if (!finishEvent.reasoning) return undefined;\n\n if (Array.isArray(finishEvent.reasoning)) {\n return finishEvent.reasoning.map((r: { text?: string }) => r?.text ?? '').join('');\n }\n\n if (typeof finishEvent.reasoning === 'string') {\n return finishEvent.reasoning;\n }\n\n return undefined;\n}\n\n/**\n * Build UI message parts from AI SDK finish event.\n * Extracts text, reasoning, tool calls, and tool results from the finish event.\n *\n * @param finishEvent - Finish event from streamText/generateText\n * @returns Array of UI message parts\n */\nexport function buildUIMessagePartsFromFinishEvent(finishEvent: {\n text?: string;\n reasoning?: Array<{ text?: string }> | string;\n toolCalls?: Array<{\n toolCallId: string;\n toolName: string;\n args?: unknown;\n input?: unknown;\n }>;\n toolResults?: Array<{\n toolCallId: string;\n toolName: string;\n result?: unknown;\n output?: unknown;\n }>;\n}): Array<{\n type: string;\n text?: string;\n toolCallId?: string;\n toolName?: string;\n args?: unknown;\n result?: unknown;\n}> {\n const parts: Array<{\n type: string;\n text?: string;\n toolCallId?: string;\n toolName?: string;\n args?: unknown;\n result?: unknown;\n }> = [];\n\n // Add text part\n if (finishEvent.text) {\n parts.push({ type: 'text', text: finishEvent.text });\n }\n\n // Add reasoning if present\n if (finishEvent.reasoning && Array.isArray(finishEvent.reasoning)) {\n const reasoningText = finishEvent.reasoning\n .map((r: { text?: string }) => r?.text ?? '')\n .join('');\n if (reasoningText) {\n parts.push({ type: 'reasoning', text: reasoningText });\n }\n } else if (finishEvent.reasoning && typeof finishEvent.reasoning === 'string') {\n parts.push({ type: 'reasoning', text: finishEvent.reasoning });\n }\n\n // Add tool invocations as parts\n if (finishEvent.toolCalls && finishEvent.toolCalls.length > 0) {\n for (const tc of finishEvent.toolCalls) {\n const args = 'args' in tc ? tc.args : (tc as Record<string, unknown>).input;\n parts.push({\n type: 'tool-invocation',\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: args ?? {},\n });\n }\n }\n\n // Add tool results as parts\n if (finishEvent.toolResults && finishEvent.toolResults.length > 0) {\n for (const tr of finishEvent.toolResults) {\n const result = 'result' in tr ? tr.result : (tr as Record<string, unknown>).output;\n parts.push({\n type: 'tool-result',\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n result: result ?? null,\n });\n }\n }\n\n return parts;\n}\n\n/**\n * Map stored message to UI message format.\n * Converts database-stored message format to AI SDK UIMessage format.\n *\n * @param stored - Stored message from database\n * @returns UIMessage compatible with AI SDK\n */\nexport function mapStoredToUIMessage(stored: {\n id: string;\n role: string;\n parts?: JSONValue[];\n content?: string;\n}): SDKUIMessage {\n return {\n id: stored.id,\n role: stored.role as SDKUIMessage['role'],\n parts:\n Array.isArray(stored.parts) && stored.parts.length > 0\n ? (stored.parts as SDKUIMessage['parts'])\n : stored.content\n ? [{ type: 'text', text: stored.content }]\n : [],\n };\n}\n\n/**\n * Map array of stored messages to UI messages format.\n *\n * @param stored - Array of stored messages from database\n * @returns Array of UIMessage compatible with AI SDK\n */\nexport function mapStoredMessagesToUI(\n stored: Array<{ id: string; role: string; parts?: JSONValue[]; content?: string }>,\n): SDKUIMessage[] {\n return stored.map(mapStoredToUIMessage);\n}\n","/**\n * @fileoverview Agent route handler factory for Next.js/Fetch-compatible routes.\n *\n * Creates POST handlers that handle request parsing, session initialization,\n * user message persistence, agent execution, and optional stream resumption.\n *\n * Migrated from @repo/ai/server/agent-routes.ts\n *\n * @module @od-oneapp/ai-platform/server/routes/agent-routes\n */\n\nimport { createAgentUIStreamResponse } from '../../shared';\nimport {\n defaultGetMessageText,\n defaultValidateMessages,\n inMemoryInitializeSession,\n type InitializeSessionFn,\n type PersistMessageFn,\n type SetupResumableStreamFn,\n} from '../messages/extraction';\n\nimport type { SDKAgent, SDKUIMessage, JSONValue } from '../../shared';\n\n\n/**\n * Create a JSON error response.\n * Consistent error format for agent route handlers.\n */\nfunction jsonError(error: string, status: number = 400): Response {\n return new Response(JSON.stringify({ error }), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n}\n\n/**\n * Options for creating an agent route handler.\n */\nexport interface AgentRouteHandlerOptions {\n /**\n * AI SDK Agent instance (ToolLoopAgent, etc.)\n * Using generic Agent type to support all agent variants\n */\n agent?: SDKAgent | unknown;\n /**\n * Custom executor when an Agent is not used (e.g., streamText patterns).\n */\n execute?: (params: {\n messages: SDKUIMessage[];\n sessionId: string;\n isNew: boolean;\n body: Record<string, JSONValue>;\n }) => Promise<Response>;\n /** Whether to send reasoning tokens to the client. */\n sendReasoning?: boolean;\n /**\n * Optional error mapper for createAgentUIStreamResponse.\n * Returns error message string or undefined to use default error handling.\n */\n onError?: (error: unknown, context: { sessionId: string }) => string | undefined;\n /**\n * Optional options resolver for createAgentUIStreamResponse.\n */\n resolveOptions?: (params: {\n body: unknown;\n messages: SDKUIMessage[];\n sessionId: string;\n }) => Record<string, JSONValue>;\n /** Session initializer function. Defaults to in-memory. */\n initializeSession?: InitializeSessionFn;\n /** Persist user messages to storage. */\n persistUserMessage?: PersistMessageFn;\n /** Set up resumable stream for the response. */\n setupResumableStream?: SetupResumableStreamFn;\n /** Message array validator. */\n validateMessages?: (messages: unknown) => messages is SDKUIMessage[];\n /** Extract text from a UIMessage. */\n getMessageText?: (message: SDKUIMessage) => string;\n}\n\n/**\n * Create a Next.js/Fetch-compatible POST handler for AI SDK agents.\n *\n * Handles request parsing, session initialization, user message persistence,\n * agent execution, and optional stream resumption.\n *\n * @param options - Route handler configuration\n * @returns POST handler function\n *\n * @example\n * ```ts\n * import { createAgentRouteHandler } from '@od-oneapp/ai-platform/server';\n *\n * const POST = createAgentRouteHandler({\n * agent: myToolLoopAgent,\n * sendReasoning: true,\n * initializeSession: myDbSessionInit,\n * persistUserMessage: myDbPersist,\n * });\n *\n * export { POST };\n * ```\n */\nexport function createAgentRouteHandler(options: AgentRouteHandlerOptions) {\n const {\n agent,\n execute,\n sendReasoning = true,\n onError,\n resolveOptions,\n initializeSession = inMemoryInitializeSession,\n persistUserMessage,\n setupResumableStream,\n validateMessages = defaultValidateMessages,\n getMessageText = defaultGetMessageText,\n } = options;\n\n return async function POST(req: Request): Promise<Response> {\n const body = await req.json().catch(() => null);\n\n if (!body || typeof body !== 'object') {\n return jsonError('Invalid request body', 400);\n }\n\n const { messages, id, ...rest } = body as { messages?: unknown; id?: string };\n\n if (!validateMessages(messages)) {\n return jsonError('Invalid request: messages must be an array', 400);\n }\n\n const uiMessages = messages;\n const { sessionId, isNew } = await initializeSession(id);\n\n // Persist latest user message if provided\n if (persistUserMessage && uiMessages.length > 0) {\n const lastUser =\n typeof uiMessages.findLast === 'function'\n ? uiMessages.findLast(m => m.role === 'user')\n : [...uiMessages].reverse().find(m => m.role === 'user');\n\n if (lastUser) {\n const text = getMessageText(lastUser);\n if (text) {\n await persistUserMessage(sessionId, text, { autoTitle: isNew });\n }\n }\n }\n\n let response: Response;\n\n if (execute) {\n const bodyObj: Record<string, unknown> = { messages: uiMessages, ...rest };\n if (id !== undefined) {\n bodyObj.id = id;\n }\n\n response = await execute({\n messages: uiMessages,\n sessionId,\n isNew,\n body: bodyObj as Record<string, JSONValue>,\n });\n } else if (agent) {\n response = await createAgentUIStreamResponse({\n agent: agent as SDKAgent,\n uiMessages,\n sendReasoning,\n options: resolveOptions?.({\n body: { messages: uiMessages, id, ...rest },\n messages: uiMessages,\n sessionId,\n \n }) as any,\n onError: onError\n ? (error: unknown) => {\n const errorMessage = onError(error, { sessionId });\n return errorMessage ?? 'An error occurred';\n }\n : undefined,\n });\n } else {\n return jsonError('No agent or execute handler provided', 500);\n }\n\n if (setupResumableStream) {\n await setupResumableStream(response, sessionId);\n }\n\n return response;\n };\n}\n","/**\n * @fileoverview Message converter factory for UI to model message transformation.\n * @module @od-oneapp/ai-platform/messages\n *\n * Provides factory for creating message converters that transform UI messages\n * to model-compatible format with configurable transformations.\n *\n * @example\n * ```ts\n * import { createMessageConverter } from '@od-oneapp/ai-platform/messages';\n *\n * const converter = createMessageConverter({\n * maxMessages: 50,\n * stripSystemMessages: false,\n * transform: (msg) => ({\n * ...msg,\n * content: msg.content.trim(),\n * }),\n * });\n *\n * const modelMessages = await converter.toModelMessages(uiMessages);\n * ```\n */\n\nimport {\n type MessageConverter,\n type MessageConverterConfig,\n type ModelMessage,\n type UIMessage,\n} from './types';\n\n// =============================================================================\n// Default Configuration\n// =============================================================================\n\n/**\n * Default configuration for message converter.\n */\nconst DEFAULT_CONFIG: Required<Omit<MessageConverterConfig, 'transform'>> & {\n transform: undefined;\n} = {\n stripSystemMessages: false,\n maxMessages: Infinity,\n transform: undefined,\n};\n\n// =============================================================================\n// Message Converter Factory\n// =============================================================================\n\n/**\n * Creates a message converter for transforming UI messages to model format.\n *\n * The converter applies the following transformations in order:\n * 1. Custom transform function (if provided)\n * 2. System message filtering (if stripSystemMessages is true)\n * 3. Sliding window truncation (if maxMessages is set)\n * 4. Conversion to model message format\n *\n * @param config - Converter configuration options.\n * @returns MessageConverter instance.\n *\n * @example Basic usage\n * ```ts\n * const converter = createMessageConverter();\n * const modelMessages = await converter.toModelMessages(uiMessages);\n * ```\n *\n * @example With configuration\n * ```ts\n * const converter = createMessageConverter({\n * maxMessages: 20,\n * stripSystemMessages: true,\n * });\n *\n * // Only last 20 non-system messages will be included\n * const modelMessages = await converter.toModelMessages(uiMessages);\n * ```\n *\n * @example With custom transform\n * ```ts\n * const converter = createMessageConverter({\n * transform: (msg) => {\n * // Filter out empty messages\n * if (!msg.content.trim()) return null;\n * // Normalize content\n * return { ...msg, content: msg.content.toLowerCase() };\n * },\n * });\n * ```\n */\nexport function createMessageConverter(config: MessageConverterConfig = {}): MessageConverter {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config };\n\n /**\n * Applies all transformations to the message array.\n * @param messages - Input messages.\n * @returns Transformed messages.\n */\n function processMessages(messages: readonly UIMessage[]): readonly UIMessage[] {\n let processed = [...messages];\n\n // 1. Apply custom transform and filter nulls\n if (mergedConfig.transform) {\n const { transform } = mergedConfig;\n processed = processed\n .map(msg => transform(msg))\n .filter((msg): msg is UIMessage => msg !== null);\n }\n\n // 2. Strip system messages if configured\n if (mergedConfig.stripSystemMessages) {\n processed = processed.filter(msg => msg.role !== 'system');\n }\n\n // 3. Apply sliding window (keep last N messages)\n if (mergedConfig.maxMessages < Infinity && processed.length > mergedConfig.maxMessages) {\n processed = processed.slice(-mergedConfig.maxMessages);\n }\n\n return processed;\n }\n\n /**\n * Converts a single UI message to model message format.\n * @param uiMessage - UI message to convert.\n * @returns Model message.\n */\n function convertToModelMessage(uiMessage: UIMessage): ModelMessage {\n return {\n role: uiMessage.role,\n content: uiMessage.content,\n };\n }\n\n return {\n async toModelMessages(messages: readonly UIMessage[]): Promise<readonly ModelMessage[]> {\n const processed = processMessages(messages);\n return processed.map(convertToModelMessage);\n },\n\n toModelMessagesSync(messages: readonly UIMessage[]): readonly ModelMessage[] {\n const processed = processMessages(messages);\n return processed.map(convertToModelMessage);\n },\n };\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Creates a transform function that chains multiple transforms.\n *\n * @param transforms - Array of transform functions to chain.\n * @returns Combined transform function.\n *\n * @example\n * ```ts\n * const converter = createMessageConverter({\n * transform: chainTransforms([\n * // Remove empty messages\n * (msg) => msg.content.trim() ? msg : null,\n * // Normalize whitespace\n * (msg) => ({ ...msg, content: msg.content.replace(/\\s+/g, ' ') }),\n * ]),\n * });\n * ```\n */\nexport function chainTransforms(\n transforms: ReadonlyArray<(msg: UIMessage) => UIMessage | null>,\n): (msg: UIMessage) => UIMessage | null {\n return (msg: UIMessage) => {\n let current: UIMessage | null = msg;\n for (const transform of transforms) {\n if (current === null) return null;\n current = transform(current);\n }\n return current;\n };\n}\n\n/**\n * Creates a transform that filters messages by role.\n *\n * @param allowedRoles - Roles to allow through.\n * @returns Transform function.\n *\n * @example\n * ```ts\n * const converter = createMessageConverter({\n * transform: filterByRole(['user', 'assistant']),\n * });\n * ```\n */\nexport function filterByRole(\n allowedRoles: readonly UIMessage['role'][],\n): (msg: UIMessage) => UIMessage | null {\n const roleSet = new Set(allowedRoles);\n return msg => (roleSet.has(msg.role) ? msg : null);\n}\n\n/**\n * Creates a transform that filters messages by content.\n *\n * @param predicate - Function to test message content.\n * @returns Transform function.\n *\n * @example\n * ```ts\n * // Filter out messages with only whitespace\n * const converter = createMessageConverter({\n * transform: filterByContent((content) => content.trim().length > 0),\n * });\n * ```\n */\nexport function filterByContent(\n predicate: (content: string) => boolean,\n): (msg: UIMessage) => UIMessage | null {\n return msg => (predicate(msg.content) ? msg : null);\n}\n\n/**\n * Creates a transform that modifies message content.\n *\n * @param modifier - Function to modify content.\n * @returns Transform function.\n *\n * @example\n * ```ts\n * // Trim all message content\n * const converter = createMessageConverter({\n * transform: transformContent((content) => content.trim()),\n * });\n * ```\n */\nexport function transformContent(\n modifier: (content: string) => string,\n): (msg: UIMessage) => UIMessage {\n return msg => ({\n ...msg,\n content: modifier(msg.content),\n });\n}\n","/**\n * @fileoverview Data part extractor factory for type-safe data extraction.\n * @module @od-oneapp/ai-platform/messages\n *\n * Provides factory for creating typed data part extractors that validate\n * and extract custom data from message streams.\n *\n * @example\n * ```ts\n * import { z } from 'zod';\n * import { createDataPartExtractor } from '@od-oneapp/ai-platform/messages';\n *\n * const ToolShimmerSchema = z.object({\n * toolCallId: z.string(),\n * toolName: z.string(),\n * state: z.enum(['pending', 'loading', 'success', 'error']),\n * });\n *\n * const ProgressSchema = z.object({\n * current: z.number(),\n * total: z.number(),\n * });\n *\n * const extractor = createDataPartExtractor({\n * schemas: {\n * 'tool-shimmer': ToolShimmerSchema,\n * 'progress': ProgressSchema,\n * },\n * onUnknownType: (type, data) => {\n * console.warn(`Unknown data part type: ${type}`);\n * },\n * });\n *\n * const shimmers = extractor.extract(messages, 'tool-shimmer');\n * const allParts = extractor.extractAll(messages);\n * ```\n */\n\nimport { logWarn } from '@repo/shared/logs';\nimport { type z } from 'zod';\n\nimport {\n type DataPart,\n type DataPartExtractor,\n type DataPartExtractorConfig,\n type DataPartSchemaMap,\n type ExtractedDataParts,\n type UIMessage,\n} from './types';\n\n// =============================================================================\n// Data Part Extractor Factory\n// =============================================================================\n\n/**\n * Creates a type-safe data part extractor with Zod schema validation.\n *\n * The extractor validates each data part against its registered schema,\n * providing type-safe access to custom streaming data.\n *\n * @param config - Extractor configuration with schema map.\n * @returns DataPartExtractor instance.\n *\n * @example Basic usage\n * ```ts\n * import { z } from 'zod';\n *\n * const SourceSchema = z.object({\n * id: z.string(),\n * url: z.string().url(),\n * title: z.string(),\n * });\n *\n * const extractor = createDataPartExtractor({\n * schemas: { source: SourceSchema },\n * });\n *\n * // Type-safe extraction - returns Source[]\n * const sources = extractor.extract(messages, 'source');\n * ```\n *\n * @example With unknown type handler\n * ```ts\n * const extractor = createDataPartExtractor({\n * schemas: { progress: ProgressSchema },\n * onUnknownType: (type, data) => {\n * // Log unknown types for debugging\n * console.warn(`Unhandled data part: ${type}`, data);\n * },\n * });\n * ```\n *\n * @example Extracting all types\n * ```ts\n * const allParts = extractor.extractAll(messages);\n * // { progress: [...], source: [...] }\n * ```\n */\nexport function createDataPartExtractor<T extends DataPartSchemaMap>(\n config: DataPartExtractorConfig<T>,\n): DataPartExtractor<T> {\n const { schemas, onUnknownType } = config;\n const schemaKeys = new Set(Object.keys(schemas));\n\n /**\n * Extracts data parts from a single message.\n * @param message - Message to extract from.\n * @returns Array of data parts.\n */\n function extractFromMessage(message: UIMessage): readonly DataPart[] {\n const parts: DataPart[] = [];\n\n // Extract from message.data if present\n if (message.data && Array.isArray(message.data)) {\n parts.push(...message.data);\n }\n\n // Extract from message.parts if present (filter for data parts)\n if (message.parts && Array.isArray(message.parts)) {\n for (const part of message.parts) {\n // Data parts have a 'type' and 'data' property\n if (\n part &&\n typeof part === 'object' &&\n 'type' in part &&\n 'data' in part &&\n typeof (part as DataPart).type === 'string'\n ) {\n parts.push(part as DataPart);\n }\n }\n }\n\n return parts;\n }\n\n /**\n * Validates a data part against its schema.\n * @param type - Type of the data part.\n * @param data - Data to validate.\n * @returns Validated data or null if invalid.\n */\n function validateDataPart<K extends keyof T & string>(\n type: K,\n data: unknown,\n ): z.infer<T[K]> | null {\n const schema = schemas[type];\n if (!schema) return null;\n\n const result = schema.safeParse(data);\n if (result.success) {\n return result.data as z.infer<T[K]>;\n }\n\n // Log validation errors in development\n if (process.env.NODE_ENV === 'development') {\n logWarn(`Data part validation failed for type \"${type}\"`, { error: result.error });\n }\n\n return null;\n }\n\n return {\n extract<K extends keyof T & string>(messages: readonly UIMessage[], type: K): z.infer<T[K]>[] {\n const results: z.infer<T[K]>[] = [];\n\n for (const message of messages) {\n const parts = extractFromMessage(message);\n\n for (const part of parts) {\n if (part.type === type) {\n const validated = validateDataPart(type, part.data);\n if (validated !== null) {\n results.push(validated);\n }\n } else if (!schemaKeys.has(part.type) && onUnknownType) {\n onUnknownType(part.type, part.data);\n }\n }\n }\n\n return results;\n },\n\n extractAll(messages: readonly UIMessage[]): Partial<ExtractedDataParts<T>> {\n const results: Partial<ExtractedDataParts<T>> = {};\n\n // Initialize empty arrays for each schema type\n for (const type of schemaKeys) {\n (results as Record<string, unknown[]>)[type] = [];\n }\n\n for (const message of messages) {\n const parts = extractFromMessage(message);\n\n for (const part of parts) {\n if (schemaKeys.has(part.type)) {\n const type = part.type as keyof T & string;\n const validated = validateDataPart(type, part.data);\n if (validated !== null) {\n (results as Record<string, unknown[]>)[type]?.push(validated);\n }\n } else if (onUnknownType) {\n onUnknownType(part.type, part.data);\n }\n }\n }\n\n return results;\n },\n\n hasSchema(type: string): type is keyof T & string {\n return schemaKeys.has(type);\n },\n };\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Creates a combined extractor from multiple schema maps.\n *\n * @param extractors - Array of extractor configs to combine.\n * @returns Combined DataPartExtractorConfig.\n *\n * @example\n * ```ts\n * const combinedSchemas = mergeSchemas(\n * { progress: ProgressSchema },\n * { source: SourceSchema, step: StepSchema },\n * );\n *\n * const extractor = createDataPartExtractor({\n * schemas: combinedSchemas,\n * });\n * ```\n */\nexport function mergeSchemas<T1 extends DataPartSchemaMap, T2 extends DataPartSchemaMap>(\n schemas1: T1,\n schemas2: T2,\n): T1 & T2 {\n return { ...schemas1, ...schemas2 };\n}\n\n/**\n * Collects all data parts from messages without validation.\n *\n * @param messages - Messages to collect from.\n * @returns Array of all data parts.\n *\n * @example\n * ```ts\n * const allParts = collectDataParts(messages);\n * // [{ type: 'progress', data: {...} }, { type: 'source', data: {...} }]\n * ```\n */\nexport function collectDataParts(messages: readonly UIMessage[]): readonly DataPart[] {\n const parts: DataPart[] = [];\n\n for (const message of messages) {\n // Collect from message.data\n if (message.data && Array.isArray(message.data)) {\n parts.push(...message.data);\n }\n\n // Collect from message.parts (filter for data parts)\n if (message.parts && Array.isArray(message.parts)) {\n for (const part of message.parts) {\n if (\n part &&\n typeof part === 'object' &&\n 'type' in part &&\n 'data' in part &&\n typeof (part as DataPart).type === 'string'\n ) {\n parts.push(part as DataPart);\n }\n }\n }\n }\n\n return parts;\n}\n\n/**\n * Groups data parts by type.\n *\n * @param parts - Data parts to group.\n * @returns Object with data parts grouped by type.\n *\n * @example\n * ```ts\n * const grouped = groupDataPartsByType(parts);\n * // { 'progress': [...], 'source': [...] }\n * ```\n */\nexport function groupDataPartsByType(parts: readonly DataPart[]): Record<string, DataPart[]> {\n const grouped: Record<string, DataPart[]> = {};\n\n for (const part of parts) {\n const bucket = grouped[part.type] ?? [];\n bucket.push(part);\n grouped[part.type] = bucket;\n }\n\n return grouped;\n}\n\n/**\n * Gets the latest data part of a specific type.\n *\n * @param messages - Messages to search.\n * @param type - Type of data part to find.\n * @returns Latest data part of the type or undefined.\n *\n * @example\n * ```ts\n * const latestProgress = getLatestDataPart(messages, 'progress');\n * ```\n */\nexport function getLatestDataPart(\n messages: readonly UIMessage[],\n type: string,\n): DataPart | undefined {\n const parts = collectDataParts(messages);\n\n // Search from end to find latest\n for (let i = parts.length - 1; i >= 0; i--) {\n const part = parts[i];\n if (part?.type === type) {\n return part;\n }\n }\n\n return undefined;\n}\n","/**\n * @fileoverview Message window factory for token-based message truncation.\n * @module @od-oneapp/ai-platform/messages\n *\n * Provides factory for creating message windows that manage conversation\n * history within token limits.\n *\n * @example\n * ```ts\n * import { createMessageWindow } from '@od-oneapp/ai-platform/messages';\n *\n * const window = createMessageWindow({\n * maxTokens: 8000,\n * preserveSystemMessage: true,\n * strategy: 'fifo',\n * });\n *\n * const truncated = await window.apply(messages);\n * const tokens = window.estimateTokens(messages);\n * ```\n */\n\nimport { logWarn } from '@repo/shared/logs';\n\nimport {\n type MessageWindow,\n type MessageWindowConfig,\n type TokenizerType,\n type UIMessage,\n} from './types';\n\n// =============================================================================\n// Default Configuration\n// =============================================================================\n\n/**\n * Default configuration for message window.\n */\nconst DEFAULT_CONFIG: Required<Omit<MessageWindowConfig, 'summarizer'>> & {\n summarizer: undefined;\n} = {\n maxTokens: 4096,\n tokenizer: 'cl100k_base',\n preserveSystemMessage: true,\n strategy: 'fifo',\n summarizer: undefined,\n};\n\n// =============================================================================\n// Tokenizer Implementation\n// =============================================================================\n\n/**\n * Estimates tokens per character for different tokenizers.\n * These are approximations based on typical encoding ratios.\n */\nconst CHARS_PER_TOKEN: Record<string, number> = {\n cl100k_base: 4.0, // GPT-4, GPT-3.5-turbo\n p50k_base: 4.0, // GPT-3, Codex\n default: 4.0,\n};\n\n/**\n * Creates a tokenizer function from a tokenizer type.\n *\n * @param tokenizer - Tokenizer type or custom function.\n * @returns Tokenizer function.\n */\nfunction createTokenizer(tokenizer: TokenizerType): (text: string) => number {\n if (typeof tokenizer === 'function') {\n return tokenizer;\n }\n\n // Use character-based estimation for preset tokenizers\n const charsPerToken = CHARS_PER_TOKEN[tokenizer] ?? CHARS_PER_TOKEN.default ?? 4.0;\n\n return (text: string) => {\n // Simple estimation: characters / chars_per_token\n // Add overhead for message structure (~4 tokens per message)\n return Math.ceil(text.length / charsPerToken) + 4;\n };\n}\n\n/**\n * Simple word-based tokenizer for rough estimates.\n * Counts words and adds overhead.\n *\n * @param text - Text to estimate tokens for.\n * @returns Estimated token count.\n */\nexport function wordBasedTokenizer(text: string): number {\n // Split by whitespace and count\n const words = text.split(/\\s+/).filter(w => w.length > 0);\n // Average ~1.3 tokens per word for English\n return Math.ceil(words.length * 1.3) + 4;\n}\n\n// =============================================================================\n// Message Window Factory\n// =============================================================================\n\n/**\n * Creates a message window for managing conversation history within token limits.\n *\n * The window applies truncation strategies to keep messages within the\n * configured token budget while optionally preserving system messages.\n *\n * @param config - Window configuration options.\n * @returns MessageWindow instance.\n *\n * @example Basic FIFO truncation\n * ```ts\n * const window = createMessageWindow({\n * maxTokens: 4000,\n * });\n *\n * const truncated = await window.apply(messages);\n * // Oldest messages removed to fit within 4000 tokens\n * ```\n *\n * @example Preserve system message\n * ```ts\n * const window = createMessageWindow({\n * maxTokens: 8000,\n * preserveSystemMessage: true,\n * });\n *\n * // System message always included, other messages truncated as needed\n * const truncated = await window.apply(messages);\n * ```\n *\n * @example Custom tokenizer\n * ```ts\n * import { encodingForModel } from 'js-tiktoken';\n *\n * const encoding = encodingForModel('gpt-4');\n *\n * const window = createMessageWindow({\n * maxTokens: 8000,\n * tokenizer: (text) => encoding.encode(text).length,\n * });\n * ```\n *\n * @example Summarize strategy\n * ```ts\n * const window = createMessageWindow({\n * maxTokens: 8000,\n * strategy: 'summarize',\n * summarizer: async (messages) => {\n * // Use LLM to summarize older messages\n * const summary = await generateSummary(messages);\n * return { role: 'system', content: `Previous context: ${summary}` };\n * },\n * });\n * ```\n */\nexport function createMessageWindow(config: MessageWindowConfig): MessageWindow {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config };\n const tokenize = createTokenizer(mergedConfig.tokenizer);\n\n /**\n * Estimates tokens for a single message.\n * @param message - Message to estimate.\n * @returns Estimated token count.\n */\n function estimateMessageTokens(message: UIMessage): number {\n let { content } = message;\n\n // Include parts content if available\n if (message.parts) {\n for (const part of message.parts) {\n if ('text' in part && typeof part.text === 'string') {\n content += ` ${part.text}`;\n }\n }\n }\n\n return tokenize(content);\n }\n\n /**\n * Estimates total tokens for an array of messages.\n * @param messages - Messages to estimate.\n * @returns Total estimated token count.\n */\n function estimateTokens(messages: readonly UIMessage[]): number {\n let total = 0;\n for (const message of messages) {\n total += estimateMessageTokens(message);\n }\n return total;\n }\n\n /**\n * Applies FIFO truncation strategy.\n * Removes oldest messages first, optionally preserving system message.\n * @param messages - Messages to truncate.\n * @returns Truncated messages.\n */\n function applyFIFO(messages: readonly UIMessage[]): readonly UIMessage[] {\n if (messages.length === 0) return messages;\n\n // Separate system message if preserving\n let systemMessage: UIMessage | undefined;\n let nonSystemMessages: UIMessage[];\n\n if (mergedConfig.preserveSystemMessage) {\n systemMessage = messages.find(m => m.role === 'system');\n nonSystemMessages = messages.filter(m => m.role !== 'system');\n } else {\n nonSystemMessages = [...messages];\n }\n\n // Calculate tokens for system message\n const systemTokens = systemMessage ? estimateMessageTokens(systemMessage) : 0;\n const availableTokens = mergedConfig.maxTokens - systemTokens;\n\n // If system message alone exceeds budget, just return it\n if (availableTokens <= 0 && systemMessage) {\n return [systemMessage];\n }\n\n // Build result from the end (newest first)\n const result: UIMessage[] = [];\n let currentTokens = 0;\n\n for (let i = nonSystemMessages.length - 1; i >= 0; i--) {\n const message = nonSystemMessages[i];\n if (!message) {\n continue;\n }\n const messageTokens = estimateMessageTokens(message);\n\n if (currentTokens + messageTokens <= availableTokens) {\n result.unshift(message);\n currentTokens += messageTokens;\n } else {\n // No more room\n break;\n }\n }\n\n // Add system message at the beginning if preserved\n if (systemMessage) {\n result.unshift(systemMessage);\n }\n\n return result;\n }\n\n /**\n * Applies summarize truncation strategy.\n * Summarizes older messages when they would be truncated.\n * @param messages - Messages to process.\n * @returns Processed messages with summaries.\n */\n async function applySummarize(messages: readonly UIMessage[]): Promise<readonly UIMessage[]> {\n if (!mergedConfig.summarizer) {\n // Fall back to FIFO if no summarizer provided\n return applyFIFO(messages);\n }\n\n const currentTokens = estimateTokens(messages);\n\n // If we're within budget, return as-is\n if (currentTokens <= mergedConfig.maxTokens) {\n return messages;\n }\n\n // Separate system message if preserving\n let systemMessage: UIMessage | undefined;\n let nonSystemMessages: UIMessage[];\n\n if (mergedConfig.preserveSystemMessage) {\n systemMessage = messages.find(m => m.role === 'system');\n nonSystemMessages = messages.filter(m => m.role !== 'system');\n } else {\n nonSystemMessages = [...messages];\n }\n\n // Find split point - keep recent messages, summarize older ones\n const systemTokens = systemMessage ? estimateMessageTokens(systemMessage) : 0;\n const targetTokens = mergedConfig.maxTokens - systemTokens;\n\n // Keep at least the last message\n const toKeep: UIMessage[] = [];\n let keepTokens = 0;\n let splitIndex = nonSystemMessages.length;\n\n for (let i = nonSystemMessages.length - 1; i >= 0; i--) {\n const message = nonSystemMessages[i];\n if (!message) {\n continue;\n }\n const messageTokens = estimateMessageTokens(message);\n\n // Reserve some tokens for the summary (~25% of available)\n const reserveForSummary = Math.floor(targetTokens * 0.25);\n\n if (keepTokens + messageTokens <= targetTokens - reserveForSummary) {\n toKeep.unshift(message);\n keepTokens += messageTokens;\n splitIndex = i;\n } else {\n break;\n }\n }\n\n // If nothing to summarize, return what we have\n if (splitIndex === 0) {\n const result = systemMessage ? [systemMessage, ...toKeep] : toKeep;\n return result;\n }\n\n // Summarize older messages\n const toSummarize = nonSystemMessages.slice(0, splitIndex);\n const summaryMessage = await mergedConfig.summarizer(toSummarize);\n\n // Build result\n const result: UIMessage[] = [];\n if (systemMessage) {\n result.push(systemMessage);\n }\n result.push(summaryMessage);\n result.push(...toKeep);\n\n return result;\n }\n\n return {\n async apply(messages: readonly UIMessage[]): Promise<readonly UIMessage[]> {\n if (messages.length === 0) return messages;\n\n const currentTokens = estimateTokens(messages);\n\n // If we're within budget, return as-is\n if (currentTokens <= mergedConfig.maxTokens) {\n return messages;\n }\n\n // Apply strategy\n if (mergedConfig.strategy === 'summarize') {\n return applySummarize(messages);\n }\n\n return applyFIFO(messages);\n },\n\n applySync(messages: readonly UIMessage[]): readonly UIMessage[] {\n if (messages.length === 0) return messages;\n\n const currentTokens = estimateTokens(messages);\n\n // If we're within budget, return as-is\n if (currentTokens <= mergedConfig.maxTokens) {\n return messages;\n }\n\n // Only FIFO works synchronously\n if (mergedConfig.strategy === 'summarize') {\n logWarn('applySync does not support summarize strategy, falling back to FIFO');\n }\n\n return applyFIFO(messages);\n },\n\n estimateTokens,\n estimateMessageTokens,\n };\n}\n\n// =============================================================================\n// Preset Windows\n// =============================================================================\n\n/**\n * Creates a compact window for short context models (4K tokens).\n *\n * @returns MessageWindow with 4K token limit.\n *\n * @example\n * ```ts\n * const window = createCompactWindow();\n * const truncated = await window.apply(messages);\n * ```\n */\nexport function createCompactWindow(): MessageWindow {\n return createMessageWindow({\n maxTokens: 4096,\n preserveSystemMessage: true,\n strategy: 'fifo',\n });\n}\n\n/**\n * Creates a standard window for medium context models (8K tokens).\n *\n * @returns MessageWindow with 8K token limit.\n *\n * @example\n * ```ts\n * const window = createStandardWindow();\n * const truncated = await window.apply(messages);\n * ```\n */\nexport function createStandardWindow(): MessageWindow {\n return createMessageWindow({\n maxTokens: 8192,\n preserveSystemMessage: true,\n strategy: 'fifo',\n });\n}\n\n/**\n * Creates a large window for long context models (32K tokens).\n *\n * @returns MessageWindow with 32K token limit.\n *\n * @example\n * ```ts\n * const window = createLargeWindow();\n * const truncated = await window.apply(messages);\n * ```\n */\nexport function createLargeWindow(): MessageWindow {\n return createMessageWindow({\n maxTokens: 32768,\n preserveSystemMessage: true,\n strategy: 'fifo',\n });\n}\n\n/**\n * Creates an extended window for very long context models (128K tokens).\n *\n * @returns MessageWindow with 128K token limit.\n *\n * @example\n * ```ts\n * const window = createExtendedWindow();\n * const truncated = await window.apply(messages);\n * ```\n */\nexport function createExtendedWindow(): MessageWindow {\n return createMessageWindow({\n maxTokens: 131072,\n preserveSystemMessage: true,\n strategy: 'fifo',\n });\n}\n","/**\n * @fileoverview api-helpers.ts\n */\n/**\n * API Route Helpers\n * DRY utilities for Next.js API routes with database persistence\n */\n\nimport {\n createAIConversationOrm,\n createAIMessageOrm,\n findAIConversationOrm,\n updateAIConversationOrm,\n} from '@od-oneapp/db-prisma/orm';\nimport { AIMessageRole, AISessionType } from '@od-oneapp/db-prisma/types';\nimport { type Logger, logError, logInfo, logWarn } from '@repo/shared/logs';\n\nimport { createResumableStream } from '../integrations/stream';\nimport { UI_MESSAGE_STREAM_HEADERS , generateId } from '../shared';\n\nimport { generateSignature, verifySignature } from './cache/crypto';\n\nimport type {\n SDKLanguageModelUsage,\n SDKStreamTextResult,\n SDKUIMessage,\n} from '../shared';\n\n\n/**\n * Type for AI SDK stream finish event\n * Matches the onFinish callback shape from streamText/generateText\n */\ninterface StreamFinishEvent {\n usage?: SDKLanguageModelUsage;\n totalUsage?: SDKLanguageModelUsage;\n finishReason?: string;\n text?: string;\n}\n\ntype WaitUntil = (promise: Promise<unknown>) => void;\n\nconst defaultWaitUntil: WaitUntil = promise => {\n void promise;\n};\n\nexport interface StreamResumptionAuth {\n getUserContext: (req: Request) => Promise<{ userId: string } | null>;\n verifyOwnership?: (userId: string, chatId: string) => Promise<boolean>;\n}\n\ntype StreamResumptionOptions = {\n waitUntil?: WaitUntil;\n auth?: StreamResumptionAuth;\n tokenTtlSeconds?: number;\n};\n\ntype SetupResumableStreamOptions = {\n waitUntil?: WaitUntil;\n userId?: string;\n tokenTtlSeconds?: number;\n};\n\ntype ResumptionTokenPayload = {\n streamId: string;\n chatId: string;\n userId: string;\n issuedAt: number;\n expiresAt: number;\n};\n\nconst defaultTokenTtlSeconds = () => {\n const raw = process.env.STREAM_RESUME_TOKEN_TTL_SEC ?? '3600';\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 3600;\n};\n\nconst getResumptionSigningKey = (): string | undefined =>\n process.env.STREAM_RESUME_SIGNING_KEY ?? process.env.AUDIT_SIGNING_KEY;\n\nconst encodeBase64Url = (value: string): string => {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(value, 'utf8').toString('base64url');\n }\n\n if (typeof btoa !== 'undefined') {\n const encoded = btoa(value);\n return encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n }\n\n throw new Error('Base64 encoding unavailable');\n};\n\nconst decodeBase64Url = (value: string): string => {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(value, 'base64url').toString('utf8');\n }\n\n if (typeof atob !== 'undefined') {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/');\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=');\n return atob(padded);\n }\n\n throw new Error('Base64 decoding unavailable');\n};\n\nconst createResumptionToken = async (payload: ResumptionTokenPayload): Promise<string> => {\n const signingKey = getResumptionSigningKey();\n if (!signingKey) {\n throw new Error('STREAM_RESUME_SIGNING_KEY or AUDIT_SIGNING_KEY is required for resumption');\n }\n const encodedPayload = encodeBase64Url(JSON.stringify(payload));\n const signature = await generateSignature({ payload: encodedPayload }, signingKey);\n return `${encodedPayload}.${signature}`;\n};\n\nconst verifyResumptionToken = async (token: string): Promise<ResumptionTokenPayload | null> => {\n const signingKey = getResumptionSigningKey();\n if (!signingKey) {\n throw new Error('STREAM_RESUME_SIGNING_KEY or AUDIT_SIGNING_KEY is required for resumption');\n }\n\n const parts = token.split('.');\n if (parts.length !== 2) {\n return null;\n }\n\n const encodedPayload = parts[0];\n const signature = parts[1];\n if (!encodedPayload || !signature) {\n return null;\n }\n\n const valid = await verifySignature({ payload: encodedPayload }, signature, signingKey);\n if (!valid) {\n return null;\n }\n\n const payload = JSON.parse(decodeBase64Url(encodedPayload)) as ResumptionTokenPayload;\n if (!payload || typeof payload !== 'object') {\n return null;\n }\n\n if (Date.now() > payload.expiresAt) {\n return null;\n }\n\n return payload;\n};\n\nconst resolveStreamResumptionOptions = (\n options?: StreamResumptionOptions | WaitUntil,\n): StreamResumptionOptions => {\n if (typeof options === 'function') {\n return { waitUntil: options };\n }\n return options ?? {};\n};\n\nconst resolveSetupResumableStreamOptions = (\n options?: SetupResumableStreamOptions | WaitUntil,\n): SetupResumableStreamOptions => {\n if (typeof options === 'function') {\n return { waitUntil: options };\n }\n return options ?? {};\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null;\n};\n\nconst normalizeError = (error: unknown): { message: string } => {\n if (error instanceof Error) {\n return { message: error.message };\n }\n\n if (typeof error === 'string') {\n return { message: error };\n }\n\n if (isRecord(error) && typeof error.message === 'string') {\n return { message: error.message };\n }\n\n return { message: 'Unknown error' };\n};\n\nconst toByteStream = (stream: ReadableStream<Uint8Array | string>): ReadableStream<Uint8Array> => {\n const encoder = new TextEncoder();\n return stream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n if (typeof chunk === 'string') {\n controller.enqueue(encoder.encode(chunk));\n return;\n }\n if (chunk instanceof Uint8Array) {\n controller.enqueue(chunk);\n return;\n }\n controller.enqueue(encoder.encode(String(chunk)));\n },\n }),\n );\n};\n\n/**\n * Extracts error message from unknown error type.\n * Provides consistent error message extraction across all routes.\n *\n * @param {unknown} error - The error to extract message from\n * @returns {string} The error message\n *\n * @example\n * ```ts\n * // Extract error message\n * const message = getErrorMessage(error);\n * return jsonError(message, 500);\n * ```\n */\nexport const getErrorMessage = (error: unknown): string => {\n return normalizeError(error).message;\n};\n\n/**\n * Creates a JSON error response with consistent format.\n *\n * @param {string | Error} error - The error message or Error object\n * @param {number} [status] - HTTP status code\n * @returns {Response} JSON error response\n *\n * @example\n * ```ts\n * // Create error response\n * return jsonError('Invalid request', 400);\n * // or\n * return jsonError(error, 500);\n * ```\n */\nexport const jsonError = (error: string | Error, status: number = 500): Response => {\n const message = typeof error === 'string' ? error : error.message;\n\n return new Response(JSON.stringify({ error: message }), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n};\n\n/**\n * Creates a JSON success response.\n *\n * @template T\n * @param {T} data - The data to return\n * @param {number} [status] - HTTP status code\n * @returns {Response} JSON success response\n *\n * @example\n * ```ts\n * // Create success response\n * return jsonSuccess({ userId: '123', name: 'John' }, 200);\n * ```\n */\nexport const jsonSuccess = <T>(data: T, status: number = 200): Response => {\n return new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n};\n\n/**\n * Parses and validates request body.\n * Returns typed data or error response.\n *\n * @template T\n * @param {Request} req - The request object\n * @returns {Promise<{ data: T } | { error: Response }>} Parsed data or error response\n *\n * @example\n * ```ts\n * // Parse request body\n * const result = await parseRequestBody<{ message: string }>(req);\n * if ('error' in result) {\n * return result.error;\n * }\n * const { message } = result.data;\n * ```\n */\nexport const parseRequestBody = async <T = unknown>(\n req: Request,\n): Promise<{ data: T } | { error: Response }> => {\n try {\n const data = (await req.json()) as T;\n return { data };\n } catch {\n return {\n error: jsonError('Invalid JSON in request body', 400),\n };\n }\n};\n\n/**\n * Validates that messages is a non-empty array of UIMessage.\n *\n * @param {unknown} messages - The value to validate\n * @returns {messages is UIMessage[]} True if messages is a valid array\n *\n * @example\n * ```ts\n * // Validate messages\n * if (!validateMessages(messages)) {\n * return jsonError('Invalid messages format', 400);\n * }\n * ```\n */\nexport const validateMessages = (messages: unknown): messages is SDKUIMessage[] => {\n return Array.isArray(messages) && messages.length > 0;\n};\n\n/**\n * Common response options for streaming\n */\nexport const STREAM_RESPONSE_OPTIONS = {\n /** Standard options: sources + reasoning */\n standard: {\n sendSources: true,\n sendReasoning: true,\n },\n /** Sources only */\n sources: {\n sendSources: true,\n },\n /** Minimal (no extras) */\n minimal: {},\n} as const;\n\n/**\n * Creates experimental_telemetry config for AI SDK v6.\n * Provides observability for AI operations.\n *\n * @param {object} options - Telemetry configuration options\n * @param {string} options.functionId - Unique identifier for the function\n * @param {string} options.component - Component name\n * @param {string} [options.version] - Version string\n * @param {Record<string, unknown>} [options.metadata] - Additional metadata\n * @returns {object} Telemetry configuration object\n *\n * @example\n * ```ts\n * // Create telemetry config\n * const telemetry = createTelemetryConfig({\n * functionId: 'chat-handler',\n * component: 'chat-api',\n * version: '1.0.0',\n * metadata: { userId: '123' }\n * });\n * ```\n */\nexport const createTelemetryConfig = (options: {\n functionId: string;\n component: string;\n version?: string;\n metadata?: Record<string, unknown>;\n}) => {\n return {\n isEnabled: true,\n functionId: options.functionId,\n metadata: {\n component: options.component,\n version: options.version || '1.0.0',\n ...options.metadata,\n },\n };\n};\n\n/**\n * Handle stream resumption for GET /stream routes\n * Queries the database for activeStreamId and resumes if found.\n *\n * Note: Requires Redis to be configured for resumable streams.\n */\nexport async function handleStreamResumption(\n req: Request,\n options?: StreamResumptionOptions | WaitUntil,\n): Promise<Response> {\n const { waitUntil, auth } = resolveStreamResumptionOptions(options);\n const effectiveWaitUntil = waitUntil ?? defaultWaitUntil;\n const chatId = req.headers.get('X-Chat-ID');\n\n if (!chatId) {\n return jsonError('Missing X-Chat-ID header', 400);\n }\n\n if (!auth) {\n return jsonError('Unauthorized', 401);\n }\n\n const userContext = await auth.getUserContext(req);\n if (!userContext) {\n return jsonError('Unauthorized', 401);\n }\n\n if (auth.verifyOwnership) {\n const allowed = await auth.verifyOwnership(userContext.userId, chatId);\n if (!allowed) {\n return jsonError('Forbidden', 403);\n }\n }\n\n // Query database for active stream ID\n const conversation = await findAIConversationOrm({ id: chatId });\n const resumptionToken = conversation?.activeStreamId;\n\n if (!resumptionToken) {\n return new Response(null, { status: 204 });\n }\n\n try {\n const payload = await verifyResumptionToken(resumptionToken);\n if (payload?.chatId !== chatId || payload.userId !== userContext.userId) {\n await updateAIConversationOrm({ id: chatId }, { activeStreamId: null }).catch(() => {});\n return new Response(null, { status: 204 });\n }\n\n const streamContext = createResumableStream({ waitUntil: effectiveWaitUntil });\n const stream = await streamContext.resumeExistingStream(payload.streamId);\n\n if (!stream) {\n // Stream expired or not found - clear the reference\n await updateAIConversationOrm({ id: chatId }, { activeStreamId: null }).catch(() => {});\n return new Response(null, { status: 204 });\n }\n\n const responseStream = toByteStream(stream as ReadableStream<Uint8Array | string>);\n\n return new Response(responseStream, {\n headers: { ...UI_MESSAGE_STREAM_HEADERS, 'X-Stream-Resumed': 'true' },\n });\n } catch (error) {\n logWarn('[handleStreamResumption] Failed to resume stream:', { error, chatId });\n return new Response(null, { status: 204 });\n }\n}\n\n/**\n * Sets up resumable stream for agent responses.\n * Wraps a response stream with resumption capabilities and stores\n * the stream ID in the database for client-side resume.\n *\n * Note: Fails gracefully if Redis is not available - stream will still work,\n * just without resumption support across page refreshes.\n *\n * @param {Response} response - The response stream to wrap\n * @param {string} chatId - The chat/conversation ID for stream tracking\n * @returns {Promise<void>}\n *\n * @example\n * ```ts\n * // Setup resumable stream\n * const response = streamText(...);\n * await setupResumableStream(response, chatId);\n * return response;\n * ```\n */\nexport const setupResumableStream = async (\n response: Response,\n chatId: string,\n options?: SetupResumableStreamOptions | WaitUntil,\n): Promise<void> => {\n const { waitUntil, userId, tokenTtlSeconds } = resolveSetupResumableStreamOptions(options);\n const effectiveWaitUntil = waitUntil ?? defaultWaitUntil;\n try {\n const streamId = generateId();\n const streamContext = createResumableStream({ waitUntil: effectiveWaitUntil });\n\n if (response.body) {\n await streamContext.createNewResumableStream(streamId, () => response.body as ReadableStream);\n if (!userId) {\n logWarn('[setupResumableStream] Missing userId, resumption disabled', { chatId });\n return;\n }\n\n const ttlSeconds = tokenTtlSeconds ?? defaultTokenTtlSeconds();\n const resumptionToken = await createResumptionToken({\n streamId,\n chatId,\n userId,\n issuedAt: Date.now(),\n expiresAt: Date.now() + ttlSeconds * 1000,\n });\n\n // Store signed resumption token for client resume\n await updateAIConversationOrm({ id: chatId }, { activeStreamId: resumptionToken });\n }\n } catch (error) {\n // Fail gracefully - stream will work without resumption support\n // This typically happens when Redis is not configured/available\n const isRedisError =\n error instanceof Error &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ECONNREFUSED';\n\n if (isRedisError) {\n // Silent fail for Redis connection issues - already warned in createResumableStream\n return;\n }\n\n // Log unexpected errors but don't throw\n logWarn('[setupResumableStream] Failed to setup resumable stream:', { error });\n }\n};\n\n/**\n * Gets or generates a chat ID for non-persistent sessions.\n *\n * Note: For persistent sessions with database storage, use initializePersistentSession instead.\n *\n * @param {string} [id] - Optional existing chat ID\n * @returns {string} The chat ID\n *\n * @example\n * ```ts\n * // Initialize chat session\n * const chatId = initializeChatSession();\n * // or with existing ID\n * const chatId = initializeChatSession('existing-id');\n * ```\n */\nexport const initializeChatSession = (id?: string): string => {\n return id ?? generateId();\n};\n\n/**\n * Initializes a persistent chat session with database storage.\n * Use this instead of initializeChatSession for demos that need persistence.\n *\n * @param {object} [options] - Session initialization options\n * @param {string} [options.sessionId] - Existing session ID\n * @param {string} [options.userId] - User ID for the session\n * @param {string} [options.model] - Model name for the session\n * @param {string} [options.demo] - Demo identifier\n * @returns {Promise<{ sessionId: string; isNew: boolean }>} Session ID and whether it's new\n *\n * @example\n * ```ts\n * // Initialize persistent session\n * const { sessionId, isNew } = await initializePersistentSession({\n * userId: 'user-123',\n * model: 'gpt-4'\n * });\n * ```\n */\nexport const initializePersistentSession = async (options?: {\n sessionId?: string;\n userId?: string;\n model?: string;\n demo?: string;\n}): Promise<{ sessionId: string; isNew: boolean }> => {\n let session;\n let isNew = false;\n\n // Try to get existing session if ID provided\n if (options?.sessionId) {\n session = await findAIConversationOrm({ id: options.sessionId });\n }\n\n // Create new session if not found\n if (!session) {\n session = await createAIConversationOrm({\n ...(options?.userId ? { user: { connect: { id: options.userId } } } : {}),\n primaryModel: options?.model,\n sessionType: AISessionType.CONVERSATION,\n });\n isNew = true;\n } else if (session.activeStreamId) {\n // Clear any stale active stream from previous session\n await updateAIConversationOrm({ id: session.id }, { activeStreamId: null }).catch(() => {});\n }\n\n return {\n sessionId: session.id,\n isNew,\n };\n};\n\n/**\n * Wrapper for initializePersistentSession that matches InitializeSessionFn signature\n * Use this with createAgentRouteHandler for consistent session initialization\n */\nexport const initializePersistentSessionFn: (\n sessionId?: string,\n) => Promise<{ sessionId: string; isNew: boolean }> = async sessionId => {\n logInfo('[initializePersistentSessionFn] Starting with sessionId:', { sessionId });\n try {\n const result = await initializePersistentSession({ sessionId });\n logInfo('[initializePersistentSessionFn] Success:', { result });\n return result;\n } catch (error) {\n logError(error instanceof Error ? error : new Error(String(error)), {\n message: '[initializePersistentSessionFn] Error:',\n });\n throw error;\n }\n};\n\n/**\n * Save a user message to the database\n */\nexport async function persistUserMessage(\n sessionId: string,\n content: string,\n options?: { autoTitle?: boolean },\n): Promise<void> {\n await createAIMessageOrm({\n conversation: { connect: { id: sessionId } },\n role: AIMessageRole.USER,\n content,\n });\n\n // Auto-generate title from first message if requested\n if (options?.autoTitle) {\n const title = content.slice(0, 50) + (content.length > 50 ? '...' : '');\n await updateAIConversationOrm({ id: sessionId }, { title }).catch(() => {});\n }\n}\n\n/**\n * Saves an assistant message to the database.\n *\n * @param {string} sessionId - The session ID\n * @param {string} content - The message content\n * @returns {Promise<void>}\n *\n * @example\n * ```ts\n * // Persist assistant message\n * await persistAssistantMessage(sessionId, 'Hello! How can I help you?');\n * ```\n */\nexport const persistAssistantMessage = async (\n sessionId: string,\n content: string,\n): Promise<void> => {\n await createAIMessageOrm({\n conversation: { connect: { id: sessionId } },\n role: AIMessageRole.ASSISTANT,\n content,\n });\n};\n\n/**\n * Creates a standard onFinish callback for AI SDK streams.\n * Combines stream cleanup with optional usage logging and persistence.\n *\n * AI SDK v6 native feature - leverages built-in onFinish callback\n * instead of manually handling result.usage Promise.\n *\n * @param {string} chatId - The chat ID for stream tracking\n * @param {object} [options] - Callback options\n * @param {boolean} [options.logUsage] - Whether to log usage statistics\n * @param {string} [options.demo] - Demo identifier for logging\n * @param {Logger} [options.logger] - Logger instance for usage logging\n * @param {string} [options.persistSessionId] - Session ID for database persistence\n * @returns {(event: StreamFinishEvent) => Promise<void>} onFinish callback function\n *\n * @example\n * ```ts\n * // Create onFinish callback\n * const onFinish = createOnFinishCallback(chatId, {\n * logUsage: true,\n * demo: 'chat-demo',\n * persistSessionId: sessionId\n * });\n * ```\n */\nexport const createOnFinishCallback = (\n chatId: string,\n options?: {\n logUsage?: boolean;\n demo?: string;\n logger?: Logger;\n /** Session ID for database persistence */\n persistSessionId?: string;\n },\n) => {\n return async (event: StreamFinishEvent) => {\n // Clear active stream in database\n await updateAIConversationOrm({ id: chatId }, { activeStreamId: null }).catch(() => {});\n\n // Persist assistant response if session ID provided\n if (options?.persistSessionId && event?.text) {\n await persistAssistantMessage(options.persistSessionId, event.text).catch(err => {\n options?.logger?.info?.('Failed to persist assistant message', { error: String(err) });\n });\n }\n\n // Optional usage logging using AI SDK's native onFinish instead of manual Promise handling\n if (options?.logUsage && options?.logger && event?.usage) {\n options.logger.info(`${options.demo || 'stream'} usage`, {\n ...event.usage,\n totalUsage: event.totalUsage,\n demo: options.demo,\n });\n }\n };\n};\n\n// ---------------------------------------------------------------------------\n// Cost & telemetry utilities (migrated from @repo/ai)\n// ---------------------------------------------------------------------------\n\n/**\n * Calculate model cost with extended pricing data including Vercel AI Gateway models.\n *\n * Supports provider-prefixed model IDs (e.g., 'openai/gpt-4o', 'anthropic/claude-sonnet-4-5')\n * and includes pricing for newer models and gateway-specific models.\n *\n * @param modelId - Model identifier (e.g., 'openai/gpt-4o', 'anthropic/claude-sonnet-4-5')\n * @param usage - Token usage object\n * @returns Estimated cost in USD\n *\n * @example\n * ```typescript\n * const cost = calculateModelCost('openai/gpt-4o', {\n * inputTokens: 1000,\n * outputTokens: 500\n * });\n * // Returns: 0.005 (estimated cost in USD)\n * ```\n */\nexport const calculateModelCost = (\n modelId: string,\n usage: { inputTokens?: number; outputTokens?: number },\n): number => {\n const MODEL_COSTS: Record<string, { input: number; output: number }> = {\n 'openai/gpt-4o': { input: 0.0025, output: 0.01 },\n 'openai/gpt-4o-mini': { input: 0.00015, output: 0.0006 },\n 'openai/gpt-5.1-instant': { input: 0.0001, output: 0.0004 },\n 'anthropic/claude-sonnet-4-20250514': { input: 0.003, output: 0.015 },\n 'anthropic/claude-opus-4-5-20251101': { input: 0.015, output: 0.075 },\n 'perplexity/sonar': { input: 0.001, output: 0.001 },\n // Legacy model names (without provider prefix)\n 'gpt-4o': { input: 0.0025, output: 0.01 },\n 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },\n 'gpt-5.1-instant': { input: 0.0001, output: 0.0004 },\n 'claude-sonnet-4': { input: 0.003, output: 0.015 },\n 'claude-opus-4': { input: 0.015, output: 0.075 },\n // Default fallback\n default: { input: 0.001, output: 0.002 },\n };\n\n const pricing = MODEL_COSTS[modelId] ?? MODEL_COSTS.default ?? { input: 0.001, output: 0.002 };\n const inputTokens = usage.inputTokens ?? 0;\n const outputTokens = usage.outputTokens ?? 0;\n\n return (inputTokens / 1000) * pricing.input + (outputTokens / 1000) * pricing.output;\n};\n\n/**\n * Estimate input tokens from text.\n *\n * Uses rough approximation: ~4 characters per token for English text.\n * This is a simple heuristic and may vary by language and content type.\n *\n * @param text - Text to estimate tokens for\n * @returns Estimated number of input tokens\n *\n * @example\n * ```typescript\n * estimateInputTokens('Hello world'); // Returns: 3 (12 chars / 4)\n * ```\n */\nexport const estimateInputTokens = (text: string): number => Math.ceil(text.length / 4);\n\n/**\n * Extract model name from provider-prefixed model ID.\n *\n * Removes provider prefix from model IDs like \"openai/gpt-4o\" or \"anthropic/claude-3-5-sonnet\".\n * Handles both \"provider/model\" and \"provider:model\" formats.\n *\n * @param modelId - Model identifier (e.g., \"openai/gpt-4o\", \"openai:gpt-4o\", \"gpt-4o\")\n * @returns Model name without provider prefix\n *\n * @example\n * ```typescript\n * extractModelName('openai/gpt-4o'); // Returns: 'gpt-4o'\n * extractModelName('openai:gpt-4o'); // Returns: 'gpt-4o'\n * extractModelName('gpt-4o'); // Returns: 'gpt-4o'\n * ```\n */\nexport const extractModelName = (modelId: string): string => {\n if (modelId.includes('/')) {\n const parts = modelId.split('/');\n return parts[parts.length - 1] ?? modelId;\n }\n if (modelId.includes(':')) {\n const parts = modelId.split(':');\n return parts[parts.length - 1] ?? modelId;\n }\n return modelId;\n};\n\n/**\n * Round cost to specified decimal places.\n *\n * @param cost - Cost value to round\n * @param decimals - Number of decimal places (default: 6)\n * @returns Rounded cost value\n *\n * @example\n * ```typescript\n * roundCost(0.123456789); // Returns: 0.123457\n * roundCost(0.123456789, 2); // Returns: 0.12\n * ```\n */\nexport const roundCost = (cost: number, decimals: number = 6): number =>\n Math.round(cost * Math.pow(10, decimals)) / Math.pow(10, decimals);\n\n/**\n * Truncate text to specified length with ellipsis.\n *\n * @param text - Text to truncate\n * @param maxLength - Maximum length before truncation\n * @param ellipsis - Ellipsis string (default: '...')\n * @returns Truncated text\n *\n * @example\n * ```typescript\n * truncateText('Hello world', 8); // Returns: 'Hello...'\n * truncateText('Short', 10); // Returns: 'Short'\n * ```\n */\nexport const truncateText = (text: string, maxLength: number, ellipsis: string = '...'): string => {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, maxLength - ellipsis.length)}${ellipsis}`;\n};\n\n/**\n * Calculate elapsed duration in milliseconds from a start timestamp.\n *\n * @param startTime - Epoch milliseconds captured at the start of an operation\n * @returns Milliseconds elapsed since `startTime`\n *\n * @example\n * ```typescript\n * const startedAt = Date.now();\n * // ... work ...\n * const durationMs = calculateDuration(startedAt);\n * ```\n */\nexport const calculateDuration = (startTime: number): number => Date.now() - startTime;\n\n/**\n * Extract telemetry data from an AI SDK stream result.\n * Awaits text, usage, and reasoningText in parallel for efficiency.\n *\n * @param result - AI SDK stream result to extract from\n * @returns Parsed text, usage, and optional reasoning text\n *\n * @example\n * ```typescript\n * const telemetry = await extractTelemetry(streamResult);\n * console.log(telemetry.usage.totalTokens);\n * ```\n */\nexport const extractTelemetry = async <TUsage extends SDKLanguageModelUsage>(\n \n result: SDKStreamTextResult<any, any>,\n): Promise<{ text: string; usage: TUsage; reasoningText: string | undefined }> => {\n const [text, usage, reasoningText] = await Promise.all([\n result.text,\n result.usage,\n result.reasoningText,\n ]);\n\n return { text, usage: usage as TUsage, reasoningText };\n};\n\n/**\n * Aggregate token usage from multiple messages or operations.\n *\n * Combines usage statistics from multiple sources, handling undefined/null values safely.\n * Useful for tracking cumulative usage across a conversation or session.\n *\n * @param current - Current usage statistics\n * @param addition - Usage to add to current\n * @returns Aggregated usage statistics\n *\n * @example\n * ```typescript\n * const totalUsage = aggregateUsage(\n * { inputTokens: 100, outputTokens: 50, totalTokens: 150 },\n * { inputTokens: 200, outputTokens: 100, totalTokens: 300 }\n * );\n * // Returns: { inputTokens: 300, outputTokens: 150, totalTokens: 450, ... }\n * ```\n */\nexport const aggregateUsage = (\n current: Partial<SDKLanguageModelUsage>,\n addition: Partial<SDKLanguageModelUsage>,\n): SDKLanguageModelUsage => {\n // Aggregate reasoning tokens (prefer outputTokenDetails, fallback to deprecated field)\n const reasoningTokens =\n (current.outputTokenDetails?.reasoningTokens ?? current.reasoningTokens ?? 0) +\n (addition.outputTokenDetails?.reasoningTokens ?? addition.reasoningTokens ?? 0);\n\n // Aggregate cache read tokens (prefer inputTokenDetails, fallback to deprecated field)\n const cacheReadTokens =\n (current.inputTokenDetails?.cacheReadTokens ?? current.cachedInputTokens ?? 0) +\n (addition.inputTokenDetails?.cacheReadTokens ?? addition.cachedInputTokens ?? 0);\n\n // Aggregate other input token details\n const noCacheTokens =\n (current.inputTokenDetails?.noCacheTokens ?? 0) +\n (addition.inputTokenDetails?.noCacheTokens ?? 0);\n\n const cacheWriteTokens =\n (current.inputTokenDetails?.cacheWriteTokens ?? 0) +\n (addition.inputTokenDetails?.cacheWriteTokens ?? 0);\n\n // Aggregate text tokens from output details\n const textTokens =\n (current.outputTokenDetails?.textTokens ?? 0) + (addition.outputTokenDetails?.textTokens ?? 0);\n\n return {\n inputTokens: (current.inputTokens ?? 0) + (addition.inputTokens ?? 0),\n outputTokens: (current.outputTokens ?? 0) + (addition.outputTokens ?? 0),\n totalTokens: (current.totalTokens ?? 0) + (addition.totalTokens ?? 0),\n // Deprecated fields for backwards compatibility\n reasoningTokens,\n cachedInputTokens: cacheReadTokens,\n // AI SDK v6 detailed token info\n inputTokenDetails: {\n noCacheTokens: noCacheTokens || undefined,\n cacheReadTokens: cacheReadTokens || undefined,\n cacheWriteTokens: cacheWriteTokens || undefined,\n },\n outputTokenDetails: {\n textTokens: textTokens || undefined,\n reasoningTokens: reasoningTokens || undefined,\n },\n };\n};\n","/**\n * @fileoverview error-handler.ts\n */\n\nimport { createLogNotifier } from '../integrations/notifications';\n\nimport type { Notifier } from '../integrations/notifications';\n\n/** Default notifier — logs to the structured logger. */\nconst defaultNotifier: Notifier = createLogNotifier();\n\n/**\n * Rate limit response shape from API.\n *\n * @typedef {object} RateLimitResponse\n * @property {string} error - Error message indicating rate limit exceeded\n * @property {number} retryAfter - Seconds to wait before retrying\n */\nexport type RateLimitResponse = {\n error: string;\n retryAfter: number;\n};\n\n/**\n * @deprecated Use RateLimitResponse instead\n */\nexport type RateLimitError = RateLimitResponse;\n\n/**\n * Type guard to check if an error is a rate limit response.\n *\n * @param {unknown} error - The error to check\n * @returns {error is RateLimitResponse} True if the error is a rate limit response\n *\n * @example\n * ```ts\n * // Check if error is a rate limit error\n * if (isRateLimitError(error)) {\n * handleRateLimitError(error);\n * }\n * ```\n */\nexport const isRateLimitError = (error: unknown): error is RateLimitError => {\n if (\n error &&\n typeof error === 'object' &&\n error !== null &&\n 'error' in error &&\n 'retryAfter' in error\n ) {\n const err = error as Record<string, unknown>;\n return (\n typeof err.error === 'string' &&\n typeof err.retryAfter === 'number' &&\n err.error.toLowerCase().includes('rate limit')\n );\n }\n return false;\n};\n\n/**\n * Handles rate limit errors by notifying the user/operator.\n *\n * @param {RateLimitError} error - The rate limit error to handle\n * @param {Notifier} [notifier] - Notifier to use (defaults to log-based notifier)\n * @returns {void}\n *\n * @example\n * ```ts\n * // Handle rate limit error\n * if (isRateLimitError(error)) {\n * handleRateLimitError(error);\n * }\n * ```\n */\nexport const handleRateLimitError = (error: RateLimitError, notifier?: Notifier): void => {\n const n = notifier ?? defaultNotifier;\n const retryAfterMinutes = Math.ceil(error.retryAfter / 60);\n const retryAfterHours = Math.ceil(retryAfterMinutes / 60);\n\n let retryMessage = '';\n if (retryAfterHours >= 1) {\n retryMessage = `Please try again in ${retryAfterHours} hour${retryAfterHours > 1 ? 's' : ''}`;\n } else {\n retryMessage = `Please try again in ${retryAfterMinutes} minute${retryAfterMinutes > 1 ? 's' : ''}`;\n }\n\n n.notify({\n level: 'error',\n message: `Rate limit exceeded. You've reached the daily limit of 10 requests. ${retryMessage}`,\n id: 'rate-limit-error',\n });\n};\n","/**\n * @fileoverview Standard API Handlers\n *\n * Provides standardized route handlers for AI streaming endpoints.\n * Ensures consistent error handling, telemetry, and headers.\n *\n * @module @od-oneapp/ai-platform/http/handlers\n */\n\nimport { logError } from '@repo/shared/logs';\nimport { z } from 'zod';\n\nimport { streamText } from '../shared';\nimport { preprocessMessages, wrapWithCompliance } from '../tools/compliance/compliance-wrapper';\n\nimport type { ComplianceOptions } from '../governance/compliance/types';\nimport type { SDKLanguageModel, SDKLanguageModelV3, SDKModelMessage } from '../shared';\n\n\n/**\n * Options for the AI handler.\n */\nexport interface AIHandlerOptions {\n model: SDKLanguageModel;\n system?: string;\n onFinish?: (text: string) => Promise<void>;\n auth?: (req: Request) => Promise<{ userId: string } | null>;\n compliance?: ComplianceOptions;\n maxMessages?: number;\n maxChars?: number;\n}\n\n/**\n * Creates a standard POST handler for AI chat.\n * Compatible with Next.js App Router route handlers.\n *\n * @example\n * ```ts\n * export const POST = createAIHandler({ model: openai('gpt-4') });\n * ```\n */\nexport function createAIHandler(\n options: AIHandlerOptions,\n): (req: Request) => Promise<Response> {\n return async function (req: Request) {\n try {\n if (options.auth) {\n const authResult = await options.auth(req);\n if (!authResult) {\n return new Response(JSON.stringify({ error: 'Unauthorized' }), {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n }\n\n const body = (await req.json()) as { messages?: unknown };\n const rawMessages = body.messages;\n\n if (!Array.isArray(rawMessages)) {\n return new Response(JSON.stringify({ error: 'Invalid messages payload' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n const maxMessages = options.maxMessages ?? 100;\n const maxChars = options.maxChars ?? 200_000;\n const messageSchema = z.object({\n role: z.enum(['system', 'user', 'assistant', 'tool']),\n content: z.union([z.string(), z.array(z.unknown())]),\n });\n const messagesSchema = z.array(messageSchema).min(1).max(maxMessages);\n const parsed = messagesSchema.safeParse(rawMessages);\n if (!parsed.success) {\n return new Response(JSON.stringify({ error: 'Invalid messages payload' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n const totalChars = rawMessages.reduce((sum, msg) => {\n if (msg && typeof msg === 'object' && 'content' in msg) {\n const { content } = msg as { content?: unknown };\n if (typeof content === 'string') {\n return sum + content.length;\n }\n if (Array.isArray(content)) {\n return (\n sum +\n content.reduce((inner, part) => {\n if (part && typeof part === 'object' && 'text' in part) {\n const textValue = (part as { text?: unknown }).text;\n return inner + (typeof textValue === 'string' ? textValue.length : 0);\n }\n return inner;\n }, 0)\n );\n }\n }\n return sum;\n }, 0);\n\n if (totalChars > maxChars) {\n return new Response(JSON.stringify({ error: 'Messages too large' }), {\n status: 413,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n let messages = rawMessages as SDKModelMessage[];\n if (options.compliance) {\n const { messages: processedMessages } = await preprocessMessages(\n messages,\n options.compliance,\n );\n messages = processedMessages;\n }\n\n const model =\n options.compliance && isLanguageModelV3(options.model)\n ? wrapWithCompliance(options.model, options.compliance)\n : options.model;\n\n const result = await streamText({\n model,\n messages,\n system: options.system,\n onFinish: async ({ text }: { text: string }) => {\n if (options.onFinish) {\n await options.onFinish(text);\n }\n },\n });\n\n return result.toTextStreamResponse();\n } catch (error) {\n logError('AI Handler Error', {\n error: error instanceof Error ? error : new Error(String(error)),\n });\n return new Response(JSON.stringify({ error: 'Internal Server Error' }), {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n };\n}\n\nconst isLanguageModelV3 = (model: SDKLanguageModel): model is SDKLanguageModelV3 => {\n return (\n typeof model === 'object' &&\n model !== null &&\n 'specificationVersion' in model &&\n (model as { specificationVersion?: unknown }).specificationVersion === 'v3'\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { $ as createUIMessageStreamResponse, $i as SDKToolChoice, $n as SDKEmbeddingModelV3Embedding, $r as SDKNoObjectGeneratedError, $t as tool, A as ToolLoopAgent, Aa as SDKUITools, Ai as SDKStopCondition, An as SDKChatState, Ar as SDKInferUIMessageChunk, At as isToolOrDynamicToolUIPart, B as cosineSimilarity, Bi as SDKSystemModelMessage, Bn as SDKDirectChatTransport, Br as SDKLanguageModelV3Content, Bt as pipeTextStreamToResponse, C as StepFinishReason, Ca as SDKUIMessagePart, Ci as SDKSpeechModelV3, Cn as SDKChatAddToolApproveResponseFunction, Cr as SDKImageModelV3Middleware, Ct as google, D as NoObjectGeneratedError, Da as SDKUIMessageStreamWriter, Di as SDKStaticToolResult, Dn as SDKChatOnFinishCallback, Dr as SDKInferToolInput, Dt as isFileUIPart, E as JsonToSseTransformStream, Ea as SDKUIMessageStreamOptions, Ei as SDKStaticToolOutputDenied, En as SDKChatOnErrorCallback, Er as SDKInferSchema, Et as isDeepEqualData, F as assistantModelMessageSchema, Fa as SDKWarning, Fi as SDKStreamTextOnFinishCallback, Fn as SDKContentPart, Fr as SDKLanguageModelRequestMetadata, Ft as modelMessageSchema, G as createGoogleGenerativeAI, Gi as SDKTextUIPart, Gn as SDKEmbedManyResult, Gr as SDKLanguageModelV3Source, Gt as safeValidateUIMessages, H as createAgentUIStreamResponse, Hi as SDKTextPart, Hn as SDKDynamicToolCall, Hr as SDKLanguageModelV3Message, Ht as pruneMessages, I as callCompletionApi, Ii as SDKStreamTextOnStepFinishCallback, In as SDKCreateUIMessage, Ir as SDKLanguageModelResponseMetadata, It as openai, J as createOpenAI, Ji as SDKToolApprovalRequest, Jn as SDKEmbeddingModel, Jr as SDKLanguageModelV3ToolResult, Jt as smoothStream, K as createIdGenerator, Ki as SDKTimeoutConfiguration, Kn as SDKEmbedResult, Kr as SDKLanguageModelV3StreamPart, Kt as simulateReadableStream, L as consumeStream, Li as SDKStreamTextResult, Ln as SDKDataContent, Lr as SDKLanguageModelUsage, Lt as parseJsonEventStream, M as addToolInputExamplesMiddleware, Ma as SDKUserContent, Mi as SDKStreamObjectResult, Mn as SDKChatTransport, Mr as SDKInferUITools, Mt as jsonSchema, N as anthropic, Na as SDKUserMessage, Ni as SDKStreamTextOnChunkCallback, Nn as SDKChunkDetector, Nr as SDKLanguageModel, Nt as lastAssistantMessageIsCompleteWithApprovalResponses, O as Output, Oa as SDKUITool, Oi as SDKStepResult, On as SDKChatOnToolCallCallback, Or as SDKInferToolOutput, Ot as isReasoningUIPart, P as asSchema, Pa as SDKUserModelMessage, Pi as SDKStreamTextOnErrorCallback, Pn as SDKCompletionRequestOptions, Pr as SDKLanguageModelMiddleware, Pt as lastAssistantMessageIsCompleteWithToolCalls, Q as createUIMessageStream, Qi as SDKToolCallRepairFunction, Qn as SDKEmbeddingModelV3CallOptions, Qr as SDKModelMessage, Qt as systemModelMessageSchema, R as convertFileListToFileUIParts, Ri as SDKStreamTextTransform, Rn as SDKDataUIPart, Rr as SDKLanguageModelV3, Rt as parsePartialJson, S as SDKWrapStreamArgs, Sa as SDKUIMessageChunk, Si as SDKSpeechModelResponseMetadata, Sn as SDKCallWarning, Sr as SDKImageModelV3, St as getToolOrDynamicToolName, T as Experimental_StdioMCPTransport, Ta as SDKUIMessageStreamOnFinishCallback, Ti as SDKStaticToolError, Tn as SDKChatOnDataCallback, Tr as SDKInferAgentUIMessage, Tt as isDataUIPart, U as createAnthropic, Ui as SDKTextStreamChatTransport, Un as SDKDynamicToolError, Ur as SDKLanguageModelV3Middleware, Ut as readUIMessageStream, V as createAgentUIStream, Vi as SDKTelemetrySettings, Vn as SDKDirectChatTransportOptions, Vr as SDKLanguageModelV3GenerateResult, Vt as pipeUIMessageStreamToResponse, W as createGateway, Wi as SDKTextStreamPart, Wn as SDKDynamicToolResult, Wr as SDKLanguageModelV3Prompt, Wt as rerank, X as createProviderRegistry, Xi as SDKToolApprovalResponse, Xn as SDKEmbeddingModelUsage, Xr as SDKLogWarningsFunction, Xt as streamObject, Y as createOpenAICompatible, Yi as SDKToolApprovalRequestOutput, Yn as SDKEmbeddingModelMiddleware, Yr as SDKLanguageModelV3ToolResultOutput, Yt as stepCountIs, Z as createTextStreamResponse, Zi as SDKToolCallPart, Zn as SDKEmbeddingModelV3, Zr as SDKMCPClient, Zt as streamText, _ as SDKMessagePart, _a as SDKTypedToolOutputDenied, _i as SDKSharedV3ProviderMetadata, _n as SDKAssistantContent, _r as SDKImageModel, _t as generateObject, a as createEmptyUsage, aa as SDKToolLoopAgentOnStepFinishCallback, ai as SDKPrepareStepResult, an as wrapImageModel, ar as SDKFlexibleSchema, at as embed, b as SDKTransformParamsArgs, ba as SDKUIDataTypes, bi as SDKSourceUrlUIPart, bn as SDKAsyncIterableStream, br as SDKImageModelResponseMetadata, bt as getTextFromDataUrl, c as resolveModelId, ca as SDKToolModelMessage, ci as SDKProviderRegistryProvider, cn as xai, cr as SDKGenerateTextOnFinishCallback, ct as experimental_customProvider, d as ComplianceSignal, da as SDKToolUIPart, di as SDKRepairTextFunction, dn as JSONSchema7, dr as SDKGenerateVideoPrompt, dt as experimental_transcribe, ea as SDKToolContent, ei as SDKOAuthClientProvider, en as toolModelMessageSchema, er as SDKEmbeddingModelV3Middleware, et as createXai, f as ComplianceSignalType, fa as SDKTranscriptionModel, fi as SDKRerankResult, fn as JSONValue, fr as SDKGenerateVideoResult, ft as extractJsonMiddleware, g as RiskLevel, ga as SDKTypedToolError, gi as SDKSchema, gn as SDKAgentStreamParameters, gr as SDKHttpChatTransportInitOptions, gt as generateImage, h as MessageRole, ha as SDKTypedToolCall, hi as SDKSafeValidateUIMessagesResult, hn as SDKAgentCallParameters, hr as SDKHttpChatTransport, ht as generateId, i as convertFromSDKUsage, ia as SDKToolLoopAgentOnFinishCallback, ii as SDKPrepareStepFunction, in as wrapEmbeddingModel, ir as SDKFileUIPart, it as dynamicTool, j as UI_MESSAGE_STREAM_HEADERS, ja as SDKUseCompletionOptions, ji as SDKStreamObjectOnFinishCallback, jn as SDKChatStatus, jr as SDKInferUITool, jt as isToolUIPart, k as SerialJobExecutor, ka as SDKUIToolInvocation, ki as SDKStepStartUIPart, kn as SDKChatRequestOptions, kr as SDKInferUIDataParts, kt as isTextUIPart, l as AgentFinishReason, la as SDKToolResultPart, li as SDKProviderV3, ln as zodSchema, lr as SDKGenerateTextOnStepFinishCallback, lt as experimental_generateSpeech, m as CoreMessageRole, ma as SDKTranscriptionModelV3, mi as SDKRerankingModelV3, mn as SDKAgent, mr as SDKGeneratedFile, mt as gateway, n as TokenUsage, na as SDKToolExecutionOptions, ni as SDKPrepareReconnectToStreamRequest, nn as userModelMessageSchema, nr as SDKExperimentalVideoModelV3, nt as defaultEmbeddingSettingsMiddleware, o as generateUniqueId, oa as SDKToolLoopAgentSettings, oi as SDKProvider, on as wrapLanguageModel, or as SDKGenerateImageResult, ot as embedMany, p as CoreMessage, pa as SDKTranscriptionModelResponseMetadata, pi as SDKRerankingModel, pn as SDKAbstractChat, pr as SDKGeneratedAudioFile, pt as extractReasoningMiddleware, q as createMCPClient, qi as SDKTool, qn as SDKEmbedding, qr as SDKLanguageModelV3ToolCall, qt as simulateStreamingMiddleware, r as addUsage, ra as SDKToolLoopAgent, ri as SDKPrepareSendMessagesRequest, rn as validateUIMessages, rr as SDKFilePart, rt as defaultSettingsMiddleware, s as isModelRef, sa as SDKToolMessage, si as SDKProviderMetadata, sn as wrapProvider, sr as SDKGenerateObjectResult, st as experimental_createProviderRegistry, t as ModelRef, ta as SDKToolExecuteFunction, ti as SDKObjectStreamPart, tn as uiMessageChunkSchema, tr as SDKErrorHandler, tt as customProvider, u as BaseMessage, ua as SDKToolSet, ui as SDKReasoningUIPart, un as DeepPartial, ur as SDKGenerateTextResult, ut as experimental_generateVideo, v as SDKToolInvocationState, va as SDKTypedToolResult, vi as SDKSharedV3Warning, vn as SDKAssistantMessage, vr as SDKImageModelMiddleware, vt as generateText, w as ToolShimmerState, wa as SDKUIMessageStreamError, wi as SDKStaticToolCall, wn as SDKChatInit, wr as SDKImagePart, wt as hasToolCall, x as SDKWrapGenerateArgs, xa as SDKUIMessage, xi as SDKSpeechModel, xn as SDKCallSettings, xr as SDKImageModelUsage, xt as getToolName, y as SDKToolResultOutput, ya as SDKUIDataPartSchemas, yi as SDKSourceDocumentUIPart, yn as SDKAssistantModelMessage, yr as SDKImageModelProviderMetadata, yt as getStaticToolName, z as convertToModelMessages, zi as SDKSystemMessage, zn as SDKDefaultChatTransport, zr as SDKLanguageModelV3CallOptions, zt as pipeAgentUIStreamToResponse } from "./ai-runtime-DIwOEc6g.mjs";
|
|
2
|
+
export { AgentFinishReason, BaseMessage, ComplianceSignal, ComplianceSignalType, CoreMessage, CoreMessageRole, DeepPartial, Experimental_StdioMCPTransport, JSONSchema7, JSONValue, JsonToSseTransformStream, MessageRole, ModelRef, NoObjectGeneratedError, Output, RiskLevel, SDKAbstractChat, SDKAgent, SDKAgentCallParameters, SDKAgentStreamParameters, SDKAssistantContent, SDKAssistantMessage, SDKAssistantModelMessage, SDKAsyncIterableStream, SDKCallSettings, SDKCallWarning, SDKChatAddToolApproveResponseFunction, SDKChatInit, SDKChatOnDataCallback, SDKChatOnErrorCallback, SDKChatOnFinishCallback, SDKChatOnToolCallCallback, SDKChatRequestOptions, SDKChatState, SDKChatStatus, SDKChatTransport, SDKChunkDetector, SDKCompletionRequestOptions, SDKContentPart, SDKCreateUIMessage, SDKDataContent, SDKDataUIPart, SDKDefaultChatTransport, SDKDirectChatTransport, SDKDirectChatTransportOptions, SDKDynamicToolCall, SDKDynamicToolError, SDKDynamicToolResult, SDKEmbedManyResult, SDKEmbedResult, SDKEmbedding, SDKEmbeddingModel, SDKEmbeddingModelMiddleware, SDKEmbeddingModelUsage, SDKEmbeddingModelV3, SDKEmbeddingModelV3CallOptions, SDKEmbeddingModelV3Embedding, SDKEmbeddingModelV3Middleware, SDKErrorHandler, SDKExperimentalVideoModelV3, SDKFilePart, SDKFileUIPart, SDKFlexibleSchema, SDKGenerateImageResult, SDKGenerateObjectResult, SDKGenerateTextOnFinishCallback, SDKGenerateTextOnStepFinishCallback, SDKGenerateTextResult, SDKGenerateVideoPrompt, SDKGenerateVideoResult, SDKGeneratedAudioFile, SDKGeneratedFile, SDKHttpChatTransport, SDKHttpChatTransportInitOptions, SDKImageModel, SDKImageModelMiddleware, SDKImageModelProviderMetadata, SDKImageModelResponseMetadata, SDKImageModelUsage, SDKImageModelV3, SDKImageModelV3Middleware, SDKImagePart, SDKInferAgentUIMessage, SDKInferSchema, SDKInferToolInput, SDKInferToolOutput, SDKInferUIDataParts, SDKInferUIMessageChunk, SDKInferUITool, SDKInferUITools, SDKLanguageModel, SDKLanguageModelMiddleware, SDKLanguageModelRequestMetadata, SDKLanguageModelResponseMetadata, SDKLanguageModelUsage, SDKLanguageModelV3, SDKLanguageModelV3CallOptions, SDKLanguageModelV3Content, SDKLanguageModelV3GenerateResult, SDKLanguageModelV3Message, SDKLanguageModelV3Middleware, SDKLanguageModelV3Prompt, SDKLanguageModelV3Source, SDKLanguageModelV3StreamPart, SDKLanguageModelV3ToolCall, SDKLanguageModelV3ToolResult, SDKLanguageModelV3ToolResultOutput, SDKLogWarningsFunction, SDKMCPClient, SDKMessagePart, SDKModelMessage, SDKNoObjectGeneratedError, SDKOAuthClientProvider, SDKObjectStreamPart, SDKPrepareReconnectToStreamRequest, SDKPrepareSendMessagesRequest, SDKPrepareStepFunction, SDKPrepareStepResult, SDKProvider, SDKProviderMetadata, SDKProviderRegistryProvider, SDKProviderV3, SDKReasoningUIPart, SDKRepairTextFunction, SDKRerankResult, SDKRerankingModel, SDKRerankingModelV3, SDKSafeValidateUIMessagesResult, SDKSchema, SDKSharedV3ProviderMetadata, SDKSharedV3Warning, SDKSourceDocumentUIPart, SDKSourceUrlUIPart, SDKSpeechModel, SDKSpeechModelResponseMetadata, SDKSpeechModelV3, SDKStaticToolCall, SDKStaticToolError, SDKStaticToolOutputDenied, SDKStaticToolResult, SDKStepResult, SDKStepStartUIPart, SDKStopCondition, SDKStreamObjectOnFinishCallback, SDKStreamObjectResult, SDKStreamTextOnChunkCallback, SDKStreamTextOnErrorCallback, SDKStreamTextOnFinishCallback, SDKStreamTextOnStepFinishCallback, SDKStreamTextResult, SDKStreamTextTransform, SDKSystemMessage, SDKSystemModelMessage, SDKTelemetrySettings, SDKTextPart, SDKTextStreamChatTransport, SDKTextStreamPart, SDKTextUIPart, SDKTimeoutConfiguration, SDKTool, SDKToolApprovalRequest, SDKToolApprovalRequestOutput, SDKToolApprovalResponse, SDKToolCallPart, SDKToolCallRepairFunction, SDKToolChoice, SDKToolContent, SDKToolExecuteFunction, SDKToolExecutionOptions, SDKToolInvocationState, SDKToolLoopAgent, SDKToolLoopAgentOnFinishCallback, SDKToolLoopAgentOnStepFinishCallback, SDKToolLoopAgentSettings, SDKToolMessage, SDKToolModelMessage, SDKToolResultOutput, SDKToolResultPart, SDKToolSet, SDKToolUIPart, SDKTranscriptionModel, SDKTranscriptionModelResponseMetadata, SDKTranscriptionModelV3, SDKTransformParamsArgs, SDKTypedToolCall, SDKTypedToolError, SDKTypedToolOutputDenied, SDKTypedToolResult, SDKUIDataPartSchemas, SDKUIDataTypes, SDKUIMessage, SDKUIMessageChunk, SDKUIMessagePart, SDKUIMessageStreamError, SDKUIMessageStreamOnFinishCallback, SDKUIMessageStreamOptions, SDKUIMessageStreamWriter, SDKUITool, SDKUIToolInvocation, SDKUITools, SDKUseCompletionOptions, SDKUserContent, SDKUserMessage, SDKUserModelMessage, SDKWarning, SDKWrapGenerateArgs, SDKWrapStreamArgs, SerialJobExecutor, StepFinishReason, TokenUsage, ToolLoopAgent, ToolShimmerState, UI_MESSAGE_STREAM_HEADERS, addToolInputExamplesMiddleware, addUsage, anthropic, asSchema, assistantModelMessageSchema, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertFromSDKUsage, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createAnthropic, createEmptyUsage, createGateway, createGoogleGenerativeAI, createIdGenerator, createMCPClient, createOpenAI, createOpenAICompatible, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, createXai, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, dynamicTool, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, experimental_generateSpeech, experimental_generateVideo, experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, gateway, generateId, generateImage, generateObject, generateText, generateUniqueId, getStaticToolName, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, google, hasToolCall, isDataUIPart, isDeepEqualData, isFileUIPart, isModelRef, isReasoningUIPart, isTextUIPart, isToolOrDynamicToolUIPart, isToolUIPart, jsonSchema, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, openai, parseJsonEventStream, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, rerank, resolveModelId, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, tool, toolModelMessageSchema, uiMessageChunkSchema, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider, xai, zodSchema };
|
package/dist/shared.mjs
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { $ as generateObject, A as createOpenAI, At as smoothStream, B as dynamicTool, Bt as wrapEmbeddingModel, C as createAgentUIStream, Ct as pipeUIMessageStreamToResponse, D as createGoogleGenerativeAI, Dt as safeValidateUIMessages, E as createGateway, Et as rerank, F as createUIMessageStreamResponse, Ft as tool, G as experimental_generateSpeech, Gt as zodSchema, H as embedMany, Ht as wrapLanguageModel, I as createXai, It as toolModelMessageSchema, J as extractJsonMiddleware, K as experimental_generateVideo, L as customProvider, Lt as uiMessageChunkSchema, M as createProviderRegistry, Mt as streamObject, N as createTextStreamResponse, Nt as streamText, O as createIdGenerator, Ot as simulateReadableStream, P as createUIMessageStream, Pt as systemModelMessageSchema, Q as generateImage, R as defaultEmbeddingSettingsMiddleware, Rt as userModelMessageSchema, S as cosineSimilarity, St as pipeTextStreamToResponse, T as createAnthropic, Tt as readUIMessageStream, U as experimental_createProviderRegistry, Ut as wrapProvider, V as embed, Vt as wrapImageModel, W as experimental_customProvider, Wt as xai, X as gateway, Y as extractReasoningMiddleware, Z as generateId, _ as assistantModelMessageSchema, _t as modelMessageSchema, a as isModelRef, at as google, b as convertFileListToFileUIParts, bt as parsePartialJson, c as JsonToSseTransformStream, ct as isDeepEqualData, d as SerialJobExecutor, dt as isTextUIPart, et as generateText, f as ToolLoopAgent, ft as isToolOrDynamicToolUIPart, g as asSchema, gt as lastAssistantMessageIsCompleteWithToolCalls, h as anthropic, ht as lastAssistantMessageIsCompleteWithApprovalResponses, i as generateUniqueId, it as getToolOrDynamicToolName, j as createOpenAICompatible, jt as stepCountIs, k as createMCPClient, kt as simulateStreamingMiddleware, l as NoObjectGeneratedError, lt as isFileUIPart, m as addToolInputExamplesMiddleware, mt as jsonSchema, n as convertFromSDKUsage, nt as getTextFromDataUrl, o as resolveModelId, ot as hasToolCall, p as UI_MESSAGE_STREAM_HEADERS, pt as isToolUIPart, q as experimental_transcribe, r as createEmptyUsage, rt as getToolName, s as Experimental_StdioMCPTransport, st as isDataUIPart, t as addUsage, tt as getStaticToolName, u as Output, ut as isReasoningUIPart, v as callCompletionApi, vt as openai, w as createAgentUIStreamResponse, wt as pruneMessages, x as convertToModelMessages, xt as pipeAgentUIStreamToResponse, y as consumeStream, yt as parseJsonEventStream, z as defaultSettingsMiddleware, zt as validateUIMessages } from "./ai-runtime-CDzQztTt.mjs";
|
|
2
|
+
|
|
3
|
+
export { Experimental_StdioMCPTransport, JsonToSseTransformStream, NoObjectGeneratedError, Output, SerialJobExecutor, ToolLoopAgent, UI_MESSAGE_STREAM_HEADERS, addToolInputExamplesMiddleware, addUsage, anthropic, asSchema, assistantModelMessageSchema, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertFromSDKUsage, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createAnthropic, createEmptyUsage, createGateway, createGoogleGenerativeAI, createIdGenerator, createMCPClient, createOpenAI, createOpenAICompatible, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, createXai, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, dynamicTool, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, experimental_generateSpeech, experimental_generateVideo, experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, gateway, generateId, generateImage, generateObject, generateText, generateUniqueId, getStaticToolName, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, google, hasToolCall, isDataUIPart, isDeepEqualData, isFileUIPart, isModelRef, isReasoningUIPart, isTextUIPart, isToolOrDynamicToolUIPart, isToolUIPart, jsonSchema, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, openai, parseJsonEventStream, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, rerank, resolveModelId, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, tool, toolModelMessageSchema, uiMessageChunkSchema, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider, xai, zodSchema };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { C as SmoothStreamConfig, D as StreamController, E as StepLimitConfig, O as StreamControllerConfig, S as CostEntry, T as StepCounter, _ as createBudgetGuardedOnFinish, a as createSmoothStreamTransform, b as BudgetGuardConfig, c as withSmoothStream, d as createStepLimitCondition, f as withStepLimit, g as createBudgetChecker, h as calculateCost, i as mergeStreamConfigs, k as TokenUsage, l as StepLimitExceededError, m as OnFinishResult, n as createProdStreamController, o as smoothTextGenerator, p as DEFAULT_COST_TABLE, r as createStreamController, s as splitIntoChunks, t as createDevStreamController, u as createStepCounter, v as estimateCost, w as SmoothStreamTransform, x as BudgetLimit, y as BudgetCheckResult } from "./controller-Y0NGosbJ.mjs";
|
|
2
|
+
export { type BudgetCheckResult, type BudgetGuardConfig, type BudgetLimit, type CostEntry, DEFAULT_COST_TABLE, type OnFinishResult, type SmoothStreamConfig, type SmoothStreamTransform, type StepCounter, type StepLimitConfig, StepLimitExceededError, type StreamController, type StreamControllerConfig, type TokenUsage, calculateCost, createBudgetChecker, createBudgetGuardedOnFinish, createDevStreamController, createProdStreamController, createSmoothStreamTransform, createStepCounter, createStepLimitCondition, createStreamController, estimateCost, mergeStreamConfigs, smoothTextGenerator, splitIntoChunks, withSmoothStream, withStepLimit };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { a as estimateCost, i as createBudgetGuardedOnFinish, n as calculateCost, r as createBudgetChecker, t as DEFAULT_COST_TABLE } from "./budget-guard-gyhJS00s.mjs";
|
|
2
|
+
import { a as createSmoothStreamTransform, c as withSmoothStream, d as createStepLimitCondition, f as withStepLimit, i as mergeStreamConfigs, l as StepLimitExceededError, n as createProdStreamController, o as smoothTextGenerator, r as createStreamController, s as splitIntoChunks, t as createDevStreamController, u as createStepCounter } from "./controller-BOy3-xbC.mjs";
|
|
3
|
+
|
|
4
|
+
export { DEFAULT_COST_TABLE, StepLimitExceededError, calculateCost, createBudgetChecker, createBudgetGuardedOnFinish, createDevStreamController, createProdStreamController, createSmoothStreamTransform, createStepCounter, createStepLimitCondition, createStreamController, estimateCost, mergeStreamConfigs, smoothTextGenerator, splitIntoChunks, withSmoothStream, withStepLimit };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import "./ai-runtime-DIwOEc6g.mjs";
|
|
2
|
+
import { _ as StreamPartType, a as AnyStreamPart, c as CodeDeltaStreamPart, d as FinishStreamPart, f as IdStreamPart, g as StreamPart, h as StatusStreamPart, i as streamArtifact, l as CustomUIDataTypes, m as ProgressStreamPart, n as createArtifactStreamWriter, o as ArtifactStreamWriter, p as KindStreamPart, r as createBufferedStreamWriter, s as ClearStreamPart, t as DataStreamWriter, u as ErrorStreamPart, v as TextDeltaStreamPart, y as TitleStreamPart } from "./protocol-DfBiEsnl.mjs";
|
|
3
|
+
import { C as createParallelStep, D as executeMultiStepStream, E as createToolStep, S as createMultiStepStreamResponse, T as createTextStep, _ as MultiStepWriter, a as ResumeMessage, b as createConditionalStep, c as buildContinuationPrompt, d as createInMemoryStorage, f as createStreamStateTracker, g as MultiStepStreamOptions, h as MultiStepStreamEvent, i as ResumeDetectionResult, l as createAutoResume, m as restoreDataStreamMessages, n as AutoResumeHandler, o as ResumeStorage, p as detectResumeState, r as PendingToolCall, s as StreamResumeState, t as AutoResumeConfig, u as createExternalStorage, v as StepDefinition, w as createStepPipeline, x as createMultiStepStream, y as chainSteps } from "./auto-resume-BpUNbPtp.mjs";
|
|
4
|
+
export { type AnyStreamPart, type ArtifactStreamWriter, type AutoResumeConfig, type AutoResumeHandler, type ClearStreamPart, type CodeDeltaStreamPart, type CustomUIDataTypes, type DataStreamWriter, type ErrorStreamPart, type FinishStreamPart, type IdStreamPart, type KindStreamPart, type MultiStepStreamEvent, type MultiStepStreamOptions, MultiStepWriter, type PendingToolCall, type ProgressStreamPart, type ResumeDetectionResult, type ResumeMessage, type ResumeStorage, type StatusStreamPart, type StepDefinition, type StreamPart, type StreamPartType, type StreamResumeState, type TextDeltaStreamPart, type TitleStreamPart, buildContinuationPrompt, chainSteps, createArtifactStreamWriter, createAutoResume, createBufferedStreamWriter, createConditionalStep, createExternalStorage, createInMemoryStorage, createMultiStepStream, createMultiStepStreamResponse, createParallelStep, createStepPipeline, createStreamStateTracker, createTextStep, createToolStep, detectResumeState, executeMultiStepStream, restoreDataStreamMessages, streamArtifact };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { _ as executeMultiStepStream, a as createStreamStateTracker, b as streamArtifact, c as MultiStepWriter, d as createMultiStepStream, f as createMultiStepStreamResponse, g as createToolStep, h as createTextStep, i as createInMemoryStorage, l as chainSteps, m as createStepPipeline, n as createAutoResume, o as detectResumeState, p as createParallelStep, r as createExternalStorage, s as restoreDataStreamMessages, t as buildContinuationPrompt, u as createConditionalStep, v as createArtifactStreamWriter, y as createBufferedStreamWriter } from "./auto-resume-BuFRNvAX.mjs";
|
|
2
|
+
|
|
3
|
+
export { MultiStepWriter, buildContinuationPrompt, chainSteps, createArtifactStreamWriter, createAutoResume, createBufferedStreamWriter, createConditionalStep, createExternalStorage, createInMemoryStorage, createMultiStepStream, createMultiStepStreamResponse, createParallelStep, createStepPipeline, createStreamStateTracker, createTextStep, createToolStep, detectResumeState, executeMultiStepStream, restoreDataStreamMessages, streamArtifact };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { n as RedisClientExtended } from "./types-By-r93bE.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/streaming/infra/resilience/index.d.ts
|
|
4
|
+
interface StreamCheckpoint {
|
|
5
|
+
streamId: string;
|
|
6
|
+
sequenceNumber: number;
|
|
7
|
+
accumulatedText: string;
|
|
8
|
+
toolCalls: StreamToolCall[];
|
|
9
|
+
tokenUsage: {
|
|
10
|
+
promptTokens: number;
|
|
11
|
+
completionTokens: number;
|
|
12
|
+
};
|
|
13
|
+
status: 'active' | 'paused' | 'completed' | 'failed';
|
|
14
|
+
createdAt: number;
|
|
15
|
+
updatedAt: number;
|
|
16
|
+
error?: string;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
interface StreamToolCall {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
args: string;
|
|
23
|
+
result?: string;
|
|
24
|
+
}
|
|
25
|
+
interface SequencedChunk {
|
|
26
|
+
sequenceNumber: number;
|
|
27
|
+
type: 'text' | 'tool-call' | 'tool-result' | 'finish' | 'error';
|
|
28
|
+
data: unknown;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
}
|
|
31
|
+
interface ResumableStreamOptions {
|
|
32
|
+
redis: RedisClientExtended;
|
|
33
|
+
prefix?: string;
|
|
34
|
+
checkpointInterval?: number;
|
|
35
|
+
checkpointTTL?: number;
|
|
36
|
+
chunkBufferSize?: number;
|
|
37
|
+
enableChunkBuffer?: boolean;
|
|
38
|
+
}
|
|
39
|
+
declare function createStreamCheckpointStore(redis: RedisClientExtended, options?: {
|
|
40
|
+
prefix?: string;
|
|
41
|
+
defaultTTL?: number;
|
|
42
|
+
}): {
|
|
43
|
+
save(checkpoint: StreamCheckpoint, ttl?: number): Promise<void>;
|
|
44
|
+
load(streamId: string): Promise<StreamCheckpoint | null>;
|
|
45
|
+
exists(streamId: string): Promise<boolean>;
|
|
46
|
+
delete(streamId: string): Promise<void>;
|
|
47
|
+
updateStatus(streamId: string, status: StreamCheckpoint["status"], error?: string): Promise<void>;
|
|
48
|
+
appendChunks(streamId: string, chunks: SequencedChunk[]): Promise<void>;
|
|
49
|
+
getChunks(streamId: string, fromSequence: number): Promise<SequencedChunk[]>;
|
|
50
|
+
trimChunks(streamId: string, keepLast: number): Promise<void>;
|
|
51
|
+
extend(streamId: string, ttl?: number): Promise<void>;
|
|
52
|
+
};
|
|
53
|
+
declare function createResumableStream(options: ResumableStreamOptions): {
|
|
54
|
+
start<T>(sourceStream: AsyncIterable<T>, options?: {
|
|
55
|
+
streamId?: string;
|
|
56
|
+
metadata?: Record<string, unknown>;
|
|
57
|
+
onCheckpoint?: (checkpoint: StreamCheckpoint) => void;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
streamId: string;
|
|
60
|
+
stream: AsyncGenerator<T>;
|
|
61
|
+
getCheckpoint: () => Promise<StreamCheckpoint | null>;
|
|
62
|
+
}>;
|
|
63
|
+
resume<T>(streamId: string, newSourceStream: AsyncIterable<T>, options?: {
|
|
64
|
+
replayBufferedChunks?: boolean;
|
|
65
|
+
onReplay?: (chunk: SequencedChunk) => void;
|
|
66
|
+
}): Promise<{
|
|
67
|
+
checkpoint: StreamCheckpoint;
|
|
68
|
+
stream: AsyncGenerator<T>;
|
|
69
|
+
skippedChunks: number;
|
|
70
|
+
}>;
|
|
71
|
+
pause(streamId: string): Promise<void>;
|
|
72
|
+
getCheckpoint(streamId: string): Promise<StreamCheckpoint | null>;
|
|
73
|
+
canResume(streamId: string): Promise<boolean>;
|
|
74
|
+
delete(streamId: string): Promise<void>;
|
|
75
|
+
keepAlive(streamId: string, ttl?: number): Promise<void>;
|
|
76
|
+
getStore(): {
|
|
77
|
+
save(checkpoint: StreamCheckpoint, ttl?: number): Promise<void>;
|
|
78
|
+
load(streamId: string): Promise<StreamCheckpoint | null>;
|
|
79
|
+
exists(streamId: string): Promise<boolean>;
|
|
80
|
+
delete(streamId: string): Promise<void>;
|
|
81
|
+
updateStatus(streamId: string, status: StreamCheckpoint["status"], error?: string): Promise<void>;
|
|
82
|
+
appendChunks(streamId: string, chunks: SequencedChunk[]): Promise<void>;
|
|
83
|
+
getChunks(streamId: string, fromSequence: number): Promise<SequencedChunk[]>;
|
|
84
|
+
trimChunks(streamId: string, keepLast: number): Promise<void>;
|
|
85
|
+
extend(streamId: string, ttl?: number): Promise<void>;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
interface RetryConfig {
|
|
89
|
+
maxRetries: number;
|
|
90
|
+
initialDelayMs: number;
|
|
91
|
+
maxDelayMs: number;
|
|
92
|
+
backoffMultiplier: number;
|
|
93
|
+
retryableErrors?: string[];
|
|
94
|
+
}
|
|
95
|
+
declare function createStreamRetry(config?: Partial<RetryConfig>): {
|
|
96
|
+
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
97
|
+
wrapStream<T>(createStream: () => AsyncIterable<T>, options?: {
|
|
98
|
+
onRetry?: (attempt: number, error: unknown) => void;
|
|
99
|
+
resumeFrom?: number;
|
|
100
|
+
}): AsyncGenerator<T>;
|
|
101
|
+
};
|
|
102
|
+
type CircuitState = 'closed' | 'open' | 'half-open';
|
|
103
|
+
interface CircuitBreakerConfig {
|
|
104
|
+
failureThreshold: number;
|
|
105
|
+
resetTimeoutMs: number;
|
|
106
|
+
halfOpenRequests: number;
|
|
107
|
+
}
|
|
108
|
+
declare function createCircuitBreaker(config?: Partial<CircuitBreakerConfig>): {
|
|
109
|
+
getState(): CircuitState;
|
|
110
|
+
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
111
|
+
reset(): void;
|
|
112
|
+
getStats(): {
|
|
113
|
+
state: CircuitState;
|
|
114
|
+
failures: number;
|
|
115
|
+
lastFailureTime: Date | null;
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
//#endregion
|
|
119
|
+
export { CircuitBreakerConfig, CircuitState, type RedisClientExtended as RedisClient, ResumableStreamOptions, RetryConfig, SequencedChunk, StreamCheckpoint, StreamToolCall, createCircuitBreaker, createResumableStream, createStreamCheckpointStore, createStreamRetry };
|
|
120
|
+
//# sourceMappingURL=streaming-infra-resilience.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-infra-resilience.d.mts","names":[],"sources":["../src/streaming/infra/resilience/index.ts"],"mappings":";;;UAgBiB,gBAAA;EAEf,QAAA;EAEA,cAAA;EAEA,eAAA;EAEA,SAAA,EAAW,cAAA;EAEX,UAAA;IACE,YAAA;IACA,gBAAA;EAAA;EAGF,MAAA;EAEA,SAAA;EAEA,SAAA;EAEA,KAAA;EAEA,QAAA,GAAW,MAAA;AAAA;AAAA,UAMI,cAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;AAAA;AAAA,UAMe,cAAA;EACf,cAAA;EACA,IAAA;EACA,IAAA;EACA,SAAA;AAAA;AAAA,UASe,sBAAA;EAEf,KAAA,EAAO,mBAAA;EAEP,MAAA;EAEA,kBAAA;EAEA,aAAA;EAEA,eAAA;EAEA,iBAAA;AAAA;AAAA,iBAqBc,2BAAA,CACd,KAAA,EAAO,mBAAA,EACP,OAAA;EACE,MAAA;EACA,UAAA;AAAA;mBAcuB,gBAAA,EAAgB,GAAA,YAAiB,OAAA;0BAK1B,OAAA,CAAQ,gBAAA;4BAMN,OAAA;4BAIA,OAAA;iCAMd,MAAA,EACR,gBAAA,YAA0B,KAAA,YAEjC,OAAA;iCAUgC,MAAA,EAAU,cAAA,KAAmB,OAAA;8BAKhC,YAAA,WAAyB,OAAA,CAAQ,cAAA;+BAOhC,QAAA,WAAqB,OAAA;2BAIzB,GAAA,YAAiB,OAAA;AAAA;AAAA,iBA+BlC,qBAAA,CAAsB,OAAA,EAAS,sBAAA;WAuB9B,YAAA,EACG,aAAA,CAAc,CAAA,GAAE,OAAA;IAE5B,QAAA;IACA,QAAA,GAAW,MAAA;IACX,YAAA,IAAgB,UAAA,EAAY,gBAAA;EAAA,IAE7B,OAAA;IACD,QAAA;IACA,MAAA,EAAQ,cAAA,CAAe,CAAA;IACvB,aAAA,QAAqB,OAAA,CAAQ,gBAAA;EAAA;YA2HjB,QAAA,UACI,eAAA,EACC,aAAA,CAAc,CAAA,GAAE,OAAA;IAE/B,oBAAA;IACA,QAAA,IAAY,KAAA,EAAO,cAAA;EAAA,IAEpB,OAAA;IACD,UAAA,EAAY,gBAAA;IACZ,MAAA,EAAQ,cAAA,CAAe,CAAA;IACvB,aAAA;EAAA;2BAiE6B,OAAA;mCAOQ,OAAA,CAAQ,gBAAA;+BAOZ,OAAA;4BAQH,OAAA;8BAOA,GAAA,YAAiB,OAAA;;qBArV1B,gBAAA,EAAgB,GAAA,YAAiB,OAAA;4BAK1B,OAAA,CAAQ,gBAAA;8BAMN,OAAA;8BAIA,OAAA;mCAMd,MAAA,EACR,gBAAA,YAA0B,KAAA,YAEjC,OAAA;mCAUgC,MAAA,EAAU,cAAA,KAAmB,OAAA;gCAKhC,YAAA,WAAyB,OAAA,CAAQ,cAAA;iCAOhC,QAAA,WAAqB,OAAA;6BAIzB,GAAA,YAAiB,OAAA;EAAA;AAAA;AAAA,UAuTjC,WAAA;EACf,UAAA;EACA,cAAA;EACA,UAAA;EACA,iBAAA;EACA,eAAA;AAAA;AAAA,iBAcc,iBAAA,CAAkB,MAAA,GAAQ,OAAA,CAAQ,WAAA;aAwB/B,EAAA,QAAY,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA;gBAwB7B,YAAA,QACG,aAAA,CAAc,CAAA,GAAE,OAAA;IAElC,OAAA,IAAW,OAAA,UAAiB,KAAA;IAC5B,UAAA;EAAA,IAED,cAAA,CAAe,CAAA;AAAA;AAAA,KA6CV,YAAA;AAAA,UAKK,oBAAA;EACf,gBAAA;EACA,cAAA;EACA,gBAAA;AAAA;AAAA,iBAMc,oBAAA,CAAqB,MAAA,GAAQ,OAAA,CAAQ,oBAAA;cASrC,YAAA;aASG,EAAA,QAAY,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA"}
|