@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,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector Memory Service
|
|
3
|
+
*
|
|
4
|
+
* Service for managing agent memories in Supabase with vector search capabilities.
|
|
5
|
+
* Uses pgvector for semantic similarity search.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { VectorMemoryService } from '@revealui/ai/memory/vector/vector-memory-service'
|
|
10
|
+
*
|
|
11
|
+
* const service = new VectorMemoryService()
|
|
12
|
+
* const memories = await service.searchSimilar(embedding, { siteId: 'site-123', limit: 10 })
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { getVectorClient } from '@revealui/db/client';
|
|
16
|
+
import { agentMemories } from '@revealui/db/schema/vector';
|
|
17
|
+
import { and, eq, sql } from 'drizzle-orm';
|
|
18
|
+
/**
|
|
19
|
+
* Vector Memory Service for semantic search operations.
|
|
20
|
+
*/
|
|
21
|
+
export class VectorMemoryService {
|
|
22
|
+
_db = null;
|
|
23
|
+
/**
|
|
24
|
+
* Lazy-load database client to avoid connection initialization at module import time.
|
|
25
|
+
* This allows the module to be imported in test environments without triggering database connections.
|
|
26
|
+
*/
|
|
27
|
+
get db() {
|
|
28
|
+
if (!this._db) {
|
|
29
|
+
this._db = getVectorClient();
|
|
30
|
+
}
|
|
31
|
+
return this._db;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Search for similar memories using vector similarity.
|
|
35
|
+
*
|
|
36
|
+
* @param queryEmbedding - Query embedding vector (768 dimensions — Ollama nomic-embed-text)
|
|
37
|
+
* @param options - Search options (filtering, limits, etc.)
|
|
38
|
+
* @returns Array of memories with similarity scores, sorted by similarity (highest first)
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const embedding = await generateEmbedding('user prefers dark theme')
|
|
43
|
+
* const results = await service.searchSimilar(embedding, {
|
|
44
|
+
* siteId: 'site-123',
|
|
45
|
+
* limit: 10,
|
|
46
|
+
* threshold: 0.7
|
|
47
|
+
* })
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
async searchSimilar(queryEmbedding, options = {}) {
|
|
51
|
+
// Validate embedding dimensions
|
|
52
|
+
if (queryEmbedding.length !== 768) {
|
|
53
|
+
throw new Error(`Invalid embedding dimension: expected 768, got ${queryEmbedding.length}`);
|
|
54
|
+
}
|
|
55
|
+
// Build where conditions
|
|
56
|
+
const conditions = [];
|
|
57
|
+
if (options.siteId) {
|
|
58
|
+
conditions.push(eq(agentMemories.siteId, options.siteId));
|
|
59
|
+
}
|
|
60
|
+
if (options.agentId) {
|
|
61
|
+
conditions.push(eq(agentMemories.agentId, options.agentId));
|
|
62
|
+
}
|
|
63
|
+
if (options.type) {
|
|
64
|
+
conditions.push(eq(agentMemories.type, options.type));
|
|
65
|
+
}
|
|
66
|
+
// Build query with vector similarity
|
|
67
|
+
// Using cosine distance (<->) operator from pgvector
|
|
68
|
+
// 1 - distance = similarity (higher is better)
|
|
69
|
+
const query = this.db
|
|
70
|
+
.select({
|
|
71
|
+
id: agentMemories.id,
|
|
72
|
+
version: agentMemories.version,
|
|
73
|
+
content: agentMemories.content,
|
|
74
|
+
type: agentMemories.type,
|
|
75
|
+
source: agentMemories.source,
|
|
76
|
+
embedding: agentMemories.embedding,
|
|
77
|
+
embeddingMetadata: agentMemories.embeddingMetadata,
|
|
78
|
+
metadata: agentMemories.metadata,
|
|
79
|
+
accessCount: agentMemories.accessCount,
|
|
80
|
+
accessedAt: agentMemories.accessedAt,
|
|
81
|
+
verified: agentMemories.verified,
|
|
82
|
+
verifiedBy: agentMemories.verifiedBy,
|
|
83
|
+
verifiedAt: agentMemories.verifiedAt,
|
|
84
|
+
siteId: agentMemories.siteId,
|
|
85
|
+
agentId: agentMemories.agentId,
|
|
86
|
+
createdAt: agentMemories.createdAt,
|
|
87
|
+
expiresAt: agentMemories.expiresAt,
|
|
88
|
+
// Calculate similarity: 1 - cosine_distance
|
|
89
|
+
// Cosine distance returns 0-2, where 0 is identical
|
|
90
|
+
// We convert to similarity: 1 - (distance / 2) gives us 0-1 range
|
|
91
|
+
similarity: sql `1 - (embedding <-> ${JSON.stringify(queryEmbedding)}::vector) / 2`,
|
|
92
|
+
})
|
|
93
|
+
.from(agentMemories)
|
|
94
|
+
.where(and(
|
|
95
|
+
// Only search memories with embeddings
|
|
96
|
+
sql `embedding IS NOT NULL`,
|
|
97
|
+
// Apply filters
|
|
98
|
+
...conditions,
|
|
99
|
+
// Apply similarity threshold if provided
|
|
100
|
+
options.threshold !== undefined
|
|
101
|
+
? sql `1 - (embedding <-> ${JSON.stringify(queryEmbedding)}::vector) / 2 >= ${options.threshold}`
|
|
102
|
+
: undefined))
|
|
103
|
+
.orderBy(sql `embedding <-> ${JSON.stringify(queryEmbedding)}::vector`)
|
|
104
|
+
.limit(options.limit ?? 10);
|
|
105
|
+
const results = await query;
|
|
106
|
+
// Transform results to match AgentMemory schema
|
|
107
|
+
return results.map((row) => {
|
|
108
|
+
// Convert embedding from string format to number array if needed
|
|
109
|
+
let embedding;
|
|
110
|
+
if (row.embedding) {
|
|
111
|
+
// Embedding is stored as vector type, Drizzle should handle conversion
|
|
112
|
+
// But we need to construct the Embedding object
|
|
113
|
+
const embeddingMetadata = row.embeddingMetadata;
|
|
114
|
+
if (embeddingMetadata) {
|
|
115
|
+
embedding = {
|
|
116
|
+
vector: Array.isArray(row.embedding) ? row.embedding : [],
|
|
117
|
+
model: embeddingMetadata.model,
|
|
118
|
+
dimension: embeddingMetadata.dimension,
|
|
119
|
+
generatedAt: embeddingMetadata.generatedAt,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const memory = {
|
|
124
|
+
id: row.id,
|
|
125
|
+
version: row.version,
|
|
126
|
+
content: row.content,
|
|
127
|
+
type: row.type,
|
|
128
|
+
source: row.source,
|
|
129
|
+
embedding,
|
|
130
|
+
metadata: row.metadata || {},
|
|
131
|
+
accessCount: row.accessCount || 0,
|
|
132
|
+
accessedAt: row.accessedAt?.toISOString() || new Date().toISOString(),
|
|
133
|
+
verified: row.verified ?? false,
|
|
134
|
+
createdAt: row.createdAt.toISOString(),
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
memory,
|
|
138
|
+
similarity: row.similarity || 0,
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create a new memory in the vector database.
|
|
144
|
+
*
|
|
145
|
+
* @param memory - Memory to create (without id, createdAt, accessedAt)
|
|
146
|
+
* @returns Created memory with generated id and timestamps
|
|
147
|
+
*/
|
|
148
|
+
async create(memory) {
|
|
149
|
+
const id = memory.id || `mem-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
150
|
+
const now = new Date();
|
|
151
|
+
// Pass embedding vector directly - Drizzle's vector type will handle conversion
|
|
152
|
+
// The vector custom type has toDriver() that converts number[] to string format
|
|
153
|
+
const embeddingVector = memory.embedding?.vector || null;
|
|
154
|
+
const result = await this.db
|
|
155
|
+
.insert(agentMemories)
|
|
156
|
+
.values({
|
|
157
|
+
id,
|
|
158
|
+
version: memory.version || 1,
|
|
159
|
+
content: memory.content,
|
|
160
|
+
type: memory.type,
|
|
161
|
+
source: memory.source,
|
|
162
|
+
embedding: embeddingVector,
|
|
163
|
+
embeddingMetadata: memory.embedding || null,
|
|
164
|
+
metadata: memory.metadata || {},
|
|
165
|
+
accessCount: 0,
|
|
166
|
+
accessedAt: now,
|
|
167
|
+
verified: memory.verified,
|
|
168
|
+
verifiedBy: null, // Can be set via update
|
|
169
|
+
verifiedAt: null,
|
|
170
|
+
siteId: memory.metadata?.siteId || null,
|
|
171
|
+
agentId: memory.metadata?.custom?.agentId || null,
|
|
172
|
+
createdAt: now,
|
|
173
|
+
expiresAt: memory.metadata?.expiresAt ? new Date(memory.metadata.expiresAt) : null,
|
|
174
|
+
})
|
|
175
|
+
.returning();
|
|
176
|
+
const row = result[0];
|
|
177
|
+
if (!row) {
|
|
178
|
+
throw new Error('Failed to create memory');
|
|
179
|
+
}
|
|
180
|
+
// Convert back to AgentMemory format
|
|
181
|
+
let embedding;
|
|
182
|
+
if (row.embeddingMetadata) {
|
|
183
|
+
const metadata = row.embeddingMetadata;
|
|
184
|
+
embedding = {
|
|
185
|
+
vector: Array.isArray(row.embedding) ? row.embedding : [],
|
|
186
|
+
model: metadata.model,
|
|
187
|
+
dimension: metadata.dimension,
|
|
188
|
+
generatedAt: metadata.generatedAt,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
id: row.id,
|
|
193
|
+
version: row.version,
|
|
194
|
+
content: row.content,
|
|
195
|
+
type: row.type,
|
|
196
|
+
source: row.source,
|
|
197
|
+
embedding,
|
|
198
|
+
metadata: row.metadata || {},
|
|
199
|
+
accessCount: row.accessCount || 0,
|
|
200
|
+
accessedAt: row.accessedAt?.toISOString() || now.toISOString(),
|
|
201
|
+
verified: row.verified ?? false,
|
|
202
|
+
createdAt: row.createdAt.toISOString(),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Update an existing memory.
|
|
207
|
+
*
|
|
208
|
+
* @param id - Memory ID
|
|
209
|
+
* @param updates - Partial memory updates
|
|
210
|
+
* @returns Updated memory
|
|
211
|
+
*/
|
|
212
|
+
async update(id, updates) {
|
|
213
|
+
const updateData = {};
|
|
214
|
+
if (updates.content !== undefined)
|
|
215
|
+
updateData.content = updates.content;
|
|
216
|
+
if (updates.type !== undefined)
|
|
217
|
+
updateData.type = updates.type;
|
|
218
|
+
if (updates.source !== undefined)
|
|
219
|
+
updateData.source = updates.source;
|
|
220
|
+
if (updates.metadata !== undefined)
|
|
221
|
+
updateData.metadata = updates.metadata;
|
|
222
|
+
if (updates.verified !== undefined)
|
|
223
|
+
updateData.verified = updates.verified;
|
|
224
|
+
if (updates.accessCount !== undefined)
|
|
225
|
+
updateData.accessCount = updates.accessCount;
|
|
226
|
+
if (updates.accessedAt !== undefined)
|
|
227
|
+
updateData.accessedAt = new Date(updates.accessedAt);
|
|
228
|
+
// Handle embedding update
|
|
229
|
+
// Pass vector directly - Drizzle's vector type will handle conversion
|
|
230
|
+
if (updates.embedding !== undefined) {
|
|
231
|
+
if (updates.embedding) {
|
|
232
|
+
updateData.embedding = updates.embedding.vector; // number[] - Drizzle converts to string
|
|
233
|
+
updateData.embeddingMetadata = updates.embedding;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
updateData.embedding = null;
|
|
237
|
+
updateData.embeddingMetadata = null;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Update siteId and agentId from metadata if provided
|
|
241
|
+
if (updates.metadata?.siteId !== undefined) {
|
|
242
|
+
updateData.siteId = updates.metadata.siteId || null;
|
|
243
|
+
}
|
|
244
|
+
if (updates.metadata?.custom?.agentId !== undefined) {
|
|
245
|
+
updateData.agentId = updates.metadata.custom.agentId || null;
|
|
246
|
+
}
|
|
247
|
+
const result = await this.db
|
|
248
|
+
.update(agentMemories)
|
|
249
|
+
.set(updateData)
|
|
250
|
+
.where(eq(agentMemories.id, id))
|
|
251
|
+
.returning();
|
|
252
|
+
const row = result[0];
|
|
253
|
+
if (!row) {
|
|
254
|
+
throw new Error(`Memory not found: ${id}`);
|
|
255
|
+
}
|
|
256
|
+
// Convert back to AgentMemory format
|
|
257
|
+
let embedding;
|
|
258
|
+
if (row.embeddingMetadata) {
|
|
259
|
+
const metadata = row.embeddingMetadata;
|
|
260
|
+
embedding = {
|
|
261
|
+
vector: Array.isArray(row.embedding) ? row.embedding : [],
|
|
262
|
+
model: metadata.model,
|
|
263
|
+
dimension: metadata.dimension,
|
|
264
|
+
generatedAt: metadata.generatedAt,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
id: row.id,
|
|
269
|
+
version: row.version,
|
|
270
|
+
content: row.content,
|
|
271
|
+
type: row.type,
|
|
272
|
+
source: row.source,
|
|
273
|
+
embedding,
|
|
274
|
+
metadata: row.metadata || {},
|
|
275
|
+
accessCount: row.accessCount || 0,
|
|
276
|
+
accessedAt: row.accessedAt?.toISOString() || new Date().toISOString(),
|
|
277
|
+
verified: row.verified ?? false,
|
|
278
|
+
createdAt: row.createdAt.toISOString(),
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Delete a memory by ID.
|
|
283
|
+
*
|
|
284
|
+
* @param id - Memory ID to delete
|
|
285
|
+
* @returns true if memory was deleted
|
|
286
|
+
*/
|
|
287
|
+
async delete(id) {
|
|
288
|
+
const result = await this.db.delete(agentMemories).where(eq(agentMemories.id, id)).returning();
|
|
289
|
+
return result.length > 0;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get a memory by ID.
|
|
293
|
+
*
|
|
294
|
+
* @param id - Memory ID
|
|
295
|
+
* @returns Memory if found, null otherwise
|
|
296
|
+
*/
|
|
297
|
+
async getById(id) {
|
|
298
|
+
const result = await this.db
|
|
299
|
+
.select()
|
|
300
|
+
.from(agentMemories)
|
|
301
|
+
.where(eq(agentMemories.id, id))
|
|
302
|
+
.limit(1);
|
|
303
|
+
if (result.length === 0) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
const row = result[0];
|
|
307
|
+
if (!row) {
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
// Convert to AgentMemory format
|
|
311
|
+
let embedding;
|
|
312
|
+
if (row.embeddingMetadata) {
|
|
313
|
+
const metadata = row.embeddingMetadata;
|
|
314
|
+
embedding = {
|
|
315
|
+
vector: Array.isArray(row.embedding) ? row.embedding : [],
|
|
316
|
+
model: metadata.model,
|
|
317
|
+
dimension: metadata.dimension,
|
|
318
|
+
generatedAt: metadata.generatedAt,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
id: row.id,
|
|
323
|
+
version: row.version,
|
|
324
|
+
content: row.content,
|
|
325
|
+
type: row.type,
|
|
326
|
+
source: row.source,
|
|
327
|
+
embedding,
|
|
328
|
+
metadata: row.metadata || {},
|
|
329
|
+
accessCount: row.accessCount || 0,
|
|
330
|
+
accessedAt: row.accessedAt?.toISOString() || new Date().toISOString(),
|
|
331
|
+
verified: row.verified ?? false,
|
|
332
|
+
createdAt: row.createdAt.toISOString(),
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/ai - Agent Event Logger
|
|
3
|
+
*
|
|
4
|
+
* Circular buffer event logger for tracking agent operations.
|
|
5
|
+
* Maintains last N events in memory with optional persistence.
|
|
6
|
+
*/
|
|
7
|
+
import type { AnyAgentEvent, DecisionEvent, ErrorEvent, EventFilter, EventStorage, LLMCallEvent, ToolCallEvent } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Agent event logger with circular buffer
|
|
10
|
+
*/
|
|
11
|
+
export declare class AgentEventLogger {
|
|
12
|
+
private events;
|
|
13
|
+
private maxEvents;
|
|
14
|
+
private storage?;
|
|
15
|
+
private autoFlush;
|
|
16
|
+
private flushInterval?;
|
|
17
|
+
constructor(options?: {
|
|
18
|
+
maxEvents?: number;
|
|
19
|
+
storage?: EventStorage;
|
|
20
|
+
autoFlush?: boolean;
|
|
21
|
+
flushIntervalMs?: number;
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Log a decision event
|
|
25
|
+
*/
|
|
26
|
+
logDecision(event: Omit<DecisionEvent, 'eventType'>): void;
|
|
27
|
+
/**
|
|
28
|
+
* Log a tool call event
|
|
29
|
+
*/
|
|
30
|
+
logToolCall(event: Omit<ToolCallEvent, 'eventType'>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Log an LLM call event
|
|
33
|
+
*/
|
|
34
|
+
logLLMCall(event: Omit<LLMCallEvent, 'eventType'>): void;
|
|
35
|
+
/**
|
|
36
|
+
* Log an error event
|
|
37
|
+
*/
|
|
38
|
+
logError(event: Omit<ErrorEvent, 'eventType'>): void;
|
|
39
|
+
/**
|
|
40
|
+
* Add event to circular buffer
|
|
41
|
+
*/
|
|
42
|
+
private addEvent;
|
|
43
|
+
/**
|
|
44
|
+
* Get events matching filter
|
|
45
|
+
*/
|
|
46
|
+
getEvents(filter?: EventFilter): AnyAgentEvent[];
|
|
47
|
+
/**
|
|
48
|
+
* Get recent N events
|
|
49
|
+
*/
|
|
50
|
+
getRecentEvents(count: number): AnyAgentEvent[];
|
|
51
|
+
/**
|
|
52
|
+
* Get events by type
|
|
53
|
+
*/
|
|
54
|
+
getDecisions(): DecisionEvent[];
|
|
55
|
+
getToolCalls(): ToolCallEvent[];
|
|
56
|
+
getLLMCalls(): LLMCallEvent[];
|
|
57
|
+
getErrors(): ErrorEvent[];
|
|
58
|
+
/**
|
|
59
|
+
* Get total event count
|
|
60
|
+
*/
|
|
61
|
+
getCount(filter?: EventFilter): number;
|
|
62
|
+
/**
|
|
63
|
+
* Clear all events from buffer
|
|
64
|
+
*/
|
|
65
|
+
clear(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Flush events to storage
|
|
68
|
+
*/
|
|
69
|
+
flush(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Load events from storage
|
|
72
|
+
*/
|
|
73
|
+
load(filter?: EventFilter): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Cleanup resources
|
|
76
|
+
*/
|
|
77
|
+
destroy(): void;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/observability/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAE1B,OAAO,CAAC,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,OAAO,CAAC,EAAE,YAAY,CAAA;QACtB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB;IAYD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,IAAI;IAO1D;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,IAAI;IAO1D;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,IAAI;IAOxD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,IAAI;IAOpD;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE;IAoChD;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAI/C;;OAEG;IACH,YAAY,IAAI,aAAa,EAAE;IAI/B,YAAY,IAAI,aAAa,EAAE;IAI/B,WAAW,IAAI,YAAY,EAAE;IAI7B,SAAS,IAAI,UAAU,EAAE;IAIzB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM;IAOtC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/ai - Agent Event Logger
|
|
3
|
+
*
|
|
4
|
+
* Circular buffer event logger for tracking agent operations.
|
|
5
|
+
* Maintains last N events in memory with optional persistence.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Agent event logger with circular buffer
|
|
9
|
+
*/
|
|
10
|
+
export class AgentEventLogger {
|
|
11
|
+
events = [];
|
|
12
|
+
maxEvents;
|
|
13
|
+
storage;
|
|
14
|
+
autoFlush;
|
|
15
|
+
flushInterval;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.maxEvents = options?.maxEvents ?? 1000;
|
|
18
|
+
this.storage = options?.storage;
|
|
19
|
+
this.autoFlush = options?.autoFlush ?? false;
|
|
20
|
+
if (this.autoFlush && this.storage && options?.flushIntervalMs) {
|
|
21
|
+
this.flushInterval = setInterval(() => {
|
|
22
|
+
void this.flush();
|
|
23
|
+
}, options.flushIntervalMs);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Log a decision event
|
|
28
|
+
*/
|
|
29
|
+
logDecision(event) {
|
|
30
|
+
this.addEvent({
|
|
31
|
+
...event,
|
|
32
|
+
eventType: 'decision',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Log a tool call event
|
|
37
|
+
*/
|
|
38
|
+
logToolCall(event) {
|
|
39
|
+
this.addEvent({
|
|
40
|
+
...event,
|
|
41
|
+
eventType: 'tool_call',
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Log an LLM call event
|
|
46
|
+
*/
|
|
47
|
+
logLLMCall(event) {
|
|
48
|
+
this.addEvent({
|
|
49
|
+
...event,
|
|
50
|
+
eventType: 'llm_call',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Log an error event
|
|
55
|
+
*/
|
|
56
|
+
logError(event) {
|
|
57
|
+
this.addEvent({
|
|
58
|
+
...event,
|
|
59
|
+
eventType: 'error',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Add event to circular buffer
|
|
64
|
+
*/
|
|
65
|
+
addEvent(event) {
|
|
66
|
+
this.events.push(event);
|
|
67
|
+
// Maintain circular buffer size
|
|
68
|
+
if (this.events.length > this.maxEvents) {
|
|
69
|
+
this.events.shift();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get events matching filter
|
|
74
|
+
*/
|
|
75
|
+
getEvents(filter) {
|
|
76
|
+
let filtered = [...this.events];
|
|
77
|
+
if (!filter) {
|
|
78
|
+
return filtered;
|
|
79
|
+
}
|
|
80
|
+
if (filter.agentId) {
|
|
81
|
+
filtered = filtered.filter((e) => e.agentId === filter.agentId);
|
|
82
|
+
}
|
|
83
|
+
if (filter.sessionId) {
|
|
84
|
+
filtered = filtered.filter((e) => e.sessionId === filter.sessionId);
|
|
85
|
+
}
|
|
86
|
+
if (filter.taskId) {
|
|
87
|
+
filtered = filtered.filter((e) => e.taskId === filter.taskId);
|
|
88
|
+
}
|
|
89
|
+
if (filter.eventType) {
|
|
90
|
+
filtered = filtered.filter((e) => e.eventType === filter.eventType);
|
|
91
|
+
}
|
|
92
|
+
if (filter.startTime) {
|
|
93
|
+
const startTime = filter.startTime;
|
|
94
|
+
filtered = filtered.filter((e) => e.timestamp >= startTime);
|
|
95
|
+
}
|
|
96
|
+
if (filter.endTime) {
|
|
97
|
+
const endTime = filter.endTime;
|
|
98
|
+
filtered = filtered.filter((e) => e.timestamp <= endTime);
|
|
99
|
+
}
|
|
100
|
+
return filtered;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get recent N events
|
|
104
|
+
*/
|
|
105
|
+
getRecentEvents(count) {
|
|
106
|
+
return this.events.slice(-count);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get events by type
|
|
110
|
+
*/
|
|
111
|
+
getDecisions() {
|
|
112
|
+
return this.events.filter((e) => e.eventType === 'decision');
|
|
113
|
+
}
|
|
114
|
+
getToolCalls() {
|
|
115
|
+
return this.events.filter((e) => e.eventType === 'tool_call');
|
|
116
|
+
}
|
|
117
|
+
getLLMCalls() {
|
|
118
|
+
return this.events.filter((e) => e.eventType === 'llm_call');
|
|
119
|
+
}
|
|
120
|
+
getErrors() {
|
|
121
|
+
return this.events.filter((e) => e.eventType === 'error');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get total event count
|
|
125
|
+
*/
|
|
126
|
+
getCount(filter) {
|
|
127
|
+
if (!filter) {
|
|
128
|
+
return this.events.length;
|
|
129
|
+
}
|
|
130
|
+
return this.getEvents(filter).length;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Clear all events from buffer
|
|
134
|
+
*/
|
|
135
|
+
clear() {
|
|
136
|
+
this.events = [];
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Flush events to storage
|
|
140
|
+
*/
|
|
141
|
+
async flush() {
|
|
142
|
+
if (!this.storage) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
await this.storage.save([...this.events]);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Load events from storage
|
|
149
|
+
*/
|
|
150
|
+
async load(filter) {
|
|
151
|
+
if (!this.storage) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const events = await this.storage.load(filter);
|
|
155
|
+
this.events = events.slice(-this.maxEvents);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Cleanup resources
|
|
159
|
+
*/
|
|
160
|
+
destroy() {
|
|
161
|
+
if (this.flushInterval) {
|
|
162
|
+
clearInterval(this.flushInterval);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/ai - Agent Metrics Collector
|
|
3
|
+
*
|
|
4
|
+
* Aggregates statistics from agent events for monitoring and analysis.
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentEventLogger } from './logger.js';
|
|
7
|
+
import type { AgentMetrics, EventFilter, LLMMetrics, MetricsSummary, ToolMetrics } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Agent metrics collector
|
|
10
|
+
*/
|
|
11
|
+
export declare class AgentMetricsCollector {
|
|
12
|
+
private logger;
|
|
13
|
+
private startTime;
|
|
14
|
+
constructor(logger: AgentEventLogger);
|
|
15
|
+
/**
|
|
16
|
+
* Get metrics for a specific agent
|
|
17
|
+
*/
|
|
18
|
+
getMetrics(agentId: string): AgentMetrics;
|
|
19
|
+
/**
|
|
20
|
+
* Calculate tool-specific metrics
|
|
21
|
+
*/
|
|
22
|
+
private calculateToolMetrics;
|
|
23
|
+
/**
|
|
24
|
+
* Calculate LLM-specific metrics
|
|
25
|
+
*/
|
|
26
|
+
private calculateLLMMetrics;
|
|
27
|
+
/**
|
|
28
|
+
* Get summary metrics across all agents
|
|
29
|
+
*/
|
|
30
|
+
getMetricsSummary(filter?: EventFilter): MetricsSummary;
|
|
31
|
+
/**
|
|
32
|
+
* Get tool usage statistics
|
|
33
|
+
*/
|
|
34
|
+
getToolUsageStats(): Array<{
|
|
35
|
+
toolName: string;
|
|
36
|
+
metrics: ToolMetrics;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Get LLM usage statistics
|
|
40
|
+
*/
|
|
41
|
+
getLLMUsageStats(): LLMMetrics;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EACV,YAAY,EAEZ,WAAW,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAQ;gBAEb,MAAM,EAAE,gBAAgB;IAKpC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IA+DzC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;OAEG;IACH,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,cAAc;IA8CvD;;OAEG;IACH,iBAAiB,IAAI,KAAK,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,WAAW,CAAA;KACrB,CAAC;IASF;;OAEG;IACH,gBAAgB,IAAI,UAAU;CAI/B"}
|