@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,503 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Research trace storage with cost & latency tracking
|
|
3
|
+
*
|
|
4
|
+
* Extends the artifact pattern for multi-model research runs:
|
|
5
|
+
* - Per-step artifact storage (context expansion → reasoning → verification)
|
|
6
|
+
* - Cost tracking per model (configurable via PipelineModelConfig.costRates)
|
|
7
|
+
* - Latency profiling
|
|
8
|
+
* - Fast indexing for dashboard queries
|
|
9
|
+
*
|
|
10
|
+
* Storage pattern:
|
|
11
|
+
* - File-based for prototype (like artifacts.ts)
|
|
12
|
+
* - Production: Neon Postgres + Upstash Redis + R2
|
|
13
|
+
*
|
|
14
|
+
* @module @od-oneapp/ai-platform/research/trace
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
18
|
+
import { promises as fs } from 'node:fs';
|
|
19
|
+
import { join, resolve } from 'node:path';
|
|
20
|
+
|
|
21
|
+
import { logError } from '@repo/shared/logs';
|
|
22
|
+
|
|
23
|
+
import type { ResearchTier } from './types';
|
|
24
|
+
|
|
25
|
+
/** Directory for storing research traces. */
|
|
26
|
+
const TRACES_DIR = process.env.NEXT_AI_TRACES_PATH ?? '/tmp/next-ai-traces';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Validates run ID to prevent path traversal attacks.
|
|
30
|
+
* Format: {timestamp}-{12-char-hex}
|
|
31
|
+
* Example: 1733875200000-a1b2c3d4e5f6
|
|
32
|
+
*
|
|
33
|
+
* @param runId - Run ID to validate.
|
|
34
|
+
* @returns `true` if run ID is valid, `false` otherwise.
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
function validateRunId(runId: string): boolean {
|
|
38
|
+
// runId format: timestamp-hash (e.g., 1733875200000-a1b2c3d4e5f6)
|
|
39
|
+
const runIdRegex = /^[0-9]+-[0-9a-f]{12}$/i;
|
|
40
|
+
return runIdRegex.test(runId);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Safely constructs run path with validation.
|
|
45
|
+
* Prevents path traversal attacks by ensuring paths stay within TRACES_DIR.
|
|
46
|
+
*
|
|
47
|
+
* @param runId - Run ID (validated).
|
|
48
|
+
* @param filename - Optional filename to append.
|
|
49
|
+
* @returns Resolved path or `null` if validation fails.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
function getRunPath(runId: string, filename?: string): string | null {
|
|
53
|
+
if (!validateRunId(runId)) {
|
|
54
|
+
logError('Invalid run ID format', { runId });
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const runPath = filename
|
|
59
|
+
? resolve(join(TRACES_DIR, runId, filename))
|
|
60
|
+
: resolve(join(TRACES_DIR, runId));
|
|
61
|
+
const baseDir = resolve(TRACES_DIR);
|
|
62
|
+
|
|
63
|
+
// Ensure path is within TRACES_DIR
|
|
64
|
+
if (!runPath.startsWith(baseDir)) {
|
|
65
|
+
logError('Path traversal attempt detected', { runId });
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return runPath;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Pipeline stage kind for trace tracking.
|
|
74
|
+
* Uses role-based names instead of provider-specific names.
|
|
75
|
+
*/
|
|
76
|
+
export type TraceStepKind = 'context-expansion' | 'reasoning' | 'verification';
|
|
77
|
+
|
|
78
|
+
export interface TraceStep {
|
|
79
|
+
/** Step identifier. */
|
|
80
|
+
id: string;
|
|
81
|
+
/** Pipeline stage kind. */
|
|
82
|
+
kind: TraceStepKind;
|
|
83
|
+
/** Timestamp when step started (Unix epoch milliseconds). */
|
|
84
|
+
startAt: number;
|
|
85
|
+
/** Timestamp when step ended (Unix epoch milliseconds). */
|
|
86
|
+
endAt: number;
|
|
87
|
+
/** Step latency in milliseconds. */
|
|
88
|
+
latencyMs: number;
|
|
89
|
+
/** Model used for this step. */
|
|
90
|
+
model?: string;
|
|
91
|
+
/** Input tokens consumed. */
|
|
92
|
+
inputTokens?: number;
|
|
93
|
+
/** Output tokens generated. */
|
|
94
|
+
outputTokens?: number;
|
|
95
|
+
/** Estimated cost in USD. */
|
|
96
|
+
costUSD?: number;
|
|
97
|
+
/** Step artifacts (in-memory). */
|
|
98
|
+
artifacts: Record<string, unknown>;
|
|
99
|
+
/** Artifact keys (file paths or R2 keys). */
|
|
100
|
+
artifactKeys: string[];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Complete research run trace information.
|
|
105
|
+
* Tracks full pipeline execution with all steps, cost, and latency.
|
|
106
|
+
*/
|
|
107
|
+
export interface TraceRun {
|
|
108
|
+
/** Unique run identifier. */
|
|
109
|
+
runId: string;
|
|
110
|
+
/** Application/client identifier. */
|
|
111
|
+
app: string;
|
|
112
|
+
/** Research question. */
|
|
113
|
+
question: string;
|
|
114
|
+
/** Research tier used. */
|
|
115
|
+
tier: ResearchTier;
|
|
116
|
+
/** Timestamp when run started (Unix epoch milliseconds). */
|
|
117
|
+
startedAt: number;
|
|
118
|
+
/** Timestamp when run ended (Unix epoch milliseconds). */
|
|
119
|
+
endedAt?: number;
|
|
120
|
+
/** Total latency in milliseconds. */
|
|
121
|
+
totalLatencyMs?: number;
|
|
122
|
+
/** Total cost in USD. */
|
|
123
|
+
totalCostUSD?: number;
|
|
124
|
+
/** Array of flag strings. */
|
|
125
|
+
flags?: string[];
|
|
126
|
+
/** Array of research steps. */
|
|
127
|
+
steps: TraceStep[];
|
|
128
|
+
/** Optional metadata. */
|
|
129
|
+
metadata?: Record<string, unknown>;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Default token-based cost rates ($/1k tokens).
|
|
134
|
+
* Override via `PipelineModelConfig.costRates` or the `customRates` param on `estimateCost`.
|
|
135
|
+
*/
|
|
136
|
+
export const DEFAULT_COST_RATES: Record<
|
|
137
|
+
string,
|
|
138
|
+
{ input?: number; output?: number; flat?: number }
|
|
139
|
+
> = {
|
|
140
|
+
'perplexity-latest': { flat: 0.002 },
|
|
141
|
+
'llama-3.1-sonar-large-128k-online': { flat: 0.002 },
|
|
142
|
+
'gpt-4-turbo': { input: 0.01, output: 0.03 },
|
|
143
|
+
'gpt-5': { input: 0.01, output: 0.03 },
|
|
144
|
+
'claude-3-5-sonnet-20241022': { input: 0.003, output: 0.015 },
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Estimates cost for a model call based on token usage.
|
|
149
|
+
*
|
|
150
|
+
* @param model - Model identifier.
|
|
151
|
+
* @param inputTokens - Input tokens consumed (defaults to 0).
|
|
152
|
+
* @param outputTokens - Output tokens generated (defaults to 0).
|
|
153
|
+
* @returns Estimated cost in USD.
|
|
154
|
+
* @remarks Cost rates ($/1k tokens):
|
|
155
|
+
* - Perplexity: $0.002 flat per call
|
|
156
|
+
* - Claude 3.5 Sonnet: $0.003 input, $0.015 output
|
|
157
|
+
* - GPT-4 Turbo: $0.01 input, $0.03 output
|
|
158
|
+
* Returns 0 if model is not in cost rates table.
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* const cost = estimateCost('claude-3-5-sonnet-20241022', 1000, 500);
|
|
162
|
+
* // Returns: (1000/1000 * 0.003) + (500/1000 * 0.015) = 0.0105
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export function estimateCost(
|
|
166
|
+
model: string,
|
|
167
|
+
inputTokens = 0,
|
|
168
|
+
outputTokens = 0,
|
|
169
|
+
customRates?: Record<string, { input?: number; output?: number; flat?: number }>,
|
|
170
|
+
): number {
|
|
171
|
+
const rates = customRates ? { ...DEFAULT_COST_RATES, ...customRates } : DEFAULT_COST_RATES;
|
|
172
|
+
const rate = rates[model];
|
|
173
|
+
if (!rate) return 0;
|
|
174
|
+
|
|
175
|
+
if (rate.flat) return rate.flat;
|
|
176
|
+
|
|
177
|
+
return (inputTokens / 1000) * (rate.input ?? 0) + (outputTokens / 1000) * (rate.output ?? 0);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Ensures traces directory exists.
|
|
182
|
+
* Creates directory recursively if it doesn't exist.
|
|
183
|
+
* @internal
|
|
184
|
+
*/
|
|
185
|
+
async function ensureTracesDir(): Promise<void> {
|
|
186
|
+
try {
|
|
187
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- TRACES_DIR is validated via environment variable with safe default
|
|
188
|
+
await fs.mkdir(TRACES_DIR, { recursive: true });
|
|
189
|
+
} catch (error) {
|
|
190
|
+
logError('Failed to create traces directory', { error });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Starts a new research run trace.
|
|
196
|
+
* Creates a new TraceRun with generated runId and initial timestamp.
|
|
197
|
+
*
|
|
198
|
+
* @param question - Research question.
|
|
199
|
+
* @param tier - Research tier.
|
|
200
|
+
* @param app - Application/client identifier (defaults to 'research-agent').
|
|
201
|
+
* @returns New TraceRun object.
|
|
202
|
+
* @example
|
|
203
|
+
* ```ts
|
|
204
|
+
* const run = startRun('What is quantum computing?', 'balanced', 'my-app');
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
export function startRun(question: string, tier: ResearchTier, app = 'research-agent'): TraceRun {
|
|
208
|
+
const timestamp = Date.now();
|
|
209
|
+
const hash = createHash('sha256').update(`${timestamp}-${question}`).digest('hex').slice(0, 12);
|
|
210
|
+
|
|
211
|
+
return {
|
|
212
|
+
runId: `${timestamp}-${hash}`,
|
|
213
|
+
app,
|
|
214
|
+
question,
|
|
215
|
+
tier,
|
|
216
|
+
startedAt: timestamp,
|
|
217
|
+
steps: [],
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Starts a new research step trace.
|
|
223
|
+
* Creates a new TraceStep with generated ID and start timestamp.
|
|
224
|
+
*
|
|
225
|
+
* @param kind - Pipeline stage kind ('context-expansion', 'reasoning', or 'verification').
|
|
226
|
+
* @param model - Optional model identifier.
|
|
227
|
+
* @returns New TraceStep object.
|
|
228
|
+
* @example
|
|
229
|
+
* ```ts
|
|
230
|
+
* const step = startStep('context-expansion', 'llama-3.1-sonar-large-128k-online');
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
export function startStep(kind: TraceStepKind, model?: string): TraceStep {
|
|
234
|
+
return {
|
|
235
|
+
id: randomUUID(),
|
|
236
|
+
kind,
|
|
237
|
+
startAt: Date.now(),
|
|
238
|
+
endAt: 0,
|
|
239
|
+
latencyMs: 0,
|
|
240
|
+
model,
|
|
241
|
+
artifacts: {},
|
|
242
|
+
artifactKeys: [],
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Ends a research step with usage metrics.
|
|
248
|
+
* Calculates latency and cost, updates step with token usage.
|
|
249
|
+
*
|
|
250
|
+
* @param step - Step to end.
|
|
251
|
+
* @param usage - Optional usage metrics (inputTokens, outputTokens, costUSD).
|
|
252
|
+
* @returns Updated step with end timestamp, latency, and cost.
|
|
253
|
+
* @example
|
|
254
|
+
* ```ts
|
|
255
|
+
* const completedStep = endStep(step, {
|
|
256
|
+
* inputTokens: 1000,
|
|
257
|
+
* outputTokens: 500
|
|
258
|
+
* });
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
export function endStep(
|
|
262
|
+
step: TraceStep,
|
|
263
|
+
usage?: { inputTokens?: number; outputTokens?: number; costUSD?: number },
|
|
264
|
+
): TraceStep {
|
|
265
|
+
step.endAt = Date.now();
|
|
266
|
+
step.latencyMs = step.endAt - step.startAt;
|
|
267
|
+
|
|
268
|
+
if (usage?.inputTokens) step.inputTokens = usage.inputTokens;
|
|
269
|
+
if (usage?.outputTokens) step.outputTokens = usage.outputTokens;
|
|
270
|
+
if (usage?.costUSD !== undefined) {
|
|
271
|
+
step.costUSD = usage.costUSD;
|
|
272
|
+
} else if (step.model) {
|
|
273
|
+
step.costUSD = estimateCost(step.model, step.inputTokens ?? 0, step.outputTokens ?? 0);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return step;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Ends a research run and calculates totals.
|
|
281
|
+
* Computes total latency and cost from all steps.
|
|
282
|
+
*
|
|
283
|
+
* @param run - Run to end.
|
|
284
|
+
* @returns Updated run with end timestamp, total latency, and total cost.
|
|
285
|
+
* @example
|
|
286
|
+
* ```ts
|
|
287
|
+
* const completedRun = endRun(run);
|
|
288
|
+
* console.log(`Total cost: $${completedRun.totalCostUSD}`);
|
|
289
|
+
* ```
|
|
290
|
+
*/
|
|
291
|
+
export function endRun(run: TraceRun): TraceRun {
|
|
292
|
+
run.endedAt = Date.now();
|
|
293
|
+
run.totalLatencyMs = run.endedAt - run.startedAt;
|
|
294
|
+
run.totalCostUSD = run.steps.reduce((acc, s) => acc + (s.costUSD ?? 0), 0);
|
|
295
|
+
return run;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Persists step artifacts to storage.
|
|
300
|
+
* Writes step artifacts as JSON files in the run directory.
|
|
301
|
+
*
|
|
302
|
+
* @param run - Research run.
|
|
303
|
+
* @param step - Research step.
|
|
304
|
+
* @param payloads - Artifact payloads keyed by name.
|
|
305
|
+
* @throws {Error} If run ID is invalid or file write fails.
|
|
306
|
+
* @remarks Production: Replace with R2 writes.
|
|
307
|
+
* Artifact keys are added to step.artifactKeys array for reference.
|
|
308
|
+
* Files are named as: `{step.kind}-{step.id}.{name}.json`
|
|
309
|
+
* @example
|
|
310
|
+
* ```ts
|
|
311
|
+
* await persistStep(run, step, {
|
|
312
|
+
* p_notes: { notes: '...', cites: [...] },
|
|
313
|
+
* p_index: { sources: [...], fetchedAt: '...' }
|
|
314
|
+
* });
|
|
315
|
+
* ```
|
|
316
|
+
*/
|
|
317
|
+
export async function persistStep(
|
|
318
|
+
run: TraceRun,
|
|
319
|
+
step: TraceStep,
|
|
320
|
+
payloads: Record<string, unknown>,
|
|
321
|
+
): Promise<void> {
|
|
322
|
+
await ensureTracesDir();
|
|
323
|
+
|
|
324
|
+
const runDir = getRunPath(run.runId);
|
|
325
|
+
if (!runDir) {
|
|
326
|
+
throw new Error(`Invalid run ID: ${run.runId}`);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- runDir is validated by getRunPath which checks for path traversal
|
|
330
|
+
await fs.mkdir(runDir, { recursive: true });
|
|
331
|
+
|
|
332
|
+
for (const [name, body] of Object.entries(payloads)) {
|
|
333
|
+
const filename = `${step.kind}-${step.id}.${name}.json`;
|
|
334
|
+
const filepath = join(runDir, filename);
|
|
335
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- filepath is validated via getRunPath and filename sanitization
|
|
336
|
+
await fs.writeFile(filepath, JSON.stringify(body, null, 2), 'utf-8');
|
|
337
|
+
step.artifactKeys.push(filename);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Persists run index for fast listing.
|
|
343
|
+
* Creates an index file with run metadata for quick queries.
|
|
344
|
+
*
|
|
345
|
+
* @param run - Research run to index.
|
|
346
|
+
* @remarks Production: Write to Upstash Redis ZSET.
|
|
347
|
+
* @example
|
|
348
|
+
* ```ts
|
|
349
|
+
* await persistRunIndex(run);
|
|
350
|
+
* ```
|
|
351
|
+
*/
|
|
352
|
+
export async function persistRunIndex(run: TraceRun): Promise<void> {
|
|
353
|
+
await ensureTracesDir();
|
|
354
|
+
|
|
355
|
+
const indexPath = join(TRACES_DIR, `${run.runId}.index.json`);
|
|
356
|
+
const index = {
|
|
357
|
+
runId: run.runId,
|
|
358
|
+
app: run.app,
|
|
359
|
+
question: run.question,
|
|
360
|
+
tier: run.tier,
|
|
361
|
+
startedAt: run.startedAt,
|
|
362
|
+
endedAt: run.endedAt ?? 0,
|
|
363
|
+
totalLatencyMs: run.totalLatencyMs ?? 0,
|
|
364
|
+
totalCostUSD: run.totalCostUSD ?? 0,
|
|
365
|
+
flags: run.flags ?? [],
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- indexPath uses validated runId format
|
|
369
|
+
await fs.writeFile(indexPath, JSON.stringify(index, null, 2), 'utf-8');
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Persists full run metadata.
|
|
374
|
+
* Writes complete run object as JSON file.
|
|
375
|
+
*
|
|
376
|
+
* @param run - Research run to persist.
|
|
377
|
+
* @throws {Error} If run ID is invalid or file write fails.
|
|
378
|
+
* @remarks Writes to `{runId}/run.meta.json` in traces directory.
|
|
379
|
+
* Contains complete run state including all steps and metadata.
|
|
380
|
+
* @example
|
|
381
|
+
* ```ts
|
|
382
|
+
* await persistRunMeta(run);
|
|
383
|
+
* ```
|
|
384
|
+
*/
|
|
385
|
+
export async function persistRunMeta(run: TraceRun): Promise<void> {
|
|
386
|
+
await ensureTracesDir();
|
|
387
|
+
|
|
388
|
+
const runDir = getRunPath(run.runId);
|
|
389
|
+
if (!runDir) {
|
|
390
|
+
throw new Error(`Invalid run ID: ${run.runId}`);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- runDir is validated by getRunPath which checks for path traversal
|
|
394
|
+
await fs.mkdir(runDir, { recursive: true });
|
|
395
|
+
|
|
396
|
+
const metaPath = join(runDir, 'run.meta.json');
|
|
397
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- metaPath uses validated runDir
|
|
398
|
+
await fs.writeFile(metaPath, JSON.stringify(run, null, 2), 'utf-8');
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Lists recent research runs.
|
|
403
|
+
* Returns runs sorted by start time (most recent first).
|
|
404
|
+
*
|
|
405
|
+
* @param limit - Maximum number of runs to return (defaults to 100).
|
|
406
|
+
* @returns Array of TraceRun objects sorted by startedAt descending.
|
|
407
|
+
* @remarks Production: Query from Redis ZSET.
|
|
408
|
+
* Reads index files from traces directory and parses JSON.
|
|
409
|
+
* Returns empty array on error (logs error to console).
|
|
410
|
+
* @example
|
|
411
|
+
* ```ts
|
|
412
|
+
* const runs = await listRuns(50);
|
|
413
|
+
* ```
|
|
414
|
+
*/
|
|
415
|
+
export async function listRuns(limit = 100): Promise<TraceRun[]> {
|
|
416
|
+
await ensureTracesDir();
|
|
417
|
+
|
|
418
|
+
try {
|
|
419
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- TRACES_DIR is validated via environment variable with safe default
|
|
420
|
+
const files = await fs.readdir(TRACES_DIR);
|
|
421
|
+
const indexFiles = files.filter(f => f.endsWith('.index.json'));
|
|
422
|
+
|
|
423
|
+
const indices = await Promise.all(
|
|
424
|
+
indexFiles.map(async file => {
|
|
425
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- file is filtered to .index.json files only
|
|
426
|
+
const content = await fs.readFile(join(TRACES_DIR, file), 'utf-8');
|
|
427
|
+
return JSON.parse(content);
|
|
428
|
+
}),
|
|
429
|
+
);
|
|
430
|
+
|
|
431
|
+
// Sort by startedAt desc
|
|
432
|
+
return indices.sort((a, b) => b.startedAt - a.startedAt).slice(0, limit);
|
|
433
|
+
} catch (error) {
|
|
434
|
+
logError('Failed to list runs', { error });
|
|
435
|
+
return [];
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Loads full run metadata from storage.
|
|
441
|
+
*
|
|
442
|
+
* @param runId - Run identifier.
|
|
443
|
+
* @returns TraceRun object or `null` if not found or invalid.
|
|
444
|
+
* @remarks Reads from `{runId}/run.meta.json` file.
|
|
445
|
+
* Returns `null` if file doesn't exist, runId is invalid, or parse fails.
|
|
446
|
+
* Logs errors to console.
|
|
447
|
+
* @example
|
|
448
|
+
* ```ts
|
|
449
|
+
* const run = await loadRun('1733875200000-a1b2c3d4e5f6');
|
|
450
|
+
* ```
|
|
451
|
+
*/
|
|
452
|
+
export async function loadRun(runId: string): Promise<TraceRun | null> {
|
|
453
|
+
try {
|
|
454
|
+
const metaPath = getRunPath(runId, 'run.meta.json');
|
|
455
|
+
if (!metaPath) {
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- metaPath is validated by getRunPath which checks for path traversal
|
|
459
|
+
const content = await fs.readFile(metaPath, 'utf-8');
|
|
460
|
+
return JSON.parse(content) as TraceRun;
|
|
461
|
+
} catch (error) {
|
|
462
|
+
logError('Failed to load run', { error, runId });
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Loads a step artifact from storage.
|
|
469
|
+
* Validates artifact key to prevent path traversal attacks.
|
|
470
|
+
*
|
|
471
|
+
* @param runId - Run identifier.
|
|
472
|
+
* @param artifactKey - Artifact key (filename).
|
|
473
|
+
* @returns Artifact data or `null` if not found or validation fails.
|
|
474
|
+
* @remarks Rejects artifact keys containing '..' or '/' to prevent path traversal.
|
|
475
|
+
* Returns `null` on any error (file not found, invalid key, parse error).
|
|
476
|
+
* @example
|
|
477
|
+
* ```ts
|
|
478
|
+
* const artifact = await loadStepArtifact(runId, 'perplexity-123.p_notes.json');
|
|
479
|
+
* ```
|
|
480
|
+
*/
|
|
481
|
+
export async function loadStepArtifact(
|
|
482
|
+
runId: string,
|
|
483
|
+
artifactKey: string,
|
|
484
|
+
): Promise<unknown | null> {
|
|
485
|
+
try {
|
|
486
|
+
// Validate artifactKey doesn't contain path traversal
|
|
487
|
+
if (artifactKey.includes('..') || artifactKey.includes('/')) {
|
|
488
|
+
logError('Invalid artifact key', { artifactKey });
|
|
489
|
+
return null;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
const artifactPath = getRunPath(runId, artifactKey);
|
|
493
|
+
if (!artifactPath) {
|
|
494
|
+
return null;
|
|
495
|
+
}
|
|
496
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- artifactPath is validated by getRunPath and artifactKey sanitization
|
|
497
|
+
const content = await fs.readFile(artifactPath, 'utf-8');
|
|
498
|
+
return JSON.parse(content);
|
|
499
|
+
} catch (error) {
|
|
500
|
+
logError('Failed to load artifact', { error, artifactKey, runId });
|
|
501
|
+
return null;
|
|
502
|
+
}
|
|
503
|
+
}
|