@revealui/ai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/LICENSE.commercial +112 -0
- package/README.md +314 -0
- package/dist/a2a/card.d.ts +26 -0
- package/dist/a2a/card.d.ts.map +1 -0
- package/dist/a2a/card.js +173 -0
- package/dist/a2a/handler.d.ts +26 -0
- package/dist/a2a/handler.d.ts.map +1 -0
- package/dist/a2a/handler.js +170 -0
- package/dist/a2a/index.d.ts +10 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +9 -0
- package/dist/a2a/task-store.d.ts +42 -0
- package/dist/a2a/task-store.d.ts.map +1 -0
- package/dist/a2a/task-store.js +99 -0
- package/dist/audit/emitter.d.ts +34 -0
- package/dist/audit/emitter.d.ts.map +1 -0
- package/dist/audit/emitter.js +34 -0
- package/dist/audit/index.d.ts +44 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +48 -0
- package/dist/audit/observer.d.ts +108 -0
- package/dist/audit/observer.d.ts.map +1 -0
- package/dist/audit/observer.js +271 -0
- package/dist/audit/policy.d.ts +70 -0
- package/dist/audit/policy.d.ts.map +1 -0
- package/dist/audit/policy.js +209 -0
- package/dist/audit/store.d.ts +42 -0
- package/dist/audit/store.d.ts.map +1 -0
- package/dist/audit/store.js +80 -0
- package/dist/audit/types.d.ts +169 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +80 -0
- package/dist/client/hooks/index.d.ts +22 -0
- package/dist/client/hooks/index.d.ts.map +1 -0
- package/dist/client/hooks/index.js +21 -0
- package/dist/client/hooks/useAgentContext.d.ts +30 -0
- package/dist/client/hooks/useAgentContext.d.ts.map +1 -0
- package/dist/client/hooks/useAgentContext.js +161 -0
- package/dist/client/hooks/useAgentEvents.d.ts +126 -0
- package/dist/client/hooks/useAgentEvents.d.ts.map +1 -0
- package/dist/client/hooks/useAgentEvents.js +232 -0
- package/dist/client/hooks/useAgentStream.d.ts +44 -0
- package/dist/client/hooks/useAgentStream.d.ts.map +1 -0
- package/dist/client/hooks/useAgentStream.js +101 -0
- package/dist/client/hooks/useEpisodicMemory.d.ts +25 -0
- package/dist/client/hooks/useEpisodicMemory.d.ts.map +1 -0
- package/dist/client/hooks/useEpisodicMemory.js +174 -0
- package/dist/client/hooks/useWorkingMemory.d.ts +57 -0
- package/dist/client/hooks/useWorkingMemory.d.ts.map +1 -0
- package/dist/client/hooks/useWorkingMemory.js +276 -0
- package/dist/client/index.d.ts +14 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +13 -0
- package/dist/embeddings/index.d.ts +51 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +73 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/inference/context-assembly.d.ts +27 -0
- package/dist/inference/context-assembly.d.ts.map +1 -0
- package/dist/inference/context-assembly.js +81 -0
- package/dist/inference/overflow-compressor.d.ts +17 -0
- package/dist/inference/overflow-compressor.d.ts.map +1 -0
- package/dist/inference/overflow-compressor.js +40 -0
- package/dist/inference/runRag.d.ts +35 -0
- package/dist/inference/runRag.d.ts.map +1 -0
- package/dist/inference/runRag.js +53 -0
- package/dist/ingestion/bm25.d.ts +29 -0
- package/dist/ingestion/bm25.d.ts.map +1 -0
- package/dist/ingestion/bm25.js +161 -0
- package/dist/ingestion/cms-indexer.d.ts +39 -0
- package/dist/ingestion/cms-indexer.d.ts.map +1 -0
- package/dist/ingestion/cms-indexer.js +74 -0
- package/dist/ingestion/file-parsers.d.ts +51 -0
- package/dist/ingestion/file-parsers.d.ts.map +1 -0
- package/dist/ingestion/file-parsers.js +247 -0
- package/dist/ingestion/hybrid-search.d.ts +22 -0
- package/dist/ingestion/hybrid-search.d.ts.map +1 -0
- package/dist/ingestion/hybrid-search.js +63 -0
- package/dist/ingestion/index.d.ts +9 -0
- package/dist/ingestion/index.d.ts.map +1 -0
- package/dist/ingestion/index.js +8 -0
- package/dist/ingestion/pipeline.d.ts +35 -0
- package/dist/ingestion/pipeline.d.ts.map +1 -0
- package/dist/ingestion/pipeline.js +114 -0
- package/dist/ingestion/rag-vector-service.d.ts +34 -0
- package/dist/ingestion/rag-vector-service.d.ts.map +1 -0
- package/dist/ingestion/rag-vector-service.js +98 -0
- package/dist/ingestion/reranker.d.ts +10 -0
- package/dist/ingestion/reranker.d.ts.map +1 -0
- package/dist/ingestion/reranker.js +41 -0
- package/dist/ingestion/text-splitter.d.ts +25 -0
- package/dist/ingestion/text-splitter.d.ts.map +1 -0
- package/dist/ingestion/text-splitter.js +119 -0
- package/dist/llm/cache-utils.d.ts +146 -0
- package/dist/llm/cache-utils.d.ts.map +1 -0
- package/dist/llm/cache-utils.js +204 -0
- package/dist/llm/client.d.ts +134 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +497 -0
- package/dist/llm/key-validator.d.ts +25 -0
- package/dist/llm/key-validator.d.ts.map +1 -0
- package/dist/llm/key-validator.js +101 -0
- package/dist/llm/provider-health.d.ts +40 -0
- package/dist/llm/provider-health.d.ts.map +1 -0
- package/dist/llm/provider-health.js +97 -0
- package/dist/llm/providers/anthropic.d.ts +31 -0
- package/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.js +248 -0
- package/dist/llm/providers/base.d.ts +111 -0
- package/dist/llm/providers/base.d.ts.map +1 -0
- package/dist/llm/providers/base.js +6 -0
- package/dist/llm/providers/groq.d.ts +23 -0
- package/dist/llm/providers/groq.d.ts.map +1 -0
- package/dist/llm/providers/groq.js +27 -0
- package/dist/llm/providers/ollama.d.ts +27 -0
- package/dist/llm/providers/ollama.d.ts.map +1 -0
- package/dist/llm/providers/ollama.js +48 -0
- package/dist/llm/providers/openai.d.ts +19 -0
- package/dist/llm/providers/openai.d.ts.map +1 -0
- package/dist/llm/providers/openai.js +245 -0
- package/dist/llm/providers/vultr.d.ts +18 -0
- package/dist/llm/providers/vultr.d.ts.map +1 -0
- package/dist/llm/providers/vultr.js +168 -0
- package/dist/llm/response-cache.d.ts +166 -0
- package/dist/llm/response-cache.d.ts.map +1 -0
- package/dist/llm/response-cache.js +233 -0
- package/dist/llm/semantic-cache.d.ts +179 -0
- package/dist/llm/semantic-cache.d.ts.map +1 -0
- package/dist/llm/semantic-cache.js +306 -0
- package/dist/llm/server.d.ts +14 -0
- package/dist/llm/server.d.ts.map +1 -0
- package/dist/llm/server.js +15 -0
- package/dist/llm/token-counter.d.ts +48 -0
- package/dist/llm/token-counter.d.ts.map +1 -0
- package/dist/llm/token-counter.js +77 -0
- package/dist/llm/workspace-provider-config.d.ts +38 -0
- package/dist/llm/workspace-provider-config.d.ts.map +1 -0
- package/dist/llm/workspace-provider-config.js +47 -0
- package/dist/memory/agent/context-manager.d.ts +148 -0
- package/dist/memory/agent/context-manager.d.ts.map +1 -0
- package/dist/memory/agent/context-manager.js +284 -0
- package/dist/memory/agent/index.d.ts +7 -0
- package/dist/memory/agent/index.d.ts.map +1 -0
- package/dist/memory/agent/index.js +6 -0
- package/dist/memory/crdt/index.d.ts +13 -0
- package/dist/memory/crdt/index.d.ts.map +1 -0
- package/dist/memory/crdt/index.js +12 -0
- package/dist/memory/crdt/lww-register.d.ts +108 -0
- package/dist/memory/crdt/lww-register.d.ts.map +1 -0
- package/dist/memory/crdt/lww-register.js +169 -0
- package/dist/memory/crdt/or-set.d.ts +141 -0
- package/dist/memory/crdt/or-set.d.ts.map +1 -0
- package/dist/memory/crdt/or-set.js +291 -0
- package/dist/memory/crdt/pn-counter.d.ts +116 -0
- package/dist/memory/crdt/pn-counter.d.ts.map +1 -0
- package/dist/memory/crdt/pn-counter.js +174 -0
- package/dist/memory/crdt/vector-clock.d.ts +115 -0
- package/dist/memory/crdt/vector-clock.d.ts.map +1 -0
- package/dist/memory/crdt/vector-clock.js +179 -0
- package/dist/memory/errors/index.d.ts +56 -0
- package/dist/memory/errors/index.d.ts.map +1 -0
- package/dist/memory/errors/index.js +85 -0
- package/dist/memory/index.d.ts +21 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +20 -0
- package/dist/memory/persistence/crdt-persistence.d.ts +85 -0
- package/dist/memory/persistence/crdt-persistence.d.ts.map +1 -0
- package/dist/memory/persistence/crdt-persistence.js +204 -0
- package/dist/memory/persistence/index.d.ts +7 -0
- package/dist/memory/persistence/index.d.ts.map +1 -0
- package/dist/memory/persistence/index.js +6 -0
- package/dist/memory/preferences/index.d.ts +7 -0
- package/dist/memory/preferences/index.d.ts.map +1 -0
- package/dist/memory/preferences/index.js +6 -0
- package/dist/memory/preferences/user-preferences-manager.d.ts +133 -0
- package/dist/memory/preferences/user-preferences-manager.d.ts.map +1 -0
- package/dist/memory/preferences/user-preferences-manager.js +342 -0
- package/dist/memory/services/index.d.ts +8 -0
- package/dist/memory/services/index.d.ts.map +1 -0
- package/dist/memory/services/index.js +6 -0
- package/dist/memory/services/node-id-service.d.ts +75 -0
- package/dist/memory/services/node-id-service.d.ts.map +1 -0
- package/dist/memory/services/node-id-service.js +190 -0
- package/dist/memory/stores/episodic-memory.d.ts +182 -0
- package/dist/memory/stores/episodic-memory.d.ts.map +1 -0
- package/dist/memory/stores/episodic-memory.js +378 -0
- package/dist/memory/stores/index.d.ts +16 -0
- package/dist/memory/stores/index.d.ts.map +1 -0
- package/dist/memory/stores/index.js +15 -0
- package/dist/memory/stores/procedural-memory.d.ts +89 -0
- package/dist/memory/stores/procedural-memory.d.ts.map +1 -0
- package/dist/memory/stores/procedural-memory.js +152 -0
- package/dist/memory/stores/semantic-memory.d.ts +92 -0
- package/dist/memory/stores/semantic-memory.d.ts.map +1 -0
- package/dist/memory/stores/semantic-memory.js +155 -0
- package/dist/memory/stores/working-memory.d.ts +225 -0
- package/dist/memory/stores/working-memory.d.ts.map +1 -0
- package/dist/memory/stores/working-memory.js +336 -0
- package/dist/memory/utils/deep-clone.d.ts +10 -0
- package/dist/memory/utils/deep-clone.d.ts.map +1 -0
- package/dist/memory/utils/deep-clone.js +9 -0
- package/dist/memory/utils/index.d.ts +8 -0
- package/dist/memory/utils/index.d.ts.map +1 -0
- package/dist/memory/utils/index.js +7 -0
- package/dist/memory/utils/logger.d.ts +21 -0
- package/dist/memory/utils/logger.d.ts.map +1 -0
- package/dist/memory/utils/logger.js +62 -0
- package/dist/memory/utils/sql-helpers.d.ts +97 -0
- package/dist/memory/utils/sql-helpers.d.ts.map +1 -0
- package/dist/memory/utils/sql-helpers.js +214 -0
- package/dist/memory/utils/validation.d.ts +62 -0
- package/dist/memory/utils/validation.d.ts.map +1 -0
- package/dist/memory/utils/validation.js +244 -0
- package/dist/memory/vector/index.d.ts +12 -0
- package/dist/memory/vector/index.d.ts.map +1 -0
- package/dist/memory/vector/index.js +14 -0
- package/dist/memory/vector/vector-memory-service.d.ts +88 -0
- package/dist/memory/vector/vector-memory-service.d.ts.map +1 -0
- package/dist/memory/vector/vector-memory-service.js +335 -0
- package/dist/observability/logger.d.ts +79 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +165 -0
- package/dist/observability/metrics.d.ts +43 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +197 -0
- package/dist/observability/query.d.ts +150 -0
- package/dist/observability/query.d.ts.map +1 -0
- package/dist/observability/query.js +339 -0
- package/dist/observability/types.d.ts +140 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +6 -0
- package/dist/orchestration/agent.d.ts +98 -0
- package/dist/orchestration/agent.d.ts.map +1 -0
- package/dist/orchestration/agent.js +6 -0
- package/dist/orchestration/defaults.d.ts +21 -0
- package/dist/orchestration/defaults.d.ts.map +1 -0
- package/dist/orchestration/defaults.js +22 -0
- package/dist/orchestration/memory-integration.d.ts +58 -0
- package/dist/orchestration/memory-integration.d.ts.map +1 -0
- package/dist/orchestration/memory-integration.js +130 -0
- package/dist/orchestration/orchestrator.d.ts +67 -0
- package/dist/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/orchestration/orchestrator.js +174 -0
- package/dist/orchestration/runtime.d.ts +82 -0
- package/dist/orchestration/runtime.d.ts.map +1 -0
- package/dist/orchestration/runtime.js +251 -0
- package/dist/orchestration/streaming-runtime.d.ts +36 -0
- package/dist/orchestration/streaming-runtime.d.ts.map +1 -0
- package/dist/orchestration/streaming-runtime.js +175 -0
- package/dist/orchestration/ticket-agent.d.ts +70 -0
- package/dist/orchestration/ticket-agent.d.ts.map +1 -0
- package/dist/orchestration/ticket-agent.js +146 -0
- package/dist/skills/activation/index.d.ts +7 -0
- package/dist/skills/activation/index.d.ts.map +1 -0
- package/dist/skills/activation/index.js +6 -0
- package/dist/skills/activation/skill-activator.d.ts +68 -0
- package/dist/skills/activation/skill-activator.d.ts.map +1 -0
- package/dist/skills/activation/skill-activator.js +224 -0
- package/dist/skills/catalog/catalog-search.d.ts +55 -0
- package/dist/skills/catalog/catalog-search.d.ts.map +1 -0
- package/dist/skills/catalog/catalog-search.js +111 -0
- package/dist/skills/catalog/catalog-types.d.ts +81 -0
- package/dist/skills/catalog/catalog-types.d.ts.map +1 -0
- package/dist/skills/catalog/catalog-types.js +66 -0
- package/dist/skills/catalog/index.d.ts +9 -0
- package/dist/skills/catalog/index.d.ts.map +1 -0
- package/dist/skills/catalog/index.js +7 -0
- package/dist/skills/catalog/vercel-catalog.d.ts +42 -0
- package/dist/skills/catalog/vercel-catalog.d.ts.map +1 -0
- package/dist/skills/catalog/vercel-catalog.js +189 -0
- package/dist/skills/compat/index.d.ts +9 -0
- package/dist/skills/compat/index.d.ts.map +1 -0
- package/dist/skills/compat/index.js +8 -0
- package/dist/skills/compat/skill-enhancer.d.ts +37 -0
- package/dist/skills/compat/skill-enhancer.d.ts.map +1 -0
- package/dist/skills/compat/skill-enhancer.js +76 -0
- package/dist/skills/compat/tool-mapper.d.ts +61 -0
- package/dist/skills/compat/tool-mapper.d.ts.map +1 -0
- package/dist/skills/compat/tool-mapper.js +168 -0
- package/dist/skills/compat/vercel-compat.d.ts +33 -0
- package/dist/skills/compat/vercel-compat.d.ts.map +1 -0
- package/dist/skills/compat/vercel-compat.js +132 -0
- package/dist/skills/index.d.ts +40 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +47 -0
- package/dist/skills/integration/agent-skill-provider.d.ts +94 -0
- package/dist/skills/integration/agent-skill-provider.d.ts.map +1 -0
- package/dist/skills/integration/agent-skill-provider.js +161 -0
- package/dist/skills/integration/index.d.ts +7 -0
- package/dist/skills/integration/index.d.ts.map +1 -0
- package/dist/skills/integration/index.js +6 -0
- package/dist/skills/loader/github-loader.d.ts +61 -0
- package/dist/skills/loader/github-loader.d.ts.map +1 -0
- package/dist/skills/loader/github-loader.js +176 -0
- package/dist/skills/loader/index.d.ts +10 -0
- package/dist/skills/loader/index.d.ts.map +1 -0
- package/dist/skills/loader/index.js +9 -0
- package/dist/skills/loader/local-loader.d.ts +56 -0
- package/dist/skills/loader/local-loader.d.ts.map +1 -0
- package/dist/skills/loader/local-loader.js +186 -0
- package/dist/skills/loader/vercel-loader.d.ts +64 -0
- package/dist/skills/loader/vercel-loader.d.ts.map +1 -0
- package/dist/skills/loader/vercel-loader.js +313 -0
- package/dist/skills/loader/vercel-types.d.ts +64 -0
- package/dist/skills/loader/vercel-types.d.ts.map +1 -0
- package/dist/skills/loader/vercel-types.js +55 -0
- package/dist/skills/parser/index.d.ts +7 -0
- package/dist/skills/parser/index.d.ts.map +1 -0
- package/dist/skills/parser/index.js +6 -0
- package/dist/skills/parser/skill-md-parser.d.ts +64 -0
- package/dist/skills/parser/skill-md-parser.d.ts.map +1 -0
- package/dist/skills/parser/skill-md-parser.js +242 -0
- package/dist/skills/registry/index.d.ts +7 -0
- package/dist/skills/registry/index.d.ts.map +1 -0
- package/dist/skills/registry/index.js +6 -0
- package/dist/skills/registry/skill-registry.d.ts +133 -0
- package/dist/skills/registry/skill-registry.d.ts.map +1 -0
- package/dist/skills/registry/skill-registry.js +373 -0
- package/dist/skills/types.d.ts +216 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +176 -0
- package/dist/templates/agent-spec.d.ts +138 -0
- package/dist/templates/agent-spec.d.ts.map +1 -0
- package/dist/templates/agent-spec.js +138 -0
- package/dist/templates/index.d.ts +56 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +58 -0
- package/dist/templates/prompt-spec.d.ts +140 -0
- package/dist/templates/prompt-spec.d.ts.map +1 -0
- package/dist/templates/prompt-spec.js +210 -0
- package/dist/templates/skill-spec.d.ts +106 -0
- package/dist/templates/skill-spec.d.ts.map +1 -0
- package/dist/templates/skill-spec.js +119 -0
- package/dist/tools/base.d.ts +74 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +6 -0
- package/dist/tools/cms/collection-tools.d.ts +36 -0
- package/dist/tools/cms/collection-tools.d.ts.map +1 -0
- package/dist/tools/cms/collection-tools.js +178 -0
- package/dist/tools/cms/factory.d.ts +89 -0
- package/dist/tools/cms/factory.d.ts.map +1 -0
- package/dist/tools/cms/factory.js +462 -0
- package/dist/tools/cms/global-tools.d.ts +21 -0
- package/dist/tools/cms/global-tools.d.ts.map +1 -0
- package/dist/tools/cms/global-tools.js +92 -0
- package/dist/tools/cms/index.d.ts +11 -0
- package/dist/tools/cms/index.d.ts.map +1 -0
- package/dist/tools/cms/index.js +11 -0
- package/dist/tools/cms/media-tools.d.ts +31 -0
- package/dist/tools/cms/media-tools.d.ts.map +1 -0
- package/dist/tools/cms/media-tools.js +140 -0
- package/dist/tools/cms/user-tools.d.ts +31 -0
- package/dist/tools/cms/user-tools.d.ts.map +1 -0
- package/dist/tools/cms/user-tools.js +135 -0
- package/dist/tools/deduplicator.d.ts +19 -0
- package/dist/tools/deduplicator.d.ts.map +1 -0
- package/dist/tools/deduplicator.js +53 -0
- package/dist/tools/document-summarizer.d.ts +11 -0
- package/dist/tools/document-summarizer.d.ts.map +1 -0
- package/dist/tools/document-summarizer.js +82 -0
- package/dist/tools/mcp-adapter.d.ts +66 -0
- package/dist/tools/mcp-adapter.d.ts.map +1 -0
- package/dist/tools/mcp-adapter.js +152 -0
- package/dist/tools/memory/index.d.ts +3 -0
- package/dist/tools/memory/index.d.ts.map +1 -0
- package/dist/tools/memory/index.js +1 -0
- package/dist/tools/memory/store-memory.d.ts +39 -0
- package/dist/tools/memory/store-memory.d.ts.map +1 -0
- package/dist/tools/memory/store-memory.js +94 -0
- package/dist/tools/registry.d.ts +14 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +48 -0
- package/dist/tools/ticket-tools.d.ts +31 -0
- package/dist/tools/ticket-tools.d.ts.map +1 -0
- package/dist/tools/ticket-tools.js +74 -0
- package/dist/tools/web/duck-duck-go.d.ts +52 -0
- package/dist/tools/web/duck-duck-go.d.ts.map +1 -0
- package/dist/tools/web/duck-duck-go.js +202 -0
- package/dist/tools/web/exa.d.ts +34 -0
- package/dist/tools/web/exa.d.ts.map +1 -0
- package/dist/tools/web/exa.js +80 -0
- package/dist/tools/web/index.d.ts +6 -0
- package/dist/tools/web/index.d.ts.map +1 -0
- package/dist/tools/web/index.js +4 -0
- package/dist/tools/web/scraper.d.ts +9 -0
- package/dist/tools/web/scraper.d.ts.map +1 -0
- package/dist/tools/web/scraper.js +118 -0
- package/dist/tools/web/tavily.d.ts +32 -0
- package/dist/tools/web/tavily.d.ts.map +1 -0
- package/dist/tools/web/tavily.js +73 -0
- package/dist/tools/web/types.d.ts +31 -0
- package/dist/tools/web/types.d.ts.map +1 -0
- package/dist/tools/web/types.js +9 -0
- package/package.json +143 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/ai - Agent Metrics Collector
|
|
3
|
+
*
|
|
4
|
+
* Aggregates statistics from agent events for monitoring and analysis.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Agent metrics collector
|
|
8
|
+
*/
|
|
9
|
+
export class AgentMetricsCollector {
|
|
10
|
+
logger;
|
|
11
|
+
startTime;
|
|
12
|
+
constructor(logger) {
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
this.startTime = Date.now();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get metrics for a specific agent
|
|
18
|
+
*/
|
|
19
|
+
getMetrics(agentId) {
|
|
20
|
+
const filter = { agentId };
|
|
21
|
+
const events = this.logger.getEvents(filter);
|
|
22
|
+
const decisions = events.filter((e) => e.eventType === 'decision');
|
|
23
|
+
const toolCalls = events.filter((e) => e.eventType === 'tool_call');
|
|
24
|
+
const llmCalls = events.filter((e) => e.eventType === 'llm_call');
|
|
25
|
+
const errors = events.filter((e) => e.eventType === 'error');
|
|
26
|
+
const totalDecisions = decisions.length;
|
|
27
|
+
const totalToolCalls = toolCalls.length;
|
|
28
|
+
const totalLLMCalls = llmCalls.length;
|
|
29
|
+
const totalErrors = errors.length;
|
|
30
|
+
// Calculate average decision time (time between decisions)
|
|
31
|
+
let averageDecisionTime = 0;
|
|
32
|
+
if (decisions.length > 1) {
|
|
33
|
+
const times = decisions.map((d) => d.timestamp).sort((a, b) => a - b);
|
|
34
|
+
const intervals = [];
|
|
35
|
+
for (let i = 1; i < times.length; i++) {
|
|
36
|
+
const current = times[i];
|
|
37
|
+
const previous = times[i - 1];
|
|
38
|
+
if (current !== undefined && previous !== undefined) {
|
|
39
|
+
intervals.push(current - previous);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
averageDecisionTime = intervals.reduce((sum, val) => sum + val, 0) / intervals.length;
|
|
43
|
+
}
|
|
44
|
+
// Calculate success rate
|
|
45
|
+
const successfulCalls = toolCalls.filter((t) => t.eventType === 'tool_call' && t.success).length;
|
|
46
|
+
const successRate = totalToolCalls > 0 ? (successfulCalls / totalToolCalls) * 100 : 0;
|
|
47
|
+
// Calculate error rate
|
|
48
|
+
const totalOperations = totalDecisions + totalToolCalls + totalLLMCalls;
|
|
49
|
+
const errorRate = totalOperations > 0 ? (totalErrors / totalOperations) * 100 : 0;
|
|
50
|
+
// Build tool metrics
|
|
51
|
+
const toolMetrics = this.calculateToolMetrics(toolCalls);
|
|
52
|
+
// Build LLM metrics
|
|
53
|
+
const llmMetrics = this.calculateLLMMetrics(llmCalls);
|
|
54
|
+
// Calculate uptime and last activity
|
|
55
|
+
const uptime = Date.now() - this.startTime;
|
|
56
|
+
const lastActivity = events.length > 0 ? Math.max(...events.map((e) => e.timestamp)) : this.startTime;
|
|
57
|
+
return {
|
|
58
|
+
totalDecisions,
|
|
59
|
+
totalToolCalls,
|
|
60
|
+
totalLLMCalls,
|
|
61
|
+
totalErrors,
|
|
62
|
+
averageDecisionTime,
|
|
63
|
+
successRate,
|
|
64
|
+
errorRate,
|
|
65
|
+
toolMetrics,
|
|
66
|
+
llmMetrics,
|
|
67
|
+
uptime,
|
|
68
|
+
lastActivity,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Calculate tool-specific metrics
|
|
73
|
+
*/
|
|
74
|
+
calculateToolMetrics(toolCalls) {
|
|
75
|
+
const metrics = new Map();
|
|
76
|
+
for (const event of toolCalls) {
|
|
77
|
+
if (event.eventType !== 'tool_call')
|
|
78
|
+
continue;
|
|
79
|
+
const existing = metrics.get(event.toolName);
|
|
80
|
+
const success = event.success ? 1 : 0;
|
|
81
|
+
const failure = event.success ? 0 : 1;
|
|
82
|
+
if (existing) {
|
|
83
|
+
metrics.set(event.toolName, {
|
|
84
|
+
totalCalls: existing.totalCalls + 1,
|
|
85
|
+
successCount: existing.successCount + success,
|
|
86
|
+
failureCount: existing.failureCount + failure,
|
|
87
|
+
averageDurationMs: (existing.averageDurationMs * existing.totalCalls + event.durationMs) /
|
|
88
|
+
(existing.totalCalls + 1),
|
|
89
|
+
lastUsed: Math.max(existing.lastUsed, event.timestamp),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
metrics.set(event.toolName, {
|
|
94
|
+
totalCalls: 1,
|
|
95
|
+
successCount: success,
|
|
96
|
+
failureCount: failure,
|
|
97
|
+
averageDurationMs: event.durationMs,
|
|
98
|
+
lastUsed: event.timestamp,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return metrics;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Calculate LLM-specific metrics
|
|
106
|
+
*/
|
|
107
|
+
calculateLLMMetrics(llmCalls) {
|
|
108
|
+
let totalCalls = 0;
|
|
109
|
+
let totalPromptTokens = 0;
|
|
110
|
+
let totalCompletionTokens = 0;
|
|
111
|
+
let totalCost = 0;
|
|
112
|
+
let totalDuration = 0;
|
|
113
|
+
let cacheHits = 0;
|
|
114
|
+
const modelUsage = {};
|
|
115
|
+
for (const event of llmCalls) {
|
|
116
|
+
if (event.eventType !== 'llm_call')
|
|
117
|
+
continue;
|
|
118
|
+
totalCalls++;
|
|
119
|
+
totalPromptTokens += event.promptTokens;
|
|
120
|
+
totalCompletionTokens += event.completionTokens;
|
|
121
|
+
totalCost += event.cost ?? 0;
|
|
122
|
+
totalDuration += event.durationMs;
|
|
123
|
+
if (event.cacheHit) {
|
|
124
|
+
cacheHits++;
|
|
125
|
+
}
|
|
126
|
+
const modelKey = `${event.provider}/${event.model}`;
|
|
127
|
+
modelUsage[modelKey] = (modelUsage[modelKey] ?? 0) + 1;
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
totalCalls,
|
|
131
|
+
totalPromptTokens,
|
|
132
|
+
totalCompletionTokens,
|
|
133
|
+
totalCost,
|
|
134
|
+
averageDurationMs: totalCalls > 0 ? totalDuration / totalCalls : 0,
|
|
135
|
+
cacheHitRate: totalCalls > 0 ? (cacheHits / totalCalls) * 100 : 0,
|
|
136
|
+
modelUsage,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get summary metrics across all agents
|
|
141
|
+
*/
|
|
142
|
+
getMetricsSummary(filter) {
|
|
143
|
+
const events = this.logger.getEvents(filter);
|
|
144
|
+
const eventsByType = {};
|
|
145
|
+
const agentIds = new Set();
|
|
146
|
+
const sessionIds = new Set();
|
|
147
|
+
let totalTokensUsed = 0;
|
|
148
|
+
let totalCost = 0;
|
|
149
|
+
let successfulToolCalls = 0;
|
|
150
|
+
let totalToolCalls = 0;
|
|
151
|
+
for (const event of events) {
|
|
152
|
+
eventsByType[event.eventType] = (eventsByType[event.eventType] ?? 0) + 1;
|
|
153
|
+
agentIds.add(event.agentId);
|
|
154
|
+
sessionIds.add(event.sessionId);
|
|
155
|
+
if (event.eventType === 'llm_call') {
|
|
156
|
+
totalTokensUsed += event.promptTokens + event.completionTokens;
|
|
157
|
+
totalCost += event.cost ?? 0;
|
|
158
|
+
}
|
|
159
|
+
if (event.eventType === 'tool_call') {
|
|
160
|
+
totalToolCalls++;
|
|
161
|
+
if (event.success) {
|
|
162
|
+
successfulToolCalls++;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const timestamps = events.map((e) => e.timestamp);
|
|
167
|
+
const start = timestamps.length > 0 ? Math.min(...timestamps) : Date.now();
|
|
168
|
+
const end = timestamps.length > 0 ? Math.max(...timestamps) : Date.now();
|
|
169
|
+
return {
|
|
170
|
+
totalEvents: events.length,
|
|
171
|
+
eventsByType,
|
|
172
|
+
activeAgents: agentIds.size,
|
|
173
|
+
activeSessions: sessionIds.size,
|
|
174
|
+
totalTokensUsed,
|
|
175
|
+
totalCost,
|
|
176
|
+
averageSuccessRate: totalToolCalls > 0 ? (successfulToolCalls / totalToolCalls) * 100 : 0,
|
|
177
|
+
timeRange: { start, end },
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get tool usage statistics
|
|
182
|
+
*/
|
|
183
|
+
getToolUsageStats() {
|
|
184
|
+
const toolCalls = this.logger.getToolCalls();
|
|
185
|
+
const metrics = this.calculateToolMetrics(toolCalls);
|
|
186
|
+
return Array.from(metrics.entries())
|
|
187
|
+
.map(([toolName, metrics]) => ({ toolName, metrics }))
|
|
188
|
+
.sort((a, b) => b.metrics.totalCalls - a.metrics.totalCalls);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get LLM usage statistics
|
|
192
|
+
*/
|
|
193
|
+
getLLMUsageStats() {
|
|
194
|
+
const llmCalls = this.logger.getLLMCalls();
|
|
195
|
+
return this.calculateLLMMetrics(llmCalls);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/ai - Query Interface
|
|
3
|
+
*
|
|
4
|
+
* Advanced querying capabilities for agent events.
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentEventLogger } from './logger.js';
|
|
7
|
+
import type { AnyAgentEvent, DecisionEvent, ErrorEvent, EventFilter, LLMCallEvent, MetricsSummary, ToolCallEvent } from './types.js';
|
|
8
|
+
export declare class AgentEventQuery {
|
|
9
|
+
private logger;
|
|
10
|
+
constructor(logger: AgentEventLogger);
|
|
11
|
+
/**
|
|
12
|
+
* Get events in a specific time range
|
|
13
|
+
*/
|
|
14
|
+
getEventsInRange(start: Date, end: Date): AnyAgentEvent[];
|
|
15
|
+
/**
|
|
16
|
+
* Get events from the last N milliseconds
|
|
17
|
+
*/
|
|
18
|
+
getRecentEvents(milliseconds: number, count?: number): AnyAgentEvent[];
|
|
19
|
+
/**
|
|
20
|
+
* Get events from the last N minutes
|
|
21
|
+
*/
|
|
22
|
+
getEventsLastMinutes(minutes: number): AnyAgentEvent[];
|
|
23
|
+
/**
|
|
24
|
+
* Get events from the last N hours
|
|
25
|
+
*/
|
|
26
|
+
getEventsLastHours(hours: number): AnyAgentEvent[];
|
|
27
|
+
/**
|
|
28
|
+
* Get events from today
|
|
29
|
+
*/
|
|
30
|
+
getEventsToday(): AnyAgentEvent[];
|
|
31
|
+
/**
|
|
32
|
+
* Get all events for a specific agent
|
|
33
|
+
*/
|
|
34
|
+
getEventsForAgent(agentId: string): AnyAgentEvent[];
|
|
35
|
+
/**
|
|
36
|
+
* Get all events for a specific session
|
|
37
|
+
*/
|
|
38
|
+
getEventsForSession(sessionId: string): AnyAgentEvent[];
|
|
39
|
+
/**
|
|
40
|
+
* Get all events for a specific task
|
|
41
|
+
*/
|
|
42
|
+
getEventsForTask(taskId: string): AnyAgentEvent[];
|
|
43
|
+
/**
|
|
44
|
+
* Get all events for multiple agents
|
|
45
|
+
*/
|
|
46
|
+
getEventsForAgents(agentIds: string[]): AnyAgentEvent[];
|
|
47
|
+
/**
|
|
48
|
+
* Get all decision events
|
|
49
|
+
*/
|
|
50
|
+
getDecisions(filter?: Omit<EventFilter, 'eventType'>): DecisionEvent[];
|
|
51
|
+
/**
|
|
52
|
+
* Get all tool call events
|
|
53
|
+
*/
|
|
54
|
+
getToolCalls(filter?: Omit<EventFilter, 'eventType'>): ToolCallEvent[];
|
|
55
|
+
/**
|
|
56
|
+
* Get all LLM call events
|
|
57
|
+
*/
|
|
58
|
+
getLLMCalls(filter?: Omit<EventFilter, 'eventType'>): LLMCallEvent[];
|
|
59
|
+
/**
|
|
60
|
+
* Get all error events
|
|
61
|
+
*/
|
|
62
|
+
getErrors(filter?: Omit<EventFilter, 'eventType'>): ErrorEvent[];
|
|
63
|
+
/**
|
|
64
|
+
* Get successful tool calls
|
|
65
|
+
*/
|
|
66
|
+
getSuccessfulToolCalls(filter?: Omit<EventFilter, 'eventType'>): ToolCallEvent[];
|
|
67
|
+
/**
|
|
68
|
+
* Get failed tool calls
|
|
69
|
+
*/
|
|
70
|
+
getFailedToolCalls(filter?: Omit<EventFilter, 'eventType'>): ToolCallEvent[];
|
|
71
|
+
/**
|
|
72
|
+
* Get tool calls for a specific tool
|
|
73
|
+
*/
|
|
74
|
+
getToolCallsForTool(toolName: string, filter?: Omit<EventFilter, 'eventType'>): ToolCallEvent[];
|
|
75
|
+
/**
|
|
76
|
+
* Get LLM calls for a specific provider
|
|
77
|
+
*/
|
|
78
|
+
getLLMCallsForProvider(provider: string, filter?: Omit<EventFilter, 'eventType'>): LLMCallEvent[];
|
|
79
|
+
/**
|
|
80
|
+
* Get LLM calls for a specific model
|
|
81
|
+
*/
|
|
82
|
+
getLLMCallsForModel(model: string, filter?: Omit<EventFilter, 'eventType'>): LLMCallEvent[];
|
|
83
|
+
/**
|
|
84
|
+
* Get recoverable errors
|
|
85
|
+
*/
|
|
86
|
+
getRecoverableErrors(filter?: Omit<EventFilter, 'eventType'>): ErrorEvent[];
|
|
87
|
+
/**
|
|
88
|
+
* Get non-recoverable errors
|
|
89
|
+
*/
|
|
90
|
+
getNonRecoverableErrors(filter?: Omit<EventFilter, 'eventType'>): ErrorEvent[];
|
|
91
|
+
/**
|
|
92
|
+
* Get event count by type
|
|
93
|
+
*/
|
|
94
|
+
getEventCountByType(filter?: EventFilter): Record<string, number>;
|
|
95
|
+
/**
|
|
96
|
+
* Get unique agent IDs
|
|
97
|
+
*/
|
|
98
|
+
getUniqueAgentIds(filter?: EventFilter): string[];
|
|
99
|
+
/**
|
|
100
|
+
* Get unique session IDs
|
|
101
|
+
*/
|
|
102
|
+
getUniqueSessionIds(filter?: EventFilter): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Get total token usage
|
|
105
|
+
*/
|
|
106
|
+
getTotalTokenUsage(filter?: Omit<EventFilter, 'eventType'>): {
|
|
107
|
+
promptTokens: number;
|
|
108
|
+
completionTokens: number;
|
|
109
|
+
totalTokens: number;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Get total LLM cost
|
|
113
|
+
*/
|
|
114
|
+
getTotalLLMCost(filter?: Omit<EventFilter, 'eventType'>): number;
|
|
115
|
+
/**
|
|
116
|
+
* Get average tool call duration
|
|
117
|
+
*/
|
|
118
|
+
getAverageToolCallDuration(filter?: Omit<EventFilter, 'eventType'>): number;
|
|
119
|
+
/**
|
|
120
|
+
* Get average LLM call duration
|
|
121
|
+
*/
|
|
122
|
+
getAverageLLMCallDuration(filter?: Omit<EventFilter, 'eventType'>): number;
|
|
123
|
+
/**
|
|
124
|
+
* Get success rate
|
|
125
|
+
*/
|
|
126
|
+
getSuccessRate(filter?: Omit<EventFilter, 'eventType'>): number;
|
|
127
|
+
/**
|
|
128
|
+
* Get metrics summary
|
|
129
|
+
*/
|
|
130
|
+
getMetricsSummary(filter?: EventFilter): MetricsSummary;
|
|
131
|
+
/**
|
|
132
|
+
* Search events by text in reasoning or error messages
|
|
133
|
+
*/
|
|
134
|
+
searchEvents(searchText: string, filter?: EventFilter): AnyAgentEvent[];
|
|
135
|
+
/**
|
|
136
|
+
* Get events sorted by timestamp (ascending or descending)
|
|
137
|
+
*/
|
|
138
|
+
getSortedEvents(filter?: EventFilter, order?: 'asc' | 'desc'): AnyAgentEvent[];
|
|
139
|
+
/**
|
|
140
|
+
* Paginate events
|
|
141
|
+
*/
|
|
142
|
+
paginateEvents(page: number, pageSize: number, filter?: EventFilter): {
|
|
143
|
+
events: AnyAgentEvent[];
|
|
144
|
+
page: number;
|
|
145
|
+
pageSize: number;
|
|
146
|
+
totalPages: number;
|
|
147
|
+
totalEvents: number;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/observability/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/ai - Query Interface
|
|
3
|
+
*
|
|
4
|
+
* Advanced querying capabilities for agent events.
|
|
5
|
+
*/
|
|
6
|
+
export class AgentEventQuery {
|
|
7
|
+
logger;
|
|
8
|
+
constructor(logger) {
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
}
|
|
11
|
+
// =========================================================================
|
|
12
|
+
// Time-based queries
|
|
13
|
+
// =========================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Get events in a specific time range
|
|
16
|
+
*/
|
|
17
|
+
getEventsInRange(start, end) {
|
|
18
|
+
return this.logger.getEvents({
|
|
19
|
+
startTime: start.getTime(),
|
|
20
|
+
endTime: end.getTime(),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get events from the last N milliseconds
|
|
25
|
+
*/
|
|
26
|
+
getRecentEvents(milliseconds, count) {
|
|
27
|
+
const events = this.logger.getEvents({
|
|
28
|
+
startTime: Date.now() - milliseconds,
|
|
29
|
+
});
|
|
30
|
+
return count ? events.slice(-count) : events;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get events from the last N minutes
|
|
34
|
+
*/
|
|
35
|
+
getEventsLastMinutes(minutes) {
|
|
36
|
+
return this.getRecentEvents(minutes * 60 * 1000);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get events from the last N hours
|
|
40
|
+
*/
|
|
41
|
+
getEventsLastHours(hours) {
|
|
42
|
+
return this.getRecentEvents(hours * 60 * 60 * 1000);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get events from today
|
|
46
|
+
*/
|
|
47
|
+
getEventsToday() {
|
|
48
|
+
const now = new Date();
|
|
49
|
+
const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
50
|
+
return this.getEventsInRange(startOfDay, now);
|
|
51
|
+
}
|
|
52
|
+
// =========================================================================
|
|
53
|
+
// Entity-based queries
|
|
54
|
+
// =========================================================================
|
|
55
|
+
/**
|
|
56
|
+
* Get all events for a specific agent
|
|
57
|
+
*/
|
|
58
|
+
getEventsForAgent(agentId) {
|
|
59
|
+
return this.logger.getEvents({ agentId });
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get all events for a specific session
|
|
63
|
+
*/
|
|
64
|
+
getEventsForSession(sessionId) {
|
|
65
|
+
return this.logger.getEvents({ sessionId });
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get all events for a specific task
|
|
69
|
+
*/
|
|
70
|
+
getEventsForTask(taskId) {
|
|
71
|
+
return this.logger.getEvents({ taskId });
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get all events for multiple agents
|
|
75
|
+
*/
|
|
76
|
+
getEventsForAgents(agentIds) {
|
|
77
|
+
const events = [];
|
|
78
|
+
for (const agentId of agentIds) {
|
|
79
|
+
events.push(...this.getEventsForAgent(agentId));
|
|
80
|
+
}
|
|
81
|
+
return events.sort((a, b) => a.timestamp - b.timestamp);
|
|
82
|
+
}
|
|
83
|
+
// =========================================================================
|
|
84
|
+
// Type-based queries
|
|
85
|
+
// =========================================================================
|
|
86
|
+
/**
|
|
87
|
+
* Get all decision events
|
|
88
|
+
*/
|
|
89
|
+
getDecisions(filter) {
|
|
90
|
+
return this.logger.getEvents({
|
|
91
|
+
...filter,
|
|
92
|
+
eventType: 'decision',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get all tool call events
|
|
97
|
+
*/
|
|
98
|
+
getToolCalls(filter) {
|
|
99
|
+
return this.logger.getEvents({
|
|
100
|
+
...filter,
|
|
101
|
+
eventType: 'tool_call',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get all LLM call events
|
|
106
|
+
*/
|
|
107
|
+
getLLMCalls(filter) {
|
|
108
|
+
return this.logger.getEvents({
|
|
109
|
+
...filter,
|
|
110
|
+
eventType: 'llm_call',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get all error events
|
|
115
|
+
*/
|
|
116
|
+
getErrors(filter) {
|
|
117
|
+
return this.logger.getEvents({
|
|
118
|
+
...filter,
|
|
119
|
+
eventType: 'error',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// =========================================================================
|
|
123
|
+
// Advanced queries
|
|
124
|
+
// =========================================================================
|
|
125
|
+
/**
|
|
126
|
+
* Get successful tool calls
|
|
127
|
+
*/
|
|
128
|
+
getSuccessfulToolCalls(filter) {
|
|
129
|
+
const toolCalls = this.getToolCalls(filter);
|
|
130
|
+
return toolCalls.filter((call) => call.success);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get failed tool calls
|
|
134
|
+
*/
|
|
135
|
+
getFailedToolCalls(filter) {
|
|
136
|
+
const toolCalls = this.getToolCalls(filter);
|
|
137
|
+
return toolCalls.filter((call) => !call.success);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get tool calls for a specific tool
|
|
141
|
+
*/
|
|
142
|
+
getToolCallsForTool(toolName, filter) {
|
|
143
|
+
const toolCalls = this.getToolCalls(filter);
|
|
144
|
+
return toolCalls.filter((call) => call.toolName === toolName);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get LLM calls for a specific provider
|
|
148
|
+
*/
|
|
149
|
+
getLLMCallsForProvider(provider, filter) {
|
|
150
|
+
const llmCalls = this.getLLMCalls(filter);
|
|
151
|
+
return llmCalls.filter((call) => call.provider === provider);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get LLM calls for a specific model
|
|
155
|
+
*/
|
|
156
|
+
getLLMCallsForModel(model, filter) {
|
|
157
|
+
const llmCalls = this.getLLMCalls(filter);
|
|
158
|
+
return llmCalls.filter((call) => call.model === model);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get recoverable errors
|
|
162
|
+
*/
|
|
163
|
+
getRecoverableErrors(filter) {
|
|
164
|
+
const errors = this.getErrors(filter);
|
|
165
|
+
return errors.filter((error) => error.recoverable);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get non-recoverable errors
|
|
169
|
+
*/
|
|
170
|
+
getNonRecoverableErrors(filter) {
|
|
171
|
+
const errors = this.getErrors(filter);
|
|
172
|
+
return errors.filter((error) => !error.recoverable);
|
|
173
|
+
}
|
|
174
|
+
// =========================================================================
|
|
175
|
+
// Aggregations
|
|
176
|
+
// =========================================================================
|
|
177
|
+
/**
|
|
178
|
+
* Get event count by type
|
|
179
|
+
*/
|
|
180
|
+
getEventCountByType(filter) {
|
|
181
|
+
const events = this.logger.getEvents(filter);
|
|
182
|
+
const counts = {};
|
|
183
|
+
for (const event of events) {
|
|
184
|
+
counts[event.eventType] = (counts[event.eventType] || 0) + 1;
|
|
185
|
+
}
|
|
186
|
+
return counts;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get unique agent IDs
|
|
190
|
+
*/
|
|
191
|
+
getUniqueAgentIds(filter) {
|
|
192
|
+
const events = this.logger.getEvents(filter);
|
|
193
|
+
const agentIds = new Set();
|
|
194
|
+
for (const event of events) {
|
|
195
|
+
agentIds.add(event.agentId);
|
|
196
|
+
}
|
|
197
|
+
return Array.from(agentIds);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get unique session IDs
|
|
201
|
+
*/
|
|
202
|
+
getUniqueSessionIds(filter) {
|
|
203
|
+
const events = this.logger.getEvents(filter);
|
|
204
|
+
const sessionIds = new Set();
|
|
205
|
+
for (const event of events) {
|
|
206
|
+
sessionIds.add(event.sessionId);
|
|
207
|
+
}
|
|
208
|
+
return Array.from(sessionIds);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get total token usage
|
|
212
|
+
*/
|
|
213
|
+
getTotalTokenUsage(filter) {
|
|
214
|
+
const llmCalls = this.getLLMCalls(filter);
|
|
215
|
+
let promptTokens = 0;
|
|
216
|
+
let completionTokens = 0;
|
|
217
|
+
for (const call of llmCalls) {
|
|
218
|
+
promptTokens += call.promptTokens;
|
|
219
|
+
completionTokens += call.completionTokens;
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
promptTokens,
|
|
223
|
+
completionTokens,
|
|
224
|
+
totalTokens: promptTokens + completionTokens,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get total LLM cost
|
|
229
|
+
*/
|
|
230
|
+
getTotalLLMCost(filter) {
|
|
231
|
+
const llmCalls = this.getLLMCalls(filter);
|
|
232
|
+
return llmCalls.reduce((total, call) => total + (call.cost || 0), 0);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get average tool call duration
|
|
236
|
+
*/
|
|
237
|
+
getAverageToolCallDuration(filter) {
|
|
238
|
+
const toolCalls = this.getToolCalls(filter);
|
|
239
|
+
if (toolCalls.length === 0) {
|
|
240
|
+
return 0;
|
|
241
|
+
}
|
|
242
|
+
const totalDuration = toolCalls.reduce((sum, call) => sum + call.durationMs, 0);
|
|
243
|
+
return totalDuration / toolCalls.length;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get average LLM call duration
|
|
247
|
+
*/
|
|
248
|
+
getAverageLLMCallDuration(filter) {
|
|
249
|
+
const llmCalls = this.getLLMCalls(filter);
|
|
250
|
+
if (llmCalls.length === 0) {
|
|
251
|
+
return 0;
|
|
252
|
+
}
|
|
253
|
+
const totalDuration = llmCalls.reduce((sum, call) => sum + call.durationMs, 0);
|
|
254
|
+
return totalDuration / llmCalls.length;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get success rate
|
|
258
|
+
*/
|
|
259
|
+
getSuccessRate(filter) {
|
|
260
|
+
const toolCalls = this.getToolCalls(filter);
|
|
261
|
+
if (toolCalls.length === 0) {
|
|
262
|
+
return 0;
|
|
263
|
+
}
|
|
264
|
+
const successful = toolCalls.filter((call) => call.success).length;
|
|
265
|
+
return (successful / toolCalls.length) * 100;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get metrics summary
|
|
269
|
+
*/
|
|
270
|
+
getMetricsSummary(filter) {
|
|
271
|
+
const events = this.logger.getEvents(filter);
|
|
272
|
+
const eventsByType = this.getEventCountByType(filter);
|
|
273
|
+
const agentIds = this.getUniqueAgentIds(filter);
|
|
274
|
+
const sessionIds = this.getUniqueSessionIds(filter);
|
|
275
|
+
const tokenUsage = this.getTotalTokenUsage(filter);
|
|
276
|
+
const totalCost = this.getTotalLLMCost(filter);
|
|
277
|
+
const successRate = this.getSuccessRate(filter);
|
|
278
|
+
const timestamps = events.map((e) => e.timestamp);
|
|
279
|
+
const start = timestamps.length > 0 ? Math.min(...timestamps) : Date.now();
|
|
280
|
+
const end = timestamps.length > 0 ? Math.max(...timestamps) : Date.now();
|
|
281
|
+
return {
|
|
282
|
+
totalEvents: events.length,
|
|
283
|
+
eventsByType,
|
|
284
|
+
activeAgents: agentIds.length,
|
|
285
|
+
activeSessions: sessionIds.length,
|
|
286
|
+
totalTokensUsed: tokenUsage.totalTokens,
|
|
287
|
+
totalCost,
|
|
288
|
+
averageSuccessRate: successRate,
|
|
289
|
+
timeRange: { start, end },
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
// =========================================================================
|
|
293
|
+
// Search and filter
|
|
294
|
+
// =========================================================================
|
|
295
|
+
/**
|
|
296
|
+
* Search events by text in reasoning or error messages
|
|
297
|
+
*/
|
|
298
|
+
searchEvents(searchText, filter) {
|
|
299
|
+
const events = this.logger.getEvents(filter);
|
|
300
|
+
const lowerSearch = searchText.toLowerCase();
|
|
301
|
+
return events.filter((event) => {
|
|
302
|
+
if (event.eventType === 'decision') {
|
|
303
|
+
return event.reasoning.toLowerCase().includes(lowerSearch);
|
|
304
|
+
}
|
|
305
|
+
if (event.eventType === 'error') {
|
|
306
|
+
return event.message.toLowerCase().includes(lowerSearch);
|
|
307
|
+
}
|
|
308
|
+
if (event.eventType === 'tool_call') {
|
|
309
|
+
return event.toolName.toLowerCase().includes(lowerSearch);
|
|
310
|
+
}
|
|
311
|
+
return false;
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get events sorted by timestamp (ascending or descending)
|
|
316
|
+
*/
|
|
317
|
+
getSortedEvents(filter, order = 'asc') {
|
|
318
|
+
const events = this.logger.getEvents(filter);
|
|
319
|
+
return events.sort((a, b) => order === 'asc' ? a.timestamp - b.timestamp : b.timestamp - a.timestamp);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Paginate events
|
|
323
|
+
*/
|
|
324
|
+
paginateEvents(page, pageSize, filter) {
|
|
325
|
+
const allEvents = this.getSortedEvents(filter, 'desc');
|
|
326
|
+
const totalEvents = allEvents.length;
|
|
327
|
+
const totalPages = Math.ceil(totalEvents / pageSize);
|
|
328
|
+
const start = (page - 1) * pageSize;
|
|
329
|
+
const end = start + pageSize;
|
|
330
|
+
const events = allEvents.slice(start, end);
|
|
331
|
+
return {
|
|
332
|
+
events,
|
|
333
|
+
page,
|
|
334
|
+
pageSize,
|
|
335
|
+
totalPages,
|
|
336
|
+
totalEvents,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
}
|