feat(auth/deploy): vendor shared definitions and fix workspaces build error in standalone API

This commit is contained in:
2026-05-29 13:46:28 -07:00
parent 62e73eedd2
commit 221aee06e2
21 changed files with 2402 additions and 5 deletions

View File

@@ -23,7 +23,6 @@
"@hono/oauth-providers": "^0.8.5",
"@hono/zod-validator": "^0.4.1",
"@libsql/client": "^0.15.15",
"@vibncode/shared": "workspace:*",
"drizzle-orm": "^0.36.4",
"hono": "^4.6.14",
"jose": "^5.9.6",

View File

@@ -0,0 +1,49 @@
// Shared constants
export const DEFAULT_CATEGORIES = [
{ slug: 'coding', name: 'Coding', icon: '💻' },
{ slug: 'writing', name: 'Writing', icon: '✍️' },
{ slug: 'data', name: 'Data Analysis', icon: '📊' },
{ slug: 'research', name: 'Research', icon: '🔬' },
{ slug: 'productivity', name: 'Productivity', icon: '⚡' },
{ slug: 'creative', name: 'Creative', icon: '🎨' },
{ slug: 'education', name: 'Education', icon: '📚' },
{ slug: 'business', name: 'Business', icon: '💼' },
{ slug: 'frontend', name: 'Frontend', icon: '🌐' }
] as const
export const DEFAULT_TAGS = [
'typescript',
'javascript',
'python',
'react',
'vue',
'angular',
'nodejs',
'rust',
'go',
'debugging',
'code-review',
'refactoring',
'documentation',
'testing',
'api',
'database',
'frontend',
'backend',
'fullstack',
'devops',
] as const
export const AGENT_SORT_OPTIONS = [
{ value: 'popular', label: 'Most Popular' },
{ value: 'recent', label: 'Recently Added' },
{ value: 'featured', label: 'Featured' },
] as const
export const ITEMS_PER_PAGE = 20
export const MAX_DESCRIPTION_LENGTH = 500
export const MAX_LONG_DESCRIPTION_LENGTH = 5000
export const MAX_CHANGELOG_LENGTH = 2000
export const MAX_TAGS_PER_AGENT = 10
export const MAX_CATEGORIES_PER_AGENT = 3

View File

@@ -0,0 +1,545 @@
{
"version": "2026-04-25T07:20:08.393Z",
"models": {
"gpt-5.4-nano": {
"name": "GPT-5.4 Nano",
"imageInput": true,
"providers": [
"aiGateway",
"openai",
"openRouter",
"zenmux"
],
"providerMappings": {
"openai": "gpt-5.4-nano",
"aiGateway": "openai/gpt-5.4-nano",
"openRouter": "openai/gpt-5.4-nano",
"zenmux": "openai/gpt-5.4-nano"
},
"pricing": {
"input": "0.0000002",
"output": "0.00000125",
"cachedInput": "0.00000002"
},
"context_length": 400000
},
"gpt-5.5": {
"name": "GPT 5.5",
"imageInput": true,
"providers": [
"aiGateway",
"openai",
"github_copilot",
"openRouter",
"zenmux"
],
"providerMappings": {
"openai": "gpt-5.5",
"github_copilot": "gpt-5.5",
"aiGateway": "openai/gpt-5.5",
"openRouter": "openai/gpt-5.5",
"zenmux": "openai/gpt-5.5"
},
"pricing": {
"input": "0.000005",
"output": "0.00003",
"cachedInput": "0.0000005"
},
"context_length": 1050000
},
"gpt-54-mini": {
"name": "GPT-5.4 Mini",
"imageInput": true,
"providers": [
"aiGateway",
"openai",
"github_copilot",
"openRouter",
"zenmux"
],
"providerMappings": {
"openai": "gpt-5.4-mini",
"aiGateway": "openai/gpt-5.4-mini",
"openRouter": "openai/gpt-5.4-mini",
"github_copilot": "gpt-5.4-mini",
"zenmux": "openai/gpt-5.4-mini"
},
"pricing": {
"input": "0.00000075",
"output": "0.0000045",
"cachedInput": "0.000000075"
},
"context_length": 400000
},
"gpt-5.3-codex-spark": {
"name": "GPT-5.3-Codex-Spark",
"imageInput": false,
"providers": [
"openai"
],
"providerMappings": {
"openai": "gpt-5.3-codex-spark"
},
"pricing": {
"input": "0",
"output": "0",
"cachedInput": "0"
},
"context_length": 128000
},
"gemini-3-flash": {
"name": "Gemini 3 Flash",
"imageInput": true,
"providers": [
"google",
"aiGateway",
"openRouter",
"github_copilot",
"zenmux"
],
"providerMappings": {
"google": "gemini-3-flash-preview",
"aiGateway": "google/gemini-3-flash",
"openRouter": "google/gemini-3-flash-preview",
"github_copilot": "gemini-3-flash-preview",
"zenmux": "google/gemini-3-flash-preview"
},
"pricing": {
"input": "0.0000005",
"output": "0.000003",
"cachedInput": "0.00000005"
},
"context_length": 1048576
},
"gemini-3.1-pro-preview": {
"name": "Gemini 3.1 Pro Preview",
"imageInput": true,
"providers": [
"google",
"aiGateway",
"github_copilot",
"openRouter",
"zenmux"
],
"providerMappings": {
"google": "gemini-3.1-pro-preview",
"github_copilot": "gemini-3.1-pro-preview",
"aiGateway": "google/gemini-3.1-pro-preview",
"openRouter": "google/gemini-3.1-pro-preview",
"zenmux": "google/gemini-3.1-pro-preview"
},
"pricing": {
"input": "0.000002",
"output": "0.000012",
"cachedInput": "0.0000002"
},
"context_length": 1048576
},
"gemini-2.5-flash-lite": {
"name": "Gemini 2.5 Flash Lite",
"imageInput": true,
"providers": [
"google",
"aiGateway",
"openRouter",
"zenmux"
],
"providerMappings": {
"google": "gemini-2.5-flash-lite",
"aiGateway": "google/gemini-2.5-flash-lite",
"openRouter": "google/gemini-2.5-flash-lite",
"zenmux": "google/gemini-2.5-flash-lite"
},
"pricing": {
"input": "0.0000001",
"output": "0.0000004",
"cachedInput": "0.00000001"
},
"context_length": 1048576
},
"claude-opus-4.7": {
"name": "Claude Opus 4.7",
"imageInput": true,
"interleaved": true,
"providers": [
"aiGateway",
"anthropic",
"github_copilot",
"openRouter",
"zenmux"
],
"providerMappings": {
"anthropic": "claude-opus-4-7",
"github_copilot": "claude-opus-4.7",
"aiGateway": "anthropic/claude-opus-4.7",
"openRouter": "anthropic/claude-opus-4.7",
"zenmux": "anthropic/claude-opus-4.7"
},
"pricing": {
"input": "0.000005",
"output": "0.000025",
"cachedInput": "0.0000005",
"cacheCreation": "0.00000625"
},
"context_length": 1000000
},
"claude-sonnet-4.6": {
"name": "Claude Sonnet 4.6",
"imageInput": true,
"interleaved": true,
"providers": [
"aiGateway",
"anthropic",
"github_copilot",
"openRouter",
"zenmux"
],
"providerMappings": {
"anthropic": "claude-sonnet-4-6",
"aiGateway": "anthropic/claude-sonnet-4-6",
"openRouter": "anthropic/claude-sonnet-4-6",
"github_copilot": "claude-sonnet-4-6",
"zenmux": "anthropic/claude-sonnet-4.6"
},
"pricing": {
"input": "0.000003",
"output": "0.000015",
"cachedInput": "0.0000003",
"cacheCreation": "0.00000375"
},
"context_length": 1000000
},
"claude-haiku-4.5": {
"name": "Claude Haiku 4.5",
"imageInput": true,
"interleaved": true,
"providers": [
"aiGateway",
"openRouter",
"github_copilot",
"anthropic",
"zenmux"
],
"providerMappings": {
"anthropic": "claude-haiku-4-5",
"github_copilot": "claude-haiku-4.5",
"aiGateway": "anthropic/claude-haiku-4.5",
"openRouter": "anthropic/claude-haiku-4.5",
"zenmux": "anthropic/claude-haiku-4.5"
},
"pricing": {
"input": "0.000001",
"output": "0.000005",
"cachedInput": "0.0000001",
"cacheCreation": "0.00000125"
},
"context_length": 200000
},
"kimi-k2.6": {
"name": "Kimi K2.6",
"imageInput": true,
"videoInput": true,
"interleaved": true,
"providers": [
"aiGateway",
"openRouter",
"kimi_coding",
"alibaba",
"moonshot",
"zenmux"
],
"providerMappings": {
"aiGateway": "moonshotai/kimi-k2.6",
"openRouter": "moonshotai/kimi-k2.6",
"moonshot": "kimi-k2.6",
"kimi_coding": "kimi-k2.6",
"alibaba": "kimi-k2.6",
"zenmux": "moonshotai/kimi-k2.6"
},
"pricing": {
"input": "0.00000095",
"output": "0.000004",
"cachedInput": "0.00000016"
},
"context_length": 262144
},
"deepseek-v4-pro": {
"name": "Deepseek V4 Pro",
"interleaved": true,
"providers": [
"deepseek"
],
"providerMappings": {
"deepseek": "deepseek-v4-pro"
},
"pricing": {
"input": "0.00000174",
"output": "0.00000348",
"cachedInput": "0.000000145"
},
"context_length": 1000000
},
"deepseek-v4-flash": {
"name": "Deepseek V4 Flash",
"interleaved": true,
"providers": [
"deepseek"
],
"providerMappings": {
"deepseek": "deepseek-v4-flash"
},
"pricing": {
"input": "0.00000014",
"output": "0.00000028",
"cachedInput": "0.000000028"
},
"context_length": 1000000
},
"qwen3.6-plus": {
"name": "Qwen 3.6 Plus",
"imageInput": true,
"providers": [
"openRouter"
],
"providerMappings": {
"openRouter": "qwen/qwen3.6-plus-preview:free"
},
"pricing": {
"input": "0.0000004",
"output": "0.0000024",
"cachedInput": "0.00000004",
"cacheCreation": "0.0000005"
},
"context_length": 1000000
},
"glm-51": {
"name": "GLM 5.1",
"imageInput": true,
"interleaved": true,
"providers": [
"zhipu",
"openRouter",
"aiGateway",
"zai",
"alibaba",
"ollama",
"zenmux"
],
"providerMappings": {
"zhipu": "glm-5.1",
"zai": "glm-5.1",
"alibaba": "glm-5.1",
"aiGateway": "zai/glm-5.1",
"openRouter": "z-ai/glm-5.1",
"ollama": "glm-5.1:cloud",
"zenmux": "z-ai/glm-5.1"
},
"pricing": {
"input": "0.0000014",
"output": "0.0000044",
"cachedInput": "0.00000026"
},
"context_length": 202752
},
"MiniMax-M2.7": {
"name": "MiniMax M2.7",
"imageInput": true,
"interleaved": true,
"providers": [
"MiniMax",
"vibncode",
"ollama",
"alibaba",
"aiGateway",
"openRouter",
"zenmux"
],
"providerMappings": {
"vibncode": "MiniMax-M2.7",
"MiniMax": "MiniMax-M2.7",
"alibaba": "MiniMax-M2.7",
"ollama": "minimax-m2.7:cloud",
"aiGateway": "minimax/minimax-m2.7",
"openRouter": "minimax/minimax-m2.7",
"zenmux": "minimax/minimax-m2.7"
},
"pricing": {
"input": "0.0000003",
"output": "0.0000012",
"cachedInput": "0.00000006",
"cacheCreation": "0.000000375"
},
"context_length": 204800
},
"gemini-2.5-flash-image": {
"name": "Nano Banana",
"imageInput": true,
"imageOutput": true,
"providers": [
"openRouter",
"aiGateway",
"google"
],
"providerMappings": {
"google": "gemini-2.5-flash-image",
"aiGateway": "google/gemini-2.5-flash-image",
"openRouter": "google/gemini-2.5-flash-image"
},
"pricing": {
"input": "0.0000003",
"output": "0.0000025",
"cachedInput": "0.00000003"
},
"context_length": 32768
},
"gemini-3.1-flash-image-preview": {
"name": "Nano Banana 2",
"imageInput": true,
"imageOutput": true,
"providers": [
"openRouter",
"aiGateway",
"google",
"zenmux"
],
"providerMappings": {
"google": "gemini-3.1-flash-image-preview",
"aiGateway": "google/gemini-3.1-flash-image-preview",
"openRouter": "google/gemini-3.1-flash-image-preview",
"zenmux": "google/gemini-3.1-flash-image-preview"
},
"pricing": {
"input": "0.0000005",
"output": "0.000003",
"cachedInput": "0.00000005"
},
"context_length": 65536
},
"gemini-3-pro-image": {
"name": "Nano Banana Pro",
"imageInput": true,
"imageOutput": true,
"providers": [
"openRouter",
"aiGateway",
"ollama",
"google",
"zenmux"
],
"providerMappings": {
"google": "gemini-3-pro-image-preview",
"ollama": "gemini-3-flash-preview:cloud",
"aiGateway": "google/gemini-3-pro-image",
"zenmux": "google/gemini-3-pro-image-preview",
"openRouter": "google/gemini-3-pro-image-preview"
},
"pricing": {
"input": "0.000002",
"output": "0.000012",
"cachedInput": "0.0000002"
},
"context_length": 65536
},
"whisper-1": {
"name": "Whisper 1",
"audioInput": true,
"providers": [
"openai"
],
"pricing": {
"input": "0.006",
"output": "0"
}
},
"scribe_v2_realtime": {
"name": "Scribe V2 Realtime",
"audioInput": true,
"providers": [
"elevenlabs"
],
"pricing": {
"input": "0.004",
"output": "0"
}
},
"whisper-large-v3-turbo": {
"name": "Whisper Large V3 Turbo",
"audioInput": true,
"providers": [
"groq"
],
"pricing": {
"input": "0",
"output": "0"
}
},
"whisper-large-v3": {
"name": "Whisper Large V3",
"audioInput": true,
"providers": [
"groq"
],
"pricing": {
"input": "0",
"output": "0"
}
},
"dall-e-3": {
"name": "Image DALL-E 3",
"imageInput": false,
"imageOutput": true,
"providers": [
"openai"
],
"pricing": {
"input": "0",
"output": "0"
}
},
"doubao-seedream-4-5-251128": {
"name": "Image Doubao Seedream",
"imageInput": false,
"imageOutput": true,
"providers": [
"volcengine"
],
"providerMappings": {
"volcengine": "doubao-seedream-4-5-251128"
},
"pricing": {
"input": "0",
"output": "0"
}
},
"glm-image": {
"name": "Image GLM",
"imageInput": false,
"imageOutput": true,
"providers": [
"zhipu"
],
"providerMappings": {
"zhipu": "glm-image"
},
"pricing": {
"input": "0",
"output": "0"
}
},
"qwen-image-max": {
"name": "Qwen Image Max",
"imageInput": false,
"imageOutput": true,
"providers": [
"alibaba"
],
"providerMappings": {
"alibaba": "qwen-image-max"
},
"pricing": {
"input": "0",
"output": "0"
}
}
}
}

View File

@@ -0,0 +1,397 @@
{
"version": "2026-01-14T07:25:15.915Z",
"remoteAgents": [
{
"id": "accessibility-tester",
"name": "accessibility-tester",
"description": "Expert accessibility tester specializing in WCAG compliance, inclusive design, and universal access. Masters screen reader compatibility, keyboard navigation, and assistive technology integration with focus on creating barrier-free digital experiences.",
"category": "test",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/accessibility-tester.md"
},
{
"id": "ad-security-reviewer",
"name": "ad-security-reviewer",
"description": "Active Directory security specialist analyzing identity configuration, privileged group design, delegation, authentication policies, legacy protocols, and attack-surface exposure across enterprise domains.",
"category": "security",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/ad-security-reviewer.md"
},
{
"id": "api-architect",
"name": "api-architect",
"description": "Universal API designer specializing in RESTful design, GraphQL schemas, and modern contract standards. **MUST BE USED** proactively whenever a project needs a new or revised API contract. Produces clear resource models, OpenAPI/GraphQL specs, and guidance on auth, versioning, pagination, and error formats—without prescribing any specific backend technology.",
"category": "api",
"repository": "vijaythecoder/awesome-claude-agents",
"githubPath": "agents/universal/api-architect.md"
},
{
"id": "api-designer",
"name": "api-designer",
"description": "API architecture expert designing scalable, developer-friendly interfaces. Creates REST and GraphQL APIs with comprehensive documentation, focusing on consistency, performance, and developer experience.",
"category": "api",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/api-designer.md"
},
{
"id": "architect-reviewer",
"name": "architect-reviewer",
"description": "Expert architecture reviewer specializing in system design validation, architectural patterns, and technical decision assessment. Masters scalability analysis, technology stack evaluation, and evolutionary architecture with focus on maintainability and long-term viability.",
"category": "architect",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/architect-reviewer.md"
},
{
"id": "azure-infra-engineer",
"name": "azure-infra-engineer",
"description": "Azure cloud infrastructure expert specializing in network design, identity integration, PowerShell automation with Az modules, and infrastructure-as-code patterns using Bicep.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/azure-infra-engineer.md"
},
{
"id": "backend-developer",
"name": "backend-developer",
"description": "Senior backend engineer specializing in scalable API development and microservices architecture. Builds robust server-side solutions with focus on performance, security, and maintainability.",
"category": "backend",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/backend-developer.md"
},
{
"id": "chaos-engineer",
"name": "chaos-engineer",
"description": "Expert chaos engineer specializing in controlled failure injection, resilience testing, and building antifragile systems. Masters chaos experiments, game day planning, and continuous resilience improvement with focus on learning from failure.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/chaos-engineer.md"
},
{
"id": "cloud-architect",
"name": "cloud-architect",
"description": "Expert cloud architect specializing in multi-cloud strategies, scalable architectures, and cost-effective solutions. Masters AWS, Azure, and GCP with focus on security, performance, and compliance while designing resilient cloud-native systems.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/cloud-architect.md"
},
{
"id": "code-archaeologist",
"name": "code-archaeologist",
"description": "MUST BE USED to explore and document unfamiliar, legacy, or complex codebases. Use PROACTIVELY before refactors, onboarding, audits, or risk reviews. Produces a full-length report—architecture, metrics, risks, and a prioritised action plan—that other sub-agents can act on.",
"category": "code",
"repository": "vijaythecoder/awesome-claude-agents",
"githubPath": "agents/core/code-archaeologist.md"
},
{
"id": "code-reviewer",
"name": "code-reviewer",
"description": "Expert code reviewer specializing in code quality, security vulnerabilities, and best practices across multiple languages. Masters static analysis, design patterns, and performance optimization with focus on maintainability and technical debt reduction.",
"category": "review",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/code-reviewer.md"
},
{
"id": "competitive-analyst",
"name": "competitive-analyst",
"description": "Expert competitive analyst specializing in competitor intelligence, strategic analysis, and market positioning. Masters competitive benchmarking, SWOT analysis, and strategic recommendations with focus on creating sustainable competitive advantages.",
"category": "analyst",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/10-research-analysis/competitive-analyst.md"
},
{
"id": "compliance-auditor",
"name": "compliance-auditor",
"description": "Expert compliance auditor specializing in regulatory frameworks, data privacy laws, and security standards. Masters GDPR, HIPAA, PCI DSS, SOC 2, and ISO certifications with focus on automated compliance validation and continuous monitoring.",
"category": "auditor",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/compliance-auditor.md"
},
{
"id": "data-researcher",
"name": "data-researcher",
"description": "Expert data researcher specializing in discovering, collecting, and analyzing diverse data sources. Masters data mining, statistical analysis, and pattern recognition with focus on extracting meaningful insights from complex datasets to support evidence-based decisions.",
"category": "research",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/10-research-analysis/data-researcher.md"
},
{
"id": "database-administrator",
"name": "database-administrator",
"description": "Expert database administrator specializing in high-availability systems, performance optimization, and disaster recovery. Masters PostgreSQL, MySQL, MongoDB, and Redis with focus on reliability, scalability, and operational excellence.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/database-administrator.md"
},
{
"id": "debugger",
"name": "debugger",
"description": "Expert debugger specializing in complex issue diagnosis, root cause analysis, and systematic problem-solving. Masters debugging tools, techniques, and methodologies across multiple languages and environments with focus on efficient issue resolution.",
"category": "debug",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/debugger.md"
},
{
"id": "deployment-engineer",
"name": "deployment-engineer",
"description": "Expert deployment engineer specializing in CI/CD pipelines, release automation, and deployment strategies. Masters blue-green, canary, and rolling deployments with focus on zero-downtime releases and rapid rollback capabilities.",
"category": "deployment",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/deployment-engineer.md"
},
{
"id": "devops-engineer",
"name": "devops-engineer",
"description": "Expert DevOps engineer bridging development and operations with comprehensive automation, monitoring, and infrastructure management. Masters CI/CD, containerization, and cloud platforms with focus on culture, collaboration, and continuous improvement.",
"category": "devops",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/devops-engineer.md"
},
{
"id": "devops-incident-responder",
"name": "devops-incident-responder",
"description": "Expert incident responder specializing in rapid detection, diagnosis, and resolution of production issues. Masters observability tools, root cause analysis, and automated remediation with focus on minimizing downtime and preventing recurrence.",
"category": "incident",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/devops-incident-responder.md"
},
{
"id": "electron-pro",
"name": "electron-pro",
"description": "Desktop application specialist building secure cross-platform solutions. Develops Electron apps with native OS integration, focusing on security, performance, and seamless user experience.",
"category": "github",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/electron-pro.md"
},
{
"id": "error-detective",
"name": "error-detective",
"description": "Expert error detective specializing in complex error pattern analysis, correlation, and root cause discovery. Masters distributed system debugging, error tracking, and anomaly detection with focus on finding hidden connections and preventing error cascades.",
"category": "debug",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/error-detective.md"
},
{
"id": "frontend-developer",
"name": "frontend-developer",
"description": "Expert UI engineer focused on crafting robust, scalable frontend solutions. Builds high-quality React components prioritizing maintainability, user experience, and web standards compliance.",
"category": "frontend",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/frontend-developer.md"
},
{
"id": "fullstack-developer",
"name": "fullstack-developer",
"description": "End-to-end feature owner with expertise across the entire stack. Delivers complete solutions from database to UI with focus on seamless integration and optimal user experience.",
"category": "fullstack",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/fullstack-developer.md"
},
{
"id": "graphql-architect",
"name": "graphql-architect",
"description": "GraphQL schema architect designing efficient, scalable API graphs. Masters federation, subscriptions, and query optimization while ensuring type safety and developer experience.",
"category": "architect",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/graphql-architect.md"
},
{
"id": "incident-responder",
"name": "incident-responder",
"description": "Expert incident responder specializing in security and operational incident management. Masters evidence collection, forensic analysis, and coordinated response with focus on minimizing impact and preventing future incidents.",
"category": "incident",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/incident-responder.md"
},
{
"id": "kubernetes-specialist",
"name": "kubernetes-specialist",
"description": "Expert Kubernetes specialist mastering container orchestration, cluster management, and cloud-native architectures. Specializes in production-grade deployments, security hardening, and performance optimization with focus on scalability and reliability.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/kubernetes-specialist.md"
},
{
"id": "market-researcher",
"name": "market-researcher",
"description": "Expert market researcher specializing in market analysis, consumer insights, and competitive intelligence. Masters market sizing, segmentation, and trend analysis with focus on identifying opportunities and informing strategic business decisions.",
"category": "research",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/10-research-analysis/market-researcher.md"
},
{
"id": "microservices-architect",
"name": "microservices-architect",
"description": "Distributed systems architect designing scalable microservice ecosystems. Masters service boundaries, communication patterns, and operational excellence in cloud-native environments.",
"category": "architect",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/microservices-architect.md"
},
{
"id": "mobile-developer",
"name": "mobile-developer",
"description": "Cross-platform mobile specialist building performant native experiences. Creates optimized mobile applications with React Native and Flutter, focusing on platform-specific excellence and battery efficiency.",
"category": "github",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/mobile-developer.md"
},
{
"id": "network-engineer",
"name": "network-engineer",
"description": "Expert network engineer specializing in cloud and hybrid network architectures, security, and performance optimization. Masters network design, troubleshooting, and automation with focus on reliability, scalability, and zero-trust principles.",
"category": "network",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/network-engineer.md"
},
{
"id": "penetration-tester",
"name": "penetration-tester",
"description": "Expert penetration tester specializing in ethical hacking, vulnerability assessment, and security testing. Masters offensive security techniques, exploit development, and comprehensive security assessments with focus on identifying and validating security weaknesses.",
"category": "test",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/penetration-tester.md"
},
{
"id": "performance-engineer",
"name": "performance-engineer",
"description": "Expert performance engineer specializing in system optimization, bottleneck identification, and scalability engineering. Masters performance testing, profiling, and tuning across applications, databases, and infrastructure with focus on achieving optimal response times and resource efficiency.",
"category": "performance",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/performance-engineer.md"
},
{
"id": "performance-optimizer",
"name": "performance-optimizer",
"description": "MUST BE USED whenever users report slowness, high cloud costs, or scaling concerns. Use PROACTIVELY before traffic spikes. Identifies bottlenecks, profiles workloads, and applies optimisations for blazingly fast systems.",
"category": "performance",
"repository": "vijaythecoder/awesome-claude-agents",
"githubPath": "agents/core/performance-optimizer.md"
},
{
"id": "platform-engineer",
"name": "platform-engineer",
"description": "Expert platform engineer specializing in internal developer platforms, self-service infrastructure, and developer experience. Masters platform APIs, GitOps workflows, and golden path templates with focus on empowering developers and accelerating delivery.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/platform-engineer.md"
},
{
"id": "powershell-security-hardening",
"name": "powershell-security-hardening",
"description": "Security-focused PowerShell specialist skilled in hardening Windows systems, securing automation, enforcing least privilege, and aligning scripts with enterprise security baselines and compliance frameworks.",
"category": "security",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/powershell-security-hardening.md"
},
{
"id": "project-analyst",
"name": "project-analyst",
"description": "MUST BE USED to analyse any new or unfamiliar codebase. Use PROACTIVELY to detect frameworks, tech stacks, and architecture so specialists can be routed correctly.",
"category": "project",
"repository": "vijaythecoder/awesome-claude-agents",
"githubPath": "agents/orchestrators/project-analyst.md"
},
{
"id": "qa-expert",
"name": "qa-expert",
"description": "Expert QA engineer specializing in comprehensive quality assurance, test strategy, and quality metrics. Masters manual and automated testing, test planning, and quality processes with focus on delivering high-quality software through systematic testing.",
"category": "test",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/qa-expert.md"
},
{
"id": "research-analyst",
"name": "research-analyst",
"description": "Expert research analyst specializing in comprehensive information gathering, synthesis, and insight generation. Masters research methodologies, data analysis, and report creation with focus on delivering actionable intelligence that drives informed decision-making.",
"category": "research",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/10-research-analysis/research-analyst.md"
},
{
"id": "search-specialist",
"name": "search-specialist",
"description": "Expert search specialist mastering advanced information retrieval, query optimization, and knowledge discovery. Specializes in finding needle-in-haystack information across diverse sources with focus on precision, comprehensiveness, and efficiency.",
"category": "research",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/10-research-analysis/search-specialist.md"
},
{
"id": "security-auditor",
"name": "security-auditor",
"description": "Expert security auditor specializing in comprehensive security assessments, compliance validation, and risk management. Masters security frameworks, audit methodologies, and compliance standards with focus on identifying vulnerabilities and ensuring regulatory adherence.",
"category": "security",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/security-auditor.md"
},
{
"id": "security-engineer",
"name": "security-engineer",
"description": "Expert infrastructure security engineer specializing in DevSecOps, cloud security, and compliance frameworks. Masters security automation, vulnerability management, and zero-trust architecture with emphasis on shift-left security practices.",
"category": "security",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/security-engineer.md"
},
{
"id": "sre-engineer",
"name": "sre-engineer",
"description": "Expert Site Reliability Engineer balancing feature velocity with system stability through SLOs, automation, and operational excellence. Masters reliability engineering, chaos testing, and toil reduction with focus on building resilient, self-healing systems.",
"category": "test",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/sre-engineer.md"
},
{
"id": "tailwind-frontend-expert",
"name": "tailwind-frontend-expert",
"description": "MUST BE USED for any TailwindCSS styling, utilityfirst refactors, or responsive component work. Use PROACTIVELY whenever a UI task involves Tailwind or when frameworkagnostic styling is required.",
"category": "frontend",
"repository": "vijaythecoder/awesome-claude-agents",
"githubPath": "agents/universal/tailwind-css-expert.md"
},
{
"id": "terraform-engineer",
"name": "terraform-engineer",
"description": "Expert Terraform engineer specializing in infrastructure as code, multi-cloud provisioning, and modular architecture. Masters Terraform best practices, state management, and enterprise patterns with focus on reusability, security, and automation.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/terraform-engineer.md"
},
{
"id": "test-automator",
"name": "test-automator",
"description": "Expert test automation engineer specializing in building robust test frameworks, CI/CD integration, and comprehensive test coverage. Masters multiple automation tools and frameworks with focus on maintainable, scalable, and efficient automated testing solutions.",
"category": "test",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/04-quality-security/test-automator.md"
},
{
"id": "trend-analyst",
"name": "trend-analyst",
"description": "Expert trend analyst specializing in identifying emerging patterns, forecasting future developments, and strategic foresight. Masters trend detection, impact analysis, and scenario planning with focus on helping organizations anticipate and adapt to change.",
"category": "analyst",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/10-research-analysis/trend-analyst.md"
},
{
"id": "ui-designer",
"name": "ui-designer",
"description": "Expert visual designer specializing in creating intuitive, beautiful, and accessible user interfaces. Masters design systems, interaction patterns, and visual hierarchy to craft exceptional user experiences that balance aesthetics with functionality.",
"category": "frontend",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/ui-designer.md"
},
{
"id": "websocket-engineer",
"name": "websocket-engineer",
"description": "Real-time communication specialist implementing scalable WebSocket architectures. Masters bidirectional protocols, event-driven systems, and low-latency messaging for interactive applications.",
"category": "websocket",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/01-core-development/websocket-engineer.md"
},
{
"id": "windows-infra-admin",
"name": "windows-infra-admin",
"description": "Windows infrastructure expert specializing in Active Directory, DNS, DHCP, GPO, server administration, and enterprise automation via PowerShell.",
"category": "infra",
"repository": "VoltAgent/awesome-claude-code-subagents",
"githubPath": "categories/03-infrastructure/windows-infra-admin.md"
}
]
}

View File

@@ -0,0 +1,253 @@
{
"version": "2026-01-03T07:22:40.405Z",
"remoteSkills": [
{
"id": "algorithmic-art",
"name": "algorithmic-art",
"category": "Frontend",
"description": "Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",
"repository": "anthropics/skills",
"githubPath": "skills/algorithmic-art"
},
{
"id": "brainstorming",
"name": "brainstorming",
"category": "Workflow",
"description": "You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.",
"repository": "obra/superpowers",
"githubPath": "skills/brainstorming"
},
{
"id": "brand-guidelines",
"name": "brand-guidelines",
"category": "Writing",
"description": "Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",
"repository": "anthropics/skills",
"githubPath": "skills/brand-guidelines"
},
{
"id": "canvas-design",
"name": "canvas-design",
"category": "Media",
"description": "Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",
"repository": "anthropics/skills",
"githubPath": "skills/canvas-design"
},
{
"id": "changelog-generator",
"name": "changelog-generator",
"category": "Workflow",
"description": "Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.",
"repository": "ComposioHQ/awesome-claude-skills",
"githubPath": "changelog-generator"
},
{
"id": "dispatching-parallel-agents",
"name": "dispatching-parallel-agents",
"category": "Meta",
"description": "Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies",
"repository": "obra/superpowers",
"githubPath": "skills/dispatching-parallel-agents"
},
{
"id": "doc-coauthoring",
"name": "doc-coauthoring",
"category": "Documentation",
"description": "Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",
"repository": "anthropics/skills",
"githubPath": "skills/doc-coauthoring"
},
{
"id": "docx",
"name": "docx",
"category": "Documents",
"description": "Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks",
"repository": "anthropics/skills",
"githubPath": "skills/docx"
},
{
"id": "executing-plans",
"name": "executing-plans",
"category": "Workflow",
"description": "Use when you have a written implementation plan to execute in a separate session with review checkpoints",
"repository": "obra/superpowers",
"githubPath": "skills/executing-plans"
},
{
"id": "finishing-a-development-branch",
"name": "finishing-a-development-branch",
"category": "Workflow",
"description": "Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup",
"repository": "obra/superpowers",
"githubPath": "skills/finishing-a-development-branch"
},
{
"id": "frontend-design",
"name": "frontend-design",
"category": "Frontend",
"description": "Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.",
"repository": "anthropics/skills",
"githubPath": "skills/frontend-design"
},
{
"id": "internal-comms",
"name": "internal-comms",
"category": "Writing",
"description": "A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",
"repository": "anthropics/skills",
"githubPath": "skills/internal-comms"
},
{
"id": "mcp-builder",
"name": "mcp-builder",
"category": "Development",
"description": "Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).",
"repository": "anthropics/skills",
"githubPath": "skills/mcp-builder"
},
{
"id": "pdf",
"name": "pdf",
"category": "Documents",
"description": "Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or programmatically process, generate, or analyze PDF documents at scale.",
"repository": "anthropics/skills",
"githubPath": "skills/pdf"
},
{
"id": "pptx",
"name": "pptx",
"category": "Documents",
"description": "Presentation creation, editing, and analysis. When Claude needs to work with presentations (.pptx files) for: (1) Creating new presentations, (2) Modifying or editing content, (3) Working with layouts, (4) Adding comments or speaker notes, or any other presentation tasks",
"repository": "anthropics/skills",
"githubPath": "skills/pptx"
},
{
"id": "receiving-code-review",
"name": "receiving-code-review",
"category": "Workflow",
"description": "Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation",
"repository": "obra/superpowers",
"githubPath": "skills/receiving-code-review"
},
{
"id": "requesting-code-review",
"name": "requesting-code-review",
"category": "Workflow",
"description": "Use when completing tasks, implementing major features, or before merging to verify work meets requirements",
"repository": "obra/superpowers",
"githubPath": "skills/requesting-code-review"
},
{
"id": "skill-creator",
"name": "skill-creator",
"category": "Meta",
"description": "Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.",
"repository": "anthropics/skills",
"githubPath": "skills/skill-creator"
},
{
"id": "slack-gif-creator",
"name": "slack-gif-creator",
"category": "Media",
"description": "Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like \"make me a GIF of X doing Y for Slack.",
"repository": "anthropics/skills",
"githubPath": "skills/slack-gif-creator"
},
{
"id": "subagent-driven-development",
"name": "subagent-driven-development",
"category": "Meta",
"description": "Use when executing implementation plans with independent tasks in the current session",
"repository": "obra/superpowers",
"githubPath": "skills/subagent-driven-development"
},
{
"id": "systematic-debugging",
"name": "systematic-debugging",
"category": "Debugging",
"description": "Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes",
"repository": "obra/superpowers",
"githubPath": "skills/systematic-debugging"
},
{
"id": "test-driven-development",
"name": "test-driven-development",
"category": "Testing",
"description": "Use when implementing any feature or bugfix, before writing implementation code",
"repository": "obra/superpowers",
"githubPath": "skills/test-driven-development"
},
{
"id": "theme-factory",
"name": "theme-factory",
"category": "Media",
"description": "Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.",
"repository": "anthropics/skills",
"githubPath": "skills/theme-factory"
},
{
"id": "using-git-worktrees",
"name": "using-git-worktrees",
"category": "Workflow",
"description": "Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification",
"repository": "obra/superpowers",
"githubPath": "skills/using-git-worktrees"
},
{
"id": "using-superpowers",
"name": "using-superpowers",
"category": "Meta",
"description": "Use when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions",
"repository": "obra/superpowers",
"githubPath": "skills/using-superpowers"
},
{
"id": "verification-before-completion",
"name": "verification-before-completion",
"category": "Debugging",
"description": "Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always",
"repository": "obra/superpowers",
"githubPath": "skills/verification-before-completion"
},
{
"id": "web-artifacts-builder",
"name": "web-artifacts-builder",
"category": "Development",
"description": "Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.",
"repository": "anthropics/skills",
"githubPath": "skills/web-artifacts-builder"
},
{
"id": "webapp-testing",
"name": "webapp-testing",
"category": "Testing",
"description": "Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.",
"repository": "anthropics/skills",
"githubPath": "skills/webapp-testing"
},
{
"id": "writing-plans",
"name": "writing-plans",
"category": "Meta",
"description": "Use when you have a spec or requirements for a multi-step task, before touching code",
"repository": "obra/superpowers",
"githubPath": "skills/writing-plans"
},
{
"id": "writing-skills",
"name": "writing-skills",
"category": "Meta",
"description": "Use when creating new skills, editing existing skills, or verifying skills work before deployment",
"repository": "obra/superpowers",
"githubPath": "skills/writing-skills"
},
{
"id": "xlsx",
"name": "xlsx",
"category": "Documents",
"description": "Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas",
"repository": "anthropics/skills",
"githubPath": "skills/xlsx"
}
]
}

6
src/shared/index.ts Normal file
View File

@@ -0,0 +1,6 @@
// Shared types and utilities for VibnCode
// Export all types
export * from './types'
export * from './constants'
export * from './utils'

47
src/shared/types/agent.ts Normal file
View File

@@ -0,0 +1,47 @@
// Agent types (extended from existing local agent types)
export type AgentSourceType = 'system' | 'local' | 'marketplace'
export type ModelType = 'main_model' | 'small_model' | 'image_generator_model' | 'transcription_model'
export interface LocalAgent {
id: string
name: string
description: string
model: string // DEPRECATED: Use modelType instead. Kept for backwards compatibility
modelType?: ModelType // New: Model type category
systemPrompt: string
toolsConfig: Record<string, any>
rules?: string
outputFormat?: string
isHidden: boolean
isDefault: boolean
isEnabled: boolean
// Dynamic prompt config
dynamicEnabled: boolean
dynamicProviders: string[]
dynamicVariables: Record<string, string>
dynamicProviderSettings?: Record<string, any>
// Marketplace metadata
sourceType: AgentSourceType
marketplaceId?: string
marketplaceVersion?: string
forkedFromId?: string
forkedFromMarketplaceId?: string
isShared: boolean
lastSyncedAt?: number
// Additional metadata
iconUrl?: string
authorName?: string
authorId?: string
categories: string[]
tags: string[]
createdAt: number
updatedAt: number
createdBy: string
usageCount: number
}

270
src/shared/types/api.ts Normal file
View File

@@ -0,0 +1,270 @@
// API request and response types
import type { MarketplaceAgent, AgentVersion, Category, Tag, Collection, AgentSortOption } from './marketplace'
import type { MarketplaceSkill, SkillVersion, DocumentationItem, SkillSortOption } from './skills-marketplace'
import type { User } from './user'
// ==================== Authentication ====================
export interface LoginResponse {
token: string
user: User
}
export interface AuthMeResponse {
user: User
}
// ==================== Marketplace Browse ====================
export interface ListAgentsRequest {
page?: number
limit?: number
offset?: number
sort?: AgentSortOption
sortBy?: string
category?: string
categoryIds?: string[]
tags?: string // comma-separated
tagIds?: string[]
search?: string
minRating?: number
isFeatured?: boolean
}
export interface ListAgentsResponse {
agents: MarketplaceAgent[]
total: number
page: number
limit: number
hasMore: boolean
}
export interface GetAgentResponse {
agent: MarketplaceAgent
}
export interface GetAgentVersionsResponse {
versions: AgentVersion[]
}
export interface GetAgentVersionResponse {
version: AgentVersion
}
export interface GetCategoriesResponse {
categories: Category[]
}
export interface GetTagsResponse {
tags: Tag[]
}
export interface GetCollectionsResponse {
collections: Collection[]
}
export interface GetCollectionResponse {
collection: Collection
}
export interface GetFeaturedAgentsResponse {
agents: MarketplaceAgent[]
}
// ==================== Agent Publishing ====================
export interface CreateAgentRequest {
name: string
description: string
longDescription?: string
iconUrl?: string
categories: string[] // category slugs
tags: string[] // tag names
// First version data
version: string
model: string
systemPrompt: string
toolsConfig: Record<string, any>
rules?: string
outputFormat?: string
dynamicEnabled: boolean
dynamicProviders: string[]
dynamicVariables: Record<string, string>
dynamicProviderSettings?: Record<string, any>
changelog?: string
}
export interface CreateAgentResponse {
agent: MarketplaceAgent
version: AgentVersion
}
export interface UpdateAgentRequest {
name?: string
description?: string
longDescription?: string
iconUrl?: string
bannerUrl?: string
categories?: string[]
tags?: string[]
isPublished?: boolean
}
export interface UpdateAgentResponse {
agent: MarketplaceAgent
}
export interface CreateVersionRequest {
version: string
model: string
systemPrompt: string
toolsConfig: Record<string, any>
rules?: string
outputFormat?: string
dynamicEnabled: boolean
dynamicProviders: string[]
dynamicVariables: Record<string, string>
dynamicProviderSettings?: Record<string, any>
changelog?: string
isPrerelease?: boolean
}
export interface CreateVersionResponse {
version: AgentVersion
}
// ==================== User ====================
export interface GetUserAgentsResponse {
agents: MarketplaceAgent[]
}
export interface UserStatsResponse {
totalAgents: number
totalDownloads: number
totalInstalls: number
totalUsage: number
}
// ==================== Statistics ====================
export interface TrackEventRequest {
version?: string
}
export interface TrackEventResponse {
message: string
}
// ==================== Skills Publishing ====================
export interface CreateSkillRequest {
name: string
description: string
longDescription?: string
iconUrl?: string
categories: string[] // category slugs
tags: string[] // tag names
// Skill content
systemPromptFragment?: string
workflowRules?: string
documentation: DocumentationItem[]
// R2 storage fields (optional, used when publishing local skills)
storageUrl?: string
packageSize?: number
checksum?: string
hasScripts?: boolean
// Agent Skills Specification fields
compatibility?: string
metadata?: Record<string, string> | null
}
export interface CreateSkillResponse {
skill: MarketplaceSkill
version: SkillVersion
}
export interface UpdateSkillRequest {
name?: string
description?: string
longDescription?: string
iconUrl?: string
bannerUrl?: string
categories?: string[]
tags?: string[]
systemPromptFragment?: string
workflowRules?: string
documentation?: DocumentationItem[]
isPublished?: boolean
// Agent Skills Specification fields
compatibility?: string
metadata?: Record<string, string> | null
}
export interface UpdateSkillResponse {
skill: MarketplaceSkill
}
export interface CreateSkillVersionRequest {
version: string
systemPromptFragment?: string
workflowRules?: string
documentation: DocumentationItem[]
changelog?: string
isPrerelease?: boolean
}
export interface CreateSkillVersionResponse {
version: SkillVersion
}
export interface ListSkillsRequest {
page?: number
limit?: number
offset?: number
sort?: SkillSortOption
category?: string
categoryIds?: string[]
tags?: string // comma-separated
tagIds?: string[]
search?: string
minRating?: number
isFeatured?: boolean
}
export interface ListSkillsResponse {
skills: MarketplaceSkill[]
total: number
page: number
limit: number
hasMore: boolean
}
export interface GetSkillResponse {
skill: MarketplaceSkill
}
export interface GetSkillVersionsResponse {
versions: SkillVersion[]
}
export interface GetSkillVersionResponse {
version: SkillVersion
}
export interface GetUserSkillsResponse {
skills: MarketplaceSkill[]
}
// ==================== Error Response ====================
export interface ErrorResponse {
error: string
details?: any
}

View File

@@ -0,0 +1,54 @@
export type SessionId = string;
export type SessionStatusEvent = {
type: 'status'
data: { message: string }
}
export type SessionTokenEvent = {
type: 'token'
data: { token: string }
}
export type SessionMessageFinalEvent = {
type: 'message.final'
data: { messageId: string; content: string }
}
export type SessionToolCallEvent = {
type: 'tool.call'
data: { toolCallId: string; name: string; input: unknown }
}
export type SessionToolResultEvent = {
type: 'tool.result'
data: { toolCallId: string; output: unknown }
}
export type SessionErrorEvent = {
type: 'error'
data: { message: string }
}
export type SessionEventEnvelope =
| SessionStatusEvent
| SessionTokenEvent
| SessionMessageFinalEvent
| SessionToolCallEvent
| SessionToolResultEvent
| SessionErrorEvent
export type CreateSessionRequest = {
projectId?: string
taskSettings?: Record<string, unknown>
}
export type CreateSessionResponse = {
sessionId: SessionId
}
export type TaskSettings = {
autoApproveEdits?: boolean
autoApprovePlan?: boolean
autoCodeReview?: boolean
}

12
src/shared/types/index.ts Normal file
View File

@@ -0,0 +1,12 @@
// Export all type definitions
export * from './agent'
export * from './user'
export * from './marketplace'
export * from './skills-marketplace'
export * from './remote-skills'
export * from './remote-agents'
export * from './api'
export * from './share'
export * from './share-tools'
export * from './models'
export * from './cloud-backend'

View File

@@ -0,0 +1,79 @@
// Marketplace types
import type { PublicUser } from './user'
export interface MarketplaceAgent {
id: string
slug: string
name: string
description: string
longDescription?: string
author: PublicUser
iconUrl?: string
bannerUrl?: string
installCount: number
usageCount: number
rating: number
ratingCount: number
latestVersion: string
categories: Category[]
tags: Tag[]
isFeatured: boolean
isPublished: boolean
createdAt: string
updatedAt: string
// Agent configuration fields (from latest version)
model?: string
systemPrompt?: string
rules?: string
outputFormat?: string
}
export interface AgentVersion {
id: string
agentId: string
version: string
model: string
systemPrompt: string
toolsConfig: Record<string, any>
rules?: string
outputFormat?: string
dynamicEnabled: boolean
dynamicProviders: string[]
dynamicVariables: Record<string, string>
dynamicProviderSettings: Record<string, any>
changelog?: string
isPrerelease: boolean
createdAt: string
}
export interface Category {
id: string
name: string
slug: string
description?: string
icon?: string
displayOrder: number
}
export interface Tag {
id: string
name: string
slug: string
usageCount: number
}
export interface Collection {
id: string
name: string
slug: string
description?: string
icon?: string
isFeatured: boolean
displayOrder: number
agents: MarketplaceAgent[]
createdAt: string
updatedAt: string
}
export type AgentSortOption = 'popular' | 'recent' | 'featured'

View File

@@ -0,0 +1,28 @@
/**
* Model configuration type definitions
* Shared between frontend and backend
*/
export interface ModelConfig {
name: string;
imageInput?: boolean;
videoInput?: boolean;
audioInput?: boolean;
imageOutput?: boolean;
interleaved?: boolean; // Indicates interleaved thinking capability
providers: string[]; // Will be validated against ProviderIds at runtime
providerMappings?: Record<string, string>;
pricing?: { input: string; output: string; cachedInput?: string; cacheCreation?: string };
context_length?: number;
}
export interface ModelsConfiguration {
version: string; // ISO 8601 timestamp
models: Record<string, ModelConfig>;
}
export interface ModelVersionResponse {
version: string; // ISO 8601 timestamp
}
export type ModelKey = string;

View File

@@ -0,0 +1,58 @@
/**
* Remote Agents Configuration Types
*
* Simplified schema for remote agents stored in JSON format
* Only stores metadata. Full agent details are fetched from GitHub when downloaded.
*/
import type { ModelType } from './agent'
/**
* Remote agent metadata stored in config file
* Full details (systemPrompt, tools, dynamicPrompt) are fetched from GitHub on download
*/
export interface RemoteAgentMetadata {
/** Unique identifier for the agent */
id: string
/** Display name of the agent */
name: string
/** Brief description of the agent */
description: string
/** Category classification (single category) */
category: string
/** GitHub repository (e.g., "vibncode/agents") */
repository: string
/** Path within the GitHub repository (e.g., "agents/coding") */
githubPath: string
}
/**
* Full remote agent configuration (used after downloading from GitHub)
*/
export interface RemoteAgentConfig extends RemoteAgentMetadata {
// AgentDefinition-compatible fields
modelType: ModelType
systemPrompt: string
tools?: Record<string, unknown>
hidden?: boolean
rules?: string
outputFormat?: string
dynamicPrompt?: {
enabled: boolean
providers: string[]
variables: Record<string, string>
providerSettings?: Record<string, unknown>
}
defaultSkills?: string[]
isBeta?: boolean
role?: 'read' | 'write'
canBeSubagent?: boolean
version?: string
}
export interface RemoteAgentsConfiguration {
/** ISO 8601 timestamp of the configuration version */
version: string
/** Array of remote agent metadata (full details fetched from GitHub on download) */
remoteAgents: RemoteAgentMetadata[]
}

View File

@@ -0,0 +1,32 @@
/**
* Remote Skills Configuration Types
*
* Simplified schema for remote skills stored in JSON format
*/
export interface RemoteSkillConfig {
/** Unique identifier for the skill */
id: string;
/** Display name of the skill */
name: string;
/** Category classification (single category) */
category: string;
/** Brief description of the skill */
description: string;
/** GitHub repository (e.g., "vibncode/skills") */
repository: string;
/** Path within the GitHub repository (e.g., "skills/theme-factory") */
githubPath: string;
}
export interface RemoteSkillsConfiguration {
/** ISO 8601 timestamp of the configuration version */
version: string;
/** Array of remote skill configurations */
remoteSkills: RemoteSkillConfig[];
}
export interface RemoteSkillVersionResponse {
/** Current version timestamp */
version: string;
}

View File

@@ -0,0 +1,122 @@
// packages/shared/src/types/share-tools.ts
// Tool-specific output types for share feature
/**
* ReadFile tool output structure
*/
export interface ReadFileOutput {
file_path: string;
content: string;
}
/**
* WriteFile tool output structure
*/
export interface WriteFileOutput {
file_path: string;
content: string;
}
/**
* Diff line for EditFile tool
*/
export interface DiffLine {
type: 'added' | 'removed' | 'unchanged';
content: string;
lineNumber?: number;
originalLineNumber?: number;
newLineNumber?: number;
}
/**
* EditFile tool output structure
*/
export interface EditFileOutput {
file_path: string;
diff: DiffLine[];
stats: {
added: number;
removed: number;
};
}
/**
* Todo item structure
*/
export interface TodoItem {
id: string;
content: string;
status: 'pending' | 'in_progress' | 'completed';
}
/**
* TodoWrite tool output structure
*/
export interface TodoWriteOutput {
todos: TodoItem[];
}
/**
* CodeSearch tool output structure
*/
export interface CodeSearchOutput {
success: boolean;
result: string;
error?: string;
}
/**
* Type guards
*/
export function isReadFileOutput(output: unknown): output is ReadFileOutput {
return (
typeof output === 'object' &&
output !== null &&
'file_path' in output &&
'content' in output &&
typeof (output as ReadFileOutput).file_path === 'string' &&
typeof (output as ReadFileOutput).content === 'string'
);
}
export function isWriteFileOutput(output: unknown): output is WriteFileOutput {
return (
typeof output === 'object' &&
output !== null &&
'file_path' in output &&
'content' in output &&
typeof (output as WriteFileOutput).file_path === 'string' &&
typeof (output as WriteFileOutput).content === 'string'
);
}
export function isEditFileOutput(output: unknown): output is EditFileOutput {
return (
typeof output === 'object' &&
output !== null &&
'file_path' in output &&
'diff' in output &&
'stats' in output &&
Array.isArray((output as EditFileOutput).diff)
);
}
export function isTodoWriteOutput(output: unknown): output is TodoWriteOutput {
return (
typeof output === 'object' &&
output !== null &&
'todos' in output &&
Array.isArray((output as TodoWriteOutput).todos)
);
}
export function isCodeSearchOutput(output: unknown): output is CodeSearchOutput {
return (
typeof output === 'object' &&
output !== null &&
'success' in output &&
'result' in output &&
typeof (output as CodeSearchOutput).success === 'boolean' &&
typeof (output as CodeSearchOutput).result === 'string'
);
}

181
src/shared/types/share.ts Normal file
View File

@@ -0,0 +1,181 @@
// packages/shared/src/types/share.ts
// Share-related type definitions for VibnCode Task Share feature
/**
* Share snapshot version for compatibility tracking
*/
export const SHARE_SNAPSHOT_VERSION = '1.0';
/**
* Simplified message type for sharing (no Tauri dependencies)
*/
export interface ShareMessage {
id: string;
role: 'user' | 'assistant' | 'tool';
content: string | ShareToolContent[];
timestamp: number;
attachments?: ShareAttachment[];
nestedTools?: ShareMessage[];
}
/**
* Tool content for shared messages
*/
export interface ShareToolContent {
type: 'tool-call' | 'tool-result';
toolCallId: string;
toolName: string;
summary?: string; // Pre-formatted summary for display
input?: Record<string, unknown>;
output?: unknown; // Sanitized output
}
/**
* Attachment for shared messages (simplified, no local file paths)
*/
export interface ShareAttachment {
id: string;
type: 'image' | 'video' | 'file' | 'code';
filename: string;
mimeType: string;
size: number;
url?: string; // R2 storage URL for images/videos
preview?: string; // Base64 preview for small images
}
/**
* Task share snapshot - the complete data structure for a shared task
*/
export interface TaskShareSnapshot {
version: string;
task: {
id: string;
title: string;
createdAt: number;
messageCount: number;
model?: string;
};
messages: ShareMessage[];
metadata: {
sharedAt: number;
vibncodeVersion: string;
platform: 'macos' | 'windows' | 'linux';
};
}
/**
* Request to create a new share
*/
export interface CreateShareRequest {
snapshot: TaskShareSnapshot;
options?: ShareOptions;
}
/**
* Share options when creating a share
*/
export interface ShareOptions {
/** Expiration period */
expiresIn?: '1d' | '7d' | '30d' | 'never';
/** Optional password protection */
password?: string;
/** Whether to include detailed tool outputs */
includeToolDetails?: boolean;
}
/**
* Response after creating a share
*/
export interface CreateShareResponse {
shareId: string;
shareUrl: string;
expiresAt?: number;
}
/**
* Task share record (stored in database)
*/
export interface TaskShare {
id: string;
taskId: string;
userId?: string;
taskTitle: string;
snapshotData: TaskShareSnapshot;
storageUrl?: string; // R2 URL for large shares
model?: string;
passwordHash?: string;
expiresAt?: number;
viewCount: number;
isPublic: boolean;
createdAt: number;
createdBy?: string; // Device ID or user ID
}
/**
* Share metadata for listing (without full snapshot)
*/
export interface ShareListItem {
id: string;
taskTitle: string;
model?: string;
messageCount: number;
viewCount: number;
expiresAt?: number;
createdAt: number;
hasPassword: boolean;
}
/**
* Response when share requires password
*/
export interface SharePasswordRequired {
requiresPassword: true;
shareId: string;
}
/**
* Response when share is expired or not found
*/
export interface ShareNotFound {
error: 'not_found' | 'expired';
message: string;
}
/**
* Sensitive tools that should have filtered output in shares
*/
export const SENSITIVE_TOOLS = [
'bash',
'writeFile',
'editFile',
'deleteFile',
'callAgent',
] as const;
export type SensitiveTool = (typeof SENSITIVE_TOOLS)[number];
/**
* Check if a tool is sensitive
*/
export function isSensitiveTool(toolName: string): toolName is SensitiveTool {
return SENSITIVE_TOOLS.includes(toolName as SensitiveTool);
}
/**
* Expiration duration in milliseconds
*/
export const EXPIRATION_DURATIONS: Record<string, number> = {
'1d': 24 * 60 * 60 * 1000,
'7d': 7 * 24 * 60 * 60 * 1000,
'30d': 30 * 24 * 60 * 60 * 1000,
};
/**
* Maximum share size in bytes (2MB)
*/
export const MAX_SHARE_SIZE = 2 * 1024 * 1024;
/**
* Share base URL
*/
export const SHARE_BASE_URL = 'https://vibncode.com/share';

View File

@@ -0,0 +1,71 @@
// Skills Marketplace types
import type { PublicUser } from './user'
export interface MarketplaceSkill {
id: string
slug: string
name: string
description: string
longDescription?: string
author: PublicUser
iconUrl?: string
bannerUrl?: string
installCount: number
usageCount: number
rating: number
ratingCount: number
latestVersion: string
categories: SkillCategory[]
tags: SkillTag[]
isFeatured: boolean
isPublished: boolean
createdAt: string
updatedAt: string
// Skill content fields (from latest version)
systemPromptFragment?: string
workflowRules?: string
documentation?: DocumentationItem[]
hasScripts?: boolean
// Agent Skills Specification fields
compatibility?: string
metadata?: Record<string, string> | null
}
export interface SkillVersion {
id: string
skillId: string
version: string
systemPromptFragment?: string
workflowRules?: string
documentation?: DocumentationItem[]
changelog?: string
isPrerelease: boolean
createdAt: string
}
export interface DocumentationItem {
type: 'inline' | 'file' | 'url'
title: string
content?: string
filePath?: string
url?: string
}
export interface SkillCategory {
id: string
name: string
slug: string
description?: string
icon?: string
displayOrder: number
}
export interface SkillTag {
id: string
name: string
slug: string
usageCount: number
}
export type SkillSortOption = 'popular' | 'recent' | 'downloads' | 'installs' | 'name' | 'rating' | 'updated'

23
src/shared/types/user.ts Normal file
View File

@@ -0,0 +1,23 @@
// User types for marketplace
export interface User {
id: string
name: string
email?: string
avatarUrl?: string
displayName?: string
oauthProvider: 'github' | 'google'
oauthId: string
createdAt: string
updatedAt: string
}
export interface PublicUser {
id: string
name: string
displayName?: string
avatarUrl?: string
bio?: string
website?: string
agentCount?: number
}

View File

@@ -0,0 +1,167 @@
// packages/shared/src/utils/format-tool-summary.ts
// Shared utility for formatting tool input summaries
// Used by both desktop app and share/web to display tool parameters
interface TodoItem {
id: string;
content: string;
status: 'pending' | 'in_progress' | 'completed';
}
interface FormatToolInputSummaryOptions {
output?: unknown;
sanitize?: boolean; // Whether to sanitize paths for privacy
}
/**
* Sanitize file path to remove sensitive information
* Handles various path formats across platforms
*/
function sanitizePath(path: string): string {
// Handle macOS user paths (/Users/username/...)
if (path.match(/^\/Users\/[^/]+/)) {
return path.replace(/^\/Users\/[^/]+/, '~');
}
// Handle Windows local paths (C:\Users\username\...)
if (path.match(/^[A-Z]:\\Users\\/i)) {
return path.replace(/^[A-Z]:\\Users\\[^\\]+/i, '~').replace(/\\/g, '/');
}
// Handle Windows network paths (\\server\share\...)
if (path.match(/^\\\\[^\\]+\\/)) {
const parts = path.split('\\').filter(Boolean);
if (parts.length > 0) {
return `[network]/${parts.slice(2).join('/')}`;
}
}
// Handle Linux/Unix user paths (/home/username/...)
if (path.match(/^\/home\/[^/]+/)) {
return path.replace(/^\/home\/[^/]+/, '~');
}
// Handle mounted volumes with usernames (/Volumes/username/... or /mnt/username/...)
if (path.match(/\/(Volumes|mnt)\/[^/]*[Uu]sers?[^/]*\//)) {
return path.replace(/\/(Volumes|mnt)\/[^/]+/, '[volume]');
}
// Handle WSL paths (/mnt/c/Users/username/...)
if (path.match(/^\/mnt\/[a-z]\/Users\//i)) {
return path.replace(/^\/mnt\/[a-z]\/Users\/[^/]+/i, '~');
}
return path;
}
/**
* Format tool input for display summary
* Provides intelligent formatting based on tool type
*/
export function formatToolInputSummary(
toolName: string,
input: Record<string, unknown>,
options?: FormatToolInputSummaryOptions
): string {
if (!input) return '';
const { output, sanitize = false } = options || {};
// Helper to process file paths
const processPath = (path: string): string => {
return sanitize ? sanitizePath(path) : path;
};
// codeSearch: pattern in path
if (toolName === 'codeSearch') {
return `${input.pattern} in ${processPath(String(input.path))}`;
}
// exitPlanMode: show action
if (toolName === 'exitPlanMode') {
return (output as { action?: string })?.action ?? '';
}
// listFiles: directory path
if (toolName === 'listFiles') {
return processPath(String(input.directory_path));
}
// todoWrite: show in-progress todo or count
if (toolName === 'todoWrite' && Array.isArray(input.todos)) {
const inProgressTodo = (input.todos as TodoItem[]).find(
(todo) => todo.status === 'in_progress'
);
if (inProgressTodo?.content) {
return `"${inProgressTodo.content}" doing`;
}
return `Updating ${input.todos.length} todo(s)`;
}
// File tools: readFile, writeFile, editFile
if (input.file_path && typeof input.file_path === 'string') {
return processPath(input.file_path);
}
// Web search: query
if (input.query && typeof input.query === 'string') {
return input.query;
}
// Bash command
if (input.command && typeof input.command === 'string') {
const command = input.command as string;
// Remove the leading "cd /path/to/workspace && " prefix for bash tool
if (toolName === 'bashTool' || toolName === 'bash') {
const match = command.match(/^cd\s+[^\s]+\s+&&\s+(.+)$/);
if (match?.[1]) {
return match[1];
}
}
return command;
}
// URL-based tools
if (input.url && typeof input.url === 'string') {
return input.url;
}
// callAgent: agent ID
if (input.agentId && typeof input.agentId === 'string') {
return input.agentId;
}
// Fallback: join simple values
const values = Object.values(input).filter(
(v) => typeof v === 'string' || typeof v === 'number'
);
if (values.length > 0 && values.length <= 2) {
const stringValues = values.map(String);
if (sanitize) {
return stringValues.map((v) => {
// Check if it looks like a path
if (v.includes('/') || v.match(/^[A-Z]:\\/)) {
return sanitizePath(v);
}
return v;
}).join(' ');
}
return stringValues.join(' ');
}
// Final fallback: JSON stringify
try {
const jsonStr = JSON.stringify(input);
if (sanitize) {
// Sanitize any paths in the JSON
return jsonStr.replace(
/(["\\/])(?:Users|home|mnt)\/[^"\/]+/g,
'$1~'
);
}
return jsonStr;
} catch {
return 'Complex Input';
}
}

View File

@@ -0,0 +1,4 @@
// packages/shared/src/utils/index.ts
// Shared utilities for VibnCode
export { formatToolInputSummary } from './format-tool-summary';

View File

@@ -18,10 +18,10 @@
"forceConsistentCasingInFileNames": true,
"types": ["bun-types"],
"paths": {
"@vibncode/shared": ["../../packages/shared/src/index.ts"],
"@vibncode/shared/*": ["../../packages/shared/src/*"]
}
"@vibncode/shared": ["./src/shared/index.ts"],
"@vibncode/shared/*": ["./src/shared/*"],
},
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
"exclude": ["node_modules", "dist"],
}