feat(auth/deploy): vendor shared definitions and fix workspaces build error in standalone API
This commit is contained in:
@@ -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",
|
||||
|
||||
49
src/shared/constants/index.ts
Normal file
49
src/shared/constants/index.ts
Normal 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
|
||||
545
src/shared/data/models-config.json
Normal file
545
src/shared/data/models-config.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
397
src/shared/data/remote-agents-config.json
Normal file
397
src/shared/data/remote-agents-config.json
Normal 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 Tailwind‑CSS styling, utility‑first refactors, or responsive component work. Use PROACTIVELY whenever a UI task involves Tailwind or when framework‑agnostic 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
253
src/shared/data/remote-skills-config.json
Normal file
253
src/shared/data/remote-skills-config.json
Normal 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
6
src/shared/index.ts
Normal 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
47
src/shared/types/agent.ts
Normal 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
270
src/shared/types/api.ts
Normal 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
|
||||
}
|
||||
54
src/shared/types/cloud-backend.ts
Normal file
54
src/shared/types/cloud-backend.ts
Normal 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
12
src/shared/types/index.ts
Normal 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'
|
||||
79
src/shared/types/marketplace.ts
Normal file
79
src/shared/types/marketplace.ts
Normal 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'
|
||||
28
src/shared/types/models.ts
Normal file
28
src/shared/types/models.ts
Normal 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;
|
||||
58
src/shared/types/remote-agents.ts
Normal file
58
src/shared/types/remote-agents.ts
Normal 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[]
|
||||
}
|
||||
32
src/shared/types/remote-skills.ts
Normal file
32
src/shared/types/remote-skills.ts
Normal 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;
|
||||
}
|
||||
122
src/shared/types/share-tools.ts
Normal file
122
src/shared/types/share-tools.ts
Normal 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
181
src/shared/types/share.ts
Normal 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';
|
||||
71
src/shared/types/skills-marketplace.ts
Normal file
71
src/shared/types/skills-marketplace.ts
Normal 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
23
src/shared/types/user.ts
Normal 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
|
||||
}
|
||||
167
src/shared/utils/format-tool-summary.ts
Normal file
167
src/shared/utils/format-tool-summary.ts
Normal 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';
|
||||
}
|
||||
}
|
||||
4
src/shared/utils/index.ts
Normal file
4
src/shared/utils/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
// packages/shared/src/utils/index.ts
|
||||
// Shared utilities for VibnCode
|
||||
|
||||
export { formatToolInputSummary } from './format-tool-summary';
|
||||
@@ -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"],
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user