@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,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/ai - React Hooks for Observability
|
|
3
|
+
*
|
|
4
|
+
* React hooks for accessing and displaying agent events and metrics.
|
|
5
|
+
*/
|
|
6
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
7
|
+
import { AgentEventQuery } from '../../observability/query.js';
|
|
8
|
+
/**
|
|
9
|
+
* Hook for accessing agent events with real-time updates
|
|
10
|
+
*/
|
|
11
|
+
export function useAgentEvents(logger, filter, options) {
|
|
12
|
+
const [events, setEvents] = useState([]);
|
|
13
|
+
const [loading, setLoading] = useState(true);
|
|
14
|
+
const refreshInterval = options?.refreshInterval ?? 5000;
|
|
15
|
+
const autoRefresh = options?.autoRefresh ?? true;
|
|
16
|
+
const refresh = useCallback(() => {
|
|
17
|
+
setLoading(true);
|
|
18
|
+
const newEvents = logger.getEvents(filter);
|
|
19
|
+
setEvents(newEvents);
|
|
20
|
+
setLoading(false);
|
|
21
|
+
}, [logger, filter]);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
refresh();
|
|
24
|
+
if (autoRefresh) {
|
|
25
|
+
const interval = setInterval(refresh, refreshInterval);
|
|
26
|
+
return () => clearInterval(interval);
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}, [refresh, autoRefresh, refreshInterval]);
|
|
30
|
+
return {
|
|
31
|
+
events,
|
|
32
|
+
loading,
|
|
33
|
+
refresh,
|
|
34
|
+
count: events.length,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Hook for accessing agent metrics with real-time updates
|
|
39
|
+
*/
|
|
40
|
+
export function useAgentMetrics(collector, agentId, options) {
|
|
41
|
+
const [metrics, setMetrics] = useState(null);
|
|
42
|
+
const [loading, setLoading] = useState(true);
|
|
43
|
+
const refreshInterval = options?.refreshInterval ?? 5000;
|
|
44
|
+
const autoRefresh = options?.autoRefresh ?? true;
|
|
45
|
+
const refresh = useCallback(() => {
|
|
46
|
+
setLoading(true);
|
|
47
|
+
const newMetrics = collector.getMetrics(agentId);
|
|
48
|
+
setMetrics(newMetrics);
|
|
49
|
+
setLoading(false);
|
|
50
|
+
}, [collector, agentId]);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
refresh();
|
|
53
|
+
if (autoRefresh) {
|
|
54
|
+
const interval = setInterval(refresh, refreshInterval);
|
|
55
|
+
return () => clearInterval(interval);
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}, [refresh, autoRefresh, refreshInterval]);
|
|
59
|
+
return {
|
|
60
|
+
metrics,
|
|
61
|
+
loading,
|
|
62
|
+
refresh,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Hook for accessing metrics summary
|
|
67
|
+
*/
|
|
68
|
+
export function useMetricsSummary(collector, filter, options) {
|
|
69
|
+
const [summary, setSummary] = useState(null);
|
|
70
|
+
const [loading, setLoading] = useState(true);
|
|
71
|
+
const refreshInterval = options?.refreshInterval ?? 5000;
|
|
72
|
+
const autoRefresh = options?.autoRefresh ?? true;
|
|
73
|
+
const refresh = useCallback(() => {
|
|
74
|
+
setLoading(true);
|
|
75
|
+
const newSummary = collector.getMetricsSummary(filter);
|
|
76
|
+
setSummary(newSummary);
|
|
77
|
+
setLoading(false);
|
|
78
|
+
}, [collector, filter]);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
refresh();
|
|
81
|
+
if (autoRefresh) {
|
|
82
|
+
const interval = setInterval(refresh, refreshInterval);
|
|
83
|
+
return () => clearInterval(interval);
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}, [refresh, autoRefresh, refreshInterval]);
|
|
87
|
+
return {
|
|
88
|
+
summary,
|
|
89
|
+
loading,
|
|
90
|
+
refresh,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Hook for querying events with advanced filters
|
|
95
|
+
*/
|
|
96
|
+
export function useEventQuery(logger) {
|
|
97
|
+
const query = useMemo(() => new AgentEventQuery(logger), [logger]);
|
|
98
|
+
const getRecentEvents = useCallback((milliseconds, count) => {
|
|
99
|
+
return query.getRecentEvents(milliseconds, count);
|
|
100
|
+
}, [query]);
|
|
101
|
+
const getEventsForAgent = useCallback((agentId) => {
|
|
102
|
+
return query.getEventsForAgent(agentId);
|
|
103
|
+
}, [query]);
|
|
104
|
+
const getEventsForSession = useCallback((sessionId) => {
|
|
105
|
+
return query.getEventsForSession(sessionId);
|
|
106
|
+
}, [query]);
|
|
107
|
+
const searchEvents = useCallback((searchText, filter) => {
|
|
108
|
+
return query.searchEvents(searchText, filter);
|
|
109
|
+
}, [query]);
|
|
110
|
+
const paginateEvents = useCallback((page, pageSize, filter) => {
|
|
111
|
+
return query.paginateEvents(page, pageSize, filter);
|
|
112
|
+
}, [query]);
|
|
113
|
+
return {
|
|
114
|
+
query,
|
|
115
|
+
getRecentEvents,
|
|
116
|
+
getEventsForAgent,
|
|
117
|
+
getEventsForSession,
|
|
118
|
+
searchEvents,
|
|
119
|
+
paginateEvents,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Hook for tool usage statistics
|
|
124
|
+
*/
|
|
125
|
+
export function useToolUsageStats(collector, options) {
|
|
126
|
+
const [stats, setStats] = useState([]);
|
|
127
|
+
const [loading, setLoading] = useState(true);
|
|
128
|
+
const refreshInterval = options?.refreshInterval ?? 5000;
|
|
129
|
+
const autoRefresh = options?.autoRefresh ?? true;
|
|
130
|
+
const refresh = useCallback(() => {
|
|
131
|
+
setLoading(true);
|
|
132
|
+
const newStats = collector.getToolUsageStats();
|
|
133
|
+
setStats(newStats);
|
|
134
|
+
setLoading(false);
|
|
135
|
+
}, [collector]);
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
refresh();
|
|
138
|
+
if (autoRefresh) {
|
|
139
|
+
const interval = setInterval(refresh, refreshInterval);
|
|
140
|
+
return () => clearInterval(interval);
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
}, [refresh, autoRefresh, refreshInterval]);
|
|
144
|
+
return {
|
|
145
|
+
stats,
|
|
146
|
+
loading,
|
|
147
|
+
refresh,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Hook for LLM usage statistics
|
|
152
|
+
*/
|
|
153
|
+
export function useLLMUsageStats(collector, options) {
|
|
154
|
+
const [stats, setStats] = useState(null);
|
|
155
|
+
const [loading, setLoading] = useState(true);
|
|
156
|
+
const refreshInterval = options?.refreshInterval ?? 5000;
|
|
157
|
+
const autoRefresh = options?.autoRefresh ?? true;
|
|
158
|
+
const refresh = useCallback(() => {
|
|
159
|
+
setLoading(true);
|
|
160
|
+
const newStats = collector.getLLMUsageStats();
|
|
161
|
+
setStats(newStats);
|
|
162
|
+
setLoading(false);
|
|
163
|
+
}, [collector]);
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
refresh();
|
|
166
|
+
if (autoRefresh) {
|
|
167
|
+
const interval = setInterval(refresh, refreshInterval);
|
|
168
|
+
return () => clearInterval(interval);
|
|
169
|
+
}
|
|
170
|
+
return undefined;
|
|
171
|
+
}, [refresh, autoRefresh, refreshInterval]);
|
|
172
|
+
return {
|
|
173
|
+
stats,
|
|
174
|
+
loading,
|
|
175
|
+
refresh,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Hook for real-time event stream
|
|
180
|
+
*/
|
|
181
|
+
export function useEventStream(logger, options) {
|
|
182
|
+
const [events, setEvents] = useState([]);
|
|
183
|
+
const maxEvents = options?.maxEvents ?? 100;
|
|
184
|
+
useEffect(() => {
|
|
185
|
+
const interval = setInterval(() => {
|
|
186
|
+
const newEvents = logger.getEvents(options?.filter);
|
|
187
|
+
setEvents(newEvents.slice(-maxEvents));
|
|
188
|
+
}, 1000); // Update every second
|
|
189
|
+
return () => clearInterval(interval);
|
|
190
|
+
}, [logger, maxEvents, options?.filter]);
|
|
191
|
+
return {
|
|
192
|
+
events,
|
|
193
|
+
latestEvent: events[events.length - 1],
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Hook for paginated events
|
|
198
|
+
*/
|
|
199
|
+
export function usePaginatedEvents(logger, initialPageSize = 20, filter) {
|
|
200
|
+
const [page, setPage] = useState(1);
|
|
201
|
+
const [pageSize, setPageSize] = useState(initialPageSize);
|
|
202
|
+
const query = useMemo(() => new AgentEventQuery(logger), [logger]);
|
|
203
|
+
const result = useMemo(() => {
|
|
204
|
+
return query.paginateEvents(page, pageSize, filter);
|
|
205
|
+
}, [query, page, pageSize, filter]);
|
|
206
|
+
const nextPage = useCallback(() => {
|
|
207
|
+
if (page < result.totalPages) {
|
|
208
|
+
setPage(page + 1);
|
|
209
|
+
}
|
|
210
|
+
}, [page, result.totalPages]);
|
|
211
|
+
const prevPage = useCallback(() => {
|
|
212
|
+
if (page > 1) {
|
|
213
|
+
setPage(page - 1);
|
|
214
|
+
}
|
|
215
|
+
}, [page]);
|
|
216
|
+
const goToPage = useCallback((newPage) => {
|
|
217
|
+
setPage(Math.max(1, newPage));
|
|
218
|
+
}, []);
|
|
219
|
+
const changePageSize = useCallback((newSize) => {
|
|
220
|
+
setPageSize(newSize);
|
|
221
|
+
setPage(1); // Reset to first page
|
|
222
|
+
}, []);
|
|
223
|
+
return {
|
|
224
|
+
...result,
|
|
225
|
+
nextPage,
|
|
226
|
+
prevPage,
|
|
227
|
+
goToPage,
|
|
228
|
+
changePageSize,
|
|
229
|
+
hasNextPage: page < result.totalPages,
|
|
230
|
+
hasPrevPage: page > 1,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useAgentStream — React hook for streaming agent responses via SSE
|
|
3
|
+
*
|
|
4
|
+
* Uses fetch + ReadableStream (NOT EventSource — it doesn't support POST).
|
|
5
|
+
* Accumulates AgentStreamChunks into state and exposes:
|
|
6
|
+
* - text: accumulated output text
|
|
7
|
+
* - chunks: all received chunks in order
|
|
8
|
+
* - isStreaming: true while the stream is open
|
|
9
|
+
* - error: last error message, if any
|
|
10
|
+
* - abort(): cancels the stream
|
|
11
|
+
*/
|
|
12
|
+
export interface AgentStreamChunk {
|
|
13
|
+
type: 'text' | 'tool_call_start' | 'tool_call_result' | 'error' | 'done';
|
|
14
|
+
content?: string;
|
|
15
|
+
toolCall?: {
|
|
16
|
+
name: string;
|
|
17
|
+
arguments: string;
|
|
18
|
+
};
|
|
19
|
+
toolResult?: unknown;
|
|
20
|
+
error?: string;
|
|
21
|
+
metadata?: {
|
|
22
|
+
tokensUsed?: number;
|
|
23
|
+
executionTime?: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface AgentStreamRequest {
|
|
27
|
+
instruction: string;
|
|
28
|
+
boardId?: string;
|
|
29
|
+
workspaceId?: string;
|
|
30
|
+
priority?: 'low' | 'medium' | 'high' | 'critical';
|
|
31
|
+
}
|
|
32
|
+
export interface UseAgentStreamState {
|
|
33
|
+
text: string;
|
|
34
|
+
chunks: AgentStreamChunk[];
|
|
35
|
+
isStreaming: boolean;
|
|
36
|
+
error: string | null;
|
|
37
|
+
}
|
|
38
|
+
export interface UseAgentStreamReturn extends UseAgentStreamState {
|
|
39
|
+
start: (request: AgentStreamRequest, apiBase?: string) => Promise<void>;
|
|
40
|
+
abort: () => void;
|
|
41
|
+
reset: () => void;
|
|
42
|
+
}
|
|
43
|
+
export declare function useAgentStream(): UseAgentStreamReturn;
|
|
44
|
+
//# sourceMappingURL=useAgentStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAgentStream.d.ts","sourceRoot":"","sources":["../../../src/client/hooks/useAgentStream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,OAAO,GAAG,MAAM,CAAA;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;CAClD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,KAAK,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AASD,wBAAgB,cAAc,IAAI,oBAAoB,CA2FrD"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useAgentStream — React hook for streaming agent responses via SSE
|
|
3
|
+
*
|
|
4
|
+
* Uses fetch + ReadableStream (NOT EventSource — it doesn't support POST).
|
|
5
|
+
* Accumulates AgentStreamChunks into state and exposes:
|
|
6
|
+
* - text: accumulated output text
|
|
7
|
+
* - chunks: all received chunks in order
|
|
8
|
+
* - isStreaming: true while the stream is open
|
|
9
|
+
* - error: last error message, if any
|
|
10
|
+
* - abort(): cancels the stream
|
|
11
|
+
*/
|
|
12
|
+
'use client';
|
|
13
|
+
import { useCallback, useRef, useState } from 'react';
|
|
14
|
+
const INITIAL_STATE = {
|
|
15
|
+
text: '',
|
|
16
|
+
chunks: [],
|
|
17
|
+
isStreaming: false,
|
|
18
|
+
error: null,
|
|
19
|
+
};
|
|
20
|
+
export function useAgentStream() {
|
|
21
|
+
const [state, setState] = useState(INITIAL_STATE);
|
|
22
|
+
const controllerRef = useRef(null);
|
|
23
|
+
const abort = useCallback(() => {
|
|
24
|
+
controllerRef.current?.abort();
|
|
25
|
+
setState((s) => ({ ...s, isStreaming: false }));
|
|
26
|
+
}, []);
|
|
27
|
+
const reset = useCallback(() => {
|
|
28
|
+
controllerRef.current?.abort();
|
|
29
|
+
setState(INITIAL_STATE);
|
|
30
|
+
}, []);
|
|
31
|
+
const start = useCallback(async (request, apiBase = '/api/agent-stream') => {
|
|
32
|
+
controllerRef.current?.abort();
|
|
33
|
+
const controller = new AbortController();
|
|
34
|
+
controllerRef.current = controller;
|
|
35
|
+
setState({ text: '', chunks: [], isStreaming: true, error: null });
|
|
36
|
+
try {
|
|
37
|
+
const response = await fetch(apiBase, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
headers: { 'Content-Type': 'application/json' },
|
|
40
|
+
body: JSON.stringify(request),
|
|
41
|
+
signal: controller.signal,
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
const errText = await response.text();
|
|
45
|
+
setState((s) => ({
|
|
46
|
+
...s,
|
|
47
|
+
isStreaming: false,
|
|
48
|
+
error: `HTTP ${response.status}: ${errText}`,
|
|
49
|
+
}));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (!response.body) {
|
|
53
|
+
setState((s) => ({ ...s, isStreaming: false, error: 'No response body' }));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const reader = response.body.getReader();
|
|
57
|
+
const decoder = new TextDecoder();
|
|
58
|
+
let buffer = '';
|
|
59
|
+
while (true) {
|
|
60
|
+
const { value, done } = await reader.read();
|
|
61
|
+
if (done)
|
|
62
|
+
break;
|
|
63
|
+
buffer += decoder.decode(value, { stream: true });
|
|
64
|
+
// Parse SSE lines: "data: {...}\n\n"
|
|
65
|
+
const events = buffer.split('\n\n');
|
|
66
|
+
buffer = events.pop() ?? '';
|
|
67
|
+
for (const event of events) {
|
|
68
|
+
const dataLine = event.split('\n').find((l) => l.startsWith('data: '));
|
|
69
|
+
if (!dataLine)
|
|
70
|
+
continue;
|
|
71
|
+
const jsonStr = dataLine.slice(6);
|
|
72
|
+
try {
|
|
73
|
+
const chunk = JSON.parse(jsonStr);
|
|
74
|
+
setState((s) => ({
|
|
75
|
+
...s,
|
|
76
|
+
chunks: [...s.chunks, chunk],
|
|
77
|
+
text: chunk.type === 'text' ? s.text + (chunk.content ?? '') : s.text,
|
|
78
|
+
error: chunk.type === 'error' ? (chunk.error ?? 'Unknown error') : s.error,
|
|
79
|
+
isStreaming: chunk.type !== 'done' && chunk.type !== 'error',
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Malformed SSE data — skip
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
90
|
+
setState((s) => ({ ...s, isStreaming: false }));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
setState((s) => ({
|
|
94
|
+
...s,
|
|
95
|
+
isStreaming: false,
|
|
96
|
+
error: error instanceof Error ? error.message : String(error),
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
}, []);
|
|
100
|
+
return { ...state, start, abort, reset };
|
|
101
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useEpisodicMemory Hook
|
|
3
|
+
*
|
|
4
|
+
* React hook for managing episodic memory in client components.
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentMemory } from '@revealui/contracts/agents';
|
|
7
|
+
export interface UseEpisodicMemoryReturn {
|
|
8
|
+
memories: AgentMemory[];
|
|
9
|
+
addMemory: (memory: AgentMemory) => Promise<string>;
|
|
10
|
+
removeMemory: (memoryId: string) => Promise<void>;
|
|
11
|
+
getMemory: (memoryId: string) => AgentMemory | undefined;
|
|
12
|
+
search: (query: string) => Promise<AgentMemory[]>;
|
|
13
|
+
accessCount: number;
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
error: Error | null;
|
|
16
|
+
refresh: () => Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* React hook for episodic memory management.
|
|
20
|
+
*
|
|
21
|
+
* @param userId - User identifier
|
|
22
|
+
* @returns Episodic memory state and operations
|
|
23
|
+
*/
|
|
24
|
+
export declare function useEpisodicMemory(userId: string): UseEpisodicMemoryReturn;
|
|
25
|
+
//# sourceMappingURL=useEpisodicMemory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEpisodicMemory.d.ts","sourceRoot":"","sources":["../../../src/client/hooks/useEpisodicMemory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAO7D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACnD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAA;IACxD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IACjD,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAmCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CA4KzE"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useEpisodicMemory Hook
|
|
3
|
+
*
|
|
4
|
+
* React hook for managing episodic memory in client components.
|
|
5
|
+
*/
|
|
6
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
7
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
8
|
+
const isAgentMemory = (value) => {
|
|
9
|
+
if (!isRecord(value))
|
|
10
|
+
return false;
|
|
11
|
+
return typeof value.id === 'string' && typeof value.content === 'string';
|
|
12
|
+
};
|
|
13
|
+
const parseEpisodicPayload = (payload) => {
|
|
14
|
+
if (!isRecord(payload)) {
|
|
15
|
+
return { memories: [], accessCount: 0 };
|
|
16
|
+
}
|
|
17
|
+
const memories = Array.isArray(payload.memories) ? payload.memories.filter(isAgentMemory) : [];
|
|
18
|
+
const accessCount = typeof payload.accessCount === 'number' ? payload.accessCount : 0;
|
|
19
|
+
const tag = typeof payload.tag === 'string' ? payload.tag : undefined;
|
|
20
|
+
const memoryId = typeof payload.memoryId === 'string' ? payload.memoryId : undefined;
|
|
21
|
+
return { memories, accessCount, tag, memoryId };
|
|
22
|
+
};
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// Hook
|
|
25
|
+
// =============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* React hook for episodic memory management.
|
|
28
|
+
*
|
|
29
|
+
* @param userId - User identifier
|
|
30
|
+
* @returns Episodic memory state and operations
|
|
31
|
+
*/
|
|
32
|
+
export function useEpisodicMemory(userId) {
|
|
33
|
+
const [memories, setMemories] = useState([]);
|
|
34
|
+
const [accessCount, setAccessCount] = useState(0);
|
|
35
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
36
|
+
const [error, setError] = useState(null);
|
|
37
|
+
// Load initial state
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
let mounted = true;
|
|
40
|
+
async function load() {
|
|
41
|
+
try {
|
|
42
|
+
setIsLoading(true);
|
|
43
|
+
setError(null);
|
|
44
|
+
const response = await fetch(`/api/memory/episodic/${userId}`);
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
throw new Error(`Failed to load episodic memory: ${response.statusText}`);
|
|
47
|
+
}
|
|
48
|
+
const payload = (await response.json());
|
|
49
|
+
if (!mounted)
|
|
50
|
+
return;
|
|
51
|
+
const parsed = parseEpisodicPayload(payload);
|
|
52
|
+
setMemories(parsed.memories);
|
|
53
|
+
setAccessCount(parsed.accessCount);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (!mounted)
|
|
57
|
+
return;
|
|
58
|
+
setError(err instanceof Error ? err : new Error('Unknown error'));
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
if (mounted) {
|
|
62
|
+
setIsLoading(false);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
void load();
|
|
67
|
+
return () => {
|
|
68
|
+
mounted = false;
|
|
69
|
+
};
|
|
70
|
+
}, [userId]);
|
|
71
|
+
// Refresh function
|
|
72
|
+
const refresh = useCallback(async () => {
|
|
73
|
+
try {
|
|
74
|
+
setIsLoading(true);
|
|
75
|
+
setError(null);
|
|
76
|
+
const response = await fetch(`/api/memory/episodic/${userId}`);
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
throw new Error(`Failed to refresh episodic memory: ${response.statusText}`);
|
|
79
|
+
}
|
|
80
|
+
const payload = (await response.json());
|
|
81
|
+
const parsed = parseEpisodicPayload(payload);
|
|
82
|
+
setMemories(parsed.memories);
|
|
83
|
+
setAccessCount(parsed.accessCount);
|
|
84
|
+
setError(null);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
setError(err instanceof Error ? err : new Error('Unknown error'));
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
setIsLoading(false);
|
|
91
|
+
}
|
|
92
|
+
}, [userId]);
|
|
93
|
+
// Add memory
|
|
94
|
+
const addMemory = useCallback(async (memory) => {
|
|
95
|
+
try {
|
|
96
|
+
setError(null);
|
|
97
|
+
const response = await fetch(`/api/memory/episodic/${userId}`, {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
headers: { 'Content-Type': 'application/json' },
|
|
100
|
+
body: JSON.stringify(memory),
|
|
101
|
+
});
|
|
102
|
+
if (!response.ok) {
|
|
103
|
+
throw new Error(`Failed to add memory: ${response.statusText}`);
|
|
104
|
+
}
|
|
105
|
+
const payload = (await response.json());
|
|
106
|
+
const parsed = parseEpisodicPayload(payload);
|
|
107
|
+
// Refresh to get updated list
|
|
108
|
+
await refresh();
|
|
109
|
+
return parsed.tag ?? parsed.memoryId ?? memory.id;
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
setError(err instanceof Error ? err : new Error('Unknown error'));
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
}, [userId, refresh]);
|
|
116
|
+
// Remove memory
|
|
117
|
+
const removeMemory = useCallback(async (memoryId) => {
|
|
118
|
+
try {
|
|
119
|
+
setError(null);
|
|
120
|
+
const response = await fetch(`/api/memory/episodic/${userId}/${memoryId}`, {
|
|
121
|
+
method: 'DELETE',
|
|
122
|
+
});
|
|
123
|
+
if (!response.ok) {
|
|
124
|
+
throw new Error(`Failed to remove memory: ${response.statusText}`);
|
|
125
|
+
}
|
|
126
|
+
// Refresh to get updated list
|
|
127
|
+
await refresh();
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
setError(err instanceof Error ? err : new Error('Unknown error'));
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
}, [userId, refresh]);
|
|
134
|
+
// Get memory
|
|
135
|
+
const getMemory = useCallback((memoryId) => {
|
|
136
|
+
return memories.find((m) => m.id === memoryId);
|
|
137
|
+
}, [memories]);
|
|
138
|
+
// Search using vector similarity via API
|
|
139
|
+
const search = useCallback(async (query) => {
|
|
140
|
+
try {
|
|
141
|
+
const response = await fetch('/api/memory/search-text', {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
headers: { 'Content-Type': 'application/json' },
|
|
144
|
+
body: JSON.stringify({ query, options: { limit: 20, threshold: 0.5 } }),
|
|
145
|
+
});
|
|
146
|
+
if (!response.ok) {
|
|
147
|
+
throw new Error(`Search failed: ${response.statusText}`);
|
|
148
|
+
}
|
|
149
|
+
const data = (await response.json());
|
|
150
|
+
if (data.results && Array.isArray(data.results)) {
|
|
151
|
+
return data.results.map((r) => r.memory);
|
|
152
|
+
}
|
|
153
|
+
// Fallback to client-side filter if API returns unexpected format
|
|
154
|
+
const lowerQuery = query.toLowerCase();
|
|
155
|
+
return memories.filter((m) => m.content.toLowerCase().includes(lowerQuery));
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Fallback to client-side text filter on error
|
|
159
|
+
const lowerQuery = query.toLowerCase();
|
|
160
|
+
return memories.filter((m) => m.content.toLowerCase().includes(lowerQuery));
|
|
161
|
+
}
|
|
162
|
+
}, [memories]);
|
|
163
|
+
return {
|
|
164
|
+
memories,
|
|
165
|
+
addMemory,
|
|
166
|
+
removeMemory,
|
|
167
|
+
getMemory,
|
|
168
|
+
search,
|
|
169
|
+
accessCount,
|
|
170
|
+
isLoading,
|
|
171
|
+
error,
|
|
172
|
+
refresh,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useWorkingMemory Hook
|
|
3
|
+
*
|
|
4
|
+
* React hook for managing working memory in client components.
|
|
5
|
+
*/
|
|
6
|
+
export interface UseWorkingMemoryOptions {
|
|
7
|
+
autoSync?: boolean;
|
|
8
|
+
syncInterval?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface UseWorkingMemoryReturn {
|
|
11
|
+
context: Record<string, unknown>;
|
|
12
|
+
setContext: (context: Record<string, unknown>) => Promise<void>;
|
|
13
|
+
updateContext: (updates: Partial<Record<string, unknown>>) => Promise<void>;
|
|
14
|
+
getContextValue: (key: string) => unknown;
|
|
15
|
+
setContextValue: (key: string, value: unknown) => Promise<void>;
|
|
16
|
+
sessionState: {
|
|
17
|
+
status: 'active' | 'paused' | 'completed';
|
|
18
|
+
focus?: {
|
|
19
|
+
siteId?: string;
|
|
20
|
+
pageId?: string;
|
|
21
|
+
blockId?: string;
|
|
22
|
+
selection?: string[];
|
|
23
|
+
};
|
|
24
|
+
currentTask?: {
|
|
25
|
+
id: string;
|
|
26
|
+
description: string;
|
|
27
|
+
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
28
|
+
progress?: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
updateSessionState: (state: Partial<UseWorkingMemoryReturn['sessionState']>) => Promise<void>;
|
|
32
|
+
activeAgents: Array<{
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
model: string;
|
|
37
|
+
systemPrompt: string;
|
|
38
|
+
tools: unknown[];
|
|
39
|
+
capabilities: string[];
|
|
40
|
+
temperature: number;
|
|
41
|
+
maxTokens: number;
|
|
42
|
+
}>;
|
|
43
|
+
addAgent: (agent: UseWorkingMemoryReturn['activeAgents'][0]) => Promise<void>;
|
|
44
|
+
removeAgent: (agentId: string) => Promise<void>;
|
|
45
|
+
isLoading: boolean;
|
|
46
|
+
error: Error | null;
|
|
47
|
+
sync: () => Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* React hook for working memory management.
|
|
51
|
+
*
|
|
52
|
+
* @param sessionId - Session identifier
|
|
53
|
+
* @param options - Hook options
|
|
54
|
+
* @returns Working memory state and operations
|
|
55
|
+
*/
|
|
56
|
+
export declare function useWorkingMemory(sessionId: string, options?: UseWorkingMemoryOptions): UseWorkingMemoryReturn;
|
|
57
|
+
//# sourceMappingURL=useWorkingMemory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWorkingMemory.d.ts","sourceRoot":"","sources":["../../../src/client/hooks/useWorkingMemory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3E,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IACzC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,YAAY,EAAE;QACZ,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAA;QACzC,KAAK,CAAC,EAAE;YACN,MAAM,CAAC,EAAE,MAAM,CAAA;YACf,MAAM,CAAC,EAAE,MAAM,CAAA;YACf,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;SACrB,CAAA;QACD,WAAW,CAAC,EAAE;YACZ,EAAE,EAAE,MAAM,CAAA;YACV,WAAW,EAAE,MAAM,CAAA;YACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;YACtD,QAAQ,CAAC,EAAE,MAAM,CAAA;SAClB,CAAA;KACF,CAAA;IACD,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7F,YAAY,EAAE,KAAK,CAAC;QAClB,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,KAAK,EAAE,OAAO,EAAE,CAAA;QAChB,YAAY,EAAE,MAAM,EAAE,CAAA;QACtB,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAC,CAAA;IACF,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7E,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAiHD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CA6NxB"}
|