@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,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Activator
|
|
3
|
+
*
|
|
4
|
+
* Determines which skills to activate based on context.
|
|
5
|
+
*/
|
|
6
|
+
import { generateEmbedding } from '../../embeddings/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Cosine similarity between two vectors.
|
|
9
|
+
*/
|
|
10
|
+
function cosineSimilarity(a, b) {
|
|
11
|
+
if (a.length !== b.length) {
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
let dotProduct = 0;
|
|
15
|
+
let normA = 0;
|
|
16
|
+
let normB = 0;
|
|
17
|
+
for (let i = 0; i < a.length; i++) {
|
|
18
|
+
const aVal = a[i] ?? 0;
|
|
19
|
+
const bVal = b[i] ?? 0;
|
|
20
|
+
dotProduct += aVal * bVal;
|
|
21
|
+
normA += aVal * aVal;
|
|
22
|
+
normB += bVal * bVal;
|
|
23
|
+
}
|
|
24
|
+
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
25
|
+
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Skill activator for context-based skill activation.
|
|
29
|
+
*/
|
|
30
|
+
export class SkillActivator {
|
|
31
|
+
registry;
|
|
32
|
+
semanticThreshold;
|
|
33
|
+
maxAutoActivate;
|
|
34
|
+
enableSemantic;
|
|
35
|
+
constructor(config) {
|
|
36
|
+
this.registry = config.registry;
|
|
37
|
+
this.semanticThreshold = config.semanticThreshold ?? 0.7;
|
|
38
|
+
this.maxAutoActivate = config.maxAutoActivate ?? 3;
|
|
39
|
+
this.enableSemantic = config.enableSemantic ?? true;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Activate skills based on context.
|
|
43
|
+
*
|
|
44
|
+
* Activation methods (in priority order):
|
|
45
|
+
* 1. Explicit: /skill-name syntax
|
|
46
|
+
* 2. Semantic: Embedding similarity match
|
|
47
|
+
* 3. File-match: Based on current file types
|
|
48
|
+
* 4. Project-type: Based on project configuration
|
|
49
|
+
*/
|
|
50
|
+
async activate(context) {
|
|
51
|
+
const activatedSkills = [];
|
|
52
|
+
const activationReasons = {};
|
|
53
|
+
// 1. Handle explicit skill requests (/skill-name)
|
|
54
|
+
if (context.explicitSkills?.length) {
|
|
55
|
+
for (const name of context.explicitSkills) {
|
|
56
|
+
const skill = await this.registry.loadSkill(name);
|
|
57
|
+
if (skill) {
|
|
58
|
+
activatedSkills.push(skill);
|
|
59
|
+
activationReasons[name] = {
|
|
60
|
+
type: 'explicit',
|
|
61
|
+
reason: `Explicitly requested via /${name}`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// 2. Semantic activation based on task description
|
|
67
|
+
if (this.enableSemantic && context.taskDescription) {
|
|
68
|
+
const semanticMatches = await this.findSemanticMatches(context.taskDescription, activatedSkills.map((s) => s.metadata.name));
|
|
69
|
+
for (const match of semanticMatches.slice(0, this.maxAutoActivate)) {
|
|
70
|
+
if (!activationReasons[match.skill.metadata.name]) {
|
|
71
|
+
activatedSkills.push(match.skill);
|
|
72
|
+
activationReasons[match.skill.metadata.name] = {
|
|
73
|
+
type: 'semantic',
|
|
74
|
+
score: match.score,
|
|
75
|
+
reason: `Matched task description with ${(match.score * 100).toFixed(1)}% similarity`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// 3. File-type based activation
|
|
81
|
+
if (context.currentFiles?.length) {
|
|
82
|
+
const fileMatches = this.findFileTypeMatches(context.currentFiles, activatedSkills.map((s) => s.metadata.name));
|
|
83
|
+
for (const match of fileMatches) {
|
|
84
|
+
if (!activationReasons[match.skill.metadata.name]) {
|
|
85
|
+
activatedSkills.push(match.skill);
|
|
86
|
+
activationReasons[match.skill.metadata.name] = {
|
|
87
|
+
type: 'file-match',
|
|
88
|
+
reason: `Matched file pattern: ${match.pattern}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// 4. Project-type based activation
|
|
94
|
+
if (context.projectType) {
|
|
95
|
+
const projectMatches = this.findProjectTypeMatches(context.projectType, activatedSkills.map((s) => s.metadata.name));
|
|
96
|
+
for (const match of projectMatches) {
|
|
97
|
+
if (!activationReasons[match.skill.metadata.name]) {
|
|
98
|
+
activatedSkills.push(match.skill);
|
|
99
|
+
activationReasons[match.skill.metadata.name] = {
|
|
100
|
+
type: 'project-type',
|
|
101
|
+
reason: `Matched project type: ${context.projectType}`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return { activatedSkills, activationReasons };
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Find skills by semantic similarity to a query.
|
|
110
|
+
*/
|
|
111
|
+
async findSemanticMatches(query, excludeNames) {
|
|
112
|
+
const queryEmbedding = await generateEmbedding(query);
|
|
113
|
+
const skills = this.registry.getAll();
|
|
114
|
+
const matches = [];
|
|
115
|
+
for (const skill of skills) {
|
|
116
|
+
if (excludeNames.includes(skill.metadata.name))
|
|
117
|
+
continue;
|
|
118
|
+
// Generate embedding if not present
|
|
119
|
+
if (!skill.embedding) {
|
|
120
|
+
const textForEmbedding = `${skill.metadata.name}: ${skill.metadata.description}\n${skill.instructions.slice(0, 500)}`;
|
|
121
|
+
const result = await generateEmbedding(textForEmbedding);
|
|
122
|
+
skill.embedding = result.vector;
|
|
123
|
+
}
|
|
124
|
+
const score = cosineSimilarity(queryEmbedding.vector, skill.embedding);
|
|
125
|
+
if (score >= this.semanticThreshold) {
|
|
126
|
+
matches.push({ skill, score });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return matches.sort((a, b) => b.score - a.score);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Find skills that match file types.
|
|
133
|
+
*/
|
|
134
|
+
findFileTypeMatches(files, excludeNames) {
|
|
135
|
+
const skills = this.registry.getAll();
|
|
136
|
+
const matches = [];
|
|
137
|
+
// Extract file extensions
|
|
138
|
+
const extensions = new Set(files
|
|
139
|
+
.map((f) => {
|
|
140
|
+
const ext = f.split('.').pop()?.toLowerCase();
|
|
141
|
+
return ext ? `.${ext}` : '';
|
|
142
|
+
})
|
|
143
|
+
.filter(Boolean));
|
|
144
|
+
// Map extensions to skill tags
|
|
145
|
+
const extensionToTags = {
|
|
146
|
+
'.ts': ['typescript', 'node', 'frontend', 'backend'],
|
|
147
|
+
'.tsx': ['typescript', 'react', 'frontend'],
|
|
148
|
+
'.js': ['javascript', 'node', 'frontend', 'backend'],
|
|
149
|
+
'.jsx': ['javascript', 'react', 'frontend'],
|
|
150
|
+
'.py': ['python', 'backend', 'ml', 'data'],
|
|
151
|
+
'.rs': ['rust', 'backend', 'systems'],
|
|
152
|
+
'.go': ['golang', 'backend'],
|
|
153
|
+
'.sql': ['database', 'sql'],
|
|
154
|
+
'.css': ['css', 'frontend', 'styling'],
|
|
155
|
+
'.scss': ['sass', 'css', 'frontend', 'styling'],
|
|
156
|
+
'.md': ['documentation', 'markdown'],
|
|
157
|
+
};
|
|
158
|
+
const relevantTags = new Set();
|
|
159
|
+
for (const ext of extensions) {
|
|
160
|
+
const tags = extensionToTags[ext];
|
|
161
|
+
if (tags) {
|
|
162
|
+
for (const t of tags) {
|
|
163
|
+
relevantTags.add(t);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
for (const skill of skills) {
|
|
168
|
+
if (excludeNames.includes(skill.metadata.name))
|
|
169
|
+
continue;
|
|
170
|
+
const skillTags = skill.metadata.tags ?? [];
|
|
171
|
+
const matchingTags = skillTags.filter((t) => relevantTags.has(t.toLowerCase()));
|
|
172
|
+
if (matchingTags.length > 0) {
|
|
173
|
+
matches.push({
|
|
174
|
+
skill,
|
|
175
|
+
pattern: matchingTags.join(', '),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return matches;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Find skills that match project type.
|
|
183
|
+
*/
|
|
184
|
+
findProjectTypeMatches(projectType, excludeNames) {
|
|
185
|
+
const skills = this.registry.getAll();
|
|
186
|
+
const matches = [];
|
|
187
|
+
const projectTypeLower = projectType.toLowerCase();
|
|
188
|
+
for (const skill of skills) {
|
|
189
|
+
if (excludeNames.includes(skill.metadata.name))
|
|
190
|
+
continue;
|
|
191
|
+
const tags = skill.metadata.tags ?? [];
|
|
192
|
+
const description = skill.metadata.description.toLowerCase();
|
|
193
|
+
const name = skill.metadata.name.toLowerCase();
|
|
194
|
+
if (tags.some((t) => t.toLowerCase().includes(projectTypeLower)) ||
|
|
195
|
+
description.includes(projectTypeLower) ||
|
|
196
|
+
name.includes(projectTypeLower)) {
|
|
197
|
+
matches.push({ skill });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return matches;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Parse explicit skill references from user input.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* parseExplicitSkills("Please /react-best-practices fix this component")
|
|
207
|
+
* // ["react-best-practices"]
|
|
208
|
+
*/
|
|
209
|
+
static parseExplicitSkills(input) {
|
|
210
|
+
const matches = input.match(/\/([a-z0-9-]+)/g);
|
|
211
|
+
if (!matches)
|
|
212
|
+
return [];
|
|
213
|
+
return matches.map((m) => m.slice(1)); // Remove leading slash
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get all available skills for auto-completion.
|
|
217
|
+
*/
|
|
218
|
+
getAvailableSkills() {
|
|
219
|
+
return this.registry.getAllMetadata().map((m) => ({
|
|
220
|
+
name: m.name,
|
|
221
|
+
description: m.description,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Catalog Search
|
|
3
|
+
*
|
|
4
|
+
* Search the skills.sh catalog for skills.
|
|
5
|
+
*/
|
|
6
|
+
import type { VercelCatalogSkill, VercelSkillSearchResult } from './catalog-types.js';
|
|
7
|
+
import { type CatalogConfig } from './vercel-catalog.js';
|
|
8
|
+
/**
|
|
9
|
+
* Search options.
|
|
10
|
+
*/
|
|
11
|
+
export interface SearchOptions extends CatalogConfig {
|
|
12
|
+
/** Minimum relevance score (0-1) */
|
|
13
|
+
threshold?: number;
|
|
14
|
+
/** Maximum results to return */
|
|
15
|
+
limit?: number;
|
|
16
|
+
/** Filter by tags */
|
|
17
|
+
tags?: string[];
|
|
18
|
+
/** Filter by compatibility */
|
|
19
|
+
compatibility?: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Search the Vercel Skills catalog.
|
|
23
|
+
*
|
|
24
|
+
* Performs keyword-based search across skill names, descriptions, and tags.
|
|
25
|
+
*
|
|
26
|
+
* @param query - Search query
|
|
27
|
+
* @param options - Search options
|
|
28
|
+
* @returns Matching skills sorted by relevance
|
|
29
|
+
*/
|
|
30
|
+
export declare function searchVercelCatalog(query: string, options?: SearchOptions): Promise<VercelSkillSearchResult[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Get skills by tag.
|
|
33
|
+
*
|
|
34
|
+
* @param tag - Tag to filter by
|
|
35
|
+
* @param options - Catalog options
|
|
36
|
+
* @returns Skills with the specified tag
|
|
37
|
+
*/
|
|
38
|
+
export declare function getSkillsByTag(tag: string, options?: CatalogConfig): Promise<VercelCatalogSkill[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Get skills by compatibility.
|
|
41
|
+
*
|
|
42
|
+
* @param compatibility - Compatibility to filter by (e.g., "claude-code")
|
|
43
|
+
* @param options - Catalog options
|
|
44
|
+
* @returns Skills compatible with the specified tool
|
|
45
|
+
*/
|
|
46
|
+
export declare function getSkillsByCompatibility(compatibility: string, options?: CatalogConfig): Promise<VercelCatalogSkill[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Get a specific skill by ID.
|
|
49
|
+
*
|
|
50
|
+
* @param id - Skill ID (e.g., "vercel-labs/agent-skills/react-best-practices")
|
|
51
|
+
* @param options - Catalog options
|
|
52
|
+
* @returns Skill if found, undefined otherwise
|
|
53
|
+
*/
|
|
54
|
+
export declare function getSkillById(id: string, options?: CatalogConfig): Promise<VercelCatalogSkill | undefined>;
|
|
55
|
+
//# sourceMappingURL=catalog-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-search.d.ts","sourceRoot":"","sources":["../../../src/skills/catalog/catalog-search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AACrF,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,qBAAqB,CAAA;AAE5E;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IAEf,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CA8EpC;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAK/B;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAS/B;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAGzC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Catalog Search
|
|
3
|
+
*
|
|
4
|
+
* Search the skills.sh catalog for skills.
|
|
5
|
+
*/
|
|
6
|
+
import { fetchVercelCatalog } from './vercel-catalog.js';
|
|
7
|
+
/**
|
|
8
|
+
* Search the Vercel Skills catalog.
|
|
9
|
+
*
|
|
10
|
+
* Performs keyword-based search across skill names, descriptions, and tags.
|
|
11
|
+
*
|
|
12
|
+
* @param query - Search query
|
|
13
|
+
* @param options - Search options
|
|
14
|
+
* @returns Matching skills sorted by relevance
|
|
15
|
+
*/
|
|
16
|
+
export async function searchVercelCatalog(query, options = {}) {
|
|
17
|
+
const catalog = await fetchVercelCatalog(options);
|
|
18
|
+
const queryLower = query.toLowerCase();
|
|
19
|
+
const results = [];
|
|
20
|
+
for (const skill of catalog.skills) {
|
|
21
|
+
let score = 0;
|
|
22
|
+
const matchReasons = [];
|
|
23
|
+
// Check name (highest weight)
|
|
24
|
+
if (skill.name.toLowerCase().includes(queryLower)) {
|
|
25
|
+
score += 10;
|
|
26
|
+
matchReasons.push('name match');
|
|
27
|
+
}
|
|
28
|
+
// Check description (medium weight)
|
|
29
|
+
if (skill.description.toLowerCase().includes(queryLower)) {
|
|
30
|
+
score += 5;
|
|
31
|
+
matchReasons.push('description match');
|
|
32
|
+
}
|
|
33
|
+
// Check tags (medium weight)
|
|
34
|
+
if (skill.tags?.some((tag) => tag.toLowerCase().includes(queryLower))) {
|
|
35
|
+
score += 3;
|
|
36
|
+
matchReasons.push('tag match');
|
|
37
|
+
}
|
|
38
|
+
// Check owner/repo (low weight)
|
|
39
|
+
if (skill.owner.toLowerCase().includes(queryLower) ||
|
|
40
|
+
skill.repo.toLowerCase().includes(queryLower)) {
|
|
41
|
+
score += 1;
|
|
42
|
+
matchReasons.push('owner/repo match');
|
|
43
|
+
}
|
|
44
|
+
// Apply tag filter
|
|
45
|
+
if (options.tags && options.tags.length > 0) {
|
|
46
|
+
const hasTag = options.tags.some((tag) => skill.tags?.some((skillTag) => skillTag.toLowerCase() === tag.toLowerCase()));
|
|
47
|
+
if (!hasTag) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Apply compatibility filter
|
|
52
|
+
if (options.compatibility && options.compatibility.length > 0) {
|
|
53
|
+
const hasCompat = options.compatibility.some((compat) => skill.compatibility?.some((skillCompat) => skillCompat.toLowerCase() === compat.toLowerCase()));
|
|
54
|
+
if (!hasCompat) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Normalize score to 0-1 range
|
|
59
|
+
const normalizedScore = Math.min(score / 10, 1);
|
|
60
|
+
// Apply threshold
|
|
61
|
+
const threshold = options.threshold ?? 0.1;
|
|
62
|
+
if (normalizedScore >= threshold && score > 0) {
|
|
63
|
+
results.push({
|
|
64
|
+
skill,
|
|
65
|
+
score: normalizedScore,
|
|
66
|
+
matchReason: matchReasons.join(', '),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Sort by score descending
|
|
71
|
+
results.sort((a, b) => b.score - a.score);
|
|
72
|
+
// Apply limit
|
|
73
|
+
const limit = options.limit ?? 10;
|
|
74
|
+
return results.slice(0, limit);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get skills by tag.
|
|
78
|
+
*
|
|
79
|
+
* @param tag - Tag to filter by
|
|
80
|
+
* @param options - Catalog options
|
|
81
|
+
* @returns Skills with the specified tag
|
|
82
|
+
*/
|
|
83
|
+
export async function getSkillsByTag(tag, options = {}) {
|
|
84
|
+
const catalog = await fetchVercelCatalog(options);
|
|
85
|
+
const tagLower = tag.toLowerCase();
|
|
86
|
+
return catalog.skills.filter((skill) => skill.tags?.some((t) => t.toLowerCase() === tagLower));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get skills by compatibility.
|
|
90
|
+
*
|
|
91
|
+
* @param compatibility - Compatibility to filter by (e.g., "claude-code")
|
|
92
|
+
* @param options - Catalog options
|
|
93
|
+
* @returns Skills compatible with the specified tool
|
|
94
|
+
*/
|
|
95
|
+
export async function getSkillsByCompatibility(compatibility, options = {}) {
|
|
96
|
+
const catalog = await fetchVercelCatalog(options);
|
|
97
|
+
const compatLower = compatibility.toLowerCase();
|
|
98
|
+
return catalog.skills.filter((skill) => skill.compatibility?.some((c) => c.toLowerCase() === compatLower) ||
|
|
99
|
+
skill.compatibility?.includes('universal'));
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get a specific skill by ID.
|
|
103
|
+
*
|
|
104
|
+
* @param id - Skill ID (e.g., "vercel-labs/agent-skills/react-best-practices")
|
|
105
|
+
* @param options - Catalog options
|
|
106
|
+
* @returns Skill if found, undefined otherwise
|
|
107
|
+
*/
|
|
108
|
+
export async function getSkillById(id, options = {}) {
|
|
109
|
+
const catalog = await fetchVercelCatalog(options);
|
|
110
|
+
return catalog.skills.find((skill) => skill.id === id);
|
|
111
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Catalog Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the skills.sh catalog API.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
/**
|
|
8
|
+
* A skill entry in the Vercel catalog.
|
|
9
|
+
*/
|
|
10
|
+
export declare const VercelCatalogSkillSchema: z.ZodObject<{
|
|
11
|
+
id: z.ZodString;
|
|
12
|
+
name: z.ZodString;
|
|
13
|
+
owner: z.ZodString;
|
|
14
|
+
repo: z.ZodString;
|
|
15
|
+
path: z.ZodOptional<z.ZodString>;
|
|
16
|
+
description: z.ZodString;
|
|
17
|
+
installs: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
19
|
+
compatibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
21
|
+
stars: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
version: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
export type VercelCatalogSkill = z.infer<typeof VercelCatalogSkillSchema>;
|
|
25
|
+
/**
|
|
26
|
+
* Search result from the catalog.
|
|
27
|
+
*/
|
|
28
|
+
export declare const VercelSkillSearchResultSchema: z.ZodObject<{
|
|
29
|
+
skill: z.ZodObject<{
|
|
30
|
+
id: z.ZodString;
|
|
31
|
+
name: z.ZodString;
|
|
32
|
+
owner: z.ZodString;
|
|
33
|
+
repo: z.ZodString;
|
|
34
|
+
path: z.ZodOptional<z.ZodString>;
|
|
35
|
+
description: z.ZodString;
|
|
36
|
+
installs: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
38
|
+
compatibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
39
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
40
|
+
stars: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
version: z.ZodOptional<z.ZodString>;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
score: z.ZodNumber;
|
|
44
|
+
matchReason: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
export type VercelSkillSearchResult = z.infer<typeof VercelSkillSearchResultSchema>;
|
|
47
|
+
/**
|
|
48
|
+
* Catalog metadata.
|
|
49
|
+
*/
|
|
50
|
+
export declare const CatalogMetadataSchema: z.ZodObject<{
|
|
51
|
+
totalSkills: z.ZodNumber;
|
|
52
|
+
fetchedAt: z.ZodString;
|
|
53
|
+
version: z.ZodOptional<z.ZodString>;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
export type CatalogMetadata = z.infer<typeof CatalogMetadataSchema>;
|
|
56
|
+
/**
|
|
57
|
+
* Full catalog with metadata.
|
|
58
|
+
*/
|
|
59
|
+
export declare const VercelCatalogSchema: z.ZodObject<{
|
|
60
|
+
metadata: z.ZodObject<{
|
|
61
|
+
totalSkills: z.ZodNumber;
|
|
62
|
+
fetchedAt: z.ZodString;
|
|
63
|
+
version: z.ZodOptional<z.ZodString>;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
skills: z.ZodArray<z.ZodObject<{
|
|
66
|
+
id: z.ZodString;
|
|
67
|
+
name: z.ZodString;
|
|
68
|
+
owner: z.ZodString;
|
|
69
|
+
repo: z.ZodString;
|
|
70
|
+
path: z.ZodOptional<z.ZodString>;
|
|
71
|
+
description: z.ZodString;
|
|
72
|
+
installs: z.ZodOptional<z.ZodNumber>;
|
|
73
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
74
|
+
compatibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
75
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
76
|
+
stars: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
version: z.ZodOptional<z.ZodString>;
|
|
78
|
+
}, z.core.$strip>>;
|
|
79
|
+
}, z.core.$strip>;
|
|
80
|
+
export type VercelCatalog = z.infer<typeof VercelCatalogSchema>;
|
|
81
|
+
//# sourceMappingURL=catalog-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-types.d.ts","sourceRoot":"","sources":["../../../src/skills/catalog/catalog-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;iBAoCnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;iBASxC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEnF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;iBAShC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;iBAM9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Catalog Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the skills.sh catalog API.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
/**
|
|
8
|
+
* A skill entry in the Vercel catalog.
|
|
9
|
+
*/
|
|
10
|
+
export const VercelCatalogSkillSchema = z.object({
|
|
11
|
+
/** Unique skill identifier (e.g., "vercel-labs/agent-skills/react-best-practices") */
|
|
12
|
+
id: z.string(),
|
|
13
|
+
/** Skill name */
|
|
14
|
+
name: z.string(),
|
|
15
|
+
/** Owner/organization */
|
|
16
|
+
owner: z.string(),
|
|
17
|
+
/** Repository name */
|
|
18
|
+
repo: z.string(),
|
|
19
|
+
/** Path within repo (if monorepo) */
|
|
20
|
+
path: z.string().optional(),
|
|
21
|
+
/** Description */
|
|
22
|
+
description: z.string(),
|
|
23
|
+
/** Installation count */
|
|
24
|
+
installs: z.number().optional(),
|
|
25
|
+
/** Tags/categories */
|
|
26
|
+
tags: z.array(z.string()).optional(),
|
|
27
|
+
/** Compatible tools/frameworks */
|
|
28
|
+
compatibility: z.array(z.string()).optional(),
|
|
29
|
+
/** Last updated timestamp */
|
|
30
|
+
updatedAt: z.string().optional(),
|
|
31
|
+
/** GitHub stars */
|
|
32
|
+
stars: z.number().optional(),
|
|
33
|
+
/** Version */
|
|
34
|
+
version: z.string().optional(),
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Search result from the catalog.
|
|
38
|
+
*/
|
|
39
|
+
export const VercelSkillSearchResultSchema = z.object({
|
|
40
|
+
/** Matching skill */
|
|
41
|
+
skill: VercelCatalogSkillSchema,
|
|
42
|
+
/** Relevance score (0-1) */
|
|
43
|
+
score: z.number().min(0).max(1),
|
|
44
|
+
/** Why this skill matched */
|
|
45
|
+
matchReason: z.string().optional(),
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* Catalog metadata.
|
|
49
|
+
*/
|
|
50
|
+
export const CatalogMetadataSchema = z.object({
|
|
51
|
+
/** Total number of skills */
|
|
52
|
+
totalSkills: z.number(),
|
|
53
|
+
/** When catalog was last fetched */
|
|
54
|
+
fetchedAt: z.string().datetime(),
|
|
55
|
+
/** Catalog version */
|
|
56
|
+
version: z.string().optional(),
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Full catalog with metadata.
|
|
60
|
+
*/
|
|
61
|
+
export const VercelCatalogSchema = z.object({
|
|
62
|
+
/** Catalog metadata */
|
|
63
|
+
metadata: CatalogMetadataSchema,
|
|
64
|
+
/** All skills in the catalog */
|
|
65
|
+
skills: z.array(VercelCatalogSkillSchema),
|
|
66
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Catalog
|
|
3
|
+
*
|
|
4
|
+
* Discovery and search for skills in the Vercel Skills ecosystem (skills.sh).
|
|
5
|
+
*/
|
|
6
|
+
export { getSkillById, getSkillsByCompatibility, getSkillsByTag, type SearchOptions, searchVercelCatalog, } from './catalog-search.js';
|
|
7
|
+
export type { CatalogMetadata, VercelCatalog, VercelCatalogSkill, VercelSkillSearchResult, } from './catalog-types.js';
|
|
8
|
+
export { type CatalogConfig, clearCatalogCache, fetchVercelCatalog, getTrendingSkills, } from './vercel-catalog.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/skills/catalog/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,KAAK,aAAa,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,KAAK,aAAa,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Catalog
|
|
3
|
+
*
|
|
4
|
+
* Discovery and search for skills in the Vercel Skills ecosystem (skills.sh).
|
|
5
|
+
*/
|
|
6
|
+
export { getSkillById, getSkillsByCompatibility, getSkillsByTag, searchVercelCatalog, } from './catalog-search.js';
|
|
7
|
+
export { clearCatalogCache, fetchVercelCatalog, getTrendingSkills, } from './vercel-catalog.js';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Catalog
|
|
3
|
+
*
|
|
4
|
+
* Fetch and cache the skills.sh catalog for discovery.
|
|
5
|
+
*/
|
|
6
|
+
import type { VercelCatalog, VercelCatalogSkill } from './catalog-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for catalog fetching.
|
|
9
|
+
*/
|
|
10
|
+
export interface CatalogConfig {
|
|
11
|
+
/** Cache directory (default: ~/.revealui/cache) */
|
|
12
|
+
cacheDir?: string;
|
|
13
|
+
/** Cache TTL in milliseconds (default: 24 hours) */
|
|
14
|
+
cacheTtl?: number;
|
|
15
|
+
/** Force refresh even if cache is valid */
|
|
16
|
+
forceRefresh?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fetch the Vercel Skills catalog.
|
|
20
|
+
*
|
|
21
|
+
* This function fetches the catalog from skills.sh (or a known GitHub source)
|
|
22
|
+
* and caches it locally. The cache is invalidated after 24 hours by default.
|
|
23
|
+
*
|
|
24
|
+
* @param config - Configuration options
|
|
25
|
+
* @returns The catalog of available skills
|
|
26
|
+
*/
|
|
27
|
+
export declare function fetchVercelCatalog(config?: CatalogConfig): Promise<VercelCatalog>;
|
|
28
|
+
/**
|
|
29
|
+
* Get trending skills from the catalog (sorted by installs).
|
|
30
|
+
*
|
|
31
|
+
* @param limit - Maximum number of skills to return
|
|
32
|
+
* @param config - Catalog configuration
|
|
33
|
+
* @returns Trending skills
|
|
34
|
+
*/
|
|
35
|
+
export declare function getTrendingSkills(limit?: number, config?: CatalogConfig): Promise<VercelCatalogSkill[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Clear the catalog cache.
|
|
38
|
+
*
|
|
39
|
+
* @param cacheDir - Cache directory
|
|
40
|
+
*/
|
|
41
|
+
export declare function clearCatalogCache(cacheDir?: string): void;
|
|
42
|
+
//# sourceMappingURL=vercel-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel-catalog.d.ts","sourceRoot":"","sources":["../../../src/skills/catalog/vercel-catalog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAmB,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE5F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAiBD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgC3F;AAiHD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,SAAK,EACV,MAAM,GAAE,aAAkB,GACzB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAO/B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAKzD"}
|