@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,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Media Tools
|
|
3
|
+
* Tools for managing media files (images, videos, documents)
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod/v4';
|
|
6
|
+
/**
|
|
7
|
+
* Tool: List media files
|
|
8
|
+
* Browse the media library
|
|
9
|
+
*/
|
|
10
|
+
export const listMediaTool = {
|
|
11
|
+
name: 'list_media',
|
|
12
|
+
description: 'Get a list of media files from the CMS media library. Use this to browse uploaded images, videos, and documents.',
|
|
13
|
+
parameters: z.object({
|
|
14
|
+
page: z.number().optional().describe('Page number for pagination (default: 1)'),
|
|
15
|
+
limit: z.number().optional().describe('Number of results per page (default: 10)'),
|
|
16
|
+
mimeType: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Filter by MIME type (e.g., "image/jpeg", "image/png", "video/mp4")'),
|
|
20
|
+
}),
|
|
21
|
+
async execute(params) {
|
|
22
|
+
const { page: _page = 1, limit: _limit = 10, mimeType: _mimeType, } = params;
|
|
23
|
+
try {
|
|
24
|
+
// API client will be injected at runtime
|
|
25
|
+
// This will use the collection tools to query the media collection
|
|
26
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
error: `Failed to list media: ${error instanceof Error ? error.message : String(error)}`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Tool: Get media by ID
|
|
38
|
+
* Retrieve a specific media file
|
|
39
|
+
*/
|
|
40
|
+
export const getMediaTool = {
|
|
41
|
+
name: 'get_media',
|
|
42
|
+
description: 'Get details of a specific media file by ID, including URL, filename, and metadata.',
|
|
43
|
+
parameters: z.object({
|
|
44
|
+
id: z.string().describe('The media file ID'),
|
|
45
|
+
}),
|
|
46
|
+
async execute(params) {
|
|
47
|
+
const { id: _id } = params;
|
|
48
|
+
try {
|
|
49
|
+
// API client will be injected at runtime
|
|
50
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
error: `Failed to get media: ${error instanceof Error ? error.message : String(error)}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Tool: Upload media
|
|
62
|
+
* Upload a new media file
|
|
63
|
+
*/
|
|
64
|
+
export const uploadMediaTool = {
|
|
65
|
+
name: 'upload_media',
|
|
66
|
+
description: 'Upload a new media file (image, video, or document) to the CMS. The file should be provided as a base64-encoded string.',
|
|
67
|
+
parameters: z.object({
|
|
68
|
+
filename: z.string().describe('The filename (e.g., "logo.png")'),
|
|
69
|
+
mimeType: z.string().describe('The MIME type (e.g., "image/png", "image/jpeg")'),
|
|
70
|
+
data: z
|
|
71
|
+
.string()
|
|
72
|
+
.describe('The file content as a base64-encoded string or data URL (data:image/png;base64,...)'),
|
|
73
|
+
alt: z.string().optional().describe('Alt text for accessibility (recommended for images)'),
|
|
74
|
+
}),
|
|
75
|
+
async execute(params) {
|
|
76
|
+
const { filename: _filename, mimeType: _mimeType, data: _data, alt: _alt, } = params;
|
|
77
|
+
try {
|
|
78
|
+
// API client will be injected at runtime
|
|
79
|
+
// This will handle file upload to storage and create media document
|
|
80
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return {
|
|
84
|
+
success: false,
|
|
85
|
+
error: `Failed to upload media: ${error instanceof Error ? error.message : String(error)}`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Tool: Delete media
|
|
92
|
+
* Remove a media file from the library
|
|
93
|
+
*/
|
|
94
|
+
export const deleteMediaTool = {
|
|
95
|
+
name: 'delete_media',
|
|
96
|
+
description: 'Delete a media file from the CMS media library. This removes both the database record and the file from storage. This action is permanent.',
|
|
97
|
+
parameters: z.object({
|
|
98
|
+
id: z.string().describe('The media file ID to delete'),
|
|
99
|
+
}),
|
|
100
|
+
async execute(params) {
|
|
101
|
+
const { id: _id } = params;
|
|
102
|
+
try {
|
|
103
|
+
// API client will be injected at runtime
|
|
104
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
error: `Failed to delete media: ${error instanceof Error ? error.message : String(error)}`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Tool: Update media metadata
|
|
116
|
+
* Update media file metadata (alt text, title, etc.)
|
|
117
|
+
*/
|
|
118
|
+
export const updateMediaTool = {
|
|
119
|
+
name: 'update_media',
|
|
120
|
+
description: 'Update metadata for a media file such as alt text, title, or description. Does not change the actual file.',
|
|
121
|
+
parameters: z.object({
|
|
122
|
+
id: z.string().describe('The media file ID'),
|
|
123
|
+
alt: z.string().optional().describe('Alt text for accessibility'),
|
|
124
|
+
title: z.string().optional().describe('Title/name of the media'),
|
|
125
|
+
description: z.string().optional().describe('Description of the media content'),
|
|
126
|
+
}),
|
|
127
|
+
async execute(params) {
|
|
128
|
+
const { id: _id, alt: _alt, title: _title, description: _description, } = params;
|
|
129
|
+
try {
|
|
130
|
+
// API client will be injected at runtime
|
|
131
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
error: `Failed to update media: ${error instanceof Error ? error.message : String(error)}`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS User Tools
|
|
3
|
+
* Tools for user management and authentication
|
|
4
|
+
*/
|
|
5
|
+
import type { Tool } from '../base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Tool: Get current user
|
|
8
|
+
* Retrieve information about the logged-in user
|
|
9
|
+
*/
|
|
10
|
+
export declare const getCurrentUserTool: Tool;
|
|
11
|
+
/**
|
|
12
|
+
* Tool: List users
|
|
13
|
+
* Get all users (admin only)
|
|
14
|
+
*/
|
|
15
|
+
export declare const listUsersTool: Tool;
|
|
16
|
+
/**
|
|
17
|
+
* Tool: Create user
|
|
18
|
+
* Create a new user account
|
|
19
|
+
*/
|
|
20
|
+
export declare const createUserTool: Tool;
|
|
21
|
+
/**
|
|
22
|
+
* Tool: Update user
|
|
23
|
+
* Update user account information
|
|
24
|
+
*/
|
|
25
|
+
export declare const updateUserTool: Tool;
|
|
26
|
+
/**
|
|
27
|
+
* Tool: Delete user
|
|
28
|
+
* Remove a user account
|
|
29
|
+
*/
|
|
30
|
+
export declare const deleteUserTool: Tool;
|
|
31
|
+
//# sourceMappingURL=user-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/cms/user-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,YAAY,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,IAoBhC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,IAiC3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,IAsC5B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,IAsC5B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,IAuB5B,CAAA"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS User Tools
|
|
3
|
+
* Tools for user management and authentication
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod/v4';
|
|
6
|
+
/**
|
|
7
|
+
* Tool: Get current user
|
|
8
|
+
* Retrieve information about the logged-in user
|
|
9
|
+
*/
|
|
10
|
+
export const getCurrentUserTool = {
|
|
11
|
+
name: 'get_current_user',
|
|
12
|
+
description: 'Get information about the currently logged-in user, including their role, email, and permissions.',
|
|
13
|
+
parameters: z.object({}),
|
|
14
|
+
async execute() {
|
|
15
|
+
try {
|
|
16
|
+
// API client will be injected at runtime
|
|
17
|
+
// This will check auth token and return user data
|
|
18
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
error: `Failed to get current user: ${error instanceof Error ? error.message : String(error)}`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Tool: List users
|
|
30
|
+
* Get all users (admin only)
|
|
31
|
+
*/
|
|
32
|
+
export const listUsersTool = {
|
|
33
|
+
name: 'list_users',
|
|
34
|
+
description: 'Get a list of all users in the system. This is typically restricted to admin users only.',
|
|
35
|
+
parameters: z.object({
|
|
36
|
+
page: z.number().optional().describe('Page number for pagination (default: 1)'),
|
|
37
|
+
limit: z.number().optional().describe('Number of results per page (default: 10)'),
|
|
38
|
+
role: z.string().optional().describe('Filter by user role (e.g., "admin", "editor", "user")'),
|
|
39
|
+
}),
|
|
40
|
+
async execute(params) {
|
|
41
|
+
const { page: _page = 1, limit: _limit = 10, role: _role, } = params;
|
|
42
|
+
try {
|
|
43
|
+
// API client will be injected at runtime
|
|
44
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
error: `Failed to list users: ${error instanceof Error ? error.message : String(error)}`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Tool: Create user
|
|
56
|
+
* Create a new user account
|
|
57
|
+
*/
|
|
58
|
+
export const createUserTool = {
|
|
59
|
+
name: 'create_user',
|
|
60
|
+
description: 'Create a new user account. Typically requires admin permissions.',
|
|
61
|
+
parameters: z.object({
|
|
62
|
+
email: z.string().email().describe('User email address'),
|
|
63
|
+
password: z.string().min(8).describe('User password (minimum 8 characters)'),
|
|
64
|
+
name: z.string().optional().describe('User full name'),
|
|
65
|
+
role: z
|
|
66
|
+
.string()
|
|
67
|
+
.optional()
|
|
68
|
+
.describe('User role (e.g., "admin", "editor", "user"). Defaults to "user"'),
|
|
69
|
+
}),
|
|
70
|
+
async execute(params) {
|
|
71
|
+
const { email: _email, password: _password, name: _name, role: _role, } = params;
|
|
72
|
+
try {
|
|
73
|
+
// API client will be injected at runtime
|
|
74
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return {
|
|
78
|
+
success: false,
|
|
79
|
+
error: `Failed to create user: ${error instanceof Error ? error.message : String(error)}`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Tool: Update user
|
|
86
|
+
* Update user account information
|
|
87
|
+
*/
|
|
88
|
+
export const updateUserTool = {
|
|
89
|
+
name: 'update_user',
|
|
90
|
+
description: 'Update a user account. Users can update their own account, admins can update any.',
|
|
91
|
+
parameters: z.object({
|
|
92
|
+
id: z.string().describe('User ID to update'),
|
|
93
|
+
email: z.string().email().optional().describe('New email address'),
|
|
94
|
+
name: z.string().optional().describe('New full name'),
|
|
95
|
+
role: z.string().optional().describe('New role (admin only)'),
|
|
96
|
+
password: z.string().min(8).optional().describe('New password'),
|
|
97
|
+
}),
|
|
98
|
+
async execute(params) {
|
|
99
|
+
const { id: _id, email: _email, name: _name, role: _role, password: _password, } = params;
|
|
100
|
+
try {
|
|
101
|
+
// API client will be injected at runtime
|
|
102
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
error: `Failed to update user: ${error instanceof Error ? error.message : String(error)}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Tool: Delete user
|
|
114
|
+
* Remove a user account
|
|
115
|
+
*/
|
|
116
|
+
export const deleteUserTool = {
|
|
117
|
+
name: 'delete_user',
|
|
118
|
+
description: 'Delete a user account. Typically requires admin permissions. This action is permanent.',
|
|
119
|
+
parameters: z.object({
|
|
120
|
+
id: z.string().describe('User ID to delete'),
|
|
121
|
+
}),
|
|
122
|
+
async execute(params) {
|
|
123
|
+
const { id: _id } = params;
|
|
124
|
+
try {
|
|
125
|
+
// API client will be injected at runtime
|
|
126
|
+
throw new Error('API client not configured. This tool must be registered with an API client instance.');
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
return {
|
|
130
|
+
success: false,
|
|
131
|
+
error: `Failed to delete user: ${error instanceof Error ? error.message : String(error)}`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Call Deduplicator
|
|
3
|
+
*
|
|
4
|
+
* Prevents redundant tool invocations within a single agent run.
|
|
5
|
+
* Key: deterministic hash of (toolName, sorted params JSON).
|
|
6
|
+
*
|
|
7
|
+
* AnythingLLM lesson: without deduplication, an agent in a loop will
|
|
8
|
+
* make the same web scrape or DB query dozens of times per response cycle.
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolResult } from './base.js';
|
|
11
|
+
export declare class ToolCallDeduplicator {
|
|
12
|
+
private cache;
|
|
13
|
+
isDuplicate(toolName: string, params: unknown): boolean;
|
|
14
|
+
getResult(toolName: string, params: unknown): ToolResult | undefined;
|
|
15
|
+
record(toolName: string, params: unknown, result: ToolResult): void;
|
|
16
|
+
clear(): void;
|
|
17
|
+
get size(): number;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=deduplicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplicator.d.ts","sourceRoot":"","sources":["../../src/tools/deduplicator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AA8B3C,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAqC;IAElD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAIvD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS;IAIpE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAInE,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Call Deduplicator
|
|
3
|
+
*
|
|
4
|
+
* Prevents redundant tool invocations within a single agent run.
|
|
5
|
+
* Key: deterministic hash of (toolName, sorted params JSON).
|
|
6
|
+
*
|
|
7
|
+
* AnythingLLM lesson: without deduplication, an agent in a loop will
|
|
8
|
+
* make the same web scrape or DB query dozens of times per response cycle.
|
|
9
|
+
*/
|
|
10
|
+
function stableStringify(obj) {
|
|
11
|
+
if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
12
|
+
return JSON.stringify(obj);
|
|
13
|
+
}
|
|
14
|
+
const record = obj;
|
|
15
|
+
const sorted = Object.keys(record)
|
|
16
|
+
.sort()
|
|
17
|
+
.reduce((acc, k) => {
|
|
18
|
+
acc[k] = record[k];
|
|
19
|
+
return acc;
|
|
20
|
+
}, {});
|
|
21
|
+
return JSON.stringify(sorted);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compute a stable cache key for a (toolName, params) pair.
|
|
25
|
+
* Uses a simple djb2-style hash — no crypto dep required.
|
|
26
|
+
*/
|
|
27
|
+
function hashKey(toolName, params) {
|
|
28
|
+
const raw = `${toolName}::${stableStringify(params)}`;
|
|
29
|
+
// djb2 hash
|
|
30
|
+
let hash = 5381;
|
|
31
|
+
for (let i = 0; i < raw.length; i++) {
|
|
32
|
+
hash = ((hash << 5) + hash + (raw.charCodeAt(i) | 0)) >>> 0;
|
|
33
|
+
}
|
|
34
|
+
return hash.toString(16);
|
|
35
|
+
}
|
|
36
|
+
export class ToolCallDeduplicator {
|
|
37
|
+
cache = new Map();
|
|
38
|
+
isDuplicate(toolName, params) {
|
|
39
|
+
return this.cache.has(hashKey(toolName, params));
|
|
40
|
+
}
|
|
41
|
+
getResult(toolName, params) {
|
|
42
|
+
return this.cache.get(hashKey(toolName, params));
|
|
43
|
+
}
|
|
44
|
+
record(toolName, params, result) {
|
|
45
|
+
this.cache.set(hashKey(toolName, params), result);
|
|
46
|
+
}
|
|
47
|
+
clear() {
|
|
48
|
+
this.cache.clear();
|
|
49
|
+
}
|
|
50
|
+
get size() {
|
|
51
|
+
return this.cache.size;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document Summarizer Tool
|
|
3
|
+
*
|
|
4
|
+
* Fetches all chunks for a RAG document and either returns them directly
|
|
5
|
+
* (if short enough) or asks the LLM for a summary.
|
|
6
|
+
*/
|
|
7
|
+
import type { Database } from '@revealui/db/client';
|
|
8
|
+
import type { LLMClient } from '../llm/client.js';
|
|
9
|
+
import type { Tool } from './base.js';
|
|
10
|
+
export declare function createDocumentSummarizerTool(_db: Database, llmClient: LLMClient): Tool;
|
|
11
|
+
//# sourceMappingURL=document-summarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-summarizer.d.ts","sourceRoot":"","sources":["../../src/tools/document-summarizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,WAAW,CAAA;AAUjD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA8EtF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document Summarizer Tool
|
|
3
|
+
*
|
|
4
|
+
* Fetches all chunks for a RAG document and either returns them directly
|
|
5
|
+
* (if short enough) or asks the LLM for a summary.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod/v4';
|
|
8
|
+
import { RagVectorService } from '../ingestion/rag-vector-service.js';
|
|
9
|
+
const SummarizerParams = z.object({
|
|
10
|
+
documentId: z.string().min(1),
|
|
11
|
+
focusQuestion: z.string().optional(),
|
|
12
|
+
});
|
|
13
|
+
const SHORT_DOCUMENT_TOKENS = 4000;
|
|
14
|
+
const CHARS_PER_TOKEN = 4;
|
|
15
|
+
export function createDocumentSummarizerTool(_db, llmClient) {
|
|
16
|
+
const vectorService = new RagVectorService();
|
|
17
|
+
return {
|
|
18
|
+
name: 'document_summarize',
|
|
19
|
+
description: 'Summarize a RAG document by ID. Optionally focus the summary on a specific question. Use when a web_scrape result was truncated.',
|
|
20
|
+
parameters: SummarizerParams,
|
|
21
|
+
async execute(params) {
|
|
22
|
+
const start = Date.now();
|
|
23
|
+
const parsed = SummarizerParams.safeParse(params);
|
|
24
|
+
if (!parsed.success) {
|
|
25
|
+
return { success: false, error: `Invalid parameters: ${parsed.error.message}` };
|
|
26
|
+
}
|
|
27
|
+
const { documentId, focusQuestion } = parsed.data;
|
|
28
|
+
try {
|
|
29
|
+
const chunks = await vectorService.getChunksByDocument(documentId);
|
|
30
|
+
if (chunks.length === 0) {
|
|
31
|
+
return { success: false, error: `Document "${documentId}" not found or has no chunks` };
|
|
32
|
+
}
|
|
33
|
+
const fullContent = chunks.map((c) => c.content).join('\n\n');
|
|
34
|
+
const estimatedTokens = Math.ceil(fullContent.length / CHARS_PER_TOKEN);
|
|
35
|
+
// Short document — return directly without LLM call
|
|
36
|
+
if (estimatedTokens <= SHORT_DOCUMENT_TOKENS) {
|
|
37
|
+
return {
|
|
38
|
+
success: true,
|
|
39
|
+
data: {
|
|
40
|
+
documentId,
|
|
41
|
+
summary: fullContent,
|
|
42
|
+
wordCount: fullContent.split(/\s+/).filter((w) => w.length > 0).length,
|
|
43
|
+
summarized: false,
|
|
44
|
+
},
|
|
45
|
+
metadata: { executionTime: Date.now() - start },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Long document — summarize with LLM
|
|
49
|
+
const focusInstruction = focusQuestion
|
|
50
|
+
? `Focus especially on answering: "${focusQuestion}"`
|
|
51
|
+
: '';
|
|
52
|
+
const response = await llmClient.chat([
|
|
53
|
+
{
|
|
54
|
+
role: 'system',
|
|
55
|
+
content: `Summarize the following document, preserving key facts, figures, and conclusions. ${focusInstruction}`.trim(),
|
|
56
|
+
},
|
|
57
|
+
{ role: 'user', content: fullContent },
|
|
58
|
+
]);
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
data: {
|
|
62
|
+
documentId,
|
|
63
|
+
summary: response.content,
|
|
64
|
+
wordCount: response.content.split(/\s+/).filter((w) => w.length > 0).length,
|
|
65
|
+
summarized: true,
|
|
66
|
+
chunkCount: chunks.length,
|
|
67
|
+
},
|
|
68
|
+
metadata: {
|
|
69
|
+
executionTime: Date.now() - start,
|
|
70
|
+
tokensUsed: response.usage?.totalTokens,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: error instanceof Error ? error.message : String(error),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Adapter
|
|
3
|
+
*
|
|
4
|
+
* Bridges MCP (Model Context Protocol) servers to the tool system
|
|
5
|
+
*/
|
|
6
|
+
import type { Tool } from './base.js';
|
|
7
|
+
export interface MCPTool {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: 'object';
|
|
12
|
+
properties: Record<string, unknown>;
|
|
13
|
+
required?: string[];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface MCPClient {
|
|
17
|
+
listTools(): Promise<MCPTool[]>;
|
|
18
|
+
callTool(name: string, args: unknown): Promise<unknown>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Interface for an MCP tool source (e.g. MCPHypervisor from @revealui/mcp).
|
|
22
|
+
* Using an interface here keeps @revealui/ai decoupled from @revealui/mcp.
|
|
23
|
+
*/
|
|
24
|
+
export interface MCPToolSource {
|
|
25
|
+
getAllTools(): Array<{
|
|
26
|
+
namespacedName: string;
|
|
27
|
+
serverName: string;
|
|
28
|
+
tool: MCPTool;
|
|
29
|
+
}>;
|
|
30
|
+
callTool(serverName: string, toolName: string, args: unknown): Promise<unknown>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a Tool from an MCP tool definition
|
|
34
|
+
*/
|
|
35
|
+
export declare function createToolFromMCP(mcpTool: MCPTool, mcpClient: MCPClient): Tool;
|
|
36
|
+
/**
|
|
37
|
+
* Register all MCP tools in the registry
|
|
38
|
+
*/
|
|
39
|
+
export declare function registerMCPTools(mcpClient: MCPClient, registry: {
|
|
40
|
+
register(tool: Tool): void;
|
|
41
|
+
}): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Serialize an MCP tool result safely:
|
|
44
|
+
* - bigint values → string (JSON.stringify fails on bigint)
|
|
45
|
+
* - Circular references → replaced with "[Circular]"
|
|
46
|
+
*/
|
|
47
|
+
export declare function serializeMCPResult(value: unknown): unknown;
|
|
48
|
+
/**
|
|
49
|
+
* Discover all tools from a running MCPHypervisor (or any MCPToolSource)
|
|
50
|
+
* and return them as RevealUI Tool instances.
|
|
51
|
+
*
|
|
52
|
+
* Tool names use the hypervisor's namespacing (@@mcp_{server}_{tool}) so
|
|
53
|
+
* collisions across servers are impossible.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import { MCPHypervisor } from '@revealui/mcp'
|
|
58
|
+
* import { discoverMCPTools } from '@revealui/ai'
|
|
59
|
+
*
|
|
60
|
+
* const hypervisor = MCPHypervisor.getInstance()
|
|
61
|
+
* const tools = discoverMCPTools(hypervisor)
|
|
62
|
+
* agent.tools.push(...tools)
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function discoverMCPTools(source: MCPToolSource): Tool[];
|
|
66
|
+
//# sourceMappingURL=mcp-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,WAAW,CAAA;AAEjD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAA;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACnC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KACpB,CAAA;CACF;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACxD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,IAAI,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACnF,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAChF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAuB9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,GACvC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAa1D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,CAkC9D"}
|