@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
|
+
* Prompt Specification Template
|
|
3
|
+
*
|
|
4
|
+
* Zod-validated schema for prompt templates. Every prompt must declare
|
|
5
|
+
* its variables, guardrails, security constraints, and include at least
|
|
6
|
+
* one example. This prevents prompt injection, enforces output quality,
|
|
7
|
+
* and ensures all prompts are documented and testable.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
export declare const PromptVariableSchema: z.ZodObject<{
|
|
11
|
+
name: z.ZodString;
|
|
12
|
+
type: z.ZodEnum<{
|
|
13
|
+
string: "string";
|
|
14
|
+
number: "number";
|
|
15
|
+
boolean: "boolean";
|
|
16
|
+
object: "object";
|
|
17
|
+
array: "array";
|
|
18
|
+
}>;
|
|
19
|
+
required: z.ZodDefault<z.ZodBoolean>;
|
|
20
|
+
description: z.ZodString;
|
|
21
|
+
defaultValue: z.ZodOptional<z.ZodUnknown>;
|
|
22
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
validationPattern: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
export type PromptVariable = z.infer<typeof PromptVariableSchema>;
|
|
26
|
+
export declare const PromptGuardrailsSchema: z.ZodObject<{
|
|
27
|
+
maxInputTokens: z.ZodDefault<z.ZodNumber>;
|
|
28
|
+
maxOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
29
|
+
prohibitedContent: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
30
|
+
requiredContent: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
31
|
+
temperature: z.ZodDefault<z.ZodNumber>;
|
|
32
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
stopSequences: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
export type PromptGuardrails = z.infer<typeof PromptGuardrailsSchema>;
|
|
36
|
+
export declare const PromptSecuritySchema: z.ZodObject<{
|
|
37
|
+
allowCodeExecution: z.ZodDefault<z.ZodBoolean>;
|
|
38
|
+
allowExternalUrls: z.ZodDefault<z.ZodBoolean>;
|
|
39
|
+
piiHandling: z.ZodDefault<z.ZodEnum<{
|
|
40
|
+
none: "none";
|
|
41
|
+
mask: "mask";
|
|
42
|
+
redact: "redact";
|
|
43
|
+
}>>;
|
|
44
|
+
injectionProtection: z.ZodDefault<z.ZodBoolean>;
|
|
45
|
+
sanitizeVariables: z.ZodDefault<z.ZodBoolean>;
|
|
46
|
+
rateLimitPerMinute: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
export type PromptSecurity = z.infer<typeof PromptSecuritySchema>;
|
|
49
|
+
export declare const PromptExampleSchema: z.ZodObject<{
|
|
50
|
+
description: z.ZodOptional<z.ZodString>;
|
|
51
|
+
input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
52
|
+
expectedOutput: z.ZodString;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
export type PromptExample = z.infer<typeof PromptExampleSchema>;
|
|
55
|
+
export declare const PromptSpecSchema: z.ZodObject<{
|
|
56
|
+
id: z.ZodString;
|
|
57
|
+
name: z.ZodString;
|
|
58
|
+
version: z.ZodString;
|
|
59
|
+
description: z.ZodString;
|
|
60
|
+
template: z.ZodString;
|
|
61
|
+
variables: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
62
|
+
name: z.ZodString;
|
|
63
|
+
type: z.ZodEnum<{
|
|
64
|
+
string: "string";
|
|
65
|
+
number: "number";
|
|
66
|
+
boolean: "boolean";
|
|
67
|
+
object: "object";
|
|
68
|
+
array: "array";
|
|
69
|
+
}>;
|
|
70
|
+
required: z.ZodDefault<z.ZodBoolean>;
|
|
71
|
+
description: z.ZodString;
|
|
72
|
+
defaultValue: z.ZodOptional<z.ZodUnknown>;
|
|
73
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
74
|
+
validationPattern: z.ZodOptional<z.ZodString>;
|
|
75
|
+
}, z.core.$strip>>>;
|
|
76
|
+
guardrails: z.ZodObject<{
|
|
77
|
+
maxInputTokens: z.ZodDefault<z.ZodNumber>;
|
|
78
|
+
maxOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
79
|
+
prohibitedContent: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
80
|
+
requiredContent: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
81
|
+
temperature: z.ZodDefault<z.ZodNumber>;
|
|
82
|
+
topP: z.ZodOptional<z.ZodNumber>;
|
|
83
|
+
stopSequences: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
84
|
+
}, z.core.$strip>;
|
|
85
|
+
security: z.ZodObject<{
|
|
86
|
+
allowCodeExecution: z.ZodDefault<z.ZodBoolean>;
|
|
87
|
+
allowExternalUrls: z.ZodDefault<z.ZodBoolean>;
|
|
88
|
+
piiHandling: z.ZodDefault<z.ZodEnum<{
|
|
89
|
+
none: "none";
|
|
90
|
+
mask: "mask";
|
|
91
|
+
redact: "redact";
|
|
92
|
+
}>>;
|
|
93
|
+
injectionProtection: z.ZodDefault<z.ZodBoolean>;
|
|
94
|
+
sanitizeVariables: z.ZodDefault<z.ZodBoolean>;
|
|
95
|
+
rateLimitPerMinute: z.ZodOptional<z.ZodNumber>;
|
|
96
|
+
}, z.core.$strip>;
|
|
97
|
+
examples: z.ZodArray<z.ZodObject<{
|
|
98
|
+
description: z.ZodOptional<z.ZodString>;
|
|
99
|
+
input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
100
|
+
expectedOutput: z.ZodString;
|
|
101
|
+
}, z.core.$strip>>;
|
|
102
|
+
author: z.ZodString;
|
|
103
|
+
category: z.ZodString;
|
|
104
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
105
|
+
createdAt: z.ZodDate;
|
|
106
|
+
updatedAt: z.ZodDate;
|
|
107
|
+
}, z.core.$strip>;
|
|
108
|
+
export type PromptSpec = z.infer<typeof PromptSpecSchema>;
|
|
109
|
+
/**
|
|
110
|
+
* Validate a prompt specification.
|
|
111
|
+
* Returns the validated spec or throws with detailed error messages.
|
|
112
|
+
*/
|
|
113
|
+
export declare function validatePromptSpec(input: unknown): PromptSpec;
|
|
114
|
+
/**
|
|
115
|
+
* Safely validate a prompt specification.
|
|
116
|
+
*/
|
|
117
|
+
export declare function safeValidatePromptSpec(input: unknown): {
|
|
118
|
+
success: true;
|
|
119
|
+
data: PromptSpec;
|
|
120
|
+
} | {
|
|
121
|
+
success: false;
|
|
122
|
+
errors: string[];
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Create a prompt spec with sensible defaults.
|
|
126
|
+
*/
|
|
127
|
+
export declare function createPromptSpec(partial: Pick<PromptSpec, 'id' | 'name' | 'version' | 'description' | 'template' | 'author' | 'category' | 'examples'> & Partial<PromptSpec>): PromptSpec;
|
|
128
|
+
/**
|
|
129
|
+
* Render a prompt template with variable values.
|
|
130
|
+
* Validates variables against the spec before rendering.
|
|
131
|
+
* Applies injection protection if enabled.
|
|
132
|
+
*/
|
|
133
|
+
export declare function renderPromptTemplate(spec: PromptSpec, values: Record<string, unknown>): {
|
|
134
|
+
success: true;
|
|
135
|
+
rendered: string;
|
|
136
|
+
} | {
|
|
137
|
+
success: false;
|
|
138
|
+
errors: string[];
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=prompt-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-spec.d.ts","sourceRoot":"","sources":["../../src/templates/prompt-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAe/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAIjE,eAAO,MAAM,sBAAsB;;;;;;;;iBAejC,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAIrE,eAAO,MAAM,oBAAoB;;;;;;;;;;;iBAa/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAIjE,eAAO,MAAM,mBAAmB;;;;iBAO9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAI/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiC3B,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAIzD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAE7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAS5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,IAAI,CACX,UAAU,EACV,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAC5F,GACC,OAAO,CAAC,UAAU,CAAC,GACpB,UAAU,CAWZ;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA4E5E"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Specification Template
|
|
3
|
+
*
|
|
4
|
+
* Zod-validated schema for prompt templates. Every prompt must declare
|
|
5
|
+
* its variables, guardrails, security constraints, and include at least
|
|
6
|
+
* one example. This prevents prompt injection, enforces output quality,
|
|
7
|
+
* and ensures all prompts are documented and testable.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
// ─── Prompt Variable Schema ─────────────────────────────────────────────────
|
|
11
|
+
export const PromptVariableSchema = z.object({
|
|
12
|
+
/** Variable name (used in template as {{name}}) */
|
|
13
|
+
name: z.string().min(1).max(50),
|
|
14
|
+
/** Variable type for validation */
|
|
15
|
+
type: z.enum(['string', 'number', 'boolean', 'array', 'object']),
|
|
16
|
+
/** Whether this variable is required */
|
|
17
|
+
required: z.boolean().default(true),
|
|
18
|
+
/** What this variable represents */
|
|
19
|
+
description: z.string().min(1),
|
|
20
|
+
/** Default value if not provided */
|
|
21
|
+
defaultValue: z.unknown().optional(),
|
|
22
|
+
/** Maximum length for string variables */
|
|
23
|
+
maxLength: z.number().int().positive().optional(),
|
|
24
|
+
/** Regex pattern the value must match (strings only) */
|
|
25
|
+
validationPattern: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
// ─── Prompt Guardrails ──────────────────────────────────────────────────────
|
|
28
|
+
export const PromptGuardrailsSchema = z.object({
|
|
29
|
+
/** Maximum tokens in the rendered prompt (input) */
|
|
30
|
+
maxInputTokens: z.number().int().positive().default(4096),
|
|
31
|
+
/** Maximum tokens in the LLM response (output) */
|
|
32
|
+
maxOutputTokens: z.number().int().positive().default(4096),
|
|
33
|
+
/** Strings/patterns that MUST NOT appear in the prompt or output */
|
|
34
|
+
prohibitedContent: z.array(z.string()).default([]),
|
|
35
|
+
/** Strings that MUST appear in the rendered prompt */
|
|
36
|
+
requiredContent: z.array(z.string()).default([]),
|
|
37
|
+
/** LLM temperature setting */
|
|
38
|
+
temperature: z.number().min(0).max(2).default(0.7),
|
|
39
|
+
/** LLM top-p setting */
|
|
40
|
+
topP: z.number().min(0).max(1).optional(),
|
|
41
|
+
/** Stop sequences */
|
|
42
|
+
stopSequences: z.array(z.string()).default([]),
|
|
43
|
+
});
|
|
44
|
+
// ─── Prompt Security ────────────────────────────────────────────────────────
|
|
45
|
+
export const PromptSecuritySchema = z.object({
|
|
46
|
+
/** Whether the prompt output may contain executable code */
|
|
47
|
+
allowCodeExecution: z.boolean().default(false),
|
|
48
|
+
/** Whether the prompt may reference external URLs */
|
|
49
|
+
allowExternalUrls: z.boolean().default(false),
|
|
50
|
+
/** How PII in variables is handled */
|
|
51
|
+
piiHandling: z.enum(['none', 'mask', 'redact']).default('none'),
|
|
52
|
+
/** Enable prompt injection protection (escaping, sandboxing) */
|
|
53
|
+
injectionProtection: z.boolean().default(true),
|
|
54
|
+
/** Whether variable values are sanitized before template interpolation */
|
|
55
|
+
sanitizeVariables: z.boolean().default(true),
|
|
56
|
+
/** Maximum number of times this prompt can be called per minute */
|
|
57
|
+
rateLimitPerMinute: z.number().int().positive().optional(),
|
|
58
|
+
});
|
|
59
|
+
// ─── Prompt Example Schema ──────────────────────────────────────────────────
|
|
60
|
+
export const PromptExampleSchema = z.object({
|
|
61
|
+
/** What this example demonstrates */
|
|
62
|
+
description: z.string().optional(),
|
|
63
|
+
/** Input variable values */
|
|
64
|
+
input: z.record(z.string(), z.unknown()),
|
|
65
|
+
/** Expected output (for testing and documentation) */
|
|
66
|
+
expectedOutput: z.string(),
|
|
67
|
+
});
|
|
68
|
+
// ─── Full Prompt Specification ──────────────────────────────────────────────
|
|
69
|
+
export const PromptSpecSchema = z.object({
|
|
70
|
+
/** Unique prompt identifier */
|
|
71
|
+
id: z.string().min(1).max(100),
|
|
72
|
+
/** Human-readable prompt name */
|
|
73
|
+
name: z.string().min(1).max(100),
|
|
74
|
+
/** Semantic version */
|
|
75
|
+
version: z.string().regex(/^\d+\.\d+\.\d+$/, 'Must be semver (e.g., 1.0.0)'),
|
|
76
|
+
/** What this prompt template does */
|
|
77
|
+
description: z.string().min(10).max(500),
|
|
78
|
+
/** The prompt template string (variables as {{name}}) */
|
|
79
|
+
template: z.string().min(10),
|
|
80
|
+
/** Declared variables used in the template */
|
|
81
|
+
variables: z.array(PromptVariableSchema).default([]),
|
|
82
|
+
/** Behavioral guardrails */
|
|
83
|
+
guardrails: PromptGuardrailsSchema,
|
|
84
|
+
/** Security constraints */
|
|
85
|
+
security: PromptSecuritySchema,
|
|
86
|
+
/** Examples — at least one required for documentation and testing */
|
|
87
|
+
examples: z.array(PromptExampleSchema).min(1, 'At least one example is required'),
|
|
88
|
+
/** Who created this prompt */
|
|
89
|
+
author: z.string().min(1),
|
|
90
|
+
/** Category (e.g., 'summarization', 'code-generation', 'analysis') */
|
|
91
|
+
category: z.string().min(1),
|
|
92
|
+
/** Tags for search/filtering */
|
|
93
|
+
tags: z.array(z.string()).default([]),
|
|
94
|
+
/** When this spec was created */
|
|
95
|
+
createdAt: z.date(),
|
|
96
|
+
/** When this spec was last updated */
|
|
97
|
+
updatedAt: z.date(),
|
|
98
|
+
});
|
|
99
|
+
// ─── Validation ─────────────────────────────────────────────────────────────
|
|
100
|
+
/**
|
|
101
|
+
* Validate a prompt specification.
|
|
102
|
+
* Returns the validated spec or throws with detailed error messages.
|
|
103
|
+
*/
|
|
104
|
+
export function validatePromptSpec(input) {
|
|
105
|
+
return PromptSpecSchema.parse(input);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Safely validate a prompt specification.
|
|
109
|
+
*/
|
|
110
|
+
export function safeValidatePromptSpec(input) {
|
|
111
|
+
const result = PromptSpecSchema.safeParse(input);
|
|
112
|
+
if (result.success) {
|
|
113
|
+
return { success: true, data: result.data };
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
errors: result.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create a prompt spec with sensible defaults.
|
|
122
|
+
*/
|
|
123
|
+
export function createPromptSpec(partial) {
|
|
124
|
+
const now = new Date();
|
|
125
|
+
return PromptSpecSchema.parse({
|
|
126
|
+
variables: [],
|
|
127
|
+
guardrails: {},
|
|
128
|
+
security: {},
|
|
129
|
+
tags: [],
|
|
130
|
+
createdAt: now,
|
|
131
|
+
updatedAt: now,
|
|
132
|
+
...partial,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// ─── Template Rendering ─────────────────────────────────────────────────────
|
|
136
|
+
/**
|
|
137
|
+
* Render a prompt template with variable values.
|
|
138
|
+
* Validates variables against the spec before rendering.
|
|
139
|
+
* Applies injection protection if enabled.
|
|
140
|
+
*/
|
|
141
|
+
export function renderPromptTemplate(spec, values) {
|
|
142
|
+
const errors = [];
|
|
143
|
+
// Validate required variables are present
|
|
144
|
+
for (const variable of spec.variables) {
|
|
145
|
+
if (variable.required && !(variable.name in values)) {
|
|
146
|
+
if (variable.defaultValue === undefined) {
|
|
147
|
+
errors.push(`Missing required variable: ${variable.name}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (errors.length > 0) {
|
|
152
|
+
return { success: false, errors };
|
|
153
|
+
}
|
|
154
|
+
// Build resolved values (with defaults)
|
|
155
|
+
const resolved = {};
|
|
156
|
+
for (const variable of spec.variables) {
|
|
157
|
+
const value = values[variable.name] ?? variable.defaultValue;
|
|
158
|
+
let stringValue = String(value ?? '');
|
|
159
|
+
// Sanitize if injection protection is enabled
|
|
160
|
+
if (spec.security.sanitizeVariables) {
|
|
161
|
+
stringValue = sanitizeForTemplate(stringValue);
|
|
162
|
+
}
|
|
163
|
+
// Validate max length
|
|
164
|
+
if (variable.maxLength && stringValue.length > variable.maxLength) {
|
|
165
|
+
errors.push(`Variable "${variable.name}" exceeds max length (${stringValue.length} > ${variable.maxLength})`);
|
|
166
|
+
}
|
|
167
|
+
// Validate pattern
|
|
168
|
+
if (variable.validationPattern) {
|
|
169
|
+
const regex = new RegExp(variable.validationPattern);
|
|
170
|
+
if (!regex.test(stringValue)) {
|
|
171
|
+
errors.push(`Variable "${variable.name}" does not match pattern: ${variable.validationPattern}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
resolved[variable.name] = stringValue;
|
|
175
|
+
}
|
|
176
|
+
if (errors.length > 0) {
|
|
177
|
+
return { success: false, errors };
|
|
178
|
+
}
|
|
179
|
+
// Render template
|
|
180
|
+
let rendered = spec.template;
|
|
181
|
+
for (const [name, value] of Object.entries(resolved)) {
|
|
182
|
+
rendered = rendered.replaceAll(`{{${name}}}`, value);
|
|
183
|
+
}
|
|
184
|
+
// Check prohibited content
|
|
185
|
+
for (const pattern of spec.guardrails.prohibitedContent) {
|
|
186
|
+
if (rendered.includes(pattern)) {
|
|
187
|
+
errors.push(`Rendered prompt contains prohibited content: "${pattern}"`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Check required content
|
|
191
|
+
for (const required of spec.guardrails.requiredContent) {
|
|
192
|
+
if (!rendered.includes(required)) {
|
|
193
|
+
errors.push(`Rendered prompt missing required content: "${required}"`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (errors.length > 0) {
|
|
197
|
+
return { success: false, errors };
|
|
198
|
+
}
|
|
199
|
+
return { success: true, rendered };
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Basic sanitization to prevent prompt injection via variables.
|
|
203
|
+
* Escapes common injection patterns.
|
|
204
|
+
*/
|
|
205
|
+
function sanitizeForTemplate(input) {
|
|
206
|
+
return input
|
|
207
|
+
.replace(/\{\{/g, '{ {') // Prevent nested template injection
|
|
208
|
+
.replace(/\}\}/g, '} }')
|
|
209
|
+
.replace(/\n{3,}/g, '\n\n'); // Collapse excessive newlines
|
|
210
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Specification Template
|
|
3
|
+
*
|
|
4
|
+
* Zod-validated schema for agent skills. Every skill must declare its
|
|
5
|
+
* inputs/outputs, required permissions, security constraints, and include
|
|
6
|
+
* at least one test case. This ensures quality and security before any
|
|
7
|
+
* skill is activated in production.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
export declare const SkillPermissionsSchema: z.ZodObject<{
|
|
11
|
+
requiredTools: z.ZodArray<z.ZodString>;
|
|
12
|
+
requiredMemoryAccess: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
13
|
+
semantic: "semantic";
|
|
14
|
+
working: "working";
|
|
15
|
+
episodic: "episodic";
|
|
16
|
+
}>>>;
|
|
17
|
+
networkRequired: z.ZodDefault<z.ZodBoolean>;
|
|
18
|
+
estimatedTokenCost: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export type SkillPermissions = z.infer<typeof SkillPermissionsSchema>;
|
|
21
|
+
export declare const SkillSecuritySchema: z.ZodObject<{
|
|
22
|
+
sanitizeInput: z.ZodDefault<z.ZodBoolean>;
|
|
23
|
+
sanitizeOutput: z.ZodDefault<z.ZodBoolean>;
|
|
24
|
+
maxExecutionTimeMs: z.ZodDefault<z.ZodNumber>;
|
|
25
|
+
retryable: z.ZodDefault<z.ZodBoolean>;
|
|
26
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
handlesPII: z.ZodDefault<z.ZodBoolean>;
|
|
28
|
+
dataRetention: z.ZodDefault<z.ZodEnum<{
|
|
29
|
+
none: "none";
|
|
30
|
+
session: "session";
|
|
31
|
+
persistent: "persistent";
|
|
32
|
+
}>>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type SkillSecurity = z.infer<typeof SkillSecuritySchema>;
|
|
35
|
+
export declare const SkillTestCaseSchema: z.ZodObject<{
|
|
36
|
+
description: z.ZodString;
|
|
37
|
+
input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
38
|
+
expectedOutput: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
39
|
+
shouldPass: z.ZodDefault<z.ZodBoolean>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export type SkillTestCase = z.infer<typeof SkillTestCaseSchema>;
|
|
42
|
+
export declare const SkillSpecSchema: z.ZodObject<{
|
|
43
|
+
id: z.ZodString;
|
|
44
|
+
name: z.ZodString;
|
|
45
|
+
version: z.ZodString;
|
|
46
|
+
description: z.ZodString;
|
|
47
|
+
usage: z.ZodOptional<z.ZodString>;
|
|
48
|
+
inputSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
49
|
+
outputSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
50
|
+
permissions: z.ZodObject<{
|
|
51
|
+
requiredTools: z.ZodArray<z.ZodString>;
|
|
52
|
+
requiredMemoryAccess: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
53
|
+
semantic: "semantic";
|
|
54
|
+
working: "working";
|
|
55
|
+
episodic: "episodic";
|
|
56
|
+
}>>>;
|
|
57
|
+
networkRequired: z.ZodDefault<z.ZodBoolean>;
|
|
58
|
+
estimatedTokenCost: z.ZodOptional<z.ZodNumber>;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
security: z.ZodObject<{
|
|
61
|
+
sanitizeInput: z.ZodDefault<z.ZodBoolean>;
|
|
62
|
+
sanitizeOutput: z.ZodDefault<z.ZodBoolean>;
|
|
63
|
+
maxExecutionTimeMs: z.ZodDefault<z.ZodNumber>;
|
|
64
|
+
retryable: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
66
|
+
handlesPII: z.ZodDefault<z.ZodBoolean>;
|
|
67
|
+
dataRetention: z.ZodDefault<z.ZodEnum<{
|
|
68
|
+
none: "none";
|
|
69
|
+
session: "session";
|
|
70
|
+
persistent: "persistent";
|
|
71
|
+
}>>;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
testCases: z.ZodArray<z.ZodObject<{
|
|
74
|
+
description: z.ZodString;
|
|
75
|
+
input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
76
|
+
expectedOutput: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
77
|
+
shouldPass: z.ZodDefault<z.ZodBoolean>;
|
|
78
|
+
}, z.core.$strip>>;
|
|
79
|
+
author: z.ZodString;
|
|
80
|
+
license: z.ZodDefault<z.ZodString>;
|
|
81
|
+
category: z.ZodString;
|
|
82
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
83
|
+
createdAt: z.ZodDate;
|
|
84
|
+
updatedAt: z.ZodDate;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
export type SkillSpec = z.infer<typeof SkillSpecSchema>;
|
|
87
|
+
/**
|
|
88
|
+
* Validate a skill specification.
|
|
89
|
+
* Returns the validated spec or throws with detailed error messages.
|
|
90
|
+
*/
|
|
91
|
+
export declare function validateSkillSpec(input: unknown): SkillSpec;
|
|
92
|
+
/**
|
|
93
|
+
* Safely validate a skill specification.
|
|
94
|
+
*/
|
|
95
|
+
export declare function safeValidateSkillSpec(input: unknown): {
|
|
96
|
+
success: true;
|
|
97
|
+
data: SkillSpec;
|
|
98
|
+
} | {
|
|
99
|
+
success: false;
|
|
100
|
+
errors: string[];
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Create a skill spec with sensible defaults.
|
|
104
|
+
*/
|
|
105
|
+
export declare function createSkillSpec(partial: Pick<SkillSpec, 'id' | 'name' | 'version' | 'description' | 'author' | 'category' | 'inputSchema' | 'outputSchema' | 'testCases'> & Partial<SkillSpec>): SkillSpec;
|
|
106
|
+
//# sourceMappingURL=skill-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-spec.d.ts","sourceRoot":"","sources":["../../src/templates/skill-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,sBAAsB;;;;;;;;;iBASjC,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAIrE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;iBAe9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAI/D,eAAO,MAAM,mBAAmB;;;;;iBAS9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAI/D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqC1B,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAIvD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAE3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAS3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,IAAI,CACX,SAAS,EACP,IAAI,GACJ,MAAM,GACN,SAAS,GACT,aAAa,GACb,QAAQ,GACR,UAAU,GACV,aAAa,GACb,cAAc,GACd,WAAW,CACd,GACC,OAAO,CAAC,SAAS,CAAC,GACnB,SAAS,CAWX"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Specification Template
|
|
3
|
+
*
|
|
4
|
+
* Zod-validated schema for agent skills. Every skill must declare its
|
|
5
|
+
* inputs/outputs, required permissions, security constraints, and include
|
|
6
|
+
* at least one test case. This ensures quality and security before any
|
|
7
|
+
* skill is activated in production.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
// ─── Skill Permissions ──────────────────────────────────────────────────────
|
|
11
|
+
export const SkillPermissionsSchema = z.object({
|
|
12
|
+
/** Tools this skill requires to function */
|
|
13
|
+
requiredTools: z.array(z.string().min(1)),
|
|
14
|
+
/** Memory access needed */
|
|
15
|
+
requiredMemoryAccess: z.array(z.enum(['working', 'episodic', 'semantic'])).default([]),
|
|
16
|
+
/** Whether this skill needs network access */
|
|
17
|
+
networkRequired: z.boolean().default(false),
|
|
18
|
+
/** Estimated token cost per invocation (for budgeting) */
|
|
19
|
+
estimatedTokenCost: z.number().int().positive().optional(),
|
|
20
|
+
});
|
|
21
|
+
// ─── Skill Security ─────────────────────────────────────────────────────────
|
|
22
|
+
export const SkillSecuritySchema = z.object({
|
|
23
|
+
/** Sanitize all inputs before processing */
|
|
24
|
+
sanitizeInput: z.boolean().default(true),
|
|
25
|
+
/** Sanitize all outputs before returning */
|
|
26
|
+
sanitizeOutput: z.boolean().default(true),
|
|
27
|
+
/** Maximum execution time in milliseconds */
|
|
28
|
+
maxExecutionTimeMs: z.number().int().positive().default(30_000),
|
|
29
|
+
/** Whether this skill can be retried on failure */
|
|
30
|
+
retryable: z.boolean().default(true),
|
|
31
|
+
/** Maximum retry attempts */
|
|
32
|
+
maxRetries: z.number().int().min(0).default(3),
|
|
33
|
+
/** Whether this skill handles PII */
|
|
34
|
+
handlesPII: z.boolean().default(false),
|
|
35
|
+
/** Data retention policy for skill outputs */
|
|
36
|
+
dataRetention: z.enum(['none', 'session', 'persistent']).default('session'),
|
|
37
|
+
});
|
|
38
|
+
// ─── Test Case Schema ───────────────────────────────────────────────────────
|
|
39
|
+
export const SkillTestCaseSchema = z.object({
|
|
40
|
+
/** What this test verifies */
|
|
41
|
+
description: z.string().min(1),
|
|
42
|
+
/** Input parameters */
|
|
43
|
+
input: z.record(z.string(), z.unknown()),
|
|
44
|
+
/** Expected output (for assertion) */
|
|
45
|
+
expectedOutput: z.record(z.string(), z.unknown()).optional(),
|
|
46
|
+
/** Whether this test case should pass or fail */
|
|
47
|
+
shouldPass: z.boolean().default(true),
|
|
48
|
+
});
|
|
49
|
+
// ─── Full Skill Specification ───────────────────────────────────────────────
|
|
50
|
+
export const SkillSpecSchema = z.object({
|
|
51
|
+
/** Unique skill identifier */
|
|
52
|
+
id: z.string().min(1).max(100),
|
|
53
|
+
/** Human-readable skill name */
|
|
54
|
+
name: z.string().min(1).max(100),
|
|
55
|
+
/** Semantic version */
|
|
56
|
+
version: z.string().regex(/^\d+\.\d+\.\d+$/, 'Must be semver (e.g., 1.0.0)'),
|
|
57
|
+
/** What this skill does */
|
|
58
|
+
description: z.string().min(10).max(500),
|
|
59
|
+
/** Detailed instructions for how to use this skill */
|
|
60
|
+
usage: z.string().min(10).optional(),
|
|
61
|
+
/** Input parameter schema (JSON Schema-compatible) */
|
|
62
|
+
inputSchema: z.record(z.string(), z.unknown()),
|
|
63
|
+
/** Output schema (JSON Schema-compatible) */
|
|
64
|
+
outputSchema: z.record(z.string(), z.unknown()),
|
|
65
|
+
/** Permission requirements */
|
|
66
|
+
permissions: SkillPermissionsSchema,
|
|
67
|
+
/** Security constraints */
|
|
68
|
+
security: SkillSecuritySchema,
|
|
69
|
+
/** Test cases — at least one required */
|
|
70
|
+
testCases: z.array(SkillTestCaseSchema).min(1, 'At least one test case is required'),
|
|
71
|
+
/** Who created this skill */
|
|
72
|
+
author: z.string().min(1),
|
|
73
|
+
/** License for this skill */
|
|
74
|
+
license: z.string().default('MIT'),
|
|
75
|
+
/** Category for skill catalog */
|
|
76
|
+
category: z.string().min(1),
|
|
77
|
+
/** Tags for search/filtering */
|
|
78
|
+
tags: z.array(z.string()).default([]),
|
|
79
|
+
/** When this spec was created */
|
|
80
|
+
createdAt: z.date(),
|
|
81
|
+
/** When this spec was last updated */
|
|
82
|
+
updatedAt: z.date(),
|
|
83
|
+
});
|
|
84
|
+
// ─── Validation ─────────────────────────────────────────────────────────────
|
|
85
|
+
/**
|
|
86
|
+
* Validate a skill specification.
|
|
87
|
+
* Returns the validated spec or throws with detailed error messages.
|
|
88
|
+
*/
|
|
89
|
+
export function validateSkillSpec(input) {
|
|
90
|
+
return SkillSpecSchema.parse(input);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Safely validate a skill specification.
|
|
94
|
+
*/
|
|
95
|
+
export function safeValidateSkillSpec(input) {
|
|
96
|
+
const result = SkillSpecSchema.safeParse(input);
|
|
97
|
+
if (result.success) {
|
|
98
|
+
return { success: true, data: result.data };
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
errors: result.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create a skill spec with sensible defaults.
|
|
107
|
+
*/
|
|
108
|
+
export function createSkillSpec(partial) {
|
|
109
|
+
const now = new Date();
|
|
110
|
+
return SkillSpecSchema.parse({
|
|
111
|
+
permissions: { requiredTools: [] },
|
|
112
|
+
security: {},
|
|
113
|
+
license: 'MIT',
|
|
114
|
+
tags: [],
|
|
115
|
+
createdAt: now,
|
|
116
|
+
updatedAt: now,
|
|
117
|
+
...partial,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Base Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the structure for tools that agents can use
|
|
5
|
+
*/
|
|
6
|
+
import type { z } from 'zod/v4';
|
|
7
|
+
export interface ToolResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
data?: unknown;
|
|
10
|
+
error?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Concise text summary for the LLM context window.
|
|
13
|
+
* When set, the runtime sends this to the model instead of serializing `data`.
|
|
14
|
+
* Use this to keep tool results token-efficient while preserving full data in `data`.
|
|
15
|
+
*/
|
|
16
|
+
content?: string;
|
|
17
|
+
metadata?: {
|
|
18
|
+
executionTime?: number;
|
|
19
|
+
cost?: number;
|
|
20
|
+
tokensUsed?: number;
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface Tool {
|
|
25
|
+
/**
|
|
26
|
+
* Unique tool name (used in LLM tool calls and deduplication)
|
|
27
|
+
*/
|
|
28
|
+
name: string;
|
|
29
|
+
/**
|
|
30
|
+
* Human-readable display name shown in UI. Falls back to `name` if omitted.
|
|
31
|
+
*/
|
|
32
|
+
label?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Tool description (used for LLM tool selection)
|
|
35
|
+
*/
|
|
36
|
+
description: string;
|
|
37
|
+
/**
|
|
38
|
+
* Zod schema for tool parameters
|
|
39
|
+
*/
|
|
40
|
+
parameters: z.ZodSchema;
|
|
41
|
+
/**
|
|
42
|
+
* Execute the tool with given parameters
|
|
43
|
+
*/
|
|
44
|
+
execute(params: unknown): Promise<ToolResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Optional: Validate parameters before execution
|
|
47
|
+
*/
|
|
48
|
+
validate?(params: unknown): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Optional: Get tool metadata
|
|
51
|
+
*/
|
|
52
|
+
getMetadata?(): {
|
|
53
|
+
category?: string;
|
|
54
|
+
version?: string;
|
|
55
|
+
author?: string;
|
|
56
|
+
[key: string]: unknown;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Tool execution context
|
|
61
|
+
*/
|
|
62
|
+
export interface ToolContext {
|
|
63
|
+
agentId?: string;
|
|
64
|
+
userId?: string;
|
|
65
|
+
sessionId?: string;
|
|
66
|
+
metadata?: Record<string, unknown>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Tool with context
|
|
70
|
+
*/
|
|
71
|
+
export interface ContextualTool extends Tool {
|
|
72
|
+
executeWithContext(params: unknown, context: ToolContext): Promise<ToolResult>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE;QACT,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF;AAED,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,UAAU,EAAE,CAAC,CAAC,SAAS,CAAA;IAEvB;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE7C;;OAEG;IACH,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAA;IAEnC;;OAEG;IACH,WAAW,CAAC,IAAI;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI;IAC1C,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC/E"}
|