@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,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Loader
|
|
3
|
+
*
|
|
4
|
+
* Bridge layer to load skills from the Vercel Skills ecosystem (skills.sh)
|
|
5
|
+
* and convert them to RevealUI's format.
|
|
6
|
+
*/
|
|
7
|
+
import { exec } from 'node:child_process';
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import { promisify } from 'node:util';
|
|
11
|
+
import { logger } from '@revealui/core/observability/logger';
|
|
12
|
+
import { parseSkillMd } from '../parser/index.js';
|
|
13
|
+
import { parseVercelSource } from './vercel-types.js';
|
|
14
|
+
const execAsync = promisify(exec);
|
|
15
|
+
/**
|
|
16
|
+
* Load a skill from the Vercel Skills ecosystem.
|
|
17
|
+
*
|
|
18
|
+
* This function:
|
|
19
|
+
* 1. Executes `npx skills add <source>` to install the skill
|
|
20
|
+
* 2. Detects the installation location
|
|
21
|
+
* 3. Parses the installed SKILL.md
|
|
22
|
+
* 4. Registers with RevealUI's SkillRegistry
|
|
23
|
+
* 5. Optionally generates embeddings for semantic search
|
|
24
|
+
*
|
|
25
|
+
* @param source - Vercel skill source (e.g., "vercel-labs/agent-skills/react-best-practices")
|
|
26
|
+
* @param options - Load options
|
|
27
|
+
* @returns Fully loaded Skill object
|
|
28
|
+
*/
|
|
29
|
+
export async function loadFromVercelSkills(source, options) {
|
|
30
|
+
const parsed = parseVercelSource(source);
|
|
31
|
+
// Determine skill name from path or repo name
|
|
32
|
+
const skillName = parsed.path ? path.basename(parsed.path) : parsed.repo;
|
|
33
|
+
const targetPath = path.join(options.targetDir, skillName);
|
|
34
|
+
// Check if already exists
|
|
35
|
+
if (fs.existsSync(targetPath)) {
|
|
36
|
+
if (options.force) {
|
|
37
|
+
fs.rmSync(targetPath, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
throw new Error(`Skill "${skillName}" already exists. Use --force to overwrite.`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Ensure target directory exists
|
|
44
|
+
if (!fs.existsSync(options.targetDir)) {
|
|
45
|
+
fs.mkdirSync(options.targetDir, { recursive: true });
|
|
46
|
+
}
|
|
47
|
+
// Try npx skills first, fallback to direct git clone
|
|
48
|
+
let installPath;
|
|
49
|
+
try {
|
|
50
|
+
const result = await installViaVercelCli(source, {
|
|
51
|
+
dir: options.targetDir,
|
|
52
|
+
force: options.force,
|
|
53
|
+
ref: options.ref ?? parsed.ref,
|
|
54
|
+
global: options.scope === 'global',
|
|
55
|
+
});
|
|
56
|
+
if (result.success && result.installPath) {
|
|
57
|
+
installPath = result.installPath;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
logger.warn('Vercel CLI installation failed, falling back to git clone', {
|
|
62
|
+
error: error instanceof Error ? error.message : String(error),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Fallback to direct git clone if npx skills failed
|
|
66
|
+
if (!installPath) {
|
|
67
|
+
installPath = await fallbackGitClone(parsed, targetPath);
|
|
68
|
+
}
|
|
69
|
+
// Find and validate SKILL.md
|
|
70
|
+
const skillMdPath = path.join(installPath, 'SKILL.md');
|
|
71
|
+
if (!fs.existsSync(skillMdPath)) {
|
|
72
|
+
// Clean up failed install
|
|
73
|
+
fs.rmSync(installPath, { recursive: true });
|
|
74
|
+
throw new Error(`No SKILL.md found in ${source}`);
|
|
75
|
+
}
|
|
76
|
+
// Parse and validate
|
|
77
|
+
const content = fs.readFileSync(skillMdPath, 'utf-8');
|
|
78
|
+
const parsedSkill = parseSkillMd(content);
|
|
79
|
+
// Create skill object with Vercel source tracking
|
|
80
|
+
const skill = {
|
|
81
|
+
metadata: parsedSkill.metadata,
|
|
82
|
+
instructions: parsedSkill.instructions,
|
|
83
|
+
sourcePath: installPath,
|
|
84
|
+
scope: options.scope,
|
|
85
|
+
source: 'vercel',
|
|
86
|
+
sourceIdentifier: source,
|
|
87
|
+
installedAt: new Date().toISOString(),
|
|
88
|
+
};
|
|
89
|
+
// Register with registry
|
|
90
|
+
if (options.registry.has(skill.metadata.name)) {
|
|
91
|
+
options.registry.unregister(skill.metadata.name);
|
|
92
|
+
}
|
|
93
|
+
options.registry.register(skill);
|
|
94
|
+
// Load fully (with resources and optionally embedding)
|
|
95
|
+
return (await options.registry.loadSkill(skill.metadata.name, options.generateEmbedding)) ?? skill;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Install a skill using the Vercel Skills CLI (npx skills).
|
|
99
|
+
*
|
|
100
|
+
* @param source - Skill source identifier
|
|
101
|
+
* @param options - CLI options
|
|
102
|
+
* @returns Command execution result
|
|
103
|
+
*/
|
|
104
|
+
async function installViaVercelCli(source, options) {
|
|
105
|
+
const args = ['skills', 'add', source];
|
|
106
|
+
if (options.global) {
|
|
107
|
+
args.push('--global');
|
|
108
|
+
}
|
|
109
|
+
if (options.dir) {
|
|
110
|
+
args.push('--dir', options.dir);
|
|
111
|
+
}
|
|
112
|
+
if (options.force) {
|
|
113
|
+
args.push('--force');
|
|
114
|
+
}
|
|
115
|
+
if (options.ref) {
|
|
116
|
+
args.push('--ref', options.ref);
|
|
117
|
+
}
|
|
118
|
+
const command = `npx ${args.join(' ')}`;
|
|
119
|
+
try {
|
|
120
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
121
|
+
cwd: options.dir,
|
|
122
|
+
timeout: 60000, // 60 second timeout
|
|
123
|
+
});
|
|
124
|
+
// Parse output to detect installation path
|
|
125
|
+
const installPath = extractInstallPath(stdout, options.dir ?? process.cwd(), source);
|
|
126
|
+
return {
|
|
127
|
+
success: true,
|
|
128
|
+
stdout,
|
|
129
|
+
stderr,
|
|
130
|
+
installPath,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const err = error;
|
|
135
|
+
return {
|
|
136
|
+
success: false,
|
|
137
|
+
stdout: err.stdout ?? '',
|
|
138
|
+
stderr: err.stderr ?? err.message ?? 'Unknown error',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Extract the installation path from npx skills output.
|
|
144
|
+
*
|
|
145
|
+
* @param output - Command stdout
|
|
146
|
+
* @param baseDir - Base directory where skill was installed
|
|
147
|
+
* @param source - Original source string
|
|
148
|
+
* @returns Detected installation path
|
|
149
|
+
*/
|
|
150
|
+
function extractInstallPath(output, baseDir, source) {
|
|
151
|
+
// Try to parse the output to find installation location
|
|
152
|
+
// Common patterns:
|
|
153
|
+
// - "Installed skill to: /path/to/skill"
|
|
154
|
+
// - "✓ Installed skill-name"
|
|
155
|
+
const installMatch = output.match(/(?:Installed|installed).*?(?:to:?\s+)?([^\n]+)/i);
|
|
156
|
+
if (installMatch?.[1]) {
|
|
157
|
+
const detectedPath = installMatch[1].trim();
|
|
158
|
+
if (fs.existsSync(detectedPath)) {
|
|
159
|
+
return detectedPath;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Fallback: try to construct path from source
|
|
163
|
+
const parsed = parseVercelSource(source);
|
|
164
|
+
const skillName = parsed.path ? path.basename(parsed.path) : parsed.repo;
|
|
165
|
+
const constructedPath = path.join(baseDir, skillName);
|
|
166
|
+
if (fs.existsSync(constructedPath)) {
|
|
167
|
+
return constructedPath;
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Fallback: Clone directly from GitHub if npx skills fails.
|
|
173
|
+
*
|
|
174
|
+
* @param source - Parsed Vercel source
|
|
175
|
+
* @param targetPath - Target installation path
|
|
176
|
+
* @returns Installation path
|
|
177
|
+
*/
|
|
178
|
+
async function fallbackGitClone(source, targetPath) {
|
|
179
|
+
const repoUrl = `https://github.com/${source.owner}/${source.repo}.git`;
|
|
180
|
+
if (source.path) {
|
|
181
|
+
// Use sparse checkout for subdirectory
|
|
182
|
+
await sparseClone(repoUrl, targetPath, source.path, source.ref);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
// Clone entire repo
|
|
186
|
+
await fullClone(repoUrl, targetPath, source.ref);
|
|
187
|
+
}
|
|
188
|
+
return targetPath;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Perform a sparse checkout for a specific path.
|
|
192
|
+
*/
|
|
193
|
+
async function sparseClone(repoUrl, targetPath, subPath, ref) {
|
|
194
|
+
const tempDir = `${targetPath}.tmp`;
|
|
195
|
+
try {
|
|
196
|
+
// Initialize sparse checkout
|
|
197
|
+
await execAsync(`git clone --depth 1 --filter=blob:none --sparse ${repoUrl} ${tempDir}`);
|
|
198
|
+
// Configure sparse checkout
|
|
199
|
+
await execAsync(`git -C ${tempDir} sparse-checkout set ${subPath}`);
|
|
200
|
+
// Checkout specific ref if provided
|
|
201
|
+
if (ref) {
|
|
202
|
+
await execAsync(`git -C ${tempDir} fetch --depth 1 origin ${ref}`);
|
|
203
|
+
await execAsync(`git -C ${tempDir} checkout ${ref}`);
|
|
204
|
+
}
|
|
205
|
+
// Move the skill directory to target
|
|
206
|
+
const sourcePath = path.join(tempDir, subPath);
|
|
207
|
+
if (!fs.existsSync(sourcePath)) {
|
|
208
|
+
throw new Error(`Path "${subPath}" not found in repository`);
|
|
209
|
+
}
|
|
210
|
+
fs.renameSync(sourcePath, targetPath);
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
// Clean up temp directory
|
|
214
|
+
if (fs.existsSync(tempDir)) {
|
|
215
|
+
fs.rmSync(tempDir, { recursive: true });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Perform a full shallow clone.
|
|
221
|
+
*/
|
|
222
|
+
async function fullClone(repoUrl, targetPath, ref) {
|
|
223
|
+
const refArg = ref ? `--branch ${ref}` : '';
|
|
224
|
+
await execAsync(`git clone --depth 1 ${refArg} ${repoUrl} ${targetPath}`);
|
|
225
|
+
// Remove .git directory to save space
|
|
226
|
+
const gitDir = path.join(targetPath, '.git');
|
|
227
|
+
if (fs.existsSync(gitDir)) {
|
|
228
|
+
fs.rmSync(gitDir, { recursive: true });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Check for updates to an installed Vercel skill.
|
|
233
|
+
*
|
|
234
|
+
* @param skillName - Name of the installed skill
|
|
235
|
+
* @param registry - Skill registry
|
|
236
|
+
* @returns Update information
|
|
237
|
+
*/
|
|
238
|
+
export async function checkVercelSkillUpdates(skillName, registry) {
|
|
239
|
+
const skill = registry.get(skillName);
|
|
240
|
+
if (!skill) {
|
|
241
|
+
throw new Error(`Skill "${skillName}" is not installed`);
|
|
242
|
+
}
|
|
243
|
+
if (skill.source !== 'vercel') {
|
|
244
|
+
throw new Error(`Skill "${skillName}" is not a Vercel skill`);
|
|
245
|
+
}
|
|
246
|
+
if (!skill.sourceIdentifier) {
|
|
247
|
+
throw new Error(`Skill "${skillName}" does not have source identifier`);
|
|
248
|
+
}
|
|
249
|
+
// For now, we'll use a simple approach:
|
|
250
|
+
// 1. Check if the GitHub repo has newer commits
|
|
251
|
+
// 2. Compare version in SKILL.md if available
|
|
252
|
+
try {
|
|
253
|
+
const parsed = parseVercelSource(skill.sourceIdentifier);
|
|
254
|
+
const repoUrl = `https://github.com/${parsed.owner}/${parsed.repo}.git`;
|
|
255
|
+
const currentVersion = skill.metadata.version ?? 'unknown';
|
|
256
|
+
// Version comparison requires fetching and parsing the remote SKILL.md,
|
|
257
|
+
// which is not yet implemented. Return false to avoid misleading prompts.
|
|
258
|
+
return {
|
|
259
|
+
available: false,
|
|
260
|
+
currentVersion,
|
|
261
|
+
changelog: `Check ${repoUrl} for changes`,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
logger.error('Error checking for updates', error instanceof Error ? error : new Error(String(error)));
|
|
266
|
+
return {
|
|
267
|
+
available: false,
|
|
268
|
+
currentVersion: skill.metadata.version,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Update an installed Vercel skill to the latest version.
|
|
274
|
+
*
|
|
275
|
+
* @param skillName - Name of the skill to update
|
|
276
|
+
* @param registry - Skill registry
|
|
277
|
+
* @returns Updated skill object
|
|
278
|
+
*/
|
|
279
|
+
export async function updateVercelSkill(skillName, registry) {
|
|
280
|
+
const skill = registry.get(skillName);
|
|
281
|
+
if (!skill) {
|
|
282
|
+
throw new Error(`Skill "${skillName}" is not installed`);
|
|
283
|
+
}
|
|
284
|
+
if (skill.source !== 'vercel') {
|
|
285
|
+
throw new Error(`Skill "${skillName}" is not a Vercel skill`);
|
|
286
|
+
}
|
|
287
|
+
if (!skill.sourceIdentifier) {
|
|
288
|
+
throw new Error(`Skill "${skillName}" does not have source identifier`);
|
|
289
|
+
}
|
|
290
|
+
// Reinstall with force flag
|
|
291
|
+
const options = {
|
|
292
|
+
targetDir: path.dirname(skill.sourcePath),
|
|
293
|
+
scope: skill.scope,
|
|
294
|
+
registry,
|
|
295
|
+
generateEmbedding: !!skill.embedding,
|
|
296
|
+
force: true,
|
|
297
|
+
};
|
|
298
|
+
return loadFromVercelSkills(skill.sourceIdentifier, options);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Check if npx skills CLI is available.
|
|
302
|
+
*
|
|
303
|
+
* @returns True if available, false otherwise
|
|
304
|
+
*/
|
|
305
|
+
export async function isVercelCliAvailable() {
|
|
306
|
+
try {
|
|
307
|
+
await execAsync('npx skills --version', { timeout: 5000 });
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for interacting with the Vercel Skills ecosystem (skills.sh).
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
/**
|
|
8
|
+
* Vercel skill source specification.
|
|
9
|
+
*
|
|
10
|
+
* Formats supported:
|
|
11
|
+
* - owner/repo - Install from GitHub via Vercel Skills
|
|
12
|
+
* - owner/repo/path/to/skill - Install specific skill from monorepo
|
|
13
|
+
* - @scope/package - Install from npm (future)
|
|
14
|
+
*/
|
|
15
|
+
export interface VercelSource {
|
|
16
|
+
owner: string;
|
|
17
|
+
repo: string;
|
|
18
|
+
path?: string;
|
|
19
|
+
ref?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse a Vercel source string into components.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* parseVercelSource("vercel-labs/agent-skills")
|
|
26
|
+
* // { owner: "vercel-labs", repo: "agent-skills" }
|
|
27
|
+
*
|
|
28
|
+
* parseVercelSource("vercel-labs/agent-skills/skills/react-best-practices")
|
|
29
|
+
* // { owner: "vercel-labs", repo: "agent-skills", path: "skills/react-best-practices" }
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseVercelSource(source: string): VercelSource;
|
|
32
|
+
/**
|
|
33
|
+
* Vercel Skills CLI installation options.
|
|
34
|
+
*/
|
|
35
|
+
export interface VercelCliOptions {
|
|
36
|
+
/** Install globally or locally */
|
|
37
|
+
global?: boolean;
|
|
38
|
+
/** Target directory override */
|
|
39
|
+
dir?: string;
|
|
40
|
+
/** Force reinstall */
|
|
41
|
+
force?: boolean;
|
|
42
|
+
/** Specific version/ref to install */
|
|
43
|
+
ref?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Result of npx skills command execution.
|
|
47
|
+
*/
|
|
48
|
+
export interface VercelCommandResult {
|
|
49
|
+
success: boolean;
|
|
50
|
+
stdout: string;
|
|
51
|
+
stderr: string;
|
|
52
|
+
installPath?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Update information for a Vercel skill.
|
|
56
|
+
*/
|
|
57
|
+
export declare const UpdateInfoSchema: z.ZodObject<{
|
|
58
|
+
available: z.ZodBoolean;
|
|
59
|
+
currentVersion: z.ZodOptional<z.ZodString>;
|
|
60
|
+
latestVersion: z.ZodOptional<z.ZodString>;
|
|
61
|
+
changelog: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
export type UpdateInfo = z.infer<typeof UpdateInfoSchema>;
|
|
64
|
+
//# sourceMappingURL=vercel-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel-types.d.ts","sourceRoot":"","sources":["../../../src/skills/loader/vercel-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA+B9D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;iBAY3B,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel Skills Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for interacting with the Vercel Skills ecosystem (skills.sh).
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
/**
|
|
8
|
+
* Parse a Vercel source string into components.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* parseVercelSource("vercel-labs/agent-skills")
|
|
12
|
+
* // { owner: "vercel-labs", repo: "agent-skills" }
|
|
13
|
+
*
|
|
14
|
+
* parseVercelSource("vercel-labs/agent-skills/skills/react-best-practices")
|
|
15
|
+
* // { owner: "vercel-labs", repo: "agent-skills", path: "skills/react-best-practices" }
|
|
16
|
+
*/
|
|
17
|
+
export function parseVercelSource(source) {
|
|
18
|
+
// Handle @ref suffix for specific branch/tag
|
|
19
|
+
let ref;
|
|
20
|
+
let sourcePath = source;
|
|
21
|
+
if (source.includes('@')) {
|
|
22
|
+
const atIndex = source.lastIndexOf('@');
|
|
23
|
+
ref = source.slice(atIndex + 1);
|
|
24
|
+
sourcePath = source.slice(0, atIndex);
|
|
25
|
+
}
|
|
26
|
+
const parts = sourcePath.split('/');
|
|
27
|
+
if (parts.length < 2) {
|
|
28
|
+
throw new Error(`Invalid Vercel source: ${source}. Expected format: owner/repo[/path][@ref]`);
|
|
29
|
+
}
|
|
30
|
+
const owner = parts[0];
|
|
31
|
+
const repo = parts[1];
|
|
32
|
+
const pathParts = parts.slice(2);
|
|
33
|
+
if (!(owner && repo)) {
|
|
34
|
+
throw new Error(`Invalid Vercel source: ${source}. Expected format: owner/repo[/path][@ref]`);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
owner,
|
|
38
|
+
repo,
|
|
39
|
+
path: pathParts.length > 0 ? pathParts.join('/') : undefined,
|
|
40
|
+
ref,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Update information for a Vercel skill.
|
|
45
|
+
*/
|
|
46
|
+
export const UpdateInfoSchema = z.object({
|
|
47
|
+
/** Whether an update is available */
|
|
48
|
+
available: z.boolean(),
|
|
49
|
+
/** Current installed version */
|
|
50
|
+
currentVersion: z.string().optional(),
|
|
51
|
+
/** Latest available version */
|
|
52
|
+
latestVersion: z.string().optional(),
|
|
53
|
+
/** Changes in the update */
|
|
54
|
+
changelog: z.string().optional(),
|
|
55
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SKILL.md Parser
|
|
3
|
+
*
|
|
4
|
+
* Utilities for parsing and validating SKILL.md files.
|
|
5
|
+
*/
|
|
6
|
+
export { generateSkillMd, type ParsedSkillMd, parseAllowedToolsString, parseSkillMd, parseSkillMetadataOnly, validateSkillMd, } from './skill-md-parser.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/skills/parser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,uBAAuB,EACvB,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SKILL.md Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses SKILL.md files to extract YAML frontmatter and markdown instructions.
|
|
5
|
+
*/
|
|
6
|
+
import { type SkillMetadata } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Result of parsing a SKILL.md file.
|
|
9
|
+
*/
|
|
10
|
+
export interface ParsedSkillMd {
|
|
11
|
+
metadata: SkillMetadata;
|
|
12
|
+
instructions: string;
|
|
13
|
+
rawFrontmatter: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse a SKILL.md file content into metadata and instructions.
|
|
17
|
+
*
|
|
18
|
+
* SKILL.md format:
|
|
19
|
+
* ```
|
|
20
|
+
* ---
|
|
21
|
+
* name: skill-name
|
|
22
|
+
* description: What this skill does
|
|
23
|
+
* ---
|
|
24
|
+
*
|
|
25
|
+
* # Instructions
|
|
26
|
+
*
|
|
27
|
+
* Markdown content here...
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @param content - Raw SKILL.md file content
|
|
31
|
+
* @returns Parsed skill metadata and instructions
|
|
32
|
+
* @throws Error if frontmatter is missing or invalid
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseSkillMd(content: string): ParsedSkillMd;
|
|
35
|
+
/**
|
|
36
|
+
* Parse allowed-tools string format into array.
|
|
37
|
+
*
|
|
38
|
+
* Example: "Bash(git:*) Read Write(*.ts)" -> ["Bash(git:*)", "Read", "Write(*.ts)"]
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseAllowedToolsString(spec: string): string[];
|
|
41
|
+
/**
|
|
42
|
+
* Extract only the metadata from a SKILL.md file (lightweight parsing).
|
|
43
|
+
* Used for loading skill listings without full content.
|
|
44
|
+
*
|
|
45
|
+
* @param content - Raw SKILL.md file content
|
|
46
|
+
* @returns Just the metadata portion
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseSkillMetadataOnly(content: string): SkillMetadata;
|
|
49
|
+
/**
|
|
50
|
+
* Validate that a string is valid SKILL.md format.
|
|
51
|
+
*
|
|
52
|
+
* @param content - Content to validate
|
|
53
|
+
* @returns true if valid, error message if invalid
|
|
54
|
+
*/
|
|
55
|
+
export declare function validateSkillMd(content: string): true | string;
|
|
56
|
+
/**
|
|
57
|
+
* Generate a SKILL.md file from metadata and instructions.
|
|
58
|
+
*
|
|
59
|
+
* @param metadata - Skill metadata
|
|
60
|
+
* @param instructions - Markdown instructions
|
|
61
|
+
* @returns SKILL.md file content
|
|
62
|
+
*/
|
|
63
|
+
export declare function generateSkillMd(metadata: SkillMetadata, instructions: string): string;
|
|
64
|
+
//# sourceMappingURL=skill-md-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-md-parser.d.ts","sourceRoot":"","sources":["../../../src/skills/parser/skill-md-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAuB,MAAM,aAAa,CAAA;AAyGrE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,aAAa,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CA6C3D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B9D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAGrE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAO9D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGrF"}
|