@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
package/dist/tools.mjs
ADDED
|
@@ -0,0 +1,1921 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-CkzbjWQW.mjs";
|
|
2
|
+
import { $ as generateObject, Ft as tool, et as generateText } from "./ai-runtime-CDzQztTt.mjs";
|
|
3
|
+
import { a as createTimeoutAbort, c as createToolFactory, d as wrapToolHandler, i as combineAbortSignals, l as createToolWithContext, n as executeWithFallback, o as isAbortError, r as ToolAbortError, s as withAbortHandling, t as executeToolSafely, u as createTools } from "./tool-safety-DXtYDXod.mjs";
|
|
4
|
+
import { createBashTool, createComputerTool } from "./tools-computer.mjs";
|
|
5
|
+
import { _ as MCPErrorUtils, a as MCPHealthStatus, c as MCPTransportError, d as createMCPToolsFromConfigs, f as createTransportFromConfig, g as MCPErrorHandlerFactory, h as AISDKCompatibleMCPError, i as MCPHealthMonitor, m as withRetryAndTimeout, n as DEFAULT_RETRY_CONFIG, o as MCPRequestManager, p as globalMCPHealthMonitor, r as MCPConnectionError, s as MCPRetryableError, t as DEFAULT_HEALTH_CHECK_CONFIG, u as createMCPToolsForRequest } from "./client-CpacYDIE.mjs";
|
|
6
|
+
import { C as testMCPConnectivity, D as createMCPStreamLifecycleManager, E as StreamLifecyclePhase, S as createMCPToolsWithStreamLifecycle, T as MCPStreamLifecycleManager, _ as MCPConnectionManager, a as createEdgeMCPTools, b as createMCPToolsForStreamText, c as edgeMCPTransports, d as DEFAULT_POOL_CONFIG, f as MCPConnectionPool, g as globalMCPToolCache, h as MCPToolCache, i as selectTransportForUseCase, l as getEdgeCompatibleConfigs, m as DEFAULT_CACHE_CONFIG, n as globalTransportSelector, o as createSmartMCPTools, p as globalMCPConnectionPool, r as selectOptimalTransport, s as discoverEdgeMCPServers, t as MCPTransportSelector, u as isEdgeRuntime, v as createPooledMCPTools, w as DEFAULT_STREAM_LIFECYCLE_CONFIG, x as createMCPToolsWithDefaults, y as getGlobalConnectionManager } from "./transport-selector-D-Ib05X1.mjs";
|
|
7
|
+
import { a as mcpTransports, i as validateMCPEnvironment, r as getMCPServers, t as discoverMCPServersFromEnvironment } from "./environment-CSoJb0SW.mjs";
|
|
8
|
+
import { $ as AgentDispatchOutputSchema, A as writeSkill, B as FINISHING_BRANCH_SYSTEM_PROMPT, C as runSubagentDev, D as testSkill, E as systematicDebug, F as CONDITION_BASED_WAITING_SYSTEM_PROMPT, G as SHARING_SKILLS_SYSTEM_PROMPT, H as PLANNER_SYSTEM_PROMPT, I as DEFENSE_IN_DEPTH_SYSTEM_PROMPT, J as TDD_SYSTEM_PROMPT, K as SUBAGENT_DRIVEN_DEV_SYSTEM_PROMPT, L as DESIGN_REVIEW_SYSTEM_PROMPT, M as BRAINSTORM_SYSTEM_PROMPT, N as CODE_REVIEW_SYSTEM_PROMPT, O as traceRootCause, P as COMMIT_ANALYSIS_SYSTEM_PROMPT, Q as systemPrompts, R as DISPATCHING_AGENTS_SYSTEM_PROMPT, S as reviewDesign, T as shareSkill, U as RECEIVING_CODE_REVIEW_SYSTEM_PROMPT, V as GIT_WORKTREE_SYSTEM_PROMPT, W as ROOT_CAUSE_TRACING_SYSTEM_PROMPT, X as USING_SUPERPOWERS_SYSTEM_PROMPT, Y as TESTING_SKILLS_SYSTEM_PROMPT, Z as WRITING_SKILLS_SYSTEM_PROMPT, _ as planningTools, _t as SystematicDebuggingOutputSchema, a as codeReviewTools, at as CodeReviewResponseOutputSchema, b as refineRequirements, c as detectAntiPatterns, ct as DesignReviewOutputSchema, d as finishBranch, dt as RootCauseTracingOutputSchema, et as AntiPatternOutputSchema, f as gitTools, ft as SkillShareOutputSchema, g as metaTools, gt as SuperpowersIntroOutputSchema, h as manageWorktree, ht as SubagentDevOutputSchema, i as analyzeDefenseInDepth, it as CodeReviewOutputSchema, j as ANTI_PATTERN_SYSTEM_PROMPT, k as workflowTools, l as dispatchAgents, lt as PlanExecutionOutputSchema, m as introduceSuperpowers, mt as SkillWriteOutputSchema, n as analyzeAsyncPatterns, nt as BrainstormOutputSchema, o as consultArchitect, ot as CommitAnalysisOutputSchema, p as initSuperpowers, pt as SkillTestOutputSchema, q as SYSTEMATIC_DEBUGGING_SYSTEM_PROMPT, r as analyzeCommit, rt as BranchFinishOutputSchema, s as debuggingTools, st as DefenseInDepthOutputSchema, t as allSuperpowerTools, tt as AsyncPatternsOutputSchema, u as executePlan, ut as PlanOutputSchema, v as processCodeReview, vt as TDDOutputSchema, w as runTDDCycle, x as reviewCode, y as qualityTools, yt as WorktreeOutputSchema, z as EXECUTING_PLANS_SYSTEM_PROMPT } from "./tools-BuS2Uv0q.mjs";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { z as z$1 } from "zod/v4";
|
|
11
|
+
import { existsSync, promises } from "node:fs";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import "server-only";
|
|
14
|
+
|
|
15
|
+
//#region src/tools/simple-factory.ts
|
|
16
|
+
/**
|
|
17
|
+
* @fileoverview Simple Tool Factory
|
|
18
|
+
*
|
|
19
|
+
* Utilities for creating tools with pre-built Zod schemas.
|
|
20
|
+
* For JSON-to-Zod schema conversion, use {@link createJsonSchemaTool} from `tools/generic/json-schema-tool`.
|
|
21
|
+
*
|
|
22
|
+
* @module @od-oneapp/ai-platform/tools/simple-factory
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Creates a tool from a pre-built Zod schema.
|
|
26
|
+
*
|
|
27
|
+
* For creating tools from JSON-style schema definitions,
|
|
28
|
+
* use {@link createJsonSchemaTool} from `tools/generic/json-schema-tool`.
|
|
29
|
+
*
|
|
30
|
+
* @param description - Tool description.
|
|
31
|
+
* @param schema - Zod schema instance.
|
|
32
|
+
* @param execute - Execution function.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const searchTool = createToolFromZodSchema(
|
|
37
|
+
* 'Search the web for information',
|
|
38
|
+
* z.object({ query: z.string() }),
|
|
39
|
+
* async ({ query }) => fetch(`/search?q=${query}`)
|
|
40
|
+
* );
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
function createToolFromZodSchema(description, schema, execute) {
|
|
44
|
+
return tool({
|
|
45
|
+
description,
|
|
46
|
+
inputSchema: schema,
|
|
47
|
+
execute
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated Use `createToolFromZodSchema` instead.
|
|
52
|
+
* This alias exists for backward compatibility.
|
|
53
|
+
*/
|
|
54
|
+
const createSimpleTool = createToolFromZodSchema;
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/tools/validation-wrapper.ts
|
|
58
|
+
/**
|
|
59
|
+
* Wraps a tool with an additional runtime validation step.
|
|
60
|
+
*
|
|
61
|
+
* Vercel AI SDK v6 tools already validate input against Zod schemas.
|
|
62
|
+
* Use this wrapper when you need custom business-rule validation
|
|
63
|
+
* (e.g., authorization checks, rate limiting, cross-field constraints)
|
|
64
|
+
* that runs before the tool's execute function.
|
|
65
|
+
*
|
|
66
|
+
* @param t - The tool to wrap
|
|
67
|
+
* @param options - Validation options
|
|
68
|
+
* @param options.validate - Custom validator returning true/false (sync or async)
|
|
69
|
+
* @returns A new tool that validates input before executing
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* const safeTool = withValidation(deleteTool, {
|
|
74
|
+
* validate: (input) => input.userId === currentUser.id,
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
function withValidation(t, options = {}) {
|
|
79
|
+
if (!options.validate) return t;
|
|
80
|
+
const wrappedTool = { ...t };
|
|
81
|
+
const wrappedExecute = (input, executionOptions) => {
|
|
82
|
+
const { validate } = options;
|
|
83
|
+
const run = () => {
|
|
84
|
+
if (!t.execute) throw new Error("Strict tool wrapper requires a tool execute function");
|
|
85
|
+
return t.execute(input, executionOptions);
|
|
86
|
+
};
|
|
87
|
+
const isAsyncIterable = (value) => {
|
|
88
|
+
return typeof value === "object" && value !== null && Symbol.asyncIterator in value;
|
|
89
|
+
};
|
|
90
|
+
if (!validate) return run();
|
|
91
|
+
const validationResult = validate(input);
|
|
92
|
+
const isPromiseLike = (value) => typeof value?.then === "function";
|
|
93
|
+
if (isPromiseLike(validationResult)) return (async () => {
|
|
94
|
+
if (!await validationResult) throw new Error(`Strict validation failed for tool ${t.description?.slice(0, 20)}...`);
|
|
95
|
+
const result = run();
|
|
96
|
+
if (isAsyncIterable(result)) throw new Error("Async validation is not supported for streaming tool results");
|
|
97
|
+
return result;
|
|
98
|
+
})();
|
|
99
|
+
if (!validationResult) throw new Error(`Strict validation failed for tool ${t.description?.slice(0, 20)}...`);
|
|
100
|
+
const result = run();
|
|
101
|
+
if (isAsyncIterable(result)) return result;
|
|
102
|
+
return result;
|
|
103
|
+
};
|
|
104
|
+
wrappedTool.execute = wrappedExecute;
|
|
105
|
+
return wrappedTool;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
//#endregion
|
|
109
|
+
//#region src/tools/generic/json-schema-tool.ts
|
|
110
|
+
/**
|
|
111
|
+
* @fileoverview JSON Schema tool creation utilities.
|
|
112
|
+
*
|
|
113
|
+
* Creates AI SDK tools from plain JSON-style schema definitions
|
|
114
|
+
* (as opposed to pre-built Zod schemas). Useful for tools defined
|
|
115
|
+
* at runtime or loaded from configuration files.
|
|
116
|
+
*
|
|
117
|
+
* @module @od-oneapp/ai-platform/tools/generic/json-schema-tool
|
|
118
|
+
*/
|
|
119
|
+
/**
|
|
120
|
+
* Creates a Zod schema from a parameter definition.
|
|
121
|
+
*/
|
|
122
|
+
function parameterToZod(param) {
|
|
123
|
+
let schema;
|
|
124
|
+
switch (param.type) {
|
|
125
|
+
case "string":
|
|
126
|
+
if (param.enum) schema = z.enum(param.enum);
|
|
127
|
+
else schema = z.string();
|
|
128
|
+
break;
|
|
129
|
+
case "number": {
|
|
130
|
+
let numSchema = z.number();
|
|
131
|
+
if (param.minimum !== void 0) numSchema = numSchema.min(param.minimum);
|
|
132
|
+
if (param.maximum !== void 0) numSchema = numSchema.max(param.maximum);
|
|
133
|
+
schema = numSchema;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
case "boolean":
|
|
137
|
+
schema = z.boolean();
|
|
138
|
+
break;
|
|
139
|
+
case "array":
|
|
140
|
+
schema = z.array(param.items ? parameterToZod(param.items) : z.unknown());
|
|
141
|
+
break;
|
|
142
|
+
case "object":
|
|
143
|
+
if (param.properties) {
|
|
144
|
+
const shape = {};
|
|
145
|
+
for (const [key, prop] of Object.entries(param.properties)) shape[key] = parameterToZod(prop);
|
|
146
|
+
schema = z.object(shape);
|
|
147
|
+
} else schema = z.record(z.string(), z.unknown());
|
|
148
|
+
break;
|
|
149
|
+
default: schema = z.unknown();
|
|
150
|
+
}
|
|
151
|
+
return schema.describe(param.description);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Creates a Zod schema from a dynamic tool schema.
|
|
155
|
+
*/
|
|
156
|
+
function schemaToZod(schema) {
|
|
157
|
+
const shape = {};
|
|
158
|
+
for (const [name, param] of Object.entries(schema.parameters)) {
|
|
159
|
+
const zodParam = parameterToZod(param);
|
|
160
|
+
shape[name] = schema.required?.includes(name) ? zodParam : zodParam.optional();
|
|
161
|
+
}
|
|
162
|
+
return z.object(shape);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Creates an AI SDK tool from a JSON-style schema definition.
|
|
166
|
+
*
|
|
167
|
+
* Converts the plain-object schema to Zod internally, so callers
|
|
168
|
+
* don't need to depend on Zod directly. For pre-built Zod schemas,
|
|
169
|
+
* use {@link createToolFromZodSchema} from `tools/simple-factory` instead.
|
|
170
|
+
*
|
|
171
|
+
* @param schema - Tool schema with name, description, and parameter definitions
|
|
172
|
+
* @param execute - Async function that receives validated params and returns a result
|
|
173
|
+
* @returns AI SDK tool instance
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```ts
|
|
177
|
+
* const calcTool = createJsonSchemaTool({
|
|
178
|
+
* name: 'calculate',
|
|
179
|
+
* description: 'Perform calculations',
|
|
180
|
+
* parameters: {
|
|
181
|
+
* operation: { type: 'string', description: 'Operation', enum: ['add', 'sub'] },
|
|
182
|
+
* a: { type: 'number', description: 'First number' },
|
|
183
|
+
* b: { type: 'number', description: 'Second number' },
|
|
184
|
+
* },
|
|
185
|
+
* required: ['operation', 'a', 'b'],
|
|
186
|
+
* }, async ({ operation, a, b }) => {
|
|
187
|
+
* return operation === 'add' ? a + b : a - b;
|
|
188
|
+
* });
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
function createJsonSchemaTool(schema, execute) {
|
|
192
|
+
return tool({
|
|
193
|
+
description: schema.description,
|
|
194
|
+
inputSchema: schemaToZod(schema),
|
|
195
|
+
execute: async (params) => execute(params)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Registry for managing tools created from JSON schema definitions.
|
|
200
|
+
*
|
|
201
|
+
* Stores tools and their schemas by name, supporting lookup, filtering,
|
|
202
|
+
* and bulk retrieval. For tools created from Zod schemas, use them directly
|
|
203
|
+
* without a registry.
|
|
204
|
+
*/
|
|
205
|
+
var JsonSchemaToolRegistry = class {
|
|
206
|
+
tools = /* @__PURE__ */ new Map();
|
|
207
|
+
schemas = /* @__PURE__ */ new Map();
|
|
208
|
+
/**
|
|
209
|
+
* Registers a tool with schema.
|
|
210
|
+
*/
|
|
211
|
+
register(schema, execute) {
|
|
212
|
+
const t = createJsonSchemaTool(schema, execute);
|
|
213
|
+
this.tools.set(schema.name, t);
|
|
214
|
+
this.schemas.set(schema.name, schema);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Gets a tool by name.
|
|
218
|
+
*/
|
|
219
|
+
get(name) {
|
|
220
|
+
return this.tools.get(name);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Gets schema by name.
|
|
224
|
+
*/
|
|
225
|
+
getSchema(name) {
|
|
226
|
+
return this.schemas.get(name);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Gets all tools.
|
|
230
|
+
*/
|
|
231
|
+
all() {
|
|
232
|
+
return Object.fromEntries(this.tools);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Gets all schemas.
|
|
236
|
+
*/
|
|
237
|
+
allSchemas() {
|
|
238
|
+
return Array.from(this.schemas.values());
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Filters tools by pattern.
|
|
242
|
+
* Note: String patterns are escaped to prevent ReDoS attacks.
|
|
243
|
+
* To use regex patterns, pass a RegExp object directly.
|
|
244
|
+
*/
|
|
245
|
+
filter(pattern) {
|
|
246
|
+
const regex = typeof pattern === "string" ? new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")) : pattern;
|
|
247
|
+
const filtered = {};
|
|
248
|
+
for (const [name, t] of this.tools) if (regex.test(name)) filtered[name] = t;
|
|
249
|
+
return filtered;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Removes a tool.
|
|
253
|
+
*/
|
|
254
|
+
remove(name) {
|
|
255
|
+
this.schemas.delete(name);
|
|
256
|
+
return this.tools.delete(name);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Clears all tools.
|
|
260
|
+
*/
|
|
261
|
+
clear() {
|
|
262
|
+
this.tools.clear();
|
|
263
|
+
this.schemas.clear();
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* Creates a tool that can be dynamically enabled/disabled.
|
|
268
|
+
*
|
|
269
|
+
* @param baseTool - The base tool
|
|
270
|
+
* @param isEnabled - Function to check if tool is enabled
|
|
271
|
+
* @returns Conditional tool
|
|
272
|
+
*/
|
|
273
|
+
function createConditionalTool(baseTool, isEnabled) {
|
|
274
|
+
const { execute } = baseTool;
|
|
275
|
+
return {
|
|
276
|
+
...baseTool,
|
|
277
|
+
execute: execute ? async (...args) => {
|
|
278
|
+
if (!await isEnabled()) return { error: "Tool is currently disabled" };
|
|
279
|
+
return execute(...args);
|
|
280
|
+
} : void 0
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Composes multiple tools into a single tool with routing.
|
|
285
|
+
*
|
|
286
|
+
* @param tools - Map of route patterns to tools
|
|
287
|
+
* @param router - Function to determine route from input
|
|
288
|
+
* @returns Composed tool
|
|
289
|
+
*/
|
|
290
|
+
function composeTools(tools, router) {
|
|
291
|
+
return tool({
|
|
292
|
+
description: `Composed tool with routes: ${Object.keys(tools).join(", ")}`,
|
|
293
|
+
inputSchema: z.object({}).passthrough(),
|
|
294
|
+
execute: async (input, options) => {
|
|
295
|
+
const typedInput = input;
|
|
296
|
+
const route = router(typedInput);
|
|
297
|
+
const selectedTool = tools[route];
|
|
298
|
+
if (!selectedTool) return { error: `Unknown route: ${route}` };
|
|
299
|
+
return selectedTool.execute?.(typedInput, options);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
//#endregion
|
|
305
|
+
//#region src/tools/generic/web-search.ts
|
|
306
|
+
/**
|
|
307
|
+
* Create a web search tool using an Exa API client.
|
|
308
|
+
*
|
|
309
|
+
* @param config - Exa search configuration
|
|
310
|
+
* @param exaClient - Exa client instance (from `exa-js`)
|
|
311
|
+
* @returns AI SDK tool for web search via Exa
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
* ```ts
|
|
315
|
+
* import Exa from 'exa-js';
|
|
316
|
+
* import { createExaSearchTool } from '@od-oneapp/ai-platform/tools';
|
|
317
|
+
*
|
|
318
|
+
* const exa = new Exa(process.env.EXA_API_KEY!);
|
|
319
|
+
* const searchTool = createExaSearchTool(
|
|
320
|
+
* { apiKey: process.env.EXA_API_KEY!, numResults: 5 },
|
|
321
|
+
* exa,
|
|
322
|
+
* );
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
325
|
+
function createExaSearchTool(config, exaClient) {
|
|
326
|
+
return tool({
|
|
327
|
+
description: "Search the web for up-to-date information using Exa",
|
|
328
|
+
inputSchema: z$1.object({ query: z$1.string().min(1).max(100).describe("The search query") }),
|
|
329
|
+
execute: async ({ query }) => {
|
|
330
|
+
const { results } = await exaClient.searchAndContents(query, {
|
|
331
|
+
livecrawl: config.livecrawl ?? "always",
|
|
332
|
+
numResults: config.numResults ?? 3
|
|
333
|
+
});
|
|
334
|
+
return results.map((result) => ({
|
|
335
|
+
title: result.title,
|
|
336
|
+
url: result.url,
|
|
337
|
+
content: result.text?.slice(0, 1e3) ?? result.title ?? "",
|
|
338
|
+
publishedDate: result.publishedDate
|
|
339
|
+
}));
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Create a generic web search tool with a custom search function.
|
|
345
|
+
*
|
|
346
|
+
* @param searchFunction - Custom search implementation
|
|
347
|
+
* @returns AI SDK tool for web search
|
|
348
|
+
*
|
|
349
|
+
* @example
|
|
350
|
+
* ```ts
|
|
351
|
+
* import { createWebSearchTool } from '@od-oneapp/ai-platform/tools';
|
|
352
|
+
*
|
|
353
|
+
* const tool = createWebSearchTool(async (query) => {
|
|
354
|
+
* const resp = await fetch(`https://api.search.com?q=${query}`);
|
|
355
|
+
* return resp.json();
|
|
356
|
+
* });
|
|
357
|
+
* ```
|
|
358
|
+
*/
|
|
359
|
+
function createWebSearchTool(searchFunction) {
|
|
360
|
+
return tool({
|
|
361
|
+
description: "Search the web for up-to-date information",
|
|
362
|
+
inputSchema: z$1.object({ query: z$1.string().min(1).max(100).describe("The search query") }),
|
|
363
|
+
execute: async ({ query }) => {
|
|
364
|
+
return searchFunction(query);
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Pre-configured search tool factories for common APIs.
|
|
370
|
+
*/
|
|
371
|
+
const webSearchTools = {
|
|
372
|
+
exa: (exaClient, options) => createExaSearchTool(options ?? { apiKey: "" }, exaClient),
|
|
373
|
+
custom: (searchFunction) => createWebSearchTool(searchFunction)
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
//#endregion
|
|
377
|
+
//#region src/tools/generic/web-search-tool.ts
|
|
378
|
+
/**
|
|
379
|
+
* @fileoverview Pre-configured web search tool.
|
|
380
|
+
*
|
|
381
|
+
* Drop-in replacement for the legacy @od-oneapp/ai webSearchTool.
|
|
382
|
+
* Auto-configures from environment (EXA_API_KEY).
|
|
383
|
+
*/
|
|
384
|
+
let cachedExaTool = null;
|
|
385
|
+
const webSearchInputSchema = z.object({
|
|
386
|
+
query: z.string().min(1).describe("Search query"),
|
|
387
|
+
maxResults: z.number().int().positive().default(5).describe("Maximum results"),
|
|
388
|
+
timeRange: z.string().optional().describe("Time range filter"),
|
|
389
|
+
region: z.string().optional().describe("Geographic region")
|
|
390
|
+
});
|
|
391
|
+
/**
|
|
392
|
+
* Pre-configured web search tool that auto-detects Exa API key from environment.
|
|
393
|
+
*
|
|
394
|
+
* @example
|
|
395
|
+
* ```ts
|
|
396
|
+
* import { webSearchTool } from '@od-oneapp/ai-platform/tools';
|
|
397
|
+
*
|
|
398
|
+
* const result = await generateText({
|
|
399
|
+
* model,
|
|
400
|
+
* tools: { webSearch: webSearchTool },
|
|
401
|
+
* prompt: 'Search for...',
|
|
402
|
+
* });
|
|
403
|
+
* ```
|
|
404
|
+
*/
|
|
405
|
+
const webSearchTool = tool({
|
|
406
|
+
description: "Search the web using Exa when configured",
|
|
407
|
+
inputSchema: webSearchInputSchema,
|
|
408
|
+
execute: async ({ query, maxResults, timeRange, region }) => {
|
|
409
|
+
const apiKey = process.env.EXA_API_KEY;
|
|
410
|
+
if (apiKey) {
|
|
411
|
+
if (!cachedExaTool) cachedExaTool = createExaSearchTool({
|
|
412
|
+
apiKey,
|
|
413
|
+
numResults: maxResults ?? 5
|
|
414
|
+
}, void 0);
|
|
415
|
+
try {
|
|
416
|
+
const timeoutMs = Number(process.env.AI_WEBSEARCH_TIMEOUT_MS) || 15e3;
|
|
417
|
+
const result = await Promise.race([cachedExaTool.execute?.({ query }, {}), new Promise((_resolve, reject) => setTimeout(() => reject(/* @__PURE__ */ new Error("Web search timeout")), timeoutMs))]);
|
|
418
|
+
const results = Array.isArray(result) ? result : [];
|
|
419
|
+
return {
|
|
420
|
+
query,
|
|
421
|
+
results,
|
|
422
|
+
totalResults: results.length,
|
|
423
|
+
timeRange,
|
|
424
|
+
region,
|
|
425
|
+
source: "exa"
|
|
426
|
+
};
|
|
427
|
+
} catch {}
|
|
428
|
+
}
|
|
429
|
+
return {
|
|
430
|
+
query,
|
|
431
|
+
results: [],
|
|
432
|
+
totalResults: 0,
|
|
433
|
+
timeRange,
|
|
434
|
+
region,
|
|
435
|
+
source: "none"
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
//#endregion
|
|
441
|
+
//#region src/tools/generic/tiptap-context.ts
|
|
442
|
+
const WORKSPACE_ROOT = process.cwd();
|
|
443
|
+
function resolveDocPath(relativePath) {
|
|
444
|
+
let current = WORKSPACE_ROOT;
|
|
445
|
+
while (true) {
|
|
446
|
+
const candidate = path.resolve(current, relativePath);
|
|
447
|
+
if (existsSync(candidate)) return candidate;
|
|
448
|
+
const parent = path.dirname(current);
|
|
449
|
+
if (parent === current) break;
|
|
450
|
+
current = parent;
|
|
451
|
+
}
|
|
452
|
+
return path.resolve(WORKSPACE_ROOT, relativePath);
|
|
453
|
+
}
|
|
454
|
+
const TIPTAP_DOC_PATH = resolveDocPath("docs/llms/tiptap.txt");
|
|
455
|
+
const DEFAULT_CHUNK_TOKEN_TARGET = 500;
|
|
456
|
+
const MAX_KEYWORDS = 12;
|
|
457
|
+
const MAX_RESULTS = 4;
|
|
458
|
+
const STOP_WORDS = new Set([
|
|
459
|
+
"the",
|
|
460
|
+
"and",
|
|
461
|
+
"for",
|
|
462
|
+
"with",
|
|
463
|
+
"that",
|
|
464
|
+
"this",
|
|
465
|
+
"from",
|
|
466
|
+
"your",
|
|
467
|
+
"into",
|
|
468
|
+
"when",
|
|
469
|
+
"tiptap",
|
|
470
|
+
"editor",
|
|
471
|
+
"docs",
|
|
472
|
+
"learn",
|
|
473
|
+
"guide",
|
|
474
|
+
"using",
|
|
475
|
+
"about",
|
|
476
|
+
"more",
|
|
477
|
+
"how",
|
|
478
|
+
"api",
|
|
479
|
+
"overview",
|
|
480
|
+
"getting",
|
|
481
|
+
"started"
|
|
482
|
+
]);
|
|
483
|
+
const SYNONYM_MAP = {
|
|
484
|
+
react: [
|
|
485
|
+
"next",
|
|
486
|
+
"nextjs",
|
|
487
|
+
"jsx"
|
|
488
|
+
],
|
|
489
|
+
next: ["nextjs", "react"],
|
|
490
|
+
collaboration: [
|
|
491
|
+
"yjs",
|
|
492
|
+
"multiplayer",
|
|
493
|
+
"awareness"
|
|
494
|
+
],
|
|
495
|
+
ai: [
|
|
496
|
+
"assistant",
|
|
497
|
+
"generation",
|
|
498
|
+
"content"
|
|
499
|
+
],
|
|
500
|
+
export: [
|
|
501
|
+
"conversion",
|
|
502
|
+
"markdown",
|
|
503
|
+
"html",
|
|
504
|
+
"json",
|
|
505
|
+
"docx"
|
|
506
|
+
],
|
|
507
|
+
import: [
|
|
508
|
+
"conversion",
|
|
509
|
+
"docx",
|
|
510
|
+
"odt"
|
|
511
|
+
],
|
|
512
|
+
formatting: [
|
|
513
|
+
"style",
|
|
514
|
+
"styling",
|
|
515
|
+
"theme",
|
|
516
|
+
"css"
|
|
517
|
+
],
|
|
518
|
+
extension: [
|
|
519
|
+
"node",
|
|
520
|
+
"mark",
|
|
521
|
+
"custom extension"
|
|
522
|
+
],
|
|
523
|
+
command: [
|
|
524
|
+
"keyboard",
|
|
525
|
+
"shortcut",
|
|
526
|
+
"action"
|
|
527
|
+
],
|
|
528
|
+
schema: [
|
|
529
|
+
"nodes",
|
|
530
|
+
"marks",
|
|
531
|
+
"structure"
|
|
532
|
+
]
|
|
533
|
+
};
|
|
534
|
+
const CODE_EXAMPLES = [
|
|
535
|
+
{
|
|
536
|
+
id: "react-basic-editor",
|
|
537
|
+
title: "Initialize TipTap in React",
|
|
538
|
+
description: "Create a basic TipTap editor using StarterKit and controlled content.",
|
|
539
|
+
language: "tsx",
|
|
540
|
+
keywords: [
|
|
541
|
+
"react",
|
|
542
|
+
"starterkit",
|
|
543
|
+
"basic"
|
|
544
|
+
],
|
|
545
|
+
code: `import { useEditor, EditorContent } from '@tiptap/react';
|
|
546
|
+
import StarterKit from '@tiptap/starter-kit';
|
|
547
|
+
|
|
548
|
+
export function BasicEditor() {
|
|
549
|
+
const editor = useEditor({
|
|
550
|
+
extensions: [StarterKit],
|
|
551
|
+
content: '<p>Hello TipTap!</p>',
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
if (!editor) return null;
|
|
555
|
+
|
|
556
|
+
return <EditorContent editor={editor} />;
|
|
557
|
+
}`
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
id: "nextjs-ssr-setup",
|
|
561
|
+
title: "Use TipTap inside Next.js App Router",
|
|
562
|
+
description: "Wrap the TipTap editor in a Client Component and load configuration from the server.",
|
|
563
|
+
language: "tsx",
|
|
564
|
+
keywords: [
|
|
565
|
+
"next",
|
|
566
|
+
"react",
|
|
567
|
+
"app-router"
|
|
568
|
+
],
|
|
569
|
+
code: `'use client';
|
|
570
|
+
|
|
571
|
+
import { Suspense } from 'react';
|
|
572
|
+
import dynamic from 'next/dynamic';
|
|
573
|
+
|
|
574
|
+
const RichEditor = dynamic(() => import('./RichEditor').then(m => m.RichEditor), {
|
|
575
|
+
ssr: false,
|
|
576
|
+
loading: () => <p>Loading editor\u2026</p>,
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
export default function TiptapCanvas() {
|
|
580
|
+
return (
|
|
581
|
+
<section className="space-y-6">
|
|
582
|
+
<h1 className="text-xl font-semibold">Canvas Document</h1>
|
|
583
|
+
<Suspense fallback={<p>Preparing TipTap\u2026</p>}>
|
|
584
|
+
<RichEditor enableAI enableToolbar />
|
|
585
|
+
</Suspense>
|
|
586
|
+
</section>
|
|
587
|
+
);
|
|
588
|
+
}
|
|
589
|
+
`
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
id: "collaboration-setup",
|
|
593
|
+
title: "Enable Collaboration Extensions",
|
|
594
|
+
description: "Configure the Collaboration and CollaborationCursor extensions with a shared Yjs document.",
|
|
595
|
+
language: "ts",
|
|
596
|
+
keywords: [
|
|
597
|
+
"collaboration",
|
|
598
|
+
"yjs",
|
|
599
|
+
"multiplayer"
|
|
600
|
+
],
|
|
601
|
+
code: `import Collaboration from '@tiptap/extension-collaboration';
|
|
602
|
+
import CollaborationCursor from '@tiptap/extension-collaboration-cursor';
|
|
603
|
+
import { Doc } from 'yjs';
|
|
604
|
+
|
|
605
|
+
const ydoc = new Doc();
|
|
606
|
+
|
|
607
|
+
const editor = new Editor({
|
|
608
|
+
extensions: [
|
|
609
|
+
StarterKit,
|
|
610
|
+
Collaboration.configure({ document: ydoc }),
|
|
611
|
+
CollaborationCursor.configure({
|
|
612
|
+
provider: providerInstance,
|
|
613
|
+
user: { name: userName, color: userColor },
|
|
614
|
+
}),
|
|
615
|
+
],
|
|
616
|
+
});
|
|
617
|
+
`
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
id: "content-export",
|
|
621
|
+
title: "Convert TipTap JSON to Markdown",
|
|
622
|
+
description: "Serialize the editor state to Markdown for downstream systems.",
|
|
623
|
+
language: "ts",
|
|
624
|
+
keywords: [
|
|
625
|
+
"export",
|
|
626
|
+
"markdown",
|
|
627
|
+
"json"
|
|
628
|
+
],
|
|
629
|
+
code: `import { generateJSON } from '@tiptap/html';
|
|
630
|
+
import StarterKit from '@tiptap/starter-kit';
|
|
631
|
+
|
|
632
|
+
export function toMarkdown(html: string) {
|
|
633
|
+
const json = generateJSON(html, [StarterKit]);
|
|
634
|
+
return json.content?.map(block => block.text).join('\\n') ?? '';
|
|
635
|
+
}
|
|
636
|
+
`
|
|
637
|
+
}
|
|
638
|
+
];
|
|
639
|
+
const CATEGORY_EXAMPLE_MAP = {
|
|
640
|
+
Overview: ["react-basic-editor"],
|
|
641
|
+
Docs: ["react-basic-editor", "nextjs-ssr-setup"],
|
|
642
|
+
"Editor Docs": ["react-basic-editor", "nextjs-ssr-setup"],
|
|
643
|
+
"Editor Extensions Docs": ["collaboration-setup"],
|
|
644
|
+
"Content AI Docs": ["react-basic-editor"],
|
|
645
|
+
"Import / Export Docs": ["content-export"],
|
|
646
|
+
"Commands Docs": ["react-basic-editor"]
|
|
647
|
+
};
|
|
648
|
+
let cachedIndexPromise = null;
|
|
649
|
+
function normalizeHeading(rawHeading) {
|
|
650
|
+
return rawHeading.replace(/^#+\s*/, "").trim();
|
|
651
|
+
}
|
|
652
|
+
function slugify(value) {
|
|
653
|
+
return value.toLowerCase().trim().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
654
|
+
}
|
|
655
|
+
function tokenize(text) {
|
|
656
|
+
return text.toLowerCase().replace(/[^a-z0-9\s]/g, " ").split(/\s+/).filter(Boolean);
|
|
657
|
+
}
|
|
658
|
+
function countTokens(text) {
|
|
659
|
+
return tokenize(text).length;
|
|
660
|
+
}
|
|
661
|
+
function extractKeywords(text, maxKeywords = MAX_KEYWORDS) {
|
|
662
|
+
const frequencies = /* @__PURE__ */ new Map();
|
|
663
|
+
for (const token of tokenize(text)) {
|
|
664
|
+
if (STOP_WORDS.has(token)) continue;
|
|
665
|
+
const synonyms = SYNONYM_MAP[token] ?? [];
|
|
666
|
+
frequencies.set(token, (frequencies.get(token) ?? 0) + 1);
|
|
667
|
+
for (const synonym of synonyms) frequencies.set(synonym, (frequencies.get(synonym) ?? 0) + .5);
|
|
668
|
+
}
|
|
669
|
+
return Array.from(frequencies.entries()).sort((a, b) => b[1] - a[1]).slice(0, maxKeywords).map(([token]) => token);
|
|
670
|
+
}
|
|
671
|
+
function createSummary(content) {
|
|
672
|
+
const bulletHighlights = content.split("\n").map((line) => line.trim()).filter(Boolean).filter((line) => /^[-*]/.test(line)).map((line) => line.replace(/^[-*]\s*/, "")).slice(0, 3);
|
|
673
|
+
if (bulletHighlights.length > 0) return bulletHighlights.join(" ");
|
|
674
|
+
return content.split(/(?<=[.!?])\s+/).map((sentence) => sentence.trim()).filter(Boolean).slice(0, 2).join(" ");
|
|
675
|
+
}
|
|
676
|
+
function parseTiptapSections(doc) {
|
|
677
|
+
const sections = [];
|
|
678
|
+
const lines = doc.split("\n");
|
|
679
|
+
let currentCategory = "Overview";
|
|
680
|
+
let currentTitle = "Overview";
|
|
681
|
+
let buffer = [];
|
|
682
|
+
function flush() {
|
|
683
|
+
if (buffer.length === 0) return;
|
|
684
|
+
const content = buffer.join("\n").trim();
|
|
685
|
+
if (!content) {
|
|
686
|
+
buffer = [];
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
sections.push({
|
|
690
|
+
category: currentCategory,
|
|
691
|
+
title: currentTitle,
|
|
692
|
+
content: [content]
|
|
693
|
+
});
|
|
694
|
+
buffer = [];
|
|
695
|
+
}
|
|
696
|
+
for (const rawLine of lines) {
|
|
697
|
+
const line = rawLine.trimEnd();
|
|
698
|
+
if (/^#\s/.test(line)) {
|
|
699
|
+
flush();
|
|
700
|
+
currentCategory = "Overview";
|
|
701
|
+
currentTitle = normalizeHeading(line);
|
|
702
|
+
continue;
|
|
703
|
+
}
|
|
704
|
+
if (/^##\s/.test(line)) {
|
|
705
|
+
flush();
|
|
706
|
+
currentCategory = normalizeHeading(line);
|
|
707
|
+
currentTitle = currentCategory;
|
|
708
|
+
continue;
|
|
709
|
+
}
|
|
710
|
+
if (/^###\s/.test(line)) {
|
|
711
|
+
flush();
|
|
712
|
+
currentTitle = normalizeHeading(line);
|
|
713
|
+
continue;
|
|
714
|
+
}
|
|
715
|
+
buffer.push(line);
|
|
716
|
+
}
|
|
717
|
+
flush();
|
|
718
|
+
return sections;
|
|
719
|
+
}
|
|
720
|
+
function chunkSection(section, chunkTokenTarget = DEFAULT_CHUNK_TOKEN_TARGET) {
|
|
721
|
+
const chunks = [];
|
|
722
|
+
const paragraphs = section.content.join("\n").split(/\n{2,}/).map((paragraph) => paragraph.trim()).filter(Boolean);
|
|
723
|
+
let currentChunk = [];
|
|
724
|
+
let currentTokens = 0;
|
|
725
|
+
let chunkIndex = 0;
|
|
726
|
+
const pushChunk = () => {
|
|
727
|
+
if (currentChunk.length === 0) return;
|
|
728
|
+
const content = currentChunk.join("\n\n");
|
|
729
|
+
const tokens = countTokens(content);
|
|
730
|
+
const summary = createSummary(content);
|
|
731
|
+
const keywords = extractKeywords(content);
|
|
732
|
+
chunks.push({
|
|
733
|
+
id: `${slugify(section.category)}-${slugify(section.title)}-${chunkIndex}`,
|
|
734
|
+
category: section.category,
|
|
735
|
+
title: section.title,
|
|
736
|
+
content,
|
|
737
|
+
summary,
|
|
738
|
+
keywords,
|
|
739
|
+
tokens
|
|
740
|
+
});
|
|
741
|
+
chunkIndex += 1;
|
|
742
|
+
currentChunk = [];
|
|
743
|
+
currentTokens = 0;
|
|
744
|
+
};
|
|
745
|
+
for (const paragraph of paragraphs) {
|
|
746
|
+
const paragraphTokens = countTokens(paragraph);
|
|
747
|
+
if (currentTokens + paragraphTokens > chunkTokenTarget && currentChunk.length > 0) pushChunk();
|
|
748
|
+
currentChunk.push(paragraph);
|
|
749
|
+
currentTokens += paragraphTokens;
|
|
750
|
+
}
|
|
751
|
+
pushChunk();
|
|
752
|
+
return chunks;
|
|
753
|
+
}
|
|
754
|
+
async function buildTiptapDocIndex() {
|
|
755
|
+
const chunks = parseTiptapSections(await promises.readFile(TIPTAP_DOC_PATH, "utf8")).flatMap((section) => chunkSection(section));
|
|
756
|
+
const categories = {};
|
|
757
|
+
for (const chunk of chunks) {
|
|
758
|
+
const categoryEntry = categories[chunk.category] ?? {
|
|
759
|
+
chunkCount: 0,
|
|
760
|
+
keywords: []
|
|
761
|
+
};
|
|
762
|
+
categoryEntry.chunkCount += 1;
|
|
763
|
+
categoryEntry.keywords = Array.from(new Set([...categoryEntry.keywords, ...chunk.keywords])).slice(0, MAX_KEYWORDS);
|
|
764
|
+
categories[chunk.category] = categoryEntry;
|
|
765
|
+
}
|
|
766
|
+
return {
|
|
767
|
+
chunks,
|
|
768
|
+
categories
|
|
769
|
+
};
|
|
770
|
+
}
|
|
771
|
+
async function getTiptapDocIndex() {
|
|
772
|
+
if (!cachedIndexPromise) cachedIndexPromise = (async () => {
|
|
773
|
+
try {
|
|
774
|
+
return await buildTiptapDocIndex();
|
|
775
|
+
} catch (error) {
|
|
776
|
+
cachedIndexPromise = null;
|
|
777
|
+
throw error;
|
|
778
|
+
}
|
|
779
|
+
})();
|
|
780
|
+
return cachedIndexPromise;
|
|
781
|
+
}
|
|
782
|
+
function expandQueryTokens(tokens) {
|
|
783
|
+
const expanded = new Set(tokens);
|
|
784
|
+
for (const token of tokens) {
|
|
785
|
+
const synonyms = SYNONYM_MAP[token];
|
|
786
|
+
if (synonyms) for (const synonym of synonyms) expanded.add(synonym);
|
|
787
|
+
}
|
|
788
|
+
return expanded;
|
|
789
|
+
}
|
|
790
|
+
function scoreChunk(query, chunk) {
|
|
791
|
+
const expandedTokens = expandQueryTokens(tokenize(query).filter((token) => !STOP_WORDS.has(token)));
|
|
792
|
+
const chunkTokens = new Set(chunk.keywords);
|
|
793
|
+
let overlapScore = 0;
|
|
794
|
+
for (const token of expandedTokens) {
|
|
795
|
+
if (chunkTokens.has(token)) overlapScore += 2;
|
|
796
|
+
if (chunk.content.toLowerCase().includes(token)) overlapScore += 1;
|
|
797
|
+
if (chunk.title.toLowerCase().includes(token)) overlapScore += 1.5;
|
|
798
|
+
if (chunk.category.toLowerCase().includes(token)) overlapScore += 1.5;
|
|
799
|
+
}
|
|
800
|
+
const lengthPenalty = Math.max(1, chunk.tokens / DEFAULT_CHUNK_TOKEN_TARGET);
|
|
801
|
+
return overlapScore / lengthPenalty;
|
|
802
|
+
}
|
|
803
|
+
function rankChunks(query, chunks) {
|
|
804
|
+
return chunks.map((chunk) => ({
|
|
805
|
+
...chunk,
|
|
806
|
+
score: scoreChunk(query, chunk)
|
|
807
|
+
})).filter((match) => match.score > 0).sort((a, b) => b.score - a.score);
|
|
808
|
+
}
|
|
809
|
+
function createAnswer(query, matches) {
|
|
810
|
+
if (matches.length === 0) return `No TipTap documentation matches were found for "${query}". Try broadening the query or referencing supported features like React integration, collaboration, or conversions.`;
|
|
811
|
+
return matches.map((match) => {
|
|
812
|
+
return `\u2022 ${match.title} (${match.category}): ${match.summary}`;
|
|
813
|
+
}).join("\n");
|
|
814
|
+
}
|
|
815
|
+
function selectCodeExamples(includeExamples, query, matches) {
|
|
816
|
+
if (!includeExamples) return [];
|
|
817
|
+
const matchedCategories = new Set(matches.map((match) => match.category));
|
|
818
|
+
const queryTokens = new Set(tokenize(query));
|
|
819
|
+
const suggestedExampleIds = /* @__PURE__ */ new Set();
|
|
820
|
+
for (const category of matchedCategories) {
|
|
821
|
+
const exampleIds = CATEGORY_EXAMPLE_MAP[category];
|
|
822
|
+
if (exampleIds) exampleIds.forEach((id) => suggestedExampleIds.add(id));
|
|
823
|
+
}
|
|
824
|
+
for (const example of CODE_EXAMPLES) if (example.keywords.some((keyword) => queryTokens.has(keyword))) suggestedExampleIds.add(example.id);
|
|
825
|
+
return CODE_EXAMPLES.filter((example) => suggestedExampleIds.has(example.id)).slice(0, 3);
|
|
826
|
+
}
|
|
827
|
+
/**
|
|
828
|
+
* TipTap documentation context tool.
|
|
829
|
+
*
|
|
830
|
+
* Answers questions about TipTap v3 capabilities by searching curated
|
|
831
|
+
* documentation chunks with semantic keyword matching.
|
|
832
|
+
*
|
|
833
|
+
* @example
|
|
834
|
+
* ```ts
|
|
835
|
+
* import { tiptapContextTool } from '@od-oneapp/ai-platform/tools';
|
|
836
|
+
*
|
|
837
|
+
* const result = await streamText({
|
|
838
|
+
* model,
|
|
839
|
+
* tools: { tiptapContext: tiptapContextTool },
|
|
840
|
+
* messages,
|
|
841
|
+
* });
|
|
842
|
+
* ```
|
|
843
|
+
*/
|
|
844
|
+
const tiptapContextTool = tool({
|
|
845
|
+
description: "Answer questions about TipTap v3 capabilities by searching curated documentation chunks with semantic keyword matching.",
|
|
846
|
+
inputSchema: z$1.object({
|
|
847
|
+
query: z$1.string().min(1, "query is required"),
|
|
848
|
+
context: z$1.string().optional(),
|
|
849
|
+
includeExamples: z$1.boolean().optional().default(true),
|
|
850
|
+
limit: z$1.number().int().min(1).max(MAX_RESULTS).optional().default(3)
|
|
851
|
+
}),
|
|
852
|
+
execute: async ({ query, context, includeExamples = true, limit = 3 }) => {
|
|
853
|
+
const index = await getTiptapDocIndex();
|
|
854
|
+
const searchQuery = [query, context].filter(Boolean).join("\n");
|
|
855
|
+
const ranked = rankChunks(searchQuery, index.chunks);
|
|
856
|
+
const topMatches = ranked.slice(0, limit);
|
|
857
|
+
return {
|
|
858
|
+
answer: createAnswer(searchQuery, topMatches),
|
|
859
|
+
query,
|
|
860
|
+
matchedCount: ranked.length,
|
|
861
|
+
relevantSections: topMatches.map((match) => ({
|
|
862
|
+
id: match.id,
|
|
863
|
+
category: match.category,
|
|
864
|
+
title: match.title,
|
|
865
|
+
summary: match.summary,
|
|
866
|
+
keywords: match.keywords,
|
|
867
|
+
score: Number(match.score.toFixed(3)),
|
|
868
|
+
content: match.content
|
|
869
|
+
})),
|
|
870
|
+
codeExamples: selectCodeExamples(includeExamples, searchQuery, topMatches),
|
|
871
|
+
metadata: {
|
|
872
|
+
categories: topMatches.map((match) => match.category),
|
|
873
|
+
indexSize: index.chunks.length
|
|
874
|
+
}
|
|
875
|
+
};
|
|
876
|
+
}
|
|
877
|
+
});
|
|
878
|
+
|
|
879
|
+
//#endregion
|
|
880
|
+
//#region src/tools/advanced/llm-tool.ts
|
|
881
|
+
/**
|
|
882
|
+
* @fileoverview LLM-powered tool utilities.
|
|
883
|
+
* @module @od-oneapp/ai-platform/tools/advanced
|
|
884
|
+
*/
|
|
885
|
+
const validationInputSchema = z.object({ content: z.string().describe("Content to validate") });
|
|
886
|
+
const validationOutputSchema = z.object({
|
|
887
|
+
isValid: z.boolean(),
|
|
888
|
+
score: z.number().min(0).max(100),
|
|
889
|
+
violations: z.array(z.object({
|
|
890
|
+
criterion: z.string(),
|
|
891
|
+
issue: z.string(),
|
|
892
|
+
severity: z.enum([
|
|
893
|
+
"low",
|
|
894
|
+
"medium",
|
|
895
|
+
"high"
|
|
896
|
+
])
|
|
897
|
+
})),
|
|
898
|
+
suggestions: z.array(z.string())
|
|
899
|
+
});
|
|
900
|
+
/**
|
|
901
|
+
* Creates a tool powered by an LLM with structured output.
|
|
902
|
+
*
|
|
903
|
+
* @param config - LLM tool configuration
|
|
904
|
+
* @returns AI SDK tool
|
|
905
|
+
*
|
|
906
|
+
* @example
|
|
907
|
+
* ```ts
|
|
908
|
+
* const summarizeTool = createLLMTool({
|
|
909
|
+
* name: 'summarize',
|
|
910
|
+
* description: 'Summarize text',
|
|
911
|
+
* parameters: z.object({ text: z.string() }),
|
|
912
|
+
* outputSchema: z.object({ summary: z.string(), keyPoints: z.array(z.string()) }),
|
|
913
|
+
* systemPrompt: 'You are a summarization assistant.',
|
|
914
|
+
* userPromptTemplate: 'Summarize: {{text}}',
|
|
915
|
+
* model: openai('gpt-4o-mini'),
|
|
916
|
+
* });
|
|
917
|
+
* ```
|
|
918
|
+
*/
|
|
919
|
+
function createLLMTool(config) {
|
|
920
|
+
const { description, parameters, outputSchema, systemPrompt, userPromptTemplate, model, maxTokens, temperature } = config;
|
|
921
|
+
return tool({
|
|
922
|
+
description,
|
|
923
|
+
inputSchema: parameters,
|
|
924
|
+
execute: async (input) => {
|
|
925
|
+
return (await generateObject({
|
|
926
|
+
model,
|
|
927
|
+
system: systemPrompt,
|
|
928
|
+
prompt: interpolatePrompt(userPromptTemplate, input),
|
|
929
|
+
schema: outputSchema,
|
|
930
|
+
...maxTokens && { maxOutputTokens: maxTokens },
|
|
931
|
+
...temperature !== void 0 && { temperature }
|
|
932
|
+
})).object;
|
|
933
|
+
}
|
|
934
|
+
});
|
|
935
|
+
}
|
|
936
|
+
/**
|
|
937
|
+
* Creates an LLM-powered validation tool.
|
|
938
|
+
*
|
|
939
|
+
* @param config - Validation tool configuration
|
|
940
|
+
* @returns SDKTool that validates input against criteria
|
|
941
|
+
*
|
|
942
|
+
* @example
|
|
943
|
+
* ```ts
|
|
944
|
+
* const validateTool = createValidationTool({
|
|
945
|
+
* name: 'validateContent',
|
|
946
|
+
* description: 'Validate content against guidelines',
|
|
947
|
+
* criteria: ['No harmful content', 'Proper formatting', 'Factually accurate'],
|
|
948
|
+
* model: openai('gpt-4o-mini'),
|
|
949
|
+
* });
|
|
950
|
+
* ```
|
|
951
|
+
*/
|
|
952
|
+
function createValidationTool(config) {
|
|
953
|
+
return tool({
|
|
954
|
+
description: config.description,
|
|
955
|
+
inputSchema: validationInputSchema,
|
|
956
|
+
execute: async (input) => {
|
|
957
|
+
const { content } = input;
|
|
958
|
+
return (await generateObject({
|
|
959
|
+
model: config.model,
|
|
960
|
+
system: `You are a content validator. Validate content against these criteria:
|
|
961
|
+
${config.criteria.map((c, i) => `${i + 1}. ${c}`).join("\n")}
|
|
962
|
+
|
|
963
|
+
Respond with JSON matching this schema:
|
|
964
|
+
- isValid: boolean
|
|
965
|
+
- score: 0-100
|
|
966
|
+
- violations: array of {criterion, issue, severity: low|medium|high}
|
|
967
|
+
- suggestions: array of improvement suggestions`,
|
|
968
|
+
prompt: `Validate this content:\n\n${content}`,
|
|
969
|
+
schema: validationOutputSchema,
|
|
970
|
+
...config.maxTokens && { maxOutputTokens: config.maxTokens }
|
|
971
|
+
})).object;
|
|
972
|
+
}
|
|
973
|
+
});
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Creates an LLM-powered transformation tool.
|
|
977
|
+
*
|
|
978
|
+
* @param config - Transformation tool configuration
|
|
979
|
+
* @returns SDKTool that transforms input text
|
|
980
|
+
*
|
|
981
|
+
* @example
|
|
982
|
+
* ```ts
|
|
983
|
+
* const rewriteTool = createTransformTool({
|
|
984
|
+
* name: 'rewrite',
|
|
985
|
+
* description: 'Rewrite text in a different style',
|
|
986
|
+
* styles: ['formal', 'casual', 'technical'],
|
|
987
|
+
* model: openai('gpt-4o-mini'),
|
|
988
|
+
* });
|
|
989
|
+
* ```
|
|
990
|
+
*/
|
|
991
|
+
function createTransformTool(config) {
|
|
992
|
+
const transformInputSchema = z.object({
|
|
993
|
+
text: z.string().describe("Text to transform"),
|
|
994
|
+
style: z.enum(config.styles).describe("Target style"),
|
|
995
|
+
preserveLength: z.boolean().optional().describe("Keep similar length")
|
|
996
|
+
});
|
|
997
|
+
return tool({
|
|
998
|
+
description: config.description,
|
|
999
|
+
inputSchema: transformInputSchema,
|
|
1000
|
+
execute: async (input) => {
|
|
1001
|
+
const { text, style, preserveLength } = input;
|
|
1002
|
+
const { text: result } = await generateText({
|
|
1003
|
+
model: config.model,
|
|
1004
|
+
system: `You are a text transformation assistant. Transform text to the requested style.${preserveLength ? " Keep the output approximately the same length as the input." : ""}`,
|
|
1005
|
+
prompt: `Transform this text to ${style} style:\n\n${text}`
|
|
1006
|
+
});
|
|
1007
|
+
return {
|
|
1008
|
+
original: text,
|
|
1009
|
+
transformed: result,
|
|
1010
|
+
style
|
|
1011
|
+
};
|
|
1012
|
+
}
|
|
1013
|
+
});
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* Interpolates template strings with values.
|
|
1017
|
+
*/
|
|
1018
|
+
function interpolatePrompt(template, values) {
|
|
1019
|
+
return template.replace(/\{\{(\w+)\}\}/g, (_, key) => {
|
|
1020
|
+
const value = values[key];
|
|
1021
|
+
return value !== void 0 ? String(value) : `{{${key}}}`;
|
|
1022
|
+
});
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
//#endregion
|
|
1026
|
+
//#region src/tools/advanced/hitl.ts
|
|
1027
|
+
/**
|
|
1028
|
+
* Creates a tool that requires human approval before execution.
|
|
1029
|
+
*
|
|
1030
|
+
* @param config - HITL tool configuration
|
|
1031
|
+
* @returns Tool with approval gate
|
|
1032
|
+
*
|
|
1033
|
+
* @example
|
|
1034
|
+
* ```ts
|
|
1035
|
+
* const deleteFileTool = createHITLTool({
|
|
1036
|
+
* name: 'deleteFile',
|
|
1037
|
+
* description: 'Delete a file from the system',
|
|
1038
|
+
* parameters: z.object({ path: z.string() }),
|
|
1039
|
+
* execute: async ({ path }) => deleteFile(path),
|
|
1040
|
+
* requestApproval: async ({ path }) => {
|
|
1041
|
+
* return await showApprovalModal({
|
|
1042
|
+
* title: 'Delete File?',
|
|
1043
|
+
* message: `Are you sure you want to delete ${path}?`,
|
|
1044
|
+
* });
|
|
1045
|
+
* },
|
|
1046
|
+
* riskLevel: 'high',
|
|
1047
|
+
* });
|
|
1048
|
+
* ```
|
|
1049
|
+
*/
|
|
1050
|
+
function createHITLTool(config) {
|
|
1051
|
+
return tool({
|
|
1052
|
+
description: `${config.description} (Requires approval${config.riskLevel ? ` - ${config.riskLevel} risk` : ""})`,
|
|
1053
|
+
inputSchema: config.parameters,
|
|
1054
|
+
execute: async (params) => {
|
|
1055
|
+
const typedParams = params;
|
|
1056
|
+
const decision = await config.requestApproval(typedParams);
|
|
1057
|
+
if (!decision.approved) {
|
|
1058
|
+
if (config.onDenied) await config.onDenied(typedParams, decision.reason);
|
|
1059
|
+
return {
|
|
1060
|
+
success: false,
|
|
1061
|
+
error: "Action denied by user",
|
|
1062
|
+
reason: decision.reason
|
|
1063
|
+
};
|
|
1064
|
+
}
|
|
1065
|
+
const finalParams = decision.modifiedParams ? {
|
|
1066
|
+
...params,
|
|
1067
|
+
...decision.modifiedParams
|
|
1068
|
+
} : params;
|
|
1069
|
+
return {
|
|
1070
|
+
success: true,
|
|
1071
|
+
result: await config.execute(finalParams)
|
|
1072
|
+
};
|
|
1073
|
+
}
|
|
1074
|
+
});
|
|
1075
|
+
}
|
|
1076
|
+
/**
|
|
1077
|
+
* Creates an approval policy checker.
|
|
1078
|
+
*
|
|
1079
|
+
* @param policies - Array of approval policies
|
|
1080
|
+
* @returns Function to check if params satisfy any policy
|
|
1081
|
+
*
|
|
1082
|
+
* @example
|
|
1083
|
+
* ```ts
|
|
1084
|
+
* const checkPolicy = createPolicyChecker([
|
|
1085
|
+
* {
|
|
1086
|
+
* name: 'safe-paths',
|
|
1087
|
+
* toolPatterns: ['deleteFile', 'moveFile'],
|
|
1088
|
+
* conditions: [
|
|
1089
|
+
* { paramPath: 'path', operator: 'contains', value: '/tmp/' },
|
|
1090
|
+
* ],
|
|
1091
|
+
* maxRiskLevel: 'medium',
|
|
1092
|
+
* },
|
|
1093
|
+
* ]);
|
|
1094
|
+
*
|
|
1095
|
+
* const canAutoApprove = checkPolicy('deleteFile', { path: '/tmp/test.txt' }, 'low');
|
|
1096
|
+
* ```
|
|
1097
|
+
*/
|
|
1098
|
+
function createPolicyChecker(policies) {
|
|
1099
|
+
return function checkPolicy(toolName, params, riskLevel) {
|
|
1100
|
+
const riskOrder = {
|
|
1101
|
+
low: 1,
|
|
1102
|
+
medium: 2,
|
|
1103
|
+
high: 3,
|
|
1104
|
+
critical: 4
|
|
1105
|
+
};
|
|
1106
|
+
const currentRisk = riskOrder[riskLevel];
|
|
1107
|
+
for (const policy of policies) {
|
|
1108
|
+
if (!policy.toolPatterns.some((pattern) => {
|
|
1109
|
+
if (pattern === "*") return true;
|
|
1110
|
+
if (pattern.endsWith("*")) return toolName.startsWith(pattern.slice(0, -1));
|
|
1111
|
+
return toolName === pattern;
|
|
1112
|
+
})) continue;
|
|
1113
|
+
if (currentRisk > riskOrder[policy.maxRiskLevel]) continue;
|
|
1114
|
+
if (policy.conditions.every((condition) => {
|
|
1115
|
+
return evaluateCondition(getNestedValue(params, condition.paramPath), condition.operator, condition.value);
|
|
1116
|
+
})) return {
|
|
1117
|
+
approved: true,
|
|
1118
|
+
policy: policy.name
|
|
1119
|
+
};
|
|
1120
|
+
}
|
|
1121
|
+
return { approved: false };
|
|
1122
|
+
};
|
|
1123
|
+
}
|
|
1124
|
+
/**
|
|
1125
|
+
* Gets a nested value from an object using dot notation.
|
|
1126
|
+
*/
|
|
1127
|
+
function getNestedValue(obj, path) {
|
|
1128
|
+
return path.split(".").reduce((curr, key) => {
|
|
1129
|
+
if (curr && typeof curr === "object" && key in curr) return curr[key];
|
|
1130
|
+
}, obj);
|
|
1131
|
+
}
|
|
1132
|
+
/**
|
|
1133
|
+
* Evaluates a condition against a value.
|
|
1134
|
+
*/
|
|
1135
|
+
function evaluateCondition(value, operator, target) {
|
|
1136
|
+
switch (operator) {
|
|
1137
|
+
case "equals": return value === target;
|
|
1138
|
+
case "contains": return typeof value === "string" && typeof target === "string" && value.includes(target);
|
|
1139
|
+
case "matches": return typeof value === "string" && typeof target === "string" && new RegExp(target).test(value);
|
|
1140
|
+
case "lessThan": return typeof value === "number" && typeof target === "number" && value < target;
|
|
1141
|
+
case "greaterThan": return typeof value === "number" && typeof target === "number" && value > target;
|
|
1142
|
+
default: return false;
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
/**
|
|
1146
|
+
* Creates a batch approval request for multiple tool calls.
|
|
1147
|
+
*
|
|
1148
|
+
* @param requests - Array of tool call requests
|
|
1149
|
+
* @param batchApproval - Function to approve batch
|
|
1150
|
+
* @returns Filtered array of approved requests
|
|
1151
|
+
*/
|
|
1152
|
+
async function batchApproval(requests, batchApprovalFn) {
|
|
1153
|
+
const result = await batchApprovalFn(requests);
|
|
1154
|
+
if (!result.approved) return [];
|
|
1155
|
+
return result.approvedIndices.map((i) => requests[i]).filter((item) => item !== void 0);
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
//#endregion
|
|
1159
|
+
//#region src/tools/advanced/caching.ts
|
|
1160
|
+
/**
|
|
1161
|
+
* In-memory cache for tool results.
|
|
1162
|
+
*/
|
|
1163
|
+
var ToolCache = class {
|
|
1164
|
+
cache = /* @__PURE__ */ new Map();
|
|
1165
|
+
maxSize;
|
|
1166
|
+
defaultTTL;
|
|
1167
|
+
constructor(options = {}) {
|
|
1168
|
+
this.maxSize = options.maxSize ?? 1e3;
|
|
1169
|
+
this.defaultTTL = options.defaultTTL ?? 6e4;
|
|
1170
|
+
}
|
|
1171
|
+
/**
|
|
1172
|
+
* Gets a value from cache.
|
|
1173
|
+
*/
|
|
1174
|
+
get(key) {
|
|
1175
|
+
const entry = this.cache.get(key);
|
|
1176
|
+
if (!entry) return void 0;
|
|
1177
|
+
if (Date.now() > entry.expiresAt) {
|
|
1178
|
+
this.cache.delete(key);
|
|
1179
|
+
return;
|
|
1180
|
+
}
|
|
1181
|
+
entry.hits++;
|
|
1182
|
+
return entry.value;
|
|
1183
|
+
}
|
|
1184
|
+
/**
|
|
1185
|
+
* Sets a value in cache.
|
|
1186
|
+
*/
|
|
1187
|
+
set(key, value, ttl) {
|
|
1188
|
+
if (this.cache.size >= this.maxSize) this.evictLeastUsed();
|
|
1189
|
+
this.cache.set(key, {
|
|
1190
|
+
value,
|
|
1191
|
+
expiresAt: Date.now() + (ttl ?? this.defaultTTL),
|
|
1192
|
+
hits: 0
|
|
1193
|
+
});
|
|
1194
|
+
}
|
|
1195
|
+
/**
|
|
1196
|
+
* Removes expired entries.
|
|
1197
|
+
*/
|
|
1198
|
+
prune() {
|
|
1199
|
+
const now = Date.now();
|
|
1200
|
+
let pruned = 0;
|
|
1201
|
+
for (const [key, entry] of this.cache.entries()) if (now > entry.expiresAt) {
|
|
1202
|
+
this.cache.delete(key);
|
|
1203
|
+
pruned++;
|
|
1204
|
+
}
|
|
1205
|
+
return pruned;
|
|
1206
|
+
}
|
|
1207
|
+
/**
|
|
1208
|
+
* Clears the entire cache.
|
|
1209
|
+
*/
|
|
1210
|
+
clear() {
|
|
1211
|
+
this.cache.clear();
|
|
1212
|
+
}
|
|
1213
|
+
/**
|
|
1214
|
+
* Gets cache statistics.
|
|
1215
|
+
*/
|
|
1216
|
+
stats() {
|
|
1217
|
+
let totalHits = 0;
|
|
1218
|
+
for (const entry of this.cache.values()) totalHits += entry.hits;
|
|
1219
|
+
return {
|
|
1220
|
+
size: this.cache.size,
|
|
1221
|
+
maxSize: this.maxSize,
|
|
1222
|
+
totalHits
|
|
1223
|
+
};
|
|
1224
|
+
}
|
|
1225
|
+
evictLeastUsed() {
|
|
1226
|
+
let minHits = Infinity;
|
|
1227
|
+
let minKey;
|
|
1228
|
+
for (const [key, entry] of this.cache.entries()) if (entry.hits < minHits) {
|
|
1229
|
+
minHits = entry.hits;
|
|
1230
|
+
minKey = key;
|
|
1231
|
+
}
|
|
1232
|
+
if (minKey) this.cache.delete(minKey);
|
|
1233
|
+
}
|
|
1234
|
+
};
|
|
1235
|
+
/**
|
|
1236
|
+
* Wraps a tool handler with caching.
|
|
1237
|
+
*
|
|
1238
|
+
* @param handler - Original handler
|
|
1239
|
+
* @param options - Cache options
|
|
1240
|
+
* @returns Cached handler
|
|
1241
|
+
*
|
|
1242
|
+
* @example
|
|
1243
|
+
* ```ts
|
|
1244
|
+
* const cache = new ToolCache<SearchResult>({ ttl: 300000 });
|
|
1245
|
+
*
|
|
1246
|
+
* const cachedSearch = withCaching(
|
|
1247
|
+
* async ({ query }) => searchDocs(query),
|
|
1248
|
+
* { cache, keyGenerator: ({ query }) => `search:${query}` }
|
|
1249
|
+
* );
|
|
1250
|
+
* ```
|
|
1251
|
+
*/
|
|
1252
|
+
function withCaching(handler, options = {}) {
|
|
1253
|
+
const cache = options.cache ?? new ToolCache();
|
|
1254
|
+
const keyGen = options.keyGenerator ?? defaultKeyGenerator;
|
|
1255
|
+
return async (input, context) => {
|
|
1256
|
+
if (options.skipCache?.(input, context)) return handler(input, context);
|
|
1257
|
+
const key = keyGen(input, context);
|
|
1258
|
+
const cached = cache.get(key);
|
|
1259
|
+
if (cached !== void 0) return cached;
|
|
1260
|
+
try {
|
|
1261
|
+
const result = await handler(input, context);
|
|
1262
|
+
cache.set(key, result, options.ttl);
|
|
1263
|
+
return result;
|
|
1264
|
+
} catch (error) {
|
|
1265
|
+
if (options.cacheErrors) {
|
|
1266
|
+
const errorResult = { error: String(error) };
|
|
1267
|
+
cache.set(key, errorResult, options.ttl);
|
|
1268
|
+
return errorResult;
|
|
1269
|
+
}
|
|
1270
|
+
throw error;
|
|
1271
|
+
}
|
|
1272
|
+
};
|
|
1273
|
+
}
|
|
1274
|
+
/**
|
|
1275
|
+
* Default key generator using JSON.stringify.
|
|
1276
|
+
*/
|
|
1277
|
+
function defaultKeyGenerator(input, context) {
|
|
1278
|
+
return JSON.stringify({
|
|
1279
|
+
input,
|
|
1280
|
+
userId: context.userId
|
|
1281
|
+
});
|
|
1282
|
+
}
|
|
1283
|
+
/**
|
|
1284
|
+
* Creates a cache key builder with prefixing.
|
|
1285
|
+
*
|
|
1286
|
+
* @param prefix - Cache key prefix
|
|
1287
|
+
* @returns Key generator function
|
|
1288
|
+
*
|
|
1289
|
+
* @example
|
|
1290
|
+
* ```ts
|
|
1291
|
+
* const keyGen = createKeyBuilder('search');
|
|
1292
|
+
* keyGen({ query: 'test' }, ctx); // => 'search:{"query":"test"}'
|
|
1293
|
+
* ```
|
|
1294
|
+
*/
|
|
1295
|
+
function createKeyBuilder(prefix) {
|
|
1296
|
+
return function(input, context) {
|
|
1297
|
+
return `${prefix}:${JSON.stringify({
|
|
1298
|
+
input,
|
|
1299
|
+
userId: context.userId
|
|
1300
|
+
})}`;
|
|
1301
|
+
};
|
|
1302
|
+
}
|
|
1303
|
+
/**
|
|
1304
|
+
* Creates a selective key generator that only uses specified fields.
|
|
1305
|
+
*
|
|
1306
|
+
* @param prefix - Cache key prefix
|
|
1307
|
+
* @param fields - Fields to include in key
|
|
1308
|
+
* @returns Key generator function
|
|
1309
|
+
*
|
|
1310
|
+
* @example
|
|
1311
|
+
* ```ts
|
|
1312
|
+
* const keyGen = createSelectiveKeyBuilder('search', ['query', 'limit']);
|
|
1313
|
+
* keyGen({ query: 'test', limit: 10, page: 1 }, ctx); // => 'search:test:10'
|
|
1314
|
+
* ```
|
|
1315
|
+
*/
|
|
1316
|
+
function createSelectiveKeyBuilder(prefix, fields) {
|
|
1317
|
+
return function(input, context) {
|
|
1318
|
+
return `${prefix}:${fields.map((f) => String(input[f] ?? "")).join(":")}`;
|
|
1319
|
+
};
|
|
1320
|
+
}
|
|
1321
|
+
/**
|
|
1322
|
+
* Creates a stale-while-revalidate cache wrapper.
|
|
1323
|
+
*
|
|
1324
|
+
* @param handler - Original handler
|
|
1325
|
+
* @param options - SWR options
|
|
1326
|
+
* @returns Handler with SWR caching
|
|
1327
|
+
*
|
|
1328
|
+
* @example
|
|
1329
|
+
* ```ts
|
|
1330
|
+
* const swrSearch = withSWRCaching(searchHandler, {
|
|
1331
|
+
* staleTTL: 60000, // 1 minute stale
|
|
1332
|
+
* maxTTL: 300000, // 5 minute max
|
|
1333
|
+
* });
|
|
1334
|
+
* ```
|
|
1335
|
+
*/
|
|
1336
|
+
function withSWRCaching(handler, options) {
|
|
1337
|
+
const cache = new ToolCache();
|
|
1338
|
+
const keyGen = options.keyGenerator ?? defaultKeyGenerator;
|
|
1339
|
+
return async (input, context) => {
|
|
1340
|
+
const key = keyGen(input, context);
|
|
1341
|
+
const cached = cache.get(key);
|
|
1342
|
+
const now = Date.now();
|
|
1343
|
+
if (cached && now - cached.fetchedAt < options.staleTTL) return cached.value;
|
|
1344
|
+
if (cached && now - cached.fetchedAt < options.maxTTL) {
|
|
1345
|
+
(async () => {
|
|
1346
|
+
try {
|
|
1347
|
+
const fresh = await handler(input, context);
|
|
1348
|
+
cache.set(key, {
|
|
1349
|
+
value: fresh,
|
|
1350
|
+
fetchedAt: Date.now()
|
|
1351
|
+
}, options.maxTTL);
|
|
1352
|
+
} catch {}
|
|
1353
|
+
})();
|
|
1354
|
+
return cached.value;
|
|
1355
|
+
}
|
|
1356
|
+
const result = await handler(input, context);
|
|
1357
|
+
cache.set(key, {
|
|
1358
|
+
value: result,
|
|
1359
|
+
fetchedAt: now
|
|
1360
|
+
}, options.maxTTL);
|
|
1361
|
+
return result;
|
|
1362
|
+
};
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
//#endregion
|
|
1366
|
+
//#region src/tools/advanced/generator.ts
|
|
1367
|
+
/**
|
|
1368
|
+
* Creates a tool that streams results via async generator.
|
|
1369
|
+
*
|
|
1370
|
+
* Note: The tool collects all chunks and returns the final result.
|
|
1371
|
+
* For true streaming, use with streamText's onToolCall.
|
|
1372
|
+
*
|
|
1373
|
+
* @param config - Generator tool configuration
|
|
1374
|
+
* @returns AI SDK tool
|
|
1375
|
+
*
|
|
1376
|
+
* @example
|
|
1377
|
+
* ```ts
|
|
1378
|
+
* const processFileTool = createGeneratorTool({
|
|
1379
|
+
* name: 'processFile',
|
|
1380
|
+
* description: 'Process a large file in chunks',
|
|
1381
|
+
* parameters: z.object({ path: z.string() }),
|
|
1382
|
+
* generator: async function* ({ path }) {
|
|
1383
|
+
* const chunks = await readFileChunks(path);
|
|
1384
|
+
* for (const chunk of chunks) {
|
|
1385
|
+
* yield { processed: processChunk(chunk) };
|
|
1386
|
+
* }
|
|
1387
|
+
* return { totalChunks: chunks.length };
|
|
1388
|
+
* },
|
|
1389
|
+
* });
|
|
1390
|
+
* ```
|
|
1391
|
+
*/
|
|
1392
|
+
function createGeneratorTool(config) {
|
|
1393
|
+
return tool({
|
|
1394
|
+
description: config.description,
|
|
1395
|
+
inputSchema: config.parameters,
|
|
1396
|
+
execute: async (input) => {
|
|
1397
|
+
const typedInput = input;
|
|
1398
|
+
const chunks = [];
|
|
1399
|
+
let index = 0;
|
|
1400
|
+
let finalResult;
|
|
1401
|
+
const gen = config.generator(typedInput);
|
|
1402
|
+
for (;;) {
|
|
1403
|
+
const { value, done } = await gen.next();
|
|
1404
|
+
if (done) {
|
|
1405
|
+
finalResult = value;
|
|
1406
|
+
break;
|
|
1407
|
+
}
|
|
1408
|
+
const chunk = value;
|
|
1409
|
+
chunks.push(chunk);
|
|
1410
|
+
if (config.transformChunk) config.transformChunk(chunk, index);
|
|
1411
|
+
index++;
|
|
1412
|
+
}
|
|
1413
|
+
if (config.transformFinal && finalResult !== void 0) return config.transformFinal(finalResult, chunks);
|
|
1414
|
+
return {
|
|
1415
|
+
chunks,
|
|
1416
|
+
final: finalResult
|
|
1417
|
+
};
|
|
1418
|
+
}
|
|
1419
|
+
});
|
|
1420
|
+
}
|
|
1421
|
+
/**
|
|
1422
|
+
* Creates a paginated tool that fetches results in pages.
|
|
1423
|
+
*
|
|
1424
|
+
* @param config - Pagination tool configuration
|
|
1425
|
+
* @returns AI SDK tool
|
|
1426
|
+
*
|
|
1427
|
+
* @example
|
|
1428
|
+
* ```ts
|
|
1429
|
+
* const listUsersTool = createPaginatedTool({
|
|
1430
|
+
* name: 'listUsers',
|
|
1431
|
+
* description: 'List users with pagination',
|
|
1432
|
+
* parameters: z.object({ filter: z.string().optional() }),
|
|
1433
|
+
* pageSize: 100,
|
|
1434
|
+
* maxPages: 10,
|
|
1435
|
+
* fetchPage: async ({ filter }, page, pageSize) => {
|
|
1436
|
+
* return fetchUsers({ filter, page, pageSize });
|
|
1437
|
+
* },
|
|
1438
|
+
* });
|
|
1439
|
+
* ```
|
|
1440
|
+
*/
|
|
1441
|
+
function createPaginatedTool(config) {
|
|
1442
|
+
const { pageSize, maxPages = 10 } = config;
|
|
1443
|
+
return tool({
|
|
1444
|
+
description: config.description,
|
|
1445
|
+
inputSchema: config.parameters,
|
|
1446
|
+
execute: async (input) => {
|
|
1447
|
+
const typedInput = input;
|
|
1448
|
+
const allItems = [];
|
|
1449
|
+
let page = 0;
|
|
1450
|
+
let hasMore = true;
|
|
1451
|
+
while (hasMore && page < maxPages) {
|
|
1452
|
+
const { items, hasMore: pageHasMore } = await config.fetchPage(typedInput, page, pageSize);
|
|
1453
|
+
allItems.push(...items);
|
|
1454
|
+
hasMore = pageHasMore;
|
|
1455
|
+
page++;
|
|
1456
|
+
}
|
|
1457
|
+
return {
|
|
1458
|
+
items: allItems,
|
|
1459
|
+
totalPages: page,
|
|
1460
|
+
truncated: hasMore
|
|
1461
|
+
};
|
|
1462
|
+
}
|
|
1463
|
+
});
|
|
1464
|
+
}
|
|
1465
|
+
/**
|
|
1466
|
+
* Creates a tool that retries on failure with exponential backoff.
|
|
1467
|
+
*
|
|
1468
|
+
* @param config - Retry tool configuration
|
|
1469
|
+
* @returns AI SDK tool
|
|
1470
|
+
*
|
|
1471
|
+
* @example
|
|
1472
|
+
* ```ts
|
|
1473
|
+
* const fetchDataTool = createRetryTool({
|
|
1474
|
+
* name: 'fetchData',
|
|
1475
|
+
* description: 'Fetch data with retry',
|
|
1476
|
+
* parameters: z.object({ url: z.string() }),
|
|
1477
|
+
* maxRetries: 3,
|
|
1478
|
+
* baseDelay: 1000,
|
|
1479
|
+
* execute: async ({ url }) => fetch(url).then(r => r.json()),
|
|
1480
|
+
* });
|
|
1481
|
+
* ```
|
|
1482
|
+
*/
|
|
1483
|
+
function createRetryTool(config) {
|
|
1484
|
+
const { maxRetries, baseDelay = 1e3, maxDelay = 3e4, shouldRetry = () => true } = config;
|
|
1485
|
+
return tool({
|
|
1486
|
+
description: config.description,
|
|
1487
|
+
inputSchema: config.parameters,
|
|
1488
|
+
execute: async (input) => {
|
|
1489
|
+
const typedInput = input;
|
|
1490
|
+
let lastError;
|
|
1491
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) try {
|
|
1492
|
+
return await config.execute(typedInput);
|
|
1493
|
+
} catch (e) {
|
|
1494
|
+
lastError = e instanceof Error ? e : new Error(String(e));
|
|
1495
|
+
if (attempt < maxRetries && shouldRetry(lastError, attempt)) await sleep(Math.min(baseDelay * Math.pow(2, attempt), maxDelay));
|
|
1496
|
+
}
|
|
1497
|
+
throw lastError;
|
|
1498
|
+
}
|
|
1499
|
+
});
|
|
1500
|
+
}
|
|
1501
|
+
/**
|
|
1502
|
+
* Helper to create a polling tool that waits for a condition.
|
|
1503
|
+
*
|
|
1504
|
+
* @param config - Polling tool configuration
|
|
1505
|
+
* @returns AI SDK tool
|
|
1506
|
+
*
|
|
1507
|
+
* @example
|
|
1508
|
+
* ```ts
|
|
1509
|
+
* const waitForJobTool = createPollingTool({
|
|
1510
|
+
* name: 'waitForJob',
|
|
1511
|
+
* description: 'Wait for a job to complete',
|
|
1512
|
+
* parameters: z.object({ jobId: z.string() }),
|
|
1513
|
+
* poll: async ({ jobId }) => getJobStatus(jobId),
|
|
1514
|
+
* isComplete: (status) => status.state === 'complete',
|
|
1515
|
+
* interval: 2000,
|
|
1516
|
+
* timeout: 60000,
|
|
1517
|
+
* });
|
|
1518
|
+
* ```
|
|
1519
|
+
*/
|
|
1520
|
+
function createPollingTool(config) {
|
|
1521
|
+
const { interval = 1e3, timeout = 3e4 } = config;
|
|
1522
|
+
return tool({
|
|
1523
|
+
description: config.description,
|
|
1524
|
+
inputSchema: config.parameters,
|
|
1525
|
+
execute: async (input) => {
|
|
1526
|
+
const typedInput = input;
|
|
1527
|
+
const startTime = Date.now();
|
|
1528
|
+
while (Date.now() - startTime < timeout) {
|
|
1529
|
+
const status = await config.poll(typedInput);
|
|
1530
|
+
if (config.isComplete(status)) return {
|
|
1531
|
+
complete: true,
|
|
1532
|
+
status
|
|
1533
|
+
};
|
|
1534
|
+
await sleep(interval);
|
|
1535
|
+
}
|
|
1536
|
+
return {
|
|
1537
|
+
complete: false,
|
|
1538
|
+
timedOut: true
|
|
1539
|
+
};
|
|
1540
|
+
}
|
|
1541
|
+
});
|
|
1542
|
+
}
|
|
1543
|
+
/**
|
|
1544
|
+
* Sleep helper.
|
|
1545
|
+
*/
|
|
1546
|
+
function sleep(ms) {
|
|
1547
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1550
|
+
//#endregion
|
|
1551
|
+
//#region src/tools/artifacts/artifact-tools.ts
|
|
1552
|
+
/**
|
|
1553
|
+
* @fileoverview Artifact-specific tool factories.
|
|
1554
|
+
* @module @od-oneapp/ai-platform/tools/artifacts
|
|
1555
|
+
*/
|
|
1556
|
+
/**
|
|
1557
|
+
* Artifact types supported by the system.
|
|
1558
|
+
*/
|
|
1559
|
+
const ArtifactType = z.enum([
|
|
1560
|
+
"document",
|
|
1561
|
+
"code",
|
|
1562
|
+
"presentation",
|
|
1563
|
+
"spreadsheet",
|
|
1564
|
+
"canvas",
|
|
1565
|
+
"image",
|
|
1566
|
+
"diagram"
|
|
1567
|
+
]);
|
|
1568
|
+
/**
|
|
1569
|
+
* Base artifact metadata.
|
|
1570
|
+
*/
|
|
1571
|
+
const ArtifactMetadataSchema = z.object({
|
|
1572
|
+
id: z.string(),
|
|
1573
|
+
type: ArtifactType,
|
|
1574
|
+
title: z.string(),
|
|
1575
|
+
createdAt: z.string().datetime(),
|
|
1576
|
+
updatedAt: z.string().datetime(),
|
|
1577
|
+
version: z.number()
|
|
1578
|
+
});
|
|
1579
|
+
/**
|
|
1580
|
+
* Creates a tool for creating artifacts.
|
|
1581
|
+
*
|
|
1582
|
+
* @param config - Creation tool configuration
|
|
1583
|
+
* @returns AI SDK tool
|
|
1584
|
+
*
|
|
1585
|
+
* @example
|
|
1586
|
+
* ```ts
|
|
1587
|
+
* const createDocTool = createArtifactCreationTool({
|
|
1588
|
+
* artifactType: 'document',
|
|
1589
|
+
* description: 'Create a new document',
|
|
1590
|
+
* handler: async ({ title, content }) => {
|
|
1591
|
+
* const doc = await createDocument({ title, content });
|
|
1592
|
+
* return { success: true, artifact: doc.metadata, data: doc };
|
|
1593
|
+
* },
|
|
1594
|
+
* });
|
|
1595
|
+
* ```
|
|
1596
|
+
*/
|
|
1597
|
+
function createArtifactCreationTool(config) {
|
|
1598
|
+
const contentSchema = config.contentSchema ?? z.unknown();
|
|
1599
|
+
return tool({
|
|
1600
|
+
description: config.description,
|
|
1601
|
+
inputSchema: z.object({
|
|
1602
|
+
title: z.string().describe("Artifact title"),
|
|
1603
|
+
content: contentSchema.describe("Artifact content")
|
|
1604
|
+
}),
|
|
1605
|
+
execute: async (input) => {
|
|
1606
|
+
return config.handler(input);
|
|
1607
|
+
}
|
|
1608
|
+
});
|
|
1609
|
+
}
|
|
1610
|
+
/**
|
|
1611
|
+
* Creates a tool for updating artifacts.
|
|
1612
|
+
*
|
|
1613
|
+
* @param config - Update tool configuration
|
|
1614
|
+
* @returns AI SDK tool
|
|
1615
|
+
*/
|
|
1616
|
+
function createArtifactUpdateTool(config) {
|
|
1617
|
+
const updateSchema = config.updateSchema ?? z.unknown();
|
|
1618
|
+
return tool({
|
|
1619
|
+
description: config.description,
|
|
1620
|
+
inputSchema: z.object({
|
|
1621
|
+
id: z.string().describe("Artifact ID"),
|
|
1622
|
+
update: updateSchema.describe("Update payload")
|
|
1623
|
+
}),
|
|
1624
|
+
execute: async (input) => {
|
|
1625
|
+
return config.handler(input);
|
|
1626
|
+
}
|
|
1627
|
+
});
|
|
1628
|
+
}
|
|
1629
|
+
/**
|
|
1630
|
+
* Creates a tool for reading artifacts.
|
|
1631
|
+
*
|
|
1632
|
+
* @param config - Read tool configuration
|
|
1633
|
+
* @returns AI SDK tool
|
|
1634
|
+
*/
|
|
1635
|
+
function createArtifactReadTool(config) {
|
|
1636
|
+
return tool({
|
|
1637
|
+
description: config.description,
|
|
1638
|
+
inputSchema: z.object({ id: z.string().describe("Artifact ID") }),
|
|
1639
|
+
execute: async (input) => {
|
|
1640
|
+
return config.handler(input);
|
|
1641
|
+
}
|
|
1642
|
+
});
|
|
1643
|
+
}
|
|
1644
|
+
/**
|
|
1645
|
+
* Creates a tool for deleting artifacts.
|
|
1646
|
+
*
|
|
1647
|
+
* @param config - Delete tool configuration
|
|
1648
|
+
* @returns AI SDK tool
|
|
1649
|
+
*/
|
|
1650
|
+
function createArtifactDeleteTool(config) {
|
|
1651
|
+
return tool({
|
|
1652
|
+
description: config.description,
|
|
1653
|
+
inputSchema: z.object({ id: z.string().describe("Artifact ID") }),
|
|
1654
|
+
execute: async (input) => {
|
|
1655
|
+
return config.handler(input);
|
|
1656
|
+
}
|
|
1657
|
+
});
|
|
1658
|
+
}
|
|
1659
|
+
/**
|
|
1660
|
+
* Creates a complete CRUD tool set for an artifact type.
|
|
1661
|
+
*
|
|
1662
|
+
* @param config - CRUD configuration
|
|
1663
|
+
* @returns Record of CRUD tools
|
|
1664
|
+
*
|
|
1665
|
+
* @example
|
|
1666
|
+
* ```ts
|
|
1667
|
+
* const docTools = createArtifactCRUDTools({
|
|
1668
|
+
* artifactType: 'document',
|
|
1669
|
+
* handlers: {
|
|
1670
|
+
* create: async ({ title, content }) => createDoc(title, content),
|
|
1671
|
+
* read: async ({ id }) => readDoc(id),
|
|
1672
|
+
* update: async ({ id, update }) => updateDoc(id, update),
|
|
1673
|
+
* delete: async ({ id }) => deleteDoc(id),
|
|
1674
|
+
* },
|
|
1675
|
+
* });
|
|
1676
|
+
* ```
|
|
1677
|
+
*/
|
|
1678
|
+
function createArtifactCRUDTools(config) {
|
|
1679
|
+
const { artifactType, handlers } = config;
|
|
1680
|
+
const typeLabel = artifactType.charAt(0).toUpperCase() + artifactType.slice(1);
|
|
1681
|
+
return {
|
|
1682
|
+
[`create${typeLabel}`]: createArtifactCreationTool({
|
|
1683
|
+
artifactType,
|
|
1684
|
+
description: `Create a new ${artifactType}`,
|
|
1685
|
+
contentSchema: config.contentSchema,
|
|
1686
|
+
handler: handlers.create
|
|
1687
|
+
}),
|
|
1688
|
+
[`read${typeLabel}`]: createArtifactReadTool({
|
|
1689
|
+
artifactType,
|
|
1690
|
+
description: `Read a ${artifactType} by ID`,
|
|
1691
|
+
handler: handlers.read
|
|
1692
|
+
}),
|
|
1693
|
+
[`update${typeLabel}`]: createArtifactUpdateTool({
|
|
1694
|
+
artifactType,
|
|
1695
|
+
description: `Update a ${artifactType}`,
|
|
1696
|
+
updateSchema: config.updateSchema,
|
|
1697
|
+
handler: handlers.update
|
|
1698
|
+
}),
|
|
1699
|
+
[`delete${typeLabel}`]: createArtifactDeleteTool({
|
|
1700
|
+
artifactType,
|
|
1701
|
+
description: `Delete a ${artifactType}`,
|
|
1702
|
+
handler: handlers.delete
|
|
1703
|
+
})
|
|
1704
|
+
};
|
|
1705
|
+
}
|
|
1706
|
+
/**
|
|
1707
|
+
* Creates tools for artifact versioning.
|
|
1708
|
+
*/
|
|
1709
|
+
function createVersioningTools(config) {
|
|
1710
|
+
const { artifactType, handlers } = config;
|
|
1711
|
+
const typeLabel = artifactType.charAt(0).toUpperCase() + artifactType.slice(1);
|
|
1712
|
+
return {
|
|
1713
|
+
[`list${typeLabel}Versions`]: tool({
|
|
1714
|
+
description: `List all versions of a ${artifactType}`,
|
|
1715
|
+
inputSchema: z.object({ id: z.string().describe("Artifact ID") }),
|
|
1716
|
+
execute: async (input) => {
|
|
1717
|
+
const { id } = input;
|
|
1718
|
+
return handlers.listVersions(id);
|
|
1719
|
+
}
|
|
1720
|
+
}),
|
|
1721
|
+
[`get${typeLabel}Version`]: tool({
|
|
1722
|
+
description: `Get a specific version of a ${artifactType}`,
|
|
1723
|
+
inputSchema: z.object({
|
|
1724
|
+
id: z.string().describe("Artifact ID"),
|
|
1725
|
+
version: z.number().describe("Version number")
|
|
1726
|
+
}),
|
|
1727
|
+
execute: async (input) => {
|
|
1728
|
+
const { id, version } = input;
|
|
1729
|
+
return handlers.getVersion(id, version);
|
|
1730
|
+
}
|
|
1731
|
+
}),
|
|
1732
|
+
[`revert${typeLabel}`]: tool({
|
|
1733
|
+
description: `Revert a ${artifactType} to a previous version`,
|
|
1734
|
+
inputSchema: z.object({
|
|
1735
|
+
id: z.string().describe("Artifact ID"),
|
|
1736
|
+
version: z.number().describe("Version to revert to")
|
|
1737
|
+
}),
|
|
1738
|
+
execute: async (input) => {
|
|
1739
|
+
const { id, version } = input;
|
|
1740
|
+
return handlers.revertToVersion(id, version);
|
|
1741
|
+
}
|
|
1742
|
+
})
|
|
1743
|
+
};
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1746
|
+
//#endregion
|
|
1747
|
+
//#region src/tools/index.ts
|
|
1748
|
+
var tools_exports = /* @__PURE__ */ __exportAll({
|
|
1749
|
+
AISDKCompatibleMCPError: () => AISDKCompatibleMCPError,
|
|
1750
|
+
ANTI_PATTERN_SYSTEM_PROMPT: () => ANTI_PATTERN_SYSTEM_PROMPT,
|
|
1751
|
+
AgentDispatchOutputSchema: () => AgentDispatchOutputSchema,
|
|
1752
|
+
AntiPatternOutputSchema: () => AntiPatternOutputSchema,
|
|
1753
|
+
ArtifactMetadataSchema: () => ArtifactMetadataSchema,
|
|
1754
|
+
ArtifactType: () => ArtifactType,
|
|
1755
|
+
AsyncPatternsOutputSchema: () => AsyncPatternsOutputSchema,
|
|
1756
|
+
BRAINSTORM_SYSTEM_PROMPT: () => BRAINSTORM_SYSTEM_PROMPT,
|
|
1757
|
+
BrainstormOutputSchema: () => BrainstormOutputSchema,
|
|
1758
|
+
BranchFinishOutputSchema: () => BranchFinishOutputSchema,
|
|
1759
|
+
CODE_REVIEW_SYSTEM_PROMPT: () => CODE_REVIEW_SYSTEM_PROMPT,
|
|
1760
|
+
COMMIT_ANALYSIS_SYSTEM_PROMPT: () => COMMIT_ANALYSIS_SYSTEM_PROMPT,
|
|
1761
|
+
CONDITION_BASED_WAITING_SYSTEM_PROMPT: () => CONDITION_BASED_WAITING_SYSTEM_PROMPT,
|
|
1762
|
+
CodeReviewOutputSchema: () => CodeReviewOutputSchema,
|
|
1763
|
+
CodeReviewResponseOutputSchema: () => CodeReviewResponseOutputSchema,
|
|
1764
|
+
CommitAnalysisOutputSchema: () => CommitAnalysisOutputSchema,
|
|
1765
|
+
DEFAULT_CACHE_CONFIG: () => DEFAULT_CACHE_CONFIG,
|
|
1766
|
+
DEFAULT_HEALTH_CHECK_CONFIG: () => DEFAULT_HEALTH_CHECK_CONFIG,
|
|
1767
|
+
DEFAULT_POOL_CONFIG: () => DEFAULT_POOL_CONFIG,
|
|
1768
|
+
DEFAULT_RETRY_CONFIG: () => DEFAULT_RETRY_CONFIG,
|
|
1769
|
+
DEFAULT_STREAM_LIFECYCLE_CONFIG: () => DEFAULT_STREAM_LIFECYCLE_CONFIG,
|
|
1770
|
+
DEFENSE_IN_DEPTH_SYSTEM_PROMPT: () => DEFENSE_IN_DEPTH_SYSTEM_PROMPT,
|
|
1771
|
+
DESIGN_REVIEW_SYSTEM_PROMPT: () => DESIGN_REVIEW_SYSTEM_PROMPT,
|
|
1772
|
+
DISPATCHING_AGENTS_SYSTEM_PROMPT: () => DISPATCHING_AGENTS_SYSTEM_PROMPT,
|
|
1773
|
+
DefenseInDepthOutputSchema: () => DefenseInDepthOutputSchema,
|
|
1774
|
+
DesignReviewOutputSchema: () => DesignReviewOutputSchema,
|
|
1775
|
+
EXECUTING_PLANS_SYSTEM_PROMPT: () => EXECUTING_PLANS_SYSTEM_PROMPT,
|
|
1776
|
+
FINISHING_BRANCH_SYSTEM_PROMPT: () => FINISHING_BRANCH_SYSTEM_PROMPT,
|
|
1777
|
+
GIT_WORKTREE_SYSTEM_PROMPT: () => GIT_WORKTREE_SYSTEM_PROMPT,
|
|
1778
|
+
JsonSchemaToolRegistry: () => JsonSchemaToolRegistry,
|
|
1779
|
+
MCPConnectionError: () => MCPConnectionError,
|
|
1780
|
+
MCPConnectionManager: () => MCPConnectionManager,
|
|
1781
|
+
MCPConnectionPool: () => MCPConnectionPool,
|
|
1782
|
+
MCPErrorHandlerFactory: () => MCPErrorHandlerFactory,
|
|
1783
|
+
MCPErrorUtils: () => MCPErrorUtils,
|
|
1784
|
+
MCPHealthMonitor: () => MCPHealthMonitor,
|
|
1785
|
+
MCPHealthStatus: () => MCPHealthStatus,
|
|
1786
|
+
MCPRequestManager: () => MCPRequestManager,
|
|
1787
|
+
MCPRetryableError: () => MCPRetryableError,
|
|
1788
|
+
MCPStreamLifecycleManager: () => MCPStreamLifecycleManager,
|
|
1789
|
+
MCPToolCache: () => MCPToolCache,
|
|
1790
|
+
MCPTransportError: () => MCPTransportError,
|
|
1791
|
+
MCPTransportSelector: () => MCPTransportSelector,
|
|
1792
|
+
PLANNER_SYSTEM_PROMPT: () => PLANNER_SYSTEM_PROMPT,
|
|
1793
|
+
PlanExecutionOutputSchema: () => PlanExecutionOutputSchema,
|
|
1794
|
+
PlanOutputSchema: () => PlanOutputSchema,
|
|
1795
|
+
RECEIVING_CODE_REVIEW_SYSTEM_PROMPT: () => RECEIVING_CODE_REVIEW_SYSTEM_PROMPT,
|
|
1796
|
+
ROOT_CAUSE_TRACING_SYSTEM_PROMPT: () => ROOT_CAUSE_TRACING_SYSTEM_PROMPT,
|
|
1797
|
+
RootCauseTracingOutputSchema: () => RootCauseTracingOutputSchema,
|
|
1798
|
+
SHARING_SKILLS_SYSTEM_PROMPT: () => SHARING_SKILLS_SYSTEM_PROMPT,
|
|
1799
|
+
SUBAGENT_DRIVEN_DEV_SYSTEM_PROMPT: () => SUBAGENT_DRIVEN_DEV_SYSTEM_PROMPT,
|
|
1800
|
+
SYSTEMATIC_DEBUGGING_SYSTEM_PROMPT: () => SYSTEMATIC_DEBUGGING_SYSTEM_PROMPT,
|
|
1801
|
+
SkillShareOutputSchema: () => SkillShareOutputSchema,
|
|
1802
|
+
SkillTestOutputSchema: () => SkillTestOutputSchema,
|
|
1803
|
+
SkillWriteOutputSchema: () => SkillWriteOutputSchema,
|
|
1804
|
+
StreamLifecyclePhase: () => StreamLifecyclePhase,
|
|
1805
|
+
SubagentDevOutputSchema: () => SubagentDevOutputSchema,
|
|
1806
|
+
SuperpowersIntroOutputSchema: () => SuperpowersIntroOutputSchema,
|
|
1807
|
+
SystematicDebuggingOutputSchema: () => SystematicDebuggingOutputSchema,
|
|
1808
|
+
TDDOutputSchema: () => TDDOutputSchema,
|
|
1809
|
+
TDD_SYSTEM_PROMPT: () => TDD_SYSTEM_PROMPT,
|
|
1810
|
+
TESTING_SKILLS_SYSTEM_PROMPT: () => TESTING_SKILLS_SYSTEM_PROMPT,
|
|
1811
|
+
ToolAbortError: () => ToolAbortError,
|
|
1812
|
+
ToolCache: () => ToolCache,
|
|
1813
|
+
USING_SUPERPOWERS_SYSTEM_PROMPT: () => USING_SUPERPOWERS_SYSTEM_PROMPT,
|
|
1814
|
+
WRITING_SKILLS_SYSTEM_PROMPT: () => WRITING_SKILLS_SYSTEM_PROMPT,
|
|
1815
|
+
WorktreeOutputSchema: () => WorktreeOutputSchema,
|
|
1816
|
+
allSuperpowerTools: () => allSuperpowerTools,
|
|
1817
|
+
analyzeAsyncPatterns: () => analyzeAsyncPatterns,
|
|
1818
|
+
analyzeCommit: () => analyzeCommit,
|
|
1819
|
+
analyzeDefenseInDepth: () => analyzeDefenseInDepth,
|
|
1820
|
+
batchApproval: () => batchApproval,
|
|
1821
|
+
codeReviewTools: () => codeReviewTools,
|
|
1822
|
+
combineAbortSignals: () => combineAbortSignals,
|
|
1823
|
+
composeTools: () => composeTools,
|
|
1824
|
+
consultArchitect: () => consultArchitect,
|
|
1825
|
+
createArtifactCRUDTools: () => createArtifactCRUDTools,
|
|
1826
|
+
createArtifactCreationTool: () => createArtifactCreationTool,
|
|
1827
|
+
createArtifactDeleteTool: () => createArtifactDeleteTool,
|
|
1828
|
+
createArtifactReadTool: () => createArtifactReadTool,
|
|
1829
|
+
createArtifactUpdateTool: () => createArtifactUpdateTool,
|
|
1830
|
+
createBashTool: () => createBashTool,
|
|
1831
|
+
createComputerTool: () => createComputerTool,
|
|
1832
|
+
createConditionalTool: () => createConditionalTool,
|
|
1833
|
+
createEdgeMCPTools: () => createEdgeMCPTools,
|
|
1834
|
+
createExaSearchTool: () => createExaSearchTool,
|
|
1835
|
+
createGeneratorTool: () => createGeneratorTool,
|
|
1836
|
+
createHITLTool: () => createHITLTool,
|
|
1837
|
+
createJsonSchemaTool: () => createJsonSchemaTool,
|
|
1838
|
+
createKeyBuilder: () => createKeyBuilder,
|
|
1839
|
+
createLLMTool: () => createLLMTool,
|
|
1840
|
+
createMCPStreamLifecycleManager: () => createMCPStreamLifecycleManager,
|
|
1841
|
+
createMCPToolsForRequest: () => createMCPToolsForRequest,
|
|
1842
|
+
createMCPToolsForStreamText: () => createMCPToolsForStreamText,
|
|
1843
|
+
createMCPToolsFromConfigs: () => createMCPToolsFromConfigs,
|
|
1844
|
+
createMCPToolsWithDefaults: () => createMCPToolsWithDefaults,
|
|
1845
|
+
createMCPToolsWithStreamLifecycle: () => createMCPToolsWithStreamLifecycle,
|
|
1846
|
+
createPaginatedTool: () => createPaginatedTool,
|
|
1847
|
+
createPolicyChecker: () => createPolicyChecker,
|
|
1848
|
+
createPollingTool: () => createPollingTool,
|
|
1849
|
+
createPooledMCPTools: () => createPooledMCPTools,
|
|
1850
|
+
createRetryTool: () => createRetryTool,
|
|
1851
|
+
createSelectiveKeyBuilder: () => createSelectiveKeyBuilder,
|
|
1852
|
+
createSimpleTool: () => createSimpleTool,
|
|
1853
|
+
createSmartMCPTools: () => createSmartMCPTools,
|
|
1854
|
+
createTimeoutAbort: () => createTimeoutAbort,
|
|
1855
|
+
createToolFactory: () => createToolFactory,
|
|
1856
|
+
createToolFromZodSchema: () => createToolFromZodSchema,
|
|
1857
|
+
createToolWithContext: () => createToolWithContext,
|
|
1858
|
+
createTools: () => createTools,
|
|
1859
|
+
createTransformTool: () => createTransformTool,
|
|
1860
|
+
createTransportFromConfig: () => createTransportFromConfig,
|
|
1861
|
+
createValidationTool: () => createValidationTool,
|
|
1862
|
+
createVersioningTools: () => createVersioningTools,
|
|
1863
|
+
createWebSearchTool: () => createWebSearchTool,
|
|
1864
|
+
debuggingTools: () => debuggingTools,
|
|
1865
|
+
detectAntiPatterns: () => detectAntiPatterns,
|
|
1866
|
+
discoverEdgeMCPServers: () => discoverEdgeMCPServers,
|
|
1867
|
+
discoverMCPServersFromEnvironment: () => discoverMCPServersFromEnvironment,
|
|
1868
|
+
dispatchAgents: () => dispatchAgents,
|
|
1869
|
+
edgeMCPTransports: () => edgeMCPTransports,
|
|
1870
|
+
executePlan: () => executePlan,
|
|
1871
|
+
executeToolSafely: () => executeToolSafely,
|
|
1872
|
+
executeWithFallback: () => executeWithFallback,
|
|
1873
|
+
finishBranch: () => finishBranch,
|
|
1874
|
+
getEdgeCompatibleConfigs: () => getEdgeCompatibleConfigs,
|
|
1875
|
+
getGlobalConnectionManager: () => getGlobalConnectionManager,
|
|
1876
|
+
getMCPServers: () => getMCPServers,
|
|
1877
|
+
gitTools: () => gitTools,
|
|
1878
|
+
globalMCPConnectionPool: () => globalMCPConnectionPool,
|
|
1879
|
+
globalMCPHealthMonitor: () => globalMCPHealthMonitor,
|
|
1880
|
+
globalMCPToolCache: () => globalMCPToolCache,
|
|
1881
|
+
globalTransportSelector: () => globalTransportSelector,
|
|
1882
|
+
initSuperpowers: () => initSuperpowers,
|
|
1883
|
+
introduceSuperpowers: () => introduceSuperpowers,
|
|
1884
|
+
isAbortError: () => isAbortError,
|
|
1885
|
+
isEdgeRuntime: () => isEdgeRuntime,
|
|
1886
|
+
manageWorktree: () => manageWorktree,
|
|
1887
|
+
mcpTransports: () => mcpTransports,
|
|
1888
|
+
metaTools: () => metaTools,
|
|
1889
|
+
planningTools: () => planningTools,
|
|
1890
|
+
processCodeReview: () => processCodeReview,
|
|
1891
|
+
qualityTools: () => qualityTools,
|
|
1892
|
+
refineRequirements: () => refineRequirements,
|
|
1893
|
+
reviewCode: () => reviewCode,
|
|
1894
|
+
reviewDesign: () => reviewDesign,
|
|
1895
|
+
runSubagentDev: () => runSubagentDev,
|
|
1896
|
+
runTDDCycle: () => runTDDCycle,
|
|
1897
|
+
selectOptimalTransport: () => selectOptimalTransport,
|
|
1898
|
+
selectTransportForUseCase: () => selectTransportForUseCase,
|
|
1899
|
+
shareSkill: () => shareSkill,
|
|
1900
|
+
systemPrompts: () => systemPrompts,
|
|
1901
|
+
systematicDebug: () => systematicDebug,
|
|
1902
|
+
testMCPConnectivity: () => testMCPConnectivity,
|
|
1903
|
+
testSkill: () => testSkill,
|
|
1904
|
+
tiptapContextTool: () => tiptapContextTool,
|
|
1905
|
+
traceRootCause: () => traceRootCause,
|
|
1906
|
+
validateMCPEnvironment: () => validateMCPEnvironment,
|
|
1907
|
+
webSearchTool: () => webSearchTool,
|
|
1908
|
+
webSearchTools: () => webSearchTools,
|
|
1909
|
+
withAbortHandling: () => withAbortHandling,
|
|
1910
|
+
withCaching: () => withCaching,
|
|
1911
|
+
withRetryAndTimeout: () => withRetryAndTimeout,
|
|
1912
|
+
withSWRCaching: () => withSWRCaching,
|
|
1913
|
+
withValidation: () => withValidation,
|
|
1914
|
+
workflowTools: () => workflowTools,
|
|
1915
|
+
wrapToolHandler: () => wrapToolHandler,
|
|
1916
|
+
writeSkill: () => writeSkill
|
|
1917
|
+
});
|
|
1918
|
+
|
|
1919
|
+
//#endregion
|
|
1920
|
+
export { AISDKCompatibleMCPError, ANTI_PATTERN_SYSTEM_PROMPT, AgentDispatchOutputSchema, AntiPatternOutputSchema, ArtifactMetadataSchema, ArtifactType, AsyncPatternsOutputSchema, BRAINSTORM_SYSTEM_PROMPT, BrainstormOutputSchema, BranchFinishOutputSchema, CODE_REVIEW_SYSTEM_PROMPT, COMMIT_ANALYSIS_SYSTEM_PROMPT, CONDITION_BASED_WAITING_SYSTEM_PROMPT, CodeReviewOutputSchema, CodeReviewResponseOutputSchema, CommitAnalysisOutputSchema, DEFAULT_CACHE_CONFIG, DEFAULT_HEALTH_CHECK_CONFIG, DEFAULT_POOL_CONFIG, DEFAULT_RETRY_CONFIG, DEFAULT_STREAM_LIFECYCLE_CONFIG, DEFENSE_IN_DEPTH_SYSTEM_PROMPT, DESIGN_REVIEW_SYSTEM_PROMPT, DISPATCHING_AGENTS_SYSTEM_PROMPT, DefenseInDepthOutputSchema, DesignReviewOutputSchema, EXECUTING_PLANS_SYSTEM_PROMPT, FINISHING_BRANCH_SYSTEM_PROMPT, GIT_WORKTREE_SYSTEM_PROMPT, JsonSchemaToolRegistry, MCPConnectionError, MCPConnectionManager, MCPConnectionPool, MCPErrorHandlerFactory, MCPErrorUtils, MCPHealthMonitor, MCPHealthStatus, MCPRequestManager, MCPRetryableError, MCPStreamLifecycleManager, MCPToolCache, MCPTransportError, MCPTransportSelector, PLANNER_SYSTEM_PROMPT, PlanExecutionOutputSchema, PlanOutputSchema, RECEIVING_CODE_REVIEW_SYSTEM_PROMPT, ROOT_CAUSE_TRACING_SYSTEM_PROMPT, RootCauseTracingOutputSchema, SHARING_SKILLS_SYSTEM_PROMPT, SUBAGENT_DRIVEN_DEV_SYSTEM_PROMPT, SYSTEMATIC_DEBUGGING_SYSTEM_PROMPT, SkillShareOutputSchema, SkillTestOutputSchema, SkillWriteOutputSchema, StreamLifecyclePhase, SubagentDevOutputSchema, SuperpowersIntroOutputSchema, SystematicDebuggingOutputSchema, TDDOutputSchema, TDD_SYSTEM_PROMPT, TESTING_SKILLS_SYSTEM_PROMPT, ToolAbortError, ToolCache, USING_SUPERPOWERS_SYSTEM_PROMPT, WRITING_SKILLS_SYSTEM_PROMPT, WorktreeOutputSchema, allSuperpowerTools, analyzeAsyncPatterns, analyzeCommit, analyzeDefenseInDepth, batchApproval, codeReviewTools, combineAbortSignals, composeTools, consultArchitect, createArtifactCRUDTools, createArtifactCreationTool, createArtifactDeleteTool, createArtifactReadTool, createArtifactUpdateTool, createBashTool, createComputerTool, createConditionalTool, createEdgeMCPTools, createExaSearchTool, createGeneratorTool, createHITLTool, createJsonSchemaTool, createKeyBuilder, createLLMTool, createMCPStreamLifecycleManager, createMCPToolsForRequest, createMCPToolsForStreamText, createMCPToolsFromConfigs, createMCPToolsWithDefaults, createMCPToolsWithStreamLifecycle, createPaginatedTool, createPolicyChecker, createPollingTool, createPooledMCPTools, createRetryTool, createSelectiveKeyBuilder, createSimpleTool, createSmartMCPTools, createTimeoutAbort, createToolFactory, createToolFromZodSchema, createToolWithContext, createTools, createTransformTool, createTransportFromConfig, createValidationTool, createVersioningTools, createWebSearchTool, debuggingTools, detectAntiPatterns, discoverEdgeMCPServers, discoverMCPServersFromEnvironment, dispatchAgents, edgeMCPTransports, executePlan, executeToolSafely, executeWithFallback, finishBranch, getEdgeCompatibleConfigs, getGlobalConnectionManager, getMCPServers, gitTools, globalMCPConnectionPool, globalMCPHealthMonitor, globalMCPToolCache, globalTransportSelector, initSuperpowers, introduceSuperpowers, isAbortError, isEdgeRuntime, manageWorktree, mcpTransports, metaTools, planningTools, processCodeReview, qualityTools, refineRequirements, reviewCode, reviewDesign, runSubagentDev, runTDDCycle, selectOptimalTransport, selectTransportForUseCase, shareSkill, systemPrompts, systematicDebug, tools_exports as t, testMCPConnectivity, testSkill, tiptapContextTool, traceRootCause, validateMCPEnvironment, webSearchTool, webSearchTools, withAbortHandling, withCaching, withRetryAndTimeout, withSWRCaching, withValidation, workflowTools, wrapToolHandler, writeSkill };
|
|
1921
|
+
//# sourceMappingURL=tools.mjs.map
|