@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,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedural Memory
|
|
3
|
+
*
|
|
4
|
+
* Stores and executes named workflows for AI agents.
|
|
5
|
+
* Workflows are sequences of typed steps that can be run
|
|
6
|
+
* sequentially or in parallel.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const mem = new ProceduralMemory()
|
|
11
|
+
*
|
|
12
|
+
* mem.register('onboard-user', [
|
|
13
|
+
* { id: 'welcome', type: 'action', label: 'Send welcome email',
|
|
14
|
+
* execute: async (ctx) => { ... } },
|
|
15
|
+
* { id: 'create-profile', type: 'action', label: 'Init profile',
|
|
16
|
+
* execute: async (ctx) => { ... } },
|
|
17
|
+
* ])
|
|
18
|
+
*
|
|
19
|
+
* const result = await mem.execute('onboard-user', { userId: 'u1' })
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// ProceduralMemory
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Procedural Memory stores named workflow definitions and executes them
|
|
27
|
+
* against a shared context object.
|
|
28
|
+
*/
|
|
29
|
+
export class ProceduralMemory {
|
|
30
|
+
workflows = new Map();
|
|
31
|
+
/**
|
|
32
|
+
* Register a new workflow.
|
|
33
|
+
* If a workflow with the same name already exists it is overwritten.
|
|
34
|
+
*/
|
|
35
|
+
register(name, steps, description) {
|
|
36
|
+
this.workflows.set(name, { name, description, steps, createdAt: Date.now() });
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Unregister a workflow by name.
|
|
40
|
+
*/
|
|
41
|
+
unregister(name) {
|
|
42
|
+
this.workflows.delete(name);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check whether a workflow is registered.
|
|
46
|
+
*/
|
|
47
|
+
has(name) {
|
|
48
|
+
return this.workflows.has(name);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* List all registered workflow names.
|
|
52
|
+
*/
|
|
53
|
+
listWorkflows() {
|
|
54
|
+
return Array.from(this.workflows.keys());
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the definition for a registered workflow.
|
|
58
|
+
*/
|
|
59
|
+
getDefinition(name) {
|
|
60
|
+
return this.workflows.get(name);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Execute a workflow by name.
|
|
64
|
+
*
|
|
65
|
+
* Steps marked `parallel: true` are executed concurrently with the
|
|
66
|
+
* immediately following step(s). All other steps run sequentially.
|
|
67
|
+
*
|
|
68
|
+
* @param name - Registered workflow name
|
|
69
|
+
* @param context - Initial context object passed to each step
|
|
70
|
+
* @throws {Error} If the workflow is not registered
|
|
71
|
+
*/
|
|
72
|
+
async execute(name, context = {}) {
|
|
73
|
+
const workflow = this.workflows.get(name);
|
|
74
|
+
if (!workflow) {
|
|
75
|
+
throw new Error(`Workflow "${name}" is not registered`);
|
|
76
|
+
}
|
|
77
|
+
const stepResults = [];
|
|
78
|
+
const startTime = Date.now();
|
|
79
|
+
// Group steps into sequential "batches". Consecutive steps that have
|
|
80
|
+
// parallel:true are collected into one batch and run with Promise.all.
|
|
81
|
+
const batches = buildBatches(workflow.steps);
|
|
82
|
+
for (const batch of batches) {
|
|
83
|
+
if (batch.length === 1) {
|
|
84
|
+
// Sequential step
|
|
85
|
+
// biome-ignore lint/style/noNonNullAssertion: batch[0] is guaranteed by batch.length === 1 check above
|
|
86
|
+
const step = batch[0];
|
|
87
|
+
try {
|
|
88
|
+
const result = await step.execute(context);
|
|
89
|
+
stepResults.push({ id: step.id, status: 'ok', result });
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
stepResults.push({
|
|
93
|
+
id: step.id,
|
|
94
|
+
status: 'error',
|
|
95
|
+
error: err instanceof Error ? err.message : String(err),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Parallel batch
|
|
101
|
+
const settled = await Promise.allSettled(batch.map((s) => s.execute(context)));
|
|
102
|
+
for (let i = 0; i < batch.length; i++) {
|
|
103
|
+
// biome-ignore lint/style/noNonNullAssertion: i is bounded by batch.length, so settled[i] and batch[i] are always defined
|
|
104
|
+
const outcome = settled[i];
|
|
105
|
+
// biome-ignore lint/style/noNonNullAssertion: i is bounded by batch.length, so batch[i] is always defined
|
|
106
|
+
const batchStep = batch[i];
|
|
107
|
+
if (outcome.status === 'fulfilled') {
|
|
108
|
+
const { value } = outcome;
|
|
109
|
+
stepResults.push({ id: batchStep.id, status: 'ok', result: value });
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const { reason } = outcome;
|
|
113
|
+
stepResults.push({
|
|
114
|
+
id: batchStep.id,
|
|
115
|
+
status: 'error',
|
|
116
|
+
error: reason instanceof Error ? reason.message : String(reason),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const success = stepResults.every((r) => r.status === 'ok');
|
|
123
|
+
return {
|
|
124
|
+
workflow: name,
|
|
125
|
+
success,
|
|
126
|
+
steps: stepResults,
|
|
127
|
+
durationMs: Date.now() - startTime,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// =============================================================================
|
|
132
|
+
// Helpers
|
|
133
|
+
// =============================================================================
|
|
134
|
+
/**
|
|
135
|
+
* Group steps into sequential batches.
|
|
136
|
+
* A step with `parallel: true` is placed in the same batch as the next step.
|
|
137
|
+
*/
|
|
138
|
+
function buildBatches(steps) {
|
|
139
|
+
const batches = [];
|
|
140
|
+
let current = [];
|
|
141
|
+
for (const step of steps) {
|
|
142
|
+
current.push(step);
|
|
143
|
+
if (!step.parallel) {
|
|
144
|
+
batches.push(current);
|
|
145
|
+
current = [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (current.length > 0) {
|
|
149
|
+
batches.push(current);
|
|
150
|
+
}
|
|
151
|
+
return batches;
|
|
152
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Memory
|
|
3
|
+
*
|
|
4
|
+
* Knowledge base with vector similarity search for AI agents.
|
|
5
|
+
* Stores content with optional embeddings and supports semantic
|
|
6
|
+
* retrieval via cosine similarity ranking.
|
|
7
|
+
*
|
|
8
|
+
* Designed to work standalone (in-memory) for testing and
|
|
9
|
+
* with a vector store (Supabase pgvector) in production.
|
|
10
|
+
*/
|
|
11
|
+
export interface SemanticEntry {
|
|
12
|
+
key: string;
|
|
13
|
+
content: string;
|
|
14
|
+
embedding?: number[];
|
|
15
|
+
metadata?: Record<string, unknown>;
|
|
16
|
+
storedAt: number;
|
|
17
|
+
expiresAt?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SemanticSearchResult {
|
|
20
|
+
key: string;
|
|
21
|
+
content: string;
|
|
22
|
+
score: number;
|
|
23
|
+
metadata?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export interface SemanticMemoryOptions {
|
|
26
|
+
/** Maximum number of entries to retain. Oldest are evicted first. */
|
|
27
|
+
maxEntries?: number;
|
|
28
|
+
/** Default TTL in milliseconds. Entries expire after this duration. */
|
|
29
|
+
ttlMs?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Semantic Memory for knowledge-base storage and retrieval.
|
|
33
|
+
*
|
|
34
|
+
* Provides cosine-similarity search over stored entries.
|
|
35
|
+
* When embeddings are not provided, falls back to keyword matching.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const memory = new SemanticMemory({ maxEntries: 1000, ttlMs: 24 * 60 * 60 * 1000 })
|
|
40
|
+
*
|
|
41
|
+
* await memory.store('pref:theme', 'User prefers dark mode', [0.1, 0.9, 0.3])
|
|
42
|
+
*
|
|
43
|
+
* const results = await memory.search([0.1, 0.9, 0.3], 3)
|
|
44
|
+
* // results[0].content === 'User prefers dark mode'
|
|
45
|
+
*
|
|
46
|
+
* await memory.delete('pref:theme')
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare class SemanticMemory {
|
|
50
|
+
private entries;
|
|
51
|
+
private readonly maxEntries;
|
|
52
|
+
private readonly ttlMs;
|
|
53
|
+
constructor(options?: SemanticMemoryOptions);
|
|
54
|
+
/**
|
|
55
|
+
* Store a content entry with an optional embedding vector.
|
|
56
|
+
*
|
|
57
|
+
* If the store is at capacity, the oldest entry is evicted first.
|
|
58
|
+
*/
|
|
59
|
+
store(key: string, content: string, embedding?: number[], metadata?: Record<string, unknown>): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Retrieve an entry by exact key.
|
|
62
|
+
*/
|
|
63
|
+
get(key: string): Promise<SemanticEntry | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Delete an entry by key.
|
|
66
|
+
*/
|
|
67
|
+
delete(key: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Search for the top-K most similar entries to a query embedding.
|
|
70
|
+
*
|
|
71
|
+
* Uses cosine similarity when both the query and entry have embeddings.
|
|
72
|
+
* Falls back to returning all non-expired entries ordered by recency when
|
|
73
|
+
* embeddings are absent.
|
|
74
|
+
*
|
|
75
|
+
* @param queryEmbedding - Query vector
|
|
76
|
+
* @param topK - Maximum number of results to return (default 5)
|
|
77
|
+
*/
|
|
78
|
+
search(queryEmbedding: number[], topK?: number): Promise<SemanticSearchResult[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Return all non-expired entries.
|
|
81
|
+
*/
|
|
82
|
+
list(): SemanticEntry[];
|
|
83
|
+
/**
|
|
84
|
+
* Number of stored entries (excluding expired ones).
|
|
85
|
+
*/
|
|
86
|
+
get size(): number;
|
|
87
|
+
/**
|
|
88
|
+
* Remove all expired entries from the store.
|
|
89
|
+
*/
|
|
90
|
+
private evictExpired;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=semantic-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-memory.d.ts","sourceRoot":"","sources":["../../../src/memory/stores/semantic-memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAE9B,OAAO,GAAE,qBAA0B;IAK/C;;;;OAIG;IACG,KAAK,CACT,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAyBhB;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAUrD;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;;;;;;;;OASG;IACG,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,SAAI,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAejF;;OAEG;IACH,IAAI,IAAI,aAAa,EAAE;IAKvB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED;;OAEG;IACH,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Memory
|
|
3
|
+
*
|
|
4
|
+
* Knowledge base with vector similarity search for AI agents.
|
|
5
|
+
* Stores content with optional embeddings and supports semantic
|
|
6
|
+
* retrieval via cosine similarity ranking.
|
|
7
|
+
*
|
|
8
|
+
* Designed to work standalone (in-memory) for testing and
|
|
9
|
+
* with a vector store (Supabase pgvector) in production.
|
|
10
|
+
*/
|
|
11
|
+
import { validateContext } from '../utils/validation.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// SemanticMemory
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Semantic Memory for knowledge-base storage and retrieval.
|
|
17
|
+
*
|
|
18
|
+
* Provides cosine-similarity search over stored entries.
|
|
19
|
+
* When embeddings are not provided, falls back to keyword matching.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const memory = new SemanticMemory({ maxEntries: 1000, ttlMs: 24 * 60 * 60 * 1000 })
|
|
24
|
+
*
|
|
25
|
+
* await memory.store('pref:theme', 'User prefers dark mode', [0.1, 0.9, 0.3])
|
|
26
|
+
*
|
|
27
|
+
* const results = await memory.search([0.1, 0.9, 0.3], 3)
|
|
28
|
+
* // results[0].content === 'User prefers dark mode'
|
|
29
|
+
*
|
|
30
|
+
* await memory.delete('pref:theme')
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class SemanticMemory {
|
|
34
|
+
entries = new Map();
|
|
35
|
+
maxEntries;
|
|
36
|
+
ttlMs;
|
|
37
|
+
constructor(options = {}) {
|
|
38
|
+
this.maxEntries = options.maxEntries ?? 10_000;
|
|
39
|
+
this.ttlMs = options.ttlMs;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Store a content entry with an optional embedding vector.
|
|
43
|
+
*
|
|
44
|
+
* If the store is at capacity, the oldest entry is evicted first.
|
|
45
|
+
*/
|
|
46
|
+
async store(key, content, embedding, metadata) {
|
|
47
|
+
if (metadata) {
|
|
48
|
+
validateContext(metadata);
|
|
49
|
+
}
|
|
50
|
+
// Evict oldest if at capacity (and not overwriting an existing key)
|
|
51
|
+
if (!this.entries.has(key) && this.entries.size >= this.maxEntries) {
|
|
52
|
+
const oldest = this.entries.keys().next().value;
|
|
53
|
+
if (oldest !== undefined) {
|
|
54
|
+
this.entries.delete(oldest);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const entry = {
|
|
58
|
+
key,
|
|
59
|
+
content,
|
|
60
|
+
embedding,
|
|
61
|
+
metadata,
|
|
62
|
+
storedAt: Date.now(),
|
|
63
|
+
expiresAt: this.ttlMs !== undefined ? Date.now() + this.ttlMs : undefined,
|
|
64
|
+
};
|
|
65
|
+
this.entries.set(key, entry);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Retrieve an entry by exact key.
|
|
69
|
+
*/
|
|
70
|
+
async get(key) {
|
|
71
|
+
const entry = this.entries.get(key);
|
|
72
|
+
if (!entry)
|
|
73
|
+
return null;
|
|
74
|
+
if (entry.expiresAt !== undefined && entry.expiresAt < Date.now()) {
|
|
75
|
+
this.entries.delete(key);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return entry;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Delete an entry by key.
|
|
82
|
+
*/
|
|
83
|
+
async delete(key) {
|
|
84
|
+
this.entries.delete(key);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Search for the top-K most similar entries to a query embedding.
|
|
88
|
+
*
|
|
89
|
+
* Uses cosine similarity when both the query and entry have embeddings.
|
|
90
|
+
* Falls back to returning all non-expired entries ordered by recency when
|
|
91
|
+
* embeddings are absent.
|
|
92
|
+
*
|
|
93
|
+
* @param queryEmbedding - Query vector
|
|
94
|
+
* @param topK - Maximum number of results to return (default 5)
|
|
95
|
+
*/
|
|
96
|
+
async search(queryEmbedding, topK = 5) {
|
|
97
|
+
this.evictExpired();
|
|
98
|
+
const results = [];
|
|
99
|
+
for (const entry of this.entries.values()) {
|
|
100
|
+
const score = entry.embedding !== undefined ? cosineSimilarity(queryEmbedding, entry.embedding) : 0; // No embedding → score 0 (will appear last)
|
|
101
|
+
results.push({ key: entry.key, content: entry.content, score, metadata: entry.metadata });
|
|
102
|
+
}
|
|
103
|
+
return results.sort((a, b) => b.score - a.score).slice(0, topK);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Return all non-expired entries.
|
|
107
|
+
*/
|
|
108
|
+
list() {
|
|
109
|
+
this.evictExpired();
|
|
110
|
+
return Array.from(this.entries.values());
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Number of stored entries (excluding expired ones).
|
|
114
|
+
*/
|
|
115
|
+
get size() {
|
|
116
|
+
this.evictExpired();
|
|
117
|
+
return this.entries.size;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Remove all expired entries from the store.
|
|
121
|
+
*/
|
|
122
|
+
evictExpired() {
|
|
123
|
+
const now = Date.now();
|
|
124
|
+
for (const [key, entry] of this.entries.entries()) {
|
|
125
|
+
if (entry.expiresAt !== undefined && entry.expiresAt < now) {
|
|
126
|
+
this.entries.delete(key);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// =============================================================================
|
|
132
|
+
// Helpers
|
|
133
|
+
// =============================================================================
|
|
134
|
+
/**
|
|
135
|
+
* Cosine similarity between two equal-length vectors.
|
|
136
|
+
* Returns a value in [-1, 1]. Returns 0 for zero-magnitude vectors.
|
|
137
|
+
*/
|
|
138
|
+
function cosineSimilarity(a, b) {
|
|
139
|
+
if (a.length !== b.length || a.length === 0)
|
|
140
|
+
return 0;
|
|
141
|
+
let dot = 0;
|
|
142
|
+
let magA = 0;
|
|
143
|
+
let magB = 0;
|
|
144
|
+
for (let i = 0; i < a.length; i++) {
|
|
145
|
+
// biome-ignore lint/style/noNonNullAssertion: i is bounded by a.length, and b has same length (checked above)
|
|
146
|
+
const ai = a[i];
|
|
147
|
+
// biome-ignore lint/style/noNonNullAssertion: i is bounded by a.length === b.length (checked above)
|
|
148
|
+
const bi = b[i];
|
|
149
|
+
dot += ai * bi;
|
|
150
|
+
magA += ai * ai;
|
|
151
|
+
magB += bi * bi;
|
|
152
|
+
}
|
|
153
|
+
const denom = Math.sqrt(magA) * Math.sqrt(magB);
|
|
154
|
+
return denom === 0 ? 0 : dot / denom;
|
|
155
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working Memory
|
|
3
|
+
*
|
|
4
|
+
* Short-term, session-scoped memory for AI agents.
|
|
5
|
+
* Uses CRDTs for conflict-free state management across distributed nodes.
|
|
6
|
+
*
|
|
7
|
+
* - Context: LWWRegister for single-valued state (last writer wins)
|
|
8
|
+
* - Active Agents: ORSet for collection of active agent configurations
|
|
9
|
+
* - Session State: LWWRegister for session metadata
|
|
10
|
+
*/
|
|
11
|
+
import type { AgentDefinition } from '@revealui/contracts/agents';
|
|
12
|
+
import { type LWWRegisterData } from '../crdt/lww-register.js';
|
|
13
|
+
import { type ORSetData } from '../crdt/or-set.js';
|
|
14
|
+
import type { CRDTPersistence } from '../persistence/crdt-persistence.js';
|
|
15
|
+
export interface SessionState {
|
|
16
|
+
status: 'active' | 'paused' | 'completed';
|
|
17
|
+
focus?: {
|
|
18
|
+
siteId?: string;
|
|
19
|
+
pageId?: string;
|
|
20
|
+
blockId?: string;
|
|
21
|
+
selection?: string[];
|
|
22
|
+
};
|
|
23
|
+
currentTask?: {
|
|
24
|
+
id: string;
|
|
25
|
+
description: string;
|
|
26
|
+
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
27
|
+
progress?: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface WorkingMemoryData {
|
|
31
|
+
sessionId: string;
|
|
32
|
+
nodeId: string;
|
|
33
|
+
context: LWWRegisterData<Record<string, unknown>>;
|
|
34
|
+
sessionState: LWWRegisterData<SessionState>;
|
|
35
|
+
activeAgents: ORSetData<AgentDefinition>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Working Memory for session-scoped agent state.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const memory = new WorkingMemory('session-123', 'node-abc')
|
|
43
|
+
* await memory.load()
|
|
44
|
+
*
|
|
45
|
+
* memory.setContext({ userId: 'user-1', theme: 'dark' })
|
|
46
|
+
* const agentTag = memory.addAgent(agentConfig)
|
|
47
|
+
* memory.updateSessionState({ status: 'active' })
|
|
48
|
+
*
|
|
49
|
+
* await memory.save()
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare class WorkingMemory {
|
|
53
|
+
private context;
|
|
54
|
+
private sessionState;
|
|
55
|
+
private activeAgents;
|
|
56
|
+
private sessionId;
|
|
57
|
+
private nodeId;
|
|
58
|
+
private persistence?;
|
|
59
|
+
/**
|
|
60
|
+
* Creates a new WorkingMemory instance.
|
|
61
|
+
*
|
|
62
|
+
* @param sessionId - Unique session identifier
|
|
63
|
+
* @param nodeId - Unique node identifier (for CRDT operations)
|
|
64
|
+
* @param persistence - Optional persistence adapter
|
|
65
|
+
*/
|
|
66
|
+
constructor(sessionId: string, nodeId: string, persistence?: CRDTPersistence);
|
|
67
|
+
/**
|
|
68
|
+
* Sets the entire context object.
|
|
69
|
+
*
|
|
70
|
+
* @param context - Context data to set
|
|
71
|
+
*/
|
|
72
|
+
/**
|
|
73
|
+
* Sets the entire context object.
|
|
74
|
+
*
|
|
75
|
+
* **Performance Note**: This replaces the entire context. For partial updates,
|
|
76
|
+
* use `updateContext()` or `setContextValue()`.
|
|
77
|
+
*
|
|
78
|
+
* **Validation**: The context is validated by LWWRegister (which clones values),
|
|
79
|
+
* but for additional security, consider validating before calling this method.
|
|
80
|
+
*
|
|
81
|
+
* @param context - The complete context object
|
|
82
|
+
*/
|
|
83
|
+
setContext(context: Record<string, unknown>): void;
|
|
84
|
+
/**
|
|
85
|
+
* Gets the current context.
|
|
86
|
+
*
|
|
87
|
+
* @returns Current context object
|
|
88
|
+
*/
|
|
89
|
+
getContext(): Record<string, unknown>;
|
|
90
|
+
/**
|
|
91
|
+
* Updates context with partial data.
|
|
92
|
+
* Merges with existing context.
|
|
93
|
+
*
|
|
94
|
+
* @param updates - Partial context updates
|
|
95
|
+
*/
|
|
96
|
+
updateContext(updates: Partial<Record<string, unknown>>): void;
|
|
97
|
+
/**
|
|
98
|
+
* Gets a specific context value.
|
|
99
|
+
*
|
|
100
|
+
* @param key - Context key
|
|
101
|
+
* @returns Context value or undefined
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* Gets a specific context value by key.
|
|
105
|
+
*
|
|
106
|
+
* **Immutability Guarantee**: Returns a deep clone of object/array values to prevent external mutations.
|
|
107
|
+
* Primitives (strings, numbers, booleans, null) are returned as-is.
|
|
108
|
+
*
|
|
109
|
+
* @param key - The context key to retrieve
|
|
110
|
+
* @returns The context value (cloned if object/array, direct reference if primitive)
|
|
111
|
+
*/
|
|
112
|
+
getContextValue(key: string): unknown;
|
|
113
|
+
/**
|
|
114
|
+
* Sets a specific context value.
|
|
115
|
+
*
|
|
116
|
+
* **Performance Note**: This method clones the entire context object to update
|
|
117
|
+
* a single key. For multiple updates, use `updateContext()` instead.
|
|
118
|
+
*
|
|
119
|
+
* @param key - Context key
|
|
120
|
+
* @param value - Context value
|
|
121
|
+
*/
|
|
122
|
+
setContextValue(key: string, value: unknown): void;
|
|
123
|
+
/**
|
|
124
|
+
* Adds an agent to the active agents set.
|
|
125
|
+
*
|
|
126
|
+
* @param agent - Agent configuration
|
|
127
|
+
* @returns Unique tag for this agent addition
|
|
128
|
+
*/
|
|
129
|
+
addAgent(agent: AgentDefinition): string;
|
|
130
|
+
/**
|
|
131
|
+
* Removes an agent by tag.
|
|
132
|
+
*
|
|
133
|
+
* @param tag - Tag returned from addAgent
|
|
134
|
+
* @returns true if agent was removed
|
|
135
|
+
*/
|
|
136
|
+
removeAgent(tag: string): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Removes an agent by ID (removes all instances).
|
|
139
|
+
*
|
|
140
|
+
* @param agentId - Agent ID to remove
|
|
141
|
+
* @returns Number of instances removed
|
|
142
|
+
*/
|
|
143
|
+
removeAgentById(agentId: string): number;
|
|
144
|
+
/**
|
|
145
|
+
* Gets all active agents.
|
|
146
|
+
*
|
|
147
|
+
* @returns Array of active agent configurations
|
|
148
|
+
*/
|
|
149
|
+
getActiveAgents(): AgentDefinition[];
|
|
150
|
+
/**
|
|
151
|
+
* Checks if an agent is active.
|
|
152
|
+
*
|
|
153
|
+
* @param agentId - Agent ID to check
|
|
154
|
+
* @returns true if agent is active
|
|
155
|
+
*/
|
|
156
|
+
hasAgent(agentId: string): boolean;
|
|
157
|
+
/**
|
|
158
|
+
* Updates session state with partial data.
|
|
159
|
+
*
|
|
160
|
+
* @param state - Partial session state
|
|
161
|
+
*/
|
|
162
|
+
updateSessionState(state: Partial<SessionState>): void;
|
|
163
|
+
/**
|
|
164
|
+
* Gets the current session state.
|
|
165
|
+
*
|
|
166
|
+
* @returns Current session state
|
|
167
|
+
*/
|
|
168
|
+
getSessionState(): SessionState;
|
|
169
|
+
/**
|
|
170
|
+
* Merges another WorkingMemory into this one.
|
|
171
|
+
* Uses CRDT merge operations for conflict resolution.
|
|
172
|
+
*
|
|
173
|
+
* @param other - WorkingMemory to merge
|
|
174
|
+
* @returns New merged WorkingMemory
|
|
175
|
+
*/
|
|
176
|
+
merge(other: WorkingMemory): WorkingMemory;
|
|
177
|
+
/**
|
|
178
|
+
* Loads state from database.
|
|
179
|
+
*
|
|
180
|
+
* @throws Error if persistence is not configured
|
|
181
|
+
*/
|
|
182
|
+
load(): Promise<void>;
|
|
183
|
+
/**
|
|
184
|
+
* Saves state to database.
|
|
185
|
+
*
|
|
186
|
+
* @throws Error if persistence is not configured
|
|
187
|
+
*/
|
|
188
|
+
save(): Promise<void>;
|
|
189
|
+
/**
|
|
190
|
+
* Serializes WorkingMemory to plain object.
|
|
191
|
+
*
|
|
192
|
+
* @returns Serialized data
|
|
193
|
+
*/
|
|
194
|
+
toData(): WorkingMemoryData;
|
|
195
|
+
/**
|
|
196
|
+
* Deserializes WorkingMemory from plain object.
|
|
197
|
+
*
|
|
198
|
+
* @param data - Serialized data
|
|
199
|
+
* @param persistence - Optional persistence adapter
|
|
200
|
+
* @returns New WorkingMemory instance
|
|
201
|
+
*/
|
|
202
|
+
static fromData(data: WorkingMemoryData, persistence?: CRDTPersistence): WorkingMemory;
|
|
203
|
+
/**
|
|
204
|
+
* Creates a copy of this WorkingMemory.
|
|
205
|
+
*
|
|
206
|
+
* @returns New WorkingMemory with same state
|
|
207
|
+
*/
|
|
208
|
+
clone(): WorkingMemory;
|
|
209
|
+
/**
|
|
210
|
+
* Gets the session ID.
|
|
211
|
+
*/
|
|
212
|
+
getSessionId(): string;
|
|
213
|
+
/**
|
|
214
|
+
* Gets the node ID.
|
|
215
|
+
*/
|
|
216
|
+
getNodeId(): string;
|
|
217
|
+
/**
|
|
218
|
+
* Gets the context register's timestamp.
|
|
219
|
+
* Used for proper CRDT merge semantics.
|
|
220
|
+
*
|
|
221
|
+
* @returns Timestamp of the last context update
|
|
222
|
+
*/
|
|
223
|
+
getContextTimestamp(): number;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=working-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-memory.d.ts","sourceRoot":"","sources":["../../../src/memory/stores/working-memory.ts"],"names":[],"mappings":"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"}
|