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,310 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fast Context - Fast retrieval and summarization pipeline
|
|
4
|
+
* Minimizes tokens and latency with deterministic caching
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FastContext = void 0;
|
|
8
|
+
exports.createFastContext = createFastContext;
|
|
9
|
+
exports.getQuickContext = getQuickContext;
|
|
10
|
+
/**
|
|
11
|
+
* Fast Context class for efficient context retrieval
|
|
12
|
+
*/
|
|
13
|
+
class FastContext {
|
|
14
|
+
constructor(config = {}) {
|
|
15
|
+
this.cache = new Map();
|
|
16
|
+
this.sources = new Map();
|
|
17
|
+
this.config = {
|
|
18
|
+
maxTokens: 4000,
|
|
19
|
+
cacheEnabled: true,
|
|
20
|
+
cacheTTL: 300000, // 5 minutes
|
|
21
|
+
...config
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Register a context source
|
|
26
|
+
*/
|
|
27
|
+
registerSource(id, type, contents, metadata) {
|
|
28
|
+
const sources = contents.map((content, i) => ({
|
|
29
|
+
id: `${id}_${i}`,
|
|
30
|
+
type,
|
|
31
|
+
content,
|
|
32
|
+
metadata
|
|
33
|
+
}));
|
|
34
|
+
this.sources.set(id, sources);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Register memory as a source
|
|
38
|
+
*/
|
|
39
|
+
registerMemory(memory) {
|
|
40
|
+
const entries = memory.getAll();
|
|
41
|
+
const sources = entries.map((entry, i) => ({
|
|
42
|
+
id: `memory_${i}`,
|
|
43
|
+
type: 'memory',
|
|
44
|
+
content: entry.content,
|
|
45
|
+
metadata: entry.metadata
|
|
46
|
+
}));
|
|
47
|
+
this.sources.set('memory', sources);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Register knowledge base as a source
|
|
51
|
+
*/
|
|
52
|
+
registerKnowledge(knowledge) {
|
|
53
|
+
// Store reference for dynamic retrieval
|
|
54
|
+
this._knowledgeBase = knowledge;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get context for a query
|
|
58
|
+
*/
|
|
59
|
+
async getContext(query) {
|
|
60
|
+
const startTime = Date.now();
|
|
61
|
+
// Check cache
|
|
62
|
+
const cacheKey = this.getCacheKey(query);
|
|
63
|
+
if (this.config.cacheEnabled) {
|
|
64
|
+
const cached = this.getFromCache(cacheKey);
|
|
65
|
+
if (cached) {
|
|
66
|
+
return {
|
|
67
|
+
...cached.result,
|
|
68
|
+
cached: true,
|
|
69
|
+
latencyMs: Date.now() - startTime
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Gather relevant sources
|
|
74
|
+
const relevantSources = await this.gatherRelevantSources(query);
|
|
75
|
+
// Build context within token limit
|
|
76
|
+
const { context, sources, tokenCount } = await this.buildContext(relevantSources, query);
|
|
77
|
+
const result = {
|
|
78
|
+
context,
|
|
79
|
+
sources,
|
|
80
|
+
tokenCount,
|
|
81
|
+
cached: false,
|
|
82
|
+
latencyMs: Date.now() - startTime
|
|
83
|
+
};
|
|
84
|
+
// Cache result
|
|
85
|
+
if (this.config.cacheEnabled) {
|
|
86
|
+
this.addToCache(cacheKey, result);
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gather relevant sources for a query
|
|
92
|
+
*/
|
|
93
|
+
async gatherRelevantSources(query) {
|
|
94
|
+
const allSources = [];
|
|
95
|
+
// Get from registered sources
|
|
96
|
+
for (const sources of this.sources.values()) {
|
|
97
|
+
allSources.push(...sources);
|
|
98
|
+
}
|
|
99
|
+
// Get from knowledge base if registered
|
|
100
|
+
const kb = this._knowledgeBase;
|
|
101
|
+
if (kb) {
|
|
102
|
+
try {
|
|
103
|
+
const kbResults = await kb.search(query, 10);
|
|
104
|
+
for (let i = 0; i < kbResults.length; i++) {
|
|
105
|
+
allSources.push({
|
|
106
|
+
id: `kb_${i}`,
|
|
107
|
+
type: 'knowledge',
|
|
108
|
+
content: kbResults[i].content,
|
|
109
|
+
relevance: kbResults[i].score
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Ignore knowledge base errors
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Score relevance if embedding provider available
|
|
118
|
+
if (this.config.embeddingProvider) {
|
|
119
|
+
await this.scoreRelevance(allSources, query);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Simple text matching fallback
|
|
123
|
+
this.scoreRelevanceSimple(allSources, query);
|
|
124
|
+
}
|
|
125
|
+
// Sort by relevance
|
|
126
|
+
allSources.sort((a, b) => (b.relevance || 0) - (a.relevance || 0));
|
|
127
|
+
return allSources;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Score relevance using embeddings
|
|
131
|
+
*/
|
|
132
|
+
async scoreRelevance(sources, query) {
|
|
133
|
+
if (!this.config.embeddingProvider)
|
|
134
|
+
return;
|
|
135
|
+
const queryEmbedding = await this.config.embeddingProvider.embed(query);
|
|
136
|
+
for (const source of sources) {
|
|
137
|
+
if (source.relevance !== undefined)
|
|
138
|
+
continue; // Already scored
|
|
139
|
+
const sourceEmbedding = await this.config.embeddingProvider.embed(source.content);
|
|
140
|
+
source.relevance = this.cosineSimilarity(queryEmbedding, sourceEmbedding);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Simple text-based relevance scoring
|
|
145
|
+
*/
|
|
146
|
+
scoreRelevanceSimple(sources, query) {
|
|
147
|
+
const queryWords = query.toLowerCase().split(/\s+/);
|
|
148
|
+
for (const source of sources) {
|
|
149
|
+
if (source.relevance !== undefined)
|
|
150
|
+
continue;
|
|
151
|
+
const contentLower = source.content.toLowerCase();
|
|
152
|
+
let score = 0;
|
|
153
|
+
for (const word of queryWords) {
|
|
154
|
+
if (contentLower.includes(word)) {
|
|
155
|
+
score += 1 / queryWords.length;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Boost for exact phrase match
|
|
159
|
+
if (contentLower.includes(query.toLowerCase())) {
|
|
160
|
+
score += 0.5;
|
|
161
|
+
}
|
|
162
|
+
source.relevance = Math.min(score, 1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Build context from sources within token limit
|
|
167
|
+
*/
|
|
168
|
+
async buildContext(sources, query) {
|
|
169
|
+
const maxTokens = this.config.maxTokens || 4000;
|
|
170
|
+
const usedSources = [];
|
|
171
|
+
const contextParts = [];
|
|
172
|
+
let tokenCount = 0;
|
|
173
|
+
for (const source of sources) {
|
|
174
|
+
const sourceTokens = this.estimateTokens(source.content);
|
|
175
|
+
if (tokenCount + sourceTokens <= maxTokens) {
|
|
176
|
+
contextParts.push(source.content);
|
|
177
|
+
usedSources.push(source);
|
|
178
|
+
tokenCount += sourceTokens;
|
|
179
|
+
}
|
|
180
|
+
else if (this.config.summarizer && sourceTokens > 100) {
|
|
181
|
+
// Try to summarize if too long
|
|
182
|
+
const remainingTokens = maxTokens - tokenCount;
|
|
183
|
+
if (remainingTokens > 50) {
|
|
184
|
+
const summary = await this.config.summarizer(source.content, remainingTokens);
|
|
185
|
+
const summaryTokens = this.estimateTokens(summary);
|
|
186
|
+
if (tokenCount + summaryTokens <= maxTokens) {
|
|
187
|
+
contextParts.push(summary);
|
|
188
|
+
usedSources.push({ ...source, content: summary, metadata: { ...source.metadata, summarized: true } });
|
|
189
|
+
tokenCount += summaryTokens;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (tokenCount >= maxTokens * 0.95)
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
context: contextParts.join('\n\n'),
|
|
198
|
+
sources: usedSources,
|
|
199
|
+
tokenCount
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get cache key for query
|
|
204
|
+
*/
|
|
205
|
+
getCacheKey(query) {
|
|
206
|
+
// Simple hash
|
|
207
|
+
let hash = 0;
|
|
208
|
+
for (let i = 0; i < query.length; i++) {
|
|
209
|
+
const char = query.charCodeAt(i);
|
|
210
|
+
hash = ((hash << 5) - hash) + char;
|
|
211
|
+
hash = hash & hash;
|
|
212
|
+
}
|
|
213
|
+
return `ctx_${hash}`;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get from cache
|
|
217
|
+
*/
|
|
218
|
+
getFromCache(key) {
|
|
219
|
+
const entry = this.cache.get(key);
|
|
220
|
+
if (!entry)
|
|
221
|
+
return null;
|
|
222
|
+
// Check TTL
|
|
223
|
+
if (Date.now() - entry.timestamp > (this.config.cacheTTL || 300000)) {
|
|
224
|
+
this.cache.delete(key);
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
entry.hits++;
|
|
228
|
+
return entry;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Add to cache
|
|
232
|
+
*/
|
|
233
|
+
addToCache(key, result) {
|
|
234
|
+
this.cache.set(key, {
|
|
235
|
+
result,
|
|
236
|
+
timestamp: Date.now(),
|
|
237
|
+
hits: 0
|
|
238
|
+
});
|
|
239
|
+
// Limit cache size
|
|
240
|
+
if (this.cache.size > 100) {
|
|
241
|
+
const oldest = Array.from(this.cache.entries())
|
|
242
|
+
.sort((a, b) => a[1].timestamp - b[1].timestamp)[0];
|
|
243
|
+
if (oldest) {
|
|
244
|
+
this.cache.delete(oldest[0]);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Clear cache
|
|
250
|
+
*/
|
|
251
|
+
clearCache() {
|
|
252
|
+
this.cache.clear();
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get cache stats
|
|
256
|
+
*/
|
|
257
|
+
getCacheStats() {
|
|
258
|
+
let totalHits = 0;
|
|
259
|
+
for (const entry of this.cache.values()) {
|
|
260
|
+
totalHits += entry.hits;
|
|
261
|
+
}
|
|
262
|
+
return { size: this.cache.size, totalHits };
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Estimate token count
|
|
266
|
+
*/
|
|
267
|
+
estimateTokens(text) {
|
|
268
|
+
return Math.ceil(text.length / 4);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Cosine similarity
|
|
272
|
+
*/
|
|
273
|
+
cosineSimilarity(a, b) {
|
|
274
|
+
if (a.length !== b.length)
|
|
275
|
+
return 0;
|
|
276
|
+
let dotProduct = 0;
|
|
277
|
+
let normA = 0;
|
|
278
|
+
let normB = 0;
|
|
279
|
+
for (let i = 0; i < a.length; i++) {
|
|
280
|
+
dotProduct += a[i] * b[i];
|
|
281
|
+
normA += a[i] * a[i];
|
|
282
|
+
normB += b[i] * b[i];
|
|
283
|
+
}
|
|
284
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
285
|
+
return denominator === 0 ? 0 : dotProduct / denominator;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Clear all sources
|
|
289
|
+
*/
|
|
290
|
+
clearSources() {
|
|
291
|
+
this.sources.clear();
|
|
292
|
+
this._knowledgeBase = undefined;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
exports.FastContext = FastContext;
|
|
296
|
+
/**
|
|
297
|
+
* Create a fast context instance
|
|
298
|
+
*/
|
|
299
|
+
function createFastContext(config) {
|
|
300
|
+
return new FastContext(config);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Quick context retrieval
|
|
304
|
+
*/
|
|
305
|
+
async function getQuickContext(query, sources, maxTokens) {
|
|
306
|
+
const fc = createFastContext({ maxTokens, cacheEnabled: false });
|
|
307
|
+
fc.registerSource('quick', 'custom', sources);
|
|
308
|
+
const result = await fc.getContext(query);
|
|
309
|
+
return result.context;
|
|
310
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow Display - Textual DAG visualization for workflows
|
|
3
|
+
*/
|
|
4
|
+
export interface FlowNode {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
type: 'agent' | 'tool' | 'condition' | 'parallel' | 'start' | 'end';
|
|
8
|
+
status?: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
|
|
9
|
+
children?: string[];
|
|
10
|
+
metadata?: Record<string, any>;
|
|
11
|
+
}
|
|
12
|
+
export interface FlowGraph {
|
|
13
|
+
nodes: Map<string, FlowNode>;
|
|
14
|
+
edges: Array<{
|
|
15
|
+
from: string;
|
|
16
|
+
to: string;
|
|
17
|
+
label?: string;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
export interface FlowDisplayConfig {
|
|
21
|
+
showStatus?: boolean;
|
|
22
|
+
showMetadata?: boolean;
|
|
23
|
+
compact?: boolean;
|
|
24
|
+
maxWidth?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Flow Display class for DAG visualization
|
|
28
|
+
*/
|
|
29
|
+
export declare class FlowDisplay {
|
|
30
|
+
private graph;
|
|
31
|
+
private config;
|
|
32
|
+
constructor(config?: FlowDisplayConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Add a node to the graph
|
|
35
|
+
*/
|
|
36
|
+
addNode(node: FlowNode): void;
|
|
37
|
+
/**
|
|
38
|
+
* Add an edge between nodes
|
|
39
|
+
*/
|
|
40
|
+
addEdge(from: string, to: string, label?: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Update node status
|
|
43
|
+
*/
|
|
44
|
+
updateStatus(id: string, status: FlowNode['status']): void;
|
|
45
|
+
/**
|
|
46
|
+
* Build graph from workflow steps
|
|
47
|
+
*/
|
|
48
|
+
fromWorkflowSteps(steps: Array<{
|
|
49
|
+
name: string;
|
|
50
|
+
type?: string;
|
|
51
|
+
condition?: string;
|
|
52
|
+
}>): void;
|
|
53
|
+
/**
|
|
54
|
+
* Render the graph as text
|
|
55
|
+
*/
|
|
56
|
+
render(): string;
|
|
57
|
+
/**
|
|
58
|
+
* Render a single node and its children
|
|
59
|
+
*/
|
|
60
|
+
private renderNode;
|
|
61
|
+
/**
|
|
62
|
+
* Format a node for display
|
|
63
|
+
*/
|
|
64
|
+
private formatNode;
|
|
65
|
+
/**
|
|
66
|
+
* Render as simple ASCII box diagram
|
|
67
|
+
*/
|
|
68
|
+
renderBoxes(): string;
|
|
69
|
+
/**
|
|
70
|
+
* Create a box for a node
|
|
71
|
+
*/
|
|
72
|
+
private createBox;
|
|
73
|
+
/**
|
|
74
|
+
* Get status character
|
|
75
|
+
*/
|
|
76
|
+
private getStatusChar;
|
|
77
|
+
/**
|
|
78
|
+
* Clear the graph
|
|
79
|
+
*/
|
|
80
|
+
clear(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get graph data
|
|
83
|
+
*/
|
|
84
|
+
getGraph(): FlowGraph;
|
|
85
|
+
/**
|
|
86
|
+
* Export to DOT format (for Graphviz)
|
|
87
|
+
*/
|
|
88
|
+
toDot(): string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a flow display instance
|
|
92
|
+
*/
|
|
93
|
+
export declare function createFlowDisplay(config?: FlowDisplayConfig): FlowDisplay;
|
|
94
|
+
/**
|
|
95
|
+
* Quick render workflow steps
|
|
96
|
+
*/
|
|
97
|
+
export declare function renderWorkflow(steps: Array<{
|
|
98
|
+
name: string;
|
|
99
|
+
type?: string;
|
|
100
|
+
}>): string;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Flow Display - Textual DAG visualization for workflows
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FlowDisplay = void 0;
|
|
7
|
+
exports.createFlowDisplay = createFlowDisplay;
|
|
8
|
+
exports.renderWorkflow = renderWorkflow;
|
|
9
|
+
/**
|
|
10
|
+
* Flow Display class for DAG visualization
|
|
11
|
+
*/
|
|
12
|
+
class FlowDisplay {
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
this.config = {
|
|
15
|
+
showStatus: true,
|
|
16
|
+
showMetadata: false,
|
|
17
|
+
compact: false,
|
|
18
|
+
maxWidth: 80,
|
|
19
|
+
...config
|
|
20
|
+
};
|
|
21
|
+
this.graph = {
|
|
22
|
+
nodes: new Map(),
|
|
23
|
+
edges: []
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Add a node to the graph
|
|
28
|
+
*/
|
|
29
|
+
addNode(node) {
|
|
30
|
+
this.graph.nodes.set(node.id, node);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add an edge between nodes
|
|
34
|
+
*/
|
|
35
|
+
addEdge(from, to, label) {
|
|
36
|
+
this.graph.edges.push({ from, to, label });
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Update node status
|
|
40
|
+
*/
|
|
41
|
+
updateStatus(id, status) {
|
|
42
|
+
const node = this.graph.nodes.get(id);
|
|
43
|
+
if (node) {
|
|
44
|
+
node.status = status;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build graph from workflow steps
|
|
49
|
+
*/
|
|
50
|
+
fromWorkflowSteps(steps) {
|
|
51
|
+
this.graph.nodes.clear();
|
|
52
|
+
this.graph.edges = [];
|
|
53
|
+
// Add start node
|
|
54
|
+
this.addNode({ id: 'start', name: 'Start', type: 'start' });
|
|
55
|
+
let prevId = 'start';
|
|
56
|
+
for (let i = 0; i < steps.length; i++) {
|
|
57
|
+
const step = steps[i];
|
|
58
|
+
const id = `step_${i}`;
|
|
59
|
+
this.addNode({
|
|
60
|
+
id,
|
|
61
|
+
name: step.name,
|
|
62
|
+
type: step.type || 'agent',
|
|
63
|
+
status: 'pending'
|
|
64
|
+
});
|
|
65
|
+
this.addEdge(prevId, id, step.condition);
|
|
66
|
+
prevId = id;
|
|
67
|
+
}
|
|
68
|
+
// Add end node
|
|
69
|
+
this.addNode({ id: 'end', name: 'End', type: 'end' });
|
|
70
|
+
this.addEdge(prevId, 'end');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Render the graph as text
|
|
74
|
+
*/
|
|
75
|
+
render() {
|
|
76
|
+
const lines = [];
|
|
77
|
+
const visited = new Set();
|
|
78
|
+
// Find root nodes (nodes with no incoming edges)
|
|
79
|
+
const hasIncoming = new Set(this.graph.edges.map(e => e.to));
|
|
80
|
+
const roots = Array.from(this.graph.nodes.keys()).filter(id => !hasIncoming.has(id));
|
|
81
|
+
if (roots.length === 0 && this.graph.nodes.size > 0) {
|
|
82
|
+
const firstKey = this.graph.nodes.keys().next().value;
|
|
83
|
+
if (firstKey)
|
|
84
|
+
roots.push(firstKey);
|
|
85
|
+
}
|
|
86
|
+
for (const root of roots) {
|
|
87
|
+
this.renderNode(root, '', true, lines, visited);
|
|
88
|
+
}
|
|
89
|
+
return lines.join('\n');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Render a single node and its children
|
|
93
|
+
*/
|
|
94
|
+
renderNode(id, prefix, isLast, lines, visited) {
|
|
95
|
+
if (visited.has(id)) {
|
|
96
|
+
lines.push(`${prefix}${isLast ? '└── ' : '├── '}(cycle: ${id})`);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
visited.add(id);
|
|
100
|
+
const node = this.graph.nodes.get(id);
|
|
101
|
+
if (!node)
|
|
102
|
+
return;
|
|
103
|
+
const connector = isLast ? '└── ' : '├── ';
|
|
104
|
+
const nodeStr = this.formatNode(node);
|
|
105
|
+
lines.push(`${prefix}${connector}${nodeStr}`);
|
|
106
|
+
// Find children
|
|
107
|
+
const childEdges = this.graph.edges.filter(e => e.from === id);
|
|
108
|
+
const childPrefix = prefix + (isLast ? ' ' : '│ ');
|
|
109
|
+
for (let i = 0; i < childEdges.length; i++) {
|
|
110
|
+
const edge = childEdges[i];
|
|
111
|
+
const isLastChild = i === childEdges.length - 1;
|
|
112
|
+
if (edge.label) {
|
|
113
|
+
lines.push(`${childPrefix}${isLastChild ? '└' : '├'}─[${edge.label}]─┐`);
|
|
114
|
+
this.renderNode(edge.to, childPrefix + (isLastChild ? ' ' : '│ '), true, lines, visited);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.renderNode(edge.to, childPrefix, isLastChild, lines, visited);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Format a node for display
|
|
123
|
+
*/
|
|
124
|
+
formatNode(node) {
|
|
125
|
+
const parts = [];
|
|
126
|
+
// Status indicator
|
|
127
|
+
if (this.config.showStatus && node.status) {
|
|
128
|
+
const statusIcons = {
|
|
129
|
+
pending: '○',
|
|
130
|
+
running: '◐',
|
|
131
|
+
completed: '●',
|
|
132
|
+
failed: '✗',
|
|
133
|
+
skipped: '◌'
|
|
134
|
+
};
|
|
135
|
+
parts.push(statusIcons[node.status] || '?');
|
|
136
|
+
}
|
|
137
|
+
// Type indicator
|
|
138
|
+
const typeIcons = {
|
|
139
|
+
agent: '🤖',
|
|
140
|
+
tool: '🔧',
|
|
141
|
+
condition: '❓',
|
|
142
|
+
parallel: '⫘',
|
|
143
|
+
start: '▶',
|
|
144
|
+
end: '■'
|
|
145
|
+
};
|
|
146
|
+
if (!this.config.compact) {
|
|
147
|
+
parts.push(typeIcons[node.type] || '□');
|
|
148
|
+
}
|
|
149
|
+
// Name
|
|
150
|
+
parts.push(node.name);
|
|
151
|
+
// Metadata
|
|
152
|
+
if (this.config.showMetadata && node.metadata) {
|
|
153
|
+
const meta = Object.entries(node.metadata)
|
|
154
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
155
|
+
.join(', ');
|
|
156
|
+
if (meta) {
|
|
157
|
+
parts.push(`(${meta})`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return parts.join(' ');
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Render as simple ASCII box diagram
|
|
164
|
+
*/
|
|
165
|
+
renderBoxes() {
|
|
166
|
+
const lines = [];
|
|
167
|
+
const nodeList = Array.from(this.graph.nodes.values());
|
|
168
|
+
for (let i = 0; i < nodeList.length; i++) {
|
|
169
|
+
const node = nodeList[i];
|
|
170
|
+
const box = this.createBox(node);
|
|
171
|
+
lines.push(...box);
|
|
172
|
+
if (i < nodeList.length - 1) {
|
|
173
|
+
lines.push(' │');
|
|
174
|
+
lines.push(' ▼');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return lines.join('\n');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Create a box for a node
|
|
181
|
+
*/
|
|
182
|
+
createBox(node) {
|
|
183
|
+
const name = node.name;
|
|
184
|
+
const width = Math.max(name.length + 4, 20);
|
|
185
|
+
const padding = Math.floor((width - name.length - 2) / 2);
|
|
186
|
+
const statusChar = this.config.showStatus ? this.getStatusChar(node.status) : '';
|
|
187
|
+
const top = '┌' + '─'.repeat(width) + '┐';
|
|
188
|
+
const middle = '│' + ' '.repeat(padding) + statusChar + name + ' '.repeat(width - padding - name.length - statusChar.length) + '│';
|
|
189
|
+
const bottom = '└' + '─'.repeat(width) + '┘';
|
|
190
|
+
return [top, middle, bottom];
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get status character
|
|
194
|
+
*/
|
|
195
|
+
getStatusChar(status) {
|
|
196
|
+
const chars = {
|
|
197
|
+
pending: '○ ',
|
|
198
|
+
running: '◐ ',
|
|
199
|
+
completed: '● ',
|
|
200
|
+
failed: '✗ ',
|
|
201
|
+
skipped: '◌ '
|
|
202
|
+
};
|
|
203
|
+
return status ? (chars[status] || '') : '';
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clear the graph
|
|
207
|
+
*/
|
|
208
|
+
clear() {
|
|
209
|
+
this.graph.nodes.clear();
|
|
210
|
+
this.graph.edges = [];
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get graph data
|
|
214
|
+
*/
|
|
215
|
+
getGraph() {
|
|
216
|
+
return this.graph;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Export to DOT format (for Graphviz)
|
|
220
|
+
*/
|
|
221
|
+
toDot() {
|
|
222
|
+
const lines = ['digraph workflow {'];
|
|
223
|
+
lines.push(' rankdir=TB;');
|
|
224
|
+
lines.push(' node [shape=box];');
|
|
225
|
+
for (const [id, node] of this.graph.nodes) {
|
|
226
|
+
const label = node.name.replace(/"/g, '\\"');
|
|
227
|
+
const style = node.status === 'completed' ? 'filled' : '';
|
|
228
|
+
const fillcolor = node.status === 'completed' ? 'lightgreen' :
|
|
229
|
+
node.status === 'failed' ? 'lightcoral' : 'white';
|
|
230
|
+
lines.push(` "${id}" [label="${label}" style="${style}" fillcolor="${fillcolor}"];`);
|
|
231
|
+
}
|
|
232
|
+
for (const edge of this.graph.edges) {
|
|
233
|
+
const label = edge.label ? ` [label="${edge.label}"]` : '';
|
|
234
|
+
lines.push(` "${edge.from}" -> "${edge.to}"${label};`);
|
|
235
|
+
}
|
|
236
|
+
lines.push('}');
|
|
237
|
+
return lines.join('\n');
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.FlowDisplay = FlowDisplay;
|
|
241
|
+
/**
|
|
242
|
+
* Create a flow display instance
|
|
243
|
+
*/
|
|
244
|
+
function createFlowDisplay(config) {
|
|
245
|
+
return new FlowDisplay(config);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Quick render workflow steps
|
|
249
|
+
*/
|
|
250
|
+
function renderWorkflow(steps) {
|
|
251
|
+
const display = createFlowDisplay();
|
|
252
|
+
display.fromWorkflowSteps(steps);
|
|
253
|
+
return display.render();
|
|
254
|
+
}
|