overai 1.4.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 +248 -0
- package/dist/agent/context.d.ts +74 -0
- package/dist/agent/context.js +140 -0
- package/dist/agent/enhanced.d.ts +98 -0
- package/dist/agent/enhanced.js +293 -0
- package/dist/agent/handoff.d.ts +82 -0
- package/dist/agent/handoff.js +124 -0
- package/dist/agent/image.d.ts +57 -0
- package/dist/agent/image.js +116 -0
- package/dist/agent/index.d.ts +19 -0
- package/dist/agent/index.js +38 -0
- package/dist/agent/prompt-expander.d.ts +43 -0
- package/dist/agent/prompt-expander.js +99 -0
- package/dist/agent/proxy.d.ts +26 -0
- package/dist/agent/proxy.js +173 -0
- package/dist/agent/query-rewriter.d.ts +41 -0
- package/dist/agent/query-rewriter.js +94 -0
- package/dist/agent/research.d.ts +55 -0
- package/dist/agent/research.js +134 -0
- package/dist/agent/router.d.ts +141 -0
- package/dist/agent/router.js +209 -0
- package/dist/agent/simple.d.ts +289 -0
- package/dist/agent/simple.js +696 -0
- package/dist/agent/types.d.ts +56 -0
- package/dist/agent/types.js +165 -0
- package/dist/ai/agent-loop.d.ts +177 -0
- package/dist/ai/agent-loop.js +313 -0
- package/dist/ai/devtools.d.ts +74 -0
- package/dist/ai/devtools.js +216 -0
- package/dist/ai/embed.d.ts +71 -0
- package/dist/ai/embed.js +154 -0
- package/dist/ai/generate-image.d.ts +66 -0
- package/dist/ai/generate-image.js +138 -0
- package/dist/ai/generate-object.d.ts +132 -0
- package/dist/ai/generate-object.js +206 -0
- package/dist/ai/generate-text.d.ts +201 -0
- package/dist/ai/generate-text.js +253 -0
- package/dist/ai/index.d.ts +27 -0
- package/dist/ai/index.js +140 -0
- package/dist/ai/mcp.d.ts +181 -0
- package/dist/ai/mcp.js +234 -0
- package/dist/ai/middleware.d.ts +110 -0
- package/dist/ai/middleware.js +186 -0
- package/dist/ai/models.d.ts +67 -0
- package/dist/ai/models.js +249 -0
- package/dist/ai/multimodal.d.ts +125 -0
- package/dist/ai/multimodal.js +270 -0
- package/dist/ai/nextjs.d.ts +122 -0
- package/dist/ai/nextjs.js +218 -0
- package/dist/ai/server.d.ts +126 -0
- package/dist/ai/server.js +336 -0
- package/dist/ai/speech.d.ts +135 -0
- package/dist/ai/speech.js +296 -0
- package/dist/ai/telemetry.d.ts +162 -0
- package/dist/ai/telemetry.js +311 -0
- package/dist/ai/tool-approval.d.ts +225 -0
- package/dist/ai/tool-approval.js +407 -0
- package/dist/ai/tools.d.ts +93 -0
- package/dist/ai/tools.js +89 -0
- package/dist/ai/types.d.ts +47 -0
- package/dist/ai/types.js +5 -0
- package/dist/ai/ui-message.d.ts +218 -0
- package/dist/ai/ui-message.js +291 -0
- package/dist/auto/index.d.ts +62 -0
- package/dist/auto/index.js +163 -0
- package/dist/cache/index.d.ts +78 -0
- package/dist/cache/index.js +235 -0
- package/dist/cli/commands/agent.d.ts +30 -0
- package/dist/cli/commands/agent.js +151 -0
- package/dist/cli/commands/agents.d.ts +24 -0
- package/dist/cli/commands/agents.js +166 -0
- package/dist/cli/commands/approval.d.ts +10 -0
- package/dist/cli/commands/approval.js +253 -0
- package/dist/cli/commands/auto.d.ts +12 -0
- package/dist/cli/commands/auto.js +109 -0
- package/dist/cli/commands/autonomy.d.ts +5 -0
- package/dist/cli/commands/autonomy.js +152 -0
- package/dist/cli/commands/benchmark.d.ts +19 -0
- package/dist/cli/commands/benchmark.js +484 -0
- package/dist/cli/commands/cache.d.ts +9 -0
- package/dist/cli/commands/cache.js +143 -0
- package/dist/cli/commands/chat.d.ts +14 -0
- package/dist/cli/commands/chat.js +127 -0
- package/dist/cli/commands/checkpoints.d.ts +5 -0
- package/dist/cli/commands/checkpoints.js +236 -0
- package/dist/cli/commands/context.d.ts +11 -0
- package/dist/cli/commands/context.js +182 -0
- package/dist/cli/commands/cost.d.ts +5 -0
- package/dist/cli/commands/cost.js +146 -0
- package/dist/cli/commands/db.d.ts +9 -0
- package/dist/cli/commands/db.js +149 -0
- package/dist/cli/commands/embed.d.ts +20 -0
- package/dist/cli/commands/embed.js +375 -0
- package/dist/cli/commands/eval.d.ts +17 -0
- package/dist/cli/commands/eval.js +247 -0
- package/dist/cli/commands/external-agents.d.ts +5 -0
- package/dist/cli/commands/external-agents.js +170 -0
- package/dist/cli/commands/fast-context.d.ts +5 -0
- package/dist/cli/commands/fast-context.js +126 -0
- package/dist/cli/commands/flow.d.ts +5 -0
- package/dist/cli/commands/flow.js +141 -0
- package/dist/cli/commands/git.d.ts +5 -0
- package/dist/cli/commands/git.js +178 -0
- package/dist/cli/commands/graph-rag.d.ts +9 -0
- package/dist/cli/commands/graph-rag.js +131 -0
- package/dist/cli/commands/guardrail.d.ts +11 -0
- package/dist/cli/commands/guardrail.js +156 -0
- package/dist/cli/commands/handoff.d.ts +9 -0
- package/dist/cli/commands/handoff.js +133 -0
- package/dist/cli/commands/help.d.ts +8 -0
- package/dist/cli/commands/help.js +139 -0
- package/dist/cli/commands/image.d.ts +13 -0
- package/dist/cli/commands/image.js +192 -0
- package/dist/cli/commands/interactive.d.ts +6 -0
- package/dist/cli/commands/interactive.js +79 -0
- package/dist/cli/commands/jobs.d.ts +5 -0
- package/dist/cli/commands/jobs.js +282 -0
- package/dist/cli/commands/knowledge.d.ts +9 -0
- package/dist/cli/commands/knowledge.js +226 -0
- package/dist/cli/commands/llm.d.ts +21 -0
- package/dist/cli/commands/llm.js +748 -0
- package/dist/cli/commands/mcp.d.ts +9 -0
- package/dist/cli/commands/mcp.js +243 -0
- package/dist/cli/commands/memory.d.ts +10 -0
- package/dist/cli/commands/memory.js +198 -0
- package/dist/cli/commands/n8n.d.ts +5 -0
- package/dist/cli/commands/n8n.js +137 -0
- package/dist/cli/commands/observability.d.ts +16 -0
- package/dist/cli/commands/observability.js +335 -0
- package/dist/cli/commands/planning.d.ts +9 -0
- package/dist/cli/commands/planning.js +167 -0
- package/dist/cli/commands/prompt-expand.d.ts +11 -0
- package/dist/cli/commands/prompt-expand.js +100 -0
- package/dist/cli/commands/providers.d.ts +17 -0
- package/dist/cli/commands/providers.js +386 -0
- package/dist/cli/commands/query-rewrite.d.ts +12 -0
- package/dist/cli/commands/query-rewrite.js +102 -0
- package/dist/cli/commands/repo-map.d.ts +5 -0
- package/dist/cli/commands/repo-map.js +151 -0
- package/dist/cli/commands/reranker.d.ts +10 -0
- package/dist/cli/commands/reranker.js +144 -0
- package/dist/cli/commands/research.d.ts +12 -0
- package/dist/cli/commands/research.js +108 -0
- package/dist/cli/commands/router.d.ts +11 -0
- package/dist/cli/commands/router.js +142 -0
- package/dist/cli/commands/run.d.ts +14 -0
- package/dist/cli/commands/run.js +111 -0
- package/dist/cli/commands/sandbox.d.ts +5 -0
- package/dist/cli/commands/sandbox.js +135 -0
- package/dist/cli/commands/scheduler.d.ts +5 -0
- package/dist/cli/commands/scheduler.js +260 -0
- package/dist/cli/commands/session.d.ts +9 -0
- package/dist/cli/commands/session.js +238 -0
- package/dist/cli/commands/skills.d.ts +9 -0
- package/dist/cli/commands/skills.js +256 -0
- package/dist/cli/commands/telemetry.d.ts +9 -0
- package/dist/cli/commands/telemetry.js +146 -0
- package/dist/cli/commands/tools.d.ts +19 -0
- package/dist/cli/commands/tools.js +576 -0
- package/dist/cli/commands/vector.d.ts +10 -0
- package/dist/cli/commands/vector.js +171 -0
- package/dist/cli/commands/version.d.ts +8 -0
- package/dist/cli/commands/version.js +40 -0
- package/dist/cli/commands/voice.d.ts +10 -0
- package/dist/cli/commands/voice.js +162 -0
- package/dist/cli/commands/workflow.d.ts +13 -0
- package/dist/cli/commands/workflow.js +184 -0
- package/dist/cli/config/index.d.ts +6 -0
- package/dist/cli/config/index.js +22 -0
- package/dist/cli/config/load.d.ts +20 -0
- package/dist/cli/config/load.js +229 -0
- package/dist/cli/config/resolve.d.ts +28 -0
- package/dist/cli/config/resolve.js +70 -0
- package/dist/cli/config/schema.d.ts +15 -0
- package/dist/cli/config/schema.js +65 -0
- package/dist/cli/features/autonomy-mode.d.ts +98 -0
- package/dist/cli/features/autonomy-mode.js +266 -0
- package/dist/cli/features/background-jobs.d.ts +155 -0
- package/dist/cli/features/background-jobs.js +416 -0
- package/dist/cli/features/checkpoints.d.ts +126 -0
- package/dist/cli/features/checkpoints.js +288 -0
- package/dist/cli/features/cost-tracker.d.ts +101 -0
- package/dist/cli/features/cost-tracker.js +212 -0
- package/dist/cli/features/external-agents.d.ts +117 -0
- package/dist/cli/features/external-agents.js +296 -0
- package/dist/cli/features/fast-context.d.ts +126 -0
- package/dist/cli/features/fast-context.js +310 -0
- package/dist/cli/features/flow-display.d.ts +100 -0
- package/dist/cli/features/flow-display.js +254 -0
- package/dist/cli/features/git-integration.d.ts +138 -0
- package/dist/cli/features/git-integration.js +374 -0
- package/dist/cli/features/index.d.ts +17 -0
- package/dist/cli/features/index.js +102 -0
- package/dist/cli/features/interactive-tui.d.ts +114 -0
- package/dist/cli/features/interactive-tui.js +326 -0
- package/dist/cli/features/n8n-integration.d.ts +111 -0
- package/dist/cli/features/n8n-integration.js +299 -0
- package/dist/cli/features/repo-map.d.ts +101 -0
- package/dist/cli/features/repo-map.js +350 -0
- package/dist/cli/features/sandbox-executor.d.ts +89 -0
- package/dist/cli/features/sandbox-executor.js +314 -0
- package/dist/cli/features/scheduler.d.ts +111 -0
- package/dist/cli/features/scheduler.js +298 -0
- package/dist/cli/features/slash-commands.d.ts +77 -0
- package/dist/cli/features/slash-commands.js +316 -0
- package/dist/cli/index.d.ts +24 -0
- package/dist/cli/index.js +214 -0
- package/dist/cli/output/errors.d.ts +23 -0
- package/dist/cli/output/errors.js +36 -0
- package/dist/cli/output/json.d.ts +27 -0
- package/dist/cli/output/json.js +31 -0
- package/dist/cli/output/pretty.d.ts +13 -0
- package/dist/cli/output/pretty.js +31 -0
- package/dist/cli/runtime/env.d.ts +12 -0
- package/dist/cli/runtime/env.js +55 -0
- package/dist/cli/runtime/exit.d.ts +11 -0
- package/dist/cli/runtime/exit.js +49 -0
- package/dist/cli/runtime/index.d.ts +6 -0
- package/dist/cli/runtime/index.js +22 -0
- package/dist/cli/runtime/lazy.d.ts +18 -0
- package/dist/cli/runtime/lazy.js +85 -0
- package/dist/cli/spec/cli-spec.d.ts +87 -0
- package/dist/cli/spec/cli-spec.js +551 -0
- package/dist/cli/spec/index.d.ts +4 -0
- package/dist/cli/spec/index.js +20 -0
- package/dist/db/index.d.ts +6 -0
- package/dist/db/index.js +75 -0
- package/dist/db/types.d.ts +42 -0
- package/dist/db/types.js +2 -0
- package/dist/eval/index.d.ts +61 -0
- package/dist/eval/index.js +157 -0
- package/dist/events/index.d.ts +84 -0
- package/dist/events/index.js +153 -0
- package/dist/guardrails/index.d.ts +82 -0
- package/dist/guardrails/index.js +202 -0
- package/dist/guardrails/llm-guardrail.d.ts +46 -0
- package/dist/guardrails/llm-guardrail.js +112 -0
- package/dist/index.d.ts +92 -0
- package/dist/index.js +608 -0
- package/dist/integrations/computer-use.d.ts +182 -0
- package/dist/integrations/computer-use.js +356 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.js +26 -0
- package/dist/integrations/observability/base.d.ts +123 -0
- package/dist/integrations/observability/base.js +183 -0
- package/dist/integrations/observability/index.d.ts +8 -0
- package/dist/integrations/observability/index.js +29 -0
- package/dist/integrations/observability/langfuse.d.ts +32 -0
- package/dist/integrations/observability/langfuse.js +174 -0
- package/dist/integrations/postgres.d.ts +162 -0
- package/dist/integrations/postgres.js +396 -0
- package/dist/integrations/slack.d.ts +145 -0
- package/dist/integrations/slack.js +270 -0
- package/dist/integrations/vector/base.d.ts +110 -0
- package/dist/integrations/vector/base.js +158 -0
- package/dist/integrations/vector/chroma.d.ts +25 -0
- package/dist/integrations/vector/chroma.js +143 -0
- package/dist/integrations/vector/index.d.ts +14 -0
- package/dist/integrations/vector/index.js +37 -0
- package/dist/integrations/vector/pinecone.d.ts +28 -0
- package/dist/integrations/vector/pinecone.js +172 -0
- package/dist/integrations/vector/qdrant.d.ts +25 -0
- package/dist/integrations/vector/qdrant.js +146 -0
- package/dist/integrations/vector/weaviate.d.ts +30 -0
- package/dist/integrations/vector/weaviate.js +206 -0
- package/dist/integrations/voice/base.d.ts +76 -0
- package/dist/integrations/voice/base.js +168 -0
- package/dist/integrations/voice/index.d.ts +6 -0
- package/dist/integrations/voice/index.js +26 -0
- package/dist/knowledge/chunking.d.ts +55 -0
- package/dist/knowledge/chunking.js +158 -0
- package/dist/knowledge/graph-rag.d.ts +125 -0
- package/dist/knowledge/graph-rag.js +289 -0
- package/dist/knowledge/index.d.ts +24 -0
- package/dist/knowledge/index.js +47 -0
- package/dist/knowledge/knowledge.d.ts +0 -0
- package/dist/knowledge/knowledge.js +1 -0
- package/dist/knowledge/rag.d.ts +80 -0
- package/dist/knowledge/rag.js +147 -0
- package/dist/knowledge/reranker.d.ts +86 -0
- package/dist/knowledge/reranker.js +196 -0
- package/dist/llm/backend-resolver.d.ts +77 -0
- package/dist/llm/backend-resolver.js +242 -0
- package/dist/llm/embeddings.d.ts +66 -0
- package/dist/llm/embeddings.js +294 -0
- package/dist/llm/index.d.ts +29 -0
- package/dist/llm/index.js +33 -0
- package/dist/llm/llm.d.ts +0 -0
- package/dist/llm/llm.js +1 -0
- package/dist/llm/openai.d.ts +39 -0
- package/dist/llm/openai.js +302 -0
- package/dist/llm/providers/ai-sdk/adapter.d.ts +121 -0
- package/dist/llm/providers/ai-sdk/adapter.js +399 -0
- package/dist/llm/providers/ai-sdk/backend.d.ts +49 -0
- package/dist/llm/providers/ai-sdk/backend.js +421 -0
- package/dist/llm/providers/ai-sdk/index.d.ts +69 -0
- package/dist/llm/providers/ai-sdk/index.js +200 -0
- package/dist/llm/providers/ai-sdk/middleware.d.ts +60 -0
- package/dist/llm/providers/ai-sdk/middleware.js +262 -0
- package/dist/llm/providers/ai-sdk/provider-map.d.ts +75 -0
- package/dist/llm/providers/ai-sdk/provider-map.js +258 -0
- package/dist/llm/providers/ai-sdk/types.d.ts +217 -0
- package/dist/llm/providers/ai-sdk/types.js +222 -0
- package/dist/llm/providers/anthropic.d.ts +33 -0
- package/dist/llm/providers/anthropic.js +291 -0
- package/dist/llm/providers/base.d.ts +25 -0
- package/dist/llm/providers/base.js +43 -0
- package/dist/llm/providers/google.d.ts +27 -0
- package/dist/llm/providers/google.js +275 -0
- package/dist/llm/providers/index.d.ts +107 -0
- package/dist/llm/providers/index.js +216 -0
- package/dist/llm/providers/openai.d.ts +18 -0
- package/dist/llm/providers/openai.js +203 -0
- package/dist/llm/providers/registry.d.ts +159 -0
- package/dist/llm/providers/registry.js +279 -0
- package/dist/llm/providers/types.d.ts +94 -0
- package/dist/llm/providers/types.js +5 -0
- package/dist/main.d.ts +0 -0
- package/dist/main.js +1 -0
- package/dist/memory/auto-memory.d.ts +136 -0
- package/dist/memory/auto-memory.js +301 -0
- package/dist/memory/file-memory.d.ts +88 -0
- package/dist/memory/file-memory.js +287 -0
- package/dist/memory/index.d.ts +26 -0
- package/dist/memory/index.js +41 -0
- package/dist/memory/memory.d.ts +92 -0
- package/dist/memory/memory.js +170 -0
- package/dist/observability/adapters/console.d.ts +33 -0
- package/dist/observability/adapters/console.js +71 -0
- package/dist/observability/adapters/external/arize.d.ts +20 -0
- package/dist/observability/adapters/external/arize.js +22 -0
- package/dist/observability/adapters/external/axiom.d.ts +20 -0
- package/dist/observability/adapters/external/axiom.js +22 -0
- package/dist/observability/adapters/external/braintrust.d.ts +20 -0
- package/dist/observability/adapters/external/braintrust.js +22 -0
- package/dist/observability/adapters/external/helicone.d.ts +20 -0
- package/dist/observability/adapters/external/helicone.js +22 -0
- package/dist/observability/adapters/external/laminar.d.ts +20 -0
- package/dist/observability/adapters/external/laminar.js +22 -0
- package/dist/observability/adapters/external/langfuse.d.ts +28 -0
- package/dist/observability/adapters/external/langfuse.js +186 -0
- package/dist/observability/adapters/external/langsmith.d.ts +21 -0
- package/dist/observability/adapters/external/langsmith.js +83 -0
- package/dist/observability/adapters/external/langwatch.d.ts +20 -0
- package/dist/observability/adapters/external/langwatch.js +22 -0
- package/dist/observability/adapters/external/maxim.d.ts +20 -0
- package/dist/observability/adapters/external/maxim.js +22 -0
- package/dist/observability/adapters/external/patronus.d.ts +20 -0
- package/dist/observability/adapters/external/patronus.js +22 -0
- package/dist/observability/adapters/external/scorecard.d.ts +20 -0
- package/dist/observability/adapters/external/scorecard.js +22 -0
- package/dist/observability/adapters/external/signoz.d.ts +20 -0
- package/dist/observability/adapters/external/signoz.js +22 -0
- package/dist/observability/adapters/external/traceloop.d.ts +20 -0
- package/dist/observability/adapters/external/traceloop.js +22 -0
- package/dist/observability/adapters/external/weave.d.ts +20 -0
- package/dist/observability/adapters/external/weave.js +22 -0
- package/dist/observability/adapters/index.d.ts +19 -0
- package/dist/observability/adapters/index.js +289 -0
- package/dist/observability/adapters/memory.d.ts +41 -0
- package/dist/observability/adapters/memory.js +190 -0
- package/dist/observability/adapters/noop.d.ts +25 -0
- package/dist/observability/adapters/noop.js +64 -0
- package/dist/observability/index.d.ts +47 -0
- package/dist/observability/index.js +115 -0
- package/dist/observability/types.d.ts +165 -0
- package/dist/observability/types.js +165 -0
- package/dist/planning/index.d.ts +253 -0
- package/dist/planning/index.js +475 -0
- package/dist/process/index.d.ts +25 -0
- package/dist/process/index.js +37 -0
- package/dist/process/process.d.ts +0 -0
- package/dist/process/process.js +1 -0
- package/dist/session/index.d.ts +111 -0
- package/dist/session/index.js +250 -0
- package/dist/skills/index.d.ts +70 -0
- package/dist/skills/index.js +233 -0
- package/dist/task/index.d.ts +25 -0
- package/dist/task/index.js +32 -0
- package/dist/task/task.d.ts +0 -0
- package/dist/task/task.js +1 -0
- package/dist/telemetry/index.d.ts +175 -0
- package/dist/telemetry/index.js +287 -0
- package/dist/tools/arxivTools.d.ts +32 -0
- package/dist/tools/arxivTools.js +81 -0
- package/dist/tools/base.d.ts +97 -0
- package/dist/tools/base.js +147 -0
- package/dist/tools/builtins/airweave.d.ts +32 -0
- package/dist/tools/builtins/airweave.js +119 -0
- package/dist/tools/builtins/bedrock-agentcore.d.ts +62 -0
- package/dist/tools/builtins/bedrock-agentcore.js +233 -0
- package/dist/tools/builtins/code-execution.d.ts +36 -0
- package/dist/tools/builtins/code-execution.js +136 -0
- package/dist/tools/builtins/code-mode.d.ts +54 -0
- package/dist/tools/builtins/code-mode.js +167 -0
- package/dist/tools/builtins/custom.d.ts +42 -0
- package/dist/tools/builtins/custom.js +195 -0
- package/dist/tools/builtins/exa.d.ts +53 -0
- package/dist/tools/builtins/exa.js +112 -0
- package/dist/tools/builtins/firecrawl.d.ts +56 -0
- package/dist/tools/builtins/firecrawl.js +158 -0
- package/dist/tools/builtins/index.d.ts +45 -0
- package/dist/tools/builtins/index.js +180 -0
- package/dist/tools/builtins/parallel.d.ts +30 -0
- package/dist/tools/builtins/parallel.js +113 -0
- package/dist/tools/builtins/perplexity.d.ts +32 -0
- package/dist/tools/builtins/perplexity.js +113 -0
- package/dist/tools/builtins/superagent.d.ts +66 -0
- package/dist/tools/builtins/superagent.js +187 -0
- package/dist/tools/builtins/tavily.d.ts +99 -0
- package/dist/tools/builtins/tavily.js +285 -0
- package/dist/tools/builtins/valyu.d.ts +65 -0
- package/dist/tools/builtins/valyu.js +193 -0
- package/dist/tools/decorator.d.ts +91 -0
- package/dist/tools/decorator.js +165 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.js +36 -0
- package/dist/tools/mcpSse.d.ts +43 -0
- package/dist/tools/mcpSse.js +110 -0
- package/dist/tools/registry/index.d.ts +9 -0
- package/dist/tools/registry/index.js +28 -0
- package/dist/tools/registry/middleware.d.ts +43 -0
- package/dist/tools/registry/middleware.js +220 -0
- package/dist/tools/registry/registry.d.ts +92 -0
- package/dist/tools/registry/registry.js +280 -0
- package/dist/tools/registry/types.d.ts +217 -0
- package/dist/tools/registry/types.js +49 -0
- package/dist/tools/test.d.ts +0 -0
- package/dist/tools/test.js +1 -0
- package/dist/tools/tools.d.ts +74 -0
- package/dist/tools/tools.js +133 -0
- package/dist/utils/logger.d.ts +25 -0
- package/dist/utils/logger.js +149 -0
- package/dist/utils/pretty-logger.d.ts +21 -0
- package/dist/utils/pretty-logger.js +248 -0
- package/dist/workflows/index.d.ts +118 -0
- package/dist/workflows/index.js +247 -0
- package/dist/workflows/loop.d.ts +0 -0
- package/dist/workflows/loop.js +1 -0
- package/dist/workflows/yaml-parser.d.ts +48 -0
- package/dist/workflows/yaml-parser.js +304 -0
- package/package.json +119 -0
|
@@ -0,0 +1,696 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Agents = exports.PraisonAIAgents = exports.Agent = void 0;
|
|
37
|
+
const openai_1 = require("../llm/openai");
|
|
38
|
+
const logger_1 = require("../utils/logger");
|
|
39
|
+
const crypto_1 = require("crypto");
|
|
40
|
+
class Agent {
|
|
41
|
+
constructor(config) {
|
|
42
|
+
this.toolFunctions = {};
|
|
43
|
+
this.messages = [];
|
|
44
|
+
this.dbInitialized = false;
|
|
45
|
+
this.responseCache = new Map();
|
|
46
|
+
// AI SDK backend support
|
|
47
|
+
this._backend = null;
|
|
48
|
+
this._backendPromise = null;
|
|
49
|
+
this._backendSource = 'legacy';
|
|
50
|
+
this._useAISDKBackend = false;
|
|
51
|
+
// Build instructions from either simple or advanced mode
|
|
52
|
+
if (config.instructions) {
|
|
53
|
+
this.instructions = config.instructions;
|
|
54
|
+
}
|
|
55
|
+
else if (config.role || config.goal || config.backstory) {
|
|
56
|
+
// Advanced mode: construct instructions from role/goal/backstory
|
|
57
|
+
const parts = [];
|
|
58
|
+
if (config.role)
|
|
59
|
+
parts.push(`You are a ${config.role}.`);
|
|
60
|
+
if (config.goal)
|
|
61
|
+
parts.push(`Your goal is: ${config.goal}`);
|
|
62
|
+
if (config.backstory)
|
|
63
|
+
parts.push(`Background: ${config.backstory}`);
|
|
64
|
+
this.instructions = parts.join('\n');
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.instructions = 'You are a helpful AI assistant.';
|
|
68
|
+
}
|
|
69
|
+
this.name = config.name || `Agent_${Math.random().toString(36).substr(2, 9)}`;
|
|
70
|
+
this.verbose = config.verbose ?? process.env.PRAISON_VERBOSE !== 'false';
|
|
71
|
+
this.pretty = config.pretty ?? process.env.PRAISON_PRETTY === 'true';
|
|
72
|
+
this.llm = config.llm || process.env.OPENAI_MODEL_NAME || process.env.PRAISONAI_MODEL || 'gpt-4o-mini';
|
|
73
|
+
this.markdown = config.markdown ?? true;
|
|
74
|
+
this.stream = config.stream ?? true;
|
|
75
|
+
this.tools = config.tools;
|
|
76
|
+
this.dbAdapter = config.db;
|
|
77
|
+
this.sessionId = config.sessionId || this.generateSessionId();
|
|
78
|
+
this.runId = config.runId || (0, crypto_1.randomUUID)();
|
|
79
|
+
this.historyLimit = config.historyLimit ?? 100;
|
|
80
|
+
this.autoRestore = config.autoRestore ?? true;
|
|
81
|
+
this.autoPersist = config.autoPersist ?? true;
|
|
82
|
+
this.cache = config.cache ?? false;
|
|
83
|
+
this.cacheTTL = config.cacheTTL ?? 3600;
|
|
84
|
+
this.telemetryEnabled = config.telemetry ?? false;
|
|
85
|
+
// Parse model string to extract provider and model ID
|
|
86
|
+
// Format: "provider/model" or just "model"
|
|
87
|
+
const providerId = this.llm.includes('/') ? this.llm.split('/')[0] : 'openai';
|
|
88
|
+
const modelId = this.llm.includes('/') ? this.llm.split('/').slice(1).join('/') : this.llm;
|
|
89
|
+
// For OpenAI, use OpenAIService directly for backward compatibility
|
|
90
|
+
// For other providers, we'll use the AI SDK backend via getBackend()
|
|
91
|
+
this._useAISDKBackend = providerId !== 'openai';
|
|
92
|
+
this.llmService = new openai_1.OpenAIService(modelId);
|
|
93
|
+
// Configure logging
|
|
94
|
+
logger_1.Logger.setVerbose(this.verbose);
|
|
95
|
+
logger_1.Logger.setPretty(this.pretty);
|
|
96
|
+
// Process tools array - handle both tool definitions and functions
|
|
97
|
+
if (config.tools && Array.isArray(config.tools)) {
|
|
98
|
+
// Convert tools array to proper format if it contains functions
|
|
99
|
+
const processedTools = [];
|
|
100
|
+
for (let i = 0; i < config.tools.length; i++) {
|
|
101
|
+
const tool = config.tools[i];
|
|
102
|
+
if (typeof tool === 'function') {
|
|
103
|
+
// If it's a function, extract its name and register it
|
|
104
|
+
const funcName = tool.name || `function_${i}`;
|
|
105
|
+
// Skip functions with empty names
|
|
106
|
+
if (funcName && funcName.trim() !== '') {
|
|
107
|
+
this.registerToolFunction(funcName, tool);
|
|
108
|
+
// Auto-generate tool definition
|
|
109
|
+
this.addAutoGeneratedToolDefinition(funcName, tool);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Generate a random name for functions without names
|
|
113
|
+
const randomName = `function_${Math.random().toString(36).substring(2, 9)}`;
|
|
114
|
+
this.registerToolFunction(randomName, tool);
|
|
115
|
+
// Auto-generate tool definition
|
|
116
|
+
this.addAutoGeneratedToolDefinition(randomName, tool);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// If it's already a tool definition, add it as is
|
|
121
|
+
processedTools.push(tool);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Add any pre-defined tool definitions
|
|
125
|
+
if (processedTools.length > 0) {
|
|
126
|
+
this.tools = this.tools || [];
|
|
127
|
+
this.tools.push(...processedTools);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Register directly provided tool functions if any
|
|
131
|
+
if (config.toolFunctions) {
|
|
132
|
+
for (const [name, func] of Object.entries(config.toolFunctions)) {
|
|
133
|
+
this.registerToolFunction(name, func);
|
|
134
|
+
// Auto-generate tool definition if not already provided
|
|
135
|
+
if (!this.hasToolDefinition(name)) {
|
|
136
|
+
this.addAutoGeneratedToolDefinition(name, func);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Generate a unique session ID based on current hour, agent name, and random suffix
|
|
143
|
+
*/
|
|
144
|
+
generateSessionId() {
|
|
145
|
+
const now = new Date();
|
|
146
|
+
const hourStr = now.toISOString().slice(0, 13).replace(/[-T:]/g, '');
|
|
147
|
+
const hash = this.name ? this.name.slice(0, 6) : 'agent';
|
|
148
|
+
const randomSuffix = (0, crypto_1.randomUUID)().slice(0, 8);
|
|
149
|
+
return `${hourStr}-${hash}-${randomSuffix}`;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Initialize DB session - restore history on first chat (lazy)
|
|
153
|
+
*/
|
|
154
|
+
async initDbSession() {
|
|
155
|
+
if (this.dbInitialized || !this.dbAdapter || !this.autoRestore)
|
|
156
|
+
return;
|
|
157
|
+
try {
|
|
158
|
+
// Restore previous messages from DB
|
|
159
|
+
const history = await this.dbAdapter.getMessages(this.sessionId, this.historyLimit);
|
|
160
|
+
if (history.length > 0) {
|
|
161
|
+
this.messages = history.map(m => ({
|
|
162
|
+
role: m.role,
|
|
163
|
+
content: m.content
|
|
164
|
+
}));
|
|
165
|
+
logger_1.Logger.debug(`Restored ${history.length} messages from session ${this.sessionId}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
logger_1.Logger.warn('Failed to initialize DB session:', error);
|
|
170
|
+
}
|
|
171
|
+
this.dbInitialized = true;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get cached response if available and not expired
|
|
175
|
+
*/
|
|
176
|
+
getCachedResponse(prompt) {
|
|
177
|
+
if (!this.cache)
|
|
178
|
+
return null;
|
|
179
|
+
const cacheKey = `${this.sessionId}:${prompt}`;
|
|
180
|
+
const cached = this.responseCache.get(cacheKey);
|
|
181
|
+
if (cached) {
|
|
182
|
+
const age = (Date.now() - cached.timestamp) / 1000;
|
|
183
|
+
if (age < this.cacheTTL) {
|
|
184
|
+
logger_1.Logger.debug('Cache hit for prompt');
|
|
185
|
+
return cached.response;
|
|
186
|
+
}
|
|
187
|
+
// Expired, remove it
|
|
188
|
+
this.responseCache.delete(cacheKey);
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Cache a response
|
|
194
|
+
*/
|
|
195
|
+
cacheResponse(prompt, response) {
|
|
196
|
+
if (!this.cache)
|
|
197
|
+
return;
|
|
198
|
+
const cacheKey = `${this.sessionId}:${prompt}`;
|
|
199
|
+
this.responseCache.set(cacheKey, { response, timestamp: Date.now() });
|
|
200
|
+
}
|
|
201
|
+
createSystemPrompt() {
|
|
202
|
+
let prompt = this.instructions;
|
|
203
|
+
if (this.markdown) {
|
|
204
|
+
prompt += '\nPlease format your response in markdown.';
|
|
205
|
+
}
|
|
206
|
+
return prompt;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Register a tool function that can be called by the model
|
|
210
|
+
* @param name Function name
|
|
211
|
+
* @param fn Function implementation
|
|
212
|
+
*/
|
|
213
|
+
registerToolFunction(name, fn) {
|
|
214
|
+
this.toolFunctions[name] = fn;
|
|
215
|
+
logger_1.Logger.debug(`Registered tool function: ${name}`);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check if a tool definition exists for the given function name
|
|
219
|
+
* @param name Function name
|
|
220
|
+
* @returns True if a tool definition exists
|
|
221
|
+
*/
|
|
222
|
+
hasToolDefinition(name) {
|
|
223
|
+
if (!this.tools)
|
|
224
|
+
return false;
|
|
225
|
+
return this.tools.some(tool => {
|
|
226
|
+
if (tool.type === 'function' && tool.function) {
|
|
227
|
+
return tool.function.name === name;
|
|
228
|
+
}
|
|
229
|
+
return false;
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Auto-generate a tool definition based on the function
|
|
234
|
+
* @param name Function name
|
|
235
|
+
* @param func Function implementation
|
|
236
|
+
*/
|
|
237
|
+
addAutoGeneratedToolDefinition(name, func) {
|
|
238
|
+
if (!this.tools) {
|
|
239
|
+
this.tools = [];
|
|
240
|
+
}
|
|
241
|
+
// Ensure we have a valid function name
|
|
242
|
+
const functionName = name || func.name || `function_${Math.random().toString(36).substring(2, 9)}`;
|
|
243
|
+
// Extract parameter names from function
|
|
244
|
+
const funcStr = func.toString();
|
|
245
|
+
const paramMatch = funcStr.match(/\(([^)]*)\)/);
|
|
246
|
+
const params = paramMatch ? paramMatch[1].split(',').map(p => p.trim()).filter(p => p) : [];
|
|
247
|
+
// Create a basic tool definition
|
|
248
|
+
const toolDef = {
|
|
249
|
+
type: "function",
|
|
250
|
+
function: {
|
|
251
|
+
name: functionName,
|
|
252
|
+
description: `Auto-generated function for ${functionName}`,
|
|
253
|
+
parameters: {
|
|
254
|
+
type: "object",
|
|
255
|
+
properties: {},
|
|
256
|
+
required: []
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
// Add parameters to the definition
|
|
261
|
+
if (params.length > 0) {
|
|
262
|
+
const properties = {};
|
|
263
|
+
const required = [];
|
|
264
|
+
params.forEach(param => {
|
|
265
|
+
// Remove type annotations if present
|
|
266
|
+
const paramName = param.split(':')[0].trim();
|
|
267
|
+
if (paramName) {
|
|
268
|
+
properties[paramName] = {
|
|
269
|
+
type: "string",
|
|
270
|
+
description: `Parameter ${paramName} for function ${name}`
|
|
271
|
+
};
|
|
272
|
+
required.push(paramName);
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
toolDef.function.parameters.properties = properties;
|
|
276
|
+
toolDef.function.parameters.required = required;
|
|
277
|
+
}
|
|
278
|
+
this.tools.push(toolDef);
|
|
279
|
+
logger_1.Logger.debug(`Auto-generated tool definition for ${functionName}`);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Process tool calls from the model
|
|
283
|
+
* @param toolCalls Tool calls from the model
|
|
284
|
+
* @returns Array of tool results
|
|
285
|
+
*/
|
|
286
|
+
async processToolCalls(toolCalls) {
|
|
287
|
+
const results = [];
|
|
288
|
+
for (const toolCall of toolCalls) {
|
|
289
|
+
const { id, function: { name, arguments: argsString } } = toolCall;
|
|
290
|
+
await logger_1.Logger.debug(`Processing tool call: ${name}`, { arguments: argsString });
|
|
291
|
+
try {
|
|
292
|
+
// Parse arguments
|
|
293
|
+
const args = JSON.parse(argsString);
|
|
294
|
+
// Check if function exists
|
|
295
|
+
if (!this.toolFunctions[name]) {
|
|
296
|
+
throw new Error(`Function ${name} not registered`);
|
|
297
|
+
}
|
|
298
|
+
// Call the function
|
|
299
|
+
const result = await this.toolFunctions[name](...Object.values(args));
|
|
300
|
+
// Add result to messages
|
|
301
|
+
results.push({
|
|
302
|
+
role: 'tool',
|
|
303
|
+
tool_call_id: id,
|
|
304
|
+
content: result.toString()
|
|
305
|
+
});
|
|
306
|
+
await logger_1.Logger.debug(`Tool call result for ${name}:`, { result });
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
await logger_1.Logger.error(`Error executing tool ${name}:`, error);
|
|
310
|
+
results.push({
|
|
311
|
+
role: 'tool',
|
|
312
|
+
tool_call_id: id,
|
|
313
|
+
content: `Error: ${error.message || 'Unknown error'}`
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return results;
|
|
318
|
+
}
|
|
319
|
+
async start(prompt, previousResult) {
|
|
320
|
+
await logger_1.Logger.debug(`Agent ${this.name} starting with prompt: ${prompt}`);
|
|
321
|
+
try {
|
|
322
|
+
// Replace placeholder with previous result if available
|
|
323
|
+
if (previousResult) {
|
|
324
|
+
prompt = prompt.replace('{{previous}}', previousResult);
|
|
325
|
+
}
|
|
326
|
+
// Initialize messages array with system prompt and conversation history
|
|
327
|
+
const messages = [
|
|
328
|
+
{ role: 'system', content: this.createSystemPrompt() }
|
|
329
|
+
];
|
|
330
|
+
// Add conversation history (excluding the current prompt which will be added below)
|
|
331
|
+
for (const msg of this.messages) {
|
|
332
|
+
if (msg.role && msg.content) {
|
|
333
|
+
messages.push({ role: msg.role, content: msg.content });
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Add current user prompt
|
|
337
|
+
messages.push({ role: 'user', content: prompt });
|
|
338
|
+
let finalResponse = '';
|
|
339
|
+
// Use AI SDK backend for non-OpenAI providers
|
|
340
|
+
if (this._useAISDKBackend) {
|
|
341
|
+
const backend = await this.getBackend();
|
|
342
|
+
if (this.stream && !this.tools) {
|
|
343
|
+
// Streaming with AI SDK backend
|
|
344
|
+
const stream = await backend.streamText({
|
|
345
|
+
messages,
|
|
346
|
+
temperature: 0.7
|
|
347
|
+
});
|
|
348
|
+
let accumulated = '';
|
|
349
|
+
for await (const chunk of stream) {
|
|
350
|
+
if (chunk.text) {
|
|
351
|
+
process.stdout.write(chunk.text);
|
|
352
|
+
accumulated += chunk.text;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
finalResponse = accumulated;
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
// Non-streaming with AI SDK backend
|
|
359
|
+
const result = await backend.generateText({
|
|
360
|
+
messages,
|
|
361
|
+
temperature: 0.7
|
|
362
|
+
});
|
|
363
|
+
finalResponse = result.text;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
else if (this.stream && !this.tools) {
|
|
367
|
+
// Use streaming with full conversation history (OpenAI)
|
|
368
|
+
finalResponse = await this.llmService.streamChat(messages, 0.7, (token) => {
|
|
369
|
+
process.stdout.write(token);
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
else if (this.tools) {
|
|
373
|
+
// Use tools (non-streaming for now to simplify implementation)
|
|
374
|
+
let continueConversation = true;
|
|
375
|
+
let iterations = 0;
|
|
376
|
+
const maxIterations = 5; // Prevent infinite loops
|
|
377
|
+
while (continueConversation && iterations < maxIterations) {
|
|
378
|
+
iterations++;
|
|
379
|
+
// Get response from LLM
|
|
380
|
+
const response = await this.llmService.generateChat(messages, 0.7, this.tools);
|
|
381
|
+
// Add assistant response to messages
|
|
382
|
+
messages.push({
|
|
383
|
+
role: 'assistant',
|
|
384
|
+
content: response.content || '',
|
|
385
|
+
tool_calls: response.tool_calls
|
|
386
|
+
});
|
|
387
|
+
// Check if there are tool calls to process
|
|
388
|
+
if (response.tool_calls && response.tool_calls.length > 0) {
|
|
389
|
+
// Process tool calls
|
|
390
|
+
const toolResults = await this.processToolCalls(response.tool_calls);
|
|
391
|
+
// Add tool results to messages
|
|
392
|
+
messages.push(...toolResults);
|
|
393
|
+
// Continue conversation to get final response
|
|
394
|
+
continueConversation = true;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
// No tool calls, we have our final response
|
|
398
|
+
finalResponse = response.content || '';
|
|
399
|
+
continueConversation = false;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (iterations >= maxIterations) {
|
|
403
|
+
await logger_1.Logger.warn(`Reached maximum iterations (${maxIterations}) for tool calls`);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
// Use regular text generation without streaming
|
|
408
|
+
const response = await this.llmService.generateText(prompt, this.createSystemPrompt());
|
|
409
|
+
finalResponse = response;
|
|
410
|
+
}
|
|
411
|
+
return finalResponse;
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
await logger_1.Logger.error('Error in agent execution', error);
|
|
415
|
+
throw error;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
async chat(prompt, previousResult) {
|
|
419
|
+
// Lazy init: restore history on first chat (like Python SDK)
|
|
420
|
+
await this.initDbSession();
|
|
421
|
+
// Check cache first
|
|
422
|
+
const cached = this.getCachedResponse(prompt);
|
|
423
|
+
if (cached) {
|
|
424
|
+
return cached;
|
|
425
|
+
}
|
|
426
|
+
// Add user message to conversation history
|
|
427
|
+
this.messages.push({ role: 'user', content: prompt });
|
|
428
|
+
// Persist user message if db is configured and autoPersist is enabled
|
|
429
|
+
if (this.dbAdapter && this.autoPersist) {
|
|
430
|
+
await this.persistMessage('user', prompt);
|
|
431
|
+
}
|
|
432
|
+
const response = await this.start(prompt, previousResult);
|
|
433
|
+
// Add assistant response to history
|
|
434
|
+
this.messages.push({ role: 'assistant', content: response });
|
|
435
|
+
// Persist assistant response if db is configured and autoPersist is enabled
|
|
436
|
+
if (this.dbAdapter && this.autoPersist) {
|
|
437
|
+
await this.persistMessage('assistant', response);
|
|
438
|
+
}
|
|
439
|
+
// Cache the response
|
|
440
|
+
this.cacheResponse(prompt, response);
|
|
441
|
+
return response;
|
|
442
|
+
}
|
|
443
|
+
async execute(previousResult) {
|
|
444
|
+
// For backward compatibility and multi-agent support
|
|
445
|
+
return this.start(this.instructions, previousResult);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Persist a message to the database
|
|
449
|
+
*/
|
|
450
|
+
async persistMessage(role, content) {
|
|
451
|
+
if (!this.dbAdapter)
|
|
452
|
+
return;
|
|
453
|
+
try {
|
|
454
|
+
const message = {
|
|
455
|
+
id: (0, crypto_1.randomUUID)(),
|
|
456
|
+
sessionId: this.sessionId,
|
|
457
|
+
runId: this.runId,
|
|
458
|
+
role,
|
|
459
|
+
content,
|
|
460
|
+
createdAt: Date.now()
|
|
461
|
+
};
|
|
462
|
+
await this.dbAdapter.saveMessage(message);
|
|
463
|
+
}
|
|
464
|
+
catch (error) {
|
|
465
|
+
await logger_1.Logger.warn('Failed to persist message:', error);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Get the session ID for this agent
|
|
470
|
+
*/
|
|
471
|
+
getSessionId() {
|
|
472
|
+
return this.sessionId;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Get the run ID for this agent
|
|
476
|
+
*/
|
|
477
|
+
getRunId() {
|
|
478
|
+
return this.runId;
|
|
479
|
+
}
|
|
480
|
+
getResult() {
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
getInstructions() {
|
|
484
|
+
return this.instructions;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Get conversation history
|
|
488
|
+
*/
|
|
489
|
+
getHistory() {
|
|
490
|
+
return [...this.messages];
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Clear conversation history (in memory and optionally in DB)
|
|
494
|
+
*/
|
|
495
|
+
async clearHistory(clearDb = true) {
|
|
496
|
+
this.messages = [];
|
|
497
|
+
if (clearDb && this.dbAdapter) {
|
|
498
|
+
try {
|
|
499
|
+
await this.dbAdapter.deleteMessages(this.sessionId);
|
|
500
|
+
logger_1.Logger.debug(`Cleared history for session ${this.sessionId}`);
|
|
501
|
+
}
|
|
502
|
+
catch (error) {
|
|
503
|
+
logger_1.Logger.warn('Failed to clear DB history:', error);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Clear response cache
|
|
509
|
+
*/
|
|
510
|
+
clearCache() {
|
|
511
|
+
this.responseCache.clear();
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Get the resolved backend (AI SDK preferred, native fallback)
|
|
515
|
+
* Lazy initialization - backend is only resolved on first use
|
|
516
|
+
*/
|
|
517
|
+
async getBackend() {
|
|
518
|
+
if (this._backend) {
|
|
519
|
+
return this._backend;
|
|
520
|
+
}
|
|
521
|
+
if (!this._backendPromise) {
|
|
522
|
+
this._backendPromise = (async () => {
|
|
523
|
+
const { resolveBackend } = await Promise.resolve().then(() => __importStar(require('../llm/backend-resolver')));
|
|
524
|
+
const result = await resolveBackend(this.llm, {
|
|
525
|
+
attribution: {
|
|
526
|
+
agentId: this.name,
|
|
527
|
+
runId: this.runId,
|
|
528
|
+
sessionId: this.sessionId,
|
|
529
|
+
},
|
|
530
|
+
});
|
|
531
|
+
this._backend = result.provider;
|
|
532
|
+
this._backendSource = result.source;
|
|
533
|
+
logger_1.Logger.debug(`Agent ${this.name} using ${result.source} backend for ${this.llm}`);
|
|
534
|
+
return result;
|
|
535
|
+
})();
|
|
536
|
+
}
|
|
537
|
+
const result = await this._backendPromise;
|
|
538
|
+
return result.provider;
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Get the backend source (ai-sdk, native, custom, or legacy)
|
|
542
|
+
*/
|
|
543
|
+
getBackendSource() {
|
|
544
|
+
return this._backendSource;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Embed text using AI SDK (preferred) or native provider
|
|
548
|
+
*
|
|
549
|
+
* @param text - Text to embed (string or array of strings)
|
|
550
|
+
* @param options - Embedding options
|
|
551
|
+
* @returns Embedding vector(s)
|
|
552
|
+
*
|
|
553
|
+
* @example Single text
|
|
554
|
+
* ```typescript
|
|
555
|
+
* const embedding = await agent.embed("Hello world");
|
|
556
|
+
* ```
|
|
557
|
+
*
|
|
558
|
+
* @example Multiple texts
|
|
559
|
+
* ```typescript
|
|
560
|
+
* const embeddings = await agent.embed(["Hello", "World"]);
|
|
561
|
+
* ```
|
|
562
|
+
*/
|
|
563
|
+
async embed(text, options) {
|
|
564
|
+
const { embed, embedMany } = await Promise.resolve().then(() => __importStar(require('../llm/embeddings')));
|
|
565
|
+
if (Array.isArray(text)) {
|
|
566
|
+
const result = await embedMany(text, { model: options?.model });
|
|
567
|
+
return result.embeddings;
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
const result = await embed(text, { model: options?.model });
|
|
571
|
+
return result.embedding;
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Get the model string for this agent
|
|
576
|
+
*/
|
|
577
|
+
getModel() {
|
|
578
|
+
return this.llm;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
exports.Agent = Agent;
|
|
582
|
+
/**
|
|
583
|
+
* Multi-agent orchestration class
|
|
584
|
+
*
|
|
585
|
+
* @example Simple array syntax
|
|
586
|
+
* ```typescript
|
|
587
|
+
* import { Agent, Agents } from 'praisonai';
|
|
588
|
+
*
|
|
589
|
+
* const researcher = new Agent({ instructions: "Research the topic" });
|
|
590
|
+
* const writer = new Agent({ instructions: "Write based on research" });
|
|
591
|
+
*
|
|
592
|
+
* const agents = new Agents([researcher, writer]);
|
|
593
|
+
* await agents.start();
|
|
594
|
+
* ```
|
|
595
|
+
*
|
|
596
|
+
* @example Config object syntax
|
|
597
|
+
* ```typescript
|
|
598
|
+
* const agents = new Agents({
|
|
599
|
+
* agents: [researcher, writer],
|
|
600
|
+
* process: 'parallel'
|
|
601
|
+
* });
|
|
602
|
+
* ```
|
|
603
|
+
*/
|
|
604
|
+
class PraisonAIAgents {
|
|
605
|
+
/**
|
|
606
|
+
* Create a multi-agent orchestration
|
|
607
|
+
* @param configOrAgents - Either an array of agents or a config object
|
|
608
|
+
*/
|
|
609
|
+
constructor(configOrAgents) {
|
|
610
|
+
// Support array syntax: new Agents([a1, a2])
|
|
611
|
+
const config = Array.isArray(configOrAgents)
|
|
612
|
+
? { agents: configOrAgents }
|
|
613
|
+
: configOrAgents;
|
|
614
|
+
this.agents = config.agents;
|
|
615
|
+
this.verbose = config.verbose ?? process.env.PRAISON_VERBOSE !== 'false';
|
|
616
|
+
this.pretty = config.pretty ?? process.env.PRAISON_PRETTY === 'true';
|
|
617
|
+
this.process = config.process || 'sequential';
|
|
618
|
+
// Auto-generate tasks if not provided
|
|
619
|
+
this.tasks = config.tasks || this.generateTasks();
|
|
620
|
+
// Configure logging
|
|
621
|
+
logger_1.Logger.setVerbose(this.verbose);
|
|
622
|
+
logger_1.Logger.setPretty(this.pretty);
|
|
623
|
+
}
|
|
624
|
+
generateTasks() {
|
|
625
|
+
return this.agents.map(agent => {
|
|
626
|
+
const instructions = agent.getInstructions();
|
|
627
|
+
// Extract task from instructions - get first sentence or whole instruction if no period
|
|
628
|
+
const task = instructions.split('.')[0].trim();
|
|
629
|
+
return task;
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
async executeSequential() {
|
|
633
|
+
const results = [];
|
|
634
|
+
let previousResult;
|
|
635
|
+
for (let i = 0; i < this.agents.length; i++) {
|
|
636
|
+
const agent = this.agents[i];
|
|
637
|
+
const task = this.tasks[i];
|
|
638
|
+
await logger_1.Logger.debug(`Running agent ${i + 1}: ${agent.name}`);
|
|
639
|
+
await logger_1.Logger.debug(`Task: ${task}`);
|
|
640
|
+
// For first agent, use task directly
|
|
641
|
+
// For subsequent agents, append previous result to their instructions
|
|
642
|
+
const prompt = i === 0 ? task : `${task}\n\nHere is the input: ${previousResult}`;
|
|
643
|
+
const result = await agent.start(prompt, previousResult);
|
|
644
|
+
results.push(result);
|
|
645
|
+
previousResult = result;
|
|
646
|
+
}
|
|
647
|
+
return results;
|
|
648
|
+
}
|
|
649
|
+
async start() {
|
|
650
|
+
await logger_1.Logger.debug('Starting PraisonAI Agents execution...');
|
|
651
|
+
await logger_1.Logger.debug('Process mode:', this.process);
|
|
652
|
+
await logger_1.Logger.debug('Tasks:', this.tasks);
|
|
653
|
+
let results;
|
|
654
|
+
if (this.process === 'parallel') {
|
|
655
|
+
// Run all agents in parallel
|
|
656
|
+
const promises = this.agents.map((agent, i) => {
|
|
657
|
+
const task = this.tasks[i];
|
|
658
|
+
return agent.start(task);
|
|
659
|
+
});
|
|
660
|
+
results = await Promise.all(promises);
|
|
661
|
+
}
|
|
662
|
+
else {
|
|
663
|
+
// Run agents sequentially (default)
|
|
664
|
+
results = await this.executeSequential();
|
|
665
|
+
}
|
|
666
|
+
if (this.verbose) {
|
|
667
|
+
await logger_1.Logger.info('PraisonAI Agents execution completed.');
|
|
668
|
+
for (let i = 0; i < results.length; i++) {
|
|
669
|
+
await logger_1.Logger.section(`Result from Agent ${i + 1}`, results[i]);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
return results;
|
|
673
|
+
}
|
|
674
|
+
async chat() {
|
|
675
|
+
return this.start();
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
exports.PraisonAIAgents = PraisonAIAgents;
|
|
679
|
+
/**
|
|
680
|
+
* Agents - Alias for PraisonAIAgents
|
|
681
|
+
*
|
|
682
|
+
* This is the recommended class name for multi-agent orchestration.
|
|
683
|
+
* PraisonAIAgents is kept for backward compatibility.
|
|
684
|
+
*
|
|
685
|
+
* @example
|
|
686
|
+
* ```typescript
|
|
687
|
+
* import { Agent, Agents } from 'praisonai';
|
|
688
|
+
*
|
|
689
|
+
* const agents = new Agents([
|
|
690
|
+
* new Agent({ instructions: "Research the topic" }),
|
|
691
|
+
* new Agent({ instructions: "Write based on research" })
|
|
692
|
+
* ]);
|
|
693
|
+
* await agents.start();
|
|
694
|
+
* ```
|
|
695
|
+
*/
|
|
696
|
+
exports.Agents = PraisonAIAgents;
|