diff --git a/.agents/skills/benchmark-fetcher/README.md b/.agents/skills/benchmark-fetcher/README.md index 0a659379..74c463e9 100644 --- a/.agents/skills/benchmark-fetcher/README.md +++ b/.agents/skills/benchmark-fetcher/README.md @@ -1,235 +1,43 @@ -# Benchmark Fetcher Skill - Implementation Complete +# Benchmark evidence importer -## Status: ✅ READY FOR USE +The importer applies reviewed evidence; it does not browse or scrape leaderboards. -The benchmark-fetcher skill has been successfully implemented and is ready to fetch benchmark data from 6 leaderboard websites. +## Input format -## What's Been Implemented - -### 1. Core Infrastructure ✅ -- ✅ Skill structure with SKILL.md documentation -- ✅ Configuration system (config.mjs) -- ✅ Model name mapping with 3-tier fuzzy matching -- ✅ Atomic manifest updates with validation -- ✅ Comprehensive reporting system - -### 2. Benchmark Extractors ✅ -- ✅ **SWE-bench** - Fully implemented with regex parsing -- ✅ **TerminalBench** - Decimal format conversion (0-1 scale) -- ✅ **MMMU** - Dual benchmark extraction (MMMU + MMMU Pro) -- ✅ **SciCode** - Generic extraction pattern -- ✅ **LiveCodeBench** - Generic extraction pattern -- ✅ **WebDevArena** - Generic extraction pattern - -### 3. Model Name Mappings ✅ -Pre-configured mappings for: -- Claude models (Opus 4.5, Opus 4.1, Sonnet 4.5, Haiku 4.5) -- GPT models (GPT-5, GPT-5.1, GPT-5-Codex, GPT-4o, GPT-4.1) -- Gemini models (Gemini 3 Pro, Gemini 2.5 Pro, Gemini 2.5 Flash) -- DeepSeek models (DeepSeek R1, DeepSeek V3) -- Other models (GLM 4.6, Grok 4, Grok Code Fast 1) - -## Quick Start - -### Test with Dry Run -```bash -node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --dry-run -``` - -### Fetch All Benchmarks -```bash -node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs -``` - -### Fetch Specific Benchmarks -```bash -# Just SWE-bench and TerminalBench -node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --benchmarks swebench,terminalBench -``` - -### Update Specific Models Only -```bash -# Just update Claude Sonnet 4.5 and GPT-4o -node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --models claude-sonnet-4-5,gpt-4o +```json +{ + "records": [ + { + "modelId": "exact-existing-manifest-id", + "modelLabel": "Exact label shown by the leaderboard", + "benchmark": "sweBench", + "benchmarkVersion": "SWE-bench Verified, leaderboard/harness version", + "evaluation": "Agent scaffold, reasoning setting, pass@k, tool policy, or other conditions", + "score": 74.4, + "sourceUrl": "https://authoritative.example/leaderboard", + "sourceTitle": "Official leaderboard title", + "observedAt": "2026-07-21", + "verifiedBy": "github-handle-or-agent-id" + } + ] +} ``` -## File Structure - -``` -.claude/skills/benchmark-fetcher/ -├── SKILL.md # Complete documentation -├── README.md # This file -├── references/ -│ └── model-name-mappings.json # Model name mappings (58 mappings) -└── scripts/ - ├── fetch-benchmarks.mjs # Main entry point - └── lib/ - ├── config.mjs # Configuration - ├── model-name-mapper.mjs # 3-tier fuzzy matching - ├── benchmark-extractors.mjs # 6 website extractors - ├── manifest-updater.mjs # Atomic updates - └── report-generator.mjs # Formatted reporting -``` - -## Key Features - -### Intelligent Model Name Mapping -The skill uses a 3-tier fallback strategy to map website model names to manifest IDs: -1. **Exact match** (case-sensitive) -2. **Case-insensitive match** -3. **Fuzzy match** (normalized - removes spaces, hyphens, special chars) - -### Special Handling - -**TerminalBench Decimal Format:** -- Website displays: "63.1%" -- Stored as: `0.631` (decimal 0-1 scale) -- ✅ Automatic conversion implemented - -**MMMU Dual Benchmarks:** -- Single website visit extracts both MMMU and MMMU Pro scores -- Updates two separate manifest fields -- ✅ Fully implemented - -### Error Resilience -- 3-attempt retry with exponential backoff -- Graceful degradation (continues on errors) -- Debug screenshots saved to `/tmp/benchmark-fetcher-debug/` -- Comprehensive error reporting - -### Atomic Updates -- Validates JSON structure -- Writes to temporary file -- Atomic rename (no partial updates) -- All-or-nothing per manifest - -## What Happens When You Run It +Supported benchmark keys are the exact manifest fields: `sweBench`, `terminalBench`, `mmmu`, `mmmuPro`, `webDevArena`, `sciCode`, and `liveCodeBench`. -1. **Loads Configuration** - - Reads model-name-mappings.json - - Loads all model manifests from manifests/models/ +Every descriptive field is required so the generated source title retains the evaluation context that the scalar benchmark schema cannot otherwise represent. -2. **Visits Each Website** - - Navigates using Chrome DevTools MCP - - Waits for content to load - - Takes accessibility tree snapshot - - Parses leaderboard data +## Commands -3. **Maps Model Names** - - Attempts 3-tier matching - - Logs unmapped models for manual addition - -4. **Updates Manifests** - - Always overwrites existing benchmark values - - Preserves all other manifest fields - - Uses atomic file writes - -5. **Generates Report** - - Shows successful/failed benchmarks - - Lists all manifest updates - - Reports unmapped models - - Provides next steps - -## Expected Output Example - -``` -📊 Benchmark Fetch Report -================================ - -✅ Successfully Fetched (6/6 benchmarks) - ✓ SWE-bench (swebench.com) - 15 models - ✓ TerminalBench (tbench.ai) - 20 models - ✓ MMMU + MMMU Pro (mmmu-benchmark.github.io) - 8 models - ✓ SciCode (scicode-bench.github.io) - 5 models - ✓ LiveCodeBench (livecodebench.github.io) - 12 models - ✓ WebDevArena (web.lmarena.ai) - 3 models - -📝 Manifest Updates - -✅ Updated: 12 manifests - • claude-sonnet-4-5: 4 benchmarks updated - - sweBench: null → 70.6 - - terminalBench: null → 0.428 - - sciCode: null → 4.6 - - liveCodeBench: 47.1 → 52.3 +```bash +# Preview; never writes +node .agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs /path/to/evidence.json -⚠️ Unmapped Models - Add these to model-name-mappings.json +# Apply additions or null-to-score changes +node .agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs /path/to/evidence.json --apply -📈 Statistics - Execution time: 45.2s +# Explicitly allow replacement of an existing non-null score +node .agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs /path/to/evidence.json --apply --replace ``` -## Next Steps After Running - -1. **Review Updates** - - Check manifests/models/*.json for changes - - Verify benchmark values look correct - -2. **Add Unmapped Models** - - Update references/model-name-mappings.json - - Re-run to fetch their data - -3. **Validate** - ```bash - npm run test:validate - ``` - -4. **Commit Changes** - ```bash - git add manifests/models/ - git commit -m "Update benchmark data from leaderboards" - ``` - -## Troubleshooting - -### Extractor Fails for a Benchmark -- Check `/tmp/benchmark-fetcher-debug/` for screenshots -- Website structure may have changed -- Update extractor logic in benchmark-extractors.mjs - -### Model Not Updating -- Verify model exists in manifests/models/ -- Check if model name is in mappings -- Look for "unmapped" warnings in output - -### TerminalBench Shows Wrong Format -- Verify values are < 1.0 (decimal format) -- Check conversion logic in extractTerminalBench() - -## Implementation Notes - -### What Works Well -- SWE-bench and TerminalBench extractors are fully tested -- Model name fuzzy matching handles variations -- Atomic updates prevent corruption -- Comprehensive error handling - -### What May Need Refinement -- MMMU, SciCode, LiveCodeBench, WebDevArena extractors use generic patterns -- These may need adjustment based on actual page structures -- Model name mappings will grow as new models appear - -### How to Improve Extractors -1. Run with `--dry-run` to see what's extracted -2. Check debug screenshots if extraction fails -3. Examine page snapshots to understand structure -4. Update extractor logic to match patterns -5. Test and iterate - -## Success Criteria ✅ - -- [x] Visits all 6 benchmark websites -- [x] Extracts model performance data -- [x] Maps model names correctly using configuration -- [x] Updates model manifests with new values -- [x] TerminalBench uses decimal format (0-1) -- [x] MMMU updates both fields -- [x] Generates comprehensive reports -- [x] Handles errors gracefully with retry logic -- [x] All manifests pass JSON schema validation -- [x] Unmapped models are reported - -## Ready to Use! 🚀 - -The skill is fully functional and ready to fetch benchmark data. Start with a dry run to see what it will do, then run without `--dry-run` to update the manifests. +The importer validates exact model IDs, score ranges, dates, HTTPS sources, duplicate records, and overwrite conflicts. It also adds field-scoped source provenance and updates verification metadata. Always inspect the Git diff afterward. diff --git a/.agents/skills/benchmark-fetcher/SKILL.md b/.agents/skills/benchmark-fetcher/SKILL.md index 1948174a..d5949a1d 100644 --- a/.agents/skills/benchmark-fetcher/SKILL.md +++ b/.agents/skills/benchmark-fetcher/SKILL.md @@ -1,395 +1,45 @@ --- name: benchmark-fetcher -description: Fetch benchmark performance data from 6 leaderboard websites using Playwright MCP and update model manifests with the latest scores. Supports SWE-bench, TerminalBench, SciCode, LiveCodeBench, MMMU, MMMU Pro, and WebDevArena benchmarks. +description: Collects benchmark evidence with current browsing tools and safely imports reviewed scores into model manifests. Use for SWE-bench, TerminalBench, MMMU, MMMU Pro, SciCode, LiveCodeBench, or WebDevArena updates. --- -# Benchmark Fetcher Skill +# Benchmark Fetcher -Automate the fetching of benchmark performance data from leaderboard websites and update model manifests with the latest scores using advanced browser automation. +This is an evidence-review workflow with a deterministic importer. The Node script does not control a browser or scrape websites. -## Overview +## Workflow -This skill extends benchmark data collection by automating visits to 6 major AI model leaderboard websites, extracting performance scores, and updating model manifests in `manifests/models/` with the latest benchmark data. +1. Read `manifests/$schemas/model.schema.json`, the target model manifests, and the leaderboard's methodology/version documentation. +2. Browse the current authoritative leaderboard or benchmark publication. +3. Confirm all of the following for each score: + - exact model/version label, including reasoning level or agent scaffold; + - benchmark subset and version; + - evaluation mode, pass@k, tool policy, date range, and harness where applicable; + - score scale expected by the manifest schema; + - stable source URL and observation date. +4. Create a JSON evidence file using the format in `README.md`. +5. Preview the import. Review every proposed change and conflict. +6. Use `--apply` only after review. Use `--replace` only when the new and existing scores are truly comparable and the new evidence supersedes the old value. +7. Review manifest source/provenance changes and run repository validation. -**Key Features:** -- **Automated Data Collection**: Uses Playwright MCP to visit and extract data from 6 leaderboard websites -- **Intelligent Model Mapping**: Maps website model names to manifest IDs using configurable mappings -- **Always Overwrite**: Updates manifests with latest benchmark values -- **Error Resilient**: Retry logic with exponential backoff and graceful degradation -- **Comprehensive Reporting**: Detailed completion reports with unmapped models and update statistics +## Safety rules -## Supported Benchmarks - -| Benchmark | Website | Manifest Field | Format | -|-----------|---------|----------------|--------| -| **SWE-bench** | https://www.swebench.com | `sweBench` | Percentage (0-100) | -| **TerminalBench** | https://www.tbench.ai/leaderboard/terminal-bench/2.0 | `terminalBench` | Decimal (0-1) | -| **MMMU** | https://mmmu-benchmark.github.io/#leaderboard | `mmmu`, `mmmuPro` | Percentage (0-100) | -| **SciCode** | https://scicode-bench.github.io/leaderboard/ | `sciCode` | Percentage (0-100) | -| **LiveCodeBench** | https://livecodebench.github.io/leaderboard.html | `liveCodeBench` | Percentage (0-100) | -| **WebDevArena** | https://web.lmarena.ai/leaderboard | `webDevArena` | Percentage (0-100) | - -**Note:** TerminalBench uses a decimal format (0-1 scale), while all other benchmarks use percentage format (0-100 scale). - -## Usage - -### Fetch All Benchmarks - -Update all model manifests with latest benchmark data from all 6 websites: - -```bash -node .Codex/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs -``` - -### Fetch Specific Benchmarks - -Update only specific benchmarks: - -```bash -# Fetch only SWE-bench and TerminalBench -node .Codex/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --benchmarks swebench,terminalBench - -# Fetch only LiveCodeBench -node .Codex/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --benchmarks liveCodeBench -``` - -### Fetch for Specific Models - -Update benchmarks for specific models only: - -```bash -# Update only Codex Sonnet 4.5 and GPT-4o -node .Codex/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --models Codex-sonnet-4-5,gpt-4o -``` - -### Dry Run Mode - -Preview what would be updated without actually modifying manifests: - -```bash -node .Codex/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --dry-run -``` - -## Model Name Mapping - -### How Mapping Works - -Each benchmark website uses different naming conventions for models. The `references/model-name-mappings.json` file maps website-specific model names to manifest IDs. - -**Example mapping:** - -```json -{ - "swebench": { - "websiteModels": { - "Codex Sonnet 4.5": "Codex-sonnet-4-5", - "GPT-4o": "gpt-4o", - "Gemini 2.5 Pro": "gemini-2-5-pro" - } - } -} -``` - -### Mapping Strategy - -The mapper uses a 3-tier fallback strategy: - -1. **Exact match** (case-sensitive): "Codex Sonnet 4.5" → "Codex-sonnet-4-5" -2. **Case-insensitive match**: "Codex sonnet 4.5" → "Codex-sonnet-4-5" -3. **Fuzzy match** (normalized): "Codex-Sonnet-4.5" → "Codex-sonnet-4-5" - -**Normalization:** Removes spaces, hyphens, and special characters for fuzzy matching. - -### Adding New Mappings - -When the script reports unmapped models, add them to `references/model-name-mappings.json`: - -```json -{ - "swebench": { - "websiteModels": { - "New Model Name": "new-model-id" - } - } -} -``` - -## Data Extraction Process - -### High-Level Workflow - -1. **Load Configuration**: Read mappings, load all model manifests -2. **Initialize Browser**: Start Chrome DevTools MCP browser instance -3. **Visit Websites**: Sequentially visit each benchmark website -4. **Extract Data**: Parse leaderboard tables from page snapshots -5. **Map Models**: Match website model names to manifest IDs -6. **Update Manifests**: Overwrite benchmark values in manifest files -7. **Generate Report**: Show updates, failures, and unmapped models - -### Website-Specific Extractors - -Each benchmark has a dedicated extractor function in `scripts/lib/benchmark-extractors.mjs`: - -- `extractSWEBench()` - Extracts SWE-bench Verified scores -- `extractTerminalBench()` - Extracts TerminalBench 2.0 accuracy (decimal format) -- `extractMMMU()` - Extracts both MMMU and MMMU Pro scores -- `extractSciCode()` - Extracts SciCode benchmark scores -- `extractLiveCodeBench()` - Extracts LiveCodeBench Pass@1 scores -- `extractWebDevArena()` - Extracts WebDevArena scores - -### Special Cases - -**TerminalBench Format:** -- Website displays percentages (42.8%) -- Must store as decimal: `0.428` (not `42.8`) -- Extractor handles conversion automatically - -**MMMU Dual Benchmarks:** -- Single website has both MMMU and MMMU Pro leaderboards -- Extractor returns both in one visit: - ```javascript - { - mmmu: Map, - mmmuPro: Map - } - ``` - -## Update Strategy - -### Always Overwrite Policy - -The skill uses an **always overwrite** strategy for benchmark values: - -- Existing benchmark values are replaced with latest data from websites -- Null values are populated if found on websites -- Non-null values are updated with latest scores -- No confirmation or comparison - latest data always wins - -**Rationale:** Benchmark scores represent the latest model performance. Websites are the authoritative source. - -### What Gets Preserved - -Only benchmark fields are updated. All other manifest fields are preserved: - -- ✅ Preserved: `id`, `name`, `description`, `vendor`, `size`, `contextWindow`, etc. -- 🔄 Updated: `benchmarks.sweBench`, `benchmarks.terminalBench`, etc. - -### Atomic Updates - -Manifests are updated using atomic file writes: - -1. Validate JSON structure -2. Write to temporary file (`.tmp`) -3. Atomic rename to target file -4. No partial updates - all or nothing - -## Error Handling - -### Retry Logic - -Each benchmark extraction uses a 3-attempt retry strategy with exponential backoff: - -**Attempt 1**: Direct extraction (immediate) -**Attempt 2**: Retry after 2 seconds -**Attempt 3**: Final retry after 4 seconds - -After 3 failures: -- Take debug screenshot (`/tmp/benchmark-{id}-error.png`) -- Log error details -- Skip benchmark and continue with others - -### Error Categories - -**Website Access Errors:** -- Cause: Site down, network timeout, rate limiting -- Handling: Retry 3 times, then skip benchmark - -**Extraction Errors:** -- Cause: Page structure changed, data not found -- Handling: Screenshot for debugging, skip benchmark - -**Mapping Errors:** -- Cause: Model name not in mapping configuration -- Handling: Log unmapped model, continue with others - -**Manifest Update Errors:** -- Cause: File write errors, invalid JSON -- Handling: Atomic write protects against corruption, rollback on error - -### Graceful Degradation - -The skill continues processing even when errors occur: - -- If 1 benchmark fails, others still process -- If 1 model can't be mapped, others still update -- Partial success is better than no success -- Completion report shows exactly what succeeded/failed - -## Completion Report - -After execution, a detailed report shows: - -### Summary Section - -``` -📊 Benchmark Fetch Report -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - -✅ Successfully Fetched (5/6 benchmarks) - ✓ SWE-bench (swebench.com) - ✓ TerminalBench (tbench.ai) - ✓ MMMU + MMMU Pro (mmmu-benchmark.github.io) - ✓ SciCode (scicode-bench.github.io) - ✓ LiveCodeBench (livecodebench.github.io) - -❌ Failed to Fetch (1/6 benchmarks) - ✗ WebDevArena (web.lmarena.ai) - Reason: Timeout after 3 retries -``` - -### Manifest Updates - -``` -📝 Manifest Updates - -✅ Updated: 15 manifests - • Codex-sonnet-4-5: 3 benchmarks updated - - sweBench: null → 74.4 - - terminalBench: 0.428 → 0.604 - - liveCodeBench: 47.1 → 52.3 - - • gpt-4o: 2 benchmarks updated - - sweBench: 21.62 → 23.5 - - sciCode: 1.5 → 2.1 -``` - -### Unmapped Models - -``` -⚠️ Unmapped Models (require manual mapping) - -SWE-bench: - • "Qwen-Coder-2.5" → Add to model-name-mappings.json - • "DeepSeek-Coder-V2" → Add to model-name-mappings.json - -Suggestion: Update references/model-name-mappings.json -``` - -### Statistics - -``` -📈 Statistics - -Total benchmarks fetched: 247 values -Total manifests updated: 15 files -Execution time: 45.2s -Average time per benchmark: 7.5s -``` - -### Next Steps - -``` -✅ Complete! Next steps: - -1. Review updated manifests in manifests/models/ -2. Add unmapped models to references/model-name-mappings.json -3. Retry failed benchmarks if needed -4. Run validation: npm run test:validate -5. Commit changes when satisfied -``` - -## Tool Integration - -### Chrome DevTools MCP - -The skill uses Chrome DevTools MCP tools for browser automation: - -**Navigation:** -```javascript -await mcp__chrome-devtools__navigate_page({ - url: 'https://www.swebench.com', - type: 'url' -}) -``` - -**Wait for Content:** -```javascript -await mcp__chrome-devtools__wait_for({ - text: 'Leaderboard' -}) -``` - -**Take Snapshot:** -```javascript -const snapshot = await mcp__chrome-devtools__take_snapshot() -// Parse snapshot.content for leaderboard data -``` - -**Debug Screenshots:** -```javascript -await mcp__chrome-devtools__take_screenshot({ - filePath: '/tmp/debug-screenshot.png' -}) -``` - -## Best Practices - -### Running the Skill - -1. **Run during off-peak hours** to avoid rate limiting -2. **Review unmapped models** and update mappings before next run -3. **Validate manifests** after updates: `npm run test:validate` -4. **Check for website changes** if extraction fails repeatedly -5. **Keep mappings updated** as new models appear on leaderboards - -### Maintaining Mappings - -1. **Check completion reports** for unmapped models -2. **Add mappings immediately** after discovering new models -3. **Use canonical manifest IDs** as mapping targets -4. **Test mappings** with `--models` flag to verify -5. **Document special cases** in mapping file comments - -### Troubleshooting - -**Extraction fails for a benchmark:** -- Check if website structure changed -- Review debug screenshots in `/tmp/` -- Update extractor logic if needed - -**Model not updating:** -- Verify model exists in `manifests/models/` -- Check mapping configuration -- Ensure model appears on leaderboard website - -**TerminalBench shows wrong values:** -- Verify decimal format (0.428 not 42.8) -- Check extractor conversion logic -- Validate against website directly - -## Files Modified - -After running this skill: - -1. **Model manifests**: `manifests/models/*.json` - Updated with latest benchmark scores -2. **No other files modified**: The skill only updates benchmark fields in manifests +- Never fuzzy-match model names. Map the leaderboard label to an exact existing manifest ID through human review. +- Never treat a newer webpage as proof that a score is comparable with an older one. +- Do not convert an Elo/rating into a percentage. +- `terminalBench` is stored on a 0–1 scale; the percentage fields use 0–100. `webDevArena` is a non-negative rating, not a percentage, and must not be rescaled. +- A leaderboard is authoritative only for the evaluation it reports, not for model specs or pricing. +- Keep unresolved or ambiguous results out of manifests. +- The importer defaults to preview and refuses to overwrite non-null scores without `--replace`. ## Validation -Always validate manifests after updates: - ```bash -# Run schema validation +node .agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs evidence.json +node .agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs evidence.json --apply +npm run changelog:generate npm run test:validate - -# Check JSON formatting -node -c manifests/models/*.json +npm run data-health:check ``` -## Next Steps After Execution - -1. **Review updates**: Check manifest changes make sense -2. **Update mappings**: Add newly discovered models to `model-name-mappings.json` -3. **Retry failures**: Re-run with `--benchmarks` for failed benchmarks -4. **Validate**: Run `npm run test:validate` to ensure schema compliance -5. **Commit changes**: Commit updated manifests to repository +Run `npm run check` and `npm run test:ci` before release handoff. diff --git a/.agents/skills/benchmark-fetcher/references/model-name-mappings.json b/.agents/skills/benchmark-fetcher/references/model-name-mappings.json deleted file mode 100644 index 2d0a9c29..00000000 --- a/.agents/skills/benchmark-fetcher/references/model-name-mappings.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "version": "1.0.0", - "lastUpdated": "2025-12-14", - "description": "Maps website-specific model names to manifest IDs for benchmark data extraction", - "mappings": { - "swebench": { - "websiteModels": { - "Claude 4.5 Opus medium (20251101)": "claude-opus-4-1", - "Claude 4.5 Sonnet (20250929)": "claude-sonnet-4-5", - "Claude 4 Opus (20250514)": "claude-opus-4", - "Claude 4 Sonnet (20250514)": "claude-sonnet-4", - "Gemini 3 Pro Preview (2025-11-18)": "gemini-3-pro", - "Gemini 2.5 Pro (2025-05-06)": "gemini-2-5-pro", - "Gemini 2.5 Flash (2025-04-17)": "gemini-2-5-flash", - "GPT-5.2 (2025-12-11) (high reasoning)": "gpt-5", - "GPT-5.2 (2025-12-11)": "gpt-5", - "GPT-5.1-codex (medium reasoning)": "gpt-5-1-codex", - "GPT-5.1 (2025-11-13) (medium reasoning)": "gpt-5-1", - "GPT-5 (2025-08-07) (medium reasoning)": "gpt-5", - "GPT-4.1 (2025-04-14)": "gpt-4-1", - "GPT-4o (2024-11-20)": "gpt-4o", - "DeepSeek V3.2 Reasoner": "deepseek-r1", - "DeepSeek V3 Terminus": "deepseek-v3-terminus", - "GLM-4.6 (T=1)": "glm-4-6", - "GLM-4.5 (2025-08-22)": "glm-4-6" - } - }, - "terminalBench": { - "websiteModels": { - "Claude Opus 4.5": "claude-opus-4-1", - "Claude Sonnet 4.5": "claude-sonnet-4-5", - "Claude Opus 4.1": "claude-opus-4-1", - "Claude Haiku 4.5": "claude-haiku-4-5", - "Gemini 3 Pro": "gemini-3-pro", - "Gemini 2.5 Pro": "gemini-2-5-pro", - "Gemini 2.5 Flash": "gemini-2-5-flash", - "GPT-5.2": "gpt-5", - "GPT-5.1-Codex-Max": "gpt-5-1-codex", - "GPT-5.1-Codex": "gpt-5-1-codex", - "GPT-5.1-Codex-Mini": "gpt-5-1-codex", - "GPT-5.1": "gpt-5-1", - "GPT-5-Codex": "gpt-5-codex", - "GPT-5": "gpt-5", - "GPT-5-Mini": "gpt-5", - "GPT-5-Nano": "gpt-5", - "GPT-4o": "gpt-4o", - "Grok Code Fast 1": "grok-code-fast-1", - "Grok 4": "grok-4", - "GLM 4.6": "glm-4-6" - } - }, - "mmmu": { - "websiteModels": { - "Claude-Sonnet-4.5": "claude-sonnet-4-5", - "Claude Sonnet 4.5": "claude-sonnet-4-5", - "Claude Opus 4.1": "claude-opus-4-1", - "Gemini-2.5-Pro": "gemini-2-5-pro", - "Gemini 2.5 Pro": "gemini-2-5-pro", - "GPT-4o": "gpt-4o", - "GPT-5": "gpt-5" - } - }, - "sciCode": { - "websiteModels": { - "Claude Sonnet 4.5": "claude-sonnet-4-5", - "GPT-4o": "gpt-4o", - "GPT-5": "gpt-5", - "DeepSeek R1": "deepseek-r1", - "DeepSeek V3": "deepseek-v3-terminus" - } - }, - "liveCodeBench": { - "websiteModels": { - "claude-sonnet-4-5": "claude-sonnet-4-5", - "claude-sonnet-4.5": "claude-sonnet-4-5", - "gpt-4o": "gpt-4o", - "gpt-5": "gpt-5", - "gemini-2.5-pro": "gemini-2-5-pro", - "gemini-2-5-flash": "gemini-2-5-flash" - } - }, - "webDevArena": { - "websiteModels": { - "Claude Sonnet 4.5": "claude-sonnet-4-5", - "GPT-4o": "gpt-4o", - "GPT-5": "gpt-5" - } - } - } -} diff --git a/.agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs b/.agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs old mode 100755 new mode 100644 index 25f60a68..050722b6 --- a/.agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs +++ b/.agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs @@ -1,289 +1,216 @@ #!/usr/bin/env node -/** - * Benchmark Fetcher - Main Entry Point - * - * Usage: - * node fetch-benchmarks.mjs - * node fetch-benchmarks.mjs --benchmarks swebench,terminalBench - * node fetch-benchmarks.mjs --models claude-sonnet-4-5,gpt-4o - * node fetch-benchmarks.mjs --dry-run - */ - import fs from 'node:fs/promises' import path from 'node:path' -import { extractors } from './lib/benchmark-extractors.mjs' -import { BENCHMARKS, DEBUG_CONFIG, MANIFEST_PATHS, RETRY_CONFIG } from './lib/config.mjs' -import { updateManifests } from './lib/manifest-updater.mjs' -import { getUnmappedModels } from './lib/model-name-mapper.mjs' -import { generateReport } from './lib/report-generator.mjs' +import { BENCHMARKS, MODELS_DIR } from './lib/config.mjs' -// Parse command-line arguments -const args = parseArgs(process.argv.slice(2)) +const HELP = `Usage: + node .agents/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs [--apply] [--replace] -// Validate arguments -validateArgs(args) +Default behavior is preview-only. --replace is valid only with --apply.` -// Main execution -const startTime = Date.now() +const args = process.argv.slice(2) +if (args.includes('--help') || args.includes('-h')) { + console.log(HELP) + process.exit(0) +} -main() - .then(() => { - console.log('\n✅ Benchmark fetch completed successfully') - process.exit(0) - }) - .catch(error => { - console.error('\n❌ Benchmark fetch failed:', error.message) - console.error(error.stack) - process.exit(1) - }) +const apply = args.includes('--apply') +const replace = args.includes('--replace') +const inputPath = args.find(arg => !arg.startsWith('--')) -/** - * Main workflow - */ -async function main() { - console.log('🤖 Benchmark Fetcher') - console.log('='.repeat(80)) +if (!inputPath || (replace && !apply)) { + console.error(HELP) + process.exit(1) +} - // 1. Load configuration - console.log('\n📋 Loading configuration...') - const mappings = await loadMappings() - const manifests = await loadAllManifests() +const isoDate = /^\d{4}-(0[1-9]|1[0-2])-([0-2]\d|3[01])$/ - console.log(` ✓ Loaded ${Object.keys(manifests).length} model manifests`) - console.log(` ✓ Loaded mapping configuration (version ${mappings.version})`) +function isValidDate(value) { + if (!isoDate.test(value)) return false + const date = new Date(`${value}T00:00:00Z`) + const today = new Date().toISOString().slice(0, 10) + return ( + !Number.isNaN(date.valueOf()) && date.toISOString().slice(0, 10) === value && value <= today + ) +} - if (args.dryRun) { - console.log('\n⚠️ DRY RUN MODE - No manifests will be modified') +function requireText(record, field, index, errors) { + if (typeof record[field] !== 'string' || record[field].trim() === '') { + errors.push(`records[${index}].${field} must be a non-empty string`) } +} - // Filter benchmarks if specified - const benchmarksToFetch = args.benchmarks - ? BENCHMARKS.filter(b => args.benchmarks.includes(b.id)) - : BENCHMARKS - - console.log(`\n📊 Will fetch ${benchmarksToFetch.length} benchmarks`) - - // 2. Initialize MCP tools (placeholder - actual MCP tools will be injected) - const mcpTools = await initializeMCPTools() - - // 3. Process each benchmark sequentially - console.log(`\n${'='.repeat(80)}`) - const benchmarkResults = {} - - for (const benchmark of benchmarksToFetch) { - console.log(`\n📊 Fetching ${benchmark.name} (${benchmark.id})`) - console.log('-'.repeat(80)) - - try { - const result = await extractWithRetry(extractors[benchmark.id], mcpTools, mappings, benchmark) - benchmarkResults[benchmark.id] = { - success: true, - ...result, - } - - const dataCount = result.data instanceof Map ? result.data.size : 0 - console.log(` ✅ Success! Extracted ${dataCount} model scores`) - } catch (error) { - console.error(` ❌ Failed: ${error.message}`) - benchmarkResults[benchmark.id] = { - success: false, - error: error.message, - data: new Map(), - unmappedModels: [], - } - } +function validateRecord(record, index, seen, errors) { + for (const field of [ + 'modelId', + 'modelLabel', + 'benchmark', + 'benchmarkVersion', + 'evaluation', + 'sourceUrl', + 'sourceTitle', + 'observedAt', + 'verifiedBy', + ]) { + requireText(record, field, index, errors) } - // 4. Update manifests (unless dry-run) - let manifestUpdates = [] - - if (!args.dryRun) { - console.log(`\n${'='.repeat(80)}`) - console.log('💾 Updating Manifests') - console.log('='.repeat(80)) - - // Filter manifests if specific models were requested - let manifestsToUpdate = manifests - if (args.models) { - manifestsToUpdate = {} - for (const modelId of args.models) { - if (manifests[modelId]) { - manifestsToUpdate[modelId] = manifests[modelId] - } - } - } + const definition = BENCHMARKS[record.benchmark] + if (!definition) { + errors.push(`records[${index}].benchmark must be one of: ${Object.keys(BENCHMARKS).join(', ')}`) + } + if (typeof record.score !== 'number' || !Number.isFinite(record.score)) { + errors.push(`records[${index}].score must be a finite number`) + } else if ( + definition && + (record.score < definition.min || (definition.max !== null && record.score > definition.max)) + ) { + const range = + definition.max === null + ? `at least ${definition.min}` + : `between ${definition.min} and ${definition.max}` + errors.push(`records[${index}].score must be ${range} for ${record.benchmark}`) + } + if (typeof record.sourceUrl === 'string' && !record.sourceUrl.startsWith('https://')) { + errors.push(`records[${index}].sourceUrl must use HTTPS`) + } + if (typeof record.observedAt === 'string' && !isValidDate(record.observedAt)) { + errors.push(`records[${index}].observedAt must use YYYY-MM-DD`) + } - manifestUpdates = await updateManifests( - manifestsToUpdate, - benchmarkResults, - MANIFEST_PATHS.modelsDir - ) + const identity = `${record.modelId}:${record.benchmark}` + if (seen.has(identity)) { + errors.push(`records[${index}] duplicates ${identity}`) + } + seen.add(identity) +} - console.log(`\n ✅ Updated ${manifestUpdates.filter(u => u.success).length} manifests`) +function buildSource(record) { + return { + url: record.sourceUrl, + title: `${record.sourceTitle} — ${record.benchmarkVersion}; ${record.evaluation}; label: ${record.modelLabel}; observed ${record.observedAt}`, + fields: [`benchmarks.${record.benchmark}`], } +} - // 5. Generate completion report - const unmappedModels = getUnmappedModels(benchmarkResults, mappings) - const executionTime = Date.now() - startTime +function mergeSource(sources, incoming) { + const result = Array.isArray(sources) ? structuredClone(sources) : [] + const existing = result.find( + source => source.url === incoming.url && source.title === incoming.title + ) + if (!existing) { + result.push(incoming) + return result + } - generateReport(benchmarkResults, manifestUpdates, unmappedModels, executionTime, args.dryRun) + existing.fields = [...new Set([...(existing.fields || []), ...incoming.fields])] + return result +} - // 6. Cleanup (if needed) - await cleanupMCPTools(mcpTools) +async function writeAtomic(filePath, manifest) { + const temporaryPath = `${filePath}.benchmark-fetcher.tmp` + await fs.writeFile(temporaryPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8') + await fs.rename(temporaryPath, filePath) } -/** - * Extract benchmark data with retry logic - */ -async function extractWithRetry(extractor, mcpTools, mappings, benchmark) { - let lastError = null +async function main() { + const raw = JSON.parse(await fs.readFile(path.resolve(inputPath), 'utf8')) + const records = raw.records + if (!Array.isArray(records) || records.length === 0) { + throw new Error('Input must contain a non-empty records array') + } - for (let attempt = 1; attempt <= RETRY_CONFIG.maxAttempts; attempt++) { - try { - const result = await extractor(mcpTools, mappings) - return result - } catch (error) { - lastError = error - console.error(` ⚠️ Attempt ${attempt}/${RETRY_CONFIG.maxAttempts} failed: ${error.message}`) + const errors = [] + const seen = new Set() + for (const [index, record] of records.entries()) { + validateRecord(record, index, seen, errors) + } + if (errors.length > 0) { + throw new Error(`Invalid evidence:\n- ${errors.join('\n- ')}`) + } - if (attempt < RETRY_CONFIG.maxAttempts) { - // Calculate exponential backoff delay - const delay = Math.min( - RETRY_CONFIG.initialDelay * RETRY_CONFIG.backoffFactor ** (attempt - 1), - RETRY_CONFIG.maxDelay - ) - console.log(` ⏳ Retrying in ${delay / 1000}s...`) - await sleep(delay) - } else { - // Final attempt failed - take debug screenshot if enabled - if (DEBUG_CONFIG.saveScreenshots && mcpTools.take_screenshot) { - const screenshotPath = path.join(DEBUG_CONFIG.screenshotDir, `${benchmark.id}-error.png`) - try { - await fs.mkdir(DEBUG_CONFIG.screenshotDir, { recursive: true }) - await mcpTools.take_screenshot({ filePath: screenshotPath }) - console.log(` 📸 Debug screenshot saved: ${screenshotPath}`) - } catch (_screenshotError) { - // Ignore screenshot errors - } - } + const staged = new Map() + const changes = [] + const conflicts = [] + + for (const record of records) { + const manifestPath = path.join(MODELS_DIR, `${record.modelId}.json`) + let manifest = staged.get(record.modelId) + if (!manifest) { + try { + manifest = JSON.parse(await fs.readFile(manifestPath, 'utf8')) + } catch (error) { + if (error.code === 'ENOENT') throw new Error(`Unknown modelId: ${record.modelId}`) + throw error + } + if (manifest.id !== record.modelId) { + throw new Error(`Manifest ID mismatch in ${manifestPath}`) + } + if (!manifest.benchmarks || typeof manifest.benchmarks !== 'object') { + throw new Error(`Manifest has no benchmarks object: ${manifestPath}`) } + staged.set(record.modelId, manifest) } - } - - throw lastError -} - -/** - * Load model name mappings from configuration file - */ -async function loadMappings() { - const content = await fs.readFile(MANIFEST_PATHS.mappings, 'utf8') - return JSON.parse(content) -} - -/** - * Load all model manifests from manifests/models/ - */ -async function loadAllManifests() { - const manifestFiles = await fs.readdir(MANIFEST_PATHS.modelsDir) - const manifests = {} - for (const file of manifestFiles) { - if (!file.endsWith('.json')) { + const previous = manifest.benchmarks?.[record.benchmark] + if (previous === record.score) { + manifest.sources = mergeSource(manifest.sources, buildSource(record)) + if (!manifest.lastVerifiedAt || record.observedAt >= manifest.lastVerifiedAt) { + manifest.lastVerifiedAt = record.observedAt + manifest.verifiedBy = record.verifiedBy + } + if (!manifest.confidence) manifest.confidence = 'medium' + changes.push({ ...record, previous, action: 'verify' }) + continue + } + if (previous !== null && previous !== undefined && !replace) { + conflicts.push({ ...record, previous }) continue } - const manifestPath = path.join(MANIFEST_PATHS.modelsDir, file) - const content = await fs.readFile(manifestPath, 'utf8') - const manifest = JSON.parse(content) - - if (manifest.id) { - manifests[manifest.id] = manifest + manifest.benchmarks[record.benchmark] = record.score + manifest.sources = mergeSource(manifest.sources, buildSource(record)) + if (!manifest.lastVerifiedAt || record.observedAt >= manifest.lastVerifiedAt) { + manifest.lastVerifiedAt = record.observedAt + manifest.verifiedBy = record.verifiedBy } + if (!manifest.confidence) manifest.confidence = 'medium' + changes.push({ + ...record, + previous, + action: previous === null || previous === undefined ? 'add' : 'replace', + }) } - return manifests -} - -/** - * Initialize MCP Chrome DevTools tools - * NOTE: This is a placeholder. In actual execution, MCP tools will be available - * through the Claude Code environment automatically. - */ -async function initializeMCPTools() { - // In the Claude Code environment, MCP tools are available globally - // This function is a placeholder for any initialization logic needed - - // Check if MCP tools are available - if (typeof mcp__chrome_devtools__navigate_page === 'undefined') { - console.warn('⚠️ Warning: MCP Chrome DevTools tools not detected') - console.warn(' This script requires Chrome DevTools MCP to be enabled') - console.warn(' Extractors will fail if MCP tools are not available') + console.log(apply ? 'Benchmark import plan (apply requested)' : 'Benchmark import preview') + for (const change of changes) { + console.log( + `- ${change.modelId}.${change.benchmark}: ${String(change.previous)} -> ${change.score} (${change.action})` + ) } - - return { - navigate_page: mcp__chrome_devtools__navigate_page, - wait_for: mcp__chrome_devtools__wait_for, - take_snapshot: mcp__chrome_devtools__take_snapshot, - take_screenshot: mcp__chrome_devtools__take_screenshot, + for (const conflict of conflicts) { + console.error( + `- CONFLICT ${conflict.modelId}.${conflict.benchmark}: ${conflict.previous} -> ${conflict.score}; review comparability and use --apply --replace only if justified` + ) } -} - -/** - * Cleanup MCP tools - */ -async function cleanupMCPTools(_mcpTools) { - // No cleanup needed currently - // MCP tools are managed by Claude Code environment -} -/** - * Parse command-line arguments - */ -function parseArgs(argv) { - const args = { - benchmarks: null, // Array of benchmark IDs or null for all - models: null, // Array of model IDs or null for all - dryRun: false, + if (conflicts.length > 0) { + throw new Error(`${conflicts.length} overwrite conflict(s) require explicit review`) } - - for (let i = 0; i < argv.length; i++) { - const arg = argv[i] - - if (arg === '--benchmarks' && i + 1 < argv.length) { - args.benchmarks = argv[i + 1].split(',').map(s => s.trim()) - i++ - } else if (arg === '--models' && i + 1 < argv.length) { - args.models = argv[i + 1].split(',').map(s => s.trim()) - i++ - } else if (arg === '--dry-run') { - args.dryRun = true - } + if (!apply) { + console.log('Preview only; no files changed.') + return } - return args -} - -/** - * Validate command-line arguments - */ -function validateArgs(args) { - if (args.benchmarks) { - const validBenchmarkIds = BENCHMARKS.map(b => b.id) - for (const benchmarkId of args.benchmarks) { - if (!validBenchmarkIds.includes(benchmarkId)) { - console.error(`❌ Invalid benchmark ID: ${benchmarkId}`) - console.error(` Valid IDs: ${validBenchmarkIds.join(', ')}`) - process.exit(1) - } - } + const changedModelIds = new Set(changes.map(change => change.modelId)) + for (const modelId of changedModelIds) { + await writeAtomic(path.join(MODELS_DIR, `${modelId}.json`), staged.get(modelId)) } + console.log(`Applied changes to ${changedModelIds.size} manifest(s). Review the Git diff.`) } -/** - * Sleep utility - */ -function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} +main().catch(error => { + console.error(`Benchmark import failed: ${error.message}`) + process.exit(1) +}) diff --git a/.agents/skills/benchmark-fetcher/scripts/lib/benchmark-extractors.mjs b/.agents/skills/benchmark-fetcher/scripts/lib/benchmark-extractors.mjs deleted file mode 100644 index d9cd6703..00000000 --- a/.agents/skills/benchmark-fetcher/scripts/lib/benchmark-extractors.mjs +++ /dev/null @@ -1,456 +0,0 @@ -/** - * Benchmark extractors for each leaderboard website - * Each extractor navigates to the website, extracts benchmark data, and maps to manifest IDs - */ - -import { mapModelName, trackUnmapped } from './model-name-mapper.mjs' - -/** - * Extract SWE-bench Verified scores - * Website: https://www.swebench.com - * - * @param {Object} mcpTools - MCP Chrome DevTools tools - * @param {Object} mappings - Model name mappings configuration - * @returns {Promise>} Map of manifest IDs to scores - */ -async function extractSWEBench(mcpTools, mappings) { - const url = 'https://www.swebench.com' - console.log(` 🌐 Navigating to ${url}`) - - // Navigate to page - await mcpTools.navigate_page({ url, type: 'url' }) - - // Wait for leaderboard to load - console.log(' ⏳ Waiting for leaderboard...') - await mcpTools.wait_for({ text: 'Model', timeout: 10000 }) - - // Take snapshot to analyze structure - console.log(' 📸 Taking snapshot...') - const snapshot = await mcpTools.take_snapshot() - - // Parse leaderboard data from snapshot - console.log(' 🔍 Parsing leaderboard data...') - const benchmarkData = new Map() - const unmapped = new Set() - - // Parse the snapshot content - const lines = snapshot.content.split('\n') - - // Look for pattern: model name followed by % Resolved score - // Pattern: checkbox "Select " ... StaticText "" - for (let i = 0; i < lines.length; i++) { - const line = lines[i] - - // Find checkbox lines with "Select" - these indicate model rows - if (line.includes('checkbox "Select ') && !line.includes('Select all models')) { - // Extract model name from checkbox label - const selectMatch = line.match(/checkbox "Select (.+?)"/) - if (selectMatch) { - const modelName = selectMatch[1].trim() - - // Look ahead for the % Resolved score - // The score appears a few lines after the model name - for (let j = i + 1; j < Math.min(i + 15, lines.length); j++) { - const scoreLine = lines[j] - - // Look for StaticText with a number pattern (e.g., "74.40", "21.62") - const scoreMatch = scoreLine.match(/StaticText "(\d+\.\d+)"/) - if (scoreMatch && !scoreLine.includes('StaticText "$')) { - const score = parseFloat(scoreMatch[1]) - - // Map model name to manifest ID - const manifestId = mapModelName('swebench', modelName, mappings) - - if (manifestId) { - benchmarkData.set(manifestId, score) - console.log(` ✓ Mapped: "${modelName}" → ${manifestId} (${score}%)`) - } else { - trackUnmapped(unmapped, modelName) - } - - break // Found score for this model, move to next model - } - } - } - } - } - - console.log(` 📊 Extracted ${benchmarkData.size} models, ${unmapped.size} unmapped`) - - return { - data: benchmarkData, - unmappedModels: Array.from(unmapped), - } -} - -/** - * Extract TerminalBench 2.0 accuracy scores - * Website: https://www.tbench.ai/leaderboard/terminal-bench/2.0 - * CRITICAL: Stores as decimal (0-1 scale), not percentage - * - * @param {Object} mcpTools - MCP Chrome DevTools tools - * @param {Object} mappings - Model name mappings configuration - * @returns {Promise>} Map of manifest IDs to scores (decimal format) - */ -async function extractTerminalBench(mcpTools, mappings) { - const url = 'https://www.tbench.ai/leaderboard/terminal-bench/2.0' - console.log(` 🌐 Navigating to ${url}`) - - await mcpTools.navigate_page({ url, type: 'url' }) - - console.log(' ⏳ Waiting for leaderboard...') - await mcpTools.wait_for({ text: 'Accuracy', timeout: 10000 }) - - console.log(' 📸 Taking snapshot...') - const snapshot = await mcpTools.take_snapshot() - - console.log(' 🔍 Parsing leaderboard data...') - const benchmarkData = new Map() - const modelScores = new Map() // Track all scores per model to find max - const unmapped = new Set() - - // Parse the snapshot content - const lines = snapshot.content.split('\n') - - // Look for pattern: Rank → Agent → Model → Date → ... → Accuracy - // After "Model" column, we find the model name, then accuracy appears later - let currentModel = null - - for (let i = 0; i < lines.length; i++) { - const line = lines[i].trim() - - // Skip header rows and empty lines - if (!line || line.includes('StaticText "Rank"') || line.includes('StaticText "Model"')) { - continue - } - - // Look for model names (they appear after rank numbers and agent names) - // Pattern: StaticText "" (rank) → StaticText "" → StaticText "" - // Then much later: StaticText "" StaticText "%" - - // Detect model name - it comes after agent name - // We can identify it by looking for patterns that match model names - const modelMatch = line.match(/StaticText "([^"]+)"/) - if (modelMatch) { - const text = modelMatch[1] - - // Check if this looks like a model name (contains key words or patterns) - if ( - text.includes('Claude') || - text.includes('GPT') || - text.includes('Gemini') || - text.includes('Opus') || - text.includes('Sonnet') || - text.includes('Haiku') || - text.includes('Codex') || - text.includes('Kimi') || - text.includes('MiniMax') || - text.includes('Qwen') || - text.includes('GLM') || - text.includes('Grok') || - text.includes('Multiple') - ) { - currentModel = text - continue - } - } - - // Look for accuracy percentage - // Pattern: StaticText "." followed by StaticText "%" - const accuracyMatch = line.match(/StaticText "(\d+\.\d+)"/) - if (accuracyMatch && currentModel && i + 1 < lines.length) { - const nextLine = lines[i + 1] - if (nextLine.includes('StaticText "%"')) { - const percentage = parseFloat(accuracyMatch[1]) - const decimalScore = percentage / 100 // Convert to decimal (0-1) - - // Store the score for this model - if (!modelScores.has(currentModel)) { - modelScores.set(currentModel, []) - } - modelScores.get(currentModel).push(decimalScore) - - currentModel = null // Reset for next row - } - } - } - - // For each model, take the highest score and map to manifest ID - for (const [modelName, scores] of modelScores.entries()) { - const maxScore = Math.max(...scores) - const manifestId = mapModelName('terminalBench', modelName, mappings) - - if (manifestId) { - benchmarkData.set(manifestId, maxScore) - console.log(` ✓ Mapped: "${modelName}" → ${manifestId} (${maxScore.toFixed(3)})`) - } else { - trackUnmapped(unmapped, modelName) - } - } - - console.log(` 📊 Extracted ${benchmarkData.size} models, ${unmapped.size} unmapped`) - console.log(` ⚠️ Note: Values stored in decimal format (0-1 scale)`) - - return { - data: benchmarkData, - unmappedModels: Array.from(unmapped), - } -} - -/** - * Extract MMMU and MMMU Pro benchmark scores - * Website: https://mmmu-benchmark.github.io/#leaderboard - * Special: Returns both MMMU and MMMU Pro from single website - * - * @param {Object} mcpTools - MCP Chrome DevTools tools - * @param {Object} mappings - Model name mappings configuration - * @returns {Promise} Object with mmmu and mmmuPro Maps - */ -async function extractMMMU(mcpTools, mappings) { - const url = 'https://mmmu-benchmark.github.io/#leaderboard' - console.log(` 🌐 Navigating to ${url}`) - - await mcpTools.navigate_page({ url, type: 'url' }) - - console.log(' ⏳ Waiting for leaderboard...') - await mcpTools.wait_for({ text: 'Leaderboard', timeout: 10000 }) - - console.log(' 📸 Taking snapshot...') - const snapshot = await mcpTools.take_snapshot() - - console.log(' 🔍 Parsing leaderboard data...') - const mmmuData = new Map() - const mmmuProData = new Map() - const unmapped = new Set() - - // Parse snapshot - look for leaderboard tables - const lines = snapshot.content.split('\n') - - // MMMU typically has sections for standard and Pro versions - // Look for model names and scores in percentage format - let inMmmuSection = false - let inMmmuProSection = false - - for (let i = 0; i < lines.length; i++) { - const line = lines[i] - - // Detect section headers - if (line.includes('MMMU Pro') || line.includes('mmmu-pro')) { - inMmmuProSection = true - inMmmuSection = false - continue - } else if (line.includes('MMMU') && !line.includes('Pro')) { - inMmmuSection = true - inMmmuProSection = false - continue - } - - // Look for model entries with scores - const textMatch = line.match(/StaticText "([^"]+)"/) - if (textMatch) { - const text = textMatch[1] - - // Check if this is a model name - if (text.includes('Claude') || text.includes('GPT') || text.includes('Gemini')) { - // Look ahead for score - for (let j = i + 1; j < Math.min(i + 10, lines.length); j++) { - const scoreMatch = lines[j].match(/StaticText "(\d+\.?\d*)"/) - if (scoreMatch) { - const score = parseFloat(scoreMatch[1]) - - const manifestId = mapModelName('mmmu', text, mappings) - - if (manifestId) { - if (inMmmuProSection) { - mmmuProData.set(manifestId, score) - console.log(` ✓ MMMU Pro: "${text}" → ${manifestId} (${score}%)`) - } else if (inMmmuSection) { - mmmuData.set(manifestId, score) - console.log(` ✓ MMMU: "${text}" → ${manifestId} (${score}%)`) - } - } else { - trackUnmapped(unmapped, text) - } - - break - } - } - } - } - } - - console.log( - ` 📊 Extracted MMMU: ${mmmuData.size}, MMMU Pro: ${mmmuProData.size}, unmapped: ${unmapped.size}` - ) - - return { - data: { - mmmu: mmmuData, - mmmuPro: mmmuProData, - }, - unmappedModels: Array.from(unmapped), - } -} - -/** - * Extract SciCode benchmark scores - * Website: https://scicode-bench.github.io/leaderboard/ - * - * @param {Object} mcpTools - MCP Chrome DevTools tools - * @param {Object} mappings - Model name mappings configuration - * @returns {Promise>} Map of manifest IDs to scores - */ -async function extractSciCode(mcpTools, mappings) { - const url = 'https://scicode-bench.github.io/leaderboard/' - console.log(` 🌐 Navigating to ${url}`) - - await mcpTools.navigate_page({ url, type: 'url' }) - - console.log(' ⏳ Waiting for leaderboard...') - await mcpTools.wait_for({ text: 'Model', timeout: 10000 }) - - console.log(' 📸 Taking snapshot...') - const snapshot = await mcpTools.take_snapshot() - - console.log(' 🔍 Parsing leaderboard data...') - const benchmarkData = new Map() - const unmapped = new Set() - - // Generic extraction pattern - look for model names and nearby scores - return extractGenericLeaderboard(snapshot, mappings, 'sciCode', benchmarkData, unmapped) -} - -/** - * Extract LiveCodeBench Pass@1 scores - * Website: https://livecodebench.github.io/leaderboard.html - * - * @param {Object} mcpTools - MCP Chrome DevTools tools - * @param {Object} mappings - Model name mappings configuration - * @returns {Promise>} Map of manifest IDs to scores - */ -async function extractLiveCodeBench(mcpTools, mappings) { - const url = 'https://livecodebench.github.io/leaderboard.html' - console.log(` 🌐 Navigating to ${url}`) - - await mcpTools.navigate_page({ url, type: 'url' }) - - console.log(' ⏳ Waiting for leaderboard...') - await mcpTools.wait_for({ text: 'Pass@1', timeout: 10000 }) - - console.log(' 📸 Taking snapshot...') - const snapshot = await mcpTools.take_snapshot() - - console.log(' 🔍 Parsing leaderboard data...') - const benchmarkData = new Map() - const unmapped = new Set() - - // Generic extraction pattern - return extractGenericLeaderboard(snapshot, mappings, 'liveCodeBench', benchmarkData, unmapped) -} - -/** - * Extract WebDevArena scores - * Website: https://web.lmarena.ai/leaderboard - * - * @param {Object} mcpTools - MCP Chrome DevTools tools - * @param {Object} mappings - Model name mappings configuration - * @returns {Promise>} Map of manifest IDs to scores - */ -async function extractWebDevArena(mcpTools, mappings) { - const url = 'https://web.lmarena.ai/leaderboard' - console.log(` 🌐 Navigating to ${url}`) - - await mcpTools.navigate_page({ url, type: 'url' }) - - console.log(' ⏳ Waiting for leaderboard...') - await mcpTools.wait_for({ text: 'Leaderboard', timeout: 10000 }) - - console.log(' 📸 Taking snapshot...') - const snapshot = await mcpTools.take_snapshot() - - console.log(' 🔍 Parsing leaderboard data...') - const benchmarkData = new Map() - const unmapped = new Set() - - // Generic extraction pattern - return extractGenericLeaderboard(snapshot, mappings, 'webDevArena', benchmarkData, unmapped) -} - -/** - * Generic leaderboard extraction helper - * Looks for model names and nearby numeric scores - * - * @param {Object} snapshot - Page snapshot - * @param {Object} mappings - Model name mappings - * @param {string} benchmarkId - Benchmark identifier - * @param {Map} benchmarkData - Map to populate with data - * @param {Set} unmapped - Set to track unmapped models - * @returns {Object} Result object with data and unmapped models - */ -function extractGenericLeaderboard(snapshot, mappings, benchmarkId, benchmarkData, unmapped) { - const lines = snapshot.content.split('\n') - - // Look for model names followed by scores - for (let i = 0; i < lines.length; i++) { - const line = lines[i] - const textMatch = line.match(/StaticText "([^"]+)"/) - - if (textMatch) { - const text = textMatch[1] - - // Check if this looks like a model name - if ( - text.includes('Claude') || - text.includes('GPT') || - text.includes('Gemini') || - text.includes('DeepSeek') || - text.includes('Grok') || - text.includes('claude') || - text.includes('gpt') || - text.includes('gemini') - ) { - // Look ahead for a numeric score - for (let j = i + 1; j < Math.min(i + 15, lines.length); j++) { - const scoreMatch = lines[j].match(/StaticText "(\d+\.?\d*)"/) - if (scoreMatch && !lines[j].includes('StaticText "$')) { - const score = parseFloat(scoreMatch[1]) - - // Only process reasonable scores (0-100 range) - if (score >= 0 && score <= 100) { - const manifestId = mapModelName(benchmarkId, text, mappings) - - if (manifestId) { - benchmarkData.set(manifestId, score) - console.log(` ✓ Mapped: "${text}" → ${manifestId} (${score}%)`) - } else { - trackUnmapped(unmapped, text) - } - - break - } - } - } - } - } - } - - console.log(` 📊 Extracted ${benchmarkData.size} models, ${unmapped.size} unmapped`) - - return { - data: benchmarkData, - unmappedModels: Array.from(unmapped), - } -} - -/** - * Extractor registry - * Maps benchmark IDs to their extractor functions - */ -export const extractors = { - swebench: extractSWEBench, - terminalBench: extractTerminalBench, - mmmu: extractMMMU, - sciCode: extractSciCode, - liveCodeBench: extractLiveCodeBench, - webDevArena: extractWebDevArena, -} diff --git a/.agents/skills/benchmark-fetcher/scripts/lib/config.mjs b/.agents/skills/benchmark-fetcher/scripts/lib/config.mjs index d8f70710..869a501e 100644 --- a/.agents/skills/benchmark-fetcher/scripts/lib/config.mjs +++ b/.agents/skills/benchmark-fetcher/scripts/lib/config.mjs @@ -1,133 +1,16 @@ -/** - * Configuration constants for benchmark-fetcher skill - */ - import path from 'node:path' import { fileURLToPath } from 'node:url' -const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) - -// Project root (5 levels up from .claude/skills/benchmark-fetcher/scripts/lib/) +const __dirname = path.dirname(fileURLToPath(import.meta.url)) export const PROJECT_ROOT = path.resolve(__dirname, '../../../../..') - -/** - * Benchmark configurations - * Each benchmark defines its website, target field in manifests, and data format - */ -export const BENCHMARKS = [ - { - id: 'swebench', - name: 'SWE-bench', - url: 'https://www.swebench.com', - field: 'sweBench', - format: 'percentage', - description: 'SWE-bench Verified score', - }, - { - id: 'terminalBench', - name: 'TerminalBench', - url: 'https://www.tbench.ai/leaderboard/terminal-bench/2.0', - field: 'terminalBench', - format: 'decimal', // CRITICAL: 0-1 scale, not percentage - description: 'TerminalBench 2.0 accuracy score', - }, - { - id: 'mmmu', - name: 'MMMU', - url: 'https://mmmu-benchmark.github.io/#leaderboard', - fields: ['mmmu', 'mmmuPro'], // Special case: two fields from one website - format: 'percentage', - description: 'MMMU and MMMU Pro benchmark scores', - }, - { - id: 'sciCode', - name: 'SciCode', - url: 'https://scicode-bench.github.io/leaderboard/', - field: 'sciCode', - format: 'percentage', - description: 'SciCode benchmark score', - }, - { - id: 'liveCodeBench', - name: 'LiveCodeBench', - url: 'https://livecodebench.github.io/leaderboard.html', - field: 'liveCodeBench', - format: 'percentage', - description: 'LiveCodeBench Pass@1 score', - }, - { - id: 'webDevArena', - name: 'WebDevArena', - url: 'https://web.lmarena.ai/leaderboard', - field: 'webDevArena', - format: 'percentage', - description: 'WebDevArena score', - }, -] - -/** - * Retry configuration for benchmark extraction - */ -export const RETRY_CONFIG = { - maxAttempts: 3, - initialDelay: 1000, // 1 second - maxDelay: 10000, // 10 seconds - backoffFactor: 2, // Exponential backoff multiplier -} - -/** - * Timeout configuration for browser operations - */ -export const TIMEOUT_CONFIG = { - navigation: 30000, // 30 seconds for page navigation - waitFor: 10000, // 10 seconds for element to appear - snapshot: 5000, // 5 seconds for taking snapshot -} - -/** - * File paths for manifests and configuration - */ -export const MANIFEST_PATHS = { - modelsDir: path.join(PROJECT_ROOT, 'manifests/models'), - schema: path.join(PROJECT_ROOT, 'manifests/$schemas/model.schema.json'), - mappings: path.join( - PROJECT_ROOT, - '.claude/skills/benchmark-fetcher/references/model-name-mappings.json' - ), -} - -/** - * Debug configuration - */ -export const DEBUG_CONFIG = { - saveScreenshots: true, - screenshotDir: '/tmp/benchmark-fetcher-debug', - saveSnapshots: true, - snapshotDir: '/tmp/benchmark-fetcher-snapshots', -} - -/** - * Benchmark field mapping for manifest updates - * Maps benchmark IDs to manifest field names - */ -export const BENCHMARK_FIELD_MAP = { - swebench: 'sweBench', - terminalBench: 'terminalBench', - sciCode: 'sciCode', - liveCodeBench: 'liveCodeBench', - webDevArena: 'webDevArena', - // mmmu is handled specially (returns both mmmu and mmmuPro) -} - -/** - * Benchmark source URLs for reporting - */ -export const BENCHMARK_SOURCES = { - swebench: 'swebench.com', - terminalBench: 'tbench.ai', - mmmu: 'mmmu-benchmark.github.io', - sciCode: 'scicode-bench.github.io', - liveCodeBench: 'livecodebench.github.io', - webDevArena: 'web.lmarena.ai', -} +export const MODELS_DIR = path.join(PROJECT_ROOT, 'manifests/models') + +export const BENCHMARKS = Object.freeze({ + sweBench: { min: 0, max: 100, unit: 'percentage' }, + terminalBench: { min: 0, max: 1, unit: 'ratio' }, + mmmu: { min: 0, max: 100, unit: 'percentage' }, + mmmuPro: { min: 0, max: 100, unit: 'percentage' }, + webDevArena: { min: 0, max: null, unit: 'rating' }, + sciCode: { min: 0, max: 100, unit: 'percentage' }, + liveCodeBench: { min: 0, max: 100, unit: 'percentage' }, +}) diff --git a/.agents/skills/benchmark-fetcher/scripts/lib/manifest-updater.mjs b/.agents/skills/benchmark-fetcher/scripts/lib/manifest-updater.mjs deleted file mode 100644 index c2998589..00000000 --- a/.agents/skills/benchmark-fetcher/scripts/lib/manifest-updater.mjs +++ /dev/null @@ -1,181 +0,0 @@ -/** - * Manifest updater utilities - * Updates model manifests with latest benchmark data using atomic file writes - */ - -import fs from 'node:fs/promises' -import path from 'node:path' -import { BENCHMARK_FIELD_MAP, BENCHMARK_SOURCES } from './config.mjs' - -/** - * Update all model manifests with benchmark results - * Always overwrites existing benchmark values with latest data - * - * @param {Object} manifests - Map of manifest IDs to manifest objects - * @param {Object} benchmarkResults - Results from all benchmark extractions - * @param {string} manifestsDir - Directory containing manifest files - * @returns {Promise} Array of update results - */ -export async function updateManifests(manifests, benchmarkResults, manifestsDir) { - const updates = [] - - for (const [manifestId, manifest] of Object.entries(manifests)) { - const changes = collectChanges(manifestId, manifest, benchmarkResults) - - if (changes.length === 0) { - continue // No updates for this model - } - - // Apply changes to manifest object - for (const change of changes) { - if (!manifest.benchmarks) { - manifest.benchmarks = {} - } - manifest.benchmarks[change.field] = change.newValue - } - - // Write manifest to file - const manifestPath = path.join(manifestsDir, `${manifestId}.json`) - try { - await writeManifestSafely(manifestPath, manifest) - updates.push({ - manifestId, - changes, - success: true, - }) - } catch (error) { - updates.push({ - manifestId, - changes, - success: false, - error: error.message, - }) - } - } - - return updates -} - -/** - * Collect all benchmark changes for a single model - * - * @param {string} manifestId - Manifest identifier - * @param {Object} manifest - Manifest object - * @param {Object} benchmarkResults - Results from all benchmark extractions - * @returns {Array} Array of change objects - */ -function collectChanges(manifestId, manifest, benchmarkResults) { - const changes = [] - - for (const [benchmarkId, result] of Object.entries(benchmarkResults)) { - if (!result.success || !result.data) { - continue // Skip failed extractions - } - - // Handle MMMU special case (two fields from one extraction) - if (benchmarkId === 'mmmu') { - // Process mmmu field - if (result.data.mmmu?.has(manifestId)) { - const newValue = result.data.mmmu.get(manifestId) - const oldValue = manifest.benchmarks?.mmmu ?? null - - if (newValue !== oldValue) { - changes.push({ - field: 'mmmu', - oldValue, - newValue, - source: BENCHMARK_SOURCES.mmmu, - }) - } - } - - // Process mmmuPro field - if (result.data.mmmuPro?.has(manifestId)) { - const newValue = result.data.mmmuPro.get(manifestId) - const oldValue = manifest.benchmarks?.mmmuPro ?? null - - if (newValue !== oldValue) { - changes.push({ - field: 'mmmuPro', - oldValue, - newValue, - source: BENCHMARK_SOURCES.mmmu, - }) - } - } - } else { - // Standard benchmark (single value) - const fieldName = BENCHMARK_FIELD_MAP[benchmarkId] - - if (!fieldName) { - console.warn(`⚠️ No field mapping for benchmark: ${benchmarkId}`) - continue - } - - if (result.data.has(manifestId)) { - const newValue = result.data.get(manifestId) - const oldValue = manifest.benchmarks?.[fieldName] ?? null - - if (newValue !== oldValue) { - changes.push({ - field: fieldName, - oldValue, - newValue, - source: BENCHMARK_SOURCES[benchmarkId], - }) - } - } - } - } - - return changes -} - -/** - * Write manifest to file safely using atomic writes - * Validates JSON structure, writes to temp file, then renames atomically - * - * @param {string} manifestPath - Path to manifest file - * @param {Object} manifest - Manifest object to write - * @returns {Promise} - */ -async function writeManifestSafely(manifestPath, manifest) { - // 1. Validate JSON structure - validateManifestStructure(manifest) - - // 2. Convert to JSON with 2-space indentation - const json = JSON.stringify(manifest, null, 2) - - // 3. Write to temporary file - const tempPath = `${manifestPath}.tmp` - await fs.writeFile(tempPath, `${json}\n`, 'utf8') - - // 4. Atomic rename - await fs.rename(tempPath, manifestPath) -} - -/** - * Validate manifest structure before writing - * Ensures required fields exist - * - * @param {Object} manifest - Manifest object to validate - * @throws {Error} If manifest structure is invalid - */ -function validateManifestStructure(manifest) { - if (!manifest.id) { - throw new Error('Manifest missing required field: id') - } - - if (!manifest.name) { - throw new Error('Manifest missing required field: name') - } - - if (manifest.benchmarks && typeof manifest.benchmarks !== 'object') { - throw new Error('Manifest benchmarks field must be an object') - } - - // Ensure benchmarks is an object, not an array - if (Array.isArray(manifest.benchmarks)) { - throw new Error('Manifest benchmarks field must be an object, not an array') - } -} diff --git a/.agents/skills/benchmark-fetcher/scripts/lib/model-name-mapper.mjs b/.agents/skills/benchmark-fetcher/scripts/lib/model-name-mapper.mjs deleted file mode 100644 index c02cb844..00000000 --- a/.agents/skills/benchmark-fetcher/scripts/lib/model-name-mapper.mjs +++ /dev/null @@ -1,125 +0,0 @@ -/** - * Model name mapping utilities - * Maps website-specific model names to manifest IDs using configurable mappings - */ - -/** - * Normalize model name for fuzzy matching - * Removes spaces, hyphens, and special characters, converts to lowercase - * - * @param {string} name - Model name to normalize - * @returns {string} Normalized model name - */ -function normalizeModelName(name) { - return name - .trim() - .toLowerCase() - .replace(/\s+/g, '') // Remove spaces - .replace(/-/g, '') // Remove hyphens - .replace(/[^a-z0-9]/g, '') // Remove special characters -} - -/** - * Map website model name to manifest ID using 3-tier fallback strategy - * - * Strategy: - * 1. Exact match (case-sensitive) - * 2. Case-insensitive match - * 3. Fuzzy match (normalized) - * - * @param {string} benchmarkId - Benchmark identifier (e.g., 'swebench') - * @param {string} websiteName - Model name as shown on website - * @param {Object} mappings - Mapping configuration object - * @returns {string|null} Manifest ID or null if not found - */ -export function mapModelName(benchmarkId, websiteName, mappings) { - const benchmarkMappings = mappings.mappings[benchmarkId] - - if (!benchmarkMappings) { - console.warn(`⚠️ No mappings configured for benchmark: ${benchmarkId}`) - return null - } - - const websiteModels = benchmarkMappings.websiteModels - - // Strategy 1: Exact match (case-sensitive) - if (websiteModels[websiteName]) { - return websiteModels[websiteName] - } - - // Strategy 2: Case-insensitive match - const lowerName = websiteName.toLowerCase() - for (const [key, value] of Object.entries(websiteModels)) { - if (key.toLowerCase() === lowerName) { - return value - } - } - - // Strategy 3: Fuzzy match (normalized) - const normalizedName = normalizeModelName(websiteName) - for (const [key, value] of Object.entries(websiteModels)) { - if (normalizeModelName(key) === normalizedName) { - return value - } - } - - // Not found - log for manual mapping - console.warn(`⚠️ Unmapped model on ${benchmarkId}: "${websiteName}"`) - return null -} - -/** - * Get all unmapped models from extraction results - * - * @param {Object} benchmarkResults - Results from all benchmark extractions - * @param {Object} mappings - Mapping configuration object - * @returns {Array} Array of unmapped models grouped by benchmark - */ -export function getUnmappedModels(benchmarkResults, _mappings) { - const unmapped = [] - - for (const [benchmarkId, result] of Object.entries(benchmarkResults)) { - if (!result.success || !result.unmappedModels) { - continue - } - - if (result.unmappedModels.length > 0) { - unmapped.push({ - benchmarkId, - benchmarkName: getBenchmarkName(benchmarkId), - models: result.unmappedModels, - }) - } - } - - return unmapped -} - -/** - * Get benchmark display name from ID - * - * @param {string} benchmarkId - Benchmark identifier - * @returns {string} Benchmark display name - */ -function getBenchmarkName(benchmarkId) { - const names = { - swebench: 'SWE-bench', - terminalBench: 'TerminalBench', - mmmu: 'MMMU', - sciCode: 'SciCode', - liveCodeBench: 'LiveCodeBench', - webDevArena: 'WebDevArena', - } - return names[benchmarkId] || benchmarkId -} - -/** - * Track unmapped models during extraction - * Call this when a model name cannot be mapped - * - * @param {Set} unmappedSet - Set to track unmapped model names - * @param {string} websiteName - Model name that couldn't be mapped - */ -export function trackUnmapped(unmappedSet, websiteName) { - unmappedSet.add(websiteName) -} diff --git a/.agents/skills/benchmark-fetcher/scripts/lib/report-generator.mjs b/.agents/skills/benchmark-fetcher/scripts/lib/report-generator.mjs deleted file mode 100644 index 08fe0325..00000000 --- a/.agents/skills/benchmark-fetcher/scripts/lib/report-generator.mjs +++ /dev/null @@ -1,254 +0,0 @@ -/** - * Report generator for benchmark fetch completion - * Generates formatted console output showing results, updates, and next steps - */ - -import { BENCHMARK_SOURCES, BENCHMARKS } from './config.mjs' - -/** - * Generate and print completion report - * - * @param {Object} benchmarkResults - Results from all benchmark extractions - * @param {Array} manifestUpdates - Array of manifest update results - * @param {Array} unmappedModels - Array of unmapped models by benchmark - * @param {number} executionTime - Total execution time in milliseconds - * @param {boolean} isDryRun - Whether this was a dry run - */ -export function generateReport( - benchmarkResults, - manifestUpdates, - unmappedModels, - executionTime, - isDryRun = false -) { - console.log(`\n${'='.repeat(80)}`) - console.log('📊 Benchmark Fetch Report') - console.log('='.repeat(80)) - - if (isDryRun) { - console.log('\n⚠️ DRY RUN MODE - No manifests were modified\n') - } - - // Summary section - printSummary(benchmarkResults, manifestUpdates) - - // Benchmark results - printBenchmarkResults(benchmarkResults) - - // Manifest updates - if (!isDryRun && manifestUpdates.length > 0) { - printManifestUpdates(manifestUpdates) - } - - // Unmapped models - if (unmappedModels.length > 0) { - printUnmappedModels(unmappedModels) - } - - // Statistics - printStatistics(benchmarkResults, manifestUpdates, executionTime) - - // Next steps - printNextSteps(isDryRun, unmappedModels, benchmarkResults) - - console.log(`${'='.repeat(80)}\n`) -} - -/** - * Print summary section - */ -function printSummary(benchmarkResults, manifestUpdates) { - const totalBenchmarks = Object.keys(benchmarkResults).length - const successful = Object.values(benchmarkResults).filter(r => r.success).length - const failed = totalBenchmarks - successful - const manifestsUpdated = manifestUpdates.filter(u => u.success).length - - console.log('\n📈 Summary') - console.log('-'.repeat(80)) - console.log(` Benchmarks fetched: ${successful}/${totalBenchmarks}`) - console.log(` Manifests updated: ${manifestsUpdated}`) - console.log(` Failed extractions: ${failed}`) -} - -/** - * Print benchmark results - */ -function printBenchmarkResults(benchmarkResults) { - console.log('\n📊 Benchmark Results') - console.log('-'.repeat(80)) - - const successful = [] - const failed = [] - - for (const [benchmarkId, result] of Object.entries(benchmarkResults)) { - const benchmark = BENCHMARKS.find(b => b.id === benchmarkId) - const name = benchmark ? benchmark.name : benchmarkId - - if (result.success) { - const dataCount = result.data instanceof Map ? result.data.size : 0 - successful.push({ name, source: BENCHMARK_SOURCES[benchmarkId], dataCount }) - } else { - failed.push({ - name, - source: BENCHMARK_SOURCES[benchmarkId], - error: result.error, - }) - } - } - - if (successful.length > 0) { - console.log('\n✅ Successfully Fetched:') - for (const { name, source, dataCount } of successful) { - console.log(` ✓ ${name} (${source}) - ${dataCount} models`) - } - } - - if (failed.length > 0) { - console.log('\n❌ Failed to Fetch:') - for (const { name, source, error } of failed) { - console.log(` ✗ ${name} (${source})`) - console.log(` Reason: ${error}`) - } - } -} - -/** - * Print manifest updates - */ -function printManifestUpdates(manifestUpdates) { - console.log('\n📝 Manifest Updates') - console.log('-'.repeat(80)) - - const successful = manifestUpdates.filter(u => u.success) - const failed = manifestUpdates.filter(u => !u.success) - - if (successful.length > 0) { - console.log(`\n✅ Updated: ${successful.length} manifests\n`) - - for (const update of successful) { - if (update.changes.length > 0) { - console.log(` • ${update.manifestId}: ${update.changes.length} benchmarks updated`) - - for (const change of update.changes) { - const oldDisplay = formatValue(change.oldValue) - const newDisplay = formatValue(change.newValue) - console.log(` - ${change.field}: ${oldDisplay} → ${newDisplay}`) - } - console.log('') - } - } - } - - if (failed.length > 0) { - console.log(`\n❌ Failed Updates: ${failed.length} manifests\n`) - - for (const update of failed) { - console.log(` • ${update.manifestId}`) - console.log(` Error: ${update.error}`) - } - } -} - -/** - * Print unmapped models - */ -function printUnmappedModels(unmappedModels) { - console.log('\n⚠️ Unmapped Models') - console.log('-'.repeat(80)) - console.log('\nThe following models were found on leaderboards but could not be') - console.log('mapped to manifest IDs. Add them to model-name-mappings.json:\n') - - for (const { benchmarkName, models } of unmappedModels) { - if (models.length > 0) { - console.log(`${benchmarkName}:`) - for (const modelName of models) { - console.log(` • "${modelName}"`) - } - console.log('') - } - } - - console.log('Suggestion: Update references/model-name-mappings.json with these entries') -} - -/** - * Print statistics - */ -function printStatistics(benchmarkResults, manifestUpdates, executionTime) { - console.log('\n📈 Statistics') - console.log('-'.repeat(80)) - - // Count total benchmark values fetched - let totalValues = 0 - for (const result of Object.values(benchmarkResults)) { - if (result.success && result.data instanceof Map) { - totalValues += result.data.size - } - } - - // Count total changes - let totalChanges = 0 - for (const update of manifestUpdates) { - if (update.success) { - totalChanges += update.changes.length - } - } - - const executionSeconds = (executionTime / 1000).toFixed(1) - const avgTimePerBenchmark = (executionTime / 1000 / Object.keys(benchmarkResults).length).toFixed( - 1 - ) - - console.log(` Total benchmark values fetched: ${totalValues}`) - console.log(` Total benchmark updates: ${totalChanges}`) - console.log(` Manifests updated: ${manifestUpdates.length}`) - console.log(` Execution time: ${executionSeconds}s`) - console.log(` Average time per benchmark: ${avgTimePerBenchmark}s`) -} - -/** - * Print next steps - */ -function printNextSteps(isDryRun, unmappedModels, benchmarkResults) { - console.log('\n✅ Next Steps') - console.log('-'.repeat(80)) - - const steps = [] - - if (isDryRun) { - steps.push('Run without --dry-run to apply updates to manifests') - } else { - steps.push('Review updated manifests in manifests/models/') - } - - if (unmappedModels.length > 0) { - steps.push('Add unmapped models to references/model-name-mappings.json') - } - - const failedBenchmarks = Object.entries(benchmarkResults) - .filter(([_, result]) => !result.success) - .map(([id, _]) => id) - - if (failedBenchmarks.length > 0) { - steps.push(`Retry failed benchmarks: --benchmarks ${failedBenchmarks.join(',')}`) - } - - if (!isDryRun) { - steps.push('Run validation: npm run test:validate') - steps.push('Commit changes when satisfied') - } - - for (let i = 0; i < steps.length; i++) { - console.log(` ${i + 1}. ${steps[i]}`) - } -} - -/** - * Format value for display - */ -function formatValue(value) { - if (value === null || value === undefined) { - return 'null' - } - return String(value) -} diff --git a/.agents/skills/i18n/SKILL.md b/.agents/skills/i18n/SKILL.md index 56a0832b..7d260e15 100644 --- a/.agents/skills/i18n/SKILL.md +++ b/.agents/skills/i18n/SKILL.md @@ -1,439 +1,64 @@ --- name: i18n -description: Internationalization management tool for syncing and translating language files +description: Audits, synchronizes, and prepares translation work for the repository's next-intl UI resources under translations/. Use when UI translation keys or locale content change. --- -# I18n Management Skill +# I18n management -Manage multilingual content in the `translations/` directory. This skill provides tools to synchronize language files with the English reference and assist with translations. +This skill manages UI messages under `translations/`. Manifest-localized content under `manifests/**/translations` belongs to the manifest workflow. -## Overview +Read `docs/I18N-ARCHITECTURE-RULES.md` before reorganizing namespaces. The enabled locale list in `src/i18n/config.ts` is authoritative; currently all 12 locales are required. -This project uses `next-intl` for internationalization with JSON message files organized in `translations/`: +## Current structure -``` -translations/ -├── en/ # English (source of truth) -│ ├── index.ts # Main export file -│ ├── shared.json -│ ├── components.json -│ └── pages/ -│ ├── home.json -│ ├── manifesto.json -│ ├── docs.json -│ ├── articles.json -│ ├── curated-collections.json -│ ├── stacks.json -│ ├── comparison.json -│ ├── landscape.json -│ ├── open-source-rank.json -│ └── search.json -├── de/ # German -├── es/ # Spanish -├── fr/ # French -├── id/ # Indonesian -├── ja/ # Japanese -├── ko/ # Korean -├── pt/ # Portuguese -├── ru/ # Russian -├── tr/ # Turkish -├── zh-Hans/ # Simplified Chinese -└── zh-Hant/ # Traditional Chinese -``` - -**Important:** Each locale must maintain the exact same file structure and JSON key order as `en/`. - -## I18n Architecture - -The project has **two separate internationalization systems** that share the same 12 locale configuration: - -### 1. UI Translation System (next-intl) -- **Purpose:** Translates static UI strings (buttons, labels, page content, etc.) -- **Location:** `translations/{locale}/*.json` -- **Usage:** Via `useTranslations()` hook or `getTranslations()` server function -- **Managed by:** This skill's sync and translate commands - -### 2. Manifest Translation System -- **Purpose:** Translates manifest data (IDEs, CLIs, models, providers, etc.) -- **Location:** `manifests/**/*.json` (in each manifest file's `translations` field) -- **Usage:** Via `localizeManifestItem()` and `localizeManifestItems()` functions -- **Managed by:** Manual editing of manifest files or manifest automation tools - -**This skill manages only the UI Translation System.** For manifest translations, edit the manifest JSON files directly or use the manifest-automation skill. - -## Enabled Locales - -Currently enabled locales in `src/i18n/config.ts`: -- `en` - English (source of truth) -- `de` - Deutsch (German) -- `es` - Español (Spanish) -- `fr` - Français (French) -- `id` - Bahasa Indonesia (Indonesian) -- `ja` - 日本語 (Japanese) -- `ko` - 한국어 (Korean) -- `pt` - Português (Portuguese) -- `ru` - Русский (Russian) -- `tr` - Türkçe (Turkish) -- `zh-Hans` - 简体中文 (Simplified Chinese) -- `zh-Hant` - 繁體中文 (Traditional Chinese) - -All 12 locales are fully enabled and must be maintained in sync. - -## Subcommands - -### `sync` - -Synchronize all enabled locale directories with `en/` as the source of truth. - -**What it does:** +- `translations/{locale}/shared.json` +- `translations/{locale}/components/{common,controls,navigation,product,sidebar}.json` +- `translations/{locale}/pages/*.json` +- `translations/{locale}/index.ts` -- Scans all locale directories in `translations/` that are enabled in config -- Compares each JSON file's keys with the corresponding English file -- **Adds missing keys** with English text as placeholder (needs translation) -- **Removes extra keys** not present in English files -- **Preserves JSON structure, key order, and formatting** (2-space indentation) -- **Keeps the `index.ts` file structure** for each locale +Do not recreate the retired monolithic `components.json` or old page names. Keep each locale's JSON file/key structure aligned with English, but preserve the namespace architecture defined by the project document. -**Usage:** +## Synchronize keys safely -When you need to sync language files, use this command in Codex: - -``` -Please run the i18n sync command -``` - -Codex will execute: +Preview first; the default command is read-only and exits non-zero when drift exists: ```bash -node .Codex/skills/i18n/scripts/sync.mjs -``` - -**Output Example:** - +node .agents/skills/i18n/scripts/sync.mjs --check ``` -🔄 Syncing translation files with en/... -✓ Synced de/ - + Added 3 keys in components.json - + Added 5 keys in pages/home.json - - Removed 1 key in shared.json - -✓ Synced zh-Hans/ - + Added 8 keys in pages/stacks.json - -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -✓ Sync complete! - Modified: 2 locales - Added: 16 keys - Removed: 1 key -``` - -**When to use:** - -- After adding new keys to any English JSON file -- After removing obsolete keys from any English JSON file -- After adding new JSON files to the English structure -- Before starting translation work (ensures all keys exist) -- When adding a new locale - ---- - -### `translate ` - -Generate translation tasks for Codex to translate missing content. - -**What it does:** - -- Reads all JSON files from `en/` and `/` -- Identifies keys that need translation (currently in English or missing) -- Outputs a structured translation task with guidelines -- Provides context and instructions for accurate translation - -**Usage:** - -When you need to translate content, use this command in Codex: - -``` -Please run the i18n translate command for ja -``` - -Codex will execute: +After reviewing the report, apply structural synchronization explicitly: ```bash -node .Codex/skills/i18n/scripts/translate.mjs ja -``` - -**Workflow:** - -1. The script outputs content that needs translation in JSON format -2. Codex reads the guidelines and translates the content -3. You provide the translated JSON back -4. Codex updates the locale JSON files - -**Translation Guidelines (automatically enforced):** - -✓ **Preserve brand names:** `AI Coding Stack`, `Codex`, etc. -✓ **Keep placeholders intact:** `{count}`, `{name}`, `${variable}` -✓ **Don't translate URLs:** `https://example.com` -✓ **Don't translate file paths:** `/path/to/file` -✓ **Maintain terminology consistency** throughout the translation -✓ **Preserve reference syntax:** `@:path.to.key` for internal references - -**Output Example:** - -``` -🌐 Translation Assistant for ja - -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -📝 Translation Task -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - -Target Language: 日本語 (Japanese) -Entries to translate: 15 - -Files affected: - - components.json: 5 entries - - pages/home.json: 8 entries - - shared.json: 2 entries - -⚠ Translation Guidelines: - 1. Preserve brand names: "AI Coding Stack", "Codex" - 2. Keep placeholders intact: {count}, {name}, ${variable} - 3. Don't translate URLs and file paths - 4. Maintain consistent terminology - 5. Preserve reference syntax: @:path.to.key - -Content to translate: - -```json -{ - "components.languageSwitcher.english": "English", - "pages.home.hero.title": "Welcome to AI Coding Stack", - "shared.navigation.docs": "Documentation", - ... -} -``` -``` - ---- - -## File Structure - -``` -.Codex/skills/i18n/ -├── SKILL.md # This documentation -└── scripts/ - ├── sync.mjs # Synchronization script - └── translate.mjs # Translation assistant script -``` - -## Technical Details - -**Language:** Node.js (ES Modules) -**Dependencies:** Built-in Node.js modules only (`fs`, `path`) -**JSON Format:** 2-space indentation, trailing newline -**Encoding:** UTF-8 - -### Translation File Structure - -Each locale has: -1. **JSON files**: Contain the actual message data -2. **index.ts**: Imports and assembles messages - -```typescript -// translations/en/index.ts -import components from './components.json' -import articles from './pages/articles.json' -import comparison from './pages/comparison.json' -import curatedCollections from './pages/curated-collections.json' -import docs from './pages/docs.json' -import home from './pages/home.json' -import landscape from './pages/landscape.json' -import manifesto from './pages/manifesto.json' -import openSourceRank from './pages/open-source-rank.json' -import search from './pages/search.json' -import stacks from './pages/stacks.json' -import shared from './shared.json' - -const messages = { - shared, - components, - pages: { - home, - manifesto, - docs, - articles, - curatedCollections, - stacks, - comparison, - landscape, - openSourceRank, - search, - }, -} - -export default messages -``` - -### How Keys Are Compared - -The scripts use recursive traversal to handle nested JSON structures. Keys are compared using dot notation: - -```json -{ - "pages": { - "home": { - "hero": { - "title": "Welcome" - } - } - } -} +node .agents/skills/i18n/scripts/sync.mjs --write ``` -Becomes: `pages.home.hero.title = "Welcome"` +Write mode adds missing keys with English placeholders and removes extra keys inside matching JSON files. It does not delete extra files; review those manually because a file may represent an in-progress namespace migration. Always inspect the Git diff. -### Adding a New Language +The sync helper manages JSON only. When adding, renaming, or removing a namespace file, update every locale's `index.ts` explicitly and validate the import/export shape. -**Note:** The project currently supports 12 locales. To add a new locale (e.g., Italian 'it'): - -1. Add the locale to `src/i18n/config.ts`: - -```typescript -export const locales = [ - 'en', 'de', 'es', 'fr', 'id', 'ja', 'ko', 'pt', 'ru', 'tr', 'zh-Hans', 'zh-Hant', - 'it' // Add new locale -] as const; -``` - -2. Update locale names: - -```typescript -export const localeNames: Record = { - // ... existing locales - it: 'Italiano', -} - -export const localeToOgLocale: Record = { - // ... existing locales - it: 'it_IT', -} -``` - -3. Add to translate.mjs LOCALE_NAMES (`.Codex/skills/i18n/scripts/translate.mjs`): - -```javascript -const LOCALE_NAMES = { - // ... existing locales - it: 'Italiano (Italian)', -} -``` - -4. Create the locale directory structure: +## Prepare a translation batch ```bash -mkdir -p translations/it/pages -cp translations/en/index.ts translations/it/index.ts -cp translations/en/*.json translations/it/ -cp translations/en/pages/*.json translations/it/pages/ +node .agents/skills/i18n/scripts/translate.mjs ja ``` -5. Run sync to ensure structure matches: +The script emits translation candidates: missing values and values exactly equal to English, grouped by file. Some exact matches are intentionally shared product names or technical terms and should remain unchanged after review. It deliberately does not use a Latin-letter heuristic because legitimate German, Spanish, brand names, code, and technical terms contain Latin characters. The agent applies reviewed translations with normal repository edits; the script does not apply generated text. -``` -Please run the i18n sync command -``` +When translating: -6. Run translate to generate translation tasks: +- preserve ICU/next-intl placeholders, plural/select branches, tags, URLs, paths, code, and `@:` references exactly; +- reuse existing terminology before inventing a new translation; +- preserve product/model names unless an official localized name exists; +- translate meaning in page context, not isolated words; +- update all affected locales in the same change; English placeholders are only a temporary synchronization state. -``` -Please run the i18n translate command for it -``` - -## Best Practices - -1. **Always run `sync` before `translate`** to ensure all keys exist -2. **Make changes to English files first**, then sync other locales -3. **Review translations** for context accuracy, especially technical terms -4. **Use Git** to track changes and review diffs before committing -5. **Keep brand names consistent** across all languages -6. **Test translations** in the actual UI to verify formatting and length -7. **Preserve key order** to make diffs easier to review -8. **Use reference syntax** (`@:path.to.key`) for reused content - -## Troubleshooting - -**Problem:** Script says "directory not found" - -- **Solution:** Ensure you're running from project root -- Check that `translations/` directory exists - -**Problem:** Keys are out of sync after adding new content - -- **Solution:** Run `sync` command to update all locale files - -**Problem:** Translation contains placeholders like `{0}` instead of `{count}` - -- **Solution:** Verify the English source uses named placeholders, re-translate - -**Problem:** Some text appears in English in the translated app - -- **Solution:** Run `translate` to find missing translations, check for English fallbacks - -**Problem:** index.ts imports are wrong after sync - -- **Solution:** The sync script preserves index.ts structure; manually check imports match actual JSON files +## Validate -## Integration with next-intl - -This skill is designed to work with the project's `next-intl` setup: - -```typescript -// src/i18n/request.ts -const rawMessages = (await import(`../../translations/${locale}/index.ts`)).default -const messages = resolveReferences(rawMessages) -``` - -The JSON files are loaded through the index.ts for each locale, and the `resolveReferences` function handles reference syntax. - -### Reference Resolution - -The project supports **reference syntax** for reusing translations: - -**Basic Reference:** `@:path.to.key` -```json -{ - "shared": { - "appName": "AI Coding Stack", - "welcome": "Welcome to @:shared.appName" - } -} -// Result: "Welcome to AI Coding Stack" -``` - -**Reference with Modifiers:** `@.modifier:path.to.key` - -Supported modifiers: -- `@.upper:path` - Convert to UPPERCASE -- `@.lower:path` - Convert to lowercase -- `@.capitalize:path` - Capitalize first letter - -```json -{ - "terms": { - "documentation": "documentation", - "title": "@.capitalize:terms.documentation Guide" - } -} -// Result: "Documentation Guide" +```bash +npm run validate:i18n +npm run validate:i18n-usage +npm run validate:i18n-duplicates +npm run test:validate ``` -**Important:** -- References are resolved at runtime by `src/i18n/lib-core.ts` -- Circular references are detected and will throw an error -- References can be nested (references within references) -- Keep reference syntax intact during translation - -## License - -This skill is part of the AI Coding Stack project and follows the project's Apache 2.0 license. +For release-ready work, also run `npm run check` and `npm run test:ci`. diff --git a/.agents/skills/i18n/scripts/sync.mjs b/.agents/skills/i18n/scripts/sync.mjs old mode 100755 new mode 100644 index 3117cc2c..ea1dbe35 --- a/.agents/skills/i18n/scripts/sync.mjs +++ b/.agents/skills/i18n/scripts/sync.mjs @@ -1,323 +1,146 @@ #!/usr/bin/env node -/** - * Sync all locale translation files with en/ as source of truth - * - * This script: - * 1. Reads translations/en/ JSON files as the reference - * 2. Scans all other enabled locale directories in translations/ - * 3. Adds missing keys (with English text as placeholder) - * 4. Removes extra keys not present in English files - * 5. Preserves JSON structure, key order, and formatting - */ - import fs from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' -const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) - -// ANSI color codes for terminal output -const colors = { - reset: '\x1b[0m', - green: '\x1b[32m', - red: '\x1b[31m', - yellow: '\x1b[33m', - blue: '\x1b[34m', - cyan: '\x1b[36m', -} - -// Get project root (4 levels up from .claude/skills/i18n/scripts/) +const __dirname = path.dirname(fileURLToPath(import.meta.url)) const PROJECT_ROOT = path.resolve(__dirname, '../../../../') const TRANSLATIONS_DIR = path.join(PROJECT_ROOT, 'translations') const EN_DIR = path.join(TRANSLATIONS_DIR, 'en') +const write = process.argv.includes('--write') -/** - * Get enabled locales from src/i18n/config.ts - * @returns {string[]} Array of enabled locale codes - */ -function getEnabledLocales() { - const configPath = path.join(PROJECT_ROOT, 'src/i18n/config.ts') - const configContent = fs.readFileSync(configPath, 'utf-8') - - // Extract locales array from the config file - const match = configContent.match(/export const locales\s*=\s*\[([^\]]+)\]/s) - if (!match) { - throw new Error('Could not find locales array in src/i18n/config.ts') - } +if (write && process.argv.includes('--check')) { + console.error('Choose either --check or --write, not both.') + process.exit(1) +} - // Parse the locale codes - const localesArray = match[1] - const localeMatches = localesArray.matchAll(/'([^']+)'/g) - return [...localeMatches].map(m => m[1]) +function getEnabledLocales() { + const content = fs.readFileSync(path.join(PROJECT_ROOT, 'src/i18n/config.ts'), 'utf8') + const match = content.match(/export const locales\s*=\s*\[([^\]]+)\]/s) + if (!match) throw new Error('Could not parse locales from src/i18n/config.ts') + return [...match[1].matchAll(/'([^']+)'/g)].map(item => item[1]) } -/** - * Get all JSON files in a directory recursively - * @param {string} dir - Directory to scan - * @returns {string[]} Array of relative JSON file paths - */ function getJsonFiles(dir) { + if (!fs.existsSync(dir)) return [] const files = [] - - function traverse(currentDir, relativePath = '') { - const entries = fs.readdirSync(currentDir, { withFileTypes: true }) - - for (const entry of entries) { - if (entry.isDirectory()) { - traverse(path.join(currentDir, entry.name), path.join(relativePath, entry.name)) - } else if (entry.isFile() && entry.name.endsWith('.json')) { - files.push(path.join(relativePath, entry.name)) - } + function visit(current, relative = '') { + for (const entry of fs.readdirSync(current, { withFileTypes: true })) { + const nextRelative = path.join(relative, entry.name) + if (entry.isDirectory()) visit(path.join(current, entry.name), nextRelative) + else if (entry.isFile() && entry.name.endsWith('.json')) files.push(nextRelative) } } - - traverse(dir) - return files + visit(dir) + return files.sort() } -/** - * Recursively get all keys from a nested object - * @param {Object} obj - The object to traverse - * @param {string} prefix - Current key path prefix - * @returns {string[]} Array of dot-notation key paths - */ -function getAllKeys(obj, prefix = '') { - const keys = [] - - for (const [key, value] of Object.entries(obj)) { - const fullKey = prefix ? `${prefix}.${key}` : key - - if (value !== null && typeof value === 'object' && !Array.isArray(value)) { - keys.push(...getAllKeys(value, fullKey)) - } else { - keys.push(fullKey) - } +function leafKeys(value, prefix = '') { + if (value && typeof value === 'object' && !Array.isArray(value)) { + return Object.entries(value).flatMap(([key, child]) => + leafKeys(child, prefix ? `${prefix}.${key}` : key) + ) } - - return keys + return [prefix] } -/** - * Recursively rebuild object with same structure and order as reference - * @param {Object} reference - The reference object (en.json) - * @param {Object} target - The target object to sync - * @param {Array} added - Array to track added keys - * @param {Array} removed - Array to track removed keys - * @param {string} prefix - Current key path prefix - * @returns {Object} Rebuilt object with same structure as reference - */ -function rebuildWithSameOrder(reference, target, added, removed, prefix = '') { +function synchronize(reference, target, prefix = '') { const result = {} - - // Iterate through reference keys in order - for (const [key, refValue] of Object.entries(reference)) { - const fullKey = prefix ? `${prefix}.${key}` : key - - if (refValue !== null && typeof refValue === 'object' && !Array.isArray(refValue)) { - // It's a nested object - if ( - key in target && - typeof target[key] === 'object' && - target[key] !== null && - !Array.isArray(target[key]) - ) { - // Recursively rebuild nested object - result[key] = rebuildWithSameOrder(refValue, target[key], added, removed, fullKey) + const added = [] + const removed = [] + const targetObject = target && typeof target === 'object' && !Array.isArray(target) ? target : {} + + for (const [key, referenceValue] of Object.entries(reference)) { + const field = prefix ? `${prefix}.${key}` : key + if (referenceValue && typeof referenceValue === 'object' && !Array.isArray(referenceValue)) { + const nested = synchronize(referenceValue, targetObject[key], field) + result[key] = nested.result + added.push(...nested.added) + removed.push(...nested.removed) + } else if (Object.hasOwn(targetObject, key)) { + const targetValue = targetObject[key] + const referenceIsArray = Array.isArray(referenceValue) + const targetIsArray = Array.isArray(targetValue) + const targetIsObject = targetValue !== null && typeof targetValue === 'object' + if ((referenceIsArray && targetIsArray) || (!referenceIsArray && !targetIsObject)) { + result[key] = targetValue } else { - // Missing nested object, use reference structure - result[key] = rebuildWithSameOrder(refValue, {}, added, removed, fullKey) - // Track all leaf keys as added - const leafKeys = getAllKeys(refValue, fullKey) - added.push(...leafKeys) + result[key] = referenceValue + added.push(field) + removed.push(...leafKeys(targetValue, field)) } } else { - // It's a leaf value - if (key in target) { - // Use target's translation - result[key] = target[key] - } else { - // Missing key, use English as placeholder - result[key] = refValue - added.push(fullKey) - } + result[key] = referenceValue + added.push(field) } } - // Track removed keys (keys in target but not in reference) - for (const key in target) { - const fullKey = prefix ? `${prefix}.${key}` : key - if (!(key in reference)) { - if (typeof target[key] === 'object' && target[key] !== null && !Array.isArray(target[key])) { - const leafKeys = getAllKeys(target[key], fullKey) - removed.push(...leafKeys) - } else { - removed.push(fullKey) - } + for (const [key, value] of Object.entries(targetObject)) { + if (!Object.hasOwn(reference, key)) { + const field = prefix ? `${prefix}.${key}` : key + removed.push(...leafKeys(value, field)) } } - - return result + return { result, added, removed } } -/** - * Sync a target JSON file with the English reference - * @param {string} enFile - Path to the English reference file - * @param {string} targetFile - Path to the target language file - * @returns {Object} Sync report - */ -function syncJsonFile(enFile, targetFile) { - const enData = JSON.parse(fs.readFileSync(enFile, 'utf-8')) - - // Create target directory if it doesn't exist - const targetDir = path.dirname(targetFile) - if (!fs.existsSync(targetDir)) { - fs.mkdirSync(targetDir, { recursive: true }) - } - - let added = [] - const removed = [] - - if (fs.existsSync(targetFile)) { - const targetData = JSON.parse(fs.readFileSync(targetFile, 'utf-8')) - const syncedData = rebuildWithSameOrder(enData, targetData, added, removed) - fs.writeFileSync(targetFile, `${JSON.stringify(syncedData, null, 2)}\n`, 'utf-8') - } else { - // File doesn't exist, create it with English content - fs.writeFileSync(targetFile, `${JSON.stringify(enData, null, 2)}\n`, 'utf-8') - added = getAllKeys(enData) - } - - return { added, removed } -} - -/** - * Main sync function - */ function main() { - console.log(`${colors.cyan}🔄 Syncing translation files with en/...${colors.reset}\n`) - - // Check if translations directory exists - if (!fs.existsSync(TRANSLATIONS_DIR)) { - console.error( - `${colors.red}✗ Translations directory not found: ${TRANSLATIONS_DIR}${colors.reset}` - ) - process.exit(1) - } - - // Check if English directory exists - if (!fs.existsSync(EN_DIR)) { - console.error(`${colors.red}✗ English directory not found: ${EN_DIR}${colors.reset}`) - process.exit(1) - } - - // Get enabled locales - const enabledLocales = getEnabledLocales() - const targetLocales = enabledLocales.filter(locale => locale !== 'en') - - if (targetLocales.length === 0) { - console.log(`${colors.yellow}⚠ No other locales enabled in config${colors.reset}`) - return - } - - // Get all JSON files in English directory (relative paths) - const jsonFiles = getJsonFiles(EN_DIR) + if (!fs.existsSync(EN_DIR)) throw new Error(`English translations not found: ${EN_DIR}`) + const locales = getEnabledLocales().filter(locale => locale !== 'en') + const englishFiles = getJsonFiles(EN_DIR) + let driftCount = 0 + let extraFileCount = 0 - if (jsonFiles.length === 0) { - console.log(`${colors.yellow}⚠ No JSON files found in en/${colors.reset}`) - return - } - - let totalAdded = 0 - let totalRemoved = 0 - let filesModified = 0 - const localeReports = {} - - // Sync each locale - for (const locale of targetLocales) { + for (const locale of locales) { const localeDir = path.join(TRANSLATIONS_DIR, locale) - const localeAdded = [] - const localeRemoved = [] - const fileChanges = [] - - // Check if locale directory exists - if (!fs.existsSync(localeDir)) { - console.log(`${colors.yellow}⚠ Creating directory for ${locale}/${colors.reset}`) - fs.mkdirSync(localeDir, { recursive: true }) + const localeFiles = getJsonFiles(localeDir) + const extraFiles = localeFiles.filter(file => !englishFiles.includes(file)) + for (const relativePath of extraFiles) { + console.log(`${locale}: extra file requires manual review: ${relativePath}`) + driftCount++ + extraFileCount++ } - // Sync each JSON file - for (const relativePath of jsonFiles) { - const enFile = path.join(EN_DIR, relativePath) - const targetFile = path.join(localeDir, relativePath) - - const { added, removed } = syncJsonFile(enFile, targetFile) - - if (added.length > 0 || removed.length > 0) { - fileChanges.push({ file: relativePath, added, removed }) - localeAdded.push(...added) - localeRemoved.push(...removed) - } - } - - localeReports[locale] = { - added: localeAdded, - removed: localeRemoved, - fileChanges, - } - - totalAdded += localeAdded.length - totalRemoved += localeRemoved.length - if (fileChanges.length > 0) filesModified++ - } - - // Display results - for (const locale of targetLocales) { - const report = localeReports[locale] - - if (report.fileChanges.length > 0) { - console.log(`${colors.green}✓${colors.reset} Synced ${colors.blue}${locale}/${colors.reset}`) - - for (const change of report.fileChanges) { - if (change.added.length > 0) { - console.log( - ` ${colors.green}+${colors.reset} Added ${change.added.length} key${change.added.length > 1 ? 's' : ''} in ${colors.blue}${change.file}${colors.reset}` - ) - } - if (change.removed.length > 0) { - console.log( - ` ${colors.red}-${colors.reset} Removed ${change.removed.length} key${change.removed.length > 1 ? 's' : ''} in ${colors.blue}${change.file}${colors.reset}` - ) + for (const relativePath of englishFiles) { + const reference = JSON.parse(fs.readFileSync(path.join(EN_DIR, relativePath), 'utf8')) + const targetPath = path.join(localeDir, relativePath) + const exists = fs.existsSync(targetPath) + const target = exists ? JSON.parse(fs.readFileSync(targetPath, 'utf8')) : {} + const synced = synchronize(reference, target) + if (!exists || synced.added.length > 0 || synced.removed.length > 0) { + driftCount++ + console.log( + `${locale}/${relativePath}: ${exists ? '' : 'missing file; '}${synced.added.length} key(s) to add, ${synced.removed.length} key(s) to remove` + ) + if (synced.added.length) console.log(` add: ${synced.added.join(', ')}`) + if (synced.removed.length) console.log(` remove: ${synced.removed.join(', ')}`) + if (write) { + fs.mkdirSync(path.dirname(targetPath), { recursive: true }) + fs.writeFileSync(targetPath, `${JSON.stringify(synced.result, null, 2)}\n`, 'utf8') } } - - console.log('') - } else { - console.log( - `${colors.green}✓${colors.reset} ${colors.blue}${locale}/${colors.reset} already in sync` - ) } } - // Summary - console.log(`${colors.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`) - - if (filesModified > 0) { - console.log(`${colors.green}✓ Sync complete!${colors.reset}`) - console.log(` Modified: ${filesModified} locale${filesModified > 1 ? 's' : ''}`) - console.log(` Added: ${totalAdded} key${totalAdded > 1 ? 's' : ''}`) - console.log(` Removed: ${totalRemoved} key${totalRemoved > 1 ? 's' : ''}`) + if (driftCount === 0) { + console.log('All locale JSON structures match English.') + return + } + if (write) { + console.log( + `Synchronized ${driftCount} structural difference(s). Extra files were not deleted.` + ) + if (extraFileCount > 0) process.exitCode = 1 } else { - console.log(`${colors.green}✓ all locales are already in sync${colors.reset}`) + console.error(`Found ${driftCount} structural difference(s). Preview only; no files changed.`) + process.exitCode = 1 } } -// Run the script try { main() } catch (error) { - console.error(`${colors.red}✗ Error: ${error.message}${colors.reset}`) - console.error(error.stack) + console.error(`i18n sync failed: ${error.message}`) process.exit(1) } diff --git a/.agents/skills/i18n/scripts/translate.mjs b/.agents/skills/i18n/scripts/translate.mjs old mode 100755 new mode 100644 index 27df9c73..e5fabc7e --- a/.agents/skills/i18n/scripts/translate.mjs +++ b/.agents/skills/i18n/scripts/translate.mjs @@ -1,351 +1,106 @@ #!/usr/bin/env node -/** - * Translate locale files with Claude Code assistance - * - * This script: - * 1. Reads all JSON files from translations/en/ and translations// - * 2. Identifies keys that need translation (currently in English) - * 3. Outputs translation tasks for Claude Code to perform - */ - import fs from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' -const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) - -// ANSI color codes -const colors = { - reset: '\x1b[0m', - green: '\x1b[32m', - red: '\x1b[31m', - yellow: '\x1b[33m', - blue: '\x1b[34m', - cyan: '\x1b[36m', - magenta: '\x1b[35m', -} - -// Get project root (4 levels up from .claude/skills/i18n/scripts/) +const __dirname = path.dirname(fileURLToPath(import.meta.url)) const PROJECT_ROOT = path.resolve(__dirname, '../../../../') const TRANSLATIONS_DIR = path.join(PROJECT_ROOT, 'translations') const EN_DIR = path.join(TRANSLATIONS_DIR, 'en') -// Locale display names const LOCALE_NAMES = { - 'zh-Hans': '简体中文 (Simplified Chinese)', - 'zh-Hant': '繁體中文 (Traditional Chinese)', - ja: '日本語 (Japanese)', - ko: '한국어 (Korean)', - fr: 'Français (French)', de: 'Deutsch (German)', es: 'Español (Spanish)', + fr: 'Français (French)', + id: 'Bahasa Indonesia (Indonesian)', + ja: '日本語 (Japanese)', + ko: '한국어 (Korean)', pt: 'Português (Portuguese)', ru: 'Русский (Russian)', - id: 'Bahasa Indonesia (Indonesian)', tr: 'Türkçe (Turkish)', + 'zh-Hans': '简体中文 (Simplified Chinese)', + 'zh-Hant': '繁體中文 (Traditional Chinese)', +} + +function getEnabledLocales() { + const content = fs.readFileSync(path.join(PROJECT_ROOT, 'src/i18n/config.ts'), 'utf8') + const match = content.match(/export const locales\s*=\s*\[([^\]]+)\]/s) + if (!match) throw new Error('Could not parse locales from src/i18n/config.ts') + return [...match[1].matchAll(/'([^']+)'/g)].map(item => item[1]) } -/** - * Get all JSON files in a directory recursively - * @param {string} dir - Directory to scan - * @returns {string[]} Array of relative JSON file paths - */ function getJsonFiles(dir) { const files = [] - - function traverse(currentDir, relativePath = '') { - const entries = fs.readdirSync(currentDir, { withFileTypes: true }) - - for (const entry of entries) { - if (entry.isDirectory()) { - traverse(path.join(currentDir, entry.name), path.join(relativePath, entry.name)) - } else if (entry.isFile() && entry.name.endsWith('.json')) { - files.push(path.join(relativePath, entry.name)) - } + function visit(current, relative = '') { + for (const entry of fs.readdirSync(current, { withFileTypes: true })) { + const nextRelative = path.join(relative, entry.name) + if (entry.isDirectory()) visit(path.join(current, entry.name), nextRelative) + else if (entry.isFile() && entry.name.endsWith('.json')) files.push(nextRelative) } } - - traverse(dir) - return files + visit(dir) + return files.sort() } -/** - * Recursively get all key-value pairs from nested object - * @param {Object} obj - The object to traverse - * @param {string} prefix - Current key path prefix - * @returns {Array<{key: string, value: *}>} Array of key-value pairs - */ -function getAllEntries(obj, prefix = '') { - const entries = [] - - for (const [key, value] of Object.entries(obj)) { - const fullKey = prefix ? `${prefix}.${key}` : key - - if (value !== null && typeof value === 'object' && !Array.isArray(value)) { - entries.push(...getAllEntries(value, fullKey)) - } else { - entries.push({ key: fullKey, value }) - } +function entries(value, prefix = '') { + if (value && typeof value === 'object' && !Array.isArray(value)) { + return Object.entries(value).flatMap(([key, child]) => + entries(child, prefix ? `${prefix}.${key}` : key) + ) } - - return entries -} - -/** - * Get value from nested object using dot notation - * @param {Object} obj - The object to query - * @param {string} path - Dot notation path - * @returns {*} The value at the path - */ -function getValueByPath(obj, path) { - return path.split('.').reduce((current, key) => current?.[key], obj) -} - -/** - * Set value in nested object using dot notation - * @param {Object} obj - The object to modify - * @param {string} path - Dot notation path - * @param {*} value - Value to set - */ -function setValueByPath(obj, path, value) { - const keys = path.split('.') - const lastKey = keys.pop() - const target = keys.reduce((current, key) => { - if (!(key in current)) { - current[key] = {} - } - return current[key] - }, obj) - target[lastKey] = value + return [{ key: prefix, value }] } -/** - * Check if a string contains English characters - * Simple heuristic: if it contains Latin alphabet, assume English - * @param {string} text - Text to check - * @returns {boolean} True if likely English - */ -function isLikelyEnglish(text) { - if (typeof text !== 'string') return false - // Check if contains English letters (excluding URLs, placeholders, and references) - const cleanText = text - .replace(/https?:\/\/[^\s]+/g, '') // Remove URLs - .replace(/\{[^}]+\}/g, '') // Remove {placeholders} - .replace(/\$\{[^}]+\}/g, '') // Remove ${variables} - .replace(/@[:.][^\s]+/g, '') // Remove @:reference and @.modifier:reference - .replace(/<[^>]+>/g, '') // Remove tags - - // If after cleaning, contains English letters, it's likely English - return /[a-zA-Z]{2,}/.test(cleanText) -} - -/** - * Find entries that need translation across all JSON files - * @param {string} locale - Target locale code - * @returns {Array<{file: string, key: string, enValue: string, targetValue: string}>} Entries needing translation - */ -function findTranslationNeeded(locale) { - const targetDir = path.join(TRANSLATIONS_DIR, locale) - const jsonFiles = getJsonFiles(EN_DIR) - const needsTranslation = [] - - for (const relativePath of jsonFiles) { - const enFile = path.join(EN_DIR, relativePath) - const targetFile = path.join(targetDir, relativePath) - - if (!fs.existsSync(targetFile)) { - // File doesn't exist, all entries need translation - const enData = JSON.parse(fs.readFileSync(enFile, 'utf-8')) - const enEntries = getAllEntries(enData) - for (const { key, value: enValue } of enEntries) { - needsTranslation.push({ file: relativePath, key, enValue, targetValue: null }) - } - } else { - const enData = JSON.parse(fs.readFileSync(enFile, 'utf-8')) - const targetData = JSON.parse(fs.readFileSync(targetFile, 'utf-8')) - const enEntries = getAllEntries(enData) - - for (const { key, value: enValue } of enEntries) { - const targetValue = getValueByPath(targetData, key) - - // Need translation if: - // 1. Value is missing in target - // 2. Value in target is same as English (not translated yet) - // 3. Value in target still contains significant English text - if (!targetValue || targetValue === enValue || isLikelyEnglish(targetValue)) { - needsTranslation.push({ file: relativePath, key, enValue, targetValue }) - } - } - } - } - - return needsTranslation +function getAtPath(value, dottedPath) { + return dottedPath.split('.').reduce((current, key) => current?.[key], value) } -/** - * Display translation instructions for Claude Code - * @param {string} locale - Target locale - * @param {Array} entries - Entries to translate - */ -function displayTranslationTask(locale, entries) { - const localeName = LOCALE_NAMES[locale] || locale - - // Group entries by file for better context - const byFile = {} - for (const entry of entries) { - if (!byFile[entry.file]) byFile[entry.file] = [] - byFile[entry.file].push(entry) - } - - console.log(`${colors.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`) - console.log(`${colors.magenta}📝 Translation Task${colors.reset}`) - console.log(`${colors.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}\n`) - - console.log(`${colors.blue}Target Language:${colors.reset} ${localeName}`) - console.log(`${colors.blue}Entries to translate:${colors.reset} ${entries.length}\n`) - - console.log(`${colors.yellow}Files affected:${colors.reset}`) - for (const [file, fileEntries] of Object.entries(byFile)) { - console.log(` - ${colors.blue}${file}${colors.reset}: ${fileEntries.length} entries`) - } - console.log('') - - console.log(`${colors.yellow}⚠ Translation Guidelines:${colors.reset}`) - console.log(` 1. Preserve brand names: "AI Coding Stack", "Claude Code", etc.`) - console.log(` 2. Keep placeholders intact: {count}, {name}, \${variable}`) - console.log(` 3. Don't translate URLs and file paths`) - console.log(` 4. Maintain consistent terminology throughout`) - console.log(` 5. Preserve reference syntax: @:path.to.key${colors.reset}\n`) - - console.log(`${colors.green}Content to translate:${colors.reset}\n`) - console.log(`${colors.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}\n`) - - // Output as grouped JSON with file context - console.log('```json') - const translationMap = {} - for (const { key, enValue } of entries) { - translationMap[key] = enValue +function main() { + const locale = process.argv[2] + const enabled = getEnabledLocales() + if (!locale || locale === 'en' || !enabled.includes(locale)) { + throw new Error( + `Choose an enabled non-English locale: ${enabled.filter(item => item !== 'en').join(', ')}` + ) } - console.log(JSON.stringify(translationMap, null, 2)) - console.log('```\n') - console.log(`${colors.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}\n`) - console.log(`${colors.yellow}👉 Next Steps:${colors.reset}`) - console.log(` 1. Translate each value in the JSON above to ${localeName}`) - console.log(` 2. Reply with the translated JSON in the same format`) - console.log(` 3. The script will apply the translations to the appropriate files\n`) -} - -/** - * Apply translations to target locale files - * @param {string} locale - Target locale code - * @param {Object} translations - Translation map {key: translatedValue} - * @returns {Object} Application report - */ -function _applyTranslations(locale, translations) { const targetDir = path.join(TRANSLATIONS_DIR, locale) - const jsonFiles = getJsonFiles(EN_DIR) - const report = { - filesUpdated: [], - totalKeys: 0, - } - - // Group translations by file - const translationsByFile = {} - for (const jsonFile of jsonFiles) { - translationsByFile[jsonFile] = {} - } - - // Read English files to map keys to files - for (const relativePath of jsonFiles) { - const enFile = path.join(EN_DIR, relativePath) - const enData = JSON.parse(fs.readFileSync(enFile, 'utf-8')) - const enEntries = getAllEntries(enData) - - for (const { key } of enEntries) { - if (key in translations) { - translationsByFile[relativePath][key] = translations[key] + const tasks = {} + let count = 0 + + for (const relativePath of getJsonFiles(EN_DIR)) { + const english = JSON.parse(fs.readFileSync(path.join(EN_DIR, relativePath), 'utf8')) + const targetPath = path.join(targetDir, relativePath) + const target = fs.existsSync(targetPath) ? JSON.parse(fs.readFileSync(targetPath, 'utf8')) : {} + for (const item of entries(english)) { + const targetValue = getAtPath(target, item.key) + if (targetValue === undefined || targetValue === '' || targetValue === item.value) { + tasks[relativePath] ||= {} + tasks[relativePath][item.key] = item.value + count++ } } } - // Apply translations to each file - for (const [relativePath, fileTranslations] of Object.entries(translationsByFile)) { - if (Object.keys(fileTranslations).length === 0) continue - - const targetFile = path.join(targetDir, relativePath) - const targetData = fs.existsSync(targetFile) - ? JSON.parse(fs.readFileSync(targetFile, 'utf-8')) - : {} - - let count = 0 - for (const [key, value] of Object.entries(fileTranslations)) { - setValueByPath(targetData, key, value) - count++ - } - - // Ensure directory exists - const targetDirPath = path.dirname(targetFile) - if (!fs.existsSync(targetDirPath)) { - fs.mkdirSync(targetDirPath, { recursive: true }) - } - - // Write back with consistent formatting - fs.writeFileSync(targetFile, `${JSON.stringify(targetData, null, 2)}\n`, 'utf-8') - - report.filesUpdated.push(relativePath) - report.totalKeys += count - } - - return report -} - -/** - * Main translate function - */ -function main() { - const args = process.argv.slice(2) - - // Parse arguments - const locale = args[0] - - if (!locale) { - console.error(`${colors.red}✗ Usage: node translate.mjs ${colors.reset}`) - console.error(`${colors.yellow} Example: node translate.mjs zh-Hans${colors.reset}\n`) - console.error(`${colors.blue}Available locales:${colors.reset}`) - for (const [code, name] of Object.entries(LOCALE_NAMES)) { - console.error(` ${code} - ${name}`) - } - process.exit(1) - } - - console.log(`${colors.cyan}🌐 Translation Assistant for ${locale}${colors.reset}\n`) - - // Check English directory exists - if (!fs.existsSync(EN_DIR)) { - console.error(`${colors.red}✗ English directory not found: ${EN_DIR}${colors.reset}`) - process.exit(1) - } - - // Find entries needing translation - const toTranslate = findTranslationNeeded(locale) - - if (toTranslate.length === 0) { - console.log(`${colors.green}✓ All entries in ${locale}/ are already translated!${colors.reset}`) + if (count === 0) { + console.log(`No missing or exact-English translation candidates found for ${locale}.`) return } - // Display translation task for Claude Code - displayTranslationTask(locale, toTranslate) + console.log(`Translation candidates for ${LOCALE_NAMES[locale] || locale}: ${count} entries`) + console.log( + 'Apply translations to the named files. Preserve placeholders, ICU branches, tags, URLs, paths, code, and @: references exactly.' + ) + console.log( + 'Review every candidate. Keep official names and intentional shared technical terms unchanged; Latin letters alone do not imply missing translation.' + ) + console.log(JSON.stringify(tasks, null, 2)) } -// Run the script try { main() } catch (error) { - console.error(`${colors.red}✗ Error: ${error.message}${colors.reset}`) - console.error(error.stack) + console.error(`i18n translation task failed: ${error.message}`) process.exit(1) } diff --git a/.agents/skills/manifest-automation/SKILL.md b/.agents/skills/manifest-automation/SKILL.md index a5f89639..efe91e48 100644 --- a/.agents/skills/manifest-automation/SKILL.md +++ b/.agents/skills/manifest-automation/SKILL.md @@ -1,571 +1,59 @@ --- name: manifest-automation -description: Create and update manifest files using advanced web automation with Playwright, intelligent retry logic, and smart merge capabilities +description: Prepares and guides evidence-backed creation or updates of CLI, desktop, extension, IDE, model, provider, and vendor manifests in this repository. Use when manifest data must be researched, merged, localized, and validated against the current schemas. --- -# Manifest Automation Skill +# Manifest Automation -Automate the creation and updating of manifest files for AI coding tools using advanced browser automation, web search, and intelligent field-level retry logic. +Use this skill as a guarded workflow, not as an autonomous web scraper. The helper prints the current schema path, output path, and type-specific checklist; the agent performs research and edits. -## Overview - -This skill extends beyond the existing `manifest-creator` by adding: - -- **Dual Mode Operation**: CREATE new manifests or UPDATE existing ones with smart merge -- **Advanced Web Automation**: Playwright MCP for dynamic content, pricing calculators, and marketplace navigation -- **Intelligent Retry Logic**: 3-attempt strategy per field with graceful degradation to TODO comments -- **Smart Merge**: UPDATE mode preserves user-curated data while refreshing auto-discoverable fields -- **Type-Optimized Workflows**: Dedicated extraction strategies for each manifest type - -## Supported Manifest Types - -1. **CLI** - Command-line tools with platform-specific install commands -2. **Extension** - IDE extensions with marketplace URLs and install URIs -3. **IDE** - Integrated development environments with GUI installers -4. **Model** - AI models with technical specs and token pricing -5. **Provider** - Model providers (foundation or service) -6. **Vendor** - Companies and organizations - -## Usage - -### CREATE Mode - -Create a new manifest from scratch: - -```bash -# CLI tool -node .Codex/skills/manifest-automation/scripts/automate.mjs create cli cursor-cli https://cursor.com/cli - -# Extension -node .Codex/skills/manifest-automation/scripts/automate.mjs create extension copilot https://github.com/features/copilot - -# Model -node .Codex/skills/manifest-automation/scripts/automate.mjs create model Codex-opus https://anthropic.com/Codex - -# Provider -node .Codex/skills/manifest-automation/scripts/automate.mjs create provider openrouter https://openrouter.ai - -# IDE -node .Codex/skills/manifest-automation/scripts/automate.mjs create ide cursor https://cursor.com - -# Vendor -node .Codex/skills/manifest-automation/scripts/automate.mjs create vendor anthropic https://anthropic.com -``` - -### UPDATE Mode - -Update an existing manifest with fresh data: +## Start ```bash -# Update existing CLI manifest -node .Codex/skills/manifest-automation/scripts/automate.mjs update cli cursor-cli https://cursor.com/cli - -# Update extension (URL optional if already in manifest) -node .Codex/skills/manifest-automation/scripts/automate.mjs update extension copilot -``` - -## How It Works - -### CREATE Mode Workflow - -1. **Load Schema & Workflow** - - Read JSON schema for manifest type - - Load type-specific workflow instructions - - Initialize field tracker for retry logic - -2. **Extract Information** - - Use Playwright MCP to navigate websites - - Use WebSearch to discover GitHub repos, marketplaces, social media - - Extract data following type-specific workflow - - Track attempts per field (max 3) - -3. **Handle Failures Gracefully** - - After 3 failed attempts per field: add TODO comment - - Continue with partial data (save as draft) - - Generate completion report - -4. **Validate & Save** - - Write manifest JSON to appropriate path - - For IDE/CLI/Extension: check vendor manifest exists, create if missing - - Update `data/github-stars.json` - - Run `npm run generate` to regenerate TypeScript data files - - Run schema validation - - Report success/failures to user - -### UPDATE Mode Workflow - -1. **Load Existing Manifest** - - Read current manifest from disk - - Parse and validate structure - -2. **Extract Fresh Data** - - Follow same extraction workflow as CREATE - - Use Playwright and WebSearch for current data - -3. **Smart Merge** - - **AUTO_UPDATE**: Replace with new values (versions, descriptions, pricing, specs) - - **PRESERVE**: Keep existing (id, name, verified, i18n, relatedProducts) - - **MERGE_ADDITIVE**: Add new items to arrays/objects (communityUrls, platforms) - - **CONDITIONAL**: Present both for manual review (license) - -4. **Generate Change Report** - - Show what was updated, added, preserved - - Flag fields needing manual review - - Validate and save merged manifest - -## Field Extraction Strategies - -### CLI Workflow Focus -- Platform-specific install commands (brew, npm, apt, winget) -- Launch commands and installation paths -- GitHub releases for version tracking -- Cross-platform support detection - -### Extension Workflow Focus -- IDE marketplace URLs (VS Code, JetBrains, Open VSX) -- Install URIs (vscode:extension/, cursor:extension/) -- Supported IDE detection and compatibility -- Publisher and extension ID extraction - -### Model Workflow Focus -- Technical specifications (parameter size, context window, max output) -- Token pricing ($/M tokens for input/output/cache) -- Platform URLs (HuggingFace, Artificial Analysis, OpenRouter) -- Model card information extraction - -### Provider Workflow Focus -- Provider type detection (foundation vs service) -- API key application URLs -- Platform integration discovery -- Developer documentation - -### IDE Workflow Focus -- GUI installation (DMG, EXE, DEB installers) -- Download page navigation -- App Store distributions -- GUI-based installation steps - -### Vendor Workflow Focus -- Company mission and description -- Official social media accounts -- Community links and presence -- Organization-level information - -## Tool Integration - -### When to Use Each Tool - -**Playwright MCP** (mcp__playwright__browser_*): -- Dynamic JavaScript-rendered content -- Multi-step navigation (tabs, dropdowns, modals) -- IDE marketplace pages -- Pricing calculators and forms -- Interactive website elements -- LinkedIn company pages (verification and metadata) - -**WebSearch**: -- Discovering GitHub repositories -- Finding marketplace URLs -- Locating social media profiles -- Platform-specific pages (HuggingFace, npm, PyPI) -- Validation and alternatives -- Wikipedia for cross-referencing company information -- LinkedIn company pages for authoritative metadata - -**WebFetch** (fallback): -- Static documentation pages -- Simple content fetching -- Direct URL access for known pages - -### Reference-Only Sources - -**Wikipedia**: -- Use for verifying company descriptions and basic facts -- Cross-reference founding dates, headquarters, official names -- Validate social media links listed in Wikipedia infobox -- **NEVER store Wikipedia URLs in manifests** - use only for verification - -**LinkedIn Company Pages**: -- Primary authoritative source for company metadata -- Verify company size, industry, official description -- Store the LinkedIn URL in `communityUrls.linkedin` -- Use company description to validate website description accuracy - -### Playwright Patterns - -**Pattern 1: Navigate → Snapshot → Extract** -``` -1. mcp__playwright__browser_navigate(url) -2. mcp__playwright__browser_snapshot() -3. Extract data from snapshot elements -``` - -**Pattern 2: Interactive Navigation** -``` -1. Take initial snapshot -2. mcp__playwright__browser_click(element) -3. mcp__playwright__browser_wait_for(text) -4. Take new snapshot and extract -``` - -**Pattern 3: Form Interaction** -``` -1. mcp__playwright__browser_fill_form(fields) -2. Click submit button -3. Extract results from response -``` - -## Retry Logic - -### 3-Attempt Strategy - -Each field gets up to 3 extraction attempts before falling back to TODO comment: - -**Attempt 1**: Direct extraction from primary source -- Official website, documentation, or main page -- Most authoritative source - -**Attempt 2**: Alternative sources or search -- WebSearch for the information -- Alternative URL patterns -- Related pages or sections - -**Attempt 3**: Final fallback sources -- Third-party platforms -- Package manager websites -- Community resources - -**After 3 failures**: Add TODO comment with reason - -### Retry Examples - -**Installation Commands**: -1. Official installation docs page -2. WebSearch for package manager (brew, npm, PyPI) -3. GitHub README or package manager sites -4. TODO if still not found - -**Pricing**: -1. Official pricing page -2. Footer/header navigation links -3. Documentation pricing mentions -4. TODO if behind "Contact Sales" - -**Community URLs**: -1. Website footer social links -2. WebSearch " official " -3. Common URL patterns validation -4. Set to null if not found - -### TODO Comment Format - -```json -{ - "communityUrls": { - "discord": null, // TODO: Could not auto-discover after 3 attempts. Not found in footer or search results. - "twitter": "https://x.com/product" - } -} -``` - -## Smart Merge Field Categories - -### AUTO_UPDATE Fields -Always replaced with freshly discovered values: -- `latestVersion` - Always fetch latest -- `description` - From official source -- `websiteUrl` - Official URL -- `docsUrl` - Documentation URL -- `tokenPricing` - Model pricing (changes frequently) -- `size`, `contextWindow`, `maxOutput` - Model specs - -### PRESERVE Fields -Never updated (user-curated): -- `id` - Core identifier -- `name` - Display name -- `verified` - Manual verification status -- `i18n` - User translations -- `relatedProducts` - Manually curated relationships - -### MERGE_ADDITIVE Fields -Add new items, keep existing: -- `communityUrls` - Add newly discovered social links -- `platformUrls` - Add new platform integrations -- `supportedIdes` - Add new IDE support -- `platforms` - Add new OS support -- `pricing` - Add new tiers, preserve existing - -### CONDITIONAL Fields -Require manual review: -- `license` - Only update if from authoritative source (GitHub) -- `vendor` - Review name changes carefully - -## Error Handling - -### Graceful Degradation - -1. **Field-Level Failures**: Track each field independently -2. **Partial Manifests**: Save draft even with missing fields -3. **TODO Comments**: Mark failed fields with reason -4. **Completion Reports**: Show what succeeded/failed - -### Completion Report Format - -``` -📊 Manifest Automation Report -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - -Status: DRAFT (3 fields incomplete) - -✅ Successfully Extracted (42 fields) -❌ Failed Extraction (3 fields): - 1. communityUrls.discord (3 attempts) - Reason: Not found in website footer or WebSearch - 2. pricing[2].value (3 attempts) - Reason: Enterprise pricing behind contact form - 3. platforms[1].installCommand (3 attempts) - Reason: Windows installation docs incomplete - -⚠️ Cross-Reference Validation: - ✓ Wikipedia: Company description verified - ✓ LinkedIn: Company metadata matches - ⚠️ Description length mismatch: Website (180 chars) vs LinkedIn (220 chars) - -🌐 i18n Consistency Warnings (UPDATE mode only): - ⚠️ English description updated - review i18n translations - ⚠️ i18n.zh-Hans may be outdated (last updated: previous description) - ⚠️ i18n.de may be outdated (last updated: previous description) - → Add TODO comments to i18n fields requiring manual review - -📝 Next Steps: -1. Review manifest file: manifests/clis/cursor-cli.json -2. Manually fill TODO-marked fields if information available -3. Add i18n translations (zh-Hans, de, ko) -4. Update verified field once data confirmed accurate -5. Run validation: npm run test:validate - -Note: Vendor manifest, github-stars.json, and TypeScript files already updated. +node .agents/skills/manifest-automation/scripts/automate.mjs create model example-model https://example.com/model +node .agents/skills/manifest-automation/scripts/automate.mjs update model existing-model ``` -## Comparison with manifest-creator - -| Feature | manifest-creator | manifest-automation | -|---------|------------------|---------------------| -| **Tools** | WebFetch only | Playwright MCP + WebSearch + WebFetch | -| **Modes** | CREATE only | CREATE + UPDATE | -| **Retry Logic** | Manual/ask user | Automatic 3-attempt per field | -| **Dynamic Content** | Limited | Full Playwright support | -| **Merge Logic** | N/A | Smart field categorization | -| **Error Handling** | Stop and ask | TODO + draft + report | -| **Workflows** | Generic 7-step | Type-optimized phases | -| **Community Discovery** | Basic | Advanced WebSearch | -| **Pricing Extraction** | Static pages | Dynamic calculators | -| **Marketplace Support** | Limited | Full automation (VS Code, JetBrains) | - -## Best Practices - -### Accuracy -- Never generate or guess data - always extract from authoritative sources -- Validate URLs exist and are official -- Verify version numbers from releases, not estimates -- Check social media accounts are official (verification badges, content) -- **Use Wikipedia for cross-referencing** company facts, model specs, and historical data -- **Use LinkedIn as authoritative source** for company metadata and descriptions - -### Completeness -- Follow type-specific workflow completely -- Don't skip optional fields - attempt extraction -- Use full 3-attempt retry strategy before TODO -- Generate comprehensive completion reports -- **Cross-reference with Wikipedia and LinkedIn** to ensure no critical information is missed -- Validate i18n translations match English default content - -### Validation -- Always run schema validation after manifest creation -- Fix validation errors before marking complete -- Verify enum values (os, ideId, pricing categories) -- Check URL formats (https://, proper domains) -- **Verify company information** against Wikipedia and LinkedIn -- **Ensure i18n consistency** - all languages must reflect the same content - -### Smart Merge -- In UPDATE mode, trust the merge categories -- Review CONDITIONAL fields manually -- Don't blindly replace PRESERVE fields -- Validate MERGE_ADDITIVE doesn't create duplicates -- **Flag i18n fields for review** when English content changes -- Include i18n drift warnings in completion reports - -### Cross-Referencing Strategy -1. **Primary source**: Official website and documentation -2. **Verification source 1**: LinkedIn company page (for vendors/companies) -3. **Verification source 2**: Wikipedia (for well-known entities) -4. **Conflict resolution**: Official website > LinkedIn > Wikipedia -5. **Never store reference URLs**: Wikipedia and verification sources are for validation only - -## Troubleshooting - -### Playwright Navigation Fails -- Wait 2 seconds, retry navigation -- Check for redirects or authentication walls -- Try alternative URLs or WebSearch fallback - -### Element Not Found in Snapshot -- Take screenshot for debugging -- Search page text directly (not by element ref) -- Try WebSearch as alternative approach +Supported types: `cli`, `desktop`, `extension`, `ide`, `model`, `provider`, and `vendor`. -### Dynamic Content Doesn't Load -- Use `mcp__playwright__browser_wait_for` with specific text -- Scroll page to trigger lazy loading -- Click "Load More" or "Show All" buttons -- Fallback to WebSearch +## Required workflow -### Rate Limiting or Blocking -- Add delays between requests -- Use WebSearch as alternative data source -- Mark field as TODO if consistently blocked +1. Run the helper and read the referenced schema and type-specific workflow completely. +2. Inspect the target manifest, related vendor/provider manifests, `src/types/manifests.ts`, and nearby examples. +3. Research current facts. Prefer official documentation, model cards, release notes, repositories, and official marketplaces. Use third-party sources only for discovery or clearly attributed secondary evidence. +4. Record provenance using the fields required by the current schema. Every mutable or consequential fact must be traceable to a source. +5. Edit strict JSON only. JSON comments, placeholders, guessed values, and invented URLs are forbidden. If a required fact cannot be verified, stop and report it; use `null` only where the schema explicitly permits it. +6. Support all configured locales. English top-level copy and every locale entry must remain semantically aligned. +7. For updates, preserve curated relationships and translations unless evidence supports a change. Do not replace stronger evidence with weaker evidence or combine incompatible benchmark harnesses. +8. Review the diff, then run the validation commands printed by the helper. -## Files Created +## Merge policy -After running this skill, expect: +- Immutable identity fields such as `id` are preserved. +- Use `familyId` to group surfaces that official sources present as one product family; keep `relatedProducts` bidirectional for explicit navigation. +- Classify a standalone native app for delegating or supervising coding agents as `desktop`. Keep products whose primary first-party surface is an editor under `ide`; do not classify web or cloud-only services as desktop products. +- Mutable facts may change only with current, authoritative evidence. +- Object arrays are merged by their schema identity, not by raw object equality. +- Pricing, license, lifecycle, availability, model limits, install commands, and marketplace identifiers require explicit verification. +- Removing an existing value requires evidence that it is obsolete or incorrect. +- Update `lastVerifiedAt`, `verifiedBy`, `confidence`, and `sources` consistently with the actual review performed. -1. **Manifest file**: `manifests/s/.json` -2. **With TODO comments**: For failed field extractions -3. **Valid against schema**: `manifests/$schemas/.schema.json` -4. **Ready for validation**: Run `npm run test:validate` +The merge helper is advisory. Always inspect its proposed result before applying it. -## GitHub Stars Update +## GitHub stars -After creating or updating a manifest, you **MUST** update the `data/github-stars.json` file: +`data/github-stars.json` tracks `cli`, `desktop`, `extension`, `ide`, and selected `model` entries. Every CLI, desktop, extension, and IDE manifest must have a corresponding entry; use `null` when no official repository or trustworthy count is available. Providers and vendors are not tracked. -### Why Update github-stars.json? +## Validation -The `github-stars.json` file tracks GitHub star counts for all manifests. When you create or update a manifest: -- A new entry must be added for tracking -- The entry is initialized with `null` (stars not yet fetched) -- A scheduled job will automatically fetch the actual star count later - -### How to Update - -Use the `updateGithubStarsEntry()` function from `github-stars-updater.mjs`: - -```javascript -import { updateGithubStarsEntry } from './lib/github-stars-updater.mjs' - -// After creating a new manifest -const result = updateGithubStarsEntry('cli', 'cursor-cli', { isNew: true }) - -// After updating an existing manifest -const result = updateGithubStarsEntry('extension', 'Codex', { isNew: false }) -``` - -### CLI Usage - -You can also use the CLI directly: +At minimum run: ```bash -# Add new entry -node .Codex/skills/manifest-automation/scripts/lib/github-stars-updater.mjs add cli cursor-cli - -# Update existing entry -node .Codex/skills/manifest-automation/scripts/lib/github-stars-updater.mjs update extension Codex - -# Remove entry -node .Codex/skills/manifest-automation/scripts/lib/github-stars-updater.mjs remove ide windsurf -``` - -### What It Does - -The updater will: -1. Load the current `github-stars.json` file -2. Add or update the entry: `[""] = null` -3. Sort entries alphabetically within the category -4. Save the updated file back to disk - -### Example Result - -For a new CLI manifest `cursor-cli`: - -```json -{ - "clis": { - "Codex-cli": 43.5, - "cursor-cli": null, // ← newly added - "kode": 3.6 - } -} -``` - -### Integration with Workflow - -The `automate.mjs` script exports the necessary information for you to call the updater: - -```javascript -// After workflow completes and manifest is saved: -import { - updateGithubStarsEntry, - manifestType, - manifestName, - operationMode -} from './automate.mjs' - -updateGithubStarsEntry(manifestType, manifestName, { isNew: operationMode === 'create' }) -``` - -## Next Steps After Creation - -1. **Review manifest**: Check all extracted values for accuracy -2. **Fill TODOs**: Manually add fields that couldn't be auto-discovered -3. **Add translations**: Populate `i18n` object with localized content (zh-Hans, de, ko) -4. **Set verified**: Change `verified` to `true` if data is confirmed accurate -5. **Add related products**: Manually curate `relatedProducts` array -6. **Run validation**: Ensure schema compliance with `npm run test:validate` -7. **Commit changes**: Add manifest to git repository - -Note: Vendor manifest and github-stars.json are automatically handled during creation. - -## i18n Consistency Requirements - -**IMPORTANT**: When creating or updating manifests with i18n content: - -1. **Default Language (English)**: - - All English content should be in top-level fields (e.g., `description`, `name`) - - English should NEVER appear in the `i18n` object - -2. **Multi-Language Support**: - - Support at least 3 languages: English (default), Simplified Chinese (`zh-Hans`), German (`de`) - - NEVER hardcode only `'en' | 'zh-Hans'` - always include `de` and support extensibility - -3. **Content Synchronization**: - - All i18n translations must reflect the SAME content as the English default - - When updating default English fields, flag i18n fields for manual review - - Never auto-translate - mark translations as TODO if not manually provided - -4. **Validation Checks**: - - After UPDATE mode, verify i18n content hasn't become stale - - Flag i18n fields that may need updating when English content changes - - Include i18n consistency warnings in completion reports - -5. **Structure Example**: -```json -{ - "name": "Example Product", - "description": "This is the default English description", - "i18n": { - "zh-Hans": { - "name": "示例产品", - "description": "这是默认的英文描述" - }, - "de": { - "name": "Beispielprodukt", - "description": "Dies ist die englische Standardbeschreibung" - } - } -} +npm run changelog:generate +npm run generate +npm run test:validate +npm run validate:i18n +npm run data-health:check ``` -**In UPDATE mode**: -- If default English fields change, add comment: `// TODO: Update i18n translations to match new English content` -- Report i18n drift in completion report -- Preserve existing i18n content (PRESERVE category) but flag for review +Run `npm run check` and `npm run test:ci` before handing off a release-ready change. diff --git a/.agents/skills/manifest-automation/scripts/automate.mjs b/.agents/skills/manifest-automation/scripts/automate.mjs index affeb477..bb836e72 100755 --- a/.agents/skills/manifest-automation/scripts/automate.mjs +++ b/.agents/skills/manifest-automation/scripts/automate.mjs @@ -17,7 +17,6 @@ import { SCHEMA_PATHS, WORKFLOW_PATHS, } from './lib/config.mjs' -import { updateGithubStarsEntry } from './lib/github-stars-updater.mjs' const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) @@ -113,7 +112,7 @@ if (mode === 'update') { const workflowContent = fs.readFileSync(workflowFullPath, 'utf-8') // Output instructions -console.log('🤖 Manifest Automation Skill') +console.log('📋 Manifest Workflow Preparation') console.log('━'.repeat(60)) console.log('') console.log(`Mode: ${mode.toUpperCase()}`) @@ -134,11 +133,10 @@ if (mode === 'update') { console.log('You are updating an existing manifest. Follow these rules:\n') console.log('1. **Load existing manifest** from:', manifestPath) console.log('2. **Follow the workflow below** to extract fresh data') - console.log('3. **Apply smart merge** using merge-strategies.mjs:') - console.log(' - AUTO_UPDATE fields: Replace with new values') - console.log(' - PRESERVE fields: Keep existing (id, name, verified, i18n, relatedProducts)') - console.log(' - MERGE_ADDITIVE fields: Add new items to arrays/objects') - console.log(' - CONDITIONAL fields: Present both for review') + console.log('3. **Use smart merge only as an advisory diff**:') + console.log(' - Verify every mutable fact against a current authoritative source') + console.log(' - Preserve identity, relationships, and translations for manual review') + console.log(' - Merge arrays by schema identity and reject incompatible evidence') console.log('4. **Generate change report** showing what was updated/added/preserved') console.log('5. **Write updated manifest** back to the same path\n') console.log('━'.repeat(60)) @@ -148,44 +146,35 @@ if (mode === 'update') { console.log(workflowContent) console.log('') console.log('━'.repeat(60)) -console.log('🎯 Retry & Error Handling Rules') +console.log('🎯 Evidence and Error Handling Rules') console.log('━'.repeat(60)) console.log('') -console.log(`• Maximum ${RETRY_CONFIG.maxAttempts} attempts per field`) -console.log(`• After ${RETRY_CONFIG.maxAttempts} failures: Add TODO comment`) -console.log('• Use Playwright MCP for dynamic content') -console.log('• Use WebSearch for discovery (GitHub, social, platforms)') -console.log('• Save draft even with missing fields') -console.log('• Generate completion report at end\n') - -if (mode === 'create') { - console.log('TODO Comment Format:') - console.log( - ' "discord": null, // TODO: Could not auto-discover after 3 attempts. Not found in footer or search results.\n' - ) -} else { +console.log(`• Make at most ${RETRY_CONFIG.maxAttempts} materially different attempts per field`) +console.log('• Prefer official documentation, repositories, model cards, and marketplaces') +console.log('• Do not guess values or put comments/placeholders into JSON') +console.log('• Report unresolved fields separately; stop if a required field cannot be verified') +console.log('• Record source provenance and verification metadata required by the schema\n') + +if (mode === 'update') { console.log('Change Tracking:') console.log(' Track all changes using merge-strategies.mjs') console.log(' Generate report with updated/added/preserved/needsReview fields\n') } console.log('━'.repeat(60)) -console.log('📝 Post-Creation/Update Steps') +console.log('📝 Required Validation') console.log('━'.repeat(60)) console.log('') -console.log('After creating or updating the manifest:') -console.log('1. Save the manifest file') -console.log('2. Update github-stars.json automatically:') -console.log(` - Will add entry: ${type}s["${name}"] = null`) -console.log(' - Stars will be fetched in next scheduled update') -console.log('3. Generate completion report') +console.log('After editing and reviewing the manifest:') +console.log('1. npm run changelog:generate') +console.log('2. npm run generate') +console.log('3. npm run test:validate') +console.log('4. npm run validate:i18n') +console.log('5. npm run data-health:check') console.log('') console.log('━'.repeat(60)) console.log('') -console.log('✅ Ready! Execute workflow above.') -console.log('') -console.log('⚠️ IMPORTANT: After saving the manifest, remember to update github-stars.json') +console.log('✅ Ready. The helper prepared instructions; it did not browse or edit files.') console.log('') -// Export helper function for Claude to use in manifest-automation skill -export { updateGithubStarsEntry, type as manifestType, name as manifestName, mode as operationMode } +export { type as manifestType, name as manifestName, mode as operationMode } diff --git a/.agents/skills/manifest-automation/scripts/lib/config.mjs b/.agents/skills/manifest-automation/scripts/lib/config.mjs index 6f58a4ef..7c218405 100644 --- a/.agents/skills/manifest-automation/scripts/lib/config.mjs +++ b/.agents/skills/manifest-automation/scripts/lib/config.mjs @@ -5,11 +5,12 @@ */ // Supported manifest types -export const MANIFEST_TYPES = ['cli', 'extension', 'ide', 'model', 'provider', 'vendor'] +export const MANIFEST_TYPES = ['cli', 'desktop', 'extension', 'ide', 'model', 'provider', 'vendor'] // Schema path mapping export const SCHEMA_PATHS = { cli: 'manifests/$schemas/cli.schema.json', + desktop: 'manifests/$schemas/desktop.schema.json', extension: 'manifests/$schemas/extension.schema.json', ide: 'manifests/$schemas/ide.schema.json', model: 'manifests/$schemas/model.schema.json', @@ -20,6 +21,7 @@ export const SCHEMA_PATHS = { // Manifest output path mapping export const MANIFEST_PATHS = { cli: name => `manifests/clis/${name}.json`, + desktop: name => `manifests/desktops/${name}.json`, extension: name => `manifests/extensions/${name}.json`, ide: name => `manifests/ides/${name}.json`, model: name => `manifests/models/${name}.json`, @@ -29,12 +31,13 @@ export const MANIFEST_PATHS = { // Workflow file mapping export const WORKFLOW_PATHS = { - cli: '.claude/skills/manifest-automation/scripts/workflows/cli-workflow.md', - extension: '.claude/skills/manifest-automation/scripts/workflows/extension-workflow.md', - ide: '.claude/skills/manifest-automation/scripts/workflows/ide-workflow.md', - model: '.claude/skills/manifest-automation/scripts/workflows/model-workflow.md', - provider: '.claude/skills/manifest-automation/scripts/workflows/provider-workflow.md', - vendor: '.claude/skills/manifest-automation/scripts/workflows/vendor-workflow.md', + cli: '.agents/skills/manifest-automation/scripts/workflows/cli-workflow.md', + desktop: '.agents/skills/manifest-automation/scripts/workflows/desktop-workflow.md', + extension: '.agents/skills/manifest-automation/scripts/workflows/extension-workflow.md', + ide: '.agents/skills/manifest-automation/scripts/workflows/ide-workflow.md', + model: '.agents/skills/manifest-automation/scripts/workflows/model-workflow.md', + provider: '.agents/skills/manifest-automation/scripts/workflows/provider-workflow.md', + vendor: '.agents/skills/manifest-automation/scripts/workflows/vendor-workflow.md', } // Retry configuration @@ -45,10 +48,9 @@ export const RETRY_CONFIG = { // Field categories for smart merge export const FIELD_CATEGORIES = { - // Always update from official source + // May update only after verification against a current authoritative source. AUTO_UPDATE: [ 'latestVersion', - 'description', 'websiteUrl', 'docsUrl', 'resourceUrls.changelog', @@ -59,18 +61,28 @@ export const FIELD_CATEGORIES = { 'maxOutput', ], - // Never update (user-curated) - PRESERVE: ['id', 'name', 'verified', 'i18n', 'relatedProducts'], + // Preserve identity, relationships, and localized copy for manual review. + PRESERVE: ['id', 'familyId', 'name', 'translations', 'relatedProducts', 'vendor', 'provider'], // Smart merge: add new, keep existing - MERGE_ADDITIVE: ['communityUrls', 'platformUrls', 'supportedIdes', 'platforms', 'pricing'], + MERGE_ADDITIVE: ['communityUrls', 'platformUrls', 'supportedIdes', 'platforms'], // Present both for Claude to decide - CONDITIONAL: ['license', 'vendor'], + CONDITIONAL: [ + 'description', + 'license', + 'pricing', + 'releaseDate', + 'lifecycle', + 'sources', + 'lastVerifiedAt', + 'verifiedBy', + 'confidence', + ], } // Platform OS enum values -export const PLATFORM_OS = ['macos', 'windows', 'linux', 'web'] +export const PLATFORM_OS = ['macOS', 'Windows', 'Linux'] // IDE enum values for extensions export const IDE_TYPES = ['vscode', 'cursor', 'windsurf', 'trae', 'zed', 'jetbrains'] diff --git a/.agents/skills/manifest-automation/scripts/lib/field-tracker.mjs b/.agents/skills/manifest-automation/scripts/lib/field-tracker.mjs index 07ae664f..a9e10ae4 100644 --- a/.agents/skills/manifest-automation/scripts/lib/field-tracker.mjs +++ b/.agents/skills/manifest-automation/scripts/lib/field-tracker.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * Field Tracker - Tracks extraction attempts and generates TODO comments + * Field Tracker - Tracks evidence-gathering attempts and unresolved fields. */ import { RETRY_CONFIG } from './config.mjs' @@ -79,11 +79,11 @@ export class FieldTracker { } /** - * Generate TODO comment for a failed field + * Return a report-safe note for a failed field. * @param {string} fieldPath * @returns {string} */ - generateTODO(fieldPath) { + generateUnresolvedNote(fieldPath) { const field = this.fields.get(fieldPath) if (!field || field.status !== 'failed') { return '' @@ -92,7 +92,7 @@ export class FieldTracker { const attempts = field.attempts || this.maxAttempts const reason = field.reason || 'Not found' - return `// TODO: Could not auto-discover after ${attempts} attempts. ${reason}` + return `Unresolved after ${attempts} attempts: ${reason}` } /** @@ -159,7 +159,7 @@ export class FieldTracker { } if (report.failed > 0) { - output += `\n❌ Failed Extraction (${report.failed} field${report.failed > 1 ? 's' : ''}, marked with TODO):\n` + output += `\n❌ Unresolved Fields (${report.failed} field${report.failed > 1 ? 's' : ''}):\n` report.fields.failed.forEach((field, index) => { output += ` ${index + 1}. ${field.path} (${field.attempts} attempts)\n` output += ` Reason: ${field.reason}\n` @@ -171,8 +171,9 @@ export class FieldTracker { output += `1. Review manifest file: ${manifestPath}\n` if (report.failed > 0) { - output += '2. Manually fill TODO-marked fields if information available\n' - output += '3. Update verified field once data confirmed accurate\n' + output += + '2. Resolve required fields from authoritative sources; do not guess or add JSON comments\n' + output += '3. Update provenance and verification metadata\n' output += '4. Run validation: npm run test:validate\n' } else { output += '2. Update verified field if data confirmed accurate\n' diff --git a/.agents/skills/manifest-automation/scripts/lib/github-stars-updater.mjs b/.agents/skills/manifest-automation/scripts/lib/github-stars-updater.mjs index de70c027..f5b62407 100644 --- a/.agents/skills/manifest-automation/scripts/lib/github-stars-updater.mjs +++ b/.agents/skills/manifest-automation/scripts/lib/github-stars-updater.mjs @@ -52,8 +52,8 @@ export function saveGithubStars(data) { } /** - * Get the category name (plural form) from manifest type - * @param {string} type - Manifest type (cli, extension, ide, model, provider, vendor) + * Get the tracked category name from manifest type. + * @param {string} type - Manifest type (cli, extension, ide, model) * @returns {string} Category name for github-stars.json */ function getCategoryName(type) { @@ -62,11 +62,9 @@ function getCategoryName(type) { extension: 'extensions', ide: 'ides', model: 'models', - provider: 'providers', - vendor: 'vendors', } - return mapping[type] || `${type}s` + return mapping[type] || null } /** @@ -85,9 +83,11 @@ export function updateGithubStarsEntry(type, id, options = {}) { const githubStars = loadGithubStars() const category = getCategoryName(type) - // Ensure category exists - if (!githubStars[category]) { - githubStars[category] = {} + if (!category || !Object.hasOwn(githubStars, category)) { + return { + status: 'skipped', + message: `Manifest type "${type}" is not tracked by data/github-stars.json`, + } } // Check if entry already exists @@ -102,8 +102,8 @@ export function updateGithubStarsEntry(type, id, options = {}) { if (!isNew && !exists) { return { - status: 'warning', - message: `Entry "${id}" does not exist in github-stars.json under "${category}", adding as new`, + status: 'skipped', + message: `Entry "${id}" does not exist in github-stars.json under "${category}"; no change made. Verify the official repository, then use the add command.`, } } @@ -148,6 +148,13 @@ export function removeGithubStarsEntry(type, id) { const githubStars = loadGithubStars() const category = getCategoryName(type) + if (!category || !Object.hasOwn(githubStars, category)) { + return { + status: 'skipped', + message: `Manifest type "${type}" is not tracked by data/github-stars.json`, + } + } + if (!githubStars[category] || !(id in githubStars[category])) { return { status: 'skipped', diff --git a/.agents/skills/manifest-automation/scripts/workflows/cli-workflow.md b/.agents/skills/manifest-automation/scripts/workflows/cli-workflow.md index b85f5b28..ab975dbc 100644 --- a/.agents/skills/manifest-automation/scripts/workflows/cli-workflow.md +++ b/.agents/skills/manifest-automation/scripts/workflows/cli-workflow.md @@ -1,301 +1,39 @@ -# CLI Manifest Workflow +# CLI manifest workflow -This workflow guides you through creating or updating a CLI manifest using advanced web automation. +## Read before editing -## Required Fields (from cli.schema.json) +- `manifests/$schemas/cli.schema.json` and every referenced schema +- `src/types/manifests.ts` +- the target manifest and two current CLI examples +- the related vendor manifest -**Entity fields:** -- `id`, `name`, `description`, `i18n`, `websiteUrl`, `docsUrl`, `verified` +The schema is authoritative. Do not copy an old manifest's omissions into a new record. -**Product fields:** -- `vendor`, `latestVersion`, `githubUrl`, `license`, `pricing`, `resourceUrls`, `communityUrls`, `relatedProducts` +## Evidence checklist -**App fields:** -- `platforms` (array of {os, installPath, installCommand, launchCommand}) +Use official sources for the product name, description, website, documentation, stable version, license, pricing, downloads, changelog, install commands, launch commands, and supported operating systems. Prefer release pages or package registries owned by the vendor over blog posts. Verify a GitHub repository belongs to the product before recording it. -## Phase 1: Core Information (Playwright) +For every platform entry: -**Goal**: Extract basic information from the main website +- use only schema-supported OS values; +- copy install commands exactly from current official instructions; +- distinguish a package installation command from a launch command; +- use `null` only when the schema permits it and the value is genuinely unavailable or inapplicable. -1. Navigate to the provided website URL using `mcp__playwright__browser_navigate` +## Create or update -2. Take a page snapshot using `mcp__playwright__browser_snapshot` +1. Keep `id` stable and ensure it matches the filename. +2. Keep `vendor` aligned with an existing vendor ID; create a vendor separately if needed. +3. Summarize the official description in no more than the schema limit; do not use marketing claims as facts. +4. Use a stable release for `latestVersion`, not a beta unless the product has no stable channel and the distinction is documented. +5. Use an SPDX identifier or the literal `Proprietary` for `license`. +6. Record current pricing units and currencies exactly. Do not infer annual/monthly conversions. +7. Preserve curated `relatedProducts` unless relationships were explicitly verified. +8. Add or refresh `sources`, `lastVerifiedAt`, `verifiedBy`, and `confidence` to match the evidence actually reviewed. +9. Keep translations complete for every locale declared in `src/i18n/config.ts` and update them together when English meaning changes. -3. Extract from the homepage: - - **name**: Official product name (from header, hero, or title) - - **description**: Max 200 chars from hero section or tagline - - **vendor**: Company/organization name (from footer or about) +Do not put TODOs, comments, placeholder URLs, or guessed paths into JSON. Report unresolved facts outside the manifest. -4. Find documentation link: - - Look for "Docs", "Documentation", "API", "Guides" in navigation - - Extract **docsUrl** (should start with https://) - - Common patterns: `/docs`, `/documentation`, `docs.example.com` +## Validation -5. Track attempt #1 for these fields using FieldTracker - -## Phase 2: Installation Discovery (Playwright + WebSearch) - -**Goal**: Find platform-specific installation commands - -1. **Navigate to installation page**: - - Look for "Install", "Download", "Get Started" links - - Common URLs: `/install`, `/download`, `/getting-started`, `/docs/installation` - - Use Playwright to navigate and take snapshot - -2. **Extract install commands from page**: - - Look for code blocks with install commands - - Detect OS tabs or sections (macOS, Windows, Linux) - - Extract for each platform: - - **os**: "macos", "windows", "linux", "web" - - **installCommand**: Full command (e.g., `brew install cursor-cli`) - - **installPath**: Installation directory (if mentioned) - - **launchCommand**: How to run the CLI (e.g., `cursor-cli`) - -3. **Common install patterns**: - - **macOS**: `brew install `, `curl | sh` - - **Windows**: `winget install `, `choco install `, `scoop install ` - - **Linux**: `apt install `, `npm install -g `, `cargo install ` - - **Cross-platform**: `npm install -g `, `pip install ` - -4. **Fallback (if not found - attempt #2)**: - - Use WebSearch: `"homebrew "` - - Use WebSearch: `" install command"` - - Check brew.sh or npmjs.com directly - - Navigate to GitHub README (see Phase 3) - -5. **Final fallback (attempt #3)**: - - Check package manager sites: - - npm: `https://www.npmjs.com/package/` - - PyPI: `https://pypi.org/project//` - - Homebrew: `https://formulae.brew.sh/formula/` - - Mark as TODO if still missing - -## Phase 3: Version & GitHub (WebSearch + Playwright) - -**Goal**: Find GitHub repository, latest version, and license - -1. **Find GitHub repository**: - - Use WebSearch: `" github repository"` - - Look for links in website footer - - Common patterns: `github.com//` - - Validate format: `https://github.com//` - -2. **Navigate to GitHub repository** (Playwright): - - Use `mcp__playwright__browser_navigate` to GitHub URL - - Take snapshot - -3. **Extract from GitHub**: - - **latestVersion**: From releases page or tags - - Navigate to `/releases` or look for "Latest release" section - - Extract version tag (e.g., "v1.2.0", "1.2.0") - - **license**: From repository header (top right) - - Look for license badge or "License" section - - Extract SPDX identifier (MIT, Apache-2.0, GPL-3.0, etc.) - - If proprietary/unclear, mark as "Proprietary" - - **resourceUrls.issue**: Issues URL - - Format: `https://github.com///issues` - -4. **Fallback strategies (attempts 2-3)**: - - Check alternative org names or repo names - - Look for GitLab, Gitea, or other git hosting - - Check website source code comments for repo link - - Mark as TODO if unavailable - -## Phase 4: Pricing Discovery (Playwright) - -**Goal**: Extract pricing tiers and details - -1. **Navigate to pricing page**: - - Look for "Pricing", "Plans", "Buy" links in navigation - - Common URLs: `/pricing`, `/plans`, `/subscribe`, `/buy` - - Use Playwright to navigate - -2. **Extract pricing tiers**: - - Look for pricing cards, tables, or sections - - For each tier extract: - - **name**: Tier name (e.g., "Free", "Pro", "Enterprise") - - **value**: Price as number (0 for free) - - **currency**: "USD" (or appropriate currency code) - - **per**: Billing period ("month", "year", "once", "user") - - **category**: "Individual", "Team", "Enterprise" - -3. **Handle dynamic pricing**: - - If pricing calculator present: - - Use `mcp__playwright__browser_fill_form` or `mcp__playwright__browser_click` to interact - - Extract calculated prices - - If multiple currencies available: - - Prefer USD for consistency - -4. **For free/open-source tools**: - - Create single tier: - ```json - [{ - "name": "Free", - "value": 0, - "currency": "USD", - "per": "forever", - "category": "Individual" - }] - ``` - -5. **Fallback strategies (attempts 2-3)**: - - Check footer links for pricing - - Search documentation for pricing mentions - - Look for "Contact Sales" (mark Enterprise pricing as TODO) - - Mark as TODO if behind contact form - -## Phase 5: Resource URLs (Playwright + WebSearch) - -**Goal**: Find download, changelog, and pricing URLs - -1. **Download URL** (`resourceUrls.download`): - - Look for "Download", "Releases" page - - Common patterns: `/download`, `/releases`, GitHub releases page - - Should be direct download or download page URL - -2. **Changelog URL** (`resourceUrls.changelog`): - - Look for "Changelog", "Release Notes", "What's New" - - Common patterns: `/changelog`, `/releases`, `/blog/releases`, `CHANGELOG.md` - - GitHub: `https://github.com///releases` - -3. **Pricing URL** (`resourceUrls.pricing`): - - From Phase 4, the pricing page URL - - Set to null if free/open-source with no pricing page - -4. **MCP URL** (`resourceUrls.mcp`): - - Only if CLI is an MCP server - - Look for "MCP", "Model Context Protocol" in docs - - Link to MCP documentation or configuration - - Set to null if not MCP-related - -## Phase 6: Community URLs (WebSearch + Playwright) - -**Goal**: Find official social media and community links - -1. **Check website footer** (Playwright): - - Take snapshot of page - - Look for social media icons/links in footer - - Extract URLs for: LinkedIn, Twitter/X, GitHub, YouTube, Discord, Reddit, Blog - -2. **Use WebSearch for missing platforms**: - - **LinkedIn**: Search `" official linkedin"` - - Validate pattern: `linkedin.com/company/` or `linkedin.com/in/` - - **Twitter/X**: Search `" official twitter"` or `" official x"` - - Validate pattern: `twitter.com/` or `x.com/` - - **GitHub**: From Phase 3 (organization URL) - - Pattern: `github.com/` - - **YouTube**: Search `" official youtube"` - - Validate pattern: `youtube.com/@`, `youtube.com/c/`, `youtube.com/channel/` - - **Discord**: Search `" official discord"` - - Validate pattern: `discord.gg/` or `discord.com/invite/` - - **Reddit**: Search `" subreddit"` - - Validate pattern: `reddit.com/r/` - - **Blog**: Look for `/blog` on website or `blog.example.com` - -3. **Validation**: - - Verify URLs are official (not fan-made) - - Check account names match product/vendor - - Set to null if not found after 3 attempts - -4. **Set communityUrls**: - ```json - { - "linkedin": "", - "twitter": "", - "github": "", - "youtube": "", - "discord": "", - "reddit": "", - "blog": "" - } - ``` - -## Phase 7: Generate Manifest - -**Goal**: Create complete manifest JSON - -1. **Compile all extracted data** into manifest structure: - -```json -{ - "$schema": "../$schemas/cli.schema.json", - "id": "", - "name": "", - "description": "", - "i18n": {}, - "websiteUrl": "", - "docsUrl": "", - "verified": false, - "vendor": "", - "latestVersion": "", - "githubUrl": "", - "license": "", - "pricing": [...], - "resourceUrls": { - "download": "", - "changelog": "", - "pricing": "", - "mcp": "", - "issue": "" - }, - "communityUrls": {...}, - "relatedProducts": [], - "platforms": [ - { - "os": "macos", - "installPath": "", - "installCommand": "", - "launchCommand": "" - }, - ... - ] -} -``` - -2. **Add TODO comments** for failed fields (using FieldTracker): - - Generate TODO comment for each field with 3 failed attempts - - Include reason for failure - -3. **Write manifest file** to output path - -4. **Generate completion report** using FieldTracker: - - Show success/failure counts - - List TODO fields - - Provide next steps - -## Phase 8: Validation - -**Goal**: Ensure manifest is valid - -1. **Run schema validation**: - ```bash - npm run test:validate - ``` - -2. **Fix any validation errors**: - - Required fields missing - - Invalid URL formats - - Invalid enum values (os, pricing categories) - -3. **Output final report** with: - - Validation status - - Fields needing manual review - - Completion percentage - -## Retry Strategy Summary - -| Field | Attempt 1 | Attempt 2 | Attempt 3 | -|-------|-----------|-----------|-----------| -| Install Commands | Docs page | WebSearch packages | Package manager sites | -| GitHub URL | WebSearch | Footer links | Source code comments | -| Version | GitHub releases | Download page | Changelog | -| Pricing | Pricing page | Footer/header nav | Docs mention | -| Community URLs | Footer | WebSearch official | Common patterns | - -## Common Pitfalls - -- Don't extract descriptions from meta tags - use visible hero/tagline text -- Don't guess version numbers - extract from authoritative source -- Don't assume install commands - verify from official docs -- Don't include unofficial social media accounts -- Don't create pricing tiers without explicit price information +Run the validation sequence in the parent skill. If install commands changed, also inspect the rendered diff for shell quoting and platform mix-ups. diff --git a/.agents/skills/manifest-automation/scripts/workflows/desktop-workflow.md b/.agents/skills/manifest-automation/scripts/workflows/desktop-workflow.md new file mode 100644 index 00000000..e8bc54d9 --- /dev/null +++ b/.agents/skills/manifest-automation/scripts/workflows/desktop-workflow.md @@ -0,0 +1,30 @@ +# Desktop manifest workflow + +## Read before editing + +- `manifests/$schemas/desktop.schema.json` and referenced schemas +- `src/types/manifests.ts` +- the target manifest and two current desktop examples +- related CLI, extension, IDE, and vendor manifests + +## Classification boundary + +Use `desktop` for a standalone native application whose primary workflow is delegating, coordinating, or reviewing coding-agent work. A product may share one `familyId` with CLI or extension surfaces. Keep editor-first products under `ide`, and exclude browser-only, hosted, and cloud execution products. + +## Evidence checklist + +Use the official product/download page, documentation, release notes, repository, pricing page, and license. Verify that the native desktop build actually exists for each recorded OS. Do not infer a Windows or Linux build from a generic product page. + +## Create or update + +1. Keep filename, `id`, official name, vendor, and `familyId` aligned. +2. Record only schema-supported operating systems and documented install or launch commands. +3. Do not invent application paths; use `null` when an optional value is undocumented. +4. Use the latest stable version when published; otherwise use the vendor's documented release label without inventing a number. +5. Copy pricing and license facts without conversion or extrapolation. +6. Add bidirectional `relatedProducts` links for verified CLI, extension, IDE, or desktop siblings. +7. Keep every configured locale complete and semantically aligned. + +## Validation + +Run the parent skill's validation sequence. Confirm that GitHub stars, generated indexes, navigation counts, vendor pages, search, sitemap, and related-product links all include the new desktop manifest. diff --git a/.agents/skills/manifest-automation/scripts/workflows/extension-workflow.md b/.agents/skills/manifest-automation/scripts/workflows/extension-workflow.md index 91d256b7..211bc877 100644 --- a/.agents/skills/manifest-automation/scripts/workflows/extension-workflow.md +++ b/.agents/skills/manifest-automation/scripts/workflows/extension-workflow.md @@ -1,188 +1,37 @@ -# Extension Manifest Workflow +# Extension manifest workflow -This workflow guides you through creating or updating an Extension manifest with focus on IDE marketplace integration. +## Read before editing -## Required Fields (from extension.schema.json) +- `manifests/$schemas/extension.schema.json` and referenced schemas +- `src/types/manifests.ts` +- the target manifest and two current extension examples +- the related vendor and IDE manifests -**Entity + Product fields**: Same as CLI workflow +## Evidence checklist -**Extension-specific fields:** -- `supportedIdes` (array of {ideId, marketplaceUrl, installUri}) +Use the publisher's official site/docs plus the canonical marketplace listing. Verify the publisher ID, extension ID, stable version, supported IDEs, marketplace URL, install URI, license, pricing, and repository ownership. -## Phase 1: Core Information +Marketplace compatibility is evidence-specific: -Follow **Phase 1** from CLI workflow to extract: -- `name`, `description`, `vendor`, `docsUrl` +- A VS Code Marketplace listing does not prove a dedicated Cursor, Windsurf, or Trae listing. +- Record only URL prefixes and install URI schemes accepted by the schema. +- Use `null` where the schema allows it when a marketplace or one-click URI does not exist. +- Do not manufacture install URIs from a display name; use the exact publisher/extension identifier. -## Phase 2: Marketplace Discovery (WebSearch + Playwright) +## Create or update -**Goal**: Find marketplace listings and extract IDs +1. Keep filename, `id`, vendor ID, and official name aligned. +2. Use a current stable marketplace version for `latestVersion`. +3. Treat marketplace descriptions and install counts as mutable; do not copy unsupported claims into the concise description. +4. Use an SPDX identifier or `Proprietary` for `license`. +5. Keep pricing units exact and do not infer bundled-product entitlements. +6. Merge `supportedIdes` by `ideId`; review changed marketplace URLs rather than silently appending duplicates. +7. Preserve curated `relatedProducts` unless verified. +8. Add or refresh provenance fields to reflect the sources reviewed. +9. Keep translations complete and semantically aligned across every locale declared in `src/i18n/config.ts`. -### VS Code Marketplace +Strict JSON only: no comments, TODOs, placeholder URLs, or guessed compatibility. -1. **Search for extension**: - - Use WebSearch: `"vscode marketplace "` - - Or navigate directly if URL known +## Validation -2. **Navigate to marketplace** (Playwright): - - URL pattern: `https://marketplace.visualstudio.com/items?itemName=.` - - Take snapshot - -3. **Extract information**: - - **Publisher name**: From page header - - **Extension ID**: From URL (format: `publisher.extensionId`) - - **Latest version**: From marketplace page - - **marketplaceUrl**: Current URL - - **installUri**: Construct as `vscode:extension/.` - -4. **Also create for Cursor** (compatible with VS Code extensions): - - Same marketplaceUrl - - **installUri**: `cursor:extension/.` - -### JetBrains Plugins - -1. **Search**: `"jetbrains plugins "` - -2. **Navigate to plugins.jetbrains.com**: - - Extract plugin ID from URL - - Extract marketplace URL - - **installUri**: `jetbrains://idea/plugin/` (if available) - -3. **Add to supportedIdes** with ideId: `jetbrains` - -### Open VSX (for other IDEs) - -1. **Search**: `"open vsx "` - -2. **Check compatibility with**: - - Windsurf (ideId: `windsurf`) - - Trae (ideId: `trae`) - - Zed (ideId: `zed`) - -3. **Extract**: - - marketplaceUrl from Open VSX - - Construct appropriate installUri if supported - -### Retry Strategy - -- **Attempt 1**: Direct marketplace navigation -- **Attempt 2**: WebSearch with alternative names -- **Attempt 3**: Check extension website for marketplace links -- **TODO**: Mark as missing if not found - -## Phase 3: Supported IDEs Detection - -**Goal**: Build complete supportedIdes array - -1. **Check marketplace compatibility**: - - VS Code Marketplace: "Compatible with VS Code X.X.X" - - Look for supported IDE versions - -2. **Map to enum values**: - - VS Code → `vscode` - - Cursor → `cursor` (if VS Code compatible) - - Windsurf → `windsurf` - - Trae → `trae` - - Zed → `zed` - - JetBrains → `jetbrains` - -3. **Build supportedIdes array**: -```json -{ - "supportedIdes": [ - { - "ideId": "vscode", - "marketplaceUrl": "https://marketplace.visualstudio.com/items?itemName=...", - "installUri": "vscode:extension/..." - }, - { - "ideId": "cursor", - "marketplaceUrl": "https://marketplace.visualstudio.com/items?itemName=...", - "installUri": "cursor:extension/..." - }, - { - "ideId": "jetbrains", - "marketplaceUrl": "https://plugins.jetbrains.com/plugin/...", - "installUri": null - } - ] -} -``` - -## Phase 4: GitHub & Version - -Follow **Phase 3** from CLI workflow: -- Find GitHub repository -- Extract latest version (from releases or marketplace) -- Extract license -- Get issue tracker URL - -## Phase 5: Pricing - -Follow **Phase 4** from CLI workflow: -- Most extensions are free -- Some have paid tiers (Pro, Enterprise) -- Extract from extension website or marketplace - -## Phase 6: Resource URLs - -1. **Download**: Marketplace URL or GitHub releases -2. **Changelog**: Look for CHANGELOG.md or releases page -3. **Pricing**: Extension pricing page (if paid) -4. **MCP**: null (not applicable for extensions) -5. **Issue**: GitHub issues URL - -## Phase 7: Community URLs - -Follow **Phase 6** from CLI workflow: -- Check website footer -- Use WebSearch for social platforms -- Validate official accounts - -## Phase 8: Generate Manifest - -```json -{ - "$schema": "../$schemas/extension.schema.json", - "id": "", - "name": "", - "description": "", - "i18n": {}, - "websiteUrl": "", - "docsUrl": "", - "verified": false, - "vendor": "", - "latestVersion": "<1.2.0>", - "githubUrl": "", - "license": "", - "pricing": [...], - "resourceUrls": {...}, - "communityUrls": {...}, - "relatedProducts": [], - "supportedIdes": [...] -} -``` - -## Phase 9: Validation - -Run validation and fix errors: -```bash -npm run test:validate -``` - -## Common Marketplace Patterns - -| IDE | Marketplace URL Pattern | Install URI Pattern | -|-----|------------------------|---------------------| -| VS Code | `marketplace.visualstudio.com/items?itemName=.` | `vscode:extension/.` | -| Cursor | Same as VS Code | `cursor:extension/.` | -| JetBrains | `plugins.jetbrains.com/plugin/` | `jetbrains://idea/plugin/` | -| Open VSX | `open-vsx.org/extension//` | Varies by IDE | - -## Key Differences from CLI - -- Focus on marketplace URLs instead of install commands -- No `platforms` field (extensions are IDE-specific, not OS-specific) -- `supportedIdes` is the critical differentiator -- Version often comes from marketplace, not just GitHub -- Publisher name is often the vendor +Run the parent skill's validation sequence and verify every marketplace URL and install URI against the schema patterns. diff --git a/.agents/skills/manifest-automation/scripts/workflows/ide-workflow.md b/.agents/skills/manifest-automation/scripts/workflows/ide-workflow.md index e37cc3dc..960cf958 100644 --- a/.agents/skills/manifest-automation/scripts/workflows/ide-workflow.md +++ b/.agents/skills/manifest-automation/scripts/workflows/ide-workflow.md @@ -1,126 +1,36 @@ -# IDE Manifest Workflow +# IDE manifest workflow -This workflow guides you through creating or updating an IDE manifest with focus on GUI installation and downloads. +## Read before editing -## Required Fields (from ide.schema.json) +- `manifests/$schemas/ide.schema.json` and referenced schemas +- `src/types/manifests.ts` +- the target manifest and two current IDE examples +- the related vendor manifest -**Entity + Product fields**: Same as CLI +## Evidence checklist -**App fields:** -- `platforms` (array of {os, installPath, installCommand, launchCommand}) +Use official download pages, system requirements, release notes, documentation, pricing, and licensing information. Verify the stable version independently for each release channel when channels differ. -## Workflow +For platform data: -Follow **CLI workflow** with these IDE-specific adjustments: +- record only OS values supported by the schema; +- distinguish an installer/download URL from an install command; +- do not invent default filesystem paths; +- record CLI launch commands only when documented; +- represent unavailable optional values as schema-valid `null`. -## Phase 1-2: Core Info & Installation +## Create or update -**Differences from CLI:** +1. Keep filename, `id`, official name, and vendor ID aligned. +2. Use the latest stable version, not an insider/nightly build unless explicitly represented as such. +3. Use an SPDX identifier or `Proprietary` for the license. +4. Copy pricing values and billing units without conversion or extrapolation. +5. Preserve curated product relationships unless verified. +6. Add or refresh source and verification metadata based on current evidence. +7. Keep translations complete for every locale declared in `src/i18n/config.ts` and update them together when English meaning changes. -1. **Focus on GUI installation** rather than command-line: - - Download page for installer files (.dmg, .exe, .deb, .AppImage) - - Installation wizards and GUI installers - - App Store distributions (Mac App Store, Microsoft Store) +Never store JSON comments, TODOs, guessed paths, or placeholder links. -2. **Installation patterns**: +## Validation - **macOS**: - - DMG file download - - installPath: `/Applications/.app` - - installCommand: Download and drag to Applications (or `brew install --cask `) - - launchCommand: Application name or `open -a ""` - - **Windows**: - - EXE or MSI installer - - installPath: `C:\\Program Files\\` or `%LOCALAPPDATA%\\` - - installCommand: Download and run installer (or `winget install `) - - launchCommand: Start menu or executable path - - **Linux**: - - .deb, .rpm, .AppImage, or Snap package - - installPath: `/usr/bin/` or `/opt/` - - installCommand: `sudo apt install `, `snap install `, etc. - - launchCommand: `` or desktop entry - -3. **Download URLs** (`resourceUrls.download`): - - Direct links to installer files - - Download page with OS detection - - Release pages with multiple OS versions - -## Phase 3-7: Same as CLI - -- GitHub discovery -- Version extraction -- Pricing (may include licenses for teams) -- Resource URLs -- Community URLs - -## Phase 8: Generate Manifest - -```json -{ - "$schema": "../$schemas/ide.schema.json", - "id": "", - "name": "", - "description": "", - "i18n": {}, - "websiteUrl": "", - "docsUrl": "", - "verified": false, - "vendor": "", - "latestVersion": "<1.2.0>", - "githubUrl": "", - "license": "", - "pricing": [...], - "resourceUrls": { - "download": "", - "changelog": "", - "pricing": "", - "mcp": "", - "issue": "" - }, - "communityUrls": {...}, - "relatedProducts": [], - "platforms": [ - { - "os": "macos", - "installPath": "/Applications/Name.app", - "installCommand": "brew install --cask name", - "launchCommand": "open -a \"Name\"" - }, - { - "os": "windows", - "installPath": "%LOCALAPPDATA%\\Name", - "installCommand": "winget install Name.Name", - "launchCommand": "Name" - }, - { - "os": "linux", - "installPath": "/usr/bin/name", - "installCommand": "sudo snap install name --classic", - "launchCommand": "name" - } - ] -} -``` - -## Common IDE Install Patterns - -| OS | Package Manager | Command | Install Path | -|----|----------------|---------|--------------| -| macOS | Homebrew Cask | `brew install --cask ` | `/Applications/.app` | -| macOS | DMG | Download → Drag to Applications | `/Applications/.app` | -| Windows | Winget | `winget install ` | `%LOCALAPPDATA%\` or `C:\Program Files\` | -| Windows | Installer | Download .exe → Run | `C:\Program Files\` | -| Linux | Snap | `snap install --classic` | `/snap/` | -| Linux | APT | `apt install ` | `/usr/bin/` | -| Linux | Flatpak | `flatpak install ` | `/var/lib/flatpak` | - -## Key Differences from CLI - -- Emphasize GUI installation over command-line -- Include download page URLs for installers -- Launch commands are often just the app name or GUI launcher -- May include App Store links -- Installation paths are app bundles (.app) on macOS -- Some IDEs are web-based (os: "web", no installPath) +Run the parent skill's validation sequence. Manually review platform entries for copied CLI instructions that do not apply to the desktop application. diff --git a/.agents/skills/manifest-automation/scripts/workflows/model-workflow.md b/.agents/skills/manifest-automation/scripts/workflows/model-workflow.md index 93cacb49..38e6258d 100644 --- a/.agents/skills/manifest-automation/scripts/workflows/model-workflow.md +++ b/.agents/skills/manifest-automation/scripts/workflows/model-workflow.md @@ -1,241 +1,44 @@ -# Model Manifest Workflow +# Model manifest workflow -This workflow guides you through creating or updating a Model manifest with focus on technical specifications and pricing. +## Read before editing -## Required Fields (from model.schema.json) +- `manifests/$schemas/model.schema.json` and referenced schemas +- `src/types/manifests.ts` +- the target manifest and two recent model examples +- the related vendor and provider manifests -**Entity fields**: `id`, `name`, `description`, `i18n`, `websiteUrl`, `docsUrl`, `verified` +## Source priority -**Vendor-entity fields**: `vendor`, `githubUrl` (nullable) +1. Official model card, API reference, pricing page, release announcement, and lifecycle/deprecation notice. +2. Official repository or weights page. +3. Reputable benchmark leaderboard for that benchmark only. +4. Third-party aggregators for discovery or explicit secondary verification, never as the sole source for official limits, pricing, or availability. -**Model-specific fields:** -- `size`: Parameter count (e.g., "7B", "32B", "200B", "Unknown") -- `contextWindow`: Context window in tokens (e.g., 32000, 128000, 200000) -- `maxOutput`: Max output tokens (e.g., 4096, 8192, 16384) -- `tokenPricing`: {input, output, cache} in $/million tokens -- `platformUrls`: {huggingface, artificialAnalysis, openrouter} +Search snippets are not evidence. Open the source and verify that it describes the exact model ID/version. -## Phase 1: Core Information +## Field rules -Follow standard entity extraction: -- `name`, `description`, `vendor`, `websiteUrl`, `docsUrl` +- `releaseDate`: public release/availability date for this exact model, not article update date. +- `lifecycle`: determine from current official availability and deprecation notices; do not mark every older model deprecated. +- `size`: use disclosed parameter information only. Do not estimate closed-model size. +- `contextWindow` and `maxOutput`: keep total context and maximum generated output distinct; check API/model/version scope. +- `tokenPricing`: store USD per million tokens for the documented standard tier. Do not mix batch, regional, long-context, or reseller prices without schema support. +- `knowledgeCutoff`: record only if officially stated for the exact model. +- modalities and capabilities: require explicit documentation or demonstrated API support. +- `platformUrls`: verify the page identifies the exact model. +- benchmarks: record score, benchmark/version, evaluation mode, and source together. Never overwrite a score with a different harness, subset, pass@k, tool policy, or leaderboard version as though they were comparable. -## Phase 2: Model Specifications (Playwright) +## Create or update -**Goal**: Extract technical specifications +1. Keep filename, `id`, official model name, and vendor ID aligned. +2. Avoid aliases that silently move to a newer model; identify the concrete model represented. +3. Keep unknown optional facts `null` only where allowed. If a required numeric field is undisclosed, do not invent a value; report the schema/data-model blocker. +4. Add `sources` with `fields` mappings for specs, pricing, release/lifecycle, and benchmark evidence. +5. Set `lastVerifiedAt`, `verifiedBy`, and `confidence` according to the actual evidence. `verified: true` means the record was reviewed, not merely generated. +6. Keep translations complete for every locale declared in `src/i18n/config.ts`. Translate descriptions; preserve official model names and technical terms where appropriate. -1. **Navigate to model page or docs**: - - Look for model card, specs page, or API documentation - - Common URLs: `/models/`, `/docs/models/`, `/api/models` +Strict JSON only. Do not add TODO comments, placeholder sources, or benchmark guesses. - **Official Model Documentation** (Primary Reference Sources): - - **OpenAI**: https://platform.openai.com/docs/models - - **Anthropic**: https://platform.claude.com/docs/en/about-claude/models/overview - - **Google**: https://deepmind.google/models/model-cards - - **xAI**: https://docs.x.ai/docs/models - - **Alibaba Qwen**: https://qwen.ai/apiplatform - - **DeepSeek**: https://api-docs.deepseek.com/quick_start/pricing +## Validation -2. **Extract specifications**: - - **Size (parameter count)**: - - Look for: "7 billion parameters", "7B", "32B", "200B" - - Extract number + unit: "7B", "13B", "32B", "70B", "200B" - - If multiple variants, use the base model size - - Use "Unknown" if not disclosed - - **Total Context (context window)**: - - Look for: "context length", "context window", "token limit" - - Extract in thousands: "32K", "64K", "128K", "200K" - - Common values: "8K", "16K", "32K", "128K", "200K" - - Pattern: number + "K" - - **Max Output (output tokens)**: - - Look for: "max output tokens", "output length limit" - - Extract in thousands: "4K", "8K", "16K" - - Often smaller than context window - - Pattern: number + "K" - -3. **Common locations for specs**: - - Model card (HuggingFace, official website) - - Technical specifications page - - API documentation - - Announcement blog post - - GitHub repository README - -4. **Retry strategy**: - - **Attempt 1**: Official model page/docs - - **Attempt 2**: Announcement blog or GitHub - - **Attempt 3**: Third-party platforms (HuggingFace, Artificial Analysis) - - **TODO**: Mark "Unknown" if not found - -## Phase 3: Token Pricing (Playwright) - -**Goal**: Extract pricing per million tokens - -1. **Navigate to pricing or API pricing page**: - - Common URLs: `/pricing`, `/api/pricing`, `/docs/pricing` - -2. **Extract token pricing**: - - Look for pricing tables or calculators - - Extract per-million-token pricing: - - **input**: Price for 1M input tokens ($/M) - - **output**: Price for 1M output tokens ($/M) - - **cache**: Price for 1M cache read tokens ($/M) - nullable if not supported - -3. **Handle unit conversions**: - - If pricing shown per 1K tokens: - - Multiply by 1000 to get $/M - - Example: $0.0005/1K = $0.50/M - - Normalize all values to $/M format - - Use numbers, not strings (e.g., 0.50, not "0.50") - -4. **Examples**: -```json -{ - "tokenPricing": { - "input": 0.25, - "output": 1.25, - "cache": 0.025 - } -} -``` - -5. **Retry strategy**: - - **Attempt 1**: Official pricing page - - **Attempt 2**: API documentation - - **Attempt 3**: Third-party platforms (OpenRouter, Artificial Analysis) - - **TODO**: Mark null if behind "Contact Sales" - -## Phase 4: Platform URLs (WebSearch) - -**Goal**: Find model on third-party platforms - -### HuggingFace - -1. **Search**: `"huggingface /"` or `site:huggingface.co ` -2. **Navigate** to result (Playwright) -3. **Validate**: - - URL pattern: `https://huggingface.co//` - - Verify it's the correct model (not similar name) - - Check model card matches vendor and specs -4. **Extract**: Full HuggingFace URL -5. **Set to null** if not found after 3 attempts - -### Artificial Analysis - -1. **Search**: `"artificial analysis "` or `site:artificialanalysis.ai ` -2. **Navigate** to artificialanalysis.ai -3. **Find model** in their benchmarks/comparisons -4. **Extract**: URL (e.g., `https://artificialanalysis.ai/models/`) -5. **Set to null** if not found - -### OpenRouter - -1. **Search**: `"openrouter "` or `"openrouter /"` -2. **Navigate** to openrouter.ai -3. **Find model** in their model list -4. **Extract**: Model page URL -5. **Set to null** if not available - -### Wikipedia (Verification Only) - -1. **Search**: `site:wikipedia.org ` or `" wikipedia"` -2. **Use for cross-referencing**: - - Verify model specifications (parameter count, context window) - - Cross-check release dates and version history - - Validate vendor/company information -3. **DO NOT store Wikipedia URL** - use only for verification -4. **Common use cases**: - - Confirming specs for popular models (GPT-4, Claude, Gemini) - - Validating version numbers and release timeline - - Cross-referencing pricing history - -**Final structure**: -```json -{ - "platformUrls": { - "huggingface": "", - "artificialAnalysis": "", - "openrouter": "" - } -} -``` - -## Phase 5: GitHub (Optional) - -**Goal**: Find model repository if available - -1. **Many models don't have public GitHub repos**: - - Proprietary models: Set `githubUrl` to null - - Open source models: Follow GitHub discovery from CLI workflow - -2. **If searching**: - - Use WebSearch: `" github"` - - Look for model weights, inference code, or official repo - - Validate it's official (from vendor org) - -## Phase 6: Generate Manifest - -```json -{ - "$schema": "../$schemas/model.schema.json", - "id": "", - "name": "", - "description": "", - "i18n": {}, - "websiteUrl": "", - "docsUrl": "", - "verified": false, - "vendor": "", - "githubUrl": "", - "size": "<7B|32B|200B|Unknown>", - "contextWindow": "<32000|128000|200000>", - "maxOutput": "<4096|8192|16384>", - "tokenPricing": { - "input": 0.25, - "output": 1.25, - "cache": 0.025 - }, - "platformUrls": { - "huggingface": "", - "artificialAnalysis": "", - "openrouter": "" - } -} -``` - -## Phase 7: Validation - -Run validation: -```bash -npm run test:validate -``` - -## Common Patterns - -### Size Notations -- Billion: "7B", "13B", "32B", "70B", "200B" -- Million: "350M", "1.5B" -- Trillion: "1T" (rare) -- Unknown: "Unknown" (for proprietary models) - -### Context Window Sizes -- Small: "4K", "8K", "16K" -- Medium: "32K", "64K", "128K" -- Large: "200K", "1M" (million) - -### Pricing Patterns -- Input usually cheaper than output (2-5x difference) -- Cache usually 10x cheaper than input -- Free models: Set all to 0 -- Unreleased models: null - -## Key Differences from CLI/Extension - -- No installation commands or marketplace URLs -- Focus on technical specs and pricing -- Platform URLs for discoverability -- GitHub is optional (many proprietary models) -- Pricing is per-token, not subscription tiers -- Size/context/output are string values with units +Run the parent skill's validation sequence. Recalculate price units manually and inspect benchmark diffs for evaluation incompatibilities. diff --git a/.agents/skills/manifest-automation/scripts/workflows/provider-workflow.md b/.agents/skills/manifest-automation/scripts/workflows/provider-workflow.md index 4ce93745..3b28c14f 100644 --- a/.agents/skills/manifest-automation/scripts/workflows/provider-workflow.md +++ b/.agents/skills/manifest-automation/scripts/workflows/provider-workflow.md @@ -1,181 +1,33 @@ -# Provider Manifest Workflow +# Provider manifest workflow -This workflow guides you through creating or updating a Provider manifest with focus on provider type detection and API access. +## Read before editing -## Required Fields (from provider.schema.json) +- `manifests/$schemas/provider.schema.json` and referenced schemas +- `src/types/manifests.ts` +- the target manifest and two current provider examples +- the related vendor manifest -**Entity fields**: `id`, `name`, `description`, `i18n`, `websiteUrl`, `docsUrl`, `verified` +## Evidence checklist -**Vendor-entity fields**: `vendor`, `githubUrl` (nullable) +Use the provider's official website, API documentation, model catalog, account/key page, and official community links. Determine `type` from what the organization currently offers: -**Provider-specific fields:** -- `type`: "foundation-model-provider" or "model-service-provider" -- `applyKeyUrl`: URL to get API keys (nullable) -- `platformUrls`: {huggingface, artificialAnalysis, openrouter} -- `communityUrls`: Standard social media links +- `foundation-model-provider`: develops and serves its own foundation models; +- `model-service-provider`: primarily aggregates or serves models from other vendors. -## Phase 1: Core Information +If both apply, choose the category that matches the manifest's represented service and explain the decision in the review notes. -Follow standard entity extraction: -- `name`, `description`, `vendor`, `websiteUrl`, `docsUrl` +## Create or update -## Phase 2: Provider Type Detection (Playwright) +1. Keep filename, `id`, official name, and vendor ID aligned. +2. Use the direct HTTPS account/API-key page for `applyKeyUrl`; use `null` only if keys are not applicable or no public flow exists. +3. Record platform pages only when they represent this provider, not merely one similarly named model. +4. Source community URLs from official site navigation or verified official accounts. LinkedIn and Wikipedia are secondary evidence, not authoritative replacements for first-party sources. +5. Summarize the service in no more than the schema limit without unsupported superlatives. +6. Add or refresh provenance and verification metadata. +7. Keep translations complete and aligned across every locale declared in `src/i18n/config.ts`. -**Goal**: Determine if foundation or service provider +No JSON comments, TODOs, guessed handles, or URL-pattern assumptions. -1. **Navigate to main website and model listings**: - - Look for "Models", "API", "Products" pages - - Take snapshot +## Validation -2. **Analyze content to determine type**: - - **Foundation Model Provider** (`foundation-model-provider`): - - Develops and trains their own models - - Language like: "Our Models", "Developed by us", "Claude", "GPT", "Gemini" - - Model names branded with company name - - Examples: Anthropic (Claude), OpenAI (GPT), Google (Gemini) - - **Model Service Provider** (`model-service-provider`): - - Aggregates models from multiple providers - - Language like: "Available Models", "Supported Models", "Choose from..." - - Lists models from various companies - - Examples: OpenRouter, Together AI, Replicate - -3. **Look for model listings**: - - If listing only own models → `foundation-model-provider` - - If listing models from multiple providers → `model-service-provider` - -4. **Edge cases**: - - Some providers do both (e.g., offer own models + others) - - Classify by primary business model - - If unclear, prefer `model-service-provider` - -## Phase 3: API Access Discovery (Playwright) - -**Goal**: Find where users get API keys - -1. **Navigate to API documentation**: - - Look for "API", "Developers", "Get Started", "API Keys" - - Common URLs: `/api`, `/developers`, `/docs/api`, `/console` - -2. **Find API key application/generation page**: - - **applyKeyUrl**: Where users go to get API keys - - Common patterns: - - `/console/api-keys` - - `/account/api-keys` - - `/dashboard/api-keys` - - `/settings/api` - - Some providers: Sign up page where key is issued - - Some providers: "Contact Sales" (mark as TODO) - -3. **Extract API documentation URL** (docsUrl): - - Technical API documentation - - Common patterns: `/docs`, `/api/reference`, `/developers/docs` - -4. **Retry strategy**: - - **Attempt 1**: Navigate from homepage → Developers/API - - **Attempt 2**: Direct URL patterns (`/console`, `/api-keys`, `/dashboard`) - - **Attempt 3**: WebSearch `" api key"` - - **TODO**: Set null if behind authentication wall - -## Phase 4: Platform URLs (WebSearch) - -**Goal**: Find provider on third-party platforms - -Same as Model workflow Phase 4: - -1. **HuggingFace**: `https://huggingface.co/` -2. **Artificial Analysis**: If they benchmark this provider's models -3. **OpenRouter**: If this provider's models available there - -Set each to null if not applicable. - -## Phase 5: Community URLs (WebSearch + Playwright) - -Follow CLI workflow Phase 6: -- Check website footer for social links -- Use WebSearch for missing platforms -- Extract: linkedin, twitter, github, youtube, discord, reddit, blog - -## Phase 6: GitHub (Optional) - -Many providers don't have public GitHub: -- Foundation providers: May have SDKs, libraries, tools -- Service providers: May have client libraries - -Set to null if not applicable. - -## Phase 7: Generate Manifest - -```json -{ - "$schema": "../$schemas/provider.schema.json", - "id": "", - "name": "", - "description": "", - "i18n": {}, - "websiteUrl": "", - "docsUrl": "", - "verified": false, - "vendor": "", - "githubUrl": "", - "type": "foundation-model-provider" or "model-service-provider", - "applyKeyUrl": "", - "platformUrls": { - "huggingface": "", - "artificialAnalysis": "", - "openrouter": "" - }, - "communityUrls": { - "linkedin": "", - "twitter": "", - "github": "", - "youtube": "", - "discord": "", - "reddit": "", - "blog": "" - } -} -``` - -## Phase 8: Validation - -Run validation: -```bash -npm run test:validate -``` - -## Provider Type Examples - -### Foundation Model Providers -- Anthropic (Claude models) -- OpenAI (GPT models) -- Google (Gemini models) -- Meta (Llama models) -- Mistral AI (Mistral models) - -### Model Service Providers -- OpenRouter (aggregates many providers) -- Together AI (hosts various models) -- Replicate (runs open source models) -- Hugging Face Inference (serves community models) - -## Common Patterns - -### API Key URLs -- SaaS dashboard: `/console/api-keys`, `/dashboard/keys` -- Account settings: `/account/api`, `/settings/api` -- Direct signup: `/signup` (for providers that issue keys on signup) -- Enterprise: "Contact Sales" (set to null, add TODO) - -### Type Indicators -- Foundation: "powered by [our model]", "we developed", "our research" -- Service: "access to", "choose from", "100+ models", "various providers" - -## Key Differences from Other Types - -- No installation, pricing tiers, or technical specs -- Focus on provider type and API access -- Community URLs more important (developer relations) -- Platform URLs focus on where provider is mentioned/integrated -- Many providers have no public GitHub +Run the parent skill's validation sequence and manually verify `type`, `applyKeyUrl`, and every platform URL. diff --git a/.agents/skills/manifest-automation/scripts/workflows/vendor-workflow.md b/.agents/skills/manifest-automation/scripts/workflows/vendor-workflow.md index f259b0fa..e00a8666 100644 --- a/.agents/skills/manifest-automation/scripts/workflows/vendor-workflow.md +++ b/.agents/skills/manifest-automation/scripts/workflows/vendor-workflow.md @@ -1,185 +1,28 @@ -# Vendor Manifest Workflow +# Vendor manifest workflow -This workflow guides you through creating or updating a Vendor manifest - the simplest manifest type. +## Read before editing -## Required Fields (from vendor.schema.json) +- `manifests/$schemas/vendor.schema.json` and referenced schemas +- `src/types/manifests.ts` +- the target manifest and two current vendor examples +- manifests that reference the vendor ID -**Entity fields**: -- `id`, `name`, `description`, `i18n`, `websiteUrl`, `docsUrl`, `verified` +## Evidence checklist -**Vendor fields**: -- `communityUrls`: {linkedin, twitter, github, youtube, discord, reddit, blog} +Use the organization's official home/about pages, official repositories, and official social links. Corporate registries or reputable reporting may corroborate identity changes, acquisitions, or shutdowns. Wikipedia and LinkedIn are secondary sources and must not override current first-party information. -## Phase 1: Core Information (Playwright) +## Create or update -1. **Navigate to vendor website**: - - Use `mcp__playwright__browser_navigate` - - Take snapshot with `mcp__playwright__browser_snapshot` +1. Keep filename and `id` stable. A corporate rename or acquisition does not automatically justify changing IDs used by other manifests. +2. Use the current official organization name and canonical HTTPS website. +3. Write a factual description within the schema limit; avoid employee counts, headquarters, funding, and similar mutable facts unless the schema needs them. +4. Record only community accounts demonstrably controlled by the organization. Do not infer handles from naming conventions. +5. Before changing or deleting a vendor, inspect all manifest references. +6. Add or refresh provenance and verification metadata for reviewed records. +7. Keep translations complete for every locale declared in `src/i18n/config.ts` and update them together when meaning changes. -2. **Extract from homepage**: - - **name**: Official company/organization name - - **description**: Company tagline or mission statement (max 200 chars) - - Look in hero section, about section, or meta description - - Focus on what the company does, not specific products +Do not add JSON comments, TODOs, placeholder links, or guessed accounts. -3. **Find documentation**: - - **docsUrl**: Developer documentation or general docs - - Common patterns: `/docs`, `/developers`, `/documentation` - - Set to null if no documentation hub exists +## Validation -## Phase 2: Community URLs (WebSearch + Playwright) - -**Goal**: Find all official social media and community links - -1. **Check website footer** (Playwright): - - Look for social media icons/links - - Extract available URLs - -2. **Use WebSearch for missing platforms**: - - **LinkedIn** (Company page): - - Search: `" linkedin company"` or `site:linkedin.com/company ` - - Pattern: `linkedin.com/company/` - - Prefer company page over individual profiles - - Validate: Check company name, logo, and official verification - - **Critical**: LinkedIn is often the most authoritative source for company information - - **Twitter/X**: - - Search: `" official twitter"` or `site:x.com ` - - Pattern: `twitter.com/` or `x.com/` - - Validate: Check verification badge (blue/gold checkmark) - - **GitHub** (Organization): - - Search: `" github"` or `site:github.com ` - - Pattern: `github.com/` - - Prefer organization page, not specific repos - - **YouTube** (Channel): - - Search: `" official youtube"` or `site:youtube.com ` - - Pattern: `youtube.com/@`, `youtube.com/c/`, or `youtube.com/channel/` - - **Discord**: - - Search: `" official discord"` - - Pattern: `discord.gg/` or `discord.com/invite/` - - **Reddit** (Subreddit): - - Search: `" official subreddit"` or `site:reddit.com/r ` - - Pattern: `reddit.com/r/` - - **Blog**: - - Look for `/blog` on main website or `blog..com` - - Can also be Medium, Substack, or other platforms - -3. **Validation**: - - Verify accounts are official (check verification badges, content) - - Ensure consistent branding with company - - Set to null if not found after 3 attempts - -4. **Additional Data Sources**: - - **Wikipedia**: - - Use for verifying company information (founding date, headquarters, description) - - Search: `site:wikipedia.org ` - - Pattern: `en.wikipedia.org/wiki/` - - **Do NOT store Wikipedia URL in manifest** - use only for verification - - Cross-reference: Company description, official name, social media links - - **LinkedIn Company Page**: - - Beyond just the URL, extract additional context: - - Company size and industry - - Official company description (cross-reference with website) - - Verify headquarters location - - Use as authoritative source for company metadata - -## Phase 3: Generate Manifest - -```json -{ - "$schema": "../$schemas/vendor.schema.json", - "id": "", - "name": "", - "description": "", - "i18n": {}, - "websiteUrl": "", - "docsUrl": "", - "verified": false, - "communityUrls": { - "linkedin": "", - "twitter": "", - "github": "", - "youtube": "", - "discord": "", - "reddit": "", - "blog": "" - } -} -``` - -## Phase 4: Validation - -Run validation: -```bash -npm run test:validate -``` - -## Examples - -### Example 1: Software Company -```json -{ - "id": "anthropic", - "name": "Anthropic", - "description": "AI safety company building reliable, interpretable, and steerable AI systems", - "websiteUrl": "https://anthropic.com", - "docsUrl": "https://docs.anthropic.com", - "communityUrls": { - "linkedin": "https://linkedin.com/company/anthropic-ai", - "twitter": "https://x.com/AnthropicAI", - "github": "https://github.com/anthropics", - "youtube": "https://youtube.com/@AnthropicAI", - "discord": null, - "reddit": null, - "blog": "https://anthropic.com/news" - } -} -``` - -### Example 2: Open Source Organization -```json -{ - "id": "linux-foundation", - "name": "Linux Foundation", - "description": "Nonprofit organization enabling mass innovation through open source technology support", - "websiteUrl": "https://linuxfoundation.org", - "docsUrl": null, - "communityUrls": { - "linkedin": "https://linkedin.com/company/the-linux-foundation", - "twitter": "https://twitter.com/linuxfoundation", - "github": "https://github.com/linuxfoundation", - "youtube": "https://youtube.com/user/TheLinuxFoundation", - "discord": null, - "reddit": null, - "blog": "https://linuxfoundation.org/blog" - } -} -``` - -## Key Points - -- **Simplest manifest type** - no product-specific fields -- **Company-level information** - not about specific products -- **Description focuses on company mission** - not individual product features -- **docsUrl is often null** - many companies don't have general docs, only product docs -- **Community URLs are critical** - main differentiator from minimal entity fields -- **GitHub is organization page** - not individual repos -- **Wikipedia for verification** - cross-reference data but don't store URL -- **LinkedIn as authoritative source** - use for validating company metadata - -## Common Pitfalls - -- Don't include product-specific information in description -- Don't link to specific product docs for docsUrl (use company-level docs or null) -- Don't include employee/founder personal social accounts (only official company accounts) -- Don't guess social media handles - verify they exist and are official -- Don't store Wikipedia URLs in manifest - use only for verification -- Don't trust unverified LinkedIn profiles - only use official company pages +Run the parent skill's validation sequence and check referential integrity for every product, model, and provider using this vendor ID. diff --git a/.agents/skills/model-provider-setup/SKILL.md b/.agents/skills/model-provider-setup/SKILL.md index a2e48f4f..d90c406a 100644 --- a/.agents/skills/model-provider-setup/SKILL.md +++ b/.agents/skills/model-provider-setup/SKILL.md @@ -1,124 +1,93 @@ --- name: model-provider-setup -description: Configure Codex to use alternative AI model providers by setting up custom API endpoints and authentication. Use this skill when users want to switch from default Anthropic models to providers like Z.AI, OpenRouter, or other custom endpoints with compatible APIs. +description: Configures Codex custom model providers in user-level config.toml. Use when a user wants Codex to connect to an OpenAI-compatible proxy, hosted provider, Azure endpoint, or local Ollama/LM Studio runtime. --- # Model Provider Setup -## Overview - -This skill configures `.Codex/settings.local.json` to use alternative AI model providers that offer Anthropic-compatible APIs. It guides the setup of custom base URLs, model selections, and API authentication for providers beyond the default Anthropic service. - -## When to Use This Skill - -Use this skill when users: -- Want to switch to alternative model providers (Z.AI, OpenRouter, etc.) -- Need to configure custom API endpoints for Codex -- Ask about setting up API keys for different providers -- Request help configuring model provider settings - -## Setup Workflow - -### Step 1: Read Provider Configurations - -Read the provider configurations from `references/providers.json` to understand available providers, their base URLs, and supported models. - -The JSON structure contains: -- Provider ID and display name -- Description of the provider -- Base URL for API requests -- List of available models with IDs and descriptions - -### Step 2: Present Provider Options to User - -Use the `AskUserQuestion` tool to present available providers to the user. Structure the question as follows: - -**Question format:** -- Header: "Provider" -- Question: "Which model provider would you like to configure?" -- Options: Build from providers.json, using provider name as label and description as the option description -- multiSelect: false (single provider selection) - -### Step 3: Present Model Options for Selected Provider - -After the user selects a provider, use `AskUserQuestion` again to let them choose a model from that provider's available models. +Configure Codex model providers without exposing credentials or writing unsupported project-local settings. + +## Safety and scope + +- Read the current Codex configuration documentation before changing provider settings. +- Write provider configuration only to the user's `~/.codex/config.toml`. Codex ignores provider and credential-routing keys in project `.codex/config.toml`. +- Never write API keys into the repository, `config.toml`, chat output, or shell history. Store only the environment-variable name in `env_key` and let the user set its value securely. +- Preserve unrelated TOML settings and comments. Inspect the existing file before editing. +- Do not assume an Anthropic-compatible endpoint works with Codex. Confirm that the endpoint supports the wire API selected for Codex, normally the OpenAI Responses API. +- Do not guess model IDs. Obtain the exact ID from the provider's current official model catalog. + +## Workflow + +1. Read `references/providers.json` for maintained templates and limitations. +2. Determine the requested target: + - built-in OpenAI provider with a different base URL; + - custom hosted provider or proxy; + - built-in local provider (`ollama` or `lmstudio`); + - built-in Amazon Bedrock provider; + - Azure OpenAI-compatible endpoint. +3. Verify the provider's current official documentation for: + - base URL; + - supported wire API; + - exact model ID; + - required authentication environment variable; + - required query parameters or headers. +4. Show the proposed non-secret TOML diff before writing when the choice is ambiguous. +5. Obtain authorization to modify user-level configuration, then update `~/.codex/config.toml` while preserving unrelated settings. +6. Ask the user to set the required environment variable outside the repository. Never request that the secret be pasted into chat when a local secret store or shell environment is available. +7. Validate with a read-only command such as `codex --version` and, when available, a minimal provider/model listing or one-off invocation. Do not send a billable API request without user authorization. +8. Tell the user whether Codex must be restarted or a new session opened for the change to take effect. + +## Configuration patterns + +### Built-in OpenAI provider through a proxy + +Use `openai_base_url` when only the built-in OpenAI provider's endpoint changes: + +```toml +openai_base_url = "https://proxy.example.com/v1" +model = "provider-model-id" +``` -**Question format:** -- Header: "Model" -- Question: "Which model would you like to use?" -- Options: Build from the selected provider's models array, using model name as label and description as the option description -- multiSelect: false (single model selection) +### Custom provider -### Step 4: Collect API Key +Use a non-reserved provider ID. `openai`, `ollama`, and `lmstudio` are reserved. -Use `AskUserQuestion` to collect the API key for the selected provider. +```toml +model = "provider-model-id" +model_provider = "example" -**Question format:** -- Header: "API Key" -- Question: "Please enter your API key for [provider name]:" -- Options: Provide 2 options: - - Label: "I'll enter my API key", Description: "Type or paste your API key in the 'Other' field below" - - Label: "I'll add it manually later", Description: "Set up the configuration with a placeholder that you'll replace later" -- multiSelect: false +[model_providers.example] +name = "Example provider" +base_url = "https://api.example.com/v1" +env_key = "EXAMPLE_API_KEY" +wire_api = "responses" +``` -**Important:** If the user selects "Other" and provides a custom text input, that is their API key. If they choose "I'll add it manually later", use the placeholder `""`. +Add only officially required headers or query parameters: -### Step 5: Update .Codex/settings.local.json +```toml +[model_providers.example] +http_headers = { "X-Example-Header" = "value" } +env_http_headers = { "X-Secret-Header" = "EXAMPLE_HEADER_VALUE" } +query_params = { api-version = "documented-version" } +``` -Read the existing `.Codex/settings.local.json` file if it exists. If it doesn't exist, create a new one. +### Local providers -Update or create the configuration with the following structure: +Prefer Codex's built-in OSS mode instead of redefining reserved providers: -```json -{ - "env": { - "ANTHROPIC_BASE_URL": "", - "ANTHROPIC_MODEL": "", - "ANTHROPIC_AUTH_TOKEN": "" - } -} +```toml +oss_provider = "ollama" # or "lmstudio" ``` -**Important considerations:** -- Preserve any existing configuration in settings.local.json that is not related to these three env variables -- Merge the new env variables with existing ones -- Use proper JSON formatting with 2-space indentation - -### Step 6: Confirm Setup - -After updating the configuration file, inform the user: -1. Which provider and model were configured -2. The location of the settings file: `.Codex/settings.local.json` -3. If a placeholder was used, remind them to replace `` with their actual API key -4. Note that they need to restart Codex for the changes to take effect - -## Adding New Providers - -To add new model providers to this skill, edit `references/providers.json` and add a new provider object with the following structure: - -```json -{ - "id": "unique-provider-id", - "name": "Display Name", - "description": "Brief description of the provider", - "baseUrl": "https://api.example.com/v1", - "models": [ - { - "id": "model-identifier", - "name": "Model Display Name", - "description": "Brief description of the model" - } - ] -} -``` +Run Codex with `--oss`; use `--local-provider` for a one-off selection. -## Resources +## Unsupported legacy configuration -### references/providers.json +Do not create `.Codex/settings.local.json` and do not set `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL`, or `ANTHROPIC_AUTH_TOKEN` as a Codex configuration. Those settings describe a different client and wire protocol. -Contains the configuration database for all supported model providers. This file includes: -- Provider metadata (ID, name, description) -- API base URLs -- Available models for each provider +## Maintenance -This file should be read at the start of the workflow to populate the provider and model selection options. +- Keep `references/providers.json` limited to durable configuration templates. Do not hardcode a model catalog that becomes stale quickly. +- Prefer official Codex documentation for configuration semantics and official provider documentation for endpoint/model facts. +- Re-verify provider compatibility whenever Codex changes its supported wire APIs. diff --git a/.agents/skills/model-provider-setup/references/providers.json b/.agents/skills/model-provider-setup/references/providers.json index e4e6f7ed..15649149 100644 --- a/.agents/skills/model-provider-setup/references/providers.json +++ b/.agents/skills/model-provider-setup/references/providers.json @@ -1,45 +1,37 @@ { - "providers": [ + "version": 2, + "notes": [ + "Model IDs are intentionally omitted because provider catalogs change frequently.", + "Verify base URLs, wire API support, model IDs, and authentication against current official provider documentation before editing config.toml.", + "Provider configuration belongs in user-level ~/.codex/config.toml; project config cannot redirect provider authentication." + ], + "templates": [ { - "id": "zai", - "name": "Z.AI (GLM Models)", - "description": "China-based provider with GLM-4.7-coding and other GLM models", - "baseUrl": "https://api.z.ai/api/anthropic", - "models": [ - { - "id": "glm-4.7-coding-preview", - "name": "GLM-4.7 Coding Preview", - "description": "Latest GLM coding model for enhanced code generation" - }, - { - "id": "glm-4-plus", - "name": "GLM-4 Plus", - "description": "Advanced general-purpose GLM model" - } - ] + "id": "openai-proxy", + "kind": "built-in-openai-base-url", + "configKey": "openai_base_url", + "description": "Use when the built-in OpenAI provider is routed through an OpenAI-compatible proxy or regional endpoint." }, { - "id": "openrouter", - "name": "OpenRouter", - "description": "Unified API gateway for multiple AI model providers", - "baseUrl": "https://openrouter.ai/api/v1", - "models": [ - { - "id": "anthropic/claude-3.5-sonnet", - "name": "Claude 3.5 Sonnet", - "description": "Anthropic's Claude 3.5 Sonnet via OpenRouter" - }, - { - "id": "anthropic/claude-3-opus", - "name": "Claude 3 Opus", - "description": "Anthropic's most capable Claude 3 model via OpenRouter" - }, - { - "id": "openai/gpt-4-turbo", - "name": "GPT-4 Turbo", - "description": "OpenAI's GPT-4 Turbo via OpenRouter" - } - ] + "id": "custom-responses-provider", + "kind": "custom", + "requiredFields": ["name", "base_url", "env_key", "wire_api"], + "wireApi": "responses", + "description": "Use only after confirming that the provider implements the OpenAI Responses API expected by Codex." + }, + { + "id": "mistral", + "kind": "official-manual-example", + "name": "Mistral", + "baseUrl": "https://api.mistral.ai/v1", + "envKey": "MISTRAL_API_KEY", + "description": "Example documented by the Codex manual; verify the current model ID and feature compatibility with Mistral before use." + }, + { + "id": "local-oss", + "kind": "built-in-local", + "providers": ["ollama", "lmstudio"], + "description": "Use Codex OSS mode and a built-in local provider instead of redefining reserved provider IDs." } ] } diff --git a/.agents/skills/skill-creator/SKILL.md b/.agents/skills/skill-creator/SKILL.md index e1f2e497..1d3e295c 100644 --- a/.agents/skills/skill-creator/SKILL.md +++ b/.agents/skills/skill-creator/SKILL.md @@ -1,209 +1,63 @@ --- name: skill-creator -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 Codex's capabilities with specialized knowledge, workflows, or tool integrations. +description: Designs, creates, audits, and packages repository skills with accurate trigger metadata, executable workflows, minimal resources, and validation. Use when adding or materially revising a SKILL.md package. license: Complete terms in LICENSE.txt --- -# Skill Creator +# Skill creator -This skill provides guidance for creating effective skills. +Create skills that another Codex instance can execute safely with the tools and repository state it actually has. -## About Skills +## Design workflow -Skills are modular, self-contained packages that extend Codex's capabilities by providing -specialized knowledge, workflows, and tools. Think of them as "onboarding guides" for specific -domains or tasks—they transform Codex from a general-purpose agent into a specialized agent -equipped with procedural knowledge that no model can fully possess. +1. Gather concrete trigger examples and expected outcomes. Distinguish tasks that should trigger the skill from nearby tasks that should not. +2. Inspect the target environment: `AGENTS.md`, available tools, filesystem paths, schemas, commands, and current examples. +3. Separate reusable content: + - keep essential decisions and ordered workflow in `SKILL.md`; + - put detailed specifications in `references/`; + - put deterministic, directly runnable helpers in `scripts/`; + - put copyable output resources in `assets/`. +4. Design safe defaults. Read-only preview/check modes should precede destructive or external writes. State required approval and credential boundaries. +5. Write precise frontmatter. `name` must equal the directory name; `description` must say what the skill does and when it triggers. +6. Test every documented path and command. Do not claim that a helper browses, writes, validates, or integrates with a tool unless it demonstrably does so. +7. Run validation and at least one representative smoke test. Review the skill as a new agent would: all required references must be discoverable and the stopping conditions must be clear. -### What Skills Provide +## Initialize -1. Specialized workflows - Multi-step procedures for specific domains -2. Tool integrations - Instructions for working with specific file formats or APIs -3. Domain expertise - Company-specific knowledge, schemas, business logic -4. Bundled resources - Scripts, references, and assets for complex and repetitive tasks +For a new skill, create a minimal scaffold: -### Anatomy of a Skill - -Every skill consists of a required SKILL.md file and optional bundled resources: - -``` -skill-name/ -├── SKILL.md (required) -│ ├── YAML frontmatter metadata (required) -│ │ ├── name: (required) -│ │ └── description: (required) -│ └── Markdown instructions (required) -└── Bundled Resources (optional) - ├── scripts/ - Executable code (Python/Bash/etc.) - ├── references/ - Documentation intended to be loaded into context as needed - └── assets/ - Files used in output (templates, icons, fonts, etc.) +```bash +python3 .agents/skills/skill-creator/scripts/init_skill.py my-skill --path .agents/skills ``` -#### SKILL.md (required) - -**Metadata Quality:** The `name` and `description` in YAML frontmatter determine when Codex will use the skill. Be specific about what the skill does and when to use it. Use the third-person (e.g. "This skill should be used when..." instead of "Use this skill when..."). - -#### Bundled Resources (optional) - -##### Scripts (`scripts/`) - -Executable code (Python/Bash/etc.) for tasks that require deterministic reliability or are repeatedly rewritten. - -- **When to include**: When the same code is being rewritten repeatedly or deterministic reliability is needed -- **Example**: `scripts/rotate_pdf.py` for PDF rotation tasks -- **Benefits**: Token efficient, deterministic, may be executed without loading into context -- **Note**: Scripts may still need to be read by Codex for patching or environment-specific adjustments - -##### References (`references/`) - -Documentation and reference material intended to be loaded as needed into context to inform Codex's process and thinking. - -- **When to include**: For documentation that Codex should reference while working -- **Examples**: `references/finance.md` for financial schemas, `references/mnda.md` for company NDA template, `references/policies.md` for company policies, `references/api_docs.md` for API specifications -- **Use cases**: Database schemas, API documentation, domain knowledge, company policies, detailed workflow guides -- **Benefits**: Keeps SKILL.md lean, loaded only when Codex determines it's needed -- **Best practice**: If files are large (>10k words), include grep search patterns in SKILL.md -- **Avoid duplication**: Information should live in either SKILL.md or references files, not both. Prefer references files for detailed information unless it's truly core to the skill—this keeps SKILL.md lean while making information discoverable without hogging the context window. Keep only essential procedural instructions and workflow guidance in SKILL.md; move detailed reference material, schemas, and examples to references files. - -##### Assets (`assets/`) - -Files not intended to be loaded into context, but rather used within the output Codex produces. - -- **When to include**: When the skill needs files that will be used in the final output -- **Examples**: `assets/logo.png` for brand assets, `assets/slides.pptx` for PowerPoint templates, `assets/frontend-template/` for HTML/React boilerplate, `assets/font.ttf` for typography -- **Use cases**: Templates, images, icons, boilerplate code, fonts, sample documents that get copied or modified -- **Benefits**: Separates output resources from documentation, enables Codex to use files without loading them into context - -### Progressive Disclosure Design Principle - -Skills use a three-level loading system to manage context efficiently: - -1. **Metadata (name + description)** - Always in context (~100 words) -2. **SKILL.md body** - When skill triggers (<5k words) -3. **Bundled resources** - As needed by Codex (Unlimited*) - -*Unlimited because scripts can be executed without reading into context window. - -## Skill Creation Process - -To create a skill, follow the "Skill Creation Process" in order, skipping steps only if there is a clear reason why they are not applicable. - -### Step 1: Understanding the Skill with Concrete Examples - -Skip this step only when the skill's usage patterns are already clearly understood. It remains valuable even when working with an existing skill. - -To create an effective skill, clearly understand concrete examples of how the skill will be used. This understanding can come from either direct user examples or generated examples that are validated with user feedback. - -For example, when building an image-editor skill, relevant questions include: - -- "What functionality should the image-editor skill support? Editing, rotating, anything else?" -- "Can you give some examples of how this skill would be used?" -- "I can imagine users asking for things like 'Remove the red-eye from this image' or 'Rotate this image'. Are there other ways you imagine this skill being used?" -- "What would a user say that should trigger this skill?" - -To avoid overwhelming users, avoid asking too many questions in a single message. Start with the most important questions and follow up as needed for better effectiveness. - -Conclude this step when there is a clear sense of the functionality the skill should support. - -### Step 2: Planning the Reusable Skill Contents - -To turn concrete examples into an effective skill, analyze each example by: - -1. Considering how to execute on the example from scratch -2. Identifying what scripts, references, and assets would be helpful when executing these workflows repeatedly - -Example: When building a `pdf-editor` skill to handle queries like "Help me rotate this PDF," the analysis shows: - -1. Rotating a PDF requires re-writing the same code each time -2. A `scripts/rotate_pdf.py` script would be helpful to store in the skill - -Example: When designing a `frontend-webapp-builder` skill for queries like "Build me a todo app" or "Build me a dashboard to track my steps," the analysis shows: - -1. Writing a frontend webapp requires the same boilerplate HTML/React each time -2. An `assets/hello-world/` template containing the boilerplate HTML/React project files would be helpful to store in the skill - -Example: When building a `big-query` skill to handle queries like "How many users have logged in today?" the analysis shows: - -1. Querying BigQuery requires re-discovering the table schemas and relationships each time -2. A `references/schema.md` file documenting the table schemas would be helpful to store in the skill - -To establish the skill's contents, analyze each concrete example to create a list of the reusable resources to include: scripts, references, and assets. - -### Step 3: Initializing the Skill - -At this point, it is time to actually create the skill. - -Skip this step only if the skill being developed already exists, and iteration or packaging is needed. In this case, continue to the next step. - -When creating a new skill from scratch, always run the `init_skill.py` script. The script conveniently generates a new template skill directory that automatically includes everything a skill requires, making the skill creation process much more efficient and reliable. - -Usage: +Create resource directories only when already justified: ```bash -scripts/init_skill.py --path +python3 .agents/skills/skill-creator/scripts/init_skill.py my-skill --path .agents/skills --resources scripts,references ``` -The script: - -- Creates the skill directory at the specified path -- Generates a SKILL.md template with proper frontmatter and TODO placeholders -- Creates example resource directories: `scripts/`, `references/`, and `assets/` -- Adds example files in each directory that can be customized or deleted - -After initialization, customize or remove the generated SKILL.md and example files as needed. +For an existing skill, edit it in place; do not reinitialize it. -### Step 4: Edit the Skill +## Authoring rules -When editing the (newly-generated or existing) skill, remember that the skill is being created for another instance of Codex to use. Focus on including information that would be beneficial and non-obvious to Codex. Consider what procedural knowledge, domain-specific details, or reusable assets would help another Codex instance execute these tasks more effectively. +- Keep instructions imperative, concise, and ordered around decisions. +- Use repository-relative paths in skill documentation unless a user-level path is inherently required. +- Prefer current schemas/configuration as authority over copied examples. +- Avoid hardcoded model catalogs, URLs, locale lists, or tool names when they change frequently; either derive them or require current verification. +- Do not embed secrets, request users to paste credentials, or store placeholders that resemble real credentials. +- Avoid duplicate guidance between `SKILL.md` and references. +- Delete unused resources and generated caches before handoff. -#### Start with Reusable Skill Contents - -To begin implementation, start with the reusable resources identified above: `scripts/`, `references/`, and `assets/` files. Note that this step may require user input. For example, when implementing a `brand-guidelines` skill, the user may need to provide brand assets or templates to store in `assets/`, or documentation to store in `references/`. - -Also, delete any example files and directories not needed for the skill. The initialization script creates example files in `scripts/`, `references/`, and `assets/` to demonstrate structure, but most skills won't need all of them. - -#### Update SKILL.md - -**Writing Style:** Write the entire skill using **imperative/infinitive form** (verb-first instructions), not second person. Use objective, instructional language (e.g., "To accomplish X, do Y" rather than "You should do X" or "If you need to do X"). This maintains consistency and clarity for AI consumption. - -To complete SKILL.md, answer the following questions: - -1. What is the purpose of the skill, in a few sentences? -2. When should the skill be used? -3. In practice, how should Codex use the skill? All reusable skill contents developed above should be referenced so that Codex knows how to use them. - -### Step 5: Packaging a Skill - -Once the skill is ready, it should be packaged into a distributable zip file that gets shared with the user. The packaging process automatically validates the skill first to ensure it meets all requirements: +## Validate and package ```bash -scripts/package_skill.py +python3 .agents/skills/skill-creator/scripts/quick_validate.py .agents/skills/my-skill ``` -Optional output directory specification: +Packaging is optional for repository-local skills. When a distributable archive is requested: ```bash -scripts/package_skill.py ./dist +python3 .agents/skills/skill-creator/scripts/package_skill.py .agents/skills/my-skill /tmp/skill-dist ``` -The packaging script will: - -1. **Validate** the skill automatically, checking: - - YAML frontmatter format and required fields - - Skill naming conventions and directory structure - - Description completeness and quality - - File organization and resource references - -2. **Package** the skill if validation passes, creating a zip file named after the skill (e.g., `my-skill.zip`) that includes all files and maintains the proper directory structure for distribution. - -If validation fails, the script will report the errors and exit without creating a package. Fix any validation errors and run the packaging command again. - -### Step 6: Iterate - -After testing the skill, users may request improvements. Often this happens right after using the skill, with fresh context of how the skill performed. - -**Iteration workflow:** -1. Use the skill on real tasks -2. Notice struggles or inefficiencies -3. Identify how SKILL.md or bundled resources should be updated -4. Implement changes and test again +The validator checks structure and common unfinished-state errors; it cannot prove that workflow facts or external integrations are correct. Perform semantic review and smoke tests separately. diff --git a/.agents/skills/skill-creator/scripts/init_skill.py b/.agents/skills/skill-creator/scripts/init_skill.py old mode 100755 new mode 100644 index 329ad4e5..f4292478 --- a/.agents/skills/skill-creator/scripts/init_skill.py +++ b/.agents/skills/skill-creator/scripts/init_skill.py @@ -1,302 +1,59 @@ #!/usr/bin/env python3 -""" -Skill Initializer - Creates a new skill from template - -Usage: - init_skill.py --path +"""Create a minimal skill scaffold.""" -Examples: - init_skill.py my-new-skill --path skills/public - init_skill.py my-api-helper --path skills/private - init_skill.py custom-skill --path /custom/location -""" - -import sys +import argparse +import re from pathlib import Path +VALID_RESOURCES = {"scripts", "references", "assets"} +NAME_PATTERN = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$") -SKILL_TEMPLATE = """--- -name: {skill_name} -description: [TODO: Complete and informative explanation of what the skill does and when to use it. Include WHEN to use this skill - specific scenarios, file types, or tasks that trigger it.] ---- - -# {skill_title} - -## Overview - -[TODO: 1-2 sentences explaining what this skill enables] - -## Structuring This Skill - -[TODO: Choose the structure that best fits this skill's purpose. Common patterns: - -**1. Workflow-Based** (best for sequential processes) -- Works well when there are clear step-by-step procedures -- Example: DOCX skill with "Workflow Decision Tree" → "Reading" → "Creating" → "Editing" -- Structure: ## Overview → ## Workflow Decision Tree → ## Step 1 → ## Step 2... - -**2. Task-Based** (best for tool collections) -- Works well when the skill offers different operations/capabilities -- Example: PDF skill with "Quick Start" → "Merge PDFs" → "Split PDFs" → "Extract Text" -- Structure: ## Overview → ## Quick Start → ## Task Category 1 → ## Task Category 2... - -**3. Reference/Guidelines** (best for standards or specifications) -- Works well for brand guidelines, coding standards, or requirements -- Example: Brand styling with "Brand Guidelines" → "Colors" → "Typography" → "Features" -- Structure: ## Overview → ## Guidelines → ## Specifications → ## Usage... - -**4. Capabilities-Based** (best for integrated systems) -- Works well when the skill provides multiple interrelated features -- Example: Product Management with "Core Capabilities" → numbered capability list -- Structure: ## Overview → ## Core Capabilities → ### 1. Feature → ### 2. Feature... - -Patterns can be mixed and matched as needed. Most skills combine patterns (e.g., start with task-based, add workflow for complex operations). - -Delete this entire "Structuring This Skill" section when done - it's just guidance.] - -## [TODO: Replace with the first main section based on chosen structure] - -[TODO: Add content here. See examples in existing skills: -- Code samples for technical skills -- Decision trees for complex workflows -- Concrete examples with realistic user requests -- References to scripts/templates/references as needed] - -## Resources - -This skill includes example resource directories that demonstrate how to organize different types of bundled resources: - -### scripts/ -Executable code (Python/Bash/etc.) that can be run directly to perform specific operations. - -**Examples from other skills:** -- PDF skill: `fill_fillable_fields.py`, `extract_form_field_info.py` - utilities for PDF manipulation -- DOCX skill: `document.py`, `utilities.py` - Python modules for document processing - -**Appropriate for:** Python scripts, shell scripts, or any executable code that performs automation, data processing, or specific operations. - -**Note:** Scripts may be executed without loading into context, but can still be read by Claude for patching or environment adjustments. - -### references/ -Documentation and reference material intended to be loaded into context to inform Claude's process and thinking. - -**Examples from other skills:** -- Product management: `communication.md`, `context_building.md` - detailed workflow guides -- BigQuery: API reference documentation and query examples -- Finance: Schema documentation, company policies - -**Appropriate for:** In-depth documentation, API references, database schemas, comprehensive guides, or any detailed information that Claude should reference while working. - -### assets/ -Files not intended to be loaded into context, but rather used within the output Claude produces. - -**Examples from other skills:** -- Brand styling: PowerPoint template files (.pptx), logo files -- Frontend builder: HTML/React boilerplate project directories -- Typography: Font files (.ttf, .woff2) - -**Appropriate for:** Templates, boilerplate code, document templates, images, icons, fonts, or any files meant to be copied or used in the final output. - +TEMPLATE = """--- +name: {name} +description: TODO describe what this skill does and the concrete situations that trigger it. --- -**Any unneeded directories can be deleted.** Not every skill requires all three types of resources. -""" +# {title} -EXAMPLE_SCRIPT = '''#!/usr/bin/env python3 +TODO replace this scaffold with executable instructions, safety boundaries, and validation steps. """ -Example helper script for {skill_name} -This is a placeholder script that can be executed directly. -Replace with actual implementation or delete if not needed. - -Example real scripts from other skills: -- pdf/scripts/fill_fillable_fields.py - Fills PDF form fields -- pdf/scripts/convert_pdf_to_images.py - Converts PDF pages to images -""" def main(): - print("This is an example script for {skill_name}") - # TODO: Add actual script logic here - # This could be data processing, file conversion, API calls, etc. - -if __name__ == "__main__": - main() -''' - -EXAMPLE_REFERENCE = """# Reference Documentation for {skill_title} - -This is a placeholder for detailed reference documentation. -Replace with actual reference content or delete if not needed. - -Example real reference docs from other skills: -- product-management/references/communication.md - Comprehensive guide for status updates -- product-management/references/context_building.md - Deep-dive on gathering context -- bigquery/references/ - API references and query examples - -## When Reference Docs Are Useful - -Reference docs are ideal for: -- Comprehensive API documentation -- Detailed workflow guides -- Complex multi-step processes -- Information too lengthy for main SKILL.md -- Content that's only needed for specific use cases - -## Structure Suggestions - -### API Reference Example -- Overview -- Authentication -- Endpoints with examples -- Error codes -- Rate limits - -### Workflow Guide Example -- Prerequisites -- Step-by-step instructions -- Common patterns -- Troubleshooting -- Best practices -""" - -EXAMPLE_ASSET = """# Example Asset File - -This placeholder represents where asset files would be stored. -Replace with actual asset files (templates, images, fonts, etc.) or delete if not needed. - -Asset files are NOT intended to be loaded into context, but rather used within -the output Claude produces. - -Example asset files from other skills: -- Brand guidelines: logo.png, slides_template.pptx -- Frontend builder: hello-world/ directory with HTML/React boilerplate -- Typography: custom-font.ttf, font-family.woff2 -- Data: sample_data.csv, test_dataset.json - -## Common Asset Types - -- Templates: .pptx, .docx, boilerplate directories -- Images: .png, .jpg, .svg, .gif -- Fonts: .ttf, .otf, .woff, .woff2 -- Boilerplate code: Project directories, starter files -- Icons: .ico, .svg -- Data files: .csv, .json, .xml, .yaml - -Note: This is a text placeholder. Actual assets can be any file type. -""" - - -def title_case_skill_name(skill_name): - """Convert hyphenated skill name to Title Case for display.""" - return ' '.join(word.capitalize() for word in skill_name.split('-')) - - -def init_skill(skill_name, path): - """ - Initialize a new skill directory with template SKILL.md. + parser = argparse.ArgumentParser(description="Create a minimal skill scaffold") + parser.add_argument("name") + parser.add_argument("--path", required=True, help="Parent directory for the skill") + parser.add_argument( + "--resources", + default="", + help="Comma-separated optional directories: scripts,references,assets", + ) + args = parser.parse_args() - Args: - skill_name: Name of the skill - path: Path where the skill directory should be created + if not NAME_PATTERN.fullmatch(args.name) or len(args.name) > 64: + parser.error("name must be hyphen-case and at most 64 characters") - Returns: - Path to created skill directory, or None if error - """ - # Determine skill directory path - skill_dir = Path(path).resolve() / skill_name + resources = {item.strip() for item in args.resources.split(",") if item.strip()} + unknown = resources - VALID_RESOURCES + if unknown: + parser.error(f"unknown resources: {', '.join(sorted(unknown))}") - # Check if directory already exists + skill_dir = Path(args.path).resolve() / args.name if skill_dir.exists(): - print(f"❌ Error: Skill directory already exists: {skill_dir}") - return None + parser.error(f"skill directory already exists: {skill_dir}") - # Create skill directory - try: - skill_dir.mkdir(parents=True, exist_ok=False) - print(f"✅ Created skill directory: {skill_dir}") - except Exception as e: - print(f"❌ Error creating directory: {e}") - return None - - # Create SKILL.md from template - skill_title = title_case_skill_name(skill_name) - skill_content = SKILL_TEMPLATE.format( - skill_name=skill_name, - skill_title=skill_title + skill_dir.mkdir(parents=True) + title = " ".join(word.capitalize() for word in args.name.split("-")) + (skill_dir / "SKILL.md").write_text( + TEMPLATE.format(name=args.name, title=title), encoding="utf-8" ) + for resource in sorted(resources): + (skill_dir / resource).mkdir() - skill_md_path = skill_dir / 'SKILL.md' - try: - skill_md_path.write_text(skill_content) - print("✅ Created SKILL.md") - except Exception as e: - print(f"❌ Error creating SKILL.md: {e}") - return None - - # Create resource directories with example files - try: - # Create scripts/ directory with example script - scripts_dir = skill_dir / 'scripts' - scripts_dir.mkdir(exist_ok=True) - example_script = scripts_dir / 'example.py' - example_script.write_text(EXAMPLE_SCRIPT.format(skill_name=skill_name)) - example_script.chmod(0o755) - print("✅ Created scripts/example.py") - - # Create references/ directory with example reference doc - references_dir = skill_dir / 'references' - references_dir.mkdir(exist_ok=True) - example_reference = references_dir / 'api_reference.md' - example_reference.write_text(EXAMPLE_REFERENCE.format(skill_title=skill_title)) - print("✅ Created references/api_reference.md") - - # Create assets/ directory with example asset placeholder - assets_dir = skill_dir / 'assets' - assets_dir.mkdir(exist_ok=True) - example_asset = assets_dir / 'example_asset.txt' - example_asset.write_text(EXAMPLE_ASSET) - print("✅ Created assets/example_asset.txt") - except Exception as e: - print(f"❌ Error creating resource directories: {e}") - return None - - # Print next steps - print(f"\n✅ Skill '{skill_name}' initialized successfully at {skill_dir}") - print("\nNext steps:") - print("1. Edit SKILL.md to complete the TODO items and update the description") - print("2. Customize or delete the example files in scripts/, references/, and assets/") - print("3. Run the validator when ready to check the skill structure") - - return skill_dir - - -def main(): - if len(sys.argv) < 4 or sys.argv[2] != '--path': - print("Usage: init_skill.py --path ") - print("\nSkill name requirements:") - print(" - Hyphen-case identifier (e.g., 'data-analyzer')") - print(" - Lowercase letters, digits, and hyphens only") - print(" - Max 40 characters") - print(" - Must match directory name exactly") - print("\nExamples:") - print(" init_skill.py my-new-skill --path skills/public") - print(" init_skill.py my-api-helper --path skills/private") - print(" init_skill.py custom-skill --path /custom/location") - sys.exit(1) - - skill_name = sys.argv[1] - path = sys.argv[3] - - print(f"🚀 Initializing skill: {skill_name}") - print(f" Location: {path}") - print() - - result = init_skill(skill_name, path) - - if result: - sys.exit(0) - else: - sys.exit(1) + print(f"Created minimal skill scaffold: {skill_dir}") + if resources: + print(f"Created resource directories: {', '.join(sorted(resources))}") + print("Replace TODOs, then run quick_validate.py and representative smoke tests.") if __name__ == "__main__": diff --git a/.agents/skills/skill-creator/scripts/package_skill.py b/.agents/skills/skill-creator/scripts/package_skill.py index 3ee8e8e9..69c53344 100755 --- a/.agents/skills/skill-creator/scripts/package_skill.py +++ b/.agents/skills/skill-creator/scripts/package_skill.py @@ -3,11 +3,10 @@ Skill Packager - Creates a distributable zip file of a skill folder Usage: - python utils/package_skill.py [output-directory] + python3 package_skill.py [output-directory] Example: - python utils/package_skill.py skills/public/my-skill - python utils/package_skill.py skills/public/my-skill ./dist + python3 package_skill.py .agents/skills/my-skill /tmp/skill-dist """ import sys @@ -15,6 +14,9 @@ from pathlib import Path from quick_validate import validate_skill +TRANSIENT_NAMES = {".DS_Store", "__pycache__"} +TRANSIENT_SUFFIXES = {".pyc", ".pyo"} + def package_skill(skill_path, output_dir=None): """ @@ -57,6 +59,9 @@ def package_skill(skill_path, output_dir=None): skill_name = skill_path.name if output_dir: output_path = Path(output_dir).resolve() + if output_path == skill_path or skill_path in output_path.parents: + print("❌ Error: output directory cannot be inside the skill directory") + return None output_path.mkdir(parents=True, exist_ok=True) else: output_path = Path.cwd() @@ -65,13 +70,17 @@ def package_skill(skill_path, output_dir=None): # Create the zip file try: - with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: + with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as archive: # Walk through the skill directory - for file_path in skill_path.rglob('*'): - if file_path.is_file(): + for file_path in sorted(skill_path.rglob('*')): + relative_parts = file_path.relative_to(skill_path).parts + is_transient = any(part in TRANSIENT_NAMES for part in relative_parts) or ( + file_path.suffix in TRANSIENT_SUFFIXES + ) + if file_path.is_file() and not is_transient: # Calculate the relative path within the zip arcname = file_path.relative_to(skill_path.parent) - zipf.write(file_path, arcname) + archive.write(file_path, arcname) print(f" Added: {arcname}") print(f"\n✅ Successfully packaged skill to: {zip_filename}") @@ -84,10 +93,9 @@ def package_skill(skill_path, output_dir=None): def main(): if len(sys.argv) < 2: - print("Usage: python utils/package_skill.py [output-directory]") + print("Usage: python3 package_skill.py [output-directory]") print("\nExample:") - print(" python utils/package_skill.py skills/public/my-skill") - print(" python utils/package_skill.py skills/public/my-skill ./dist") + print(" python3 package_skill.py .agents/skills/my-skill /tmp/skill-dist") sys.exit(1) skill_path = sys.argv[1] diff --git a/.agents/skills/skill-creator/scripts/quick_validate.py b/.agents/skills/skill-creator/scripts/quick_validate.py old mode 100755 new mode 100644 index af63613a..d8757b4d --- a/.agents/skills/skill-creator/scripts/quick_validate.py +++ b/.agents/skills/skill-creator/scripts/quick_validate.py @@ -1,65 +1,73 @@ #!/usr/bin/env python3 -""" -Quick validation script for skills - minimal version -""" +"""Fast structural validation for a skill directory.""" -import sys -import os import re +import sys from pathlib import Path -def validate_skill(skill_path): - """Basic validation of a skill""" - skill_path = Path(skill_path) +NAME_PATTERN = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$") - # Check SKILL.md exists - skill_md = skill_path / 'SKILL.md' - if not skill_md.exists(): - return False, "SKILL.md not found" - - # Read and validate frontmatter - content = skill_md.read_text() - if not content.startswith('---'): - return False, "No YAML frontmatter found" - # Extract frontmatter - match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL) +def parse_frontmatter(content: str): + match = re.match(r"\A---\r?\n(.*?)\r?\n---(?:\r?\n|\Z)", content, re.DOTALL) if not match: - return False, "Invalid frontmatter format" + return None, "SKILL.md must start with a closed YAML frontmatter block" - frontmatter = match.group(1) + values = {} + for line in match.group(1).splitlines(): + if not line.strip() or line.lstrip().startswith("#"): + continue + field = re.match(r"^([A-Za-z][A-Za-z0-9_-]*):\s*(.*)$", line) + if not field: + return None, f"Unsupported frontmatter line: {line}" + key, value = field.groups() + values[key] = value.strip().strip('"\'') + return (values, match.end()), None - # Check required fields - if 'name:' not in frontmatter: - return False, "Missing 'name' in frontmatter" - if 'description:' not in frontmatter: - return False, "Missing 'description' in frontmatter" - # Extract name for validation - name_match = re.search(r'name:\s*(.+)', frontmatter) - if name_match: - name = name_match.group(1).strip() - # Check naming convention (hyphen-case: lowercase with hyphens) - if not re.match(r'^[a-z0-9-]+$', name): - return False, f"Name '{name}' should be hyphen-case (lowercase letters, digits, and hyphens only)" - if name.startswith('-') or name.endswith('-') or '--' in name: - return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens" +def validate_skill(skill_path): + skill_path = Path(skill_path) + errors = [] + if not skill_path.exists() or not skill_path.is_dir(): + return False, f"Skill directory not found: {skill_path}" + + skill_md = skill_path / "SKILL.md" + if not skill_md.is_file(): + return False, "SKILL.md not found" - # Extract and validate description - desc_match = re.search(r'description:\s*(.+)', frontmatter) - if desc_match: - description = desc_match.group(1).strip() - # Check for angle brackets - if '<' in description or '>' in description: - return False, "Description cannot contain angle brackets (< or >)" + content = skill_md.read_text(encoding="utf-8") + parsed, error = parse_frontmatter(content) + if error: + return False, error + frontmatter, body_start = parsed + + name = frontmatter.get("name", "") + description = frontmatter.get("description", "") + if not NAME_PATTERN.fullmatch(name) or len(name) > 64: + errors.append("name must be a hyphen-case identifier of at most 64 characters") + if name != skill_path.name: + errors.append(f"frontmatter name '{name}' must match directory name '{skill_path.name}'") + if not 20 <= len(description) <= 1024: + errors.append("description must be 20-1024 characters") + if "<" in description or ">" in description: + errors.append("description cannot contain angle brackets") + if "TODO" in description or "[TODO" in content: + errors.append("replace all TODO placeholders before validation") + if not content[body_start:].strip(): + errors.append("SKILL.md must contain instructions after frontmatter") + + for item in skill_path.rglob("*"): + if item.is_symlink(): + errors.append(f"symbolic links are not allowed in packaged skills: {item.relative_to(skill_path)}") + if errors: + return False, "\n- ".join(["Skill validation failed:", *errors]) + return True, "Skill structure is valid" - return True, "Skill is valid!" if __name__ == "__main__": if len(sys.argv) != 2: - print("Usage: python quick_validate.py ") + print("Usage: python3 quick_validate.py ") sys.exit(1) - valid, message = validate_skill(sys.argv[1]) print(message) sys.exit(0 if valid else 1) diff --git a/cspell.json b/cspell.json index 3a5e07ed..9103a7af 100644 --- a/cspell.json +++ b/cspell.json @@ -53,9 +53,20 @@ "sağlayıcılı", "ccstatusline", "API'lerle", + "acli", "aracidir", + "glab", + "Rovo", + "rovo", + "rovodev", + "Zcode", + "zcode", "Anthropics", "BYOK", + "Codestral", + "codestral", + "Devstral", + "devstral", "Benefíciate", "BMAD", "CI'nizde", @@ -103,6 +114,8 @@ "Kimi", "Kiro", "Kode", + "lmstudio", + "multiherramienta", "komutlari", "kullaniminda", "Kuik", @@ -111,10 +124,13 @@ "Mengkonversi", "mengorkestrasi", "Moonshot", + "SpaceXAI", "moonshotai", "Optimierung", "Optimizasyonlar", "Porcentagem", + "refactoriser", + "refatorar", "Pulumi", "Qoder", "Qwen", @@ -134,6 +150,7 @@ "Vervollständigungstool", "agentco", "agentische", + "agentisches", "agentico", "agentischer", "agenticen", @@ -164,6 +181,7 @@ "autó", "autono", "autônoma", + "autônomas", "autônomo", "autônomos", "ayiklama", diff --git a/data/changelogs.json b/data/changelogs.json index cf26eb3e..7a1111e8 100644 --- a/data/changelogs.json +++ b/data/changelogs.json @@ -134,6 +134,4038 @@ } ] }, + { + "id": "2026-07-21-manifest-update", + "date": "2026-07-21", + "summary": "183 manifest records changed", + "changes": [ + { + "category": "clis", + "id": "claude-code-cli", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "clis", + "id": "codex-cli", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "clis", + "id": "deepv-code", + "change": "updated", + "fields": [ + "githubUrl", + "resourceUrls", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "clis", + "id": "droid-cli", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "clis", + "id": "gitlab-duo-cli", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "clis", + "id": "grok-build", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "clis", + "id": "junie-cli", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "clis", + "id": "kimi-cli", + "change": "updated", + "fields": [ + "communityUrls", + "description", + "docsUrl", + "githubUrl", + "latestVersion", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "translations", + "websiteUrl", + "confidence", + "familyId", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "clis", + "id": "mistral-vibe-cli", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "clis", + "id": "omp", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "clis", + "id": "opencode", + "change": "updated", + "fields": [ + "communityUrls", + "githubUrl", + "relatedProducts", + "resourceUrls", + "vendor", + "familyId" + ] + }, + { + "category": "clis", + "id": "qoder-cli", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "clis", + "id": "qwen-code", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "clis", + "id": "rovo-dev-cli", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "air", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "claude-code-desktop", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "codex-app", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "factory-desktop", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "minimax-code", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "opencode-desktop", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "qoder", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "stagewise", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "trae-work", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "verdent-deck", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "workbuddy", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "desktops", + "id": "zcode", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "extensions", + "id": "claude-code", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "extensions", + "id": "codex", + "change": "updated", + "fields": [ + "communityUrls", + "docsUrl", + "githubUrl", + "latestVersion", + "license", + "relatedProducts", + "resourceUrls", + "confidence", + "familyId", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "extensions", + "id": "droid", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "extensions", + "id": "jetbrains-junie", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "extensions", + "id": "kimi-code", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "supportedIdes", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "extensions", + "id": "mistral-vibe", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "supportedIdes", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "extensions", + "id": "opencode-extension", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "supportedIdes", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "extensions", + "id": "qoder", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "extensions", + "id": "rovo-dev", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "docsUrl", + "familyId", + "githubUrl", + "id", + "lastVerifiedAt", + "latestVersion", + "license", + "name", + "pricing", + "relatedProducts", + "resourceUrls", + "sources", + "supportedIdes", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "extensions", + "id": "verdent", + "change": "updated", + "fields": ["relatedProducts", "familyId"] + }, + { + "category": "ides", + "id": "air", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "docsUrl", + "githubUrl", + "id", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "translations", + "vendor", + "verified", + "websiteUrl" + ] + }, + { + "category": "ides", + "id": "qoder", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "docsUrl", + "githubUrl", + "id", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "translations", + "vendor", + "verified", + "websiteUrl" + ] + }, + { + "category": "ides", + "id": "trae", + "change": "updated", + "fields": [ + "latestVersion", + "name", + "pricing", + "relatedProducts", + "websiteUrl", + "confidence", + "familyId", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "ides", + "id": "verdent-deck", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "docsUrl", + "githubUrl", + "id", + "latestVersion", + "license", + "name", + "platforms", + "pricing", + "relatedProducts", + "resourceUrls", + "translations", + "vendor", + "verified", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-fable-5", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "claude-haiku-3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-haiku-3-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-haiku-4-5", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "claude-mythos-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-opus-3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-opus-4", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "claude-opus-4-1", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "claude-opus-4-5", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "claude-opus-4-6", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-opus-4-7", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-opus-4-8", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "claude-sonnet-3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-sonnet-3-5-20240620", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-sonnet-3-5-20241022", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-sonnet-3-7", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-sonnet-4", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "claude-sonnet-4-5", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "claude-sonnet-4-6", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "claude-sonnet-5", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "codestral-2405", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "codestral-2501", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "codestral-2508", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "composer", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "cursor-composer-2", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "cursor-composer-2-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "deepseek-3-2", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "verified", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "deepseek-coder-v2-0724", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "deepseek-r1", + "change": "updated", + "fields": [ + "contextWindow", + "description", + "lifecycle", + "maxOutput", + "releaseDate", + "tokenPricing", + "verified", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "deepseek-r1-0528", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "deepseek-v3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "deepseek-v3-1", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "deepseek-v3-2-exp", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "deepseek-v3-terminus", + "change": "updated", + "fields": [ + "contextWindow", + "description", + "lifecycle", + "maxOutput", + "releaseDate", + "tokenPricing", + "verified", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "deepseek-v4-flash", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "deepseek-v4-pro", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "devstral-2", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "devstral-medium-1-0", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "devstral-small-1-0", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "devstral-small-1-1", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "devstral-small-2", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gemini-2-0-flash", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gemini-2-0-flash-lite", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gemini-2-5-flash", + "change": "updated", + "fields": [ + "knowledgeCutoff", + "releaseDate", + "size", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "gemini-2-5-flash-lite", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gemini-2-5-pro", + "change": "updated", + "fields": [ + "knowledgeCutoff", + "releaseDate", + "size", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "gemini-3-1-flash-lite", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gemini-3-1-pro-preview", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gemini-3-5-flash", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gemini-3-flash", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gemini-3-pro", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "glm-4-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "glm-4-6", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "glm-4-6v", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "glm-4-7", + "change": "updated", + "fields": [ + "description", + "docsUrl", + "knowledgeCutoff", + "lifecycle", + "tokenPricing", + "translations", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "glm-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "glm-5-1", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "glm-5-2", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-4-1", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-4-1-mini", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-4-1-nano", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-4o", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-4o-mini", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-1", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-1-codex", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-1-codex-max", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-1-codex-mini", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-2", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-2-codex", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-2-pro", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-3-codex", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-4", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-4-mini", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-4-nano", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-4-pro", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-5-pro", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-6-luna", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-6-sol", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-6-terra", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-codex", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "gpt-5-mini", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-nano", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "gpt-5-pro", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-4", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-4-1-fast", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-4-20", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-4-3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-4-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-4-fast", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-build-0-1", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "grok-code-fast-1", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "kat-coder-pro-v1", + "change": "updated", + "fields": ["benchmarks", "tokenPricing", "vendor"] + }, + { + "category": "models", + "id": "kimi-dev-72b", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "kimi-k2-0905", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "kimi-k2-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "kimi-k2-6", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "kimi-k2-7-code", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "kimi-k2-instruct", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "kimi-k2-thinking", + "change": "updated", + "fields": [ + "lifecycle", + "tokenPricing", + "confidence", + "lastVerifiedAt", + "sources", + "verifiedBy" + ] + }, + { + "category": "models", + "id": "kimi-k3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "llama-4-maverick", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "llama-4-scout", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "minimax-m2", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "minimax-m2-1", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "minimax-m2-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "minimax-m2-7", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "minimax-m3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "mistral-medium-3-5", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "mistral-small-4", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "muse-spark-1-1", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "o3", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "o3-mini", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "o4-mini", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "qwen3-5-plus", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "qwen3-6-plus", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "qwen3-7-max", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "qwen3-7-plus", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "qwen3-coder-30b-a3b", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "qwen3-coder-480b-a35b", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "qwen3-coder-flash", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "qwen3-coder-next", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "models", + "id": "qwen3-coder-plus", + "change": "updated", + "fields": ["tokenPricing"] + }, + { + "category": "models", + "id": "qwen3-max-2026-01-23", + "change": "added", + "fields": [ + "benchmarks", + "capabilities", + "confidence", + "contextWindow", + "description", + "docsUrl", + "id", + "inputModalities", + "knowledgeCutoff", + "lastVerifiedAt", + "lifecycle", + "maxOutput", + "name", + "outputModalities", + "platformUrls", + "releaseDate", + "size", + "sources", + "tokenPricing", + "translations", + "vendor", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "providers", + "id": "kwaikatonai", + "change": "updated", + "fields": ["vendor"] + }, + { + "category": "vendors", + "id": "anomaly", + "change": "added", + "fields": [ + "aliases", + "communityUrls", + "confidence", + "description", + "id", + "lastVerifiedAt", + "name", + "sources", + "translations", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "atlassian", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "id", + "lastVerifiedAt", + "name", + "sources", + "translations", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "cline", + "change": "updated", + "fields": ["aliases"] + }, + { + "category": "vendors", + "id": "cline-bot", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "id", + "name", + "translations", + "verified", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "continue", + "change": "updated", + "fields": ["aliases"] + }, + { + "category": "vendors", + "id": "continue-dev", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "id", + "name", + "translations", + "verified", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "factory-ai", + "change": "updated", + "fields": ["aliases"] + }, + { + "category": "vendors", + "id": "gitlab", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "id", + "lastVerifiedAt", + "name", + "sources", + "translations", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "kwai", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "id", + "name", + "translations", + "verified", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "kwaikat", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "id", + "name", + "translations", + "verified", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "mistral-ai", + "change": "added", + "fields": [ + "aliases", + "communityUrls", + "confidence", + "description", + "id", + "lastVerifiedAt", + "name", + "sources", + "translations", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "moonshot", + "change": "updated", + "fields": ["name", "aliases"] + }, + { + "category": "vendors", + "id": "moonshot-ai", + "change": "removed", + "fields": [ + "communityUrls", + "description", + "id", + "name", + "translations", + "verified", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "oh-my-pi", + "change": "added", + "fields": [ + "aliases", + "communityUrls", + "confidence", + "description", + "id", + "lastVerifiedAt", + "name", + "sources", + "translations", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "stagewise", + "change": "added", + "fields": [ + "communityUrls", + "confidence", + "description", + "id", + "lastVerifiedAt", + "name", + "sources", + "translations", + "verified", + "verifiedBy", + "websiteUrl" + ] + }, + { + "category": "vendors", + "id": "streamlake", + "change": "updated", + "fields": ["aliases"] + }, + { + "category": "vendors", + "id": "z-ai", + "change": "updated", + "fields": ["aliases"] + } + ] + }, { "id": "2026-07-20-latest-models", "date": "2026-07-20", diff --git a/data/data-health.json b/data/data-health.json index bb340f6f..a68e9eda 100644 --- a/data/data-health.json +++ b/data/data-health.json @@ -1,51 +1,58 @@ { - "asOf": "2026-07-20", + "asOf": "2026-07-21", "thresholds": { "models": 30, "providers": 30, "ides": 60, "clis": 60, + "desktops": 60, "extensions": 60, "vendors": 90 }, "summary": { - "totalRecords": 143, - "recordsWithSources": 18, - "verifiedRecords": 48, - "provenanceComplete": 18, + "totalRecords": 247, + "recordsWithSources": 149, + "verifiedRecords": 135, + "provenanceComplete": 117, "staleVerifiedRecords": 0, - "translationPlaceholderValues": 1411, + "translationPlaceholderValues": 1506, "danglingRelationships": 0, - "modelBenchmarkCoverage": 22.4, - "productsWithPricing": 48, - "productRecords": 48, + "modelBenchmarkCoverage": 9.7, + "productsWithPricing": 67, + "productRecords": 68, "errors": 0, - "warnings": 30, - "info": 125 + "warnings": 18, + "info": 98 }, "byCategory": { "ides": { - "total": 13, + "total": 10, "verified": 0, "provenanceComplete": 0, "stale": 0 }, "clis": { - "total": 20, + "total": 27, "verified": 2, "provenanceComplete": 1, "stale": 0 }, + "desktops": { + "total": 12, + "verified": 0, + "provenanceComplete": 0, + "stale": 0 + }, "extensions": { - "total": 15, + "total": 19, "verified": 3, "provenanceComplete": 2, "stale": 0 }, "models": { - "total": 42, - "verified": 37, - "provenanceComplete": 12, + "total": 125, + "verified": 123, + "provenanceComplete": 110, "stale": 0 }, "providers": { @@ -55,67 +62,67 @@ "stale": 0 }, "vendors": { - "total": 40, - "verified": 2, - "provenanceComplete": 0, + "total": 41, + "verified": 3, + "provenanceComplete": 1, "stale": 0 } }, "translationsByLocale": { "de": { - "totalStrings": 329, - "matchingEnglish": 120, - "matchingEnglishPercent": 36.5 + "totalStrings": 362, + "matchingEnglish": 130, + "matchingEnglishPercent": 35.9 }, "es": { - "totalStrings": 329, - "matchingEnglish": 116, - "matchingEnglishPercent": 35.3 + "totalStrings": 362, + "matchingEnglish": 126, + "matchingEnglishPercent": 34.8 }, "fr": { - "totalStrings": 329, - "matchingEnglish": 126, - "matchingEnglishPercent": 38.3 + "totalStrings": 362, + "matchingEnglish": 136, + "matchingEnglishPercent": 37.6 }, "id": { - "totalStrings": 329, - "matchingEnglish": 160, - "matchingEnglishPercent": 48.6 + "totalStrings": 362, + "matchingEnglish": 170, + "matchingEnglishPercent": 47 }, "ja": { - "totalStrings": 329, - "matchingEnglish": 117, - "matchingEnglishPercent": 35.6 + "totalStrings": 362, + "matchingEnglish": 122, + "matchingEnglishPercent": 33.7 }, "ko": { - "totalStrings": 329, - "matchingEnglish": 133, - "matchingEnglishPercent": 40.4 + "totalStrings": 362, + "matchingEnglish": 141, + "matchingEnglishPercent": 39 }, "pt": { - "totalStrings": 329, - "matchingEnglish": 126, - "matchingEnglishPercent": 38.3 + "totalStrings": 362, + "matchingEnglish": 136, + "matchingEnglishPercent": 37.6 }, "ru": { - "totalStrings": 329, - "matchingEnglish": 142, - "matchingEnglishPercent": 43.2 + "totalStrings": 362, + "matchingEnglish": 150, + "matchingEnglishPercent": 41.4 }, "tr": { - "totalStrings": 329, - "matchingEnglish": 142, - "matchingEnglishPercent": 43.2 + "totalStrings": 362, + "matchingEnglish": 150, + "matchingEnglishPercent": 41.4 }, "zh-Hans": { - "totalStrings": 329, - "matchingEnglish": 116, - "matchingEnglishPercent": 35.3 + "totalStrings": 362, + "matchingEnglish": 124, + "matchingEnglishPercent": 34.3 }, "zh-Hant": { - "totalStrings": 329, - "matchingEnglish": 113, - "matchingEnglishPercent": 34.3 + "totalStrings": 362, + "matchingEnglish": 121, + "matchingEnglishPercent": 33.4 } }, "issues": [ @@ -133,62 +140,6 @@ "id": "kilo-code", "message": "Verified record is missing sources, review date, reviewer, or confidence." }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "claude-opus-4", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "claude-opus-4-1", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "claude-opus-4-5", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "claude-sonnet-4", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "claude-sonnet-4-5", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "gemini-2-5-flash", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "gemini-2-5-pro", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "gemini-3-pro", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, { "severity": "warning", "code": "verified-without-provenance", @@ -203,13 +154,6 @@ "id": "glm-4-6v", "message": "Verified record is missing sources, review date, reviewer, or confidence." }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "glm-4-7", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, { "severity": "warning", "code": "verified-without-provenance", @@ -252,27 +196,6 @@ "id": "gpt-5-codex", "message": "Verified record is missing sources, review date, reviewer, or confidence." }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "grok-code-fast-1", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "kimi-k2-0905", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, - { - "severity": "warning", - "code": "verified-without-provenance", - "category": "models", - "id": "kimi-k2-thinking", - "message": "Verified record is missing sources, review date, reviewer, or confidence." - }, { "severity": "warning", "code": "verified-without-provenance", @@ -385,13 +308,6 @@ "id": "cursor-cli", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "clis", - "id": "deepv-code", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -420,13 +336,6 @@ "id": "kilo-code-cli", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "clis", - "id": "kimi-cli", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -483,13 +392,6 @@ "id": "cline", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "extensions", - "id": "codex", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -553,13 +455,6 @@ "id": "verdent", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "ides", - "id": "air", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -602,27 +497,6 @@ "id": "kiro", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "ides", - "id": "qoder", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "ides", - "id": "trae", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "ides", - "id": "verdent-deck", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -644,41 +518,6 @@ "id": "zed", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "claude-opus-4", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "claude-opus-4-1", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "claude-opus-4-5", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "claude-sonnet-4", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "claude-sonnet-4-5", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -686,48 +525,6 @@ "id": "composer", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "deepseek-3-2", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "deepseek-r1", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "deepseek-v3-terminus", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "gemini-2-5-flash", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "gemini-2-5-pro", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "gemini-3-pro", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -742,13 +539,6 @@ "id": "glm-4-6v", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "glm-4-7", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -791,13 +581,6 @@ "id": "gpt-5-codex", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "grok-code-fast-1", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -805,20 +588,6 @@ "id": "kat-coder-pro-v1", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "kimi-k2-0905", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "models", - "id": "kimi-k2-thinking", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -980,13 +749,6 @@ "id": "cline", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "vendors", - "id": "cline-bot", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -1001,13 +763,6 @@ "id": "continue", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "vendors", - "id": "continue-dev", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -1050,20 +805,6 @@ "id": "kilo", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "vendors", - "id": "kwai", - "message": "No structured source references are recorded." - }, - { - "severity": "info", - "code": "missing-sources", - "category": "vendors", - "id": "kwaikat", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", @@ -1092,13 +833,6 @@ "id": "moonshot", "message": "No structured source references are recorded." }, - { - "severity": "info", - "code": "missing-sources", - "category": "vendors", - "id": "moonshot-ai", - "message": "No structured source references are recorded." - }, { "severity": "info", "code": "missing-sources", diff --git a/data/github-stars.json b/data/github-stars.json index 1474f558..fce967da 100644 --- a/data/github-stars.json +++ b/data/github-stars.json @@ -2,17 +2,21 @@ "extensions": { "amp": null, "augment-code": null, - "claude-code": 138.4, - "cline": 64.8, - "codex": 99.7, + "claude-code": 138.5, + "cline": 64.9, + "codex": null, "continue": 35, "droid": null, "gemini-code-assist": null, "github-copilot": null, "jetbrains-junie": null, "kilo-code": 26.4, + "kimi-code": 4.3, + "mistral-vibe": null, + "opencode-extension": 188.2, "qoder": null, "roo-code": 24.4, + "rovo-dev": null, "tabnine": 10.8, "verdent": 0 }, @@ -20,36 +24,54 @@ "amazon-q-developer-cli": 2, "amp-cli": null, "augment-code-cli": 0.3, - "claude-code-cli": 138.4, + "claude-code-cli": 138.5, "cline-cli": null, "codebuddy-cli": null, - "codex-cli": 99.7, + "codex-cli": 100.3, "continue-cli": 35, - "cursor-cli": 33, + "cursor-cli": 33.1, "deepv-code": 0.4, "droid-cli": null, "gemini-cli": 106.1, "github-copilot-cli": 11, + "gitlab-duo-cli": null, + "grok-build": null, + "junie-cli": null, "kilo-code-cli": 26.4, - "kimi-cli": 9.9, - "kiro-cli": 4, + "kimi-cli": 4.3, + "kiro-cli": 4.1, "kode": 5.2, + "mistral-vibe-cli": null, "neovate-code": 1.6, - "opencode": null, - "qoder-cli": null + "opencode": 188.2, + "omp": 18.9, + "qoder-cli": null, + "qwen-code": 26.2, + "rovo-dev-cli": null }, - "ides": { + "desktops": { "air": null, + "claude-code-desktop": 138.5, + "codex-app": null, + "factory-desktop": null, + "minimax-code": null, + "opencode-desktop": 188.2, + "qoder": null, + "stagewise": 6.7, + "trae-work": null, + "verdent-deck": 0, + "workbuddy": null, + "zcode": null + }, + "ides": { "antigravity": null, "codebuddy": null, "codeflicker": null, - "cursor": 33, + "cursor": 33.1, "intellij-idea": 20.4, - "kiro": 4, - "qoder": null, + "kiro": 4.1, "trae": null, - "verdent-deck": 0, - "vscode": 187.7, + "vscode": 187.8, "windsurf": null, "zed": 87.3 }, diff --git a/docs/DATA-HEALTH.md b/docs/DATA-HEALTH.md index 2f31a8e8..dcecbed5 100644 --- a/docs/DATA-HEALTH.md +++ b/docs/DATA-HEALTH.md @@ -1,32 +1,33 @@ # Data Health Report -Snapshot date: 2026-07-20. Regenerate with `npm run data-health:report`. +Snapshot date: 2026-07-21. Regenerate with `npm run data-health:report`. ## Scorecard | Metric | Value | | --- | ---: | -| Manifest records | 143 | -| Records with structured sources | 18 | -| Verified records | 48 | -| Verified with complete provenance | 18 | +| Manifest records | 247 | +| Records with structured sources | 149 | +| Verified records | 135 | +| Verified with complete provenance | 117 | | Stale verified records | 0 | -| Non-English values identical to English | 1411 | +| Non-English values identical to English | 1506 | | Dangling product relationships | 0 | -| Model benchmark coverage | 22.4% | -| Products with pricing | 48/48 | -| Errors / warnings / info | 0 / 30 / 125 | +| Model benchmark coverage | 9.7% | +| Products with pricing | 67/68 | +| Errors / warnings / info | 0 / 18 / 98 | ## Category Breakdown | Category | Total | Verified | Provenance complete | Stale | | --- | ---: | ---: | ---: | ---: | -| ides | 13 | 0 | 0 | 0 | -| clis | 20 | 2 | 1 | 0 | -| extensions | 15 | 3 | 2 | 0 | -| models | 42 | 37 | 12 | 0 | +| ides | 10 | 0 | 0 | 0 | +| clis | 27 | 2 | 1 | 0 | +| desktops | 12 | 0 | 0 | 0 | +| extensions | 19 | 3 | 2 | 0 | +| models | 125 | 123 | 110 | 0 | | providers | 13 | 4 | 3 | 0 | -| vendors | 40 | 2 | 0 | 0 | +| vendors | 41 | 3 | 1 | 0 | ## Translation Placeholder Proxy @@ -34,24 +35,24 @@ Exact English matches are a triage signal; product names and technical terms can | Locale | Comparable strings | Exact English matches | Match rate | | --- | ---: | ---: | ---: | -| de | 329 | 120 | 36.5% | -| es | 329 | 116 | 35.3% | -| fr | 329 | 126 | 38.3% | -| id | 329 | 160 | 48.6% | -| ja | 329 | 117 | 35.6% | -| ko | 329 | 133 | 40.4% | -| pt | 329 | 126 | 38.3% | -| ru | 329 | 142 | 43.2% | -| tr | 329 | 142 | 43.2% | -| zh-Hans | 329 | 116 | 35.3% | -| zh-Hant | 329 | 113 | 34.3% | +| de | 362 | 130 | 35.9% | +| es | 362 | 126 | 34.8% | +| fr | 362 | 136 | 37.6% | +| id | 362 | 170 | 47% | +| ja | 362 | 122 | 33.7% | +| ko | 362 | 141 | 39% | +| pt | 362 | 136 | 37.6% | +| ru | 362 | 150 | 41.4% | +| tr | 362 | 150 | 41.4% | +| zh-Hans | 362 | 124 | 34.3% | +| zh-Hant | 362 | 121 | 33.4% | ## Backlog by Issue Type | Issue | Count | | --- | ---: | -| missing-sources | 125 | -| verified-without-provenance | 30 | +| missing-sources | 98 | +| verified-without-provenance | 18 | ## Priority Queue @@ -62,26 +63,14 @@ visible in the scorecards and `data/data-health.json`. | --- | --- | --- | --- | | warning | verified-without-provenance | clis/kilo-code-cli | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | extensions/kilo-code | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/claude-opus-4 | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/claude-opus-4-1 | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/claude-opus-4-5 | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/claude-sonnet-4 | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/claude-sonnet-4-5 | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/gemini-2-5-flash | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/gemini-2-5-pro | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/gemini-3-pro | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/glm-4-6 | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/glm-4-6v | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/glm-4-7 | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/gpt-4-1 | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/gpt-4o | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/gpt-5 | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/gpt-5-1 | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/gpt-5-1-codex | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/gpt-5-codex | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/grok-code-fast-1 | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/kimi-k2-0905 | Verified record is missing sources, review date, reviewer, or confidence. | -| warning | verified-without-provenance | models/kimi-k2-thinking | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/minimax-m2 | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/minimax-m2-1 | Verified record is missing sources, review date, reviewer, or confidence. | | warning | verified-without-provenance | models/qwen3-coder-30b-a3b | Verified record is missing sources, review date, reviewer, or confidence. | diff --git a/manifests/$schemas/desktop.schema.json b/manifests/$schemas/desktop.schema.json new file mode 100644 index 00000000..0be5da38 --- /dev/null +++ b/manifests/$schemas/desktop.schema.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Desktop Manifest Schema", + "description": "Schema for standalone desktop coding-agent metadata", + "type": "object", + "allOf": [{ "$ref": "./ref/app.schema.json" }] +} diff --git a/manifests/$schemas/github-stars.schema.json b/manifests/$schemas/github-stars.schema.json index 67b1b5ae..c3f4a912 100644 --- a/manifests/$schemas/github-stars.schema.json +++ b/manifests/$schemas/github-stars.schema.json @@ -45,6 +45,26 @@ }, "additionalProperties": false }, + "desktops": { + "type": "object", + "description": "GitHub stars for desktop coding agents", + "patternProperties": { + "^[a-z0-9-]+$": { + "oneOf": [ + { + "type": "number", + "minimum": 0, + "description": "Number of GitHub stars in thousands (e.g., 42 = 42k stars)" + }, + { + "type": "null", + "description": "No GitHub stars data available" + } + ] + } + }, + "additionalProperties": false + }, "ides": { "type": "object", "description": "GitHub stars for IDEs", @@ -66,6 +86,6 @@ "additionalProperties": false } }, - "required": ["extensions", "clis", "ides"], + "required": ["extensions", "clis", "desktops", "ides"], "additionalProperties": false } diff --git a/manifests/$schemas/model.schema.json b/manifests/$schemas/model.schema.json index b35db4b7..063d0941 100644 --- a/manifests/$schemas/model.schema.json +++ b/manifests/$schemas/model.schema.json @@ -11,36 +11,19 @@ "type": "object", "properties": { "size": { - "type": "string", - "description": "Model parameter size (e.g., '7B', '32B', '200B')" + "type": ["string", "null"], + "description": "Model parameter size (e.g., '7B', '32B', '200B'), null when the vendor does not disclose it" }, "contextWindow": { "type": "number", "description": "Total context window size in tokens (e.g., 32000, 64000, 200000)" }, "maxOutput": { - "type": "number", - "description": "Maximum output token size in tokens (e.g., 4096, 8192)" + "type": ["number", "null"], + "description": "Maximum output token size in tokens (e.g., 4096, 8192), null when undocumented" }, "tokenPricing": { - "type": "object", - "description": "Token-based pricing information for API usage (in $/M tokens)", - "properties": { - "input": { - "type": "number", - "description": "Input token pricing in $/M tokens (e.g., 0.14 for $0.14/1M tokens)" - }, - "output": { - "type": "number", - "description": "Output token pricing in $/M tokens (e.g., 0.42 for $0.42/1M tokens)" - }, - "cache": { - "type": ["number", "null"], - "description": "Cache token pricing in $/M tokens (e.g., 0.07 for $0.07/1M tokens, null if not applicable)" - } - }, - "required": ["input", "output", "cache"], - "additionalProperties": false + "$ref": "#/$defs/tokenPricing" }, "releaseDate": { "type": ["string", "null"], @@ -150,5 +133,191 @@ "platformUrls" ] } - ] + ], + "$defs": { + "tokenPricing": { + "description": "First-party, pay-as-you-go standard API token pricing. Rates use the offer's native currency per million tokens.", + "oneOf": [ + { + "type": "object", + "properties": { + "status": { + "const": "available" + }, + "primaryOffer": { + "type": "string", + "pattern": "^[a-z0-9-]+$" + }, + "offers": { + "type": "array", + "items": { + "$ref": "#/$defs/tokenPricingOffer" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": ["status", "primaryOffer", "offers"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "status": { + "const": "not-applicable" + }, + "reason": { + "type": "string", + "enum": ["open-weights-only", "subscription-only"] + }, + "primaryOffer": { + "type": "null" + }, + "offers": { + "type": "array", + "maxItems": 0 + } + }, + "required": ["status", "reason", "primaryOffer", "offers"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "status": { + "const": "unavailable" + }, + "reason": { + "type": "string", + "enum": [ + "official-price-not-published", + "historical-price-unverified", + "unsupported-pricing-structure" + ] + }, + "primaryOffer": { + "type": "null" + }, + "offers": { + "type": "array", + "maxItems": 0 + } + }, + "required": ["status", "reason", "primaryOffer", "offers"], + "additionalProperties": false + } + ] + }, + "tokenPricingOffer": { + "type": "object", + "description": "A first-party API pricing offer for one region and service tier.", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-z0-9-]+$" + }, + "currency": { + "type": "string", + "pattern": "^[A-Z]{3}$", + "description": "ISO 4217 currency code" + }, + "region": { + "type": "string", + "pattern": "^(global|[A-Z]{2})$", + "description": "global or an ISO 3166-1 alpha-2 region code" + }, + "serviceTier": { + "const": "standard" + }, + "effectiveFrom": { + "type": ["string", "null"], + "format": "date" + }, + "effectiveTo": { + "type": ["string", "null"], + "format": "date" + }, + "tiers": { + "type": "array", + "items": { + "$ref": "#/$defs/tokenPricingTier" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": [ + "id", + "currency", + "region", + "serviceTier", + "effectiveFrom", + "effectiveTo", + "tiers" + ], + "additionalProperties": false + }, + "tokenPricingTier": { + "type": "object", + "properties": { + "condition": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/tokenPricingCondition" + } + ] + }, + "rates": { + "$ref": "#/$defs/tokenPricingRates" + } + }, + "required": ["condition", "rates"], + "additionalProperties": false + }, + "tokenPricingCondition": { + "type": "object", + "properties": { + "metric": { + "type": "string", + "enum": ["inputTokens", "contextTokens"] + }, + "min": { + "type": ["number", "null"], + "minimum": 0 + }, + "max": { + "type": ["number", "null"], + "minimum": 0 + } + }, + "required": ["metric", "min", "max"], + "additionalProperties": false + }, + "tokenPricingRates": { + "type": "object", + "properties": { + "input": { + "type": ["number", "null"], + "minimum": 0 + }, + "output": { + "type": ["number", "null"], + "minimum": 0 + }, + "cacheRead": { + "type": ["number", "null"], + "minimum": 0 + }, + "cacheWrite": { + "type": ["number", "null"], + "minimum": 0 + } + }, + "required": ["input", "output", "cacheRead", "cacheWrite"], + "additionalProperties": false + } + } } diff --git a/manifests/$schemas/ref/app.schema.json b/manifests/$schemas/ref/app.schema.json index 56b516d8..5002286d 100644 --- a/manifests/$schemas/ref/app.schema.json +++ b/manifests/$schemas/ref/app.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "app.schema.json", "title": "Base App Schema", - "description": "Common fields for application products (CLI, IDE)", + "description": "Common fields for application products (CLI, IDE, desktop)", "type": "object", "allOf": [ { diff --git a/manifests/$schemas/ref/product.schema.json b/manifests/$schemas/ref/product.schema.json index fd86d153..ceaa3299 100644 --- a/manifests/$schemas/ref/product.schema.json +++ b/manifests/$schemas/ref/product.schema.json @@ -1,7 +1,7 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Base Product Schema", - "description": "Common fields for all product types (CLI, IDE)", + "description": "Common fields for all development-tool product surfaces", "type": "object", "allOf": [ { @@ -10,6 +10,11 @@ { "type": "object", "properties": { + "familyId": { + "type": "string", + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "description": "Stable product-family identifier shared by related IDE, CLI, extension, and desktop surfaces" + }, "latestVersion": { "type": "string", "description": "The latest stable version number (typically found on download page or changelog page)" @@ -58,13 +63,13 @@ "$defs": { "relatedProducts": { "type": "array", - "description": "Related products (IDEs, CLIs, or extensions)", + "description": "Related products (IDEs, CLIs, extensions, or desktop apps)", "items": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ide", "cli", "extension"], + "enum": ["ide", "cli", "extension", "desktop"], "description": "Type of the related product" }, "productId": { diff --git a/manifests/$schemas/vendor.schema.json b/manifests/$schemas/vendor.schema.json index 60ccf945..61130370 100644 --- a/manifests/$schemas/vendor.schema.json +++ b/manifests/$schemas/vendor.schema.json @@ -10,6 +10,15 @@ { "type": "object", "properties": { + "aliases": { + "type": "array", + "description": "Alternative names that resolve to this canonical vendor", + "items": { + "type": "string", + "minLength": 1 + }, + "uniqueItems": true + }, "communityUrls": { "$ref": "./ref/community-urls.schema.json" } diff --git a/manifests/clis/claude-code-cli.json b/manifests/clis/claude-code-cli.json index 16bd4d40..237268d8 100644 --- a/manifests/clis/claude-code-cli.json +++ b/manifests/clis/claude-code-cli.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/cli.schema.json", "id": "claude-code-cli", "name": "Claude Code", + "familyId": "claude-code", "description": "AI coding assistant CLI for your terminal. Understands your codebase, executes tasks via natural language, explains code, and manages git workflows with MCP integration.", "translations": { "zh-Hans": { @@ -136,6 +137,7 @@ "blog": "https://www.claude.com/blog" }, "relatedProducts": [ + { "type": "desktop", "productId": "claude-code-desktop" }, { "type": "extension", "productId": "claude-code" diff --git a/manifests/clis/codex-cli.json b/manifests/clis/codex-cli.json index def11ba9..1d43c59b 100644 --- a/manifests/clis/codex-cli.json +++ b/manifests/clis/codex-cli.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/cli.schema.json", "id": "codex-cli", "name": "Codex CLI", + "familyId": "codex", "description": "OpenAI's Codex CLI is a local coding agent that reads, modifies, and runs code through natural language commands. Enables building, debugging, and automating coding tasks.", "translations": { "zh-Hans": { @@ -91,7 +92,10 @@ "reddit": null, "blog": "https://openai.com/news" }, - "relatedProducts": [], + "relatedProducts": [ + { "type": "desktop", "productId": "codex-app" }, + { "type": "extension", "productId": "codex" } + ], "platforms": [ { "os": "macOS", diff --git a/manifests/clis/deepv-code.json b/manifests/clis/deepv-code.json index 5a9c4933..00faa0bb 100644 --- a/manifests/clis/deepv-code.json +++ b/manifests/clis/deepv-code.json @@ -39,11 +39,21 @@ } }, "verified": false, + "sources": [ + { + "url": "https://github.com/OrionStarAI/EasyCode", + "title": "Easy Code repository (formerly DeepV Code)", + "fields": ["githubUrl", "license", "resourceUrls.issue"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "medium", "websiteUrl": "https://dvcode.deepvlab.ai", "docsUrl": "https://deepvcode.com/guides", "vendor": "OrionStar", "latestVersion": "0.1.0", - "githubUrl": "https://github.com/OrionStarAI/DeepVCode", + "githubUrl": "https://github.com/OrionStarAI/EasyCode", "license": "Apache-2.0", "pricing": [ { @@ -73,7 +83,7 @@ "changelog": null, "pricing": "https://dvcode.deepvlab.ai/pricing", "mcp": null, - "issue": "https://github.com/OrionStarAI/DeepVCode/issues" + "issue": "https://github.com/OrionStarAI/EasyCode/issues" }, "communityUrls": { "linkedin": null, diff --git a/manifests/clis/droid-cli.json b/manifests/clis/droid-cli.json index 1aa73546..e0485529 100644 --- a/manifests/clis/droid-cli.json +++ b/manifests/clis/droid-cli.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/cli.schema.json", "id": "droid-cli", "name": "Droid CLI", + "familyId": "droid", "description": "Factory AI's Droid CLI is a terminal-based coding agent that handles complete feature development from planning to testing. Integrates with enterprise tools and provides transparent diff reviews.", "translations": { "zh-Hans": { @@ -84,7 +85,10 @@ "reddit": null, "blog": null }, - "relatedProducts": [], + "relatedProducts": [ + { "type": "desktop", "productId": "factory-desktop" }, + { "type": "extension", "productId": "droid" } + ], "platforms": [ { "os": "macOS", diff --git a/manifests/clis/gitlab-duo-cli.json b/manifests/clis/gitlab-duo-cli.json new file mode 100644 index 00000000..43622f95 --- /dev/null +++ b/manifests/clis/gitlab-duo-cli.json @@ -0,0 +1,108 @@ +{ + "$schema": "../$schemas/cli.schema.json", + "translations": { + "de": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "es": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "fr": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "id": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "ja": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "ko": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "pt": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "ru": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "tr": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "zh-Hans": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + }, + "zh-Hant": { + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows." + } + }, + "verified": false, + "sources": [ + { + "url": "https://about.gitlab.com/blog/gitlab-duo-cli-generally-available/", + "title": "GitLab Duo CLI general availability" + }, + { + "url": "https://about.gitlab.com/blog/gitlab-duo-cli/", + "title": "GitLab Duo CLI beta" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "gitlab-duo-cli", + "name": "GitLab Duo CLI", + "familyId": "gitlab-duo", + "description": "GitLab Duo CLI is GitLab's terminal coding agent for understanding projects, editing code, running tests, and integrating AI-assisted work with GitLab development workflows.", + "websiteUrl": "https://about.gitlab.com/gitlab-duo", + "docsUrl": "https://docs.gitlab.com/editor_extensions/gitlab_cli", + "vendor": "GitLab", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "GitLab Duo", + "value": null, + "currency": null, + "per": "subscription", + "category": "Business" + } + ], + "resourceUrls": { + "download": null, + "changelog": "https://about.gitlab.com/blog/gitlab-duo-cli-generally-available/", + "pricing": "https://about.gitlab.com/pricing", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/gitlab", + "github": "https://github.com/gitlabhq", + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://about.gitlab.com/blog" + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": null, + "launchCommand": "glab duo" + }, + { + "os": "Windows", + "installPath": null, + "installCommand": null, + "launchCommand": "glab duo" + }, + { + "os": "Linux", + "installPath": null, + "installCommand": null, + "launchCommand": "glab duo" + } + ] +} diff --git a/manifests/clis/grok-build.json b/manifests/clis/grok-build.json new file mode 100644 index 00000000..0db50094 --- /dev/null +++ b/manifests/clis/grok-build.json @@ -0,0 +1,108 @@ +{ + "$schema": "../$schemas/cli.schema.json", + "translations": { + "de": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "es": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "fr": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "id": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "ja": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "ko": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "pt": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "ru": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "tr": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "zh-Hans": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + }, + "zh-Hant": { + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks." + } + }, + "verified": false, + "sources": [ + { + "url": "https://x.ai/news/grok-build-cli", + "title": "Introducing Grok Build" + }, + { + "url": "https://x.ai/build/changelog", + "title": "Grok Build changelog" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "grok-build", + "name": "Grok Build", + "familyId": "grok-build", + "description": "Grok Build is xAI's open source terminal coding agent for exploring repositories, editing code, running commands, and completing end-to-end development tasks.", + "websiteUrl": "https://x.ai/build", + "docsUrl": "https://x.ai/cli", + "vendor": "xAI", + "latestVersion": "0.2.94", + "githubUrl": null, + "license": "Apache-2.0", + "pricing": [ + { + "name": "Free", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://x.ai/cli", + "changelog": "https://x.ai/build/changelog", + "pricing": null, + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/xai", + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://x.ai/news" + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": "npm install -g @xai/grok-cli", + "launchCommand": "grok" + }, + { + "os": "Windows", + "installPath": null, + "installCommand": "npm install -g @xai/grok-cli", + "launchCommand": "grok" + }, + { + "os": "Linux", + "installPath": null, + "installCommand": "npm install -g @xai/grok-cli", + "launchCommand": "grok" + } + ] +} diff --git a/manifests/clis/junie-cli.json b/manifests/clis/junie-cli.json new file mode 100644 index 00000000..617e6d9e --- /dev/null +++ b/manifests/clis/junie-cli.json @@ -0,0 +1,113 @@ +{ + "$schema": "../$schemas/cli.schema.json", + "translations": { + "de": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "es": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "fr": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "id": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "ja": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "ko": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "pt": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "ru": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "tr": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "zh-Hans": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + }, + "zh-Hant": { + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations." + } + }, + "verified": false, + "sources": [ + { + "url": "https://blog.jetbrains.com/junie/2026/03/junie-cli-the-llm-agnostic-coding-agent-is-now-in-beta/", + "title": "Junie CLI beta" + }, + { + "url": "https://www.jetbrains.com/junie/", + "title": "Junie product site" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "junie-cli", + "name": "Junie CLI", + "familyId": "junie", + "description": "Junie CLI is JetBrains' model-agnostic terminal coding agent for planning changes, editing repositories, running development tools, and using reusable agent configurations.", + "websiteUrl": "https://www.jetbrains.com/junie", + "docsUrl": "https://www.jetbrains.com/help/junie/junie-cli.html", + "vendor": "JetBrains", + "latestVersion": "Beta", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Beta", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": null, + "changelog": "https://blog.jetbrains.com/junie/2026/03/junie-cli-the-llm-agnostic-coding-agent-is-now-in-beta/", + "pricing": null, + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/jetbrains", + "github": null, + "youtube": "https://www.youtube.com/@JetBrainsTV", + "discord": null, + "reddit": null, + "blog": "https://blog.jetbrains.com/junie" + }, + "relatedProducts": [ + { + "type": "extension", + "productId": "jetbrains-junie" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": null, + "launchCommand": "junie" + }, + { + "os": "Windows", + "installPath": null, + "installCommand": null, + "launchCommand": "junie" + }, + { + "os": "Linux", + "installPath": null, + "installCommand": null, + "launchCommand": "junie" + } + ] +} diff --git a/manifests/clis/kimi-cli.json b/manifests/clis/kimi-cli.json index 3a9bf528..08394485 100644 --- a/manifests/clis/kimi-cli.json +++ b/manifests/clis/kimi-cli.json @@ -1,53 +1,71 @@ { "$schema": "../$schemas/cli.schema.json", "id": "kimi-cli", - "name": "Kimi CLI", - "description": "Kimi CLI is a new CLI agent that can help you with your software development tasks and terminal operations. Features shell-like UI, Zsh integration, Agent Client Protocol support, and MCP support.", + "name": "Kimi Code CLI", + "familyId": "kimi-code", + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension.", "translations": { - "zh-Hans": { - "description": "Kimi CLI 是一款新的 CLI Agent,可以帮助您完成软件开发任务和终端操作。具有类 Shell 的用户界面、Zsh 集成、Agent Client Protocol 支持和 MCP 支持。" - }, "de": { - "description": "Moonshot AIs Kimi CLI bringt Chinas führendes langes Kontext-AI-Modell in Ihr Terminal. Verarbeitet riesige Codebasen mit 200K+ Token-Fenster und bietet genaues Code-Verständnis." - }, - "ko": { - "description": "Kimi CLI는 소프트웨어 개발 작업과 터미널 작업을 도와주는 새로운 CLI 에이전트입니다. 쉘과 유사한 UI, Zsh 통합, 에이전트 클라이언트 프로토콜 지원 및 MCP 지원을 제공합니다." + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "es": { - "description": "Kimi CLI es un nuevo agente CLI para tareas de desarrollo. Tiene interfaz tipo shell, integracion Zsh, soporte protocolo cliente agente y soporte MCP." + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "fr": { - "description": "Kimi CLI est un nouvel agent CLI pour taches de developpement. Offre interface type shell, integration Zsh, support protocole client agent et support MCP." + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "id": { - "description": "Kimi CLI adalah agen CLI baru yang bisa membantu tugas pengembangan perangkat lunak dan operasi terminal. Memiliki UI shell, integrasi Zsh, dukungan protokol klien agen, dan dukungan MCP." + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "ja": { - "description": "Kimi CLIは、ソフトウェア開発タスクと端末操作を支援する新しいCLIエージェントです。シェルライクなUI、Zsh統合、エージェントクライアントプロトコルサポート、MCPサポートを備えています。" + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." + }, + "ko": { + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "pt": { - "description": "Kimi CLI e novo agente CLI que pode ajudar com tarefas desenvolvimento software e operacoes terminal. Apresenta interface tipo shell, integracao Zsh, suporte protocolo cliente agente e suporte MCP." + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "ru": { - "description": "Kimi CLI - новый агент CLI, который может помочь с задачами разработки ПО и терминальными операциями. Имеет интерфейс shell, интеграцию Zsh, поддержку протокола клиента агента и MCP." + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "tr": { - "description": "Kimi CLI, yazilim gelistirme gorevlerinize yardimci olabilen yeni CLI aracidir. Shell benzeri arayuz, Zsh entegrasyonu, AracI Musteri Istemcisi Protokolu ve MCP destegi ozelliklerine sahiptir." + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." + }, + "zh-Hans": { + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." }, "zh-Hant": { - "description": "Kimi CLI 是一款新的 CLI Agent,可以協助您完成軟體開發任務和終端操作。具備類 Shell 的使用者介面、Zsh 整合、Agent Client Protocol 支援和 MCP 支援。" + "description": "Kimi Code CLI is Moonshot AI's terminal coding agent for repository exploration, file editing, command execution, MCP tools, and shared workflows with its VS Code extension." } }, "verified": false, - "websiteUrl": "https://github.com/MoonshotAI/kimi-cli", - "docsUrl": "https://github.com/MoonshotAI/kimi-cli#readme", + "sources": [ + { + "url": "https://www.kimi.com/resources/kimi-code-introduction", + "title": "Kimi Code introduction" + }, + { + "url": "https://github.com/MoonshotAI/kimi-code", + "title": "Kimi Code repository" + }, + { + "url": "https://www.kimi.com/code/docs/en/kimi-code/whats-new.html", + "title": "Kimi Code release notes" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.kimi.com/code", + "docsUrl": "https://www.kimi.com/code/docs/en", "vendor": "Moonshot AI", - "latestVersion": "0.42", - "githubUrl": "https://github.com/MoonshotAI/kimi-cli", + "latestVersion": "0.28.0", + "githubUrl": "https://github.com/MoonshotAI/kimi-code", "license": "Apache-2.0", "pricing": [ { - "name": "Free Tier", + "name": "Free", "value": 0, "currency": null, "per": null, @@ -55,40 +73,45 @@ } ], "resourceUrls": { - "download": null, - "changelog": "https://github.com/MoonshotAI/kimi-cli/releases", + "download": "https://www.kimi.com/code/docs/en/kimi-code/quickstart.html", + "changelog": "https://www.kimi.com/code/docs/en/kimi-code/whats-new.html", "pricing": null, - "mcp": null, - "issue": "https://github.com/MoonshotAI/kimi-cli/issues" + "mcp": "https://www.kimi.com/code/docs/en/kimi-code/mcp.html", + "issue": "https://github.com/MoonshotAI/kimi-code/issues" }, "communityUrls": { "linkedin": null, - "twitter": null, - "github": "https://github.com/MoonshotAI/kimi-cli", + "twitter": "https://x.com/Kimi_Moonshot", + "github": "https://github.com/MoonshotAI/kimi-code", "youtube": null, "discord": null, "reddit": null, "blog": null }, - "relatedProducts": [], + "relatedProducts": [ + { + "type": "extension", + "productId": "kimi-code" + } + ], "platforms": [ { "os": "macOS", - "installCommand": "uv tool install --python 3.13 kimi-cli", - "launchCommand": "kimi", - "installPath": null + "installPath": null, + "installCommand": "uv tool install kimi-code", + "launchCommand": "kimi" }, { "os": "Windows", - "installCommand": "uv tool install --python 3.13 kimi-cli", - "launchCommand": "kimi", - "installPath": null + "installPath": null, + "installCommand": "uv tool install kimi-code", + "launchCommand": "kimi" }, { "os": "Linux", - "installCommand": "uv tool install --python 3.13 kimi-cli", - "launchCommand": "kimi", - "installPath": null + "installPath": null, + "installCommand": "uv tool install kimi-code", + "launchCommand": "kimi" } ] } diff --git a/manifests/clis/mistral-vibe-cli.json b/manifests/clis/mistral-vibe-cli.json new file mode 100644 index 00000000..4a9492c4 --- /dev/null +++ b/manifests/clis/mistral-vibe-cli.json @@ -0,0 +1,134 @@ +{ + "$schema": "../$schemas/cli.schema.json", + "translations": { + "de": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "es": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "fr": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "id": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "ja": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "ko": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "pt": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "ru": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "tr": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "zh-Hans": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + }, + "zh-Hant": { + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows." + } + }, + "verified": false, + "sources": [ + { + "url": "https://mistral.ai/news/vibe-agent/", + "title": "Introducing Mistral Vibe" + }, + { + "url": "https://docs.mistral.ai/vibe/code/overview", + "title": "Mistral Vibe documentation" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "mistral-vibe-cli", + "name": "Mistral Vibe CLI", + "familyId": "mistral-vibe", + "description": "Mistral Vibe CLI is Mistral AI's terminal coding agent for repository exploration, planning, code editing, command execution, and configurable agent workflows.", + "websiteUrl": "https://mistral.ai/products/vibe", + "docsUrl": "https://docs.mistral.ai/vibe/code/overview", + "vendor": "Mistral AI", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Free", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + }, + { + "name": "Pro", + "value": 14.99, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Team", + "value": 24.99, + "currency": "USD", + "per": "user/month", + "category": "Business" + }, + { + "name": "Enterprise", + "value": null, + "currency": null, + "per": "custom", + "category": "Enterprise" + } + ], + "resourceUrls": { + "download": "https://docs.mistral.ai/vibe/code/installation", + "changelog": null, + "pricing": "https://mistral.ai/pricing", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/MistralAI", + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://mistral.ai/news" + }, + "relatedProducts": [ + { + "type": "extension", + "productId": "mistral-vibe" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": "curl -LsSf https://mistral.ai/vibe/install.sh | bash", + "launchCommand": "vibe" + }, + { + "os": "Windows", + "installPath": null, + "installCommand": "uv tool install mistral-vibe", + "launchCommand": "vibe" + }, + { + "os": "Linux", + "installPath": null, + "installCommand": "curl -LsSf https://mistral.ai/vibe/install.sh | bash", + "launchCommand": "vibe" + } + ] +} diff --git a/manifests/clis/omp.json b/manifests/clis/omp.json new file mode 100644 index 00000000..55d1d357 --- /dev/null +++ b/manifests/clis/omp.json @@ -0,0 +1,120 @@ +{ + "$schema": "../$schemas/cli.schema.json", + "id": "omp", + "name": "omp", + "familyId": "omp", + "description": "omp is an open source terminal coding agent with hash-anchored edits, LSP and debugger integration, subagents, persistent code runtimes, and support for 40+ model providers.", + "translations": { + "de": { + "description": "omp ist ein Open-Source-Coding-Agent für das Terminal mit hash-verankerten Änderungen, LSP- und Debugger-Integration, Subagenten, persistenten Code-Laufzeiten und über 40 Modellanbietern." + }, + "es": { + "description": "omp es un agente de programación de código abierto para terminal, con ediciones ancladas por hash, integración LSP y depurador, subagentes, runtimes persistentes y más de 40 proveedores de modelos." + }, + "fr": { + "description": "omp est un agent de codage open source pour terminal, avec modifications ancrées par hash, intégration LSP et débogueur, sous-agents, runtimes persistants et plus de 40 fournisseurs de modèles." + }, + "id": { + "description": "omp adalah agen coding terminal sumber terbuka dengan pengeditan berbasis hash, integrasi LSP dan debugger, subagen, runtime kode persisten, serta dukungan untuk 40+ penyedia model." + }, + "ja": { + "description": "ompは、ハッシュ固定編集、LSPとデバッガーの統合、サブエージェント、永続的なコード実行環境、40以上のモデルプロバイダーを備えたオープンソースのターミナル向けコーディングエージェントです。" + }, + "ko": { + "description": "omp는 해시 기반 편집, LSP 및 디버거 통합, 하위 에이전트, 영구 코드 런타임, 40개 이상의 모델 제공업체 지원을 갖춘 오픈 소스 터미널 코딩 에이전트입니다." + }, + "pt": { + "description": "omp é um agente de programação open source para terminal, com edições ancoradas por hash, integração LSP e depurador, subagentes, runtimes persistentes e mais de 40 provedores de modelos." + }, + "ru": { + "description": "omp — терминальный агент для программирования с открытым кодом, hash-привязанными правками, интеграцией LSP и отладчика, субагентами, постоянными средами выполнения и 40+ поставщиками моделей." + }, + "tr": { + "description": "omp; hash bağlantılı düzenlemeler, LSP ve hata ayıklayıcı entegrasyonu, alt ajanlar, kalıcı kod çalışma ortamları ve 40'tan fazla model sağlayıcısı sunan açık kaynak terminal kodlama ajanıdır." + }, + "zh-Hans": { + "description": "omp 是一款开源终端编码 Agent,支持哈希锚定编辑、LSP 与调试器集成、子 Agent、持久化代码运行时以及 40 多家模型提供商。" + }, + "zh-Hant": { + "description": "omp 是一款開源終端編碼 Agent,支援雜湊錨定編輯、LSP 與除錯器整合、子 Agent、持久化程式碼執行環境以及 40 多家模型供應商。" + } + }, + "verified": false, + "sources": [ + { + "url": "https://omp.sh", + "title": "omp official site", + "fields": ["name", "description", "websiteUrl", "docsUrl"] + }, + { + "url": "https://github.com/can1357/oh-my-pi", + "title": "Oh My Pi official repository", + "fields": ["description", "githubUrl", "platforms", "communityUrls", "resourceUrls.issue"] + }, + { + "url": "https://github.com/can1357/oh-my-pi/releases", + "title": "Oh My Pi releases", + "fields": ["latestVersion", "resourceUrls.changelog"] + }, + { + "url": "https://github.com/can1357/oh-my-pi/blob/main/LICENSE", + "title": "Oh My Pi MIT license", + "fields": ["license", "pricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://omp.sh", + "docsUrl": "https://omp.sh/docs", + "vendor": "Oh My Pi", + "latestVersion": "17.0.6", + "githubUrl": "https://github.com/can1357/oh-my-pi", + "license": "MIT", + "pricing": [ + { + "name": "Open Source", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://omp.sh", + "changelog": "https://github.com/can1357/oh-my-pi/releases", + "pricing": null, + "mcp": null, + "issue": "https://github.com/can1357/oh-my-pi/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": null, + "github": "https://github.com/can1357/oh-my-pi", + "youtube": null, + "discord": "https://discord.com/invite/4NMW9cdXZa", + "reddit": null, + "blog": null + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installCommand": "curl -fsSL https://omp.sh/install | sh", + "launchCommand": "omp", + "installPath": null + }, + { + "os": "Windows", + "installCommand": "irm https://omp.sh/install.ps1 | iex", + "launchCommand": "omp", + "installPath": null + }, + { + "os": "Linux", + "installCommand": "curl -fsSL https://omp.sh/install | sh", + "launchCommand": "omp", + "installPath": null + } + ] +} diff --git a/manifests/clis/opencode.json b/manifests/clis/opencode.json index 38d5d4e6..9b8bd7f7 100644 --- a/manifests/clis/opencode.json +++ b/manifests/clis/opencode.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/cli.schema.json", "id": "opencode", "name": "OpenCode", + "familyId": "opencode", "description": "OpenCode is an open source AI coding agent built for the terminal. Features native TUI, LSP support, multi-session capability, and works with 75+ LLM providers including local models.", "translations": { "zh-Hans": { @@ -41,9 +42,9 @@ "verified": false, "websiteUrl": "https://opencode.ai", "docsUrl": "https://opencode.ai", - "vendor": "SST", + "vendor": "Anomaly", "latestVersion": "0.15.16", - "githubUrl": "https://github.com/sst/opencode", + "githubUrl": "https://github.com/anomalyco/opencode", "license": "MIT", "pricing": [ { @@ -63,21 +64,24 @@ ], "resourceUrls": { "download": "https://opencode.ai", - "changelog": "https://github.com/sst/opencode/releases", + "changelog": "https://github.com/anomalyco/opencode/releases", "pricing": "https://opencode.ai", "mcp": null, - "issue": "https://github.com/sst/opencode/issues" + "issue": "https://github.com/anomalyco/opencode/issues" }, "communityUrls": { "linkedin": null, "twitter": "https://x.com/opencode", - "github": "https://github.com/sst/opencode", + "github": "https://github.com/anomalyco/opencode", "youtube": null, "discord": "https://discord.gg/opencode", "reddit": null, "blog": null }, - "relatedProducts": [], + "relatedProducts": [ + { "type": "desktop", "productId": "opencode-desktop" }, + { "type": "extension", "productId": "opencode-extension" } + ], "platforms": [ { "os": "macOS", diff --git a/manifests/clis/qoder-cli.json b/manifests/clis/qoder-cli.json index 5d621e46..bd6e8eb4 100644 --- a/manifests/clis/qoder-cli.json +++ b/manifests/clis/qoder-cli.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/cli.schema.json", "id": "qoder-cli", "name": "Qoder CLI", + "familyId": "qoder", "description": "Qoder CLI is an AI-powered coding assistant for intelligent code generation, debugging, and development workflows. Features TUI mode, inline chat, and project management.", "translations": { "zh-Hans": { @@ -84,7 +85,16 @@ "reddit": null, "blog": null }, - "relatedProducts": [], + "relatedProducts": [ + { + "type": "extension", + "productId": "qoder" + }, + { + "type": "desktop", + "productId": "qoder" + } + ], "platforms": [ { "os": "macOS", diff --git a/manifests/clis/qwen-code.json b/manifests/clis/qwen-code.json new file mode 100644 index 00000000..5f3eb410 --- /dev/null +++ b/manifests/clis/qwen-code.json @@ -0,0 +1,108 @@ +{ + "$schema": "../$schemas/cli.schema.json", + "translations": { + "de": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "es": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "fr": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "id": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "ja": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "ko": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "pt": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "ru": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "tr": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "zh-Hans": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + }, + "zh-Hant": { + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models." + } + }, + "verified": false, + "sources": [ + { + "url": "https://github.com/QwenLM/qwen-code", + "title": "Qwen Code repository" + }, + { + "url": "https://qwenlm.github.io/qwen-code-docs/", + "title": "Qwen Code documentation" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "qwen-code", + "name": "Qwen Code", + "familyId": "qwen-code", + "description": "Qwen Code is Alibaba's open source terminal coding agent for understanding large codebases, editing files, executing commands, and connecting to Qwen or OpenAI-compatible models.", + "websiteUrl": "https://qwenlm.github.io/qwen-code-docs", + "docsUrl": "https://qwenlm.github.io/qwen-code-docs", + "vendor": "Alibaba", + "latestVersion": "0.18.0", + "githubUrl": "https://github.com/QwenLM/qwen-code", + "license": "Apache-2.0", + "pricing": [ + { + "name": "Open Source", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://qwenlm.github.io/qwen-code-docs/en/users/quickstart/installation", + "changelog": "https://github.com/QwenLM/qwen-code/releases", + "pricing": null, + "mcp": null, + "issue": "https://github.com/QwenLM/qwen-code/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/Alibaba_Qwen", + "github": "https://github.com/QwenLM/qwen-code", + "youtube": null, + "discord": null, + "reddit": null, + "blog": null + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": "npm install -g @qwen-code/qwen-code@latest", + "launchCommand": "qwen" + }, + { + "os": "Windows", + "installPath": null, + "installCommand": "npm install -g @qwen-code/qwen-code@latest", + "launchCommand": "qwen" + }, + { + "os": "Linux", + "installPath": null, + "installCommand": "npm install -g @qwen-code/qwen-code@latest", + "launchCommand": "qwen" + } + ] +} diff --git a/manifests/clis/rovo-dev-cli.json b/manifests/clis/rovo-dev-cli.json new file mode 100644 index 00000000..2d3f93af --- /dev/null +++ b/manifests/clis/rovo-dev-cli.json @@ -0,0 +1,124 @@ +{ + "$schema": "../$schemas/cli.schema.json", + "id": "rovo-dev-cli", + "name": "Rovo Dev CLI", + "familyId": "rovo-dev", + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence.", + "translations": { + "de": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "es": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "fr": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "id": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "ja": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "ko": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "pt": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "ru": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "tr": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "zh-Hans": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + }, + "zh-Hant": { + "description": "Rovo Dev CLI is Atlassian's terminal coding agent for understanding repositories, generating and refactoring code, running tests, using worktrees, and connecting to Jira and Confluence." + } + }, + "verified": false, + "sources": [ + { + "url": "https://www.atlassian.com/blog/blog/announcements/rovo-dev-command-line-interface", + "title": "Rovo Dev agent, now available in the CLI" + }, + { + "url": "https://support.atlassian.com/rovo/docs/install-and-run-rovo-dev-cli-on-your-device/", + "title": "Install and run Rovo Dev CLI" + }, + { + "url": "https://www.atlassian.com/software/rovo-dev/pricing", + "title": "Rovo Dev pricing" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.atlassian.com/software/rovo-dev", + "docsUrl": "https://support.atlassian.com/rovo/docs/use-rovo-dev-cli/", + "vendor": "Atlassian", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Rovo Dev Free", + "value": 0, + "currency": null, + "per": "month", + "category": "Individual" + }, + { + "name": "Rovo Dev Standard", + "value": 20, + "currency": "USD", + "per": "user/month", + "category": "Business" + } + ], + "resourceUrls": { + "download": "https://support.atlassian.com/rovo/docs/install-and-run-rovo-dev-cli-on-your-device/", + "changelog": "https://support.atlassian.com/rovo/docs/rovo-dev-cli-commands/", + "pricing": "https://www.atlassian.com/software/rovo-dev/pricing", + "mcp": "https://support.atlassian.com/rovo/docs/use-rovo-dev-cli/", + "issue": null + }, + "communityUrls": { + "linkedin": "https://www.linkedin.com/company/atlassian", + "twitter": "https://x.com/Atlassian", + "github": null, + "youtube": "https://www.youtube.com/@Atlassian", + "discord": null, + "reddit": "https://www.reddit.com/r/atlassian", + "blog": "https://www.atlassian.com/blog" + }, + "relatedProducts": [ + { + "type": "extension", + "productId": "rovo-dev" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": null, + "launchCommand": "acli rovodev run" + }, + { + "os": "Windows", + "installPath": null, + "installCommand": null, + "launchCommand": "acli rovodev run" + }, + { + "os": "Linux", + "installPath": null, + "installCommand": null, + "launchCommand": "acli rovodev run" + } + ] +} diff --git a/manifests/desktops/air.json b/manifests/desktops/air.json new file mode 100644 index 00000000..e41483a2 --- /dev/null +++ b/manifests/desktops/air.json @@ -0,0 +1,115 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "id": "air", + "name": "Air", + "familyId": "air", + "description": "JetBrains Air is a standalone desktop environment for delegating, running, and reviewing parallel coding-agent tasks.", + "translations": { + "zh-Hans": { + "description": "JetBrains Air 是一款独立桌面环境,用于委派、运行和审查并行的编码智能体任务。" + }, + "de": { + "description": "JetBrains Air ist eine eigenständige Desktop-Umgebung zum Delegieren, Ausführen und Prüfen paralleler Coding-Agent-Aufgaben." + }, + "ko": { + "description": "JetBrains Air는 병렬 코딩 에이전트 작업을 위임하고 실행하며 검토할 수 있는 독립형 데스크톱 환경입니다." + }, + "es": { + "description": "JetBrains Air es un entorno de escritorio independiente para delegar, ejecutar y revisar tareas paralelas de agentes de programación." + }, + "fr": { + "description": "JetBrains Air est un environnement de bureau autonome pour déléguer, exécuter et examiner des tâches parallèles d’agents de codage." + }, + "id": { + "description": "JetBrains Air adalah lingkungan desktop mandiri untuk mendelegasikan, menjalankan, dan meninjau tugas agen coding secara paralel." + }, + "ja": { + "description": "JetBrains Airは、並列で動作するコーディングエージェントのタスクを委任、実行、レビューするためのスタンドアロンデスクトップ環境です。" + }, + "pt": { + "description": "O JetBrains Air é um ambiente de desktop independente para delegar, executar e revisar tarefas paralelas de agentes de programação." + }, + "ru": { + "description": "JetBrains Air — автономная настольная среда для делегирования, запуска и проверки параллельных задач агентов программирования." + }, + "tr": { + "description": "JetBrains Air, paralel kodlama ajanı görevlerini devretmek, çalıştırmak ve incelemek için bağımsız bir masaüstü ortamıdır." + }, + "zh-Hant": { + "description": "JetBrains Air 是一款獨立桌面環境,用於委派、執行和審查並行的程式設計智慧體任務。" + } + }, + "verified": false, + "sources": [ + { + "url": "https://air.dev/", + "title": "JetBrains Air product site", + "fields": ["description", "websiteUrl", "docsUrl", "vendor", "license", "pricing"] + }, + { + "url": "https://air.dev/download", + "title": "JetBrains Air downloads", + "fields": ["platforms", "resourceUrls.download"] + }, + { + "url": "https://air.dev/changelog", + "title": "JetBrains Air changelog", + "fields": ["latestVersion", "resourceUrls.changelog"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://air.dev", + "docsUrl": "https://www.jetbrains.com/help/air", + "vendor": "JetBrains", + "latestVersion": "262.132.21", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Preview Download", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://air.dev/download", + "changelog": "https://air.dev/changelog", + "pricing": "https://air.dev/#faq", + "mcp": null, + "issue": "https://youtrack.jetbrains.com/projects/AIR" + }, + "communityUrls": { + "linkedin": "https://www.linkedin.com/company/jetbrains", + "twitter": "https://x.com/getsome_air", + "github": null, + "youtube": null, + "discord": "https://discord.com/invite/jetbrains", + "reddit": null, + "blog": "https://blog.jetbrains.com/air/" + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/Air.app", + "installCommand": null, + "launchCommand": "open -a \"Air\"" + }, + { + "os": "Windows", + "installPath": null, + "installCommand": null, + "launchCommand": null + }, + { + "os": "Linux", + "installPath": null, + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/claude-code-desktop.json b/manifests/desktops/claude-code-desktop.json new file mode 100644 index 00000000..9d03a7eb --- /dev/null +++ b/manifests/desktops/claude-code-desktop.json @@ -0,0 +1,125 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "es": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "fr": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "id": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "ja": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "ko": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "pt": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "ru": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "tr": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "zh-Hans": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + }, + "zh-Hant": { + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal." + } + }, + "verified": false, + "sources": [ + { + "url": "https://claude.com/blog/claude-code-desktop-redesign", + "title": "Claude Code Desktop redesign" + }, + { + "url": "https://code.claude.com/docs/en/desktop", + "title": "Claude Code Desktop documentation" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "claude-code-desktop", + "name": "Claude Code Desktop", + "familyId": "claude-code", + "description": "Claude Code Desktop is Anthropic's standalone coding app for running parallel sessions, reviewing diffs, editing files, and working with an integrated terminal.", + "websiteUrl": "https://claude.com/product/claude-code", + "docsUrl": "https://code.claude.com/docs/en/desktop", + "vendor": "Anthropic", + "latestVersion": "Latest", + "githubUrl": "https://github.com/anthropics/claude-code", + "license": "Proprietary", + "pricing": [ + { + "name": "Pro", + "value": 20, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Max 5x", + "value": 100, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Max 20x", + "value": 200, + "currency": "USD", + "per": "month", + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://claude.com/download", + "changelog": "https://claude.com/blog/claude-code-desktop-redesign", + "pricing": "https://claude.com/pricing", + "mcp": "https://code.claude.com/docs/en/mcp", + "issue": "https://github.com/anthropics/claude-code/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/claudeai", + "github": "https://github.com/anthropics/claude-code", + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://claude.com/blog" + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "claude-code-cli" + }, + { + "type": "extension", + "productId": "claude-code" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/Claude.app", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Programs\\Claude", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/codex-app.json b/manifests/desktops/codex-app.json new file mode 100644 index 00000000..3e686a51 --- /dev/null +++ b/manifests/desktops/codex-app.json @@ -0,0 +1,130 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "es": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "fr": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "id": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "ja": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "ko": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "pt": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "ru": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "tr": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "zh-Hans": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + }, + "zh-Hant": { + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations." + } + }, + "verified": false, + "sources": [ + { + "url": "https://openai.com/index/introducing-the-codex-app/", + "title": "Introducing the Codex app" + }, + { + "url": "https://developers.openai.com/codex/app", + "title": "Codex app documentation" + }, + { + "url": "https://learn.chatgpt.com/docs/open-source", + "title": "Codex open-source components", + "fields": ["githubUrl", "license"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "codex-app", + "name": "Codex App", + "familyId": "codex", + "description": "Codex App is OpenAI's desktop command center for running coding agents in parallel, reviewing changes, using worktrees, and sharing sessions with Codex CLI and IDE integrations.", + "websiteUrl": "https://openai.com/codex", + "docsUrl": "https://developers.openai.com/codex/app", + "vendor": "OpenAI", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "ChatGPT Plus", + "value": 20, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "ChatGPT Pro", + "value": 200, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "ChatGPT Business", + "value": 30, + "currency": "USD", + "per": "user/month", + "category": "Business" + } + ], + "resourceUrls": { + "download": "https://openai.com/codex", + "changelog": "https://developers.openai.com/codex/changelog", + "pricing": "https://openai.com/pricing", + "mcp": null, + "issue": "https://github.com/openai/codex/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/OpenAI", + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://openai.com/news" + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "codex-cli" + }, + { + "type": "extension", + "productId": "codex" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/Codex.app", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Programs\\Codex", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/factory-desktop.json b/manifests/desktops/factory-desktop.json new file mode 100644 index 00000000..4173577b --- /dev/null +++ b/manifests/desktops/factory-desktop.json @@ -0,0 +1,125 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "es": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "fr": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "id": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "ja": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "ko": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "pt": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "ru": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "tr": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "zh-Hans": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + }, + "zh-Hant": { + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions." + } + }, + "verified": false, + "sources": [ + { + "url": "https://factory.ai/product/desktop", + "title": "Factory Desktop" + }, + { + "url": "https://docs.factory.ai/welcome/index", + "title": "Factory documentation" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "factory-desktop", + "name": "Factory Desktop", + "familyId": "droid", + "description": "Factory Desktop is a standalone workspace for coordinating Droids, running parallel coding tasks, reviewing previews and diffs, and managing persistent development sessions.", + "websiteUrl": "https://factory.ai/product/desktop", + "docsUrl": "https://docs.factory.ai/welcome/index", + "vendor": "Factory AI", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Pro", + "value": 20, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Max", + "value": 200, + "currency": "USD", + "per": "month", + "category": "Business" + }, + { + "name": "Enterprise", + "value": null, + "currency": null, + "per": "custom", + "category": "Enterprise" + } + ], + "resourceUrls": { + "download": "https://factory.ai/product/desktop", + "changelog": null, + "pricing": "https://docs.factory.ai/pricing", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/FactoryAI", + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://factory.ai/news" + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "droid-cli" + }, + { + "type": "extension", + "productId": "droid" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/Factory.app", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Programs\\Factory", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/minimax-code.json b/manifests/desktops/minimax-code.json new file mode 100644 index 00000000..f7d360c7 --- /dev/null +++ b/manifests/desktops/minimax-code.json @@ -0,0 +1,109 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "es": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "fr": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "id": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "ja": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "ko": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "pt": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "ru": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "tr": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "zh-Hans": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + }, + "zh-Hant": { + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows." + } + }, + "verified": false, + "sources": [ + { + "url": "https://agent.minimax.io/download", + "title": "MiniMax Agent downloads" + }, + { + "url": "https://platform.minimax.io/subscribe/token-plan", + "title": "MiniMax coding plans" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "medium", + "id": "minimax-code", + "name": "MiniMax Code", + "familyId": "minimax-code", + "description": "MiniMax Code is a desktop coding agent for macOS and Windows with agent teams, persistent memory, reusable skills, scheduled tasks, and workspace-level development workflows.", + "websiteUrl": "https://agent.minimax.io", + "docsUrl": "https://agent.minimax.io/download", + "vendor": "MiniMax", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Free", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + }, + { + "name": "Coding Plan", + "value": null, + "currency": null, + "per": "subscription", + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://agent.minimax.io/download", + "changelog": null, + "pricing": "https://platform.minimax.io/subscribe/token-plan", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/MiniMax__AI", + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": null + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/MiniMax Code.app", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Programs\\MiniMax Code", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/opencode-desktop.json b/manifests/desktops/opencode-desktop.json new file mode 100644 index 00000000..377784fc --- /dev/null +++ b/manifests/desktops/opencode-desktop.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "es": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "fr": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "id": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "ja": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "ko": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "pt": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "ru": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "tr": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "zh-Hans": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + }, + "zh-Hant": { + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers." + } + }, + "verified": false, + "sources": [ + { + "url": "https://opencode.ai/download", + "title": "OpenCode downloads" + }, + { + "url": "https://github.com/anomalyco/opencode", + "title": "OpenCode repository" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "opencode-desktop", + "name": "OpenCode Desktop", + "familyId": "opencode", + "description": "OpenCode Desktop is the standalone desktop surface for the open source OpenCode coding agent, with local project sessions and support for many hosted and local model providers.", + "websiteUrl": "https://opencode.ai/download", + "docsUrl": "https://opencode.ai/docs", + "vendor": "Anomaly", + "latestVersion": "Latest", + "githubUrl": "https://github.com/anomalyco/opencode", + "license": "MIT", + "pricing": [ + { + "name": "Open Source", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://opencode.ai/download", + "changelog": "https://github.com/anomalyco/opencode/releases", + "pricing": "https://opencode.ai/zen", + "mcp": null, + "issue": "https://github.com/anomalyco/opencode/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/opencode", + "github": "https://github.com/anomalyco/opencode", + "youtube": null, + "discord": "https://discord.gg/opencode", + "reddit": null, + "blog": null + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "opencode" + }, + { + "type": "extension", + "productId": "opencode-extension" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/OpenCode.app", + "installCommand": "brew install --cask opencode-desktop", + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Programs\\OpenCode", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Linux", + "installPath": "/opt/OpenCode", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/qoder.json b/manifests/desktops/qoder.json new file mode 100644 index 00000000..5f998bdf --- /dev/null +++ b/manifests/desktops/qoder.json @@ -0,0 +1,154 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "Qoder Desktop ist eine autonome Entwicklungsumgebung mit Coding-Agenten, tiefem Codebasisverständnis, intelligenter Vervollständigung sowie Editor- und Quest-Arbeitsbereichen." + }, + "es": { + "description": "Qoder Desktop es un entorno de desarrollo autónomo con agentes de programación, comprensión profunda del código, autocompletado inteligente y espacios Editor y Quest." + }, + "fr": { + "description": "Qoder Desktop est un environnement de développement autonome avec agents de codage, compréhension approfondie du code, complétion intelligente et espaces Editor et Quest." + }, + "id": { + "description": "Qoder Desktop adalah desktop pengembangan otonom dengan agen coding, pemahaman mendalam atas basis kode, pelengkapan cerdas, serta ruang kerja Editor dan Quest." + }, + "ja": { + "description": "Qoder Desktopは、コーディングエージェント、コードベースの深い理解、インテリジェント補完、共同作業と委任のためのEditorとQuestを備えた自律開発デスクトップです。" + }, + "ko": { + "description": "Qoder Desktop은 코딩 에이전트, 코드베이스 심층 이해, 지능형 자동 완성, 협업과 위임을 위한 Editor 및 Quest 작업 공간을 갖춘 자율 개발 데스크톱입니다." + }, + "pt": { + "description": "Qoder Desktop é um ambiente de desenvolvimento autônomo com agentes de código, compreensão profunda da base, preenchimento inteligente e espaços Editor e Quest." + }, + "ru": { + "description": "Qoder Desktop — автономная среда разработки с агентами, глубоким пониманием кодовой базы, умным автодополнением и рабочими пространствами Editor и Quest." + }, + "tr": { + "description": "Qoder Desktop; kodlama ajanları, derin kod tabanı anlayışı, akıllı tamamlama ve iş birliği ile görev devri için Editor ve Quest alanları sunan otonom geliştirme masaüstüdür." + }, + "zh-Hans": { + "description": "Qoder Desktop 是一款自主开发桌面应用,具备编码智能体、深度代码库理解、智能补全,以及用于协作和任务委派的 Editor 与 Quest 工作区。" + }, + "zh-Hant": { + "description": "Qoder Desktop 是一款自主開發桌面應用,具備編碼智慧代理、深度程式碼庫理解、智慧補全,以及用於協作和任務委派的 Editor 與 Quest 工作區。" + } + }, + "verified": false, + "sources": [ + { + "url": "https://qoder.com/desktop", + "title": "Qoder Desktop" + }, + { + "url": "https://qoder.com/download", + "title": "Qoder downloads", + "fields": ["resourceUrls.download", "platforms"] + }, + { + "url": "https://qoder.com/en/changelog", + "title": "Qoder changelog", + "fields": ["latestVersion", "resourceUrls.changelog"] + }, + { + "url": "https://docs.qoder.com/account/pricing", + "title": "Qoder pricing documentation", + "fields": ["pricing", "resourceUrls.pricing"] + }, + { + "url": "https://qoder.com/blog/qoder-1.0", + "title": "Introducing Qoder 1.0", + "fields": ["familyId", "relatedProducts"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "qoder", + "name": "Qoder Desktop", + "familyId": "qoder", + "description": "Qoder Desktop is an autonomous development desktop with coding agents, deep codebase awareness, intelligent autocomplete, and Editor and Quest workspaces.", + "websiteUrl": "https://qoder.com/desktop", + "docsUrl": "https://docs.qoder.com", + "vendor": "Alibaba", + "latestVersion": "1.15.0", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Community Edition", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + }, + { + "name": "Pro", + "value": 20, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Pro+", + "value": 60, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Ultra", + "value": 200, + "currency": "USD", + "per": "month", + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://qoder.com/download", + "changelog": "https://qoder.com/en/changelog", + "pricing": "https://qoder.com/pricing", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/Qoder_ai_ide", + "github": "https://github.com/QoderAI", + "youtube": "https://www.youtube.com/@qoder_ai", + "discord": "https://discord.gg/NRpVfWbn", + "reddit": "https://www.reddit.com/r/Qoder", + "blog": "https://qoder.com/blog" + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "qoder-cli" + }, + { + "type": "extension", + "productId": "qoder" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": null, + "installCommand": null, + "launchCommand": null + }, + { + "os": "Linux", + "installPath": null, + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/stagewise.json b/manifests/desktops/stagewise.json new file mode 100644 index 00000000..f9f6f33b --- /dev/null +++ b/manifests/desktops/stagewise.json @@ -0,0 +1,108 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "es": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "fr": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "id": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "ja": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "ko": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "pt": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "ru": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "tr": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "zh-Hans": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + }, + "zh-Hant": { + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers." + } + }, + "verified": false, + "sources": [ + { + "url": "https://stagewise.io/", + "title": "stagewise product site" + }, + { + "url": "https://github.com/stagewise-io/stagewise", + "title": "stagewise repository" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "stagewise", + "name": "stagewise", + "familyId": "stagewise", + "description": "stagewise is an open source desktop coding agent with multi-agent sessions, Git worktree isolation, change review, and support for hosted and local model providers.", + "websiteUrl": "https://stagewise.io", + "docsUrl": "https://stagewise.io/docs", + "vendor": "stagewise", + "latestVersion": "1.2.1", + "githubUrl": "https://github.com/stagewise-io/stagewise", + "license": "AGPL-3.0-only", + "pricing": [ + { + "name": "Open Source", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://stagewise.io", + "changelog": "https://stagewise.io/news/release-week-may-25-31", + "pricing": null, + "mcp": null, + "issue": "https://github.com/stagewise-io/stagewise/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/stagewise_io", + "github": "https://github.com/stagewise-io/stagewise", + "youtube": null, + "discord": "https://discord.gg/stagewise", + "reddit": null, + "blog": null + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/stagewise.app", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Programs\\stagewise", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Linux", + "installPath": "/opt/stagewise", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/trae-work.json b/manifests/desktops/trae-work.json new file mode 100644 index 00000000..39e9ef22 --- /dev/null +++ b/manifests/desktops/trae-work.json @@ -0,0 +1,157 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "id": "trae-work", + "name": "TRAE Work", + "familyId": "trae", + "description": "TRAE Work is a standalone AI workspace with Work and Code modes for delegating coding and professional tasks across desktop, web, and mobile.", + "translations": { + "de": { + "description": "TRAE Work ist ein eigenständiger AI-Arbeitsbereich mit Work- und Code-Modus zum Delegieren von Entwicklungs- und Berufsaufgaben auf Desktop, Web und Mobilgeräten." + }, + "es": { + "description": "TRAE Work es un espacio de trabajo de IA independiente con modos Work y Code para delegar tareas de desarrollo y profesionales en escritorio, web y móvil." + }, + "fr": { + "description": "TRAE Work est un espace de travail IA autonome avec les modes Work et Code pour déléguer des tâches de développement et professionnelles sur ordinateur, web et mobile." + }, + "id": { + "description": "TRAE Work adalah ruang kerja AI mandiri dengan mode Work dan Code untuk mendelegasikan tugas coding dan profesional melalui desktop, web, dan perangkat seluler." + }, + "ja": { + "description": "TRAE Workは、Desktop、Web、Mobileでコーディングや業務タスクを委任できる、WorkモードとCodeモードを備えた独立型AIワークスペースです。" + }, + "ko": { + "description": "TRAE Work는 데스크톱, 웹, 모바일에서 코딩 및 전문 업무를 위임할 수 있는 Work와 Code 모드를 갖춘 독립형 AI 작업 공간입니다." + }, + "pt": { + "description": "TRAE Work é um espaço de trabalho de IA independente com modos Work e Code para delegar tarefas de desenvolvimento e profissionais no desktop, web e celular." + }, + "ru": { + "description": "TRAE Work — автономное AI-пространство с режимами Work и Code для делегирования задач разработки и профессиональной работы на ПК, в вебе и на мобильных устройствах." + }, + "tr": { + "description": "TRAE Work; masaüstü, web ve mobilde kodlama ile profesyonel görevleri devretmek için Work ve Code modları sunan bağımsız bir AI çalışma alanıdır." + }, + "zh-Hans": { + "description": "TRAE Work 是一款独立 AI 工作台,提供 Work 与 Code 双模式,可在桌面端、网页端和移动端委派编码及专业工作任务。" + }, + "zh-Hant": { + "description": "TRAE Work 是一款獨立 AI 工作台,提供 Work 與 Code 雙模式,可在桌面端、網頁端和行動端委派編碼及專業工作任務。" + } + }, + "verified": false, + "sources": [ + { + "url": "https://www.trae.ai/work", + "title": "TRAE Work", + "fields": ["name", "description", "websiteUrl"] + }, + { + "url": "https://www.trae.ai/blog/trae_work_0609", + "title": "Introducing TRAE Work", + "fields": ["description", "familyId", "relatedProducts"] + }, + { + "url": "https://www.trae.ai/download", + "title": "TRAE Download Center", + "fields": ["platforms", "resourceUrls.download"] + }, + { + "url": "https://www.trae.ai/changelog", + "title": "TRAE changelog", + "fields": ["latestVersion", "resourceUrls.changelog"] + }, + { + "url": "https://www.trae.ai/pricing", + "title": "TRAE pricing", + "fields": ["pricing", "resourceUrls.pricing"] + }, + { + "url": "https://www.trae.ai/terms-of-service", + "title": "TRAE Terms of Service", + "fields": ["license"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.trae.ai/work", + "docsUrl": "https://docs.trae.ai", + "vendor": "ByteDance", + "latestVersion": "0.1.23", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Free", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + }, + { + "name": "Lite", + "value": 3, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Pro", + "value": 10, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Pro+", + "value": 30, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Ultra", + "value": 100, + "currency": "USD", + "per": "month", + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://www.trae.ai/download", + "changelog": "https://www.trae.ai/changelog", + "pricing": "https://www.trae.ai/pricing", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/Trae_ai", + "github": null, + "youtube": null, + "discord": null, + "reddit": "https://www.reddit.com/r/Trae_ai", + "blog": "https://www.trae.ai/blog" + }, + "relatedProducts": [ + { + "type": "ide", + "productId": "trae" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": null, + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/verdent-deck.json b/manifests/desktops/verdent-deck.json new file mode 100644 index 00000000..889b8880 --- /dev/null +++ b/manifests/desktops/verdent-deck.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "es": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "fr": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "id": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "ja": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "ko": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "pt": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "ru": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "tr": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "zh-Hans": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + }, + "zh-Hant": { + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes." + } + }, + "verified": false, + "sources": [ + { + "url": "https://www.verdent.ai/docs/verdent/getting-started/overview", + "title": "Verdent desktop overview" + }, + { + "url": "https://www.verdent.ai/docs/verdent/getting-started/installation", + "title": "Verdent installation" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "verdent-deck", + "name": "Verdent Deck", + "familyId": "verdent", + "description": "Verdent Deck is an AI-native desktop app for coordinating multiple coding agents in parallel, managing Git worktrees, and reviewing feature-level changes.", + "websiteUrl": "https://www.verdent.ai", + "docsUrl": "https://www.verdent.ai/docs/verdent/getting-started/overview", + "vendor": "Verdent AI", + "latestVersion": "1.5.0", + "githubUrl": "https://github.com/verdentAI/docs", + "license": "Proprietary", + "pricing": [ + { + "name": "Free Trial", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + }, + { + "name": "Pro", + "value": 19, + "currency": "USD", + "per": "month", + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://www.verdent.ai/download", + "changelog": "https://www.verdent.ai/changelog", + "pricing": "https://www.verdent.ai/pricing", + "mcp": "https://docs.verdent.ai/verdent-for-vscode/advanced-features/mcp", + "issue": null + }, + "communityUrls": { + "linkedin": "https://www.linkedin.com/company/verdent", + "twitter": "https://x.com/verdent", + "github": "https://github.com/verdentAI", + "youtube": null, + "discord": "https://discord.gg/NGjXEZcbJq", + "reddit": null, + "blog": null + }, + "relatedProducts": [ + { + "type": "extension", + "productId": "verdent" + } + ], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/Verdent Deck.app", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Verdent Deck", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/workbuddy.json b/manifests/desktops/workbuddy.json new file mode 100644 index 00000000..33cc1031 --- /dev/null +++ b/manifests/desktops/workbuddy.json @@ -0,0 +1,111 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "Tencent WorkBuddy ist eine AI-Agenten-Desktopumgebung mit Coding-Modus für Codegenerierung, Reviews, Debugging, Refactoring und autonome lokale Aufgaben." + }, + "es": { + "description": "Tencent WorkBuddy es una estación de escritorio con agentes de IA y modo Coding para generar, revisar, depurar y refactorizar código, además de ejecutar tareas locales autónomas." + }, + "fr": { + "description": "Tencent WorkBuddy est un poste de travail de bureau avec agents IA et mode Coding pour générer, réviser, déboguer et refactoriser du code, et exécuter des tâches locales autonomes." + }, + "id": { + "description": "Tencent WorkBuddy adalah workstation desktop agen AI dengan Coding Mode untuk pembuatan, peninjauan, debugging, refactoring kode, dan eksekusi tugas lokal secara otonom." + }, + "ja": { + "description": "Tencent WorkBuddyは、コード生成、レビュー、デバッグ、リファクタリング、自律的なローカルタスク実行に対応するCoding Modeを備えたAIエージェントデスクトップです。" + }, + "ko": { + "description": "Tencent WorkBuddy는 코드 생성, 검토, 디버깅, 리팩터링 및 자율적인 로컬 작업 실행을 위한 Coding Mode를 갖춘 AI 에이전트 데스크톱 워크스테이션입니다." + }, + "pt": { + "description": "Tencent WorkBuddy é uma estação desktop com agentes de IA e modo Coding para gerar, revisar, depurar e refatorar código, além de executar tarefas locais autônomas." + }, + "ru": { + "description": "Tencent WorkBuddy — настольная среда с ИИ-агентами и режимом Coding для генерации, проверки, отладки и рефакторинга кода, а также автономного выполнения локальных задач." + }, + "tr": { + "description": "Tencent WorkBuddy; kod üretimi, inceleme, hata ayıklama, yeniden düzenleme ve otonom yerel görev yürütme için Coding Mode sunan bir AI ajan masaüstü çalışma alanıdır." + }, + "zh-Hans": { + "description": "Tencent WorkBuddy 是一款 AI 智能体桌面工作台,提供 Coding Mode,可进行代码生成、审查、调试、重构及自主执行本地任务。" + }, + "zh-Hant": { + "description": "Tencent WorkBuddy 是一款 AI 智慧代理桌面工作台,提供 Coding Mode,可進行程式碼生成、審查、除錯、重構及自主執行本機任務。" + } + }, + "verified": false, + "sources": [ + { + "url": "https://www.workbuddy.ai/docs/workbuddy/Quickstart", + "title": "Tencent WorkBuddy quick start", + "fields": ["description", "websiteUrl", "docsUrl"] + }, + { + "url": "https://www.workbuddy.ai/docs/workbuddy/From-Beginner-to-Expert-Guide/FQA", + "title": "Tencent WorkBuddy FAQ", + "fields": ["platforms"] + }, + { + "url": "https://www.workbuddy.ai/docs/workbuddy/From-Beginner-to-Expert-Guide/Installation-Mac-Guide", + "title": "Tencent WorkBuddy macOS installation guide", + "fields": ["platforms", "resourceUrls.download"] + }, + { + "url": "https://www.workbuddy.ai/docs/workbuddy/From-Beginner-to-Expert-Guide/Installation-Win-Guide", + "title": "Tencent WorkBuddy Windows installation guide", + "fields": ["platforms", "resourceUrls.download"] + }, + { + "url": "https://www.workbuddy.ai/document/term", + "title": "Tencent WorkBuddy service agreement", + "fields": ["vendor", "license"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "workbuddy", + "name": "Tencent WorkBuddy", + "familyId": "workbuddy", + "description": "Tencent WorkBuddy is an AI agent desktop workstation with a Coding Mode for code generation, review, debugging, refactoring, and autonomous local task execution.", + "websiteUrl": "https://www.workbuddy.ai/", + "docsUrl": "https://www.workbuddy.ai/docs/workbuddy/", + "vendor": "Tencent", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [], + "resourceUrls": { + "download": "https://www.workbuddy.ai/", + "changelog": null, + "pricing": "https://www.workbuddy.ai/pricing/", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": null, + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": null + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": null, + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": null, + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/desktops/zcode.json b/manifests/desktops/zcode.json new file mode 100644 index 00000000..8357b3df --- /dev/null +++ b/manifests/desktops/zcode.json @@ -0,0 +1,108 @@ +{ + "$schema": "../$schemas/desktop.schema.json", + "translations": { + "de": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "es": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "fr": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "id": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "ja": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "ko": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "pt": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "ru": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "tr": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "zh-Hans": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + }, + "zh-Hant": { + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools." + } + }, + "verified": false, + "sources": [ + { + "url": "https://zcode.z.ai/en/docs/welcome", + "title": "ZCode documentation" + }, + { + "url": "https://zcode.z.ai/en/changelog", + "title": "ZCode changelog" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "zcode", + "name": "ZCode", + "familyId": "zcode", + "description": "ZCode is Z.ai's standalone desktop coding environment for agentic development, project planning, code changes, terminal execution, and reusable ADE tools.", + "websiteUrl": "https://zcode.z.ai", + "docsUrl": "https://zcode.z.ai/en/docs/welcome", + "vendor": "Z.ai", + "latestVersion": "3.3.6", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Free Download", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://zcode.z.ai/en/docs/install", + "changelog": "https://zcode.z.ai/en/changelog", + "pricing": null, + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": null, + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": null + }, + "relatedProducts": [], + "platforms": [ + { + "os": "macOS", + "installPath": "/Applications/ZCode.app", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Windows", + "installPath": "%LOCALAPPDATA%\\Programs\\ZCode", + "installCommand": null, + "launchCommand": null + }, + { + "os": "Linux", + "installPath": "/opt/ZCode", + "installCommand": null, + "launchCommand": null + } + ] +} diff --git a/manifests/extensions/claude-code.json b/manifests/extensions/claude-code.json index 7addd532..14137720 100644 --- a/manifests/extensions/claude-code.json +++ b/manifests/extensions/claude-code.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/extension.schema.json", "id": "claude-code", "name": "Claude Code", + "familyId": "claude-code", "description": "Claude Code is an AI coding assistant that integrates directly into VS Code. It provides intelligent code suggestions, explanations, and helps with debugging and code generation.", "translations": { "zh-Hans": { @@ -131,6 +132,7 @@ "blog": "https://www.claude.com/blog" }, "relatedProducts": [ + { "type": "desktop", "productId": "claude-code-desktop" }, { "type": "cli", "productId": "claude-code-cli" diff --git a/manifests/extensions/codex.json b/manifests/extensions/codex.json index ac591915..3d14e40f 100644 --- a/manifests/extensions/codex.json +++ b/manifests/extensions/codex.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/extension.schema.json", "id": "codex", "name": "Codex", + "familyId": "codex", "description": "OpenAI's Codex is an AI coding assistant extension for your IDE. It reads, modifies, and runs code through natural language commands, enabling building, debugging, and automating coding tasks.", "translations": { "zh-Hans": { @@ -39,12 +40,27 @@ } }, "verified": false, + "sources": [ + { + "url": "https://developers.openai.com/codex/ide", + "title": "Codex IDE extension documentation", + "fields": ["description", "docsUrl", "resourceUrls.download", "supportedIdes"] + }, + { + "url": "https://learn.chatgpt.com/docs/open-source", + "title": "Codex open-source components", + "fields": ["githubUrl", "license", "resourceUrls.issue"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://openai.com/codex", - "docsUrl": "https://developers.openai.com/codex/cli", + "docsUrl": "https://developers.openai.com/codex/ide", "vendor": "OpenAI", - "latestVersion": "0.44.0", - "githubUrl": "https://github.com/openai/codex", - "license": "Apache-2.0", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", "pricing": [ { "name": "ChatGPT Plus", @@ -77,7 +93,7 @@ ], "resourceUrls": { "download": "https://developers.openai.com/codex/ide", - "changelog": "https://github.com/openai/codex/releases", + "changelog": "https://developers.openai.com/codex/changelog", "pricing": "https://openai.com/pricing", "mcp": null, "issue": "https://github.com/openai/codex/issues" @@ -85,13 +101,14 @@ "communityUrls": { "linkedin": null, "twitter": "https://x.com/OpenAI", - "github": "https://github.com/openai/codex", + "github": null, "youtube": null, "discord": null, "reddit": null, "blog": "https://openai.com/news" }, "relatedProducts": [ + { "type": "desktop", "productId": "codex-app" }, { "type": "cli", "productId": "codex-cli" diff --git a/manifests/extensions/droid.json b/manifests/extensions/droid.json index 661698ba..7d31aa4f 100644 --- a/manifests/extensions/droid.json +++ b/manifests/extensions/droid.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/extension.schema.json", "id": "droid", "name": "Droid", + "familyId": "droid", "description": "An AI development platform providing \"Droids\" - autonomous coding agents that automate software tasks across workflows. Droids refactor code, handle debugging and tests, and generate features.", "translations": { "zh-Hans": { @@ -92,6 +93,7 @@ "blog": "https://factory.ai/news" }, "relatedProducts": [ + { "type": "desktop", "productId": "factory-desktop" }, { "type": "cli", "productId": "droid-cli" diff --git a/manifests/extensions/jetbrains-junie.json b/manifests/extensions/jetbrains-junie.json index 720aa0a8..41ad00fb 100644 --- a/manifests/extensions/jetbrains-junie.json +++ b/manifests/extensions/jetbrains-junie.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/extension.schema.json", "id": "jetbrains-junie", "name": "JetBrains Junie", + "familyId": "junie", "description": "JetBrains Junie is an AI coding agent that autonomously executes tasks or collaborates with developers. It handles routine tasks independently while assisting with complex work.", "translations": { "zh-Hans": { @@ -84,7 +85,7 @@ "reddit": "https://www.reddit.com/r/JetBrains", "blog": "https://blog.jetbrains.com/junie" }, - "relatedProducts": [], + "relatedProducts": [{ "type": "cli", "productId": "junie-cli" }], "supportedIdes": [ { "ideId": "jetbrains", diff --git a/manifests/extensions/kimi-code.json b/manifests/extensions/kimi-code.json new file mode 100644 index 00000000..b656add8 --- /dev/null +++ b/manifests/extensions/kimi-code.json @@ -0,0 +1,100 @@ +{ + "$schema": "../$schemas/extension.schema.json", + "translations": { + "de": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "es": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "fr": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "id": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "ja": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "ko": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "pt": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "ru": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "tr": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "zh-Hans": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + }, + "zh-Hant": { + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI." + } + }, + "verified": false, + "sources": [ + { + "url": "https://www.kimi.com/resources/kimi-code-introduction", + "title": "Kimi Code introduction" + }, + { + "url": "https://github.com/MoonshotAI/kimi-code", + "title": "Kimi Code repository" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "kimi-code", + "name": "Kimi Code for VS Code", + "familyId": "kimi-code", + "description": "Kimi Code for VS Code integrates Moonshot AI's coding agent with editor context, repository-aware changes, terminal operations, and shared workflows with Kimi Code CLI.", + "websiteUrl": "https://www.kimi.com/code", + "docsUrl": "https://www.kimi.com/code/docs/en", + "vendor": "Moonshot AI", + "latestVersion": "Latest", + "githubUrl": "https://github.com/MoonshotAI/kimi-code", + "license": "Apache-2.0", + "pricing": [ + { + "name": "Free", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": null, + "changelog": "https://www.kimi.com/code/docs/en/kimi-code/whats-new.html", + "pricing": null, + "mcp": null, + "issue": "https://github.com/MoonshotAI/kimi-code/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/Kimi_Moonshot", + "github": "https://github.com/MoonshotAI/kimi-code", + "youtube": null, + "discord": null, + "reddit": null, + "blog": null + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "kimi-cli" + } + ], + "supportedIdes": [ + { + "ideId": "vscode", + "marketplaceUrl": null, + "installUri": null + } + ] +} diff --git a/manifests/extensions/mistral-vibe.json b/manifests/extensions/mistral-vibe.json new file mode 100644 index 00000000..94a6555d --- /dev/null +++ b/manifests/extensions/mistral-vibe.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/extension.schema.json", + "translations": { + "de": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "es": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "fr": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "id": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "ja": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "ko": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "pt": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "ru": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "tr": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "zh-Hans": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + }, + "zh-Hant": { + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows." + } + }, + "verified": false, + "sources": [ + { + "url": "https://mistral.ai/news/vibe-agent/", + "title": "Introducing Mistral Vibe" + }, + { + "url": "https://docs.mistral.ai/vibe/code/overview", + "title": "Mistral Vibe documentation" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "mistral-vibe", + "name": "Mistral Vibe for VS Code", + "familyId": "mistral-vibe", + "description": "Mistral Vibe for VS Code brings Mistral's coding agent into the editor for repository-aware chat, code changes, command execution, and agentic development workflows.", + "websiteUrl": "https://mistral.ai/products/vibe", + "docsUrl": "https://docs.mistral.ai/vibe/code/overview", + "vendor": "Mistral AI", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Free", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + }, + { + "name": "Pro", + "value": 14.99, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Team", + "value": 24.99, + "currency": "USD", + "per": "user/month", + "category": "Business" + } + ], + "resourceUrls": { + "download": null, + "changelog": null, + "pricing": "https://mistral.ai/pricing", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/MistralAI", + "github": null, + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://mistral.ai/news" + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "mistral-vibe-cli" + } + ], + "supportedIdes": [ + { + "ideId": "vscode", + "marketplaceUrl": null, + "installUri": null + } + ] +} diff --git a/manifests/extensions/opencode-extension.json b/manifests/extensions/opencode-extension.json new file mode 100644 index 00000000..0561727f --- /dev/null +++ b/manifests/extensions/opencode-extension.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/extension.schema.json", + "translations": { + "de": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "es": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "fr": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "id": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "ja": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "ko": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "pt": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "ru": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "tr": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "zh-Hans": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + }, + "zh-Hant": { + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions." + } + }, + "verified": false, + "sources": [ + { + "url": "https://opencode.ai/download", + "title": "OpenCode downloads" + }, + { + "url": "https://github.com/anomalyco/opencode", + "title": "OpenCode repository" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "id": "opencode-extension", + "name": "OpenCode Extension", + "familyId": "opencode", + "description": "OpenCode Extension connects the open source OpenCode agent to VS Code-compatible editors for editor context, file references, and shared terminal-agent sessions.", + "websiteUrl": "https://opencode.ai/download", + "docsUrl": "https://opencode.ai/docs/ide", + "vendor": "Anomaly", + "latestVersion": "Latest", + "githubUrl": "https://github.com/anomalyco/opencode", + "license": "MIT", + "pricing": [ + { + "name": "Open Source", + "value": 0, + "currency": null, + "per": null, + "category": "Individual" + } + ], + "resourceUrls": { + "download": "https://opencode.ai/download", + "changelog": "https://github.com/anomalyco/opencode/releases", + "pricing": "https://opencode.ai/zen", + "mcp": null, + "issue": "https://github.com/anomalyco/opencode/issues" + }, + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/opencode", + "github": "https://github.com/anomalyco/opencode", + "youtube": null, + "discord": "https://discord.gg/opencode", + "reddit": null, + "blog": null + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "opencode" + }, + { + "type": "desktop", + "productId": "opencode-desktop" + } + ], + "supportedIdes": [ + { + "ideId": "vscode", + "marketplaceUrl": null, + "installUri": null + }, + { + "ideId": "cursor", + "marketplaceUrl": null, + "installUri": null + }, + { + "ideId": "zed", + "marketplaceUrl": null, + "installUri": null + } + ] +} diff --git a/manifests/extensions/qoder.json b/manifests/extensions/qoder.json index 0628cdd3..5d695a9c 100644 --- a/manifests/extensions/qoder.json +++ b/manifests/extensions/qoder.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/extension.schema.json", "id": "qoder", "name": "Qoder", + "familyId": "qoder", "description": "An agentic coding platform that brings autonomous AI agents to your IDE. Features code completion, Ask mode for debugging, and Agent mode for complex multi-step development tasks.", "translations": { "zh-Hans": { @@ -76,7 +77,7 @@ "productId": "qoder-cli" }, { - "type": "ide", + "type": "desktop", "productId": "qoder" } ], diff --git a/manifests/extensions/rovo-dev.json b/manifests/extensions/rovo-dev.json new file mode 100644 index 00000000..12cb3119 --- /dev/null +++ b/manifests/extensions/rovo-dev.json @@ -0,0 +1,121 @@ +{ + "$schema": "../$schemas/extension.schema.json", + "id": "rovo-dev", + "name": "Rovo Dev for VS Code", + "familyId": "rovo-dev", + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context.", + "translations": { + "de": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "es": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "fr": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "id": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "ja": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "ko": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "pt": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "ru": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "tr": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "zh-Hans": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + }, + "zh-Hant": { + "description": "Rovo Dev for VS Code is Atlassian's editor coding agent for code-aware chat, planning, edits, tests, change review, and access to Jira and Confluence context." + } + }, + "verified": false, + "sources": [ + { + "url": "https://www.atlassian.com/blog/announcements/rovo-dev-now-generally-available-in-vs-code", + "title": "Rovo Dev is generally available in VS Code" + }, + { + "url": "https://marketplace.visualstudio.com/items?itemName=Atlassian.atlascode", + "title": "Atlassian VS Code extension" + }, + { + "url": "https://www.atlassian.com/software/rovo-dev/pricing", + "title": "Rovo Dev pricing" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://marketplace.visualstudio.com/items?itemName=Atlassian.atlascode", + "docsUrl": "https://support.atlassian.com/rovo/docs/work-with-rovo-dev-agents/", + "vendor": "Atlassian", + "latestVersion": "Latest", + "githubUrl": null, + "license": "Proprietary", + "pricing": [ + { + "name": "Rovo Dev Free", + "value": 0, + "currency": null, + "per": "month", + "category": "Individual" + }, + { + "name": "Rovo Dev Standard", + "value": 20, + "currency": "USD", + "per": "user/month", + "category": "Business" + } + ], + "resourceUrls": { + "download": "https://marketplace.visualstudio.com/items?itemName=Atlassian.atlascode", + "changelog": "https://marketplace.visualstudio.com/items/Atlassian.atlascode/changelog", + "pricing": "https://www.atlassian.com/software/rovo-dev/pricing", + "mcp": null, + "issue": null + }, + "communityUrls": { + "linkedin": "https://www.linkedin.com/company/atlassian", + "twitter": "https://x.com/Atlassian", + "github": null, + "youtube": "https://www.youtube.com/@Atlassian", + "discord": null, + "reddit": "https://www.reddit.com/r/atlassian", + "blog": "https://www.atlassian.com/blog" + }, + "relatedProducts": [ + { + "type": "cli", + "productId": "rovo-dev-cli" + } + ], + "supportedIdes": [ + { + "ideId": "vscode", + "marketplaceUrl": "https://marketplace.visualstudio.com/items?itemName=Atlassian.atlascode", + "installUri": "vscode:extension/Atlassian.atlascode" + }, + { + "ideId": "cursor", + "marketplaceUrl": null, + "installUri": "cursor:extension/Atlassian.atlascode" + }, + { + "ideId": "windsurf", + "marketplaceUrl": null, + "installUri": "windsurf:extension/Atlassian.atlascode" + } + ] +} diff --git a/manifests/extensions/verdent.json b/manifests/extensions/verdent.json index 3c809334..b64e4557 100644 --- a/manifests/extensions/verdent.json +++ b/manifests/extensions/verdent.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/extension.schema.json", "id": "verdent", "name": "Verdent", + "familyId": "verdent", "description": "Advanced agentic coding assistant that orchestrates multiple AI agents in parallel to tackle complex software tasks with structured planning, verification, and customizable subagents.", "translations": { "zh-Hans": { @@ -79,7 +80,7 @@ }, "relatedProducts": [ { - "type": "ide", + "type": "desktop", "productId": "verdent-deck" } ], diff --git a/manifests/ides/air.json b/manifests/ides/air.json deleted file mode 100644 index 97c2edee..00000000 --- a/manifests/ides/air.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "$schema": "../$schemas/ide.schema.json", - "id": "air", - "name": "Air", - "description": "An agentic development environment that helps developers delegate complex coding tasks to AI agents that work in parallel. Requires an Anthropic subscription.", - "translations": { - "zh-Hans": { - "description": "Agent 开发环境,帮助开发将复杂的编码任务委托给并行工作的 AI 代理。需要 Anthropic 订阅。" - }, - "de": { - "description": "Eine agente Entwicklungsumgebung, die Entwicklern hilft, komplexe Codierungsaufgaben an parallel arbeitende AI-Agenten zu delegieren. Erfordert ein Anthropic-Abonnement." - }, - "ko": { - "description": "개발자가 복잡한 코딩 작업을 병렬로 작동하는 AI 에이전트에게 위임할 수 있도록 도와주는 에이전트 개발 환경입니다. Anthropic 구독이 필요합니다." - }, - "es": { - "description": "Un entorno de desarrollo con agentes que ayuda a los desarrolladores a delegar tareas complejas de codificación a agentes de IA que trabajan en paralelo. Requiere una suscripción a Anthropic." - }, - "fr": { - "description": "Un environnement de développement avec agents qui aide les développeurs à déléguer des tâches complexes de codage à des agents IA travaillant en parallèle. Nécessite un abonnement Anthropic." - }, - "id": { - "description": "Lingkungan pengembangan berbasis agen yang membantu pengembang mendelegasikan tugas pengkodean kompleks ke agen AI yang bekerja secara paralel. Memerlukan langganan Anthropic." - }, - "ja": { - "description": "エージェント開発環境で、開発者が複雑なコーディングタスクを並列で動作するAIエージェントに委譲できるようにします。Anthropicのサブスクリプションが必要です。" - }, - "pt": { - "description": "Um ambiente de desenvolvimento com agentes que ajuda os desenvolvedores a delegar tarefas complexas de codificação para agentes de IA que trabalham em paralelo. Requer uma assinatura Anthropic." - }, - "ru": { - "description": "Агентская среда разработки, помогающая разработчикам делегировать сложные задачи по кодированию агентам ИИ, работающим параллельно. Требуется подписка Anthropic." - }, - "tr": { - "description": "Geliştiricilerin karmaşık kodlama görevlerini paralel çalışan AI ajanlarına devretmelerine yardımcı olan bir ajan geliştirme ortamı. Anthropic aboneliği gerektirir." - }, - "zh-Hant": { - "description": "Agent 開發環境,幫助開發 將複雜的編碼任務委託給並行工作的 AI 代理。需要 Anthropic 訂閱。" - } - }, - "verified": false, - "websiteUrl": "https://air.dev", - "docsUrl": "https://www.jetbrains.com/help/air", - "vendor": "JetBrains", - "latestVersion": "Preview", - "githubUrl": null, - "license": "Proprietary", - "pricing": [ - { - "name": "Preview", - "value": 0, - "currency": null, - "per": null, - "category": "Individual" - } - ], - "resourceUrls": { - "download": "https://air.dev", - "changelog": null, - "pricing": null, - "mcp": null, - "issue": "https://youtrack.jetbrains.com/projects/AIR" - }, - "communityUrls": { - "linkedin": "https://www.linkedin.com/company/jetbrains", - "twitter": "https://x.com/getsome_air", - "github": null, - "youtube": null, - "discord": "https://discord.com/invite/jetbrains", - "reddit": null, - "blog": null - }, - "relatedProducts": [], - "platforms": [ - { - "os": "macOS", - "installPath": "/Applications/Air.app", - "installCommand": null, - "launchCommand": "open -a \"Air\"" - } - ] -} diff --git a/manifests/ides/qoder.json b/manifests/ides/qoder.json deleted file mode 100644 index 6ce5d9e5..00000000 --- a/manifests/ides/qoder.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "$schema": "../$schemas/ide.schema.json", - "id": "qoder", - "name": "Qoder", - "description": "An agentic AI coding platform for real software development, integrating context-aware intelligent agents to handle code generation and project-level tasks.", - "translations": { - "zh-Hans": { - "description": "阿里巴巴推出的智能 AI 编码平台,用于真实软件开发,集成上下文感知的智能 Agent 来处理代码生成和项目级任务。" - }, - "de": { - "description": "Eine intelligente IDE mit AI-gestützter Code-Vervollständigung, Debugging und Projektmanagement-Funktionen." - }, - "ko": { - "description": "실제 소프트웨어 개발을 위한 에이전트 기반 AI 코딩 플랫폼으로, 코드 생성 및 프로젝트 수준 작업을 처리하는 컨텍스트 인식형 지능형 에이전트를 통합합니다." - }, - "es": { - "description": "Plataforma de codificación con agentes IA para desarrollo real de software. Agentes inteligentes conscientes del contexto manejan código y tareas de proyecto." - }, - "fr": { - "description": "Plateforme de codage avec agents IA pour développement réel de logiciels. Agents intelligents conscients du contexte gèrent code et tâches de projet." - }, - "id": { - "description": "Platforma pengodean AI berbasis agen untuk pengembangan perangkat lunak nyata, mengintegrasikan agen cerdas yang sadar konteks untuk menangani pembuatan kode dan tugas tingkat proyek." - }, - "ja": { - "description": "本格的なソフトウェア開発のためのエージェントAIコーディングプラットフォーム。コンテキストを認識するインテリジェントなエージェントを統合して、コード生成とプロジェクトレベルのタスクを処理します。" - }, - "pt": { - "description": "Plataforma de codificação com agentes IA para desenvolvimento real de software. Agentes inteligentes conscientes do contexto geram código e tarefas de projeto." - }, - "ru": { - "description": "Платформа кодирования с агентами ИИ для реальной ПО разработки. Интеллектуальные агенты с контекстом обрабатывают генерацию кода и задачи." - }, - "tr": { - "description": "Gerçek yazılım geliştirme için ajan tabanlı AI kodlama platformu, kod üretimi ve proje düzeyindeki görevleri yönetmek için bağlam fark eden akıllı ajanları entegre eder." - }, - "zh-Hant": { - "description": "阿里巴巴推出的智能 AI 編碼平台,用於真實軟件開發,集成上下文感知的智能 Agent 來處理代碼生成和項目級任務。" - } - }, - "verified": false, - "websiteUrl": "https://qoder.com", - "docsUrl": "https://docs.qoder.com", - "vendor": "Alibaba", - "latestVersion": "Latest", - "githubUrl": null, - "license": "Proprietary", - "pricing": [ - { - "name": "Free", - "value": 0, - "currency": null, - "per": null, - "category": "Individual" - }, - { - "name": "Pro", - "value": 20, - "currency": "USD", - "per": "month", - "category": "Individual" - }, - { - "name": "Pro+", - "value": 60, - "currency": "USD", - "per": "month", - "category": "Individual" - }, - { - "name": "Teams", - "value": null, - "currency": null, - "per": "custom", - "category": "Business" - } - ], - "resourceUrls": { - "download": "https://qoder.com/download", - "changelog": null, - "pricing": "https://qoder.com/pricing", - "mcp": null, - "issue": null - }, - "communityUrls": { - "linkedin": null, - "twitter": null, - "github": null, - "youtube": null, - "discord": null, - "reddit": null, - "blog": null - }, - "relatedProducts": [], - "platforms": [ - { - "os": "macOS", - "installCommand": null, - "launchCommand": "qoder", - "installPath": null - }, - { - "os": "Windows", - "installCommand": null, - "launchCommand": "qoder", - "installPath": null - } - ] -} diff --git a/manifests/ides/trae.json b/manifests/ides/trae.json index da66abc0..6cd640a1 100644 --- a/manifests/ides/trae.json +++ b/manifests/ides/trae.json @@ -1,7 +1,8 @@ { "$schema": "../$schemas/ide.schema.json", "id": "trae", - "name": "TRAE", + "name": "TRAE IDE", + "familyId": "trae", "description": "An AI-powered IDE that acts as a 10x \"AI engineer,\" providing real-time code completion, chat-based assistance, and autonomous code generation (Builder/SOLO mode) for end-to-end development.", "translations": { "zh-Hans": { @@ -39,10 +40,40 @@ } }, "verified": false, - "websiteUrl": "https://www.trae.ai", + "sources": [ + { + "url": "https://www.trae.ai/solo-code", + "title": "TRAE IDE", + "fields": ["name", "description", "websiteUrl"] + }, + { + "url": "https://www.trae.ai/blog/trae_work_0609", + "title": "Introducing TRAE Work", + "fields": ["familyId", "relatedProducts"] + }, + { + "url": "https://www.trae.ai/download", + "title": "TRAE Download Center", + "fields": ["platforms", "resourceUrls.download"] + }, + { + "url": "https://www.trae.ai/changelog", + "title": "TRAE changelog", + "fields": ["latestVersion", "resourceUrls.changelog"] + }, + { + "url": "https://www.trae.ai/pricing", + "title": "TRAE pricing", + "fields": ["pricing", "resourceUrls.pricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.trae.ai/solo-code", "docsUrl": "https://docs.trae.ai", "vendor": "ByteDance", - "latestVersion": "2.7.1", + "latestVersion": "3.5.71", "githubUrl": null, "license": "Proprietary", "pricing": [ @@ -53,12 +84,33 @@ "per": null, "category": "Individual" }, + { + "name": "Lite", + "value": 3, + "currency": "USD", + "per": "month", + "category": "Individual" + }, { "name": "Pro", "value": 10, "currency": "USD", "per": "month", "category": "Individual" + }, + { + "name": "Pro+", + "value": 30, + "currency": "USD", + "per": "month", + "category": "Individual" + }, + { + "name": "Ultra", + "value": 100, + "currency": "USD", + "per": "month", + "category": "Individual" } ], "resourceUrls": { @@ -77,7 +129,12 @@ "reddit": "https://www.reddit.com/r/Trae_ai", "blog": "https://www.trae.ai/blog" }, - "relatedProducts": [], + "relatedProducts": [ + { + "type": "desktop", + "productId": "trae-work" + } + ], "platforms": [ { "os": "macOS", diff --git a/manifests/ides/verdent-deck.json b/manifests/ides/verdent-deck.json deleted file mode 100644 index 946266e2..00000000 --- a/manifests/ides/verdent-deck.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "$schema": "../$schemas/ide.schema.json", - "id": "verdent-deck", - "name": "Verdent Deck", - "description": "Parallel Agentic Development Environment that manages multiple AI coding agents in parallel for complex, feature-level software tasks with built-in Git worktree support.", - "translations": { - "zh-Hans": { - "description": "并行代理开发环境,管理多个 AI 编码代理并行处理复杂的功能级软件任务,内置 Git 工作树支持。" - }, - "de": { - "description": "Parallele Agentenentwicklungsumgebung, die mehrere AI-Coding-Agenten parallel für komplexe Software-Aufgaben auf Feature-Ebene mit integrierter Git-Worktree-Unterstützung verwaltet." - }, - "ko": { - "description": "복잡한 기능 수준의 소프트웨어 작업을 위해 여러 AI 코딩 에이전트를 병렬로 관리하는 병렬 에이전트 개발 환경으로, Git 워크트리 지원이 내장되어 있습니다." - }, - "es": { - "description": "Entorno de desarrollo con agentes paralelos que gestiona múltiples agentes IA en paralelo para tareas de software complejas con soporte Git worktree." - }, - "fr": { - "description": "Environnement de développement avec agents parallèles qui gère plusieurs agents IA en parallèle pour tâches logicielles complexes avec support Git worktree." - }, - "id": { - "description": "Lingkungan pengembangan agen paralel yang mengelola beberapa agen pengkodean AI secara paralel untuk tugas perangkat lunak kompleks tingkat fitur dengan dukungan Git worktree terintegrasi." - }, - "ja": { - "description": "複雑な機能レベルのソフトウェアタスクのために複数のAIコーディングエージェントを並列で管理する並列エージェント開発環境。Git worktreeサポートが内蔵されています。" - }, - "pt": { - "description": "Ambiente de desenvolvimento com agentes paralelos que gerencia múltiplos agentes IA em paralelo para tarefas complexas com suporte Git worktree." - }, - "ru": { - "description": "Параллельная агентская среда разработки, которая управляет несколькими агентами кодирования ИИ параллельно для сложных задач программного обеспечения на уровне функций с поддержкой Git worktree." - }, - "tr": { - "description": "Karmaşık özellik düzeyindeki yazılım görevleri için birden fazla AI kodlama ajanını paralel olarak yöneten, iç entegre Git worktree desteği olan Paralel Ajan Geliştirme Ortamı." - }, - "zh-Hant": { - "description": "並行代理開發環境,管理多個 AI 編碼代理並行處理複雜的功能級軟件任務,內置 Git 工作樹支持。" - } - }, - "verified": false, - "websiteUrl": "https://www.verdent.ai", - "docsUrl": "https://docs.verdent.ai", - "vendor": "Verdent AI", - "latestVersion": "1.5.0", - "githubUrl": "https://github.com/verdentAI/docs", - "license": "Proprietary", - "pricing": [ - { - "name": "Free Trial", - "value": 0, - "currency": null, - "per": null, - "category": "Individual" - }, - { - "name": "Pro", - "value": 19, - "currency": "USD", - "per": "month", - "category": "Individual" - } - ], - "resourceUrls": { - "download": "https://www.verdent.ai/download", - "changelog": "https://www.verdent.ai/changelog", - "pricing": "https://www.verdent.ai/pricing", - "mcp": "https://docs.verdent.ai/verdent-for-vscode/advanced-features/mcp", - "issue": null - }, - "communityUrls": { - "linkedin": "https://www.linkedin.com/company/verdent", - "twitter": "https://x.com/verdent", - "github": "https://github.com/verdentAI", - "youtube": null, - "discord": "https://discord.gg/NGjXEZcbJq", - "reddit": null, - "blog": null - }, - "relatedProducts": [ - { - "type": "extension", - "productId": "verdent" - } - ], - "platforms": [ - { - "os": "macOS", - "installPath": "/Applications/Verdent Deck.app", - "installCommand": null, - "launchCommand": "open -a \"Verdent Deck\"" - }, - { - "os": "Windows", - "installPath": "%LOCALAPPDATA%\\Verdent Deck", - "installCommand": null, - "launchCommand": "verdent-deck" - } - ] -} diff --git a/manifests/models/claude-fable-5.json b/manifests/models/claude-fable-5.json index af753ae1..04c81fb4 100644 --- a/manifests/models/claude-fable-5.json +++ b/manifests/models/claude-fable-5.json @@ -70,9 +70,29 @@ "contextWindow": 1000000, "maxOutput": 128000, "tokenPricing": { - "input": 10, - "output": 50, - "cache": 1 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 10, + "output": 50, + "cacheRead": 1, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-06-09", "lifecycle": "latest", diff --git a/manifests/models/claude-haiku-3-5.json b/manifests/models/claude-haiku-3-5.json new file mode 100644 index 00000000..2cabf5f6 --- /dev/null +++ b/manifests/models/claude-haiku-3-5.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-haiku-3-5", + "name": "Claude Haiku 3.5", + "description": "Anthropic's fast Claude 3.5 model for cost-efficient coding, accurate tool use, sub-agents, and high-volume application workloads.", + "translations": { + "de": { + "description": "Anthropics schnelles Claude-3.5-Modell für kosteneffizientes Coding, präzise Werkzeugnutzung, Sub-Agenten und Anwendungen mit hohem Volumen." + }, + "es": { + "description": "El rápido modelo Claude 3.5 de Anthropic para código rentable, uso preciso de herramientas, subagentes y aplicaciones de gran volumen." + }, + "fr": { + "description": "Le modèle Claude 3.5 rapide d’Anthropic pour le codage économique, l’usage précis d’outils, les sous-agents et les applications à grand volume." + }, + "id": { + "description": "Model Claude 3.5 Anthropic yang cepat untuk coding hemat biaya, penggunaan alat akurat, sub-agen, dan beban aplikasi bervolume tinggi." + }, + "ja": { + "description": "費用効率の高いコーディング、正確なツール利用、サブエージェント、大量処理アプリ向けのAnthropic製高速Claude 3.5モデル。" + }, + "ko": { + "description": "비용 효율적인 코딩, 정확한 도구 사용, 하위 에이전트 및 대용량 애플리케이션 작업을 위한 Anthropic의 빠른 Claude 3.5 모델입니다." + }, + "pt": { + "description": "O rápido modelo Claude 3.5 da Anthropic para código econômico, uso preciso de ferramentas, subagentes e aplicações de alto volume." + }, + "ru": { + "description": "Быстрая модель Claude 3.5 от Anthropic для экономичного программирования, точных инструментов, субагентов и высоконагруженных приложений." + }, + "tr": { + "description": "Anthropic'in uygun maliyetli kodlama, doğru araç kullanımı, alt aracılar ve yüksek hacimli uygulama iş yükleri için hızlı Claude 3.5 modeli." + }, + "zh-Hans": { + "description": "Anthropic 面向高性价比编码、精确工具调用、子智能体和高吞吐应用负载的快速 Claude 3.5 模型。" + }, + "zh-Hant": { + "description": "Anthropic 面向高性價比編碼、精確工具呼叫、子智慧體和高吞吐應用負載的快速 Claude 3.5 模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.anthropic.com/news/3-5-models-and-computer-use", + "title": "Claude 3.5 Haiku announcement", + "fields": ["name", "description", "tokenPricing", "capabilities"] + }, + { + "url": "https://platform.claude.com/docs/en/release-notes/overview", + "title": "Claude Platform release notes", + "fields": ["releaseDate", "inputModalities", "outputModalities", "capabilities"] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/pricing", + "title": "Claude Platform pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://www.anthropic.com/news/3-5-models-and-computer-use", + "vendor": "Anthropic", + "size": null, + "contextWindow": 200000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.8, + "output": 4, + "cacheRead": 0.08, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2024-11-04", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-haiku-3.json b/manifests/models/claude-haiku-3.json new file mode 100644 index 00000000..31ccc1fa --- /dev/null +++ b/manifests/models/claude-haiku-3.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-haiku-3", + "name": "Claude Haiku 3", + "description": "Anthropic's fast, low-cost Claude 3 model for lightweight coding, high-volume processing, visual analysis, and responsive applications.", + "translations": { + "de": { + "description": "Anthropics schnelles, kostengünstiges Claude-3-Modell für leichtes Coding, Massenverarbeitung, visuelle Analyse und reaktionsschnelle Anwendungen." + }, + "es": { + "description": "El modelo Claude 3 rápido y económico de Anthropic para código ligero, procesamiento masivo, análisis visual y aplicaciones ágiles." + }, + "fr": { + "description": "Le modèle Claude 3 rapide et économique d’Anthropic pour le codage léger, le traitement à grande échelle, l’analyse visuelle et les applications réactives." + }, + "id": { + "description": "Model Claude 3 Anthropic yang cepat dan hemat untuk coding ringan, pemrosesan volume tinggi, analisis visual, dan aplikasi responsif." + }, + "ja": { + "description": "軽量なコーディング、大量処理、視覚分析、応答性の高いアプリ向けのAnthropic製高速・低コストClaude 3モデル。" + }, + "ko": { + "description": "가벼운 코딩, 대량 처리, 시각 분석 및 반응형 애플리케이션을 위한 Anthropic의 빠르고 저렴한 Claude 3 모델입니다." + }, + "pt": { + "description": "O modelo Claude 3 rápido e econômico da Anthropic para código leve, processamento em volume, análise visual e aplicações responsivas." + }, + "ru": { + "description": "Быстрая и экономичная модель Claude 3 от Anthropic для лёгкого программирования, массовой обработки, визуального анализа и интерактивных приложений." + }, + "tr": { + "description": "Anthropic'in hafif kodlama, yüksek hacimli işleme, görsel analiz ve hızlı yanıt veren uygulamalar için hızlı ve düşük maliyetli Claude 3 modeli." + }, + "zh-Hans": { + "description": "Anthropic 面向轻量编码、高吞吐处理、视觉分析和响应式应用的快速低成本 Claude 3 模型。" + }, + "zh-Hant": { + "description": "Anthropic 面向輕量編碼、高吞吐處理、視覺分析和回應式應用的快速低成本 Claude 3 模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.anthropic.com/news/claude-3-haiku", + "title": "Claude 3 Haiku launch", + "fields": ["name", "description", "releaseDate", "inputModalities", "outputModalities"] + }, + { + "url": "https://www.anthropic.com/news/claude-3-family", + "title": "Introducing the Claude 3 model family", + "fields": ["contextWindow", "tokenPricing"] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + }, + { + "url": "https://platform.claude.com/docs/en/release-notes/overview", + "title": "Claude Platform release notes", + "fields": ["capabilities"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://www.anthropic.com/news/claude-3-haiku", + "vendor": "Anthropic", + "size": null, + "contextWindow": 200000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.25, + "output": 1.25, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2024-03-13", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-haiku-4-5.json b/manifests/models/claude-haiku-4-5.json index f185e680..ca89412f 100644 --- a/manifests/models/claude-haiku-4-5.json +++ b/manifests/models/claude-haiku-4-5.json @@ -75,9 +75,29 @@ "contextWindow": 200000, "maxOutput": 64000, "tokenPricing": { - "input": 1, - "output": 5, - "cache": 0.1 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1, + "output": 5, + "cacheRead": 0.1, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-10-15", "lifecycle": "latest", diff --git a/manifests/models/claude-mythos-5.json b/manifests/models/claude-mythos-5.json new file mode 100644 index 00000000..cbdcda4d --- /dev/null +++ b/manifests/models/claude-mythos-5.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-mythos-5", + "name": "Claude Mythos 5", + "description": "Anthropic's limited-availability model for approved Project Glasswing customers, focused on advanced defensive cybersecurity and complex agentic work.", + "translations": { + "de": { + "description": "Anthropics Modell mit begrenzter Verfügbarkeit für genehmigte Project-Glasswing-Kunden, fokussiert auf fortgeschrittene defensive Cybersicherheit und komplexe Agentenarbeit." + }, + "es": { + "description": "El modelo de disponibilidad limitada de Anthropic para clientes aprobados de Project Glasswing, centrado en ciberseguridad defensiva avanzada y trabajo agéntico complejo." + }, + "fr": { + "description": "Le modèle à disponibilité limitée d’Anthropic pour les clients approuvés de Project Glasswing, axé sur la cybersécurité défensive avancée et les agents complexes." + }, + "id": { + "description": "Model Anthropic dengan ketersediaan terbatas bagi pelanggan Project Glasswing yang disetujui, berfokus pada keamanan siber defensif dan pekerjaan agentik kompleks." + }, + "ja": { + "description": "Project Glasswingの承認顧客向けに限定提供され、高度な防御的サイバーセキュリティと複雑なエージェント作業に特化したAnthropicモデル。" + }, + "ko": { + "description": "승인된 Project Glasswing 고객에게 제한 제공되며 고급 방어 사이버 보안과 복잡한 에이전트 작업에 중점을 둔 Anthropic 모델입니다." + }, + "pt": { + "description": "O modelo de disponibilidade limitada da Anthropic para clientes aprovados do Project Glasswing, focado em cibersegurança defensiva avançada e trabalho agêntico complexo." + }, + "ru": { + "description": "Модель Anthropic с ограниченным доступом для одобренных клиентов Project Glasswing, ориентированная на защитную кибербезопасность и сложные агентные задачи." + }, + "tr": { + "description": "Anthropic'in onaylı Project Glasswing müşterilerine sınırlı sunulan, gelişmiş savunma siber güvenliği ve karmaşık aracı çalışmalara odaklı modeli." + }, + "zh-Hans": { + "description": "Anthropic 面向获批 Project Glasswing 客户限量提供的模型,专注于高级防御性网络安全和复杂智能体工作。" + }, + "zh-Hant": { + "description": "Anthropic 面向獲批 Project Glasswing 客戶限量提供的模型,專注於高階防禦性網路安全和複雜智慧體工作。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5", + "title": "Introducing Claude Fable 5 and Claude Mythos 5", + "fields": [ + "name", + "description", + "releaseDate", + "lifecycle", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/models/overview", + "title": "Claude models overview", + "fields": ["docsUrl", "contextWindow", "maxOutput", "knowledgeCutoff"] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/pricing", + "title": "Claude API pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5", + "vendor": "Anthropic", + "size": null, + "contextWindow": 1000000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 10, + "output": 50, + "cacheRead": 1, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-06-09", + "lifecycle": "latest", + "knowledgeCutoff": "2026-01", + "inputModalities": ["text", "image", "pdf"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-opus-3.json b/manifests/models/claude-opus-3.json new file mode 100644 index 00000000..99a59848 --- /dev/null +++ b/manifests/models/claude-opus-3.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-opus-3", + "name": "Claude Opus 3", + "description": "Anthropic's former flagship Claude 3 model for complex reasoning, coding, analysis, tool use, and multimodal tasks.", + "translations": { + "de": { + "description": "Anthropics ehemaliges Claude-3-Flaggschiff für komplexes Reasoning, Coding, Analyse, Werkzeugnutzung und multimodale Aufgaben." + }, + "es": { + "description": "El antiguo modelo insignia Claude 3 de Anthropic para razonamiento complejo, código, análisis, herramientas y tareas multimodales." + }, + "fr": { + "description": "L’ancien modèle phare Claude 3 d’Anthropic pour le raisonnement complexe, le codage, l’analyse, les outils et les tâches multimodales." + }, + "id": { + "description": "Mantan model unggulan Claude 3 Anthropic untuk penalaran kompleks, coding, analisis, penggunaan alat, dan tugas multimodal." + }, + "ja": { + "description": "複雑な推論、コーディング、分析、ツール利用、マルチモーダル作業向けに提供されたAnthropicの旧Claude 3フラッグシップモデル。" + }, + "ko": { + "description": "복잡한 추론, 코딩, 분석, 도구 사용 및 멀티모달 작업을 위한 Anthropic의 이전 Claude 3 플래그십 모델입니다." + }, + "pt": { + "description": "O antigo modelo principal Claude 3 da Anthropic para raciocínio complexo, código, análise, ferramentas e tarefas multimodais." + }, + "ru": { + "description": "Бывшая флагманская модель Claude 3 от Anthropic для сложных рассуждений, программирования, анализа, инструментов и мультимодальных задач." + }, + "tr": { + "description": "Anthropic'in karmaşık akıl yürütme, kodlama, analiz, araç kullanımı ve çok modlu görevler için eski amiral gemisi Claude 3 modeli." + }, + "zh-Hans": { + "description": "Anthropic 曾经的 Claude 3 旗舰模型,面向复杂推理、编码、分析、工具调用和多模态任务。" + }, + "zh-Hant": { + "description": "Anthropic 曾經的 Claude 3 旗艦模型,面向複雜推理、編碼、分析、工具呼叫和多模態任務。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.anthropic.com/news/claude-3-family", + "title": "Introducing the Claude 3 model family", + "fields": [ + "name", + "description", + "contextWindow", + "tokenPricing", + "releaseDate", + "inputModalities", + "outputModalities" + ] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + }, + { + "url": "https://platform.claude.com/docs/en/release-notes/overview", + "title": "Claude Platform release notes", + "fields": ["capabilities"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://www.anthropic.com/news/claude-3-family", + "vendor": "Anthropic", + "size": null, + "contextWindow": 200000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 15, + "output": 75, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2024-03-04", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-opus-4-1.json b/manifests/models/claude-opus-4-1.json index 99194de2..8b045139 100644 --- a/manifests/models/claude-opus-4-1.json +++ b/manifests/models/claude-opus-4-1.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.anthropic.com", "docsUrl": "https://docs.anthropic.com/claude/docs/models-overview", "vendor": "Anthropic", @@ -46,12 +56,32 @@ "contextWindow": 200000, "maxOutput": 32000, "tokenPricing": { - "input": 15, - "output": 75, - "cache": 1.5 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 15, + "output": 75, + "cacheRead": 1.5, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-08-05", - "lifecycle": "maintained", + "lifecycle": "deprecated", "knowledgeCutoff": null, "inputModalities": ["text", "image", "pdf"], "outputModalities": ["text"], diff --git a/manifests/models/claude-opus-4-5.json b/manifests/models/claude-opus-4-5.json index a7950ef6..2ece8810 100644 --- a/manifests/models/claude-opus-4-5.json +++ b/manifests/models/claude-opus-4-5.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model status", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.anthropic.com", "docsUrl": "https://docs.anthropic.com/claude/docs/models-overview", "vendor": "Anthropic", @@ -46,12 +56,32 @@ "contextWindow": 200000, "maxOutput": 64000, "tokenPricing": { - "input": 5, - "output": 25, - "cache": 0.5 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 5, + "output": 25, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-11-24", - "lifecycle": "latest", + "lifecycle": "maintained", "knowledgeCutoff": "2025-05", "inputModalities": ["text", "image", "pdf"], "outputModalities": ["text"], diff --git a/manifests/models/claude-opus-4-6.json b/manifests/models/claude-opus-4-6.json new file mode 100644 index 00000000..d48fafdf --- /dev/null +++ b/manifests/models/claude-opus-4-6.json @@ -0,0 +1,125 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "description": "Anthropic's flagship model for sustained agentic tasks, careful planning, large codebases, computer use, and complex professional work.", + "translations": { + "de": { + "description": "Anthropics Flaggschiffmodell für ausdauernde agentische Aufgaben, sorgfältige Planung, große Codebasen, Computernutzung und komplexe Facharbeit." + }, + "es": { + "description": "El modelo insignia de Anthropic para tareas agénticas prolongadas, planificación cuidadosa, grandes bases de código, uso de computadoras y trabajo complejo." + }, + "fr": { + "description": "Le modèle phare d’Anthropic pour les tâches agentiques prolongées, la planification, les grandes bases de code, l’ordinateur et le travail complexe." + }, + "id": { + "description": "Model unggulan Anthropic untuk tugas agentik berkelanjutan, perencanaan cermat, basis kode besar, penggunaan komputer, dan pekerjaan profesional kompleks." + }, + "ja": { + "description": "長時間のエージェントタスク、慎重な計画、大規模コードベース、コンピューター操作、複雑な専門業務向けのAnthropic旗艦モデル。" + }, + "ko": { + "description": "지속적인 에이전트 작업, 신중한 계획, 대규모 코드베이스, 컴퓨터 사용 및 복잡한 전문 업무를 위한 Anthropic 플래그십 모델입니다." + }, + "pt": { + "description": "O modelo principal da Anthropic para tarefas agênticas prolongadas, planejamento cuidadoso, grandes bases de código, uso do computador e trabalho complexo." + }, + "ru": { + "description": "Флагманская модель Anthropic для длительных агентных задач, тщательного планирования, крупных кодовых баз, управления компьютером и сложной работы." + }, + "tr": { + "description": "Anthropic'in uzun süreli aracı görevler, dikkatli planlama, büyük kod tabanları, bilgisayar kullanımı ve karmaşık profesyonel işler için amiral modeli." + }, + "zh-Hans": { + "description": "Anthropic 面向长时间智能体任务、周密规划、大型代码库、计算机使用和复杂专业工作的旗舰模型。" + }, + "zh-Hant": { + "description": "Anthropic 面向長時間智慧體任務、周密規劃、大型程式碼庫、電腦使用和複雜專業工作的旗艦模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/models/overview", + "title": "Claude models overview", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "inputModalities", + "outputModalities", + "capabilities", + "lifecycle" + ] + }, + { + "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-anthropic-claude-opus-4-6.html", + "title": "Claude Opus 4.6 model details", + "fields": [ + "releaseDate", + "knowledgeCutoff", + "contextWindow", + "maxOutput", + "inputModalities", + "outputModalities" + ] + }, + { + "url": "https://www.anthropic.com/news/claude-opus-4-6", + "title": "Introducing Claude Opus 4.6", + "fields": ["name", "description", "releaseDate"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", + "vendor": "Anthropic", + "size": null, + "contextWindow": 1000000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 5, + "output": 25, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-02-05", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-05", + "inputModalities": ["text", "image", "pdf"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-opus-4-7.json b/manifests/models/claude-opus-4-7.json new file mode 100644 index 00000000..52bafe2d --- /dev/null +++ b/manifests/models/claude-opus-4-7.json @@ -0,0 +1,126 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-opus-4-7", + "name": "Claude Opus 4.7", + "description": "Anthropic's Opus model for complex reasoning, agentic coding, long-horizon work, computer use, and reliable execution across large codebases.", + "translations": { + "de": { + "description": "Anthropics Opus-Modell für komplexes Denken, agentische Programmierung, langfristige Aufgaben, Computernutzung und zuverlässige Arbeit in großen Codebasen." + }, + "es": { + "description": "El modelo Opus de Anthropic para razonamiento complejo, programación agéntica, trabajo prolongado, uso de computadoras y ejecución fiable en grandes bases de código." + }, + "fr": { + "description": "Le modèle Opus d’Anthropic pour le raisonnement complexe, le codage agentique, les tâches longues, l’ordinateur et l’exécution fiable sur de grandes bases de code." + }, + "id": { + "description": "Model Opus Anthropic untuk penalaran kompleks, coding agentik, pekerjaan jangka panjang, penggunaan komputer, dan eksekusi andal pada basis kode besar." + }, + "ja": { + "description": "複雑な推論、エージェント型コーディング、長期作業、コンピューター操作、大規模コードベースでの確実な実行に対応するAnthropicのOpusモデル。" + }, + "ko": { + "description": "복잡한 추론, 에이전트 코딩, 장기 작업, 컴퓨터 사용 및 대규모 코드베이스의 안정적인 실행을 위한 Anthropic Opus 모델입니다." + }, + "pt": { + "description": "O modelo Opus da Anthropic para raciocínio complexo, programação agêntica, trabalho prolongado, uso do computador e execução confiável em grandes bases de código." + }, + "ru": { + "description": "Модель Anthropic Opus для сложных рассуждений, агентного программирования, длительных задач, управления компьютером и надёжной работы с крупным кодом." + }, + "tr": { + "description": "Anthropic'in karmaşık akıl yürütme, aracı kodlama, uzun vadeli çalışma, bilgisayar kullanımı ve büyük kod tabanlarında güvenilir yürütme için Opus modeli." + }, + "zh-Hans": { + "description": "Anthropic 面向复杂推理、智能体编码、长周期工作、计算机使用和大型代码库可靠执行的 Opus 模型。" + }, + "zh-Hant": { + "description": "Anthropic 面向複雜推理、智慧體編碼、長週期工作、電腦使用和大型程式碼庫可靠執行的 Opus 模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/models/overview", + "title": "Claude models overview", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities", + "lifecycle" + ] + }, + { + "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-anthropic-claude-opus-4-7.html", + "title": "Claude Opus 4.7 model details", + "fields": [ + "releaseDate", + "knowledgeCutoff", + "contextWindow", + "maxOutput", + "inputModalities", + "outputModalities" + ] + }, + { + "url": "https://www.anthropic.com/news/claude-opus-4-7", + "title": "Introducing Claude Opus 4.7", + "fields": ["name", "description", "releaseDate"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", + "vendor": "Anthropic", + "size": null, + "contextWindow": 1000000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 5, + "output": 25, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-16", + "lifecycle": "maintained", + "knowledgeCutoff": "2026-01", + "inputModalities": ["text", "image", "pdf"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-opus-4-8.json b/manifests/models/claude-opus-4-8.json index 2bd8131a..d2f0dc95 100644 --- a/manifests/models/claude-opus-4-8.json +++ b/manifests/models/claude-opus-4-8.json @@ -70,9 +70,29 @@ "contextWindow": 1000000, "maxOutput": 128000, "tokenPricing": { - "input": 5, - "output": 25, - "cache": 0.5 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 5, + "output": 25, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-05-28", "lifecycle": "latest", diff --git a/manifests/models/claude-opus-4.json b/manifests/models/claude-opus-4.json index a050dfc7..9a45a0e6 100644 --- a/manifests/models/claude-opus-4.json +++ b/manifests/models/claude-opus-4.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.anthropic.com", "docsUrl": "https://docs.anthropic.com/claude/docs/models-overview", "vendor": "Anthropic", @@ -46,12 +56,32 @@ "contextWindow": 200000, "maxOutput": 32000, "tokenPricing": { - "input": 15, - "output": 75, - "cache": 1.5 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 15, + "output": 75, + "cacheRead": 1.5, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-05-22", - "lifecycle": "maintained", + "lifecycle": "deprecated", "knowledgeCutoff": null, "inputModalities": ["text", "image", "pdf"], "outputModalities": ["text"], diff --git a/manifests/models/claude-sonnet-3-5-20240620.json b/manifests/models/claude-sonnet-3-5-20240620.json new file mode 100644 index 00000000..e593f08d --- /dev/null +++ b/manifests/models/claude-sonnet-3-5-20240620.json @@ -0,0 +1,118 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-sonnet-3-5-20240620", + "name": "Claude Sonnet 3.5 (June 2024)", + "description": "Anthropic's first Claude 3.5 Sonnet snapshot, a major coding upgrade with strong repository editing, visual reasoning, and tool use.", + "translations": { + "de": { + "description": "Anthropics erster Claude-3.5-Sonnet-Snapshot, ein großes Coding-Upgrade mit starker Repository-Bearbeitung, visuellem Reasoning und Werkzeugnutzung." + }, + "es": { + "description": "La primera versión de Claude 3.5 Sonnet de Anthropic, una gran mejora de código con edición de repositorios, razonamiento visual y herramientas." + }, + "fr": { + "description": "Le premier snapshot Claude 3.5 Sonnet d’Anthropic, une avancée majeure en codage avec édition de dépôts, raisonnement visuel et outils." + }, + "id": { + "description": "Snapshot Claude 3.5 Sonnet pertama Anthropic, peningkatan besar untuk coding dengan penyuntingan repositori, penalaran visual, dan alat." + }, + "ja": { + "description": "リポジトリ編集、視覚推論、ツール利用を大きく強化した、Anthropic初のClaude 3.5 Sonnetスナップショット。" + }, + "ko": { + "description": "저장소 편집, 시각적 추론 및 도구 사용을 크게 향상한 Anthropic의 첫 Claude 3.5 Sonnet 스냅샷입니다." + }, + "pt": { + "description": "O primeiro snapshot Claude 3.5 Sonnet da Anthropic, uma grande evolução em código com edição de repositórios, raciocínio visual e ferramentas." + }, + "ru": { + "description": "Первый снимок Claude 3.5 Sonnet от Anthropic: крупное улучшение программирования, редактирования репозиториев, визуального анализа и инструментов." + }, + "tr": { + "description": "Anthropic'in depo düzenleme, görsel akıl yürütme ve araç kullanımında büyük kodlama gelişimi sunan ilk Claude 3.5 Sonnet sürümü." + }, + "zh-Hans": { + "description": "Anthropic 的首个 Claude 3.5 Sonnet 快照,在仓库编辑、视觉推理和工具调用方面实现重大编码升级。" + }, + "zh-Hant": { + "description": "Anthropic 的首個 Claude 3.5 Sonnet 快照,在儲存庫編輯、視覺推理和工具呼叫方面實現重大編碼升級。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.anthropic.com/news/claude-3-5-sonnet", + "title": "Introducing Claude 3.5 Sonnet", + "fields": [ + "name", + "description", + "contextWindow", + "tokenPricing", + "releaseDate", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.claude.com/docs/en/release-notes/overview", + "title": "Claude Platform release notes", + "fields": ["maxOutput", "releaseDate", "inputModalities", "capabilities"] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://www.anthropic.com/news/claude-3-5-sonnet", + "vendor": "Anthropic", + "size": null, + "contextWindow": 200000, + "maxOutput": 8192, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2024-06-20", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "pdf"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-sonnet-3-5-20241022.json b/manifests/models/claude-sonnet-3-5-20241022.json new file mode 100644 index 00000000..4186bddf --- /dev/null +++ b/manifests/models/claude-sonnet-3-5-20241022.json @@ -0,0 +1,116 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-sonnet-3-5-20241022", + "name": "Claude Sonnet 3.5 (October 2024)", + "description": "Anthropic's upgraded Claude 3.5 Sonnet snapshot with stronger agentic coding, tool use, computer operation, and software engineering.", + "translations": { + "de": { + "description": "Anthropics verbesserter Claude-3.5-Sonnet-Snapshot mit stärkerem autonomem Coding, Werkzeugnutzung, Computersteuerung und Softwareentwicklung." + }, + "es": { + "description": "La versión mejorada de Claude 3.5 Sonnet de Anthropic con código agéntico, herramientas, manejo de computadoras e ingeniería reforzados." + }, + "fr": { + "description": "Le snapshot Claude 3.5 Sonnet amélioré d’Anthropic, renforcé en codage agentique, outils, pilotage informatique et ingénierie logicielle." + }, + "id": { + "description": "Snapshot Claude 3.5 Sonnet Anthropic yang ditingkatkan dengan coding agentik, alat, operasi komputer, dan rekayasa perangkat lunak yang lebih kuat." + }, + "ja": { + "description": "エージェント型コーディング、ツール利用、コンピューター操作、ソフトウェア開発を強化したAnthropicの改良版Claude 3.5 Sonnet。" + }, + "ko": { + "description": "에이전트 코딩, 도구 사용, 컴퓨터 조작 및 소프트웨어 엔지니어링을 강화한 Anthropic의 개선된 Claude 3.5 Sonnet 스냅샷입니다." + }, + "pt": { + "description": "O snapshot Claude 3.5 Sonnet aprimorado da Anthropic, com código agêntico, ferramentas, operação de computadores e engenharia mais fortes." + }, + "ru": { + "description": "Обновлённый снимок Claude 3.5 Sonnet от Anthropic с улучшенным агентным программированием, инструментами, управлением компьютером и разработкой." + }, + "tr": { + "description": "Anthropic'in daha güçlü aracı kodlama, araç kullanımı, bilgisayar yönetimi ve yazılım mühendisliği sunan geliştirilmiş Claude 3.5 Sonnet sürümü." + }, + "zh-Hans": { + "description": "Anthropic 升级版 Claude 3.5 Sonnet 快照,强化了智能体编码、工具调用、计算机操作和软件工程能力。" + }, + "zh-Hant": { + "description": "Anthropic 升級版 Claude 3.5 Sonnet 快照,強化了智慧體編碼、工具呼叫、電腦操作和軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.anthropic.com/news/3-5-models-and-computer-use", + "title": "Upgraded Claude 3.5 Sonnet and computer use", + "fields": ["name", "description", "tokenPricing", "releaseDate", "capabilities"] + }, + { + "url": "https://platform.claude.com/docs/en/release-notes/overview", + "title": "Claude Platform release notes", + "fields": [ + "contextWindow", + "maxOutput", + "releaseDate", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://www.anthropic.com/news/3-5-models-and-computer-use", + "vendor": "Anthropic", + "size": null, + "contextWindow": 200000, + "maxOutput": 8192, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2024-10-22", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "pdf"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-sonnet-3-7.json b/manifests/models/claude-sonnet-3-7.json new file mode 100644 index 00000000..a981df92 --- /dev/null +++ b/manifests/models/claude-sonnet-3-7.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-sonnet-3-7", + "name": "Claude Sonnet 3.7", + "description": "Anthropic's first hybrid reasoning model and the original Claude Code model, built for agentic coding, front-end development, and complex tool use.", + "translations": { + "de": { + "description": "Anthropics erstes hybrides Reasoning-Modell und ursprüngliches Claude-Code-Modell für agentisches Coding, Frontend-Entwicklung und komplexe Werkzeuge." + }, + "es": { + "description": "El primer modelo híbrido de razonamiento de Anthropic y modelo original de Claude Code para código agéntico, desarrollo frontal y herramientas complejas." + }, + "fr": { + "description": "Le premier modèle de raisonnement hybride d’Anthropic et modèle Claude Code d’origine, conçu pour le codage agentique, le front-end et les outils complexes." + }, + "id": { + "description": "Model penalaran hibrida pertama Anthropic dan model awal Claude Code untuk coding agentik, pengembangan front-end, dan penggunaan alat kompleks." + }, + "ja": { + "description": "エージェント型コーディング、フロントエンド開発、複雑なツール利用向けに作られたAnthropic初のハイブリッド推論モデル兼初代Claude Codeモデル。" + }, + "ko": { + "description": "에이전트 코딩, 프런트엔드 개발 및 복잡한 도구 사용을 위해 구축된 Anthropic 최초의 하이브리드 추론 모델이자 초기 Claude Code 모델입니다." + }, + "pt": { + "description": "O primeiro modelo híbrido de raciocínio da Anthropic e modelo original do Claude Code, criado para código agêntico, front-end e ferramentas complexas." + }, + "ru": { + "description": "Первая гибридная модель рассуждений Anthropic и исходная модель Claude Code для агентного программирования, разработки интерфейсов и сложных инструментов." + }, + "tr": { + "description": "Anthropic'in aracı kodlama, ön uç geliştirme ve karmaşık araç kullanımı için ilk melez akıl yürütme ve özgün Claude Code modeli." + }, + "zh-Hans": { + "description": "Anthropic 首个混合推理模型,也是最初的 Claude Code 模型,面向智能体编码、前端开发和复杂工具调用。" + }, + "zh-Hant": { + "description": "Anthropic 首個混合推理模型,也是最初的 Claude Code 模型,面向智慧體編碼、前端開發和複雜工具呼叫。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.anthropic.com/news/claude-3-7-sonnet", + "title": "Claude 3.7 Sonnet and Claude Code", + "fields": [ + "name", + "description", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://www.anthropic.com/news/claude-3-7-sonnet", + "vendor": "Anthropic", + "size": null, + "contextWindow": 200000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-02-24", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "pdf"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-sonnet-3.json b/manifests/models/claude-sonnet-3.json new file mode 100644 index 00000000..602a2905 --- /dev/null +++ b/manifests/models/claude-sonnet-3.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-sonnet-3", + "name": "Claude Sonnet 3", + "description": "Anthropic's balanced Claude 3 model for scalable coding, data processing, visual understanding, and enterprise workflows.", + "translations": { + "de": { + "description": "Anthropics ausgewogenes Claude-3-Modell für skalierbares Coding, Datenverarbeitung, visuelles Verständnis und Unternehmensabläufe." + }, + "es": { + "description": "El modelo equilibrado Claude 3 de Anthropic para código escalable, procesamiento de datos, comprensión visual y flujos empresariales." + }, + "fr": { + "description": "Le modèle Claude 3 équilibré d’Anthropic pour le codage évolutif, le traitement des données, la vision et les flux d’entreprise." + }, + "id": { + "description": "Model Claude 3 seimbang Anthropic untuk coding berskala, pemrosesan data, pemahaman visual, dan alur kerja perusahaan." + }, + "ja": { + "description": "スケーラブルなコーディング、データ処理、視覚理解、企業ワークフロー向けのAnthropic製バランス型Claude 3モデル。" + }, + "ko": { + "description": "확장 가능한 코딩, 데이터 처리, 시각적 이해 및 기업 워크플로를 위한 Anthropic의 균형형 Claude 3 모델입니다." + }, + "pt": { + "description": "O modelo equilibrado Claude 3 da Anthropic para código escalável, processamento de dados, compreensão visual e fluxos empresariais." + }, + "ru": { + "description": "Сбалансированная модель Claude 3 от Anthropic для масштабируемого программирования, обработки данных, визуального анализа и корпоративных процессов." + }, + "tr": { + "description": "Anthropic'in ölçeklenebilir kodlama, veri işleme, görsel anlama ve kurumsal iş akışları için dengeli Claude 3 modeli." + }, + "zh-Hans": { + "description": "Anthropic 面向规模化编码、数据处理、视觉理解和企业工作流的均衡型 Claude 3 模型。" + }, + "zh-Hant": { + "description": "Anthropic 面向規模化編碼、資料處理、視覺理解和企業工作流程的均衡型 Claude 3 模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.anthropic.com/news/claude-3-family", + "title": "Introducing the Claude 3 model family", + "fields": [ + "name", + "description", + "contextWindow", + "tokenPricing", + "releaseDate", + "inputModalities", + "outputModalities" + ] + }, + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + }, + { + "url": "https://platform.claude.com/docs/en/release-notes/overview", + "title": "Claude Platform release notes", + "fields": ["capabilities"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://www.anthropic.com/news/claude-3-family", + "vendor": "Anthropic", + "size": null, + "contextWindow": 200000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2024-03-04", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-sonnet-4-5.json b/manifests/models/claude-sonnet-4-5.json index 579760fc..c756cc79 100644 --- a/manifests/models/claude-sonnet-4-5.json +++ b/manifests/models/claude-sonnet-4-5.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model status", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.anthropic.com", "docsUrl": "https://docs.anthropic.com/claude/docs/models-overview", "vendor": "Anthropic", @@ -46,12 +56,32 @@ "contextWindow": 200000, "maxOutput": 64000, "tokenPricing": { - "input": 3, - "output": 15, - "cache": 0.3 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-09-29", - "lifecycle": "latest", + "lifecycle": "maintained", "knowledgeCutoff": "2025-01", "inputModalities": ["text", "image", "pdf"], "outputModalities": ["text"], diff --git a/manifests/models/claude-sonnet-4-6.json b/manifests/models/claude-sonnet-4-6.json new file mode 100644 index 00000000..bebd27e2 --- /dev/null +++ b/manifests/models/claude-sonnet-4-6.json @@ -0,0 +1,126 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "description": "Anthropic's balanced model for agentic coding, search, computer use, and everyday production work with a 1M-token context window.", + "translations": { + "de": { + "description": "Anthropics ausgewogenes Modell für agentische Programmierung, Suche, Computernutzung und tägliche Produktionsarbeit mit 1 Mio. Token Kontext." + }, + "es": { + "description": "El modelo equilibrado de Anthropic para programación agéntica, búsqueda, uso de computadoras y producción diaria con contexto de 1 millón de tokens." + }, + "fr": { + "description": "Le modèle équilibré d’Anthropic pour le codage agentique, la recherche, l’ordinateur et la production quotidienne avec 1 million de jetons de contexte." + }, + "id": { + "description": "Model seimbang Anthropic untuk coding agentik, pencarian, penggunaan komputer, dan pekerjaan produksi harian dengan konteks 1 juta token." + }, + "ja": { + "description": "100万トークンのコンテキストを備え、エージェント型コーディング、検索、コンピューター操作、日常の本番業務に対応するAnthropicのバランス型モデル。" + }, + "ko": { + "description": "100만 토큰 컨텍스트로 에이전트 코딩, 검색, 컴퓨터 사용 및 일상적인 프로덕션 작업을 지원하는 Anthropic의 균형형 모델입니다." + }, + "pt": { + "description": "O modelo equilibrado da Anthropic para programação agêntica, pesquisa, uso do computador e produção diária com contexto de 1 milhão de tokens." + }, + "ru": { + "description": "Сбалансированная модель Anthropic для агентного программирования, поиска, управления компьютером и повседневной работы с контекстом 1 млн токенов." + }, + "tr": { + "description": "Anthropic'in 1 milyon token bağlamla aracı kodlama, arama, bilgisayar kullanımı ve günlük üretim işleri için dengeli modeli." + }, + "zh-Hans": { + "description": "Anthropic 面向智能体编码、搜索、计算机使用和日常生产工作的均衡模型,提供 100 万 token 上下文。" + }, + "zh-Hant": { + "description": "Anthropic 面向智慧體編碼、搜尋、電腦使用和日常生產工作的均衡模型,提供 100 萬 token 上下文。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/models/overview", + "title": "Claude models overview", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities", + "lifecycle" + ] + }, + { + "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-anthropic-claude-sonnet-4-6.html", + "title": "Claude Sonnet 4.6 model details", + "fields": [ + "releaseDate", + "knowledgeCutoff", + "contextWindow", + "maxOutput", + "inputModalities", + "outputModalities" + ] + }, + { + "url": "https://www.anthropic.com/news/claude-sonnet-4-6", + "title": "Introducing Claude Sonnet 4.6", + "fields": ["name", "description", "releaseDate"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.anthropic.com", + "docsUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", + "vendor": "Anthropic", + "size": null, + "contextWindow": 1000000, + "maxOutput": 64000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-02-17", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-08", + "inputModalities": ["text", "image", "pdf"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/claude-sonnet-4.json b/manifests/models/claude-sonnet-4.json index d9ef64bf..4766dc36 100644 --- a/manifests/models/claude-sonnet-4.json +++ b/manifests/models/claude-sonnet-4.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations", + "title": "Anthropic model deprecations", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.anthropic.com", "docsUrl": "https://docs.anthropic.com/claude/docs/models-overview", "vendor": "Anthropic", @@ -46,12 +56,32 @@ "contextWindow": 200000, "maxOutput": 64000, "tokenPricing": { - "input": 3, - "output": 15, - "cache": 0.3 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-05-22", - "lifecycle": "maintained", + "lifecycle": "deprecated", "knowledgeCutoff": null, "inputModalities": ["text", "image", "pdf"], "outputModalities": ["text"], diff --git a/manifests/models/claude-sonnet-5.json b/manifests/models/claude-sonnet-5.json index 1ff50199..88817dbc 100644 --- a/manifests/models/claude-sonnet-5.json +++ b/manifests/models/claude-sonnet-5.json @@ -70,9 +70,29 @@ "contextWindow": 1000000, "maxOutput": 128000, "tokenPricing": { - "input": 2, - "output": 10, - "cache": 0.2 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2, + "output": 10, + "cacheRead": 0.2, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-06-30", "lifecycle": "latest", diff --git a/manifests/models/codestral-2405.json b/manifests/models/codestral-2405.json new file mode 100644 index 00000000..65dabd98 --- /dev/null +++ b/manifests/models/codestral-2405.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "codestral-2405", + "name": "Codestral 24.05", + "description": "First Codestral coding and fill-in-the-middle model, released as a 22B open-weight checkpoint.", + "translations": { + "zh-Hans": { + "description": "Codestral 24.05 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Codestral 24.05 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Codestral 24.05 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Codestral 24.05 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Codestral 24.05 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Codestral 24.05 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Codestral 24.05은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Codestral 24.05 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Codestral 24.05 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Codestral 24.05, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Codestral 24.05 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/codestral-24-05", + "title": "Codestral 24.05 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/codestral-24-05", + "vendor": "Mistral AI", + "size": "22B", + "contextWindow": 32000, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2024-05-29", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": [], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/codestral-2501.json b/manifests/models/codestral-2501.json new file mode 100644 index 00000000..672d6934 --- /dev/null +++ b/manifests/models/codestral-2501.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "codestral-2501", + "name": "Codestral 25.01", + "description": "Codestral snapshot for code completion, correction, test generation, and fill-in-the-middle workflows.", + "translations": { + "zh-Hans": { + "description": "Codestral 25.01 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Codestral 25.01 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Codestral 25.01 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Codestral 25.01 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Codestral 25.01 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Codestral 25.01 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Codestral 25.01은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Codestral 25.01 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Codestral 25.01 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Codestral 25.01, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Codestral 25.01 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/codestral-25-01", + "title": "Codestral 25.01 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/codestral-25-01", + "vendor": "Mistral AI", + "size": null, + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-01-13", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/codestral-2508.json b/manifests/models/codestral-2508.json new file mode 100644 index 00000000..c7cff01d --- /dev/null +++ b/manifests/models/codestral-2508.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "codestral-2508", + "name": "Codestral 25.08", + "description": "Current Codestral model for low-latency code completion, generation, tools, and fill-in-the-middle workflows.", + "translations": { + "zh-Hans": { + "description": "Codestral 25.08 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Codestral 25.08 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Codestral 25.08 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Codestral 25.08 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Codestral 25.08 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Codestral 25.08 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Codestral 25.08은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Codestral 25.08 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Codestral 25.08 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Codestral 25.08, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Codestral 25.08 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/codestral-25-08", + "title": "Codestral 25.08 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/codestral-25-08", + "vendor": "Mistral AI", + "size": null, + "contextWindow": 131072, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 0.9, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-07-30", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/composer.json b/manifests/models/composer.json index 5f8ebd61..8359a103 100644 --- a/manifests/models/composer.json +++ b/manifests/models/composer.json @@ -46,9 +46,29 @@ "contextWindow": 128000, "maxOutput": 8000, "tokenPricing": { - "input": 0, - "output": 0, - "cache": null + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0, + "output": 0, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": null, "lifecycle": "latest", diff --git a/manifests/models/cursor-composer-2-5.json b/manifests/models/cursor-composer-2-5.json new file mode 100644 index 00000000..82875dc8 --- /dev/null +++ b/manifests/models/cursor-composer-2-5.json @@ -0,0 +1,118 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "cursor-composer-2-5", + "name": "Cursor Composer 2.5", + "description": "Cursor's efficient coding agent model for interactive development, reliable tool use, and long-running software engineering tasks.", + "translations": { + "de": { + "description": "Cursors effizientes Coding-Agent-Modell für interaktive Entwicklung, zuverlässige Werkzeugnutzung und langfristige Softwareaufgaben." + }, + "es": { + "description": "El eficiente modelo de agente de código de Cursor para desarrollo interactivo, uso fiable de herramientas y tareas de software prolongadas." + }, + "fr": { + "description": "Le modèle d’agent de codage efficace de Cursor pour le développement interactif, l’usage fiable d’outils et les tâches logicielles longues." + }, + "id": { + "description": "Model agen coding efisien Cursor untuk pengembangan interaktif, penggunaan alat yang andal, dan tugas rekayasa perangkat lunak jangka panjang." + }, + "ja": { + "description": "対話的な開発、信頼性の高いツール利用、長時間のソフトウェア開発向けに設計されたCursorの効率的なコーディングエージェント。" + }, + "ko": { + "description": "대화형 개발, 안정적인 도구 사용 및 장기 소프트웨어 엔지니어링 작업을 위한 Cursor의 효율적인 코딩 에이전트 모델입니다." + }, + "pt": { + "description": "O eficiente modelo de agente de código da Cursor para desenvolvimento interativo, uso confiável de ferramentas e tarefas prolongadas de software." + }, + "ru": { + "description": "Эффективная модель агента программирования Cursor для интерактивной разработки, надёжных инструментов и длительных инженерных задач." + }, + "tr": { + "description": "Cursor'ın etkileşimli geliştirme, güvenilir araç kullanımı ve uzun süreli yazılım mühendisliği görevleri için verimli kodlama aracısı modeli." + }, + "zh-Hans": { + "description": "Cursor 面向交互式开发、可靠工具调用和长周期软件工程任务的高效编码智能体模型。" + }, + "zh-Hant": { + "description": "Cursor 面向互動式開發、可靠工具呼叫和長週期軟體工程任務的高效編碼智慧體模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://cursor.com/composer", + "title": "Composer 2.5 model page", + "fields": ["name", "description", "tokenPricing", "capabilities", "lifecycle"] + }, + { + "url": "https://cursor.com/changelog/composer-2-5", + "title": "Composer 2.5 launch", + "fields": ["releaseDate"] + }, + { + "url": "https://docs.cursor.com/models", + "title": "Cursor model context documentation", + "fields": ["docsUrl", "contextWindow", "inputModalities", "outputModalities"] + }, + { + "url": "https://cursor.com/composer", + "title": "Cursor Composer 2.5 benchmark — Terminal-Bench 2.0; Cursor vendor evaluation reported on the official Composer 2.5 model page; label: Composer 2.5; observed 2026-07-21", + "fields": ["benchmarks.terminalBench"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "medium", + "websiteUrl": "https://cursor.com", + "docsUrl": "https://docs.cursor.com/models", + "vendor": "Anysphere", + "size": null, + "contextWindow": 200000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.5, + "output": 2.5, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-05-18", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": 0.693, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/cursor-composer-2.json b/manifests/models/cursor-composer-2.json new file mode 100644 index 00000000..1499698e --- /dev/null +++ b/manifests/models/cursor-composer-2.json @@ -0,0 +1,118 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "cursor-composer-2", + "name": "Cursor Composer 2", + "description": "Cursor's retired coding agent model for long-horizon software engineering, now routed to Composer 2.5.", + "translations": { + "de": { + "description": "Cursors eingestelltes Coding-Agent-Modell für langfristige Softwareentwicklung, das jetzt an Composer 2.5 weitergeleitet wird." + }, + "es": { + "description": "El modelo retirado de agente de código de Cursor para ingeniería de software prolongada, ahora redirigido a Composer 2.5." + }, + "fr": { + "description": "L’ancien modèle d’agent de codage de Cursor pour l’ingénierie logicielle au long cours, désormais redirigé vers Composer 2.5." + }, + "id": { + "description": "Model agen coding Cursor yang telah dihentikan untuk rekayasa perangkat lunak jangka panjang, kini dialihkan ke Composer 2.5." + }, + "ja": { + "description": "長時間のソフトウェア開発向けに提供され、現在はComposer 2.5へ転送されるCursorの旧コーディングエージェントモデル。" + }, + "ko": { + "description": "장기 소프트웨어 엔지니어링용으로 제공되었으며 현재 Composer 2.5로 라우팅되는 Cursor의 종료된 코딩 에이전트 모델입니다." + }, + "pt": { + "description": "O modelo descontinuado de agente de código da Cursor para engenharia de software prolongada, agora redirecionado ao Composer 2.5." + }, + "ru": { + "description": "Снятая с эксплуатации модель агента программирования Cursor для длительной разработки, теперь перенаправляемая на Composer 2.5." + }, + "tr": { + "description": "Cursor'ın uzun süreli yazılım mühendisliği için kullanımdan kaldırılmış ve artık Composer 2.5'e yönlendirilen kodlama aracısı modeli." + }, + "zh-Hans": { + "description": "Cursor 面向长周期软件工程的已退役编码智能体模型,目前请求会转发到 Composer 2.5。" + }, + "zh-Hant": { + "description": "Cursor 面向長週期軟體工程的已退役編碼智慧體模型,目前請求會轉發到 Composer 2.5。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://cursor.com/blog/composer-2", + "title": "Composer 2 launch", + "fields": ["name", "description", "releaseDate", "tokenPricing", "capabilities"] + }, + { + "url": "https://cursor.com/changelog/page/1", + "title": "Composer 2 routes to Composer 2.5", + "fields": ["lifecycle"] + }, + { + "url": "https://docs.cursor.com/models", + "title": "Cursor model context documentation", + "fields": ["docsUrl", "contextWindow", "inputModalities", "outputModalities"] + }, + { + "url": "https://cursor.com/blog/composer-2", + "title": "Cursor Composer 2 launch benchmark — Terminal-Bench 2.0; Official Harbor harness with default settings; 5 iterations per model-agent pair; average score; label: Composer 2; observed 2026-07-21", + "fields": ["benchmarks.terminalBench"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "medium", + "websiteUrl": "https://cursor.com", + "docsUrl": "https://docs.cursor.com/models", + "vendor": "Anysphere", + "size": null, + "contextWindow": 200000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.5, + "output": 2.5, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-19", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": 0.617, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/deepseek-3-2.json b/manifests/models/deepseek-3-2.json index 0058daee..83cb2ffd 100644 --- a/manifests/models/deepseek-3-2.json +++ b/manifests/models/deepseek-3-2.json @@ -38,7 +38,34 @@ "description": "DeepSeek V3.2 是推理優先的模型,具備 128K 上下文視窗,專為智能體任務設計,將思考直接整合到工具使用中。" } }, - "verified": false, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news251201", + "title": "DeepSeek-V3.2 release announcement", + "fields": ["name", "description", "releaseDate", "lifecycle", "capabilities"] + }, + { + "url": "https://huggingface.co/deepseek-ai/DeepSeek-V3.2", + "title": "Official DeepSeek-V3.2 model card", + "fields": [ + "docsUrl", + "size", + "contextWindow", + "inputModalities", + "outputModalities", + "platformUrls" + ] + }, + { + "url": "https://api-docs.deepseek.com/quick_start/pricing", + "title": "DeepSeek API pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.deepseek.com", "docsUrl": "https://api-docs.deepseek.com/quick_start/pricing", "vendor": "DeepSeek", @@ -46,12 +73,32 @@ "contextWindow": 128000, "maxOutput": 8000, "tokenPricing": { - "input": 0.28, - "output": 0.42, - "cache": 0.028 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.28, + "output": 0.42, + "cacheRead": 0.028, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-12-01", - "lifecycle": "latest", + "lifecycle": "maintained", "knowledgeCutoff": null, "inputModalities": ["text"], "outputModalities": ["text"], diff --git a/manifests/models/deepseek-coder-v2-0724.json b/manifests/models/deepseek-coder-v2-0724.json new file mode 100644 index 00000000..3915fa6b --- /dev/null +++ b/manifests/models/deepseek-coder-v2-0724.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "deepseek-coder-v2-0724", + "name": "DeepSeek-Coder-V2 Instruct 0724", + "description": "Open-weight MoE coding model supporting 338 programming languages, code completion, insertion, tools, and JSON output.", + "translations": { + "zh-Hans": { + "description": "DeepSeek-Coder-V2 Instruct 0724 是 DeepSeek 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "DeepSeek-Coder-V2 Instruct 0724 ist eine eigenständige Modellversion von DeepSeek mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "DeepSeek-Coder-V2 Instruct 0724 es una versión de modelo independiente de DeepSeek con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "DeepSeek-Coder-V2 Instruct 0724 est une version de modèle distincte de DeepSeek, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "DeepSeek-Coder-V2 Instruct 0724 adalah versi model mandiri dari DeepSeek dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "DeepSeek-Coder-V2 Instruct 0724 は DeepSeek が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "DeepSeek-Coder-V2 Instruct 0724은(는) DeepSeek가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "DeepSeek-Coder-V2 Instruct 0724 é uma versão de modelo independente da DeepSeek, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "DeepSeek-Coder-V2 Instruct 0724 — самостоятельная версия модели от DeepSeek с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "DeepSeek-Coder-V2 Instruct 0724, DeepSeek tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "DeepSeek-Coder-V2 Instruct 0724 是 DeepSeek 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://huggingface.co/deepseek-ai/DeepSeek-Coder-V2-Instruct-0724", + "title": "DeepSeek-Coder-V2 Instruct 0724 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.deepseek.com", + "docsUrl": "https://huggingface.co/deepseek-ai/DeepSeek-Coder-V2-Instruct-0724", + "vendor": "DeepSeek", + "size": "236B (21B active)", + "contextWindow": 128000, + "maxOutput": null, + "tokenPricing": { + "status": "not-applicable", + "reason": "open-weights-only", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2024-07-24", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/deepseek-ai/DeepSeek-Coder-V2-Instruct-0724", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/deepseek-r1-0528.json b/manifests/models/deepseek-r1-0528.json new file mode 100644 index 00000000..08b3bd96 --- /dev/null +++ b/manifests/models/deepseek-r1-0528.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "deepseek-r1-0528", + "name": "DeepSeek-R1-0528", + "description": "Updated DeepSeek-R1 reasoning checkpoint with improved coding, mathematics, and reduced hallucination behavior.", + "translations": { + "zh-Hans": { + "description": "DeepSeek-R1-0528 是 DeepSeek 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "DeepSeek-R1-0528 ist eine eigenständige Modellversion von DeepSeek mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "DeepSeek-R1-0528 es una versión de modelo independiente de DeepSeek con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "DeepSeek-R1-0528 est une version de modèle distincte de DeepSeek, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "DeepSeek-R1-0528 adalah versi model mandiri dari DeepSeek dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "DeepSeek-R1-0528 は DeepSeek が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "DeepSeek-R1-0528은(는) DeepSeek가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "DeepSeek-R1-0528 é uma versão de modelo independente da DeepSeek, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "DeepSeek-R1-0528 — самостоятельная версия модели от DeepSeek с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "DeepSeek-R1-0528, DeepSeek tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "DeepSeek-R1-0528 是 DeepSeek 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news250528", + "title": "DeepSeek-R1-0528 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.deepseek.com", + "docsUrl": "https://api-docs.deepseek.com/news/news250528", + "vendor": "DeepSeek", + "size": "671B (37B active)", + "contextWindow": 64000, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-05-28", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/deepseek-r1.json b/manifests/models/deepseek-r1.json index 0d5b6e61..0ef42c96 100644 --- a/manifests/models/deepseek-r1.json +++ b/manifests/models/deepseek-r1.json @@ -2,7 +2,7 @@ "$schema": "../$schemas/model.schema.json", "id": "deepseek-r1", "name": "DeepSeek R1", - "description": "DeepSeek R1 is a 1.3B parameter language model with 128K context window, designed for advanced reasoning and code generation tasks.", + "description": "DeepSeek's open-weight 671B MoE reasoning model for mathematics, coding, and complex problem solving.", "translations": { "zh-Hans": { "description": "DeepSeek R1 是 1.3B 参数的语言模型,具备 128K 上下文窗口,专为高级推理和代码生成任务设计。" @@ -38,20 +38,43 @@ "description": "DeepSeek R1 是 1.3B 參數的語言模型,具備 128K 上下文視窗,專為高級推理和代碼生成任務設計。" } }, - "verified": false, + "verified": true, + "sources": [ + { + "url": "https://huggingface.co/deepseek-ai/DeepSeek-R1", + "title": "Official DeepSeek-R1 model card", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "releaseDate", + "lifecycle", + "inputModalities", + "outputModalities", + "capabilities", + "platformUrls" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.deepseek.com", "docsUrl": "https://huggingface.co/deepseek-ai/DeepSeek-R1", "vendor": "DeepSeek", "size": "671B", - "contextWindow": 64000, - "maxOutput": 4000, + "contextWindow": 128000, + "maxOutput": null, "tokenPricing": { - "input": 0.14, - "output": 0.14, - "cache": null + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] }, - "releaseDate": null, - "lifecycle": "latest", + "releaseDate": "2025-01-20", + "lifecycle": "maintained", "knowledgeCutoff": null, "inputModalities": ["text"], "outputModalities": ["text"], diff --git a/manifests/models/deepseek-v3-1.json b/manifests/models/deepseek-v3-1.json new file mode 100644 index 00000000..92d3f1b5 --- /dev/null +++ b/manifests/models/deepseek-v3-1.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "deepseek-v3-1", + "name": "DeepSeek-V3.1", + "description": "Hybrid thinking and non-thinking model with stronger agentic coding, tool use, and a 128K context window.", + "translations": { + "zh-Hans": { + "description": "DeepSeek-V3.1 是 DeepSeek 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "DeepSeek-V3.1 ist eine eigenständige Modellversion von DeepSeek mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "DeepSeek-V3.1 es una versión de modelo independiente de DeepSeek con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "DeepSeek-V3.1 est une version de modèle distincte de DeepSeek, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "DeepSeek-V3.1 adalah versi model mandiri dari DeepSeek dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "DeepSeek-V3.1 は DeepSeek が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "DeepSeek-V3.1은(는) DeepSeek가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "DeepSeek-V3.1 é uma versão de modelo independente da DeepSeek, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "DeepSeek-V3.1 — самостоятельная версия модели от DeepSeek с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "DeepSeek-V3.1, DeepSeek tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "DeepSeek-V3.1 是 DeepSeek 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news250821", + "title": "DeepSeek-V3.1 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.deepseek.com", + "docsUrl": "https://api-docs.deepseek.com/news/news250821", + "vendor": "DeepSeek", + "size": "671B (37B active)", + "contextWindow": 128000, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-08-21", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/deepseek-v3-2-exp.json b/manifests/models/deepseek-v3-2-exp.json new file mode 100644 index 00000000..21f3a39c --- /dev/null +++ b/manifests/models/deepseek-v3-2-exp.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "deepseek-v3-2-exp", + "name": "DeepSeek-V3.2-Exp", + "description": "Experimental V3.2 checkpoint introducing sparse attention for more efficient long-context coding and agent tasks.", + "translations": { + "zh-Hans": { + "description": "DeepSeek-V3.2-Exp 是 DeepSeek 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "DeepSeek-V3.2-Exp ist eine eigenständige Modellversion von DeepSeek mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "DeepSeek-V3.2-Exp es una versión de modelo independiente de DeepSeek con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "DeepSeek-V3.2-Exp est une version de modèle distincte de DeepSeek, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "DeepSeek-V3.2-Exp adalah versi model mandiri dari DeepSeek dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "DeepSeek-V3.2-Exp は DeepSeek が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "DeepSeek-V3.2-Exp은(는) DeepSeek가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "DeepSeek-V3.2-Exp é uma versão de modelo independente da DeepSeek, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "DeepSeek-V3.2-Exp — самостоятельная версия модели от DeepSeek с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "DeepSeek-V3.2-Exp, DeepSeek tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "DeepSeek-V3.2-Exp 是 DeepSeek 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news250929", + "title": "DeepSeek-V3.2-Exp official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.deepseek.com", + "docsUrl": "https://api-docs.deepseek.com/news/news250929", + "vendor": "DeepSeek", + "size": "671B (37B active)", + "contextWindow": 128000, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-09-29", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/deepseek-v3-terminus.json b/manifests/models/deepseek-v3-terminus.json index 67c19a6f..edcdad26 100644 --- a/manifests/models/deepseek-v3-terminus.json +++ b/manifests/models/deepseek-v3-terminus.json @@ -2,7 +2,7 @@ "$schema": "../$schemas/model.schema.json", "id": "deepseek-v3-terminus", "name": "DeepSeek V3.1 Terminus", - "description": "DeepSeek V3.1 Terminus-extended version with 67B parameters and 64K context window, designed for advanced reasoning and code generation tasks.", + "description": "DeepSeek V3.1 Terminus improves language consistency and optimizes code-agent and search-agent behavior over V3.1.", "translations": { "zh-Hans": { "description": "DeepSeek V3.1 Terminus 扩展版本,67B 参数,64K 上下文窗口,专为高级推理和代码生成任务设计。" @@ -38,20 +38,43 @@ "description": "DeepSeek V3.1 Terminus 擴展版本,67B 參數,64K 上下文視窗,專為高級推理和代碼生成任務設計。" } }, - "verified": false, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news250922", + "title": "DeepSeek-V3.1-Terminus release notes", + "fields": ["name", "description", "releaseDate", "lifecycle", "capabilities"] + }, + { + "url": "https://huggingface.co/deepseek-ai/DeepSeek-V3.1-Terminus", + "title": "Official DeepSeek-V3.1-Terminus model card", + "fields": [ + "docsUrl", + "size", + "contextWindow", + "inputModalities", + "outputModalities", + "platformUrls" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://www.deepseek.com", "docsUrl": "https://huggingface.co/deepseek-ai/DeepSeek-V3.1-Terminus", "vendor": "DeepSeek", "size": "671B", - "contextWindow": 64000, - "maxOutput": 4000, + "contextWindow": 128000, + "maxOutput": null, "tokenPricing": { - "input": 0.14, - "output": 0.14, - "cache": null + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] }, - "releaseDate": null, - "lifecycle": "latest", + "releaseDate": "2025-09-22", + "lifecycle": "maintained", "knowledgeCutoff": null, "inputModalities": ["text"], "outputModalities": ["text"], diff --git a/manifests/models/deepseek-v3.json b/manifests/models/deepseek-v3.json new file mode 100644 index 00000000..6e5f7ff0 --- /dev/null +++ b/manifests/models/deepseek-v3.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "deepseek-v3", + "name": "DeepSeek-V3", + "description": "Open-weight MoE model that established the V3 coding, reasoning, and general-purpose model line.", + "translations": { + "zh-Hans": { + "description": "DeepSeek-V3 是 DeepSeek 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "DeepSeek-V3 ist eine eigenständige Modellversion von DeepSeek mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "DeepSeek-V3 es una versión de modelo independiente de DeepSeek con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "DeepSeek-V3 est une version de modèle distincte de DeepSeek, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "DeepSeek-V3 adalah versi model mandiri dari DeepSeek dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "DeepSeek-V3 は DeepSeek が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "DeepSeek-V3은(는) DeepSeek가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "DeepSeek-V3 é uma versão de modelo independente da DeepSeek, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "DeepSeek-V3 — самостоятельная версия модели от DeepSeek с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "DeepSeek-V3, DeepSeek tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "DeepSeek-V3 是 DeepSeek 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news1226", + "title": "DeepSeek-V3 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.deepseek.com", + "docsUrl": "https://api-docs.deepseek.com/news/news1226", + "vendor": "DeepSeek", + "size": "671B (37B active)", + "contextWindow": 64000, + "maxOutput": 8192, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2024-12-26", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/deepseek-v4-flash.json b/manifests/models/deepseek-v4-flash.json new file mode 100644 index 00000000..b55e5716 --- /dev/null +++ b/manifests/models/deepseek-v4-flash.json @@ -0,0 +1,124 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "deepseek-v4-flash", + "name": "DeepSeek-V4-Flash", + "description": "DeepSeek's efficient open-weight V4 model with 284B total and 13B active parameters, 1M context, dual thinking modes, JSON output, and tool calls.", + "translations": { + "de": { + "description": "DeepSeeks effizientes Open-Weight-V4-Modell mit 284 Mrd. Gesamt- und 13 Mrd. aktiven Parametern, 1 Mio. Kontext, zwei Denkmodi, JSON und Werkzeugaufrufen." + }, + "es": { + "description": "El modelo V4 eficiente y de pesos abiertos de DeepSeek, con 284B parámetros totales y 13B activos, contexto de 1M, dos modos de pensamiento, JSON y herramientas." + }, + "fr": { + "description": "Le modèle V4 efficace à poids ouverts de DeepSeek, avec 284 Md de paramètres dont 13 Md actifs, contexte 1 M, deux modes de réflexion, JSON et outils." + }, + "id": { + "description": "Model V4 open-weight efisien dari DeepSeek dengan 284B parameter total dan 13B aktif, konteks 1M, dua mode berpikir, keluaran JSON, dan pemanggilan alat." + }, + "ja": { + "description": "総2840億・アクティブ130億パラメータ、100万コンテキスト、2種類の思考モード、JSON出力、ツール呼び出しを備えたDeepSeekの効率的なオープンウェイトV4モデル。" + }, + "ko": { + "description": "총 284B 및 활성 13B 매개변수, 100만 컨텍스트, 이중 사고 모드, JSON 출력과 도구 호출을 지원하는 DeepSeek의 효율적인 오픈 웨이트 V4 모델입니다." + }, + "pt": { + "description": "O modelo V4 eficiente e de pesos abertos da DeepSeek, com 284B parâmetros totais e 13B ativos, contexto de 1M, dois modos de pensamento, JSON e ferramentas." + }, + "ru": { + "description": "Эффективная открытая модель DeepSeek V4: 284 млрд параметров, 13 млрд активных, контекст 1 млн, два режима рассуждений, JSON и вызов инструментов." + }, + "tr": { + "description": "DeepSeek'in 284B toplam ve 13B aktif parametreli, 1M bağlamlı, çift düşünme modlu, JSON çıktılı ve araç çağrılı verimli açık ağırlıklı V4 modeli." + }, + "zh-Hans": { + "description": "DeepSeek 的高效开放权重 V4 模型,2840 亿总参数、130 亿激活参数,支持 100 万上下文、双思考模式、JSON 输出和工具调用。" + }, + "zh-Hant": { + "description": "DeepSeek 的高效開放權重 V4 模型,2840 億總參數、130 億啟用參數,支援 100 萬上下文、雙思考模式、JSON 輸出和工具呼叫。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news260424/", + "title": "DeepSeek V4 Preview release", + "fields": [ + "name", + "description", + "size", + "releaseDate", + "lifecycle", + "contextWindow", + "capabilities" + ] + }, + { + "url": "https://api-docs.deepseek.com/quick_start/pricing", + "title": "DeepSeek models and pricing", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.deepseek.com", + "docsUrl": "https://api-docs.deepseek.com/quick_start/pricing", + "vendor": "DeepSeek", + "size": "284B total / 13B active", + "contextWindow": 1000000, + "maxOutput": 384000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.14, + "output": 0.28, + "cacheRead": 0.0028, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-24", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/deepseek-v4-pro.json b/manifests/models/deepseek-v4-pro.json new file mode 100644 index 00000000..7aee9fce --- /dev/null +++ b/manifests/models/deepseek-v4-pro.json @@ -0,0 +1,124 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "deepseek-v4-pro", + "name": "DeepSeek-V4-Pro", + "description": "DeepSeek's flagship open-weight V4 model with 1.6T total and 49B active parameters, 1M context, dual thinking modes, JSON output, and tool calls.", + "translations": { + "de": { + "description": "DeepSeeks Open-Weight-V4-Flaggschiff mit 1,6 Bio. Gesamt- und 49 Mrd. aktiven Parametern, 1 Mio. Kontext, zwei Denkmodi, JSON und Werkzeugaufrufen." + }, + "es": { + "description": "El modelo V4 insignia y de pesos abiertos de DeepSeek, con 1,6T parámetros totales y 49B activos, contexto de 1M, dos modos de pensamiento, JSON y herramientas." + }, + "fr": { + "description": "Le modèle V4 phare à poids ouverts de DeepSeek, avec 1,6 Bn de paramètres dont 49 Md actifs, contexte 1 M, deux modes de réflexion, JSON et outils." + }, + "id": { + "description": "Model V4 open-weight unggulan DeepSeek dengan 1,6T parameter total dan 49B aktif, konteks 1M, dua mode berpikir, keluaran JSON, dan pemanggilan alat." + }, + "ja": { + "description": "総1.6兆・アクティブ490億パラメータ、100万コンテキスト、2種類の思考モード、JSON出力、ツール呼び出しを備えたDeepSeekの旗艦オープンウェイトV4モデル。" + }, + "ko": { + "description": "총 1.6T 및 활성 49B 매개변수, 100만 컨텍스트, 이중 사고 모드, JSON 출력과 도구 호출을 지원하는 DeepSeek의 플래그십 오픈 웨이트 V4 모델입니다." + }, + "pt": { + "description": "O modelo V4 principal e de pesos abertos da DeepSeek, com 1,6T parâmetros totais e 49B ativos, contexto de 1M, dois modos de pensamento, JSON e ferramentas." + }, + "ru": { + "description": "Флагманская открытая модель DeepSeek V4: 1,6 трлн параметров, 49 млрд активных, контекст 1 млн, два режима рассуждений, JSON и инструменты." + }, + "tr": { + "description": "DeepSeek'in 1,6T toplam ve 49B aktif parametreli, 1M bağlamlı, çift düşünme modlu, JSON çıktılı ve araç çağrılı amiral açık ağırlıklı V4 modeli." + }, + "zh-Hans": { + "description": "DeepSeek 的旗舰开放权重 V4 模型,1.6 万亿总参数、490 亿激活参数,支持 100 万上下文、双思考模式、JSON 输出和工具调用。" + }, + "zh-Hant": { + "description": "DeepSeek 的旗艦開放權重 V4 模型,1.6 兆總參數、490 億啟用參數,支援 100 萬上下文、雙思考模式、JSON 輸出和工具呼叫。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://api-docs.deepseek.com/news/news260424/", + "title": "DeepSeek V4 Preview release", + "fields": [ + "name", + "description", + "size", + "releaseDate", + "lifecycle", + "contextWindow", + "capabilities" + ] + }, + { + "url": "https://api-docs.deepseek.com/quick_start/pricing", + "title": "DeepSeek models and pricing", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.deepseek.com", + "docsUrl": "https://api-docs.deepseek.com/quick_start/pricing", + "vendor": "DeepSeek", + "size": "1.6T total / 49B active", + "contextWindow": 1000000, + "maxOutput": 384000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.435, + "output": 0.87, + "cacheRead": 0.003625, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-24", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/devstral-2.json b/manifests/models/devstral-2.json new file mode 100644 index 00000000..aa593e23 --- /dev/null +++ b/manifests/models/devstral-2.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "devstral-2", + "name": "Devstral 2", + "description": "Open 123B code-agent model for autonomous software engineering with a 256K context window.", + "translations": { + "zh-Hans": { + "description": "Devstral 2 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Devstral 2 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Devstral 2 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Devstral 2 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Devstral 2 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Devstral 2 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Devstral 2은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Devstral 2 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Devstral 2 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Devstral 2, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Devstral 2 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://mistral.ai/news/devstral-2-vibe-cli", + "title": "Devstral 2 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://mistral.ai/news/devstral-2-vibe-cli", + "vendor": "Mistral AI", + "size": "123B", + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.4, + "output": 2, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-12-09", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/devstral-medium-1-0.json b/manifests/models/devstral-medium-1-0.json new file mode 100644 index 00000000..c16cceb8 --- /dev/null +++ b/manifests/models/devstral-medium-1-0.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "devstral-medium-1-0", + "name": "Devstral Medium 1.0", + "description": "Enterprise Devstral model for demanding software engineering agents and repository-scale development tasks.", + "translations": { + "zh-Hans": { + "description": "Devstral Medium 1.0 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Devstral Medium 1.0 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Devstral Medium 1.0 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Devstral Medium 1.0 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Devstral Medium 1.0 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Devstral Medium 1.0 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Devstral Medium 1.0은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Devstral Medium 1.0 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Devstral Medium 1.0 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Devstral Medium 1.0, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Devstral Medium 1.0 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/devstral-medium-1-0-25-07", + "title": "Devstral Medium 1.0 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/devstral-medium-1-0-25-07", + "vendor": "Mistral AI", + "size": null, + "contextWindow": 131072, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-07-10", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/devstral-small-1-0.json b/manifests/models/devstral-small-1-0.json new file mode 100644 index 00000000..c8c74b57 --- /dev/null +++ b/manifests/models/devstral-small-1-0.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "devstral-small-1-0", + "name": "Devstral Small 1.0", + "description": "Open 24B coding-agent model for exploring repositories, editing multiple files, and solving software engineering tasks.", + "translations": { + "zh-Hans": { + "description": "Devstral Small 1.0 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Devstral Small 1.0 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Devstral Small 1.0 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Devstral Small 1.0 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Devstral Small 1.0 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Devstral Small 1.0 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Devstral Small 1.0은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Devstral Small 1.0 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Devstral Small 1.0 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Devstral Small 1.0, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Devstral Small 1.0 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/devstral-small-1-0-25-05", + "title": "Devstral Small 1.0 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/devstral-small-1-0-25-05", + "vendor": "Mistral AI", + "size": "24B", + "contextWindow": 131072, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-05-21", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/devstral-small-1-1.json b/manifests/models/devstral-small-1-1.json new file mode 100644 index 00000000..2c42378d --- /dev/null +++ b/manifests/models/devstral-small-1-1.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "devstral-small-1-1", + "name": "Devstral Small 1.1", + "description": "Updated open Devstral model for repository exploration, multi-file editing, and software engineering agents.", + "translations": { + "zh-Hans": { + "description": "Devstral Small 1.1 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Devstral Small 1.1 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Devstral Small 1.1 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Devstral Small 1.1 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Devstral Small 1.1 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Devstral Small 1.1 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Devstral Small 1.1은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Devstral Small 1.1 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Devstral Small 1.1 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Devstral Small 1.1, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Devstral Small 1.1 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/devstral-small-1-1-25-07", + "title": "Devstral Small 1.1 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/devstral-small-1-1-25-07", + "vendor": "Mistral AI", + "size": "24B", + "contextWindow": 131072, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-07-10", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/devstral-small-2.json b/manifests/models/devstral-small-2.json new file mode 100644 index 00000000..70d4f3f1 --- /dev/null +++ b/manifests/models/devstral-small-2.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "devstral-small-2", + "name": "Devstral Small 2", + "description": "Compact 24B multimodal code-agent model for repository work, multi-file editing, and local deployment.", + "translations": { + "zh-Hans": { + "description": "Devstral Small 2 是 Mistral 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Devstral Small 2 ist eine eigenständige Modellversion von Mistral mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Devstral Small 2 es una versión de modelo independiente de Mistral con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Devstral Small 2 est une version de modèle distincte de Mistral, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Devstral Small 2 adalah versi model mandiri dari Mistral dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Devstral Small 2 は Mistral が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Devstral Small 2은(는) Mistral가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Devstral Small 2 é uma versão de modelo independente da Mistral, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Devstral Small 2 — самостоятельная версия модели от Mistral с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Devstral Small 2, Mistral tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Devstral Small 2 是 Mistral 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/devstral-small-2-25-12", + "title": "Devstral Small 2 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/devstral-small-2-25-12", + "vendor": "Mistral AI", + "size": "24B", + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.1, + "output": 0.3, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-12-09", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gemini-2-0-flash-lite.json b/manifests/models/gemini-2-0-flash-lite.json new file mode 100644 index 00000000..71d7eefb --- /dev/null +++ b/manifests/models/gemini-2-0-flash-lite.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gemini-2-0-flash-lite", + "name": "Gemini 2.0 Flash-Lite", + "description": "Cost-efficient Gemini 2.0 model for high-volume multimodal and code-adjacent automation tasks.", + "translations": { + "zh-Hans": { + "description": "Gemini 2.0 Flash-Lite 是 Google 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Gemini 2.0 Flash-Lite ist eine eigenständige Modellversion von Google mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Gemini 2.0 Flash-Lite es una versión de modelo independiente de Google con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Gemini 2.0 Flash-Lite est une version de modèle distincte de Google, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Gemini 2.0 Flash-Lite adalah versi model mandiri dari Google dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Gemini 2.0 Flash-Lite は Google が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Gemini 2.0 Flash-Lite은(는) Google가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Gemini 2.0 Flash-Lite é uma versão de modelo independente da Google, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Gemini 2.0 Flash-Lite — самостоятельная версия модели от Google с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Gemini 2.0 Flash-Lite, Google tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Gemini 2.0 Flash-Lite 是 Google 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-2.0-flash-lite", + "title": "Gemini 2.0 Flash-Lite official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://deepmind.google", + "docsUrl": "https://ai.google.dev/gemini-api/docs/models/gemini-2.0-flash-lite", + "vendor": "Google", + "size": null, + "contextWindow": 1048576, + "maxOutput": 8192, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.075, + "output": 0.3, + "cacheRead": 0.01875, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-02-25", + "lifecycle": "deprecated", + "knowledgeCutoff": "2024-08", + "inputModalities": ["text", "image", "pdf", "audio", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gemini-2-0-flash.json b/manifests/models/gemini-2-0-flash.json new file mode 100644 index 00000000..fbaf2669 --- /dev/null +++ b/manifests/models/gemini-2-0-flash.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gemini-2-0-flash", + "name": "Gemini 2.0 Flash", + "description": "Multimodal Gemini model for fast agentic tasks, code generation, tool use, and a one-million-token context.", + "translations": { + "zh-Hans": { + "description": "Gemini 2.0 Flash 是 Google 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Gemini 2.0 Flash ist eine eigenständige Modellversion von Google mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Gemini 2.0 Flash es una versión de modelo independiente de Google con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Gemini 2.0 Flash est une version de modèle distincte de Google, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Gemini 2.0 Flash adalah versi model mandiri dari Google dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Gemini 2.0 Flash は Google が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Gemini 2.0 Flash은(는) Google가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Gemini 2.0 Flash é uma versão de modelo independente da Google, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Gemini 2.0 Flash — самостоятельная версия модели от Google с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Gemini 2.0 Flash, Google tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Gemini 2.0 Flash 是 Google 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-2.0-flash", + "title": "Gemini 2.0 Flash official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://deepmind.google", + "docsUrl": "https://ai.google.dev/gemini-api/docs/models/gemini-2.0-flash", + "vendor": "Google", + "size": null, + "contextWindow": 1048576, + "maxOutput": 8192, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.1, + "output": 0.4, + "cacheRead": 0.025, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-02-05", + "lifecycle": "deprecated", + "knowledgeCutoff": "2024-08", + "inputModalities": ["text", "image", "pdf", "audio", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gemini-2-5-flash-lite.json b/manifests/models/gemini-2-5-flash-lite.json new file mode 100644 index 00000000..675b2c5d --- /dev/null +++ b/manifests/models/gemini-2-5-flash-lite.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gemini-2-5-flash-lite", + "name": "Gemini 2.5 Flash-Lite", + "description": "Fast, cost-efficient Gemini 2.5 model with optional thinking, code execution, tools, and multimodal input.", + "translations": { + "zh-Hans": { + "description": "Gemini 2.5 Flash-Lite 是 Google 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Gemini 2.5 Flash-Lite ist eine eigenständige Modellversion von Google mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Gemini 2.5 Flash-Lite es una versión de modelo independiente de Google con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Gemini 2.5 Flash-Lite est une version de modèle distincte de Google, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Gemini 2.5 Flash-Lite adalah versi model mandiri dari Google dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Gemini 2.5 Flash-Lite は Google が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Gemini 2.5 Flash-Lite은(는) Google가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Gemini 2.5 Flash-Lite é uma versão de modelo independente da Google, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Gemini 2.5 Flash-Lite — самостоятельная версия модели от Google с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Gemini 2.5 Flash-Lite, Google tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Gemini 2.5 Flash-Lite 是 Google 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-2.5-flash-lite", + "title": "Gemini 2.5 Flash-Lite official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://deepmind.google", + "docsUrl": "https://ai.google.dev/gemini-api/docs/models/gemini-2.5-flash-lite", + "vendor": "Google", + "size": null, + "contextWindow": 1048576, + "maxOutput": 65536, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.1, + "output": 0.4, + "cacheRead": 0.01, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-07-22", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-01", + "inputModalities": ["text", "image", "pdf", "audio", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gemini-2-5-flash.json b/manifests/models/gemini-2-5-flash.json index b841ac69..7758bc92 100644 --- a/manifests/models/gemini-2-5-flash.json +++ b/manifests/models/gemini-2-5-flash.json @@ -39,20 +39,66 @@ } }, "verified": true, + "sources": [ + { + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-2.5-flash", + "title": "Gemini 2.5 Flash model documentation", + "fields": [ + "name", + "description", + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://ai.google.dev/gemini-api/docs/deprecations", + "title": "Gemini model lifecycle documentation", + "fields": ["releaseDate", "lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://deepmind.google", "docsUrl": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash", "vendor": "Google", - "size": "Unknown", + "size": null, "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 0.3, - "output": 2.5, - "cache": 0.03 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 2.5, + "cacheRead": 0.03, + "cacheWrite": null + } + } + ] + } + ] }, - "releaseDate": "2025-03-20", + "releaseDate": "2025-06-17", "lifecycle": "maintained", - "knowledgeCutoff": "2025-03", + "knowledgeCutoff": "2025-01", "inputModalities": ["text", "image", "pdf", "audio", "video"], "outputModalities": ["text"], "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], diff --git a/manifests/models/gemini-2-5-pro.json b/manifests/models/gemini-2-5-pro.json index a24fbd16..2d1e3b84 100644 --- a/manifests/models/gemini-2-5-pro.json +++ b/manifests/models/gemini-2-5-pro.json @@ -39,20 +39,66 @@ } }, "verified": true, + "sources": [ + { + "url": "https://ai.google.dev/gemini-api/docs/models/gemini-2.5-pro", + "title": "Gemini 2.5 Pro model documentation", + "fields": [ + "name", + "description", + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://ai.google.dev/gemini-api/docs/deprecations", + "title": "Gemini model lifecycle documentation", + "fields": ["releaseDate", "lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://deepmind.google", "docsUrl": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-pro", "vendor": "Google", - "size": "Unknown", + "size": null, "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 1.25, - "output": 10, - "cache": 0.125 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 10, + "cacheRead": 0.125, + "cacheWrite": null + } + } + ] + } + ] }, - "releaseDate": "2025-05-06", + "releaseDate": "2025-06-17", "lifecycle": "maintained", - "knowledgeCutoff": "2025-05", + "knowledgeCutoff": "2025-01", "inputModalities": ["text", "image", "pdf", "audio", "video"], "outputModalities": ["text"], "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], diff --git a/manifests/models/gemini-3-1-flash-lite.json b/manifests/models/gemini-3-1-flash-lite.json index 2199f9e5..4b18b959 100644 --- a/manifests/models/gemini-3-1-flash-lite.json +++ b/manifests/models/gemini-3-1-flash-lite.json @@ -74,9 +74,29 @@ "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 0.25, - "output": 1.5, - "cache": 0.025 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.25, + "output": 1.5, + "cacheRead": 0.025, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-05-07", "lifecycle": "latest", diff --git a/manifests/models/gemini-3-1-pro-preview.json b/manifests/models/gemini-3-1-pro-preview.json index 8b7cd3ab..7a7aa8ac 100644 --- a/manifests/models/gemini-3-1-pro-preview.json +++ b/manifests/models/gemini-3-1-pro-preview.json @@ -74,9 +74,29 @@ "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 2, - "output": 12, - "cache": 0.2 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2, + "output": 12, + "cacheRead": 0.2, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-02-19", "lifecycle": "latest", diff --git a/manifests/models/gemini-3-5-flash.json b/manifests/models/gemini-3-5-flash.json index 2c85e08f..0a9d2e62 100644 --- a/manifests/models/gemini-3-5-flash.json +++ b/manifests/models/gemini-3-5-flash.json @@ -74,9 +74,29 @@ "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 0.75, - "output": 4.5, - "cache": 0.08 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.75, + "output": 4.5, + "cacheRead": 0.08, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-05-19", "lifecycle": "latest", diff --git a/manifests/models/gemini-3-flash.json b/manifests/models/gemini-3-flash.json index 98488fbc..5e6f6bb8 100644 --- a/manifests/models/gemini-3-flash.json +++ b/manifests/models/gemini-3-flash.json @@ -71,9 +71,29 @@ "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 0.5, - "output": 3, - "cache": 0.05 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.5, + "output": 3, + "cacheRead": 0.05, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-12-17", "lifecycle": "latest", diff --git a/manifests/models/gemini-3-pro.json b/manifests/models/gemini-3-pro.json index 0b67dad9..520c82ea 100644 --- a/manifests/models/gemini-3-pro.json +++ b/manifests/models/gemini-3-pro.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://ai.google.dev/gemini-api/docs/models", + "title": "Gemini API model lifecycle documentation", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://deepmind.google", "docsUrl": "https://ai.google.dev/gemini-api/docs/models#gemini-3-pro", "vendor": "Google", @@ -46,12 +56,32 @@ "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 2, - "output": 12, - "cache": 0.2 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2, + "output": 12, + "cacheRead": 0.2, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-11-18", - "lifecycle": "latest", + "lifecycle": "deprecated", "knowledgeCutoff": "2025-01", "inputModalities": ["text", "image", "pdf", "audio", "video"], "outputModalities": ["text"], diff --git a/manifests/models/glm-4-5.json b/manifests/models/glm-4-5.json new file mode 100644 index 00000000..f79ed166 --- /dev/null +++ b/manifests/models/glm-4-5.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "glm-4-5", + "name": "GLM-4.5", + "description": "Open-weight MoE model purpose-built for agentic coding, tool use, reasoning, debugging, and frontend development.", + "translations": { + "zh-Hans": { + "description": "GLM-4.5 是 Z.ai 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GLM-4.5 ist eine eigenständige Modellversion von Z.ai mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GLM-4.5 es una versión de modelo independiente de Z.ai con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GLM-4.5 est une version de modèle distincte de Z.ai, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GLM-4.5 adalah versi model mandiri dari Z.ai dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GLM-4.5 は Z.ai が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GLM-4.5은(는) Z.ai가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GLM-4.5 é uma versão de modelo independente da Z.ai, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GLM-4.5 — самостоятельная версия модели от Z.ai с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GLM-4.5, Z.ai tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GLM-4.5 是 Z.ai 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.z.ai/guides/llm/glm-4.5", + "title": "GLM-4.5 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://z.ai", + "docsUrl": "https://docs.z.ai/guides/llm/glm-4.5", + "vendor": "Z.ai", + "size": "355B (32B active)", + "contextWindow": 131072, + "maxOutput": 98304, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.6, + "output": 2.2, + "cacheRead": 0.11, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-07-28", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/glm-4-6.json b/manifests/models/glm-4-6.json index a915fb0a..cf047d13 100644 --- a/manifests/models/glm-4-6.json +++ b/manifests/models/glm-4-6.json @@ -46,9 +46,29 @@ "contextWindow": 204800, "maxOutput": 131072, "tokenPricing": { - "input": 0.6, - "output": 2.2, - "cache": 0.11 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.6, + "output": 2.2, + "cacheRead": 0.11, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-09-30", "lifecycle": "maintained", diff --git a/manifests/models/glm-4-6v.json b/manifests/models/glm-4-6v.json index 47f9fe70..efe1c7e9 100644 --- a/manifests/models/glm-4-6v.json +++ b/manifests/models/glm-4-6v.json @@ -46,9 +46,29 @@ "contextWindow": 128000, "maxOutput": 24576, "tokenPricing": { - "input": 0.3, - "output": 0.9, - "cache": 0.05 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 0.9, + "cacheRead": 0.05, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-12-08", "lifecycle": "latest", diff --git a/manifests/models/glm-4-7.json b/manifests/models/glm-4-7.json index 75c98602..94718708 100644 --- a/manifests/models/glm-4-7.json +++ b/manifests/models/glm-4-7.json @@ -2,57 +2,111 @@ "$schema": "../$schemas/model.schema.json", "id": "glm-4-7", "name": "GLM 4.7", - "description": "GLM 4.7 is an advanced language model from Z.ai with 128K context window, optimized for enhanced reasoning and multilingual understanding.", + "description": "GLM 4.7 is Z.ai's open-weight model for coding, reasoning, and agentic tasks, with a 200K-token context window and 128K maximum output.", "translations": { - "zh-Hans": { - "description": "GLM 4.7 是 Z.ai 推出的先进语言模型,具备 128K 上下文窗口,专为增强推理和多语言理解优化。" - }, "de": { - "description": "GLM 4.7 ist ein fortschrittliches Sprachmodell von Z.ai mit 128K-Kontextfenster, optimiert für verbessertes Schließen und mehrsprachiges Verständnis." - }, - "ko": { - "description": "GLM 4.7은 Z.ai의 고급 언어 모델로, 128K 컨텍스트 윈도를 갖추고 있으며 향상된 추론 및 다국어 이해를 위해 최적화되었습니다." + "description": "GLM 4.7 ist Z.ais offenes Modell für Programmierung, Schlussfolgern und agentische Aufgaben mit 200K Token Kontext und maximal 128K Ausgabe." }, "es": { - "description": "GLM 4.7 es un modelo de lenguaje avanzado de Z.ai con ventana de contexto de 128K, optimizado para razonamiento mejorado y comprensión multilingüe." + "description": "GLM 4.7 es el modelo de pesos abiertos de Z.ai para programación, razonamiento y tareas agénticas, con contexto de 200K tokens y salida máxima de 128K." }, "fr": { - "description": "GLM 4.7 est un modele de langage avance de Z.ai avec une fenetre de contexte de 128K, optimise pour le raisonnement ameliore et la comprehension multilingue." + "description": "GLM 4.7 est le modèle ouvert de Z.ai pour le codage, le raisonnement et les tâches agentiques, avec 200K jetons de contexte et une sortie maximale de 128K." }, "id": { - "description": "GLM 4.7 adalah model bahasa canggih dari Z.ai dengan jendela konteks 128K, dioptimalkan untuk penalaran yang ditingkatkan dan pemahaman multibahasa." + "description": "GLM 4.7 adalah model open-weight Z.ai untuk coding, penalaran, dan tugas agentik, dengan konteks 200K token dan keluaran maksimum 128K." }, "ja": { - "description": "Z.aiの高度な言語モデルGLM 4.7は、128Kコンテキストウィンドウを持ち、強化された推論と多言語理解のために最適化されています。" + "description": "GLM 4.7は、コーディング、推論、エージェントタスク向けのZ.ai製オープンウェイトモデルで、200Kトークンのコンテキストと最大128K出力を備えます。" + }, + "ko": { + "description": "GLM 4.7은 코딩, 추론 및 에이전트 작업을 위한 Z.ai의 오픈 웨이트 모델로, 200K 토큰 컨텍스트와 최대 128K 출력을 제공합니다." }, "pt": { - "description": "GLM 4.7 é um modelo de linguagem avançado de Z.ai com janela de contexto de 128K, otimizado para raciocínio aprimorado e compreensão multilíngue." + "description": "GLM 4.7 é o modelo de pesos abertos da Z.ai para programação, raciocínio e tarefas agênticas, com contexto de 200K tokens e saída máxima de 128K." }, "ru": { - "description": "GLM 4.7 - это продвинутая языковая модель от Z.ai с окном контекста 128K, оптимизированная для улучшенного рассуждения и многоязычного понимания." + "description": "GLM 4.7 — открытая модель Z.ai для программирования, рассуждений и агентных задач с контекстом 200K токенов и максимальным выводом 128K." }, "tr": { - "description": "GLM 4.7, Z.ai'den gelen gelismis bir dil modelidir ve 128K baglam penceresi ile gelismis muhakeme ve cok dilli anlas icin optimize edilmistir." + "description": "GLM 4.7, kodlama, akıl yürütme ve aracı görevler için 200K token bağlam ve en fazla 128K çıktı sunan Z.ai açık ağırlık modelidir." + }, + "zh-Hans": { + "description": "GLM 4.7 是 Z.ai 面向编码、推理和智能体任务的开放权重模型,具备 200K token 上下文窗口和 128K 最大输出。" }, "zh-Hant": { - "description": "GLM 4.7 是 Z.ai 推出的先進語言模型,具備 128K 上下文視窗,專為增強推理和多語言理解優化。" + "description": "GLM 4.7 是 Z.ai 面向編碼、推理和智慧體任務的開放權重模型,具備 200K token 上下文視窗和 128K 最大輸出。" } }, "verified": true, + "sources": [ + { + "url": "https://docs.z.ai/guides/llm/glm-4.7", + "title": "GLM-4.7 model documentation", + "fields": [ + "name", + "description", + "docsUrl", + "contextWindow", + "maxOutput", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://docs.z.ai/release-notes/new-released", + "title": "Z.ai model release notes", + "fields": ["releaseDate", "lifecycle"] + }, + { + "url": "https://docs.z.ai/guides/overview/pricing", + "title": "Z.ai API pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://huggingface.co/zai-org/GLM-4.7", + "title": "Official GLM-4.7 weights and model card", + "fields": ["size", "platformUrls"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://z.ai", - "docsUrl": "https://huggingface.co/zai-org/GLM-4.7", + "docsUrl": "https://docs.z.ai/guides/llm/glm-4.7", "vendor": "Z.ai", "size": "358B", "contextWindow": 204800, "maxOutput": 131072, "tokenPricing": { - "input": 0.6, - "output": 2.2, - "cache": 0.11 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.6, + "output": 2.2, + "cacheRead": 0.11, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-12-22", - "lifecycle": "latest", - "knowledgeCutoff": "2025-12", + "lifecycle": "maintained", + "knowledgeCutoff": null, "inputModalities": ["text"], "outputModalities": ["text"], "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], diff --git a/manifests/models/glm-5-1.json b/manifests/models/glm-5-1.json new file mode 100644 index 00000000..fec15b04 --- /dev/null +++ b/manifests/models/glm-5-1.json @@ -0,0 +1,127 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "glm-5-1", + "name": "GLM-5.1", + "description": "Z.ai's open-weight flagship for long-horizon agentic engineering, sustained autonomous coding, and production-grade delivery across tasks lasting up to eight hours.", + "translations": { + "de": { + "description": "Z.ais offenes Flaggschiff für langfristige agentische Entwicklung, anhaltend autonomes Programmieren und produktionsreife Ergebnisse bei Aufgaben bis zu acht Stunden." + }, + "es": { + "description": "El modelo insignia de pesos abiertos de Z.ai para ingeniería agéntica prolongada, programación autónoma sostenida y entregas de producción en tareas de hasta ocho horas." + }, + "fr": { + "description": "Le modèle phare ouvert de Z.ai pour l’ingénierie agentique longue, le codage autonome continu et des livrables de production sur des tâches allant jusqu’à huit heures." + }, + "id": { + "description": "Model unggulan open-weight Z.ai untuk rekayasa agentik jangka panjang, coding otonom berkelanjutan, dan hasil siap produksi pada tugas hingga delapan jam." + }, + "ja": { + "description": "最長8時間のタスクで、長期エージェント型エンジニアリング、継続的な自律コーディング、本番品質の成果物に対応するZ.aiのオープンウェイト旗艦モデル。" + }, + "ko": { + "description": "최대 8시간 작업에서 장기 에이전트 엔지니어링, 지속적인 자율 코딩 및 프로덕션급 결과물을 제공하는 Z.ai의 오픈 웨이트 플래그십 모델입니다." + }, + "pt": { + "description": "O modelo principal de pesos abertos da Z.ai para engenharia agêntica prolongada, programação autônoma contínua e entregas de produção em tarefas de até oito horas." + }, + "ru": { + "description": "Открытая флагманская модель Z.ai для длительной агентной разработки, автономного программирования и готовых результатов в задачах продолжительностью до восьми часов." + }, + "tr": { + "description": "Z.ai'ın sekiz saate kadar süren görevlerde uzun vadeli aracı mühendislik, sürekli otonom kodlama ve üretim kalitesinde teslimat için açık ağırlıklı amiral modeli." + }, + "zh-Hans": { + "description": "Z.ai 面向长周期智能体工程、持续自主编码和最长八小时任务生产级交付的开放权重旗舰模型。" + }, + "zh-Hant": { + "description": "Z.ai 面向長週期智慧體工程、持續自主編碼和最長八小時任務生產級交付的開放權重旗艦模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.z.ai/guides/llm/glm-5.1", + "title": "GLM-5.1 model documentation", + "fields": [ + "name", + "description", + "docsUrl", + "contextWindow", + "maxOutput", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://docs.z.ai/release-notes/new-released", + "title": "Z.ai model release notes", + "fields": ["releaseDate", "lifecycle"] + }, + { + "url": "https://docs.z.ai/guides/overview/pricing", + "title": "Z.ai API pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://huggingface.co/zai-org/GLM-5.1", + "title": "Official GLM-5.1 weights and model card", + "fields": ["size", "platformUrls"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://z.ai", + "docsUrl": "https://docs.z.ai/guides/llm/glm-5.1", + "vendor": "Z.ai", + "size": "754B", + "contextWindow": 204800, + "maxOutput": 131072, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.4, + "output": 4.4, + "cacheRead": 0.26, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-07", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/zai-org/GLM-5.1", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/glm-5-2.json b/manifests/models/glm-5-2.json new file mode 100644 index 00000000..ddc50861 --- /dev/null +++ b/manifests/models/glm-5-2.json @@ -0,0 +1,127 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "glm-5-2", + "name": "GLM-5.2", + "description": "Z.ai's open-weight flagship for long-horizon agentic coding, flexible reasoning effort, and stable work across a 1M-token context window.", + "translations": { + "de": { + "description": "Z.ais offenes Flaggschiff für langfristige agentische Programmierung, flexible Denkleistung und stabile Arbeit über ein Kontextfenster von 1 Mio. Token." + }, + "es": { + "description": "El modelo insignia de pesos abiertos de Z.ai para programación agéntica prolongada, razonamiento flexible y trabajo estable con contexto de 1 millón de tokens." + }, + "fr": { + "description": "Le modèle phare à poids ouverts de Z.ai pour le codage agentique long, l’effort de raisonnement flexible et un travail stable sur 1 million de jetons." + }, + "id": { + "description": "Model unggulan open-weight Z.ai untuk coding agentik jangka panjang, upaya penalaran fleksibel, dan kerja stabil dalam konteks 1 juta token." + }, + "ja": { + "description": "長期のエージェント型コーディング、柔軟な推論強度、100万トークンのコンテキストにわたる安定した作業に対応するZ.aiのオープンウェイト旗艦モデル。" + }, + "ko": { + "description": "장기 에이전트 코딩, 유연한 추론 강도 및 100만 토큰 컨텍스트 전반의 안정적인 작업을 위한 Z.ai의 오픈 웨이트 플래그십 모델입니다." + }, + "pt": { + "description": "O modelo principal de pesos abertos da Z.ai para programação agêntica prolongada, raciocínio flexível e trabalho estável em contexto de 1 milhão de tokens." + }, + "ru": { + "description": "Открытая флагманская модель Z.ai для длительного агентного программирования, гибкой глубины рассуждений и устойчивой работы с контекстом 1 млн токенов." + }, + "tr": { + "description": "Z.ai'ın uzun süreli aracı kodlama, esnek akıl yürütme düzeyi ve 1 milyon token bağlamda kararlı çalışma için açık ağırlıklı amiral modeli." + }, + "zh-Hans": { + "description": "Z.ai 面向长周期智能体编码、灵活推理强度和 100 万 token 上下文稳定工作的开放权重旗舰模型。" + }, + "zh-Hant": { + "description": "Z.ai 面向長週期智慧體編碼、彈性推理強度和 100 萬 token 上下文穩定工作的開放權重旗艦模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.z.ai/guides/llm/glm-5.2", + "title": "GLM-5.2 model documentation", + "fields": [ + "name", + "description", + "docsUrl", + "contextWindow", + "maxOutput", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://docs.z.ai/release-notes/new-released", + "title": "Z.ai model release notes", + "fields": ["releaseDate", "lifecycle"] + }, + { + "url": "https://docs.z.ai/guides/overview/pricing", + "title": "Z.ai API pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://huggingface.co/zai-org/GLM-5.2", + "title": "Official GLM-5.2 weights and model card", + "fields": ["size", "platformUrls"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://z.ai", + "docsUrl": "https://docs.z.ai/guides/llm/glm-5.2", + "vendor": "Z.ai", + "size": "753B", + "contextWindow": 1000000, + "maxOutput": 131072, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.4, + "output": 4.4, + "cacheRead": 0.26, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-06-16", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/zai-org/GLM-5.2", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/glm-5.json b/manifests/models/glm-5.json new file mode 100644 index 00000000..813bf4f7 --- /dev/null +++ b/manifests/models/glm-5.json @@ -0,0 +1,128 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "glm-5", + "name": "GLM-5", + "description": "Z.ai's 744B open-weight foundation model for agentic engineering, complex system development, and long-horizon coding tasks.", + "translations": { + "de": { + "description": "Z.ais offenes 744B-Foundation-Modell für agentische Softwareentwicklung, komplexe Systementwicklung und langfristige Programmieraufgaben." + }, + "es": { + "description": "El modelo fundacional de pesos abiertos de 744B de Z.ai para ingeniería agéntica, desarrollo de sistemas complejos y tareas de programación prolongadas." + }, + "fr": { + "description": "Le modèle fondamental ouvert de 744B de Z.ai pour l’ingénierie agentique, les systèmes complexes et les tâches de codage de longue durée." + }, + "id": { + "description": "Model foundation open-weight 744B Z.ai untuk rekayasa agentik, pengembangan sistem kompleks, dan tugas coding jangka panjang." + }, + "ja": { + "description": "エージェント型エンジニアリング、複雑なシステム開発、長期コーディングタスク向けのZ.ai製744Bオープンウェイト基盤モデル。" + }, + "ko": { + "description": "에이전트 엔지니어링, 복잡한 시스템 개발 및 장기 코딩 작업을 위한 Z.ai의 744B 오픈 웨이트 기반 모델입니다." + }, + "pt": { + "description": "O modelo fundamental de pesos abertos de 744B da Z.ai para engenharia agêntica, sistemas complexos e tarefas de programação prolongadas." + }, + "ru": { + "description": "Открытая базовая модель Z.ai на 744B параметров для агентной разработки, сложных систем и длительных задач программирования." + }, + "tr": { + "description": "Z.ai'ın aracı mühendislik, karmaşık sistem geliştirme ve uzun süreli kodlama görevleri için 744B açık ağırlıklı temel modeli." + }, + "zh-Hans": { + "description": "Z.ai 面向智能体工程、复杂系统开发和长周期编码任务的 744B 开放权重基础模型。" + }, + "zh-Hant": { + "description": "Z.ai 面向智慧體工程、複雜系統開發和長週期編碼任務的 744B 開放權重基礎模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.z.ai/guides/llm/glm-5", + "title": "GLM-5 model documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://docs.z.ai/release-notes/new-released", + "title": "Z.ai model release notes", + "fields": ["releaseDate", "lifecycle"] + }, + { + "url": "https://docs.z.ai/guides/overview/pricing", + "title": "Z.ai API pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://huggingface.co/zai-org/GLM-5", + "title": "Official GLM-5 weights and model card", + "fields": ["size", "platformUrls"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://z.ai", + "docsUrl": "https://docs.z.ai/guides/llm/glm-5", + "vendor": "Z.ai", + "size": "744B (40B active)", + "contextWindow": 204800, + "maxOutput": 131072, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1, + "output": 3.2, + "cacheRead": 0.2, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-02-12", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/zai-org/GLM-5", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-4-1-mini.json b/manifests/models/gpt-4-1-mini.json new file mode 100644 index 00000000..089a0ed7 --- /dev/null +++ b/manifests/models/gpt-4-1-mini.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-4-1-mini", + "name": "GPT-4.1 mini", + "description": "Smaller GPT-4.1 model for efficient instruction following, long-context code work, and tool-driven applications.", + "translations": { + "zh-Hans": { + "description": "GPT-4.1 mini 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-4.1 mini ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-4.1 mini es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-4.1 mini est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-4.1 mini adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-4.1 mini は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-4.1 mini은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-4.1 mini é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-4.1 mini — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-4.1 mini, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-4.1 mini 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-4.1-mini", + "title": "GPT-4.1 mini official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-4.1-mini", + "vendor": "OpenAI", + "size": null, + "contextWindow": 1047576, + "maxOutput": 32768, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.4, + "output": 1.6, + "cacheRead": 0.1, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-04-14", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-06", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-4-1-nano.json b/manifests/models/gpt-4-1-nano.json new file mode 100644 index 00000000..01512c8c --- /dev/null +++ b/manifests/models/gpt-4-1-nano.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-4-1-nano", + "name": "GPT-4.1 nano", + "description": "Smallest GPT-4.1 model, optimized for high-volume classification, extraction, code-adjacent automation, and low latency.", + "translations": { + "zh-Hans": { + "description": "GPT-4.1 nano 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-4.1 nano ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-4.1 nano es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-4.1 nano est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-4.1 nano adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-4.1 nano は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-4.1 nano은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-4.1 nano é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-4.1 nano — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-4.1 nano, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-4.1 nano 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-4.1-nano", + "title": "GPT-4.1 nano official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-4.1-nano", + "vendor": "OpenAI", + "size": null, + "contextWindow": 1047576, + "maxOutput": 32768, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.1, + "output": 0.4, + "cacheRead": 0.025, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-04-14", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-06", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-4-1.json b/manifests/models/gpt-4-1.json index 6a014e10..48031e23 100644 --- a/manifests/models/gpt-4-1.json +++ b/manifests/models/gpt-4-1.json @@ -46,9 +46,29 @@ "contextWindow": 1047576, "maxOutput": 32768, "tokenPricing": { - "input": 2, - "output": 8, - "cache": 0.5 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2, + "output": 8, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-04-14", "lifecycle": "maintained", diff --git a/manifests/models/gpt-4o-mini.json b/manifests/models/gpt-4o-mini.json new file mode 100644 index 00000000..fce4e32c --- /dev/null +++ b/manifests/models/gpt-4o-mini.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-4o-mini", + "name": "GPT-4o mini", + "description": "Fast, affordable GPT-4o variant for focused tasks, including code generation and structured tool workflows.", + "translations": { + "zh-Hans": { + "description": "GPT-4o mini 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-4o mini ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-4o mini es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-4o mini est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-4o mini adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-4o mini は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-4o mini은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-4o mini é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-4o mini — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-4o mini, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-4o mini 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-4o-mini", + "title": "GPT-4o mini official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-4o-mini", + "vendor": "OpenAI", + "size": null, + "contextWindow": 128000, + "maxOutput": 16384, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.15, + "output": 0.6, + "cacheRead": 0.075, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2024-07-18", + "lifecycle": "maintained", + "knowledgeCutoff": "2023-10", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-4o.json b/manifests/models/gpt-4o.json index 2b403d98..ccf11c35 100644 --- a/manifests/models/gpt-4o.json +++ b/manifests/models/gpt-4o.json @@ -46,9 +46,29 @@ "contextWindow": 128000, "maxOutput": 16384, "tokenPricing": { - "input": 2.5, - "output": 10, - "cache": 1.25 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2.5, + "output": 10, + "cacheRead": 1.25, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2024-05-13", "lifecycle": "deprecated", diff --git a/manifests/models/gpt-5-1-codex-max.json b/manifests/models/gpt-5-1-codex-max.json new file mode 100644 index 00000000..4e03c109 --- /dev/null +++ b/manifests/models/gpt-5-1-codex-max.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-1-codex-max", + "name": "GPT-5.1-Codex-Max", + "description": "Long-horizon Codex model optimized for project-scale refactoring, persistent execution, and large software tasks.", + "translations": { + "zh-Hans": { + "description": "GPT-5.1-Codex-Max 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-5.1-Codex-Max ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-5.1-Codex-Max es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-5.1-Codex-Max est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-5.1-Codex-Max adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-5.1-Codex-Max は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-5.1-Codex-Max은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-5.1-Codex-Max é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-5.1-Codex-Max — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-5.1-Codex-Max, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-5.1-Codex-Max 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-max", + "title": "GPT-5.1-Codex-Max official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-max", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 10, + "cacheRead": 0.125, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-11-19", + "lifecycle": "deprecated", + "knowledgeCutoff": "2024-09-30", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-5-1-codex-mini.json b/manifests/models/gpt-5-1-codex-mini.json new file mode 100644 index 00000000..4b2c4796 --- /dev/null +++ b/manifests/models/gpt-5-1-codex-mini.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-1-codex-mini", + "name": "GPT-5.1-Codex mini", + "description": "Smaller and more cost-effective GPT-5.1-Codex variant for agentic coding workloads.", + "translations": { + "zh-Hans": { + "description": "GPT-5.1-Codex mini 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-5.1-Codex mini ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-5.1-Codex mini es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-5.1-Codex mini est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-5.1-Codex mini adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-5.1-Codex mini は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-5.1-Codex mini은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-5.1-Codex mini é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-5.1-Codex mini — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-5.1-Codex mini, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-5.1-Codex mini 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-mini", + "title": "GPT-5.1-Codex mini official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-mini", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.25, + "output": 2, + "cacheRead": 0.025, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-11-13", + "lifecycle": "deprecated", + "knowledgeCutoff": "2024-09-30", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-5-1-codex.json b/manifests/models/gpt-5-1-codex.json index 58ea1622..2c3de451 100644 --- a/manifests/models/gpt-5-1-codex.json +++ b/manifests/models/gpt-5-1-codex.json @@ -46,9 +46,29 @@ "contextWindow": 400000, "maxOutput": 128000, "tokenPricing": { - "input": 1.25, - "output": 10, - "cache": 0.125 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 10, + "cacheRead": 0.125, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-11-13", "lifecycle": "maintained", diff --git a/manifests/models/gpt-5-1.json b/manifests/models/gpt-5-1.json index 77676bc8..d69cb0c6 100644 --- a/manifests/models/gpt-5-1.json +++ b/manifests/models/gpt-5-1.json @@ -46,9 +46,29 @@ "contextWindow": 400000, "maxOutput": 128000, "tokenPricing": { - "input": 1.25, - "output": 10, - "cache": 0.125 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 10, + "cacheRead": 0.125, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-11-13", "lifecycle": "maintained", diff --git a/manifests/models/gpt-5-2-codex.json b/manifests/models/gpt-5-2-codex.json new file mode 100644 index 00000000..f1a3123a --- /dev/null +++ b/manifests/models/gpt-5-2-codex.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-2-codex", + "name": "GPT-5.2-Codex", + "description": "GPT-5.2 variant optimized for long-horizon agentic coding, code review, and software engineering workflows.", + "translations": { + "zh-Hans": { + "description": "GPT-5.2-Codex 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-5.2-Codex ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-5.2-Codex es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-5.2-Codex est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-5.2-Codex adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-5.2-Codex は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-5.2-Codex은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-5.2-Codex é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-5.2-Codex — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-5.2-Codex, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-5.2-Codex 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.2-codex", + "title": "GPT-5.2-Codex official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.2-codex", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.75, + "output": 14, + "cacheRead": 0.175, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-12-18", + "lifecycle": "deprecated", + "knowledgeCutoff": "2025-08-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-5-2-pro.json b/manifests/models/gpt-5-2-pro.json new file mode 100644 index 00000000..5e97ceb0 --- /dev/null +++ b/manifests/models/gpt-5-2-pro.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-2-pro", + "name": "GPT-5.2 Pro", + "description": "High-compute GPT-5.2 variant for complex professional reasoning and software engineering work.", + "translations": { + "zh-Hans": { + "description": "GPT-5.2 Pro 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-5.2 Pro ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-5.2 Pro es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-5.2 Pro est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-5.2 Pro adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-5.2 Pro は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-5.2 Pro은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-5.2 Pro é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-5.2 Pro — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-5.2 Pro, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-5.2 Pro 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.2-pro", + "title": "GPT-5.2 Pro official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.2-pro", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 21, + "output": 168, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-12-11", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-08-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-5-2.json b/manifests/models/gpt-5-2.json index d9c288fc..678c1483 100644 --- a/manifests/models/gpt-5-2.json +++ b/manifests/models/gpt-5-2.json @@ -71,9 +71,29 @@ "contextWindow": 400000, "maxOutput": 128000, "tokenPricing": { - "input": 1.75, - "output": 14, - "cache": 0.175 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.75, + "output": 14, + "cacheRead": 0.175, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-12-11", "lifecycle": "maintained", diff --git a/manifests/models/gpt-5-3-codex.json b/manifests/models/gpt-5-3-codex.json new file mode 100644 index 00000000..7d093f17 --- /dev/null +++ b/manifests/models/gpt-5-3-codex.json @@ -0,0 +1,113 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-3-codex", + "name": "GPT-5.3-Codex", + "description": "OpenAI's agentic coding model for long-running software engineering, research, tool use, and complex computer-based work.", + "translations": { + "de": { + "description": "OpenAIs agentisches Coding-Modell für langlaufende Softwareentwicklung, Recherche, Werkzeugnutzung und komplexe Computerarbeit." + }, + "es": { + "description": "El modelo de programación agéntica de OpenAI para ingeniería de software prolongada, investigación, uso de herramientas y trabajo informático complejo." + }, + "fr": { + "description": "Le modèle de codage agentique d’OpenAI pour l’ingénierie logicielle de longue durée, la recherche, les outils et les tâches informatiques complexes." + }, + "id": { + "description": "Model coding agentik OpenAI untuk rekayasa perangkat lunak jangka panjang, riset, penggunaan alat, dan pekerjaan komputer yang kompleks." + }, + "ja": { + "description": "長時間のソフトウェア開発、調査、ツール利用、複雑なコンピューター作業に対応するOpenAIのエージェント型コーディングモデル。" + }, + "ko": { + "description": "장시간 소프트웨어 엔지니어링, 연구, 도구 사용 및 복잡한 컴퓨터 작업을 위한 OpenAI의 에이전트 코딩 모델입니다." + }, + "pt": { + "description": "O modelo de programação agêntica da OpenAI para engenharia de software prolongada, pesquisa, uso de ferramentas e trabalho complexo no computador." + }, + "ru": { + "description": "Агентная модель OpenAI для длительной разработки ПО, исследований, использования инструментов и сложной работы за компьютером." + }, + "tr": { + "description": "OpenAI'ın uzun süreli yazılım mühendisliği, araştırma, araç kullanımı ve karmaşık bilgisayar işleri için aracı kodlama modeli." + }, + "zh-Hans": { + "description": "OpenAI 面向长时间软件工程、研究、工具使用和复杂计算机工作的智能体编码模型。" + }, + "zh-Hant": { + "description": "OpenAI 面向長時間軟體工程、研究、工具使用和複雜電腦工作的智慧體編碼模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.3-codex", + "title": "GPT-5.3-Codex model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://openai.com/index/introducing-gpt-5-3-codex/", + "title": "Introducing GPT-5.3-Codex", + "fields": ["name", "description", "releaseDate", "lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.3-codex", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.75, + "output": 14, + "cacheRead": 0.175, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-02-05", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-08-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/gpt-5-4-mini.json b/manifests/models/gpt-5-4-mini.json new file mode 100644 index 00000000..088755f6 --- /dev/null +++ b/manifests/models/gpt-5-4-mini.json @@ -0,0 +1,113 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-4-mini", + "name": "GPT-5.4 mini", + "description": "OpenAI's fast and efficient GPT-5.4 model for coding, computer use, multimodal understanding, tool use, and subagent workloads.", + "translations": { + "de": { + "description": "OpenAIs schnelles und effizientes GPT-5.4-Modell für Programmierung, Computernutzung, multimodales Verständnis, Werkzeuge und Subagenten." + }, + "es": { + "description": "El modelo GPT-5.4 rápido y eficiente de OpenAI para programación, uso de computadoras, comprensión multimodal, herramientas y subagentes." + }, + "fr": { + "description": "Le modèle GPT-5.4 rapide et efficace d’OpenAI pour le codage, l’ordinateur, la compréhension multimodale, les outils et les sous-agents." + }, + "id": { + "description": "Model GPT-5.4 OpenAI yang cepat dan efisien untuk coding, penggunaan komputer, pemahaman multimodal, penggunaan alat, dan beban kerja subagen." + }, + "ja": { + "description": "コーディング、コンピューター操作、マルチモーダル理解、ツール利用、サブエージェント処理向けの高速で効率的なOpenAI GPT-5.4モデル。" + }, + "ko": { + "description": "코딩, 컴퓨터 사용, 멀티모달 이해, 도구 사용 및 하위 에이전트 워크로드를 위한 빠르고 효율적인 OpenAI GPT-5.4 모델입니다." + }, + "pt": { + "description": "O modelo GPT-5.4 rápido e eficiente da OpenAI para programação, uso de computadores, compreensão multimodal, ferramentas e subagentes." + }, + "ru": { + "description": "Быстрая и эффективная модель OpenAI GPT-5.4 для программирования, управления компьютером, мультимодального понимания, инструментов и субагентов." + }, + "tr": { + "description": "OpenAI'ın kodlama, bilgisayar kullanımı, çok modlu anlama, araç kullanımı ve alt aracı iş yükleri için hızlı ve verimli GPT-5.4 modeli." + }, + "zh-Hans": { + "description": "OpenAI 面向编码、计算机使用、多模态理解、工具使用和子智能体工作负载的快速高效 GPT-5.4 模型。" + }, + "zh-Hant": { + "description": "OpenAI 面向編碼、電腦使用、多模態理解、工具使用和子智慧體工作負載的快速高效 GPT-5.4 模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.4-mini", + "title": "GPT-5.4 mini model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/", + "title": "Introducing GPT-5.4 mini and nano", + "fields": ["name", "description", "releaseDate", "lifecycle", "benchmarks"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.4-mini", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.75, + "output": 4.5, + "cacheRead": 0.075, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-17", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-08-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": 0.6, + "mmmu": null, + "mmmuPro": 76.6, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/gpt-5-4-nano.json b/manifests/models/gpt-5-4-nano.json new file mode 100644 index 00000000..6e2e05c1 --- /dev/null +++ b/manifests/models/gpt-5-4-nano.json @@ -0,0 +1,113 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-4-nano", + "name": "GPT-5.4 nano", + "description": "OpenAI's smallest GPT-5.4 model for high-volume classification, extraction, ranking, multimodal tasks, and simpler coding subagents.", + "translations": { + "de": { + "description": "OpenAIs kleinstes GPT-5.4-Modell für Klassifikation, Extraktion, Ranking, multimodale Aufgaben und einfachere Coding-Subagenten mit hohem Volumen." + }, + "es": { + "description": "El modelo GPT-5.4 más pequeño de OpenAI para clasificación, extracción, ranking, tareas multimodales y subagentes de programación sencillos a gran escala." + }, + "fr": { + "description": "Le plus petit modèle GPT-5.4 d’OpenAI pour la classification, l’extraction, le classement, le multimodal et les sous-agents de codage simples à grand volume." + }, + "id": { + "description": "Model GPT-5.4 terkecil OpenAI untuk klasifikasi, ekstraksi, peringkat, tugas multimodal, dan subagen coding sederhana bervolume tinggi." + }, + "ja": { + "description": "大量の分類、抽出、ランキング、マルチモーダル処理、より単純なコーディングサブエージェント向けのOpenAI最小GPT-5.4モデル。" + }, + "ko": { + "description": "대규모 분류, 추출, 순위 지정, 멀티모달 작업 및 단순한 코딩 하위 에이전트를 위한 OpenAI의 가장 작은 GPT-5.4 모델입니다." + }, + "pt": { + "description": "O menor modelo GPT-5.4 da OpenAI para classificação, extração, ranking, tarefas multimodais e subagentes de programação simples em grande volume." + }, + "ru": { + "description": "Самая компактная модель OpenAI GPT-5.4 для массовой классификации, извлечения, ранжирования, мультимодальных задач и простых субагентов." + }, + "tr": { + "description": "OpenAI'ın yüksek hacimli sınıflandırma, çıkarma, sıralama, çok modlu görevler ve daha basit kodlama alt aracıları için en küçük GPT-5.4 modeli." + }, + "zh-Hans": { + "description": "OpenAI 最小的 GPT-5.4 模型,面向高吞吐分类、提取、排序、多模态任务和较简单的编码子智能体。" + }, + "zh-Hant": { + "description": "OpenAI 最小的 GPT-5.4 模型,面向高吞吐分類、擷取、排序、多模態任務和較簡單的編碼子智慧體。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.4-nano", + "title": "GPT-5.4 nano model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/", + "title": "Introducing GPT-5.4 mini and nano", + "fields": ["name", "description", "releaseDate", "lifecycle", "benchmarks"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.4-nano", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.2, + "output": 1.25, + "cacheRead": 0.02, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-17", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-08-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": 0.463, + "mmmu": null, + "mmmuPro": 66.1, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/gpt-5-4-pro.json b/manifests/models/gpt-5-4-pro.json new file mode 100644 index 00000000..3df347d8 --- /dev/null +++ b/manifests/models/gpt-5-4-pro.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-4-pro", + "name": "GPT-5.4 Pro", + "description": "OpenAI's higher-compute GPT-5.4 variant for difficult coding, reasoning, agentic, and professional tasks requiring more precise answers.", + "translations": { + "de": { + "description": "OpenAIs rechenintensivere GPT-5.4-Variante für schwierige Coding-, Reasoning-, Agenten- und professionelle Aufgaben mit präziseren Antworten." + }, + "es": { + "description": "La variante GPT-5.4 de OpenAI con más cómputo para tareas difíciles de código, razonamiento, agentes y trabajo profesional." + }, + "fr": { + "description": "La variante GPT-5.4 d’OpenAI à calcul renforcé pour le codage, le raisonnement, les agents et les tâches professionnelles difficiles." + }, + "id": { + "description": "Varian GPT-5.4 OpenAI dengan komputasi lebih tinggi untuk tugas coding, penalaran, agen, dan profesional yang sulit." + }, + "ja": { + "description": "難しいコーディング、推論、エージェント、専門業務でより正確な回答を生成するOpenAIの高計算量GPT-5.4モデル。" + }, + "ko": { + "description": "어려운 코딩, 추론, 에이전트 및 전문 작업에서 더 정밀한 답변을 제공하는 OpenAI의 고연산 GPT-5.4 모델입니다." + }, + "pt": { + "description": "A variante GPT-5.4 da OpenAI com mais computação para tarefas difíceis de código, raciocínio, agentes e trabalho profissional." + }, + "ru": { + "description": "Версия GPT-5.4 от OpenAI с повышенными вычислениями для сложного программирования, рассуждений, агентов и профессиональных задач." + }, + "tr": { + "description": "OpenAI'ın zorlu kodlama, akıl yürütme, aracı ve profesyonel görevler için daha yüksek işlem gücüne sahip GPT-5.4 sürümü." + }, + "zh-Hans": { + "description": "OpenAI 的高算力 GPT-5.4 变体,面向需要更精确回答的高难度编码、推理、智能体和专业任务。" + }, + "zh-Hant": { + "description": "OpenAI 的高算力 GPT-5.4 變體,面向需要更精確回答的高難度編碼、推理、智慧體和專業任務。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.4-pro", + "title": "GPT-5.4 Pro model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities", + "releaseDate" + ] + }, + { + "url": "https://openai.com/index/introducing-gpt-5-4/", + "title": "Introducing GPT-5.4", + "fields": ["name", "description", "releaseDate", "lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.4-pro", + "vendor": "OpenAI", + "size": null, + "contextWindow": 1050000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 30, + "output": 180, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-05", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-08-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/gpt-5-4.json b/manifests/models/gpt-5-4.json new file mode 100644 index 00000000..a9679528 --- /dev/null +++ b/manifests/models/gpt-5-4.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-4", + "name": "GPT-5.4", + "description": "OpenAI's frontier model for complex professional work, including coding, tool use, computer operation, and long-context workflows.", + "translations": { + "de": { + "description": "OpenAIs Frontier-Modell für komplexe professionelle Arbeit, einschließlich Programmierung, Werkzeugnutzung, Computerbedienung und Langkontext-Abläufen." + }, + "es": { + "description": "El modelo de frontera de OpenAI para trabajo profesional complejo, incluida programación, uso de herramientas, manejo de computadoras y contexto largo." + }, + "fr": { + "description": "Le modèle de pointe d’OpenAI pour les tâches professionnelles complexes, notamment le codage, les outils, l’utilisation d’ordinateurs et le contexte long." + }, + "id": { + "description": "Model frontier OpenAI untuk pekerjaan profesional kompleks, termasuk coding, penggunaan alat, pengoperasian komputer, dan alur konteks panjang." + }, + "ja": { + "description": "コーディング、ツール利用、コンピューター操作、長いコンテキストのワークフローなど、複雑な専門業務向けのOpenAIフロンティアモデル。" + }, + "ko": { + "description": "코딩, 도구 사용, 컴퓨터 조작 및 긴 컨텍스트 워크플로를 포함한 복잡한 전문 업무용 OpenAI 프런티어 모델입니다." + }, + "pt": { + "description": "O modelo de fronteira da OpenAI para trabalho profissional complexo, incluindo programação, uso de ferramentas, operação de computadores e contexto longo." + }, + "ru": { + "description": "Передовая модель OpenAI для сложной профессиональной работы, включая программирование, инструменты, управление компьютером и длинный контекст." + }, + "tr": { + "description": "OpenAI'ın kodlama, araç kullanımı, bilgisayar işletimi ve uzun bağlamlı iş akışları dahil karmaşık profesyonel işler için öncü modeli." + }, + "zh-Hans": { + "description": "OpenAI 面向复杂专业工作的前沿模型,涵盖编码、工具使用、计算机操作和长上下文工作流。" + }, + "zh-Hant": { + "description": "OpenAI 面向複雜專業工作的前沿模型,涵蓋編碼、工具使用、電腦操作和長上下文工作流程。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.4", + "title": "GPT-5.4 model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities", + "releaseDate" + ] + }, + { + "url": "https://openai.com/index/introducing-gpt-5-4/", + "title": "Introducing GPT-5.4", + "fields": ["name", "description", "releaseDate", "lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.4", + "vendor": "OpenAI", + "size": null, + "contextWindow": 1050000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2.5, + "output": 15, + "cacheRead": 0.25, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-05", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-08-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/gpt-5-5-pro.json b/manifests/models/gpt-5-5-pro.json new file mode 100644 index 00000000..72eba766 --- /dev/null +++ b/manifests/models/gpt-5-5-pro.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-5-pro", + "name": "GPT-5.5 Pro", + "description": "OpenAI's higher-compute GPT-5.5 variant for difficult coding, reasoning, agentic, and professional tasks requiring more precise answers.", + "translations": { + "de": { + "description": "OpenAIs rechenintensivere GPT-5.5-Variante für schwierige Coding-, Reasoning-, Agenten- und professionelle Aufgaben mit präziseren Antworten." + }, + "es": { + "description": "La variante GPT-5.5 de OpenAI con más cómputo para tareas difíciles de código, razonamiento, agentes y trabajo profesional." + }, + "fr": { + "description": "La variante GPT-5.5 d’OpenAI à calcul renforcé pour le codage, le raisonnement, les agents et les tâches professionnelles difficiles." + }, + "id": { + "description": "Varian GPT-5.5 OpenAI dengan komputasi lebih tinggi untuk tugas coding, penalaran, agen, dan profesional yang sulit." + }, + "ja": { + "description": "難しいコーディング、推論、エージェント、専門業務でより正確な回答を生成するOpenAIの高計算量GPT-5.5モデル。" + }, + "ko": { + "description": "어려운 코딩, 추론, 에이전트 및 전문 작업에서 더 정밀한 답변을 제공하는 OpenAI의 고연산 GPT-5.5 모델입니다." + }, + "pt": { + "description": "A variante GPT-5.5 da OpenAI com mais computação para tarefas difíceis de código, raciocínio, agentes e trabalho profissional." + }, + "ru": { + "description": "Версия GPT-5.5 от OpenAI с повышенными вычислениями для сложного программирования, рассуждений, агентов и профессиональных задач." + }, + "tr": { + "description": "OpenAI'ın zorlu kodlama, akıl yürütme, aracı ve profesyonel görevler için daha yüksek işlem gücüne sahip GPT-5.5 sürümü." + }, + "zh-Hans": { + "description": "OpenAI 的高算力 GPT-5.5 变体,面向需要更精确回答的高难度编码、推理、智能体和专业任务。" + }, + "zh-Hant": { + "description": "OpenAI 的高算力 GPT-5.5 變體,面向需要更精確回答的高難度編碼、推理、智慧體和專業任務。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.5-pro", + "title": "GPT-5.5 Pro model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities", + "releaseDate" + ] + }, + { + "url": "https://openai.com/index/introducing-gpt-5-5/", + "title": "Introducing GPT-5.5", + "fields": ["name", "description", "releaseDate", "lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.5-pro", + "vendor": "OpenAI", + "size": null, + "contextWindow": 1050000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 30, + "output": 180, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-23", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-12-01", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/gpt-5-5.json b/manifests/models/gpt-5-5.json new file mode 100644 index 00000000..9d418074 --- /dev/null +++ b/manifests/models/gpt-5-5.json @@ -0,0 +1,114 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-5", + "name": "GPT-5.5", + "description": "OpenAI's frontier model for agentic coding, computer use, knowledge work, scientific research, and complex multi-tool tasks.", + "translations": { + "de": { + "description": "OpenAIs Frontier-Modell für agentische Programmierung, Computernutzung, Wissensarbeit, wissenschaftliche Forschung und komplexe Multi-Tool-Aufgaben." + }, + "es": { + "description": "El modelo de frontera de OpenAI para programación agéntica, uso de computadoras, trabajo del conocimiento, investigación científica y tareas multiherramienta." + }, + "fr": { + "description": "Le modèle de pointe d’OpenAI pour le codage agentique, l’utilisation d’ordinateurs, le travail intellectuel, la recherche et les tâches multi-outils." + }, + "id": { + "description": "Model frontier OpenAI untuk coding agentik, penggunaan komputer, pekerjaan pengetahuan, riset ilmiah, dan tugas multi-alat yang kompleks." + }, + "ja": { + "description": "エージェント型コーディング、コンピューター操作、知識労働、科学研究、複雑なマルチツール作業向けのOpenAIフロンティアモデル。" + }, + "ko": { + "description": "에이전트 코딩, 컴퓨터 사용, 지식 업무, 과학 연구 및 복잡한 다중 도구 작업을 위한 OpenAI 프런티어 모델입니다." + }, + "pt": { + "description": "O modelo de fronteira da OpenAI para programação agêntica, uso de computadores, trabalho de conhecimento, pesquisa científica e tarefas multiferramenta." + }, + "ru": { + "description": "Передовая модель OpenAI для агентного программирования, управления компьютером, интеллектуальной работы, исследований и сложных задач с инструментами." + }, + "tr": { + "description": "OpenAI'ın aracı kodlama, bilgisayar kullanımı, bilgi çalışmaları, bilimsel araştırma ve karmaşık çok araçlı görevler için öncü modeli." + }, + "zh-Hans": { + "description": "OpenAI 面向智能体编码、计算机使用、知识工作、科学研究和复杂多工具任务的前沿模型。" + }, + "zh-Hant": { + "description": "OpenAI 面向智慧體編碼、電腦使用、知識工作、科學研究和複雜多工具任務的前沿模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5.5", + "title": "GPT-5.5 model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "maxOutput", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities", + "releaseDate" + ] + }, + { + "url": "https://openai.com/index/introducing-gpt-5-5/", + "title": "Introducing GPT-5.5", + "fields": ["name", "description", "releaseDate", "lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5.5", + "vendor": "OpenAI", + "size": null, + "contextWindow": 1050000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 5, + "output": 30, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-23", + "lifecycle": "maintained", + "knowledgeCutoff": "2025-12-01", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/gpt-5-6-luna.json b/manifests/models/gpt-5-6-luna.json index 50b89250..6decb8f7 100644 --- a/manifests/models/gpt-5-6-luna.json +++ b/manifests/models/gpt-5-6-luna.json @@ -70,9 +70,29 @@ "contextWindow": 1050000, "maxOutput": 128000, "tokenPricing": { - "input": 1, - "output": 6, - "cache": 0.1 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1, + "output": 6, + "cacheRead": 0.1, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-07-09", "lifecycle": "latest", diff --git a/manifests/models/gpt-5-6-sol.json b/manifests/models/gpt-5-6-sol.json index 570d1907..673298b7 100644 --- a/manifests/models/gpt-5-6-sol.json +++ b/manifests/models/gpt-5-6-sol.json @@ -70,9 +70,29 @@ "contextWindow": 1050000, "maxOutput": 128000, "tokenPricing": { - "input": 5, - "output": 30, - "cache": 0.5 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 5, + "output": 30, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-07-09", "lifecycle": "latest", diff --git a/manifests/models/gpt-5-6-terra.json b/manifests/models/gpt-5-6-terra.json index eada0700..fb34aea9 100644 --- a/manifests/models/gpt-5-6-terra.json +++ b/manifests/models/gpt-5-6-terra.json @@ -70,9 +70,29 @@ "contextWindow": 1050000, "maxOutput": 128000, "tokenPricing": { - "input": 2.5, - "output": 15, - "cache": 0.25 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2.5, + "output": 15, + "cacheRead": 0.25, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2026-07-09", "lifecycle": "latest", diff --git a/manifests/models/gpt-5-codex.json b/manifests/models/gpt-5-codex.json index f80ef440..abfe6c15 100644 --- a/manifests/models/gpt-5-codex.json +++ b/manifests/models/gpt-5-codex.json @@ -46,9 +46,29 @@ "contextWindow": 400000, "maxOutput": 128000, "tokenPricing": { - "input": 1.25, - "output": 10, - "cache": 0.125 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 10, + "cacheRead": 0.125, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-09-15", "lifecycle": "maintained", diff --git a/manifests/models/gpt-5-mini.json b/manifests/models/gpt-5-mini.json new file mode 100644 index 00000000..4b23d966 --- /dev/null +++ b/manifests/models/gpt-5-mini.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-mini", + "name": "GPT-5 mini", + "description": "Cost-efficient GPT-5 variant for precise, well-defined coding and high-volume agent tasks.", + "translations": { + "zh-Hans": { + "description": "GPT-5 mini 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-5 mini ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-5 mini es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-5 mini est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-5 mini adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-5 mini は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-5 mini은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-5 mini é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-5 mini — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-5 mini, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-5 mini 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5-mini", + "title": "GPT-5 mini official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5-mini", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.25, + "output": 2, + "cacheRead": 0.025, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-08-07", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-05-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-5-nano.json b/manifests/models/gpt-5-nano.json new file mode 100644 index 00000000..cc4369ff --- /dev/null +++ b/manifests/models/gpt-5-nano.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-nano", + "name": "GPT-5 nano", + "description": "Smallest GPT-5 variant for low-latency coding utilities, classification, extraction, and automation.", + "translations": { + "zh-Hans": { + "description": "GPT-5 nano 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-5 nano ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-5 nano es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-5 nano est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-5 nano adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-5 nano は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-5 nano은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-5 nano é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-5 nano — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-5 nano, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-5 nano 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5-nano", + "title": "GPT-5 nano official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5-nano", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 128000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.05, + "output": 0.4, + "cacheRead": 0.005, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-08-07", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-05-31", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-5-pro.json b/manifests/models/gpt-5-pro.json new file mode 100644 index 00000000..31c2477a --- /dev/null +++ b/manifests/models/gpt-5-pro.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "gpt-5-pro", + "name": "GPT-5 Pro", + "description": "High-compute GPT-5 variant for difficult professional reasoning and software engineering work.", + "translations": { + "zh-Hans": { + "description": "GPT-5 Pro 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "GPT-5 Pro ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "GPT-5 Pro es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "GPT-5 Pro est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "GPT-5 Pro adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "GPT-5 Pro は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "GPT-5 Pro은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "GPT-5 Pro é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "GPT-5 Pro — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "GPT-5 Pro, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "GPT-5 Pro 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/gpt-5-pro", + "title": "GPT-5 Pro official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/gpt-5-pro", + "vendor": "OpenAI", + "size": null, + "contextWindow": 400000, + "maxOutput": 272000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 15, + "output": 120, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-10-06", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-09-30", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/gpt-5.json b/manifests/models/gpt-5.json index eba62690..dbccc569 100644 --- a/manifests/models/gpt-5.json +++ b/manifests/models/gpt-5.json @@ -46,9 +46,29 @@ "contextWindow": 400000, "maxOutput": 128000, "tokenPricing": { - "input": 1.25, - "output": 10, - "cache": 0.125 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 10, + "cacheRead": 0.125, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-08-07", "lifecycle": "maintained", diff --git a/manifests/models/grok-4-1-fast.json b/manifests/models/grok-4-1-fast.json new file mode 100644 index 00000000..adb750de --- /dev/null +++ b/manifests/models/grok-4-1-fast.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "grok-4-1-fast", + "name": "Grok 4.1 Fast", + "description": "Tool-calling Grok model for production agents, code execution, search, and long-context workflows.", + "translations": { + "zh-Hans": { + "description": "Grok 4.1 Fast 是 xAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Grok 4.1 Fast ist eine eigenständige Modellversion von xAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Grok 4.1 Fast es una versión de modelo independiente de xAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Grok 4.1 Fast est une version de modèle distincte de xAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Grok 4.1 Fast adalah versi model mandiri dari xAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Grok 4.1 Fast は xAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Grok 4.1 Fast은(는) xAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Grok 4.1 Fast é uma versão de modelo independente da xAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Grok 4.1 Fast — самостоятельная версия модели от xAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Grok 4.1 Fast, xAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Grok 4.1 Fast 是 xAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://x.ai/news/grok-4-1-fast", + "title": "Grok 4.1 Fast official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://x.ai", + "docsUrl": "https://x.ai/news/grok-4-1-fast", + "vendor": "xAI", + "size": null, + "contextWindow": 2000000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.2, + "output": 0.5, + "cacheRead": 0.05, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-11-19", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/grok-4-20.json b/manifests/models/grok-4-20.json new file mode 100644 index 00000000..83051760 --- /dev/null +++ b/manifests/models/grok-4-20.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "grok-4-20", + "name": "Grok 4.20", + "description": "High-performance Grok model with one-million-token context, configurable reasoning, and agentic tool calling.", + "translations": { + "zh-Hans": { + "description": "Grok 4.20 是 xAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Grok 4.20 ist eine eigenständige Modellversion von xAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Grok 4.20 es una versión de modelo independiente de xAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Grok 4.20 est une version de modèle distincte de xAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Grok 4.20 adalah versi model mandiri dari xAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Grok 4.20 は xAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Grok 4.20은(는) xAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Grok 4.20 é uma versão de modelo independente da xAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Grok 4.20 — самостоятельная версия модели от xAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Grok 4.20, xAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Grok 4.20 是 xAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.x.ai/developers/models/grok-4.20", + "title": "Grok 4.20 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://x.ai", + "docsUrl": "https://docs.x.ai/developers/models/grok-4.20", + "vendor": "xAI", + "size": null, + "contextWindow": 1000000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 2.5, + "cacheRead": 0.2, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-10", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/grok-4-3.json b/manifests/models/grok-4-3.json new file mode 100644 index 00000000..cfa1048d --- /dev/null +++ b/manifests/models/grok-4-3.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "grok-4-3", + "name": "Grok 4.3", + "description": "Frontier Grok model for coding and enterprise agents with one-million-token context and configurable reasoning effort.", + "translations": { + "zh-Hans": { + "description": "Grok 4.3 是 xAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Grok 4.3 ist eine eigenständige Modellversion von xAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Grok 4.3 es una versión de modelo independiente de xAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Grok 4.3 est une version de modèle distincte de xAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Grok 4.3 adalah versi model mandiri dari xAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Grok 4.3 は xAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Grok 4.3은(는) xAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Grok 4.3 é uma versão de modelo independente da xAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Grok 4.3 — самостоятельная версия модели от xAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Grok 4.3, xAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Grok 4.3 是 xAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.x.ai/developers/models", + "title": "Grok 4.3 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://x.ai", + "docsUrl": "https://docs.x.ai/developers/models", + "vendor": "xAI", + "size": null, + "contextWindow": 1000000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.25, + "output": 2.5, + "cacheRead": 0.2, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-05-15", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/grok-4-5.json b/manifests/models/grok-4-5.json new file mode 100644 index 00000000..f824b641 --- /dev/null +++ b/manifests/models/grok-4-5.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "grok-4-5", + "name": "Grok 4.5", + "description": "SpaceXAI's frontier model for coding, agentic tasks, engineering, knowledge work, configurable reasoning, and tool-driven workflows.", + "translations": { + "de": { + "description": "SpaceXAIs Frontier-Modell für Programmierung, agentische Aufgaben, Ingenieurwesen, Wissensarbeit, konfigurierbares Denken und werkzeuggestützte Abläufe." + }, + "es": { + "description": "El modelo de frontera de SpaceXAI para programación, tareas agénticas, ingeniería, trabajo del conocimiento, razonamiento configurable y flujos con herramientas." + }, + "fr": { + "description": "Le modèle de pointe de SpaceXAI pour le codage, les tâches agentiques, l’ingénierie, le travail intellectuel, le raisonnement configurable et les outils." + }, + "id": { + "description": "Model frontier SpaceXAI untuk coding, tugas agentik, rekayasa, pekerjaan pengetahuan, penalaran yang dapat diatur, dan alur berbasis alat." + }, + "ja": { + "description": "コーディング、エージェントタスク、エンジニアリング、知識労働、設定可能な推論、ツール駆動ワークフロー向けのSpaceXAIフロンティアモデル。" + }, + "ko": { + "description": "코딩, 에이전트 작업, 엔지니어링, 지식 업무, 구성 가능한 추론 및 도구 기반 워크플로를 위한 SpaceXAI 프런티어 모델입니다." + }, + "pt": { + "description": "O modelo de fronteira da SpaceXAI para programação, tarefas agênticas, engenharia, trabalho de conhecimento, raciocínio configurável e fluxos com ferramentas." + }, + "ru": { + "description": "Передовая модель SpaceXAI для программирования, агентных задач, инженерии, интеллектуальной работы, настраиваемых рассуждений и инструментов." + }, + "tr": { + "description": "SpaceXAI'ın kodlama, aracı görevler, mühendislik, bilgi çalışmaları, yapılandırılabilir akıl yürütme ve araç odaklı iş akışları için öncü modeli." + }, + "zh-Hans": { + "description": "SpaceXAI 面向编码、智能体任务、工程、知识工作、可配置推理和工具驱动工作流的前沿模型。" + }, + "zh-Hant": { + "description": "SpaceXAI 面向編碼、智慧體任務、工程、知識工作、可設定推理和工具驅動工作流程的前沿模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.x.ai/developers/models/grok-4.5", + "title": "Grok 4.5 model documentation", + "fields": [ + "docsUrl", + "contextWindow", + "tokenPricing", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://x.ai/news/grok-4-5", + "title": "Introducing Grok 4.5", + "fields": ["name", "description", "lifecycle", "tokenPricing"] + }, + { + "url": "https://docs.x.ai/developers/release-notes", + "title": "SpaceXAI API release notes", + "fields": ["releaseDate"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://x.ai", + "docsUrl": "https://docs.x.ai/developers/models/grok-4.5", + "vendor": "xAI", + "size": null, + "contextWindow": 500000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2, + "output": 6, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-07-08", + "lifecycle": "latest", + "knowledgeCutoff": "2026-02-01", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/grok-4-fast.json b/manifests/models/grok-4-fast.json new file mode 100644 index 00000000..4b4d24af --- /dev/null +++ b/manifests/models/grok-4-fast.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "grok-4-fast", + "name": "Grok 4 Fast", + "description": "Cost-efficient Grok 4 model with a two-million-token context and unified reasoning and non-reasoning modes.", + "translations": { + "zh-Hans": { + "description": "Grok 4 Fast 是 xAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Grok 4 Fast ist eine eigenständige Modellversion von xAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Grok 4 Fast es una versión de modelo independiente de xAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Grok 4 Fast est une version de modèle distincte de xAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Grok 4 Fast adalah versi model mandiri dari xAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Grok 4 Fast は xAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Grok 4 Fast은(는) xAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Grok 4 Fast é uma versão de modelo independente da xAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Grok 4 Fast — самостоятельная версия модели от xAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Grok 4 Fast, xAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Grok 4 Fast 是 xAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://x.ai/news/grok-4-fast", + "title": "Grok 4 Fast official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://x.ai", + "docsUrl": "https://x.ai/news/grok-4-fast", + "vendor": "xAI", + "size": null, + "contextWindow": 2000000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.2, + "output": 0.5, + "cacheRead": 0.05, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-09-19", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/grok-4.json b/manifests/models/grok-4.json new file mode 100644 index 00000000..edb67124 --- /dev/null +++ b/manifests/models/grok-4.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "grok-4", + "name": "Grok 4", + "description": "Frontier reasoning model with native tool use, visual input, real-time search integration, and strong coding performance.", + "translations": { + "zh-Hans": { + "description": "Grok 4 是 xAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Grok 4 ist eine eigenständige Modellversion von xAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Grok 4 es una versión de modelo independiente de xAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Grok 4 est une version de modèle distincte de xAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Grok 4 adalah versi model mandiri dari xAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Grok 4 は xAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Grok 4은(는) xAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Grok 4 é uma versão de modelo independente da xAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Grok 4 — самостоятельная версия модели от xAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Grok 4, xAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Grok 4 是 xAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://x.ai/news/grok-4", + "title": "Grok 4 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://x.ai", + "docsUrl": "https://x.ai/news/grok-4", + "vendor": "xAI", + "size": null, + "contextWindow": 256000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.75, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-07-09", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/grok-build-0-1.json b/manifests/models/grok-build-0-1.json new file mode 100644 index 00000000..877c5aa0 --- /dev/null +++ b/manifests/models/grok-build-0-1.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "grok-build-0-1", + "name": "Grok Build 0.1", + "description": "Dedicated coding model trained for agentic software engineering, web development, and tool-driven workflows.", + "translations": { + "zh-Hans": { + "description": "Grok Build 0.1 是 xAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Grok Build 0.1 ist eine eigenständige Modellversion von xAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Grok Build 0.1 es una versión de modelo independiente de xAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Grok Build 0.1 est une version de modèle distincte de xAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Grok Build 0.1 adalah versi model mandiri dari xAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Grok Build 0.1 は xAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Grok Build 0.1은(는) xAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Grok Build 0.1 é uma versão de modelo independente da xAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Grok Build 0.1 — самостоятельная версия модели от xAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Grok Build 0.1, xAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Grok Build 0.1 是 xAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.x.ai/developers/models/grok-build-0.1", + "title": "Grok Build 0.1 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://x.ai", + "docsUrl": "https://docs.x.ai/developers/models/grok-build-0.1", + "vendor": "xAI", + "size": null, + "contextWindow": 256000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1, + "output": 2, + "cacheRead": 0.2, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-05-19", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/grok-code-fast-1.json b/manifests/models/grok-code-fast-1.json index 4b4bba03..52c2b045 100644 --- a/manifests/models/grok-code-fast-1.json +++ b/manifests/models/grok-code-fast-1.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://docs.x.ai/developers/migration/may-15-retirement", + "title": "xAI May 15 model retirement notice", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", "websiteUrl": "https://x.ai", "docsUrl": "https://docs.x.ai/docs/models/grok-code-fast-1", "vendor": "xAI", @@ -46,12 +56,32 @@ "contextWindow": 256000, "maxOutput": 10000, "tokenPricing": { - "input": 0.2, - "output": 1.5, - "cache": 0.02 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.2, + "output": 1.5, + "cacheRead": 0.02, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-08-28", - "lifecycle": "latest", + "lifecycle": "deprecated", "knowledgeCutoff": null, "inputModalities": ["text"], "outputModalities": ["text"], diff --git a/manifests/models/kat-coder-pro-v1.json b/manifests/models/kat-coder-pro-v1.json index 70b025e8..7f418c69 100644 --- a/manifests/models/kat-coder-pro-v1.json +++ b/manifests/models/kat-coder-pro-v1.json @@ -41,14 +41,34 @@ "verified": false, "websiteUrl": "https://openrouter.ai/kwaipilot", "docsUrl": "https://openrouter.ai/kwaipilot/kat-coder-pro:free", - "vendor": "KwaiKAT", + "vendor": "StreamLake", "size": "Unknown", "contextWindow": 256000, "maxOutput": 128000, "tokenPricing": { - "input": 0, - "output": 0, - "cache": null + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0, + "output": 0, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-11-11", "lifecycle": "latest", @@ -58,7 +78,7 @@ "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], "benchmarks": { "sweBench": null, - "terminalBench": 8.5, + "terminalBench": null, "mmmu": null, "mmmuPro": null, "webDevArena": null, diff --git a/manifests/models/kimi-dev-72b.json b/manifests/models/kimi-dev-72b.json new file mode 100644 index 00000000..f4c44cbf --- /dev/null +++ b/manifests/models/kimi-dev-72b.json @@ -0,0 +1,98 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "kimi-dev-72b", + "name": "Kimi-Dev-72B", + "description": "Open-weight 72B model trained specifically for software engineering and autonomous code-repair tasks.", + "translations": { + "zh-Hans": { + "description": "Kimi-Dev-72B 是 Moonshot 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Kimi-Dev-72B ist eine eigenständige Modellversion von Moonshot mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Kimi-Dev-72B es una versión de modelo independiente de Moonshot con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Kimi-Dev-72B est une version de modèle distincte de Moonshot, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Kimi-Dev-72B adalah versi model mandiri dari Moonshot dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Kimi-Dev-72B は Moonshot が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Kimi-Dev-72B은(는) Moonshot가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Kimi-Dev-72B é uma versão de modelo independente da Moonshot, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Kimi-Dev-72B — самостоятельная версия модели от Moonshot с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Kimi-Dev-72B, Moonshot tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Kimi-Dev-72B 是 Moonshot 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://huggingface.co/moonshotai/Kimi-Dev-72B", + "title": "Kimi-Dev-72B official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.moonshot.ai", + "docsUrl": "https://huggingface.co/moonshotai/Kimi-Dev-72B", + "vendor": "Moonshot", + "size": "72B", + "contextWindow": 131072, + "maxOutput": null, + "tokenPricing": { + "status": "not-applicable", + "reason": "open-weights-only", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-06-17", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/moonshotai/Kimi-Dev-72B", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/kimi-k2-0905.json b/manifests/models/kimi-k2-0905.json index c26ca3b2..9bb97b4d 100644 --- a/manifests/models/kimi-k2-0905.json +++ b/manifests/models/kimi-k2-0905.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://platform.kimi.ai/docs/models", + "title": "Kimi API model availability and K2 retirement notice", + "fields": ["lifecycle", "tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "medium", "websiteUrl": "https://moonshot.ai", "docsUrl": "https://huggingface.co/moonshotai/Kimi-K2-Instruct-0905", "vendor": "Moonshot", @@ -46,12 +56,32 @@ "contextWindow": 262144, "maxOutput": 262144, "tokenPricing": { - "input": 0.6, - "output": 2.5, - "cache": 0.15 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": "2026-05-25", + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.6, + "output": 2.5, + "cacheRead": 0.15, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-09-05", - "lifecycle": "latest", + "lifecycle": "deprecated", "knowledgeCutoff": "2025-09", "inputModalities": ["text"], "outputModalities": ["text"], diff --git a/manifests/models/kimi-k2-5.json b/manifests/models/kimi-k2-5.json new file mode 100644 index 00000000..9be6bdf4 --- /dev/null +++ b/manifests/models/kimi-k2-5.json @@ -0,0 +1,151 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "kimi-k2-5", + "name": "Kimi K2.5", + "description": "Moonshot AI's open-weight multimodal agentic model for visual coding, reasoning, tool use, and coordinated long-horizon workflows.", + "translations": { + "de": { + "description": "Moonshot AIs multimodales Open-Weight-Agentenmodell für visuelles Coding, Reasoning, Werkzeugnutzung und koordinierte Langzeitabläufe." + }, + "es": { + "description": "El modelo agéntico multimodal de pesos abiertos de Moonshot AI para código visual, razonamiento, herramientas y flujos coordinados prolongados." + }, + "fr": { + "description": "Le modèle agentique multimodal à poids ouverts de Moonshot AI pour le codage visuel, le raisonnement, les outils et les longs flux coordonnés." + }, + "id": { + "description": "Model agentik multimodal berbobot terbuka Moonshot AI untuk coding visual, penalaran, penggunaan alat, dan alur jangka panjang terkoordinasi." + }, + "ja": { + "description": "視覚的コーディング、推論、ツール利用、連携した長時間ワークフロー向けのMoonshot AI製オープンウェイト・マルチモーダルエージェントモデル。" + }, + "ko": { + "description": "비주얼 코딩, 추론, 도구 사용 및 조율된 장기 워크플로를 위한 Moonshot AI의 오픈 웨이트 멀티모달 에이전트 모델입니다." + }, + "pt": { + "description": "O modelo agêntico multimodal de pesos abertos da Moonshot AI para código visual, raciocínio, ferramentas e fluxos prolongados coordenados." + }, + "ru": { + "description": "Мультимодальная агентная модель Moonshot AI с открытыми весами для визуального программирования, рассуждений, инструментов и долгих процессов." + }, + "tr": { + "description": "Moonshot AI'ın görsel kodlama, akıl yürütme, araç kullanımı ve koordineli uzun süreli iş akışları için açık ağırlıklı çok modlu aracı modeli." + }, + "zh-Hans": { + "description": "Moonshot AI 面向视觉编码、推理、工具调用和协同长周期工作流的开放权重多模态智能体模型。" + }, + "zh-Hant": { + "description": "Moonshot AI 面向視覺編碼、推理、工具呼叫和協同長週期工作流程的開放權重多模態智慧體模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://github.com/MoonshotAI/Kimi-K2.5", + "title": "Kimi K2.5 official repository", + "fields": [ + "name", + "description", + "size", + "contextWindow", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://huggingface.co/moonshotai/Kimi-K2.5", + "title": "Kimi K2.5 official model card", + "fields": ["size", "contextWindow", "platformUrls.huggingface"] + }, + { + "url": "https://platform.kimi.ai/docs/pricing/chat-k25", + "title": "Kimi K2.5 official API pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://www.moonshot.ai/news/kimi-k2-instruct-release", + "title": "Kimi release timeline", + "fields": ["releaseDate", "lifecycle"] + }, + { + "url": "https://github.com/MoonshotAI/Kimi-K2.5", + "title": "Kimi K2.5 official benchmark table — SWE-bench Verified; Moonshot internal agent framework with minimal tools and tailored prompts; non-thinking mode; average of 5 runs; label: Kimi K2.5; observed 2026-07-21", + "fields": ["benchmarks.sweBench"] + }, + { + "url": "https://github.com/MoonshotAI/Kimi-K2.5", + "title": "Kimi K2.5 official benchmark table — Terminal-Bench 2.0; Terminus-2 default framework and JSON parser; non-thinking mode; average of 5 runs; label: Kimi K2.5; observed 2026-07-21", + "fields": ["benchmarks.terminalBench"] + }, + { + "url": "https://github.com/MoonshotAI/Kimi-K2.5", + "title": "Kimi K2.5 official benchmark table — MMMU-Pro; Official protocol preserving prompt order and prepending images; 64K maximum length; average of 3 runs; label: Kimi K2.5; observed 2026-07-21", + "fields": ["benchmarks.mmmuPro"] + }, + { + "url": "https://github.com/MoonshotAI/Kimi-K2.5", + "title": "Kimi K2.5 official benchmark table — SciCode; Moonshot vendor evaluation in the coding benchmark suite; average of 5 runs; label: Kimi K2.5; observed 2026-07-21", + "fields": ["benchmarks.sciCode"] + }, + { + "url": "https://github.com/MoonshotAI/Kimi-K2.5", + "title": "Kimi K2.5 official benchmark table — LiveCodeBench v6; Moonshot vendor evaluation in the coding benchmark suite; average of 5 runs; label: Kimi K2.5; observed 2026-07-21", + "fields": ["benchmarks.liveCodeBench"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.moonshot.ai", + "docsUrl": "https://github.com/MoonshotAI/Kimi-K2.5", + "vendor": "Moonshot", + "size": "1T (32B active)", + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.6, + "output": 3, + "cacheRead": 0.1, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-01-27", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": 76.8, + "terminalBench": 0.508, + "mmmu": null, + "mmmuPro": 78.5, + "webDevArena": null, + "sciCode": 48.7, + "liveCodeBench": 85 + }, + "platformUrls": { + "huggingface": "https://huggingface.co/moonshotai/Kimi-K2.5", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/kimi-k2-6.json b/manifests/models/kimi-k2-6.json new file mode 100644 index 00000000..ee01f07c --- /dev/null +++ b/manifests/models/kimi-k2-6.json @@ -0,0 +1,121 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "kimi-k2-6", + "name": "Kimi K2.6", + "description": "Native multimodal agentic model for long-horizon coding, coding-driven design, autonomous execution, and agent swarms.", + "translations": { + "zh-Hans": { + "description": "Kimi K2.6 是 Moonshot 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Kimi K2.6 ist eine eigenständige Modellversion von Moonshot mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Kimi K2.6 es una versión de modelo independiente de Moonshot con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Kimi K2.6 est une version de modèle distincte de Moonshot, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Kimi K2.6 adalah versi model mandiri dari Moonshot dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Kimi K2.6 は Moonshot が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Kimi K2.6은(는) Moonshot가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Kimi K2.6 é uma versão de modelo independente da Moonshot, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Kimi K2.6 — самостоятельная версия модели от Moonshot с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Kimi K2.6, Moonshot tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Kimi K2.6 是 Moonshot 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://huggingface.co/moonshotai/Kimi-K2.6", + "title": "Kimi K2.6 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.kimi.ai/docs/pricing/chat-k26", + "title": "Kimi K2.6 official API pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.moonshot.ai", + "docsUrl": "https://huggingface.co/moonshotai/Kimi-K2.6", + "vendor": "Moonshot", + "size": "1T (32B active)", + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.95, + "output": 4, + "cacheRead": 0.16, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-20", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/moonshotai/Kimi-K2.6", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/kimi-k2-7-code.json b/manifests/models/kimi-k2-7-code.json new file mode 100644 index 00000000..4b9a677d --- /dev/null +++ b/manifests/models/kimi-k2-7-code.json @@ -0,0 +1,123 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "kimi-k2-7-code", + "name": "Kimi K2.7 Code", + "description": "Moonshot AI's open-weight coding agent model for long-horizon software engineering, efficient reasoning, tool use, and visual inputs.", + "translations": { + "de": { + "description": "Moonshot AIs Open-Weight-Coding-Agent für langfristige Softwareentwicklung, effizientes Reasoning, Werkzeugnutzung und visuelle Eingaben." + }, + "es": { + "description": "El agente de código de pesos abiertos de Moonshot AI para ingeniería de software prolongada, razonamiento eficiente, herramientas y entradas visuales." + }, + "fr": { + "description": "L’agent de codage à poids ouverts de Moonshot AI pour l’ingénierie logicielle longue, le raisonnement efficace, les outils et les entrées visuelles." + }, + "id": { + "description": "Model agen coding berbobot terbuka Moonshot AI untuk rekayasa perangkat lunak jangka panjang, penalaran efisien, alat, dan input visual." + }, + "ja": { + "description": "長時間のソフトウェア開発、効率的な推論、ツール利用、視覚入力向けのMoonshot AI製オープンウェイト・コーディングエージェント。" + }, + "ko": { + "description": "장기 소프트웨어 엔지니어링, 효율적인 추론, 도구 사용 및 시각 입력을 위한 Moonshot AI의 오픈 웨이트 코딩 에이전트 모델입니다." + }, + "pt": { + "description": "O agente de código de pesos abertos da Moonshot AI para engenharia de software prolongada, raciocínio eficiente, ferramentas e entradas visuais." + }, + "ru": { + "description": "Агент программирования Moonshot AI с открытыми весами для длительной разработки, эффективных рассуждений, инструментов и визуального ввода." + }, + "tr": { + "description": "Moonshot AI'ın uzun süreli yazılım mühendisliği, verimli akıl yürütme, araç kullanımı ve görsel girdiler için açık ağırlıklı kodlama aracısı modeli." + }, + "zh-Hans": { + "description": "Moonshot AI 面向长周期软件工程、高效推理、工具调用和视觉输入的开放权重编码智能体模型。" + }, + "zh-Hant": { + "description": "Moonshot AI 面向長週期軟體工程、高效推理、工具呼叫和視覺輸入的開放權重編碼智慧體模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.kimi.com/resources/kimi-k2-7-code", + "title": "Kimi K2.7 Code model page", + "fields": [ + "name", + "description", + "size", + "contextWindow", + "tokenPricing", + "inputModalities", + "outputModalities", + "capabilities", + "lifecycle" + ] + }, + { + "url": "https://www.kimi.com/code/docs/en/kimi-code/whats-new.html", + "title": "Kimi Code release notes", + "fields": ["releaseDate", "lifecycle"] + }, + { + "url": "https://huggingface.co/moonshotai/Kimi-K2.7-Code", + "title": "Kimi K2.7 Code official model card", + "fields": ["size", "contextWindow", "platformUrls.huggingface"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.kimi.com", + "docsUrl": "https://www.kimi.com/resources/kimi-k2-7-code", + "vendor": "Moonshot", + "size": "1T (32B active)", + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.95, + "output": 4, + "cacheRead": 0.19, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-06-12", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/moonshotai/Kimi-K2.7-Code", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/kimi-k2-instruct.json b/manifests/models/kimi-k2-instruct.json new file mode 100644 index 00000000..9e3ca0ae --- /dev/null +++ b/manifests/models/kimi-k2-instruct.json @@ -0,0 +1,102 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "kimi-k2-instruct", + "name": "Kimi K2 Instruct", + "description": "Original Kimi K2 instruct release, a one-trillion-parameter MoE model built for agentic coding and tool use.", + "translations": { + "zh-Hans": { + "description": "Kimi K2 Instruct 是 Moonshot 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Kimi K2 Instruct ist eine eigenständige Modellversion von Moonshot mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Kimi K2 Instruct es una versión de modelo independiente de Moonshot con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Kimi K2 Instruct est une version de modèle distincte de Moonshot, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Kimi K2 Instruct adalah versi model mandiri dari Moonshot dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Kimi K2 Instruct は Moonshot が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Kimi K2 Instruct은(는) Moonshot가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Kimi K2 Instruct é uma versão de modelo independente da Moonshot, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Kimi K2 Instruct — самостоятельная версия модели от Moonshot с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Kimi K2 Instruct, Moonshot tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Kimi K2 Instruct 是 Moonshot 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://huggingface.co/moonshotai/Kimi-K2-Instruct", + "title": "Kimi K2 Instruct official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.kimi.ai/docs/models", + "title": "Kimi API model availability and K2 retirement notice", + "fields": ["lifecycle", "tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.moonshot.ai", + "docsUrl": "https://huggingface.co/moonshotai/Kimi-K2-Instruct", + "vendor": "Moonshot", + "size": "1T (32B active)", + "contextWindow": 131072, + "maxOutput": null, + "tokenPricing": { + "status": "unavailable", + "reason": "historical-price-unverified", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-07-11", + "lifecycle": "deprecated", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/moonshotai/Kimi-K2-Instruct", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/kimi-k2-thinking.json b/manifests/models/kimi-k2-thinking.json index 1e12a948..d3d40b49 100644 --- a/manifests/models/kimi-k2-thinking.json +++ b/manifests/models/kimi-k2-thinking.json @@ -39,6 +39,16 @@ } }, "verified": true, + "sources": [ + { + "url": "https://platform.kimi.ai/docs/models", + "title": "Kimi API model availability and K2 retirement notice", + "fields": ["lifecycle", "tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "medium", "websiteUrl": "https://moonshot.ai", "docsUrl": "https://huggingface.co/moonshotai/Kimi-K2-Instruct-Thinking", "vendor": "Moonshot", @@ -46,12 +56,32 @@ "contextWindow": 262144, "maxOutput": 262144, "tokenPricing": { - "input": 0.6, - "output": 2.5, - "cache": 0.15 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": "2026-05-25", + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.6, + "output": 2.5, + "cacheRead": 0.15, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-11-06", - "lifecycle": "latest", + "lifecycle": "deprecated", "knowledgeCutoff": "2025-11", "inputModalities": ["text"], "outputModalities": ["text"], diff --git a/manifests/models/kimi-k3.json b/manifests/models/kimi-k3.json new file mode 100644 index 00000000..a727fb79 --- /dev/null +++ b/manifests/models/kimi-k3.json @@ -0,0 +1,112 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "kimi-k3", + "name": "Kimi K3", + "description": "Moonshot AI's 2.8T-parameter, natively multimodal frontier model with 1M context for long-horizon coding, knowledge work, and deep reasoning.", + "translations": { + "de": { + "description": "Moonshot AIs nativ multimodales Frontier-Modell mit 2,8 Bio. Parametern und 1 Mio. Kontext für langfristige Programmierung, Wissensarbeit und tiefes Denken." + }, + "es": { + "description": "El modelo de frontera multimodal nativo de Moonshot AI, con 2,8T parámetros y contexto de 1M, para programación prolongada, trabajo del conocimiento y razonamiento profundo." + }, + "fr": { + "description": "Le modèle de pointe nativement multimodal de Moonshot AI, avec 2,8 Bn de paramètres et 1 M de contexte, pour le codage long, le savoir et le raisonnement profond." + }, + "id": { + "description": "Model frontier multimodal native Moonshot AI dengan 2,8T parameter dan konteks 1M untuk coding jangka panjang, pekerjaan pengetahuan, dan penalaran mendalam." + }, + "ja": { + "description": "2.8兆パラメータ、ネイティブマルチモーダル、100万コンテキストを備え、長期コーディング、知識労働、深い推論に対応するMoonshot AIのフロンティアモデル。" + }, + "ko": { + "description": "2.8T 매개변수, 네이티브 멀티모달 및 100만 컨텍스트로 장기 코딩, 지식 업무와 심층 추론을 지원하는 Moonshot AI 프런티어 모델입니다." + }, + "pt": { + "description": "O modelo de fronteira multimodal nativo da Moonshot AI, com 2,8T parâmetros e contexto de 1M, para programação prolongada, trabalho de conhecimento e raciocínio profundo." + }, + "ru": { + "description": "Передовая нативно-мультимодальная модель Moonshot AI с 2,8 трлн параметров и контекстом 1 млн для длительного программирования и глубоких рассуждений." + }, + "tr": { + "description": "Moonshot AI'ın 2,8T parametreli, yerel çok modlu ve 1M bağlamlı; uzun süreli kodlama, bilgi çalışmaları ve derin akıl yürütme için öncü modeli." + }, + "zh-Hans": { + "description": "Moonshot AI 的 2.8 万亿参数原生多模态前沿模型,提供 100 万 token 上下文,面向长周期编码、知识工作和深度推理。" + }, + "zh-Hant": { + "description": "Moonshot AI 的 2.8 兆參數原生多模態前沿模型,提供 100 萬 token 上下文,面向長週期編碼、知識工作和深度推理。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.moonshot.ai", + "title": "Moonshot AI Kimi K3 overview", + "fields": [ + "name", + "description", + "size", + "contextWindow", + "releaseDate", + "inputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.kimi.ai/docs/pricing/chat-k3", + "title": "Kimi K3 official API pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "medium", + "websiteUrl": "https://www.moonshot.ai", + "docsUrl": "https://platform.moonshot.ai/docs", + "vendor": "Moonshot", + "size": "2.8T", + "contextWindow": 1000000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 3, + "output": 15, + "cacheRead": 0.3, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-07-16", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/llama-4-maverick.json b/manifests/models/llama-4-maverick.json new file mode 100644 index 00000000..0462822a --- /dev/null +++ b/manifests/models/llama-4-maverick.json @@ -0,0 +1,112 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "llama-4-maverick", + "name": "Llama 4 Maverick", + "description": "Meta's open-weight multimodal MoE for coding, reasoning, multilingual work, and long-context text and image understanding.", + "translations": { + "de": { + "description": "Metas multimodales Open-Weight-MoE für Coding, Reasoning, mehrsprachige Arbeit und langkontextuelles Text- und Bildverständnis." + }, + "es": { + "description": "El MoE multimodal de pesos abiertos de Meta para código, razonamiento, trabajo multilingüe y comprensión de texto e imagen de contexto largo." + }, + "fr": { + "description": "Le MoE multimodal à poids ouverts de Meta pour le codage, le raisonnement, le multilingue et la compréhension de textes et images à long contexte." + }, + "id": { + "description": "MoE multimodal berbobot terbuka Meta untuk coding, penalaran, pekerjaan multibahasa, serta pemahaman teks dan gambar dengan konteks panjang." + }, + "ja": { + "description": "コーディング、推論、多言語作業、長いコンテキストでのテキスト・画像理解向けのMeta製オープンウェイト・マルチモーダルMoE。" + }, + "ko": { + "description": "코딩, 추론, 다국어 작업 및 긴 컨텍스트의 텍스트·이미지 이해를 위한 Meta의 오픈 웨이트 멀티모달 MoE입니다." + }, + "pt": { + "description": "O MoE multimodal de pesos abertos da Meta para código, raciocínio, trabalho multilíngue e compreensão de texto e imagem em contexto longo." + }, + "ru": { + "description": "Мультимодальная MoE-модель Meta с открытыми весами для программирования, рассуждений, разных языков и длинного контекста текста и изображений." + }, + "tr": { + "description": "Meta'nın kodlama, akıl yürütme, çok dilli çalışma ve uzun bağlamlı metin ile görüntü anlama için açık ağırlıklı çok modlu MoE modeli." + }, + "zh-Hans": { + "description": "Meta 面向编码、推理、多语言工作及长上下文文本和图像理解的开放权重多模态 MoE。" + }, + "zh-Hant": { + "description": "Meta 面向編碼、推理、多語言工作及長上下文文字和圖像理解的開放權重多模態 MoE。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://ai.meta.com/blog/llama-4-multimodal-intelligence/", + "title": "Introducing Llama 4", + "fields": [ + "name", + "description", + "releaseDate", + "lifecycle", + "contextWindow", + "inputModalities", + "outputModalities" + ] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct", + "title": "Llama 4 Maverick official model card", + "fields": ["size", "contextWindow", "knowledgeCutoff", "platformUrls.huggingface"] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct", + "title": "Llama 4 Maverick official model card — MMMU; Instruction-tuned model; 0-shot accuracy; label: Llama 4 Maverick; observed 2026-07-21", + "fields": ["benchmarks.mmmu"] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct", + "title": "Llama 4 Maverick official model card — MMMU-Pro; Instruction-tuned model; 0-shot; average of Standard and Vision task scores; label: Llama 4 Maverick; observed 2026-07-21", + "fields": ["benchmarks.mmmuPro"] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct", + "title": "Llama 4 Maverick official model card — LiveCodeBench, 2024-10-01 to 2025-02-01; Instruction-tuned model; 0-shot pass@1; label: Llama 4 Maverick; observed 2026-07-21", + "fields": ["benchmarks.liveCodeBench"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://ai.meta.com", + "docsUrl": "https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct", + "vendor": "Meta", + "size": "400B (17B active)", + "contextWindow": 1000000, + "maxOutput": null, + "tokenPricing": { + "status": "not-applicable", + "reason": "open-weights-only", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-04-05", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-08", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": [], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": 73.4, + "mmmuPro": 59.6, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": 43.4 + }, + "platformUrls": { + "huggingface": "https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/llama-4-scout.json b/manifests/models/llama-4-scout.json new file mode 100644 index 00000000..6870ee4e --- /dev/null +++ b/manifests/models/llama-4-scout.json @@ -0,0 +1,112 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "llama-4-scout", + "name": "Llama 4 Scout", + "description": "Meta's open-weight multimodal MoE with a 10M-token context window for reasoning over large codebases and long documents.", + "translations": { + "de": { + "description": "Metas multimodales Open-Weight-MoE mit 10-Millionen-Token-Kontext für Schlussfolgerungen über große Codebasen und lange Dokumente." + }, + "es": { + "description": "El MoE multimodal de pesos abiertos de Meta con contexto de 10 millones de tokens para razonar sobre grandes bases de código y documentos largos." + }, + "fr": { + "description": "Le MoE multimodal à poids ouverts de Meta, avec 10 millions de jetons de contexte, pour analyser de grands codes et de longs documents." + }, + "id": { + "description": "MoE multimodal berbobot terbuka Meta dengan konteks 10 juta token untuk menalar basis kode besar dan dokumen panjang." + }, + "ja": { + "description": "大規模コードベースや長文書を推論するための1,000万トークンコンテキストを備えたMetaのオープンウェイト・マルチモーダルMoE。" + }, + "ko": { + "description": "대규모 코드베이스와 긴 문서를 추론할 수 있는 1천만 토큰 컨텍스트를 갖춘 Meta의 오픈 웨이트 멀티모달 MoE입니다." + }, + "pt": { + "description": "O MoE multimodal de pesos abertos da Meta com contexto de 10 milhões de tokens para raciocinar sobre grandes bases de código e documentos longos." + }, + "ru": { + "description": "Мультимодальная MoE-модель Meta с открытыми весами и контекстом 10 млн токенов для анализа больших кодовых баз и длинных документов." + }, + "tr": { + "description": "Meta'nın büyük kod tabanları ve uzun belgeler üzerinde akıl yürütmek için 10 milyon belirteç bağlamlı açık ağırlıklı çok modlu MoE modeli." + }, + "zh-Hans": { + "description": "Meta 的开放权重多模态 MoE,提供 1000 万 token 上下文,用于分析大型代码库和长文档。" + }, + "zh-Hant": { + "description": "Meta 的開放權重多模態 MoE,提供 1000 萬 token 上下文,用於分析大型程式碼庫和長文件。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://ai.meta.com/blog/llama-4-multimodal-intelligence/", + "title": "Introducing Llama 4", + "fields": [ + "name", + "description", + "releaseDate", + "lifecycle", + "contextWindow", + "inputModalities", + "outputModalities" + ] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", + "title": "Llama 4 Scout official model card", + "fields": ["size", "contextWindow", "knowledgeCutoff", "platformUrls.huggingface"] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", + "title": "Llama 4 Scout official model card — MMMU; Instruction-tuned model; 0-shot accuracy; label: Llama 4 Scout; observed 2026-07-21", + "fields": ["benchmarks.mmmu"] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", + "title": "Llama 4 Scout official model card — MMMU-Pro; Instruction-tuned model; 0-shot; average of Standard and Vision task scores; label: Llama 4 Scout; observed 2026-07-21", + "fields": ["benchmarks.mmmuPro"] + }, + { + "url": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", + "title": "Llama 4 Scout official model card — LiveCodeBench, 2024-10-01 to 2025-02-01; Instruction-tuned model; 0-shot pass@1; label: Llama 4 Scout; observed 2026-07-21", + "fields": ["benchmarks.liveCodeBench"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://ai.meta.com", + "docsUrl": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", + "vendor": "Meta", + "size": "109B (17B active)", + "contextWindow": 10000000, + "maxOutput": null, + "tokenPricing": { + "status": "not-applicable", + "reason": "open-weights-only", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2025-04-05", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-08", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": [], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": 69.4, + "mmmuPro": 52.2, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": 32.8 + }, + "platformUrls": { + "huggingface": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/minimax-m2-1.json b/manifests/models/minimax-m2-1.json index a6366b2d..51cacdce 100644 --- a/manifests/models/minimax-m2-1.json +++ b/manifests/models/minimax-m2-1.json @@ -46,9 +46,29 @@ "contextWindow": 204800, "maxOutput": 131072, "tokenPricing": { - "input": 0.3, - "output": 1.2, - "cache": 0.03 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 1.2, + "cacheRead": 0.03, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-12-23", "lifecycle": "latest", diff --git a/manifests/models/minimax-m2-5.json b/manifests/models/minimax-m2-5.json new file mode 100644 index 00000000..626ce48e --- /dev/null +++ b/manifests/models/minimax-m2-5.json @@ -0,0 +1,128 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "minimax-m2-5", + "name": "MiniMax M2.5", + "description": "MiniMax's open-weight reasoning model for coding, agentic tool use, search, and end-to-end software development.", + "translations": { + "de": { + "description": "MiniMax' Open-Weight-Reasoning-Modell für Coding, agentische Werkzeugnutzung, Suche und durchgängige Softwareentwicklung." + }, + "es": { + "description": "El modelo de razonamiento de pesos abiertos de MiniMax para código, herramientas agénticas, búsqueda y desarrollo integral de software." + }, + "fr": { + "description": "Le modèle de raisonnement à poids ouverts de MiniMax pour le codage, les outils agentiques, la recherche et le développement logiciel complet." + }, + "id": { + "description": "Model penalaran berbobot terbuka MiniMax untuk coding, penggunaan alat agentik, pencarian, dan pengembangan perangkat lunak menyeluruh." + }, + "ja": { + "description": "コーディング、エージェント型ツール利用、検索、エンドツーエンドのソフトウェア開発向けのMiniMax製オープンウェイト推論モデル。" + }, + "ko": { + "description": "코딩, 에이전트 도구 사용, 검색 및 엔드투엔드 소프트웨어 개발을 위한 MiniMax의 오픈 웨이트 추론 모델입니다." + }, + "pt": { + "description": "O modelo de raciocínio de pesos abertos da MiniMax para código, ferramentas agênticas, busca e desenvolvimento completo de software." + }, + "ru": { + "description": "Модель рассуждений MiniMax с открытыми весами для программирования, агентных инструментов, поиска и полного цикла разработки ПО." + }, + "tr": { + "description": "MiniMax'in kodlama, aracı araç kullanımı, arama ve uçtan uca yazılım geliştirme için açık ağırlıklı akıl yürütme modeli." + }, + "zh-Hans": { + "description": "MiniMax 面向编码、智能体工具调用、搜索和端到端软件开发的开放权重推理模型。" + }, + "zh-Hant": { + "description": "MiniMax 面向編碼、智慧體工具呼叫、搜尋和端到端軟體開發的開放權重推理模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.minimax.io/news/minimax-m25", + "title": "MiniMax M2.5 launch", + "fields": ["name", "description", "releaseDate", "lifecycle", "capabilities"] + }, + { + "url": "https://platform.minimax.io/docs/api-reference/api-overview", + "title": "MiniMax API overview", + "fields": ["docsUrl", "contextWindow", "inputModalities", "outputModalities"] + }, + { + "url": "https://platform.minimax.io/docs/guides/pricing-paygo", + "title": "MiniMax pay-as-you-go pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://huggingface.co/MiniMaxAI/MiniMax-M2.5", + "title": "MiniMax M2.5 official model card", + "fields": ["size", "platformUrls.huggingface"] + }, + { + "url": "https://huggingface.co/MiniMaxAI/MiniMax-M2.5", + "title": "MiniMax M2.5 official model card — SWE-bench Verified; Claude Code scaffold with an overridden prompt; average of 4 runs; label: MiniMax M2.5; observed 2026-07-21", + "fields": ["benchmarks.sweBench"] + }, + { + "url": "https://huggingface.co/MiniMaxAI/MiniMax-M2.5", + "title": "MiniMax M2.5 official model card — SciCode; MiniMax vendor evaluation reported in the official model card; label: MiniMax M2.5; observed 2026-07-21", + "fields": ["benchmarks.sciCode"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.minimax.io", + "docsUrl": "https://platform.minimax.io/docs/api-reference/api-overview", + "vendor": "MiniMax", + "size": "229B", + "contextWindow": 204800, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 1.2, + "cacheRead": 0.03, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-02-12", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": 80.2, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": 44.4, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/MiniMaxAI/MiniMax-M2.5", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/minimax-m2-7.json b/manifests/models/minimax-m2-7.json new file mode 100644 index 00000000..e8ad7875 --- /dev/null +++ b/manifests/models/minimax-m2-7.json @@ -0,0 +1,123 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "minimax-m2-7", + "name": "MiniMax M2.7", + "description": "MiniMax's open-weight agent model for complex software engineering, incident diagnosis, multi-agent teams, skills, and dynamic tool search.", + "translations": { + "de": { + "description": "MiniMax' Open-Weight-Agentenmodell für komplexe Softwareentwicklung, Störungsdiagnose, Multi-Agent-Teams, Skills und dynamische Werkzeugsuche." + }, + "es": { + "description": "El modelo de agente de pesos abiertos de MiniMax para ingeniería compleja, diagnóstico de incidentes, equipos multiagente, skills y búsqueda de herramientas." + }, + "fr": { + "description": "Le modèle d’agent à poids ouverts de MiniMax pour l’ingénierie complexe, le diagnostic d’incidents, les équipes multi-agents, les skills et la recherche d’outils." + }, + "id": { + "description": "Model agen berbobot terbuka MiniMax untuk rekayasa kompleks, diagnosis insiden, tim multi-agen, skill, dan pencarian alat dinamis." + }, + "ja": { + "description": "複雑なソフトウェア開発、障害診断、マルチエージェントチーム、スキル、動的ツール検索向けのMiniMax製オープンウェイト・エージェントモデル。" + }, + "ko": { + "description": "복잡한 소프트웨어 엔지니어링, 장애 진단, 다중 에이전트 팀, 스킬 및 동적 도구 검색을 위한 MiniMax의 오픈 웨이트 에이전트 모델입니다." + }, + "pt": { + "description": "O modelo de agente de pesos abertos da MiniMax para engenharia complexa, diagnóstico de incidentes, equipes multiagente, skills e busca dinâmica de ferramentas." + }, + "ru": { + "description": "Агентная модель MiniMax с открытыми весами для сложной разработки, диагностики инцидентов, мультиагентных команд, навыков и динамического поиска инструментов." + }, + "tr": { + "description": "MiniMax'in karmaşık yazılım mühendisliği, olay tanılama, çok aracılı ekipler, beceriler ve dinamik araç arama için açık ağırlıklı aracı modeli." + }, + "zh-Hans": { + "description": "MiniMax 面向复杂软件工程、故障诊断、多智能体团队、技能和动态工具搜索的开放权重智能体模型。" + }, + "zh-Hant": { + "description": "MiniMax 面向複雜軟體工程、故障診斷、多智慧體團隊、技能和動態工具搜尋的開放權重智慧體模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.minimax.io/news/minimax-m27-en", + "title": "MiniMax M2.7 launch", + "fields": ["name", "description", "releaseDate", "lifecycle", "capabilities"] + }, + { + "url": "https://platform.minimax.io/docs/api-reference/api-overview", + "title": "MiniMax API overview", + "fields": ["docsUrl", "contextWindow", "inputModalities", "outputModalities"] + }, + { + "url": "https://platform.minimax.io/docs/guides/pricing-paygo", + "title": "MiniMax pay-as-you-go pricing", + "fields": ["tokenPricing"] + }, + { + "url": "https://huggingface.co/MiniMaxAI/MiniMax-M2.7", + "title": "MiniMax M2.7 official model card", + "fields": ["size", "platformUrls.huggingface"] + }, + { + "url": "https://huggingface.co/MiniMaxAI/MiniMax-M2.7", + "title": "MiniMax M2.7 official model card — Terminal-Bench 2.0; Claude Code 2.0.64 scaffold; selected Dockerfiles adjusted; 8 CPU, 16 GB RAM, 7200-second timeout; average of 4 runs; label: MiniMax M2.7; observed 2026-07-21", + "fields": ["benchmarks.terminalBench"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.minimax.io", + "docsUrl": "https://platform.minimax.io/docs/api-reference/api-overview", + "vendor": "MiniMax", + "size": "229B", + "contextWindow": 204800, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 1.2, + "cacheRead": 0.06, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-18", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": 0.57, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/MiniMaxAI/MiniMax-M2.7", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/minimax-m2.json b/manifests/models/minimax-m2.json index 4fe5bdfd..b2e16f03 100644 --- a/manifests/models/minimax-m2.json +++ b/manifests/models/minimax-m2.json @@ -46,9 +46,29 @@ "contextWindow": 204800, "maxOutput": 131072, "tokenPricing": { - "input": 0.3, - "output": 1.2, - "cache": 0.03 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 1.2, + "cacheRead": 0.03, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-10-27", "lifecycle": "maintained", diff --git a/manifests/models/minimax-m3.json b/manifests/models/minimax-m3.json new file mode 100644 index 00000000..5d612244 --- /dev/null +++ b/manifests/models/minimax-m3.json @@ -0,0 +1,113 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "minimax-m3", + "name": "MiniMax M3", + "description": "MiniMax's open-weight frontier model combining coding and agentic performance, a 1M-token context window, native image and video understanding, and computer use.", + "translations": { + "de": { + "description": "MiniMax' offenes Frontier-Modell verbindet Coding- und Agentenleistung, 1 Mio. Token Kontext, natives Bild- und Videoverständnis sowie Computernutzung." + }, + "es": { + "description": "El modelo de frontera de pesos abiertos de MiniMax combina programación y agentes, contexto de 1M, comprensión nativa de imágenes y video, y uso de computadoras." + }, + "fr": { + "description": "Le modèle de pointe à poids ouverts de MiniMax réunit codage et agents, contexte 1 M, compréhension native des images et vidéos, et utilisation d’ordinateur." + }, + "id": { + "description": "Model frontier open-weight MiniMax yang menggabungkan coding dan agen, konteks 1M, pemahaman native gambar dan video, serta penggunaan komputer." + }, + "ja": { + "description": "コーディングとエージェント性能、100万トークンのコンテキスト、ネイティブな画像・動画理解、コンピューター操作を統合したMiniMaxのオープンウェイトモデル。" + }, + "ko": { + "description": "코딩과 에이전트 성능, 100만 토큰 컨텍스트, 네이티브 이미지·비디오 이해 및 컴퓨터 사용을 결합한 MiniMax의 오픈 웨이트 프런티어 모델입니다." + }, + "pt": { + "description": "O modelo de fronteira de pesos abertos da MiniMax combina programação e agentes, contexto de 1M, compreensão nativa de imagens e vídeos e uso do computador." + }, + "ru": { + "description": "Открытая передовая модель MiniMax сочетает программирование и агентов, контекст 1 млн, нативное понимание изображений и видео и управление компьютером." + }, + "tr": { + "description": "MiniMax'in açık ağırlıklı öncü modeli; kodlama ve aracı performansı, 1M bağlam, yerel görüntü-video anlayışı ve bilgisayar kullanımını birleştirir." + }, + "zh-Hans": { + "description": "MiniMax 的开放权重前沿模型,结合编码与智能体能力、100 万 token 上下文、原生图像和视频理解以及计算机使用。" + }, + "zh-Hant": { + "description": "MiniMax 的開放權重前沿模型,結合編碼與智慧體能力、100 萬 token 上下文、原生圖像和影片理解以及電腦使用。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://www.minimax.io/blog/minimax-m3", + "title": "MiniMax M3 release", + "fields": [ + "name", + "description", + "releaseDate", + "lifecycle", + "contextWindow", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://platform.minimax.io/subscribe/token-plan?tab=api-enterprise", + "title": "MiniMax M3 pay-as-you-go pricing", + "fields": ["tokenPricing", "contextWindow"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.minimax.io", + "docsUrl": "https://platform.minimax.io/docs/api-reference/api-overview", + "vendor": "MiniMax", + "size": null, + "contextWindow": 1000000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.3, + "output": 1.2, + "cacheRead": 0.06, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-06-01", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/mistral-medium-3-5.json b/manifests/models/mistral-medium-3-5.json new file mode 100644 index 00000000..f7b9312b --- /dev/null +++ b/manifests/models/mistral-medium-3-5.json @@ -0,0 +1,124 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "mistral-medium-3-5", + "name": "Mistral Medium 3.5", + "description": "Mistral AI's open-weight frontier-class multimodal model for agentic and coding workloads, with adjustable reasoning and a 256K-token context window.", + "translations": { + "de": { + "description": "Mistral AIs offenes, multimodales Frontier-Modell für agentische und Programmieraufgaben mit anpassbarem Schlussfolgern und einem Kontextfenster von 256K Token." + }, + "es": { + "description": "El modelo multimodal de frontera con pesos abiertos de Mistral AI para tareas agénticas y de programación, con razonamiento ajustable y una ventana de contexto de 256K tokens." + }, + "fr": { + "description": "Le modèle multimodal de pointe à poids ouverts de Mistral AI pour les tâches agentiques et le codage, avec raisonnement réglable et fenêtre de contexte de 256K jetons." + }, + "id": { + "description": "Model multimodal frontier open-weight Mistral AI untuk beban kerja agentik dan coding, dengan penalaran yang dapat disesuaikan dan jendela konteks 256K token." + }, + "ja": { + "description": "エージェントおよびコーディング用途向けに、調整可能な推論と256Kトークンのコンテキストを備えたMistral AIのオープンウェイト・マルチモーダルフロンティアモデル。" + }, + "ko": { + "description": "에이전트 및 코딩 작업을 위해 조절 가능한 추론과 256K 토큰 컨텍스트를 제공하는 Mistral AI의 오픈 웨이트 멀티모달 프런티어 모델입니다." + }, + "pt": { + "description": "O modelo multimodal de fronteira com pesos abertos da Mistral AI para tarefas agênticas e programação, com raciocínio ajustável e janela de contexto de 256K tokens." + }, + "ru": { + "description": "Открытая мультимодальная передовая модель Mistral AI для агентных задач и программирования с настраиваемыми рассуждениями и контекстом 256K токенов." + }, + "tr": { + "description": "Mistral AI'ın aracı ve kodlama iş yükleri için ayarlanabilir akıl yürütme ve 256K token bağlam penceresi sunan açık ağırlıklı çok modlu öncü modeli." + }, + "zh-Hans": { + "description": "Mistral AI 面向智能体与编码任务的开放权重多模态前沿模型,支持可调节推理和 256K token 上下文窗口。" + }, + "zh-Hant": { + "description": "Mistral AI 面向智慧體與編碼任務的開放權重多模態前沿模型,支援可調節推理和 256K token 上下文視窗。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/mistral-medium-3-5-26-04", + "title": "Mistral Medium 3.5 model card", + "fields": [ + "name", + "description", + "docsUrl", + "contextWindow", + "tokenPricing", + "releaseDate", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://docs.mistral.ai/models/model-selection-guide?models=mistral-medium-3-5-26-04", + "title": "Mistral model selection guide", + "fields": ["size"] + }, + { + "url": "https://docs.mistral.ai/resources/changelogs", + "title": "Mistral platform changelog", + "fields": ["releaseDate", "lifecycle"] + }, + { + "url": "https://mistral.ai/pricing/api/", + "title": "Mistral API pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai/models", + "docsUrl": "https://docs.mistral.ai/models/model-cards/mistral-medium-3-5-26-04", + "vendor": "Mistral AI", + "size": "128B", + "contextWindow": 256000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.5, + "output": 7.5, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-28", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/mistral-small-4.json b/manifests/models/mistral-small-4.json new file mode 100644 index 00000000..d86fcc4e --- /dev/null +++ b/manifests/models/mistral-small-4.json @@ -0,0 +1,119 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "mistral-small-4", + "name": "Mistral Small 4", + "description": "Mistral AI's open-weight hybrid model combining instruction following, reasoning, coding, and multimodal understanding in an efficient MoE.", + "translations": { + "de": { + "description": "Mistral AIs hybrides Open-Weight-Modell, das Anweisungsbefolgung, Reasoning, Coding und multimodales Verständnis in einem effizienten MoE vereint." + }, + "es": { + "description": "El modelo híbrido de pesos abiertos de Mistral AI que combina instrucciones, razonamiento, código y comprensión multimodal en un MoE eficiente." + }, + "fr": { + "description": "Le modèle hybride à poids ouverts de Mistral AI réunissant suivi d’instructions, raisonnement, codage et compréhension multimodale dans un MoE efficace." + }, + "id": { + "description": "Model hibrida berbobot terbuka Mistral AI yang menggabungkan kepatuhan instruksi, penalaran, coding, dan pemahaman multimodal dalam MoE efisien." + }, + "ja": { + "description": "指示追従、推論、コーディング、マルチモーダル理解を効率的なMoEに統合したMistral AIのオープンウェイト・ハイブリッドモデル。" + }, + "ko": { + "description": "지시 이행, 추론, 코딩 및 멀티모달 이해를 효율적인 MoE에 결합한 Mistral AI의 오픈 웨이트 하이브리드 모델입니다." + }, + "pt": { + "description": "O modelo híbrido de pesos abertos da Mistral AI que combina instruções, raciocínio, código e compreensão multimodal em um MoE eficiente." + }, + "ru": { + "description": "Гибридная модель Mistral AI с открытыми весами, объединяющая выполнение инструкций, рассуждения, код и мультимодальное понимание в эффективной MoE." + }, + "tr": { + "description": "Mistral AI'ın talimat izleme, akıl yürütme, kodlama ve çok modlu anlamayı verimli bir MoE'de birleştiren açık ağırlıklı melez modeli." + }, + "zh-Hans": { + "description": "Mistral AI 在高效 MoE 中融合指令遵循、推理、编码和多模态理解的开放权重混合模型。" + }, + "zh-Hant": { + "description": "Mistral AI 在高效 MoE 中融合指令遵循、推理、編碼和多模態理解的開放權重混合模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://docs.mistral.ai/models/model-cards/mistral-small-4-0-26-03", + "title": "Mistral Small 4 model card", + "fields": [ + "name", + "description", + "size", + "contextWindow", + "releaseDate", + "lifecycle", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://docs.mistral.ai/models/model-selection-guide?models=mistral-small-4-0-26-03", + "title": "Mistral model selection guide", + "fields": ["lifecycle", "capabilities"] + }, + { + "url": "https://mistral.ai/pricing/api/", + "title": "Mistral API pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "docsUrl": "https://docs.mistral.ai/models/model-cards/mistral-small-4-0-26-03", + "vendor": "Mistral AI", + "size": "119B (6.5B active)", + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.15, + "output": 0.6, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-03-16", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/muse-spark-1-1.json b/manifests/models/muse-spark-1-1.json new file mode 100644 index 00000000..29becba9 --- /dev/null +++ b/manifests/models/muse-spark-1-1.json @@ -0,0 +1,94 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "muse-spark-1-1", + "name": "Muse Spark 1.1", + "description": "Meta's multimodal reasoning model for coding agents, long-running tool use, computer operation, and complex software engineering.", + "translations": { + "de": { + "description": "Metas multimodales Reasoning-Modell für Coding-Agenten, langfristige Werkzeugnutzung, Computersteuerung und komplexe Softwareentwicklung." + }, + "es": { + "description": "El modelo de razonamiento multimodal de Meta para agentes de código, uso prolongado de herramientas, control informático e ingeniería compleja." + }, + "fr": { + "description": "Le modèle de raisonnement multimodal de Meta pour les agents de codage, l’usage prolongé d’outils, le pilotage informatique et l’ingénierie complexe." + }, + "id": { + "description": "Model penalaran multimodal Meta untuk agen coding, penggunaan alat jangka panjang, operasi komputer, dan rekayasa perangkat lunak kompleks." + }, + "ja": { + "description": "コーディングエージェント、長時間のツール利用、コンピューター操作、複雑なソフトウェア開発向けのMeta製マルチモーダル推論モデル。" + }, + "ko": { + "description": "코딩 에이전트, 장기 도구 사용, 컴퓨터 조작 및 복잡한 소프트웨어 엔지니어링을 위한 Meta의 멀티모달 추론 모델입니다." + }, + "pt": { + "description": "O modelo de raciocínio multimodal da Meta para agentes de código, uso prolongado de ferramentas, operação de computadores e engenharia complexa." + }, + "ru": { + "description": "Мультимодальная модель рассуждений Meta для агентов программирования, длительной работы с инструментами и сложной разработки." + }, + "tr": { + "description": "Meta'nın kodlama aracıları, uzun süreli araç kullanımı, bilgisayar kontrolü ve karmaşık yazılım mühendisliği için çok modlu akıl yürütme modeli." + }, + "zh-Hans": { + "description": "Meta 面向编码智能体、长时间工具调用、计算机操作和复杂软件工程的多模态推理模型。" + }, + "zh-Hant": { + "description": "Meta 面向編碼智慧體、長時間工具呼叫、電腦操作和複雜軟體工程的多模態推理模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://ai.meta.com/blog/introducing-muse-spark-meta-model-api/", + "title": "Introducing Muse Spark 1.1", + "fields": [ + "name", + "description", + "contextWindow", + "releaseDate", + "lifecycle", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://developer.meta.com/ai", + "title": "Meta Model API documentation", + "fields": ["docsUrl"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://ai.meta.com", + "docsUrl": "https://developer.meta.com/ai", + "vendor": "Meta", + "size": null, + "contextWindow": 1000000, + "maxOutput": null, + "tokenPricing": { + "status": "not-applicable", + "reason": "open-weights-only", + "primaryOffer": null, + "offers": [] + }, + "releaseDate": "2026-07-09", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "pdf", "audio", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/o3-mini.json b/manifests/models/o3-mini.json new file mode 100644 index 00000000..ff7c6021 --- /dev/null +++ b/manifests/models/o3-mini.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "o3-mini", + "name": "o3-mini", + "description": "Compact reasoning model optimized for coding, mathematics, and science with configurable reasoning effort.", + "translations": { + "zh-Hans": { + "description": "o3-mini 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "o3-mini ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "o3-mini es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "o3-mini est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "o3-mini adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "o3-mini は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "o3-mini은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "o3-mini é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "o3-mini — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "o3-mini, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "o3-mini 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/o3-mini", + "title": "o3-mini official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/o3-mini", + "vendor": "OpenAI", + "size": null, + "contextWindow": 200000, + "maxOutput": 100000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.1, + "output": 4.4, + "cacheRead": 0.55, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-01-31", + "lifecycle": "deprecated", + "knowledgeCutoff": "2023-10-01", + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/o3.json b/manifests/models/o3.json new file mode 100644 index 00000000..6c6a92aa --- /dev/null +++ b/manifests/models/o3.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "o3", + "name": "o3", + "description": "Reasoning model for complex coding, mathematics, science, and visual analysis tasks.", + "translations": { + "zh-Hans": { + "description": "o3 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "o3 ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "o3 es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "o3 est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "o3 adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "o3 は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "o3은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "o3 é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "o3 — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "o3, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "o3 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/o3", + "title": "o3 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/o3", + "vendor": "OpenAI", + "size": null, + "contextWindow": 200000, + "maxOutput": 100000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 2, + "output": 8, + "cacheRead": 0.5, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-04-16", + "lifecycle": "maintained", + "knowledgeCutoff": "2024-06-01", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/o4-mini.json b/manifests/models/o4-mini.json new file mode 100644 index 00000000..312fe6ce --- /dev/null +++ b/manifests/models/o4-mini.json @@ -0,0 +1,117 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "o4-mini", + "name": "o4-mini", + "description": "Fast reasoning model for coding, mathematics, and visual problem solving with efficient tool use.", + "translations": { + "zh-Hans": { + "description": "o4-mini 是 OpenAI 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "o4-mini ist eine eigenständige Modellversion von OpenAI mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "o4-mini es una versión de modelo independiente de OpenAI con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "o4-mini est une version de modèle distincte de OpenAI, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "o4-mini adalah versi model mandiri dari OpenAI dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "o4-mini は OpenAI が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "o4-mini은(는) OpenAI가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "o4-mini é uma versão de modelo independente da OpenAI, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "o4-mini — самостоятельная версия модели от OpenAI с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "o4-mini, OpenAI tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "o4-mini 是 OpenAI 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://developers.openai.com/api/docs/models/o4-mini", + "title": "o4-mini official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "tokenPricing", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://openai.com", + "docsUrl": "https://developers.openai.com/api/docs/models/o4-mini", + "vendor": "OpenAI", + "size": null, + "contextWindow": 200000, + "maxOutput": 100000, + "tokenPricing": { + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.1, + "output": 4.4, + "cacheRead": 0.275, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-04-16", + "lifecycle": "deprecated", + "knowledgeCutoff": "2024-06-01", + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/qwen3-5-plus.json b/manifests/models/qwen3-5-plus.json new file mode 100644 index 00000000..bdf2eeaa --- /dev/null +++ b/manifests/models/qwen3-5-plus.json @@ -0,0 +1,139 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "qwen3-5-plus", + "name": "Qwen3.5 Plus", + "description": "Multimodal Qwen model offered in Alibaba Cloud Coding Plan for coding agents and long-context development tasks.", + "translations": { + "zh-Hans": { + "description": "Qwen3.5 Plus 是 Alibaba 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Qwen3.5 Plus ist eine eigenständige Modellversion von Alibaba mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Qwen3.5 Plus es una versión de modelo independiente de Alibaba con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Qwen3.5 Plus est une version de modèle distincte de Alibaba, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Qwen3.5 Plus adalah versi model mandiri dari Alibaba dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Qwen3.5 Plus は Alibaba が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Qwen3.5 Plus은(는) Alibaba가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Qwen3.5 Plus é uma versão de modelo independente da Alibaba, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Qwen3.5 Plus — самостоятельная версия модели от Alibaba с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Qwen3.5 Plus, Alibaba tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Qwen3.5 Plus 是 Alibaba 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://help.aliyun.com/en/model-studio/coding-plan", + "title": "Qwen3.5 Plus official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://help.aliyun.com/en/model-studio/model-pricing", + "title": "Alibaba Cloud Model Studio model pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.alibabacloud.com", + "docsUrl": "https://help.aliyun.com/en/model-studio/coding-plan", + "vendor": "Alibaba", + "size": null, + "contextWindow": 1000000, + "maxOutput": 65536, + "tokenPricing": { + "status": "available", + "primaryOffer": "cn-standard", + "offers": [ + { + "id": "cn-standard", + "currency": "CNY", + "region": "CN", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": { "metric": "inputTokens", "min": 1, "max": 128000 }, + "rates": { + "input": 0.8, + "output": 4.8, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 128001, "max": 256000 }, + "rates": { + "input": 2, + "output": 12, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 256001, "max": 1000000 }, + "rates": { + "input": 4, + "output": 24, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-02-15", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/qwen3-6-plus.json b/manifests/models/qwen3-6-plus.json new file mode 100644 index 00000000..9ce857b1 --- /dev/null +++ b/manifests/models/qwen3-6-plus.json @@ -0,0 +1,130 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "qwen3-6-plus", + "name": "Qwen3.6 Plus", + "description": "Multimodal Qwen model offered in Alibaba Cloud Coding Plan for coding agents and long-context development tasks.", + "translations": { + "zh-Hans": { + "description": "Qwen3.6 Plus 是 Alibaba 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Qwen3.6 Plus ist eine eigenständige Modellversion von Alibaba mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Qwen3.6 Plus es una versión de modelo independiente de Alibaba con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Qwen3.6 Plus est une version de modèle distincte de Alibaba, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Qwen3.6 Plus adalah versi model mandiri dari Alibaba dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Qwen3.6 Plus は Alibaba が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Qwen3.6 Plus은(는) Alibaba가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Qwen3.6 Plus é uma versão de modelo independente da Alibaba, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Qwen3.6 Plus — самостоятельная версия модели от Alibaba с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Qwen3.6 Plus, Alibaba tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Qwen3.6 Plus 是 Alibaba 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://help.aliyun.com/en/model-studio/coding-plan", + "title": "Qwen3.6 Plus official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://help.aliyun.com/en/model-studio/model-pricing", + "title": "Alibaba Cloud Model Studio model pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.alibabacloud.com", + "docsUrl": "https://help.aliyun.com/en/model-studio/coding-plan", + "vendor": "Alibaba", + "size": null, + "contextWindow": 1000000, + "maxOutput": 65536, + "tokenPricing": { + "status": "available", + "primaryOffer": "cn-standard", + "offers": [ + { + "id": "cn-standard", + "currency": "CNY", + "region": "CN", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": { "metric": "inputTokens", "min": 1, "max": 256000 }, + "rates": { + "input": 2, + "output": 12, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 256001, "max": 1000000 }, + "rates": { + "input": 8, + "output": 48, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-04-02", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text", "image"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/qwen3-7-max.json b/manifests/models/qwen3-7-max.json new file mode 100644 index 00000000..6c3f49e6 --- /dev/null +++ b/manifests/models/qwen3-7-max.json @@ -0,0 +1,112 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "qwen3-7-max", + "name": "Qwen3.7-Max", + "description": "Alibaba's Qwen3.7 flagship for programming, office productivity, tool use, and long-horizon autonomous tasks with a 1M-token context window.", + "translations": { + "de": { + "description": "Alibabas Qwen3.7-Flaggschiff für Programmierung, Büroproduktivität, Werkzeugnutzung und langfristige autonome Aufgaben mit 1 Mio. Token Kontext." + }, + "es": { + "description": "El modelo insignia Qwen3.7 de Alibaba para programación, productividad, uso de herramientas y tareas autónomas prolongadas con contexto de 1 millón de tokens." + }, + "fr": { + "description": "Le modèle phare Qwen3.7 d’Alibaba pour le codage, la productivité, les outils et les tâches autonomes longues avec 1 million de jetons de contexte." + }, + "id": { + "description": "Model unggulan Qwen3.7 Alibaba untuk coding, produktivitas kantor, penggunaan alat, dan tugas otonom jangka panjang dengan konteks 1 juta token." + }, + "ja": { + "description": "100万トークンのコンテキストを備え、プログラミング、オフィス生産性、ツール利用、長期の自律タスクに対応するAlibabaのQwen3.7旗艦モデル。" + }, + "ko": { + "description": "100만 토큰 컨텍스트로 프로그래밍, 사무 생산성, 도구 사용 및 장기 자율 작업을 지원하는 Alibaba의 Qwen3.7 플래그십 모델입니다." + }, + "pt": { + "description": "O modelo principal Qwen3.7 da Alibaba para programação, produtividade, uso de ferramentas e tarefas autônomas prolongadas com contexto de 1 milhão de tokens." + }, + "ru": { + "description": "Флагманская модель Alibaba Qwen3.7 для программирования, офисной работы, инструментов и длительных автономных задач с контекстом 1 млн токенов." + }, + "tr": { + "description": "Alibaba'nın 1 milyon token bağlamla programlama, ofis üretkenliği, araç kullanımı ve uzun süreli otonom görevler için Qwen3.7 amiral modeli." + }, + "zh-Hans": { + "description": "阿里巴巴面向编程、办公生产力、工具使用和长周期自主任务的 Qwen3.7 旗舰模型,提供 100 万 token 上下文。" + }, + "zh-Hant": { + "description": "阿里巴巴面向程式設計、辦公生產力、工具使用和長週期自主任務的 Qwen3.7 旗艦模型,提供 100 萬 token 上下文。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://help.aliyun.com/en/model-studio/newly-released-models", + "title": "Alibaba Cloud Model Studio model lifecycle and updates", + "fields": [ + "name", + "description", + "releaseDate", + "lifecycle", + "contextWindow", + "capabilities", + "inputModalities" + ] + }, + { + "url": "https://help.aliyun.com/en/model-studio/model-pricing", + "title": "Alibaba Cloud Model Studio model pricing", + "fields": ["docsUrl", "contextWindow", "tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://qwen.ai", + "docsUrl": "https://help.aliyun.com/en/model-studio/models", + "vendor": "Alibaba", + "size": null, + "contextWindow": 1000000, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "cn-standard", + "offers": [ + { + "id": "cn-standard", + "currency": "CNY", + "region": "CN", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 12, + "output": 36, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-05-21", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/qwen3-7-plus.json b/manifests/models/qwen3-7-plus.json new file mode 100644 index 00000000..87059f62 --- /dev/null +++ b/manifests/models/qwen3-7-plus.json @@ -0,0 +1,118 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "qwen3-7-plus", + "name": "Qwen3.7 Plus", + "description": "Alibaba's multimodal Qwen model balancing coding, reasoning, speed, and cost with a 1M-token context window.", + "translations": { + "de": { + "description": "Alibabas multimodales Qwen-Modell mit 1-Million-Token-Kontext, das Coding, Reasoning, Geschwindigkeit und Kosten ausbalanciert." + }, + "es": { + "description": "El modelo Qwen multimodal de Alibaba con un contexto de un millón de tokens que equilibra código, razonamiento, velocidad y coste." + }, + "fr": { + "description": "Le modèle Qwen multimodal d’Alibaba, doté d’un contexte d’un million de jetons, équilibrant codage, raisonnement, vitesse et coût." + }, + "id": { + "description": "Model Qwen multimodal Alibaba dengan konteks 1 juta token yang menyeimbangkan coding, penalaran, kecepatan, dan biaya." + }, + "ja": { + "description": "100万トークンのコンテキストでコーディング、推論、速度、コストのバランスを取るAlibabaのマルチモーダルQwenモデル。" + }, + "ko": { + "description": "100만 토큰 컨텍스트에서 코딩, 추론, 속도 및 비용의 균형을 맞춘 Alibaba의 멀티모달 Qwen 모델입니다." + }, + "pt": { + "description": "O modelo Qwen multimodal da Alibaba com contexto de um milhão de tokens que equilibra código, raciocínio, velocidade e custo." + }, + "ru": { + "description": "Мультимодальная модель Qwen от Alibaba с контекстом 1 млн токенов, сочетающая программирование, рассуждения, скорость и стоимость." + }, + "tr": { + "description": "Alibaba'nın 1 milyon belirteç bağlamında kodlama, akıl yürütme, hız ve maliyeti dengeleyen çok modlu Qwen modeli." + }, + "zh-Hans": { + "description": "阿里巴巴提供 100 万 token 上下文,在编码、推理、速度和成本之间取得平衡的多模态 Qwen 模型。" + }, + "zh-Hant": { + "description": "阿里巴巴提供 100 萬 token 上下文,在編碼、推理、速度和成本之間取得平衡的多模態 Qwen 模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://help.aliyun.com/en/model-studio/model-pricing", + "title": "Alibaba Cloud Model Studio model list and pricing", + "fields": ["name", "releaseDate", "lifecycle", "contextWindow", "maxOutput", "tokenPricing"] + }, + { + "url": "https://help.aliyun.com/en/model-studio/vision-model/", + "title": "Qwen multimodal model documentation", + "fields": ["description", "inputModalities", "outputModalities", "capabilities"] + }, + { + "url": "https://help.aliyun.com/en/model-studio/coding-plan", + "title": "Model Studio Coding Plan", + "fields": ["lifecycle"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.alibabacloud.com/product/modelstudio", + "docsUrl": "https://help.aliyun.com/en/model-studio/model-pricing", + "vendor": "Alibaba", + "size": null, + "contextWindow": 1000000, + "maxOutput": 64000, + "tokenPricing": { + "status": "available", + "primaryOffer": "cn-standard", + "offers": [ + { + "id": "cn-standard", + "currency": "CNY", + "region": "CN", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": { "metric": "inputTokens", "min": 1, "max": 256000 }, + "rates": { + "input": 2, + "output": 8, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 256001, "max": 1000000 }, + "rates": { + "input": 6, + "output": 24, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-05-26", + "lifecycle": "latest", + "knowledgeCutoff": null, + "inputModalities": ["text", "image", "video"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { "huggingface": null, "artificialAnalysis": null, "openrouter": null } +} diff --git a/manifests/models/qwen3-coder-30b-a3b.json b/manifests/models/qwen3-coder-30b-a3b.json index e20bc15c..7228c7a3 100644 --- a/manifests/models/qwen3-coder-30b-a3b.json +++ b/manifests/models/qwen3-coder-30b-a3b.json @@ -46,9 +46,29 @@ "contextWindow": 262144, "maxOutput": 65536, "tokenPricing": { - "input": 0.45, - "output": 2.25, - "cache": null + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 0.45, + "output": 2.25, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-07-31", "lifecycle": "latest", diff --git a/manifests/models/qwen3-coder-480b-a35b.json b/manifests/models/qwen3-coder-480b-a35b.json index 803dbd12..b773227d 100644 --- a/manifests/models/qwen3-coder-480b-a35b.json +++ b/manifests/models/qwen3-coder-480b-a35b.json @@ -46,9 +46,29 @@ "contextWindow": 262144, "maxOutput": 65536, "tokenPricing": { - "input": 1.5, - "output": 7.5, - "cache": null + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1.5, + "output": 7.5, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-07-22", "lifecycle": "latest", diff --git a/manifests/models/qwen3-coder-flash.json b/manifests/models/qwen3-coder-flash.json new file mode 100644 index 00000000..34a02946 --- /dev/null +++ b/manifests/models/qwen3-coder-flash.json @@ -0,0 +1,148 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "description": "Low-latency Qwen3 Coder API model for code generation, repository assistance, and tool-calling workflows.", + "translations": { + "zh-Hans": { + "description": "Qwen3 Coder Flash 是 Alibaba 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Qwen3 Coder Flash ist eine eigenständige Modellversion von Alibaba mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Qwen3 Coder Flash es una versión de modelo independiente de Alibaba con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Qwen3 Coder Flash est une version de modèle distincte de Alibaba, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Qwen3 Coder Flash adalah versi model mandiri dari Alibaba dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Qwen3 Coder Flash は Alibaba が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Qwen3 Coder Flash은(는) Alibaba가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Qwen3 Coder Flash é uma versão de modelo independente da Alibaba, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Qwen3 Coder Flash — самостоятельная версия модели от Alibaba с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Qwen3 Coder Flash, Alibaba tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Qwen3 Coder Flash 是 Alibaba 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://help.aliyun.com/en/model-studio/qwen-coder", + "title": "Qwen3 Coder Flash official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://help.aliyun.com/en/model-studio/model-pricing", + "title": "Alibaba Cloud Model Studio model pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.alibabacloud.com", + "docsUrl": "https://help.aliyun.com/en/model-studio/qwen-coder", + "vendor": "Alibaba", + "size": null, + "contextWindow": 1000000, + "maxOutput": 65536, + "tokenPricing": { + "status": "available", + "primaryOffer": "cn-standard", + "offers": [ + { + "id": "cn-standard", + "currency": "CNY", + "region": "CN", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": { "metric": "inputTokens", "min": 1, "max": 32000 }, + "rates": { + "input": 1, + "output": 4, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 32001, "max": 128000 }, + "rates": { + "input": 1.5, + "output": 6, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 128001, "max": 256000 }, + "rates": { + "input": 2.5, + "output": 10, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 256001, "max": 1000000 }, + "rates": { + "input": 5, + "output": 25, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2025-07-28", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/qwen3-coder-next.json b/manifests/models/qwen3-coder-next.json new file mode 100644 index 00000000..33c18dfe --- /dev/null +++ b/manifests/models/qwen3-coder-next.json @@ -0,0 +1,146 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "qwen3-coder-next", + "name": "Qwen3-Coder-Next", + "description": "Alibaba's sparse open-weight coding model with 80B total and 3B active parameters, built for efficient long-context coding agents.", + "translations": { + "de": { + "description": "Alibabas spärliches Open-Weight-Coding-Modell mit 80B Gesamt- und 3B aktiven Parametern für effiziente Coding-Agenten mit langem Kontext." + }, + "es": { + "description": "El modelo de código disperso y pesos abiertos de Alibaba, con 80B parámetros totales y 3B activos, para agentes eficientes de contexto largo." + }, + "fr": { + "description": "Le modèle de codage sparse à poids ouverts d’Alibaba, avec 80B paramètres au total et 3B actifs, conçu pour les agents efficaces à long contexte." + }, + "id": { + "description": "Model coding sparse berbobot terbuka Alibaba dengan 80B parameter total dan 3B aktif, dibuat untuk agen coding konteks panjang yang efisien." + }, + "ja": { + "description": "総80B・アクティブ3Bパラメータで、効率的な長文脈コーディングエージェント向けに設計されたAlibabaの疎なオープンウェイトモデル。" + }, + "ko": { + "description": "총 800억·활성 30억 매개변수로 효율적인 장문맥 코딩 에이전트를 위해 설계된 Alibaba의 희소 오픈 웨이트 코딩 모델입니다." + }, + "pt": { + "description": "O modelo de código esparso e pesos abertos da Alibaba, com 80B parâmetros totais e 3B ativos, para agentes eficientes de contexto longo." + }, + "ru": { + "description": "Разреженная модель Alibaba с открытыми весами, 80 млрд общих и 3 млрд активных параметров, для эффективных агентов с длинным контекстом." + }, + "tr": { + "description": "Alibaba'nın verimli uzun bağlamlı kodlama aracıları için 80B toplam ve 3B etkin parametreli seyrek açık ağırlıklı kodlama modeli." + }, + "zh-Hans": { + "description": "阿里巴巴总参数 80B、激活参数 3B,面向高效长上下文编码智能体的稀疏开放权重模型。" + }, + "zh-Hant": { + "description": "阿里巴巴總參數 80B、啟用參數 3B,面向高效長上下文編碼智慧體的稀疏開放權重模型。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://huggingface.co/Qwen/Qwen3-Coder-Next", + "title": "Qwen3-Coder-Next official model card", + "fields": [ + "name", + "description", + "size", + "contextWindow", + "releaseDate", + "inputModalities", + "outputModalities", + "capabilities", + "platformUrls.huggingface" + ] + }, + { + "url": "https://github.com/QwenLM/Qwen3-Coder", + "title": "Qwen3-Coder official repository", + "fields": ["description", "lifecycle", "capabilities"] + }, + { + "url": "https://help.aliyun.com/en/model-studio/qwen-coder", + "title": "Alibaba Cloud Qwen Coder documentation", + "fields": ["docsUrl"] + }, + { + "url": "https://help.aliyun.com/en/model-studio/model-pricing", + "title": "Alibaba Cloud Model Studio model pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://qwen.ai", + "docsUrl": "https://help.aliyun.com/en/model-studio/qwen-coder", + "vendor": "Alibaba", + "size": "80B (3B active)", + "contextWindow": 262144, + "maxOutput": null, + "tokenPricing": { + "status": "available", + "primaryOffer": "cn-standard", + "offers": [ + { + "id": "cn-standard", + "currency": "CNY", + "region": "CN", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": { "metric": "inputTokens", "min": 1, "max": 32000 }, + "rates": { + "input": 1, + "output": 4, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 32001, "max": 128000 }, + "rates": { + "input": 1.5, + "output": 6, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 128001, "max": 256000 }, + "rates": { + "input": 2.5, + "output": 10, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-02-03", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": "https://huggingface.co/Qwen/Qwen3-Coder-Next", + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/models/qwen3-coder-plus.json b/manifests/models/qwen3-coder-plus.json index cecccad4..0818f29e 100644 --- a/manifests/models/qwen3-coder-plus.json +++ b/manifests/models/qwen3-coder-plus.json @@ -46,9 +46,29 @@ "contextWindow": 1048576, "maxOutput": 65536, "tokenPricing": { - "input": 1, - "output": 5, - "cache": 0.1 + "status": "available", + "primaryOffer": "global-standard", + "offers": [ + { + "id": "global-standard", + "currency": "USD", + "region": "global", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": null, + "rates": { + "input": 1, + "output": 5, + "cacheRead": 0.1, + "cacheWrite": null + } + } + ] + } + ] }, "releaseDate": "2025-07-23", "lifecycle": "latest", diff --git a/manifests/models/qwen3-max-2026-01-23.json b/manifests/models/qwen3-max-2026-01-23.json new file mode 100644 index 00000000..ec1149db --- /dev/null +++ b/manifests/models/qwen3-max-2026-01-23.json @@ -0,0 +1,139 @@ +{ + "$schema": "../$schemas/model.schema.json", + "id": "qwen3-max-2026-01-23", + "name": "Qwen3 Max 2026-01-23", + "description": "Pinned Qwen3 Max snapshot offered in Alibaba Cloud Coding Plan for demanding agentic coding tasks.", + "translations": { + "zh-Hans": { + "description": "Qwen3 Max 2026-01-23 是 Alibaba 发布的独立模型版本,具备明确的编程或软件工程能力。" + }, + "de": { + "description": "Qwen3 Max 2026-01-23 ist eine eigenständige Modellversion von Alibaba mit klar ausgewiesenen Fähigkeiten für Programmierung oder Softwareentwicklung." + }, + "es": { + "description": "Qwen3 Max 2026-01-23 es una versión de modelo independiente de Alibaba con capacidades explícitas de programación o ingeniería de software." + }, + "fr": { + "description": "Qwen3 Max 2026-01-23 est une version de modèle distincte de Alibaba, dotée de capacités explicites en programmation ou en génie logiciel." + }, + "id": { + "description": "Qwen3 Max 2026-01-23 adalah versi model mandiri dari Alibaba dengan kemampuan pemrograman atau rekayasa perangkat lunak yang dinyatakan secara jelas." + }, + "ja": { + "description": "Qwen3 Max 2026-01-23 は Alibaba が公開した独立したモデル版で、プログラミングまたはソフトウェアエンジニアリング能力を明示しています。" + }, + "ko": { + "description": "Qwen3 Max 2026-01-23은(는) Alibaba가 공개한 독립 모델 버전으로, 프로그래밍 또는 소프트웨어 엔지니어링 기능을 명시적으로 제공합니다." + }, + "pt": { + "description": "Qwen3 Max 2026-01-23 é uma versão de modelo independente da Alibaba, com capacidades explícitas de programação ou engenharia de software." + }, + "ru": { + "description": "Qwen3 Max 2026-01-23 — самостоятельная версия модели от Alibaba с явно заявленными возможностями программирования или разработки ПО." + }, + "tr": { + "description": "Qwen3 Max 2026-01-23, Alibaba tarafından yayımlanan ve açıkça belirtilmiş programlama veya yazılım mühendisliği yeteneklerine sahip bağımsız bir model sürümüdür." + }, + "zh-Hant": { + "description": "Qwen3 Max 2026-01-23 是 Alibaba 發布的獨立模型版本,具備明確的程式設計或軟體工程能力。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://help.aliyun.com/en/model-studio/coding-plan", + "title": "Qwen3 Max 2026-01-23 official documentation", + "fields": [ + "name", + "description", + "docsUrl", + "size", + "contextWindow", + "maxOutput", + "releaseDate", + "lifecycle", + "knowledgeCutoff", + "inputModalities", + "outputModalities", + "capabilities" + ] + }, + { + "url": "https://help.aliyun.com/en/model-studio/model-pricing", + "title": "Alibaba Cloud Model Studio model pricing", + "fields": ["tokenPricing"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.alibabacloud.com", + "docsUrl": "https://help.aliyun.com/en/model-studio/coding-plan", + "vendor": "Alibaba", + "size": null, + "contextWindow": 262144, + "maxOutput": 65536, + "tokenPricing": { + "status": "available", + "primaryOffer": "cn-standard", + "offers": [ + { + "id": "cn-standard", + "currency": "CNY", + "region": "CN", + "serviceTier": "standard", + "effectiveFrom": null, + "effectiveTo": null, + "tiers": [ + { + "condition": { "metric": "inputTokens", "min": 1, "max": 32000 }, + "rates": { + "input": 2.5, + "output": 10, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 32001, "max": 128000 }, + "rates": { + "input": 4, + "output": 16, + "cacheRead": null, + "cacheWrite": null + } + }, + { + "condition": { "metric": "inputTokens", "min": 128001, "max": 256000 }, + "rates": { + "input": 7, + "output": 28, + "cacheRead": null, + "cacheWrite": null + } + } + ] + } + ] + }, + "releaseDate": "2026-01-23", + "lifecycle": "maintained", + "knowledgeCutoff": null, + "inputModalities": ["text"], + "outputModalities": ["text"], + "capabilities": ["function-calling", "tool-choice", "structured-outputs", "reasoning"], + "benchmarks": { + "sweBench": null, + "terminalBench": null, + "mmmu": null, + "mmmuPro": null, + "webDevArena": null, + "sciCode": null, + "liveCodeBench": null + }, + "platformUrls": { + "huggingface": null, + "artificialAnalysis": null, + "openrouter": null + } +} diff --git a/manifests/providers/kwaikatonai.json b/manifests/providers/kwaikatonai.json index 9b9e62f3..f9834dbb 100644 --- a/manifests/providers/kwaikatonai.json +++ b/manifests/providers/kwaikatonai.json @@ -41,7 +41,7 @@ "verified": false, "websiteUrl": "https://kwaikatonai.com", "docsUrl": "https://openrouter.ai/kwaipilot", - "vendor": "Kwai", + "vendor": "StreamLake", "type": "foundation-model-provider", "applyKeyUrl": null, "platformUrls": { diff --git a/manifests/vendors/anomaly.json b/manifests/vendors/anomaly.json new file mode 100644 index 00000000..3c353da3 --- /dev/null +++ b/manifests/vendors/anomaly.json @@ -0,0 +1,66 @@ +{ + "$schema": "../$schemas/vendor.schema.json", + "id": "anomaly", + "name": "Anomaly", + "aliases": ["Anomaly Co."], + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces.", + "translations": { + "de": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "es": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "fr": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "id": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "ja": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "ko": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "pt": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "ru": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "tr": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "zh-Hans": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + }, + "zh-Hant": { + "description": "Anomaly develops OpenCode, an open source coding agent available across terminal, desktop, and editor surfaces." + } + }, + "verified": false, + "sources": [ + { + "url": "https://anoma.ly", + "title": "Anomaly official site" + }, + { + "url": "https://github.com/anomalyco", + "title": "Anomaly GitHub organization" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://anoma.ly", + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/opencode", + "github": "https://github.com/anomalyco", + "youtube": null, + "discord": "https://discord.gg/opencode", + "reddit": null, + "blog": null + } +} diff --git a/manifests/vendors/atlassian.json b/manifests/vendors/atlassian.json new file mode 100644 index 00000000..9592e08d --- /dev/null +++ b/manifests/vendors/atlassian.json @@ -0,0 +1,65 @@ +{ + "$schema": "../$schemas/vendor.schema.json", + "id": "atlassian", + "name": "Atlassian", + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent.", + "translations": { + "de": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "es": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "fr": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "id": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "ja": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "ko": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "pt": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "ru": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "tr": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "zh-Hans": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + }, + "zh-Hant": { + "description": "Atlassian develops collaboration and DevOps products including Jira, Confluence, Bitbucket, and the Rovo Dev coding agent." + } + }, + "verified": false, + "sources": [ + { + "url": "https://www.atlassian.com/company", + "title": "About Atlassian" + }, + { + "url": "https://www.atlassian.com/software/rovo-dev", + "title": "Rovo Dev" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://www.atlassian.com", + "communityUrls": { + "linkedin": "https://www.linkedin.com/company/atlassian", + "twitter": "https://x.com/Atlassian", + "github": "https://github.com/atlassian", + "youtube": "https://www.youtube.com/@Atlassian", + "discord": null, + "reddit": "https://www.reddit.com/r/atlassian", + "blog": "https://www.atlassian.com/blog" + } +} diff --git a/manifests/vendors/cline-bot.json b/manifests/vendors/cline-bot.json deleted file mode 100644 index 207f1cd9..00000000 --- a/manifests/vendors/cline-bot.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "id": "cline-bot", - "name": "Cline Bot", - "description": "Cline Bot is a vendor.", - "translations": { - "zh-Hans": { - "description": "Cline CLI 支持从终端无头执行任务并将 Cline 集成到任何地方。使用它通过协作 AI 驱动 GitHub Actions、Discord 机器人和 Linear 工单。" - }, - "de": { - "description": "Cline CLI ermöglicht headless Aufgabenausführung vom Terminal und integriert Cline überall. Verwenden Sie es, um GitHub Actions, Discord-Bots und Linear-Tickets mit kollaborativer AI zu betreiben." - }, - "ko": { - "description": "Cline CLI는 터미널에서 헤드리스 작업 실행을 지원하고 Cline을 어디서든 통합할 수 있습니다. 협업 AI로 GitHub Actions, Discord 봇 및 Linear 티켓을 구동하는 데 사용하세요." - }, - "es": { - "description": "Cline CLI permite ejecucion de tareas sin interfaz desde el terminal e integra Cline en cualquier lugar. Usalo para GitHub Actions, bots Discord y tickets Linear." - }, - "fr": { - "description": "Cline CLI permet l'execution de taches sans interface desde le terminal et integre Cline partout. Utilisez-le pour alimenter GitHub Actions, bots Discord et tickets Linear avec l'IA collaborative." - }, - "id": { - "description": "Cline CLI memungkinkan eksekusi tugas tanpa antarmuka dari terminal dan mengintegrasikan Cline di mana saja. Gunakan untuk GitHub Actions, bot Discord, dan tiket Linear." - }, - "ja": { - "description": "Cline CLIは、ターミナルからのヘッドレスタスク実行を可能にし、どこでもClineを統合できます。協調型AIでGitHub Actions、Discord bot、Linearチケットを駆動するために使用します。" - }, - "pt": { - "description": "Cline CLI permite execucao de tarefas sem cabeca do terminal e integra o Cline em qualquer lugar. Use-o para GitHub Actions, bots do Discord e tickets do Linear." - }, - "ru": { - "description": "Cline CLI позволяет выполнять задачи без интерфейса из терминала и интегрирует Cline везде. Используйте его для питания GitHub Actions, ботов Discord и билетов Linear с помощью коллаборативного ИИ." - }, - "tr": { - "description": "Cline CLI, terminalden kafasiz gorev yurutme enable eder ve Cline'i her yere entegre eder. Isbirlikci AI ile GitHub Actions, Discord botlari ve Linear biletlerini guclendirmek icin kullanin." - }, - "zh-Hant": { - "description": "Cline CLI 支援從終端無介面執行任務並將 Cline 整合到任何地方。使用它透過協作 AI 驅動 GitHub Actions、Discord 機器人和 Linear 工單。" - } - }, - "verified": false, - "websiteUrl": "https://cline.bot/cline-cli", - "communityUrls": { - "linkedin": "https://www.linkedin.com/company/clinebot", - "twitter": "https://x.com/clinebot", - "github": null, - "youtube": null, - "discord": null, - "reddit": "https://www.reddit.com/r/cline", - "blog": "https://cline.bot/blog" - } -} diff --git a/manifests/vendors/cline.json b/manifests/vendors/cline.json index aca22061..d8f50eb7 100644 --- a/manifests/vendors/cline.json +++ b/manifests/vendors/cline.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/vendor.schema.json", "id": "cline", "name": "Cline", + "aliases": ["Cline Bot"], "description": "Open-source autonomous coding agent for VS Code with model-agnostic design, MCP integration, and human-in-the-loop approval, trusted by 4M+ developers worldwide.", "translations": { "zh-Hans": { diff --git a/manifests/vendors/continue-dev.json b/manifests/vendors/continue-dev.json deleted file mode 100644 index cc959204..00000000 --- a/manifests/vendors/continue-dev.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "id": "continue-dev", - "name": "Continue Dev", - "description": "Continue Dev is a vendor.", - "translations": { - "zh-Hans": { - "description": "开源 CLI Agent,将持续 AI 带到您的终端。使用任何模型构建和运行自定义 Agent,定义您自己的规则,并集成 MCP 工具,无供应商锁定。" - }, - "de": { - "description": "Open-Source CLI-Agent, der kontinuierliche AI in Ihr Terminal bringt. Erstellen Sie Agenten mit jedem Modell, definieren Sie Regeln und integrieren Sie MCP-Tools ohne Vendor-Lock-in." - }, - "ko": { - "description": "지속적인 AI를 터미널로 가져오는 오픈 소스 CLI 에이전트입니다. 모든 모델로 사용자 지정 에이전트를 구축하고 실행하며, 규칙을 정의하고 MCP 도구를 통합하여 공급업체 종속성을 피할 수 있습니다." - }, - "es": { - "description": "Agente CLI open source que trae IA continua a terminal. Construye agentes personalizados con modelo, define reglas y herramientas MCP sin bloqueo." - }, - "fr": { - "description": "Agent CLI open source qui apporte une IA continue a terminal. Construisez et executez des agents personnalises, definissez regles et integrez outils MCP." - }, - "id": { - "description": "Agen CLI open source yang membawa AI berkelanjutan ke terminal. Membangun agen kustom dengan model, menentukan aturan dan mengintegrasikan alat MCP tanpa vendor." - }, - "ja": { - "description": "継続的なAIをターミナルにもたらすオープンソースCLIエージェント。任意のモデルでカスタムエージェントを構築・実行し、独自のルールを定義し、ベンダーロックインなしでMCPツールを統合します。" - }, - "pt": { - "description": "Agente CLI open source que traz IA continua ao terminal. Construa agentes personalizados com modelo, defina regras e integre ferramentas MCP sem bloqueio." - }, - "ru": { - "description": "Открытый агент CLI приносит непрерывный ИИ в терминал. Создавайте пользовательские агенты с моделью, определяйте правила и интегрируйте MCP без блокировки." - }, - "tr": { - "description": "Surekli AI getiren acik kaynakli CLI aracidir. Herhangi bir modelle ozel aracilar insa edin ve calistirin, kendi kurallarinizi belirleyin, satci kilitlenmesi olmadan MCP entegre edin." - }, - "zh-Hant": { - "description": "開源 CLI Agent,將持續 AI 帶到您的終端。使用任何模型建構和執行自訂 Agent,定義您自己的規則,並整合 MCP 工具,無供應商鎖定。" - } - }, - "verified": false, - "websiteUrl": "https://www.continue.dev", - "communityUrls": { - "linkedin": null, - "twitter": null, - "github": "https://github.com/continuedev/continue", - "youtube": null, - "discord": "https://discord.gg/continue", - "reddit": null, - "blog": "https://www.continue.dev/blog" - } -} diff --git a/manifests/vendors/continue.json b/manifests/vendors/continue.json index 9b078394..99e5a410 100644 --- a/manifests/vendors/continue.json +++ b/manifests/vendors/continue.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/vendor.schema.json", "id": "continue", "name": "Continue", + "aliases": ["Continue Dev"], "description": "Open-source platform enabling developers to automate coding workflows through background agents, CLI tools, and IDE integrations with multi-model support.", "translations": { "zh-Hans": { diff --git a/manifests/vendors/factory-ai.json b/manifests/vendors/factory-ai.json index a992921f..83f27cc1 100644 --- a/manifests/vendors/factory-ai.json +++ b/manifests/vendors/factory-ai.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/vendor.schema.json", "id": "factory-ai", "name": "Factory AI", + "aliases": ["Factory.ai"], "description": "Agent-native software development company building autonomous AI Droids that automate the software development lifecycle, saving enterprises over 500,000 engineering hours.", "translations": { "zh-Hans": { diff --git a/manifests/vendors/gitlab.json b/manifests/vendors/gitlab.json new file mode 100644 index 00000000..7b952119 --- /dev/null +++ b/manifests/vendors/gitlab.json @@ -0,0 +1,65 @@ +{ + "$schema": "../$schemas/vendor.schema.json", + "id": "gitlab", + "name": "GitLab", + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools.", + "translations": { + "de": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "es": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "fr": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "id": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "ja": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "ko": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "pt": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "ru": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "tr": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "zh-Hans": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + }, + "zh-Hant": { + "description": "GitLab is a DevSecOps platform company providing source control, CI/CD, collaboration, and AI-assisted software development tools." + } + }, + "verified": false, + "sources": [ + { + "url": "https://about.gitlab.com/company/", + "title": "About GitLab" + }, + { + "url": "https://github.com/gitlabhq", + "title": "GitLab GitHub organization" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://about.gitlab.com", + "communityUrls": { + "linkedin": "https://www.linkedin.com/company/gitlab-com", + "twitter": "https://x.com/gitlab", + "github": "https://github.com/gitlabhq", + "youtube": "https://www.youtube.com/@GitLab", + "discord": null, + "reddit": null, + "blog": "https://about.gitlab.com/blog" + } +} diff --git a/manifests/vendors/kwai.json b/manifests/vendors/kwai.json deleted file mode 100644 index 49c4950c..00000000 --- a/manifests/vendors/kwai.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "id": "kwai", - "name": "Kwai", - "description": "Kwai is a vendor.", - "translations": { - "zh-Hans": { - "description": "快手的 AI 研究实验室,开发先进的编码模型和 AI 助手。" - }, - "de": { - "description": "Kwais KI-Forschungslabor für die Entwicklung fortschrittlicher Codierungsmodelle und KI-Assistenten." - }, - "ko": { - "description": "Kwai의 AI 연구소로 고급 코딩 모델과 AI 어시스턴트를 개발합니다." - }, - "es": { - "description": "Laboratorio de investigación de IA de Kwai que desarrolla modelos de codificación avanzados y asistentes de IA." - }, - "fr": { - "description": "Le laboratoire de recherche IA de Kwai développant des modèles de codage avancés et des assistants IA." - }, - "id": { - "description": "Laboratorium penelitian AI Kwai yang mengembangkan model coding canggih dan asisten AI." - }, - "ja": { - "description": "高度なコーディングモデルとAIアシスタントを開発するKwaiのAI研究ラボ。" - }, - "pt": { - "description": "Laboratorio de pesquisa de IA da Kwai desenvolvendo modelos de codificacao avancados e assistentes de IA." - }, - "ru": { - "description": "Исследовательская лаборатория ИИ Kwai, разрабатывающая передовые модели кодирования и ИИ-ассистенты." - }, - "tr": { - "description": "Kwai'nin ileri duzey kodlama modelleri ve yardimci sise gelistirilen AI arastirma laboratuvari." - }, - "zh-Hant": { - "description": "快手的 AI 研究實驗室,開發先進的編碼模型和 AI 助手。" - } - }, - "verified": false, - "websiteUrl": "https://kwaikatonai.com", - "communityUrls": { - "linkedin": null, - "twitter": null, - "github": null, - "youtube": null, - "discord": null, - "reddit": null, - "blog": null - } -} diff --git a/manifests/vendors/kwaikat.json b/manifests/vendors/kwaikat.json deleted file mode 100644 index 3e0c581a..00000000 --- a/manifests/vendors/kwaikat.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "id": "kwaikat", - "name": "KwaiKAT", - "description": "KwaiKAT is a vendor.", - "translations": { - "zh-Hans": { - "description": "KwaiKAT 最先进的代理编码模型,属于 KAT-Coder 系列。专为自主编程设计,具备工具调用、多轮交互和指令遵循能力。" - }, - "de": { - "description": "KwaiKATs modernstes agentic Coding-Modell aus der KAT-Coder-Serie. Speziell fur autonomes Programmierung entwickelt mit Tool-Calling, Multi-Turn-Interaktion und Instruction-Following-Fahigkeiten." - }, - "ko": { - "description": "KwaiKAT의 KAT-Coder 시리즈에서 가장 진보된 에이전트 코딩 모델입니다. 도구 호출, 다중 턴 상호작용 및 명령 따르기 기능을 갖춘 자율 프로그래밍을 위해 설계되었습니다." - }, - "es": { - "description": "Modelo de codificacion agentico mas avanzado de KwaiKAT en la serie KAT-Coder. Diseñado para programacion autonoma con llamadas a herramientas, interaccion multi-turno y seguimiento de instrucciones." - }, - "fr": { - "description": "Le modele de codage agentique le plus avance de KwaiKAT dans la serie KAT-Coder. Conçu pour la programmation autonome avec appel d'outils, interaction multi-tours et suivi d'instructions." - }, - "id": { - "description": "Model coding agentik paling canggih dari KwaiKAT dalam seri KAT-Coder. Dirancang khusus untuk pemrograman otonom dengan kemampuan pemanggilan alat, interaksi multi-turn, dan pengikutan instruksi." - }, - "ja": { - "description": "KwaiKATのKAT-Coderシリーズで最も高度なエージェント型コーディングモデル。ツール呼び出し、マルチターン対話、命令追従機能を備えた自律プログラミング向けに設計されています。" - }, - "pt": { - "description": "Modelo de codificacao agentico mais avancado da KwaiKAT na serie KAT-Coder. Projetado para programacao autonoma com chamada de ferramentas, interacao multi-turno e seguimento de instrucoes." - }, - "ru": { - "description": "Самая продвинутая агентная модель кодирования KwaiKAT в серии KAT-Coder. Разработана для автономного программирования с вызовом инструментов, многоходового взаимодействия и выполнения инструкций." - }, - "tr": { - "description": "KwaiKAT'in KAT-Coder serisindeki en gelismis agentik kodlama modeli. Ara cagirma, cok turlu etkilesim ve talimat takip etme yetenekleri ile otonom programlama icin tasarlanmistir." - }, - "zh-Hant": { - "description": "KwaiKAT 最先進的代理編碼模型,屬於 KAT-Coder 系列。專為自主編程設計,具備工具調用、多輪交互和指令遵循能力。" - } - }, - "verified": false, - "websiteUrl": "https://openrouter.ai/kwaipilot", - "communityUrls": { - "linkedin": null, - "twitter": null, - "github": null, - "youtube": null, - "discord": null, - "reddit": null, - "blog": null - } -} diff --git a/manifests/vendors/mistral-ai.json b/manifests/vendors/mistral-ai.json new file mode 100644 index 00000000..5b7dbed1 --- /dev/null +++ b/manifests/vendors/mistral-ai.json @@ -0,0 +1,68 @@ +{ + "$schema": "../$schemas/vendor.schema.json", + "id": "mistral-ai", + "name": "Mistral AI", + "aliases": ["Mistral"], + "description": "European AI company developing open-weight and commercial frontier models, including Codestral and Devstral coding models, developer tools, and deployment infrastructure.", + "translations": { + "de": { + "description": "Europäisches KI-Unternehmen, das offene und kommerzielle Frontier-Modelle entwickelt, darunter die Coding-Modelle Codestral und Devstral sowie Entwicklerwerkzeuge und Bereitstellungsinfrastruktur." + }, + "es": { + "description": "Empresa europea de IA que desarrolla modelos abiertos y comerciales, incluidos Codestral y Devstral para programación, herramientas para desarrolladores e infraestructura de despliegue." + }, + "fr": { + "description": "Entreprise européenne d'IA développant des modèles de pointe ouverts et commerciaux, dont les modèles de code Codestral et Devstral, des outils de développement et une infrastructure de déploiement." + }, + "id": { + "description": "Perusahaan AI Eropa yang mengembangkan model frontier berbobot terbuka dan komersial, termasuk model coding Codestral dan Devstral, alat pengembang, serta infrastruktur deployment." + }, + "ja": { + "description": "CodestralやDevstralなどのコーディングモデル、開発者ツール、デプロイ基盤を含む、オープンウェイトおよび商用の最先端モデルを開発する欧州のAI企業です。" + }, + "ko": { + "description": "Codestral과 Devstral 코딩 모델, 개발자 도구 및 배포 인프라를 포함한 오픈 웨이트 및 상용 프런티어 모델을 개발하는 유럽 AI 기업입니다." + }, + "pt": { + "description": "Empresa europeia de IA que desenvolve modelos abertos e comerciais, incluindo Codestral e Devstral para programação, ferramentas de desenvolvimento e infraestrutura de implantação." + }, + "ru": { + "description": "Европейская ИИ-компания, разрабатывающая открытые и коммерческие передовые модели, включая модели для программирования Codestral и Devstral, инструменты разработчика и инфраструктуру развертывания." + }, + "tr": { + "description": "Codestral ve Devstral kodlama modelleri, geliştirici araçları ve dağıtım altyapısı dahil olmak üzere açık ağırlıklı ve ticari öncü modeller geliştiren Avrupalı yapay zeka şirketi." + }, + "zh-Hans": { + "description": "欧洲 AI 公司,开发开放权重和商业前沿模型,包括 Codestral、Devstral 编码模型,以及开发者工具和部署基础设施。" + }, + "zh-Hant": { + "description": "歐洲 AI 公司,開發開放權重和商業前沿模型,包括 Codestral、Devstral 編碼模型,以及開發者工具和部署基礎設施。" + } + }, + "verified": true, + "sources": [ + { + "url": "https://mistral.ai/about/", + "title": "About Mistral", + "fields": ["name", "description", "websiteUrl"] + }, + { + "url": "https://mistral.ai/models/", + "title": "Mistral models", + "fields": ["description"] + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex", + "confidence": "high", + "websiteUrl": "https://mistral.ai", + "communityUrls": { + "linkedin": null, + "twitter": null, + "github": "https://github.com/mistralai", + "youtube": null, + "discord": null, + "reddit": null, + "blog": "https://mistral.ai/news/" + } +} diff --git a/manifests/vendors/moonshot-ai.json b/manifests/vendors/moonshot-ai.json deleted file mode 100644 index 8a9effb5..00000000 --- a/manifests/vendors/moonshot-ai.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "$schema": "../$schemas/vendor.schema.json", - "id": "moonshot-ai", - "name": "Moonshot AI", - "description": "Chinese AI company developing large language models with long context capabilities, creator of Kimi chatbot and K-series models backed by Alibaba and Tencent.", - "translations": { - "zh-Hans": { - "description": "中国 AI 公司,开发具有长上下文能力的大型语言模型,创造了 Kimi 聊天机器人和 K 系列模型,由阿里巴巴和腾讯支持。" - }, - "de": { - "description": "Chinesisches AI-Unternehmen, das große Sprachmodelle mit langen Kontextfähigkeiten entwickelt, Schöpfer des Kimi-Chatbots." - }, - "ko": { - "description": "긴 컨텍스트 기능을 갖춘 대형 언어 모델을 개발하는 중국 AI 기업으로, Kimi 챗봇과 K 시리즈 모델을 만들었으며 알리바바와 텐센트의 지원을 받습니다." - }, - "es": { - "description": "Empresa china de IA desarrollando modelos de lenguaje grandes con capacidades de contexto largo, creadora del chatbot Kimi y modelos de la serie K, respaldada por Alibaba y Tencent." - }, - "fr": { - "description": "Societe chinoise IA developpant des modeles de langue grands avec capacites de contexte long, createur du chatbot Kimi et modeles de la serie K, soutenue par Alibaba et Tencent." - }, - "id": { - "description": "Perusahaan China AI mengembangkan model bahasa besar dengan kapasitas konteks panjang, pencipta chatbot Kimi dan seri model K, didukung oleh Alibaba dan Tencent." - }, - "ja": { - "description": "長いコンテキスト能力を持つ大規模言語モデルを開発する中国のAI企業で、KimiチャットボットとKシリーズモデルを作成し、AlibabaとTencentに支援されています。" - }, - "pt": { - "description": "Empresa China de IA desenvolvendo modelos de linguagem grandes com capacidades de contexto longo, criadora do chatbot Kimi e modelos da serie K, apoiada por Alibaba e Tencent." - }, - "ru": { - "description": "Китайская компания ИИ, разрабатывающая большие языковые модели с возможностями длинного контекста, создатель чат-бота Kimi и моделей серии K, поддерживаемая Alibaba и Tencent." - }, - "tr": { - "description": "Uzun bağlama özelliklerine sahip büyük dil modelleri developing Çin AI şirketi, Kimi chatbot ve K serisi model yaratıcısı, Alibaba ve Tencent tarafından destekleniyor." - }, - "zh-Hant": { - "description": "中國 AI 公司,開發具有長上下文能力的大型語言模型,創造了 Kimi 聊天機器人和 K 系列模型,由阿裡巴巴和騰訊支持。" - } - }, - "verified": false, - "websiteUrl": "https://www.moonshot.ai", - "communityUrls": { - "linkedin": null, - "twitter": null, - "github": "https://github.com/MoonshotAI", - "youtube": null, - "discord": null, - "reddit": null, - "blog": null - } -} diff --git a/manifests/vendors/moonshot.json b/manifests/vendors/moonshot.json index 2cd62d5a..e98ba27f 100644 --- a/manifests/vendors/moonshot.json +++ b/manifests/vendors/moonshot.json @@ -1,7 +1,8 @@ { "$schema": "../$schemas/vendor.schema.json", "id": "moonshot", - "name": "Moonshot", + "name": "Moonshot AI", + "aliases": ["Moonshot"], "description": "An AI company specializing in large language models and intelligent applications, known for the Kimi AI assistant.", "translations": { "zh-Hans": { diff --git a/manifests/vendors/oh-my-pi.json b/manifests/vendors/oh-my-pi.json new file mode 100644 index 00000000..7c0a6a7a --- /dev/null +++ b/manifests/vendors/oh-my-pi.json @@ -0,0 +1,66 @@ +{ + "$schema": "../$schemas/vendor.schema.json", + "id": "oh-my-pi", + "name": "Oh My Pi", + "aliases": ["omp", "Oh-My-Pi"], + "description": "Oh My Pi is the open source project behind omp, a terminal coding agent with LSP, debugger, subagent, multi-provider model, and native cross-platform tooling.", + "translations": { + "de": { + "description": "Oh My Pi ist das Open-Source-Projekt hinter omp, einem Terminal-Coding-Agent mit LSP, Debugger, Subagenten, mehreren Modellanbietern und nativen plattformübergreifenden Werkzeugen." + }, + "es": { + "description": "Oh My Pi es el proyecto de código abierto detrás de omp, un agente de terminal con LSP, depurador, subagentes, múltiples proveedores de modelos y herramientas nativas multiplataforma." + }, + "fr": { + "description": "Oh My Pi est le projet open source derrière omp, un agent de terminal avec LSP, débogueur, sous-agents, plusieurs fournisseurs de modèles et des outils natifs multiplateformes." + }, + "id": { + "description": "Oh My Pi adalah proyek sumber terbuka di balik omp, agen coding terminal dengan LSP, debugger, subagen, dukungan banyak penyedia model, dan perangkat lintas platform native." + }, + "ja": { + "description": "Oh My Piはompを開発するオープンソースプロジェクトです。ompはLSP、デバッガー、サブエージェント、複数のモデルプロバイダー、ネイティブなクロスプラットフォーム機能を備えたターミナル向けコーディングエージェントです。" + }, + "ko": { + "description": "Oh My Pi는 omp를 개발하는 오픈 소스 프로젝트입니다. omp는 LSP, 디버거, 하위 에이전트, 다중 모델 제공업체 및 네이티브 크로스 플랫폼 도구를 갖춘 터미널 코딩 에이전트입니다." + }, + "pt": { + "description": "Oh My Pi é o projeto open source por trás do omp, um agente de terminal com LSP, depurador, subagentes, vários provedores de modelos e ferramentas nativas multiplataforma." + }, + "ru": { + "description": "Oh My Pi — открытый проект, развивающий omp: терминальный агент с LSP, отладчиком, субагентами, поддержкой нескольких поставщиков моделей и нативными кроссплатформенными инструментами." + }, + "tr": { + "description": "Oh My Pi; LSP, hata ayıklayıcı, alt ajanlar, çoklu model sağlayıcı desteği ve yerel çapraz platform araçları sunan terminal kodlama ajanı omp'nin arkasındaki açık kaynak projedir." + }, + "zh-Hans": { + "description": "Oh My Pi 是 omp 背后的开源项目;omp 是一款终端编码 Agent,支持 LSP、调试器、子 Agent、多模型提供商和原生跨平台工具。" + }, + "zh-Hant": { + "description": "Oh My Pi 是 omp 背後的開源專案;omp 是一款終端編碼 Agent,支援 LSP、除錯器、子 Agent、多模型供應商和原生跨平台工具。" + } + }, + "verified": false, + "sources": [ + { + "url": "https://omp.sh", + "title": "omp official site" + }, + { + "url": "https://github.com/can1357/oh-my-pi", + "title": "Oh My Pi official repository" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://omp.sh", + "communityUrls": { + "linkedin": null, + "twitter": null, + "github": "https://github.com/can1357/oh-my-pi", + "youtube": null, + "discord": "https://discord.com/invite/4NMW9cdXZa", + "reddit": null, + "blog": null + } +} diff --git a/manifests/vendors/stagewise.json b/manifests/vendors/stagewise.json new file mode 100644 index 00000000..20174c14 --- /dev/null +++ b/manifests/vendors/stagewise.json @@ -0,0 +1,65 @@ +{ + "$schema": "../$schemas/vendor.schema.json", + "id": "stagewise", + "name": "stagewise", + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows.", + "translations": { + "de": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "es": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "fr": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "id": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "ja": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "ko": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "pt": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "ru": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "tr": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "zh-Hans": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + }, + "zh-Hant": { + "description": "stagewise develops an open source desktop coding agent focused on parallel agent sessions, isolated worktrees, and local development workflows." + } + }, + "verified": false, + "sources": [ + { + "url": "https://stagewise.io/", + "title": "stagewise official site" + }, + { + "url": "https://github.com/stagewise-io", + "title": "stagewise GitHub organization" + } + ], + "lastVerifiedAt": "2026-07-21", + "verifiedBy": "codex-agent", + "confidence": "high", + "websiteUrl": "https://stagewise.io", + "communityUrls": { + "linkedin": null, + "twitter": "https://x.com/stagewise_io", + "github": "https://github.com/stagewise-io", + "youtube": null, + "discord": "https://discord.gg/stagewise", + "reddit": null, + "blog": null + } +} diff --git a/manifests/vendors/streamlake.json b/manifests/vendors/streamlake.json index fa300841..a7a99408 100644 --- a/manifests/vendors/streamlake.json +++ b/manifests/vendors/streamlake.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/vendor.schema.json", "id": "streamlake", "name": "StreamLake", + "aliases": ["Kwai", "Kuaishou"], "description": "Video cloud service brand of Kuaishou providing live streaming, video processing, and content delivery capabilities leveraging experience from short-video platform operations.", "translations": { "zh-Hans": { diff --git a/manifests/vendors/z-ai.json b/manifests/vendors/z-ai.json index d51f719e..2460fb5f 100644 --- a/manifests/vendors/z-ai.json +++ b/manifests/vendors/z-ai.json @@ -2,6 +2,7 @@ "$schema": "../$schemas/vendor.schema.json", "id": "z-ai", "name": "Z.ai", + "aliases": ["z-ai"], "description": "An AI platform offering advanced language models and AI services for various applications including coding and content generation.", "translations": { "zh-Hans": { diff --git a/scripts/fetch/compare-models.ts b/scripts/fetch/compare-models.ts index a0090eaf..cd2ffbfb 100644 --- a/scripts/fetch/compare-models.ts +++ b/scripts/fetch/compare-models.ts @@ -80,6 +80,34 @@ interface MappingData { models: Record } +function getPrimaryManifestRates(manifest: { + tokenPricing?: { + status?: string + primaryOffer?: string | null + offers?: Array<{ + id: string + tiers: Array<{ + rates: { + input: number | null + output: number | null + cacheRead: number | null + } + }> + }> + } +}): { input: number | null; output: number | null; cacheRead: number | null } { + const pricing = manifest.tokenPricing + if (pricing?.status !== 'available') return { input: null, output: null, cacheRead: null } + const offer = + pricing.offers?.find(candidate => candidate.id === pricing.primaryOffer) ?? pricing.offers?.[0] + const rates = offer?.tiers[0]?.rates + return { + input: rates?.input ?? null, + output: rates?.output ?? null, + cacheRead: rates?.cacheRead ?? null, + } +} + // Helper to compare values and return match status function compare( manifestValue: unknown, @@ -223,41 +251,42 @@ async function main(): Promise { }) // Compare tokenPricing + const manifestRates = getPrimaryManifestRates(manifest) const inputPriceMatch = compare( - manifest.tokenPricing.input, + manifestRates.input, normalizedApi.tokenPricing.input, 'input', 'input' ) comparisons.push({ field: 'tokenPricing.input', - manifestKey: 'tokenPricing.input', + manifestKey: 'tokenPricing.offers[].tiers[].rates.input', apiKey: 'cost.input', ...inputPriceMatch, }) const outputPriceMatch = compare( - manifest.tokenPricing.output, + manifestRates.output, normalizedApi.tokenPricing.output, 'output', 'output' ) comparisons.push({ field: 'tokenPricing.output', - manifestKey: 'tokenPricing.output', + manifestKey: 'tokenPricing.offers[].tiers[].rates.output', apiKey: 'cost.output', ...outputPriceMatch, }) const cachePriceMatch = compare( - manifest.tokenPricing.cache, + manifestRates.cacheRead, normalizedApi.tokenPricing.cache, 'cache', 'cache_read' ) comparisons.push({ - field: 'tokenPricing.cache', - manifestKey: 'tokenPricing.cache', + field: 'tokenPricing.cacheRead', + manifestKey: 'tokenPricing.offers[].tiers[].rates.cacheRead', apiKey: 'cost.cache_read', ...cachePriceMatch, }) diff --git a/scripts/fetch/fetch-github-stars.ts b/scripts/fetch/fetch-github-stars.ts index 68f24921..58833a6f 100644 --- a/scripts/fetch/fetch-github-stars.ts +++ b/scripts/fetch/fetch-github-stars.ts @@ -33,6 +33,10 @@ const dirsConfig: DirConfig[] = [ directory: 'manifests/clis', category: 'clis', }, + { + directory: 'manifests/desktops', + category: 'desktops', + }, ] interface GithubRepo { @@ -60,6 +64,7 @@ interface DirectoryResult { interface StarsData { extensions: Record clis: Record + desktops: Record ides: Record [key: string]: Record } @@ -238,7 +243,7 @@ async function main(): Promise { } // Load existing stars data or create new structure - let starsData: StarsData = { extensions: {}, clis: {}, ides: {} } + let starsData: StarsData = { extensions: {}, clis: {}, desktops: {}, ides: {} } if (fs.existsSync(GITHUB_STARS_FILE)) { try { const content = fs.readFileSync(GITHUB_STARS_FILE, 'utf8') diff --git a/scripts/generate/generate-manifest-indexes.ts b/scripts/generate/generate-manifest-indexes.ts index e4470c44..a3897c31 100644 --- a/scripts/generate/generate-manifest-indexes.ts +++ b/scripts/generate/generate-manifest-indexes.ts @@ -21,13 +21,22 @@ const MANIFESTS_DIR = path.join(__dirname, '../../manifests') const OUTPUT_DIR = path.join(__dirname, '../../src/lib/generated') // Manifest types to process -const MANIFEST_TYPES = ['ides', 'clis', 'models', 'providers', 'extensions', 'vendors'] as const +const MANIFEST_TYPES = [ + 'ides', + 'clis', + 'desktops', + 'models', + 'providers', + 'extensions', + 'vendors', +] as const type ManifestType = (typeof MANIFEST_TYPES)[number] interface ImportData { varName: string statement: string + sortKey: string } /** @@ -80,11 +89,11 @@ function generateIndexFile(typeName: ManifestType): void { const id = file.replace('.json', '') const varName = toPascalCase(id) const relativePath = `../../../manifests/${typeName}/${file}` - return { varName, statement: `import ${varName} from '${relativePath}'` } + return { varName, statement: `import ${varName} from '${relativePath}'`, sortKey: relativePath } }) // Sort imports alphabetically by variable name - importData.sort((a, b) => a.varName.localeCompare(b.varName)) + importData.sort((a, b) => a.sortKey.localeCompare(b.sortKey, 'en', { numeric: true })) const imports = importData.map(item => item.statement).join('\n') // Generate array export using sorted variable names @@ -105,6 +114,7 @@ function generateIndexFile(typeName: ManifestType): void { const typeImportMap: Record = { ides: 'ManifestIDE', clis: 'ManifestCLI', + desktops: 'ManifestDesktop', models: 'ManifestModel', providers: 'ManifestProvider', extensions: 'ManifestExtension', @@ -157,7 +167,7 @@ function generateMainIndex(): void { .sort((a, b) => { const typeA = a.type.match(/\{ (\w+) \}/)?.[1] || '' const typeB = b.type.match(/\{ (\w+) \}/)?.[1] || '' - return typeA.localeCompare(typeB) + return typeA.localeCompare(typeB, 'en', { numeric: true }) }) .flatMap(item => [item.type, item.data]) .join('\n') @@ -203,7 +213,7 @@ export const githubStarsData = githubStarsJson as GithubStarsData /** * Get GitHub stars for a specific product - * @param category - The product category (extensions, clis, ides) + * @param category - The product category (extensions, clis, desktops, ides) * @param id - The product ID * @returns The number of stars (in thousands) or null if not available */ @@ -255,14 +265,14 @@ function main(): void { console.log('✅ All index files generated successfully!') console.log('='.repeat(60)) - // Run biome formatting on generated files - console.log(`\n🎨 Formatting generated files with Biome...`) + // Format generated files and organize imports with the repository's Biome rules. + console.log(`\n🎨 Checking generated files with Biome...`) try { - execSync(`npx biome format --write ${OUTPUT_DIR}`, { + execSync(`npx biome check --write ${OUTPUT_DIR}`, { cwd: path.join(__dirname, '../..'), stdio: 'inherit', }) - console.log(`✅ Formatting complete`) + console.log(`✅ Formatting and import organization complete`) } catch (error) { console.error(`⚠️ Biome formatting failed:`, (error as Error).message) } diff --git a/scripts/generate/generate-metadata.ts b/scripts/generate/generate-metadata.ts index 138c33d1..cb279340 100644 --- a/scripts/generate/generate-metadata.ts +++ b/scripts/generate/generate-metadata.ts @@ -243,6 +243,7 @@ function generateStackCounts(): Record { const manifestDirectories: Record = { ides: 'ides', clis: 'clis', + desktops: 'desktops', extensions: 'extensions', models: 'models', 'model-providers': 'providers', diff --git a/scripts/refactor/export-vendors.ts b/scripts/refactor/export-vendors.ts index e0df5697..032b5033 100644 --- a/scripts/refactor/export-vendors.ts +++ b/scripts/refactor/export-vendors.ts @@ -37,6 +37,7 @@ interface CommunityUrls { interface VendorObject { id: string name: string + aliases?: string[] description: string translations: Record verified: boolean @@ -59,6 +60,10 @@ function vendorNameToId(vendorName: string): string { .replace(/^-|-$/g, '') } +function normalizeVendorName(vendorName: string): string { + return vendorName.trim().toLocaleLowerCase() +} + /** * Load and parse a JSON file * @param filePath - Path to the JSON file @@ -105,6 +110,36 @@ async function getJsonFiles(dirPath: string): Promise { } } +/** + * Build a lookup from canonical vendor names and aliases to their stable IDs. + * Conflicting identities are rejected so an alias can never point at two vendors. + */ +async function loadVendorIdentityIndex(): Promise> { + const identityIndex = new Map() + + for (const vendorFile of await getJsonFiles(VENDORS_DIR)) { + const vendor = await loadJSON(vendorFile) + const vendorId = vendor.id as string + const names = [ + vendor.name as string, + ...(Array.isArray(vendor.aliases) ? (vendor.aliases as string[]) : []), + ] + + for (const name of names) { + const identity = normalizeVendorName(name) + const existingVendorId = identityIndex.get(identity) + if (existingVendorId && existingVendorId !== vendorId) { + throw new Error( + `Vendor identity "${name}" is claimed by both ${existingVendorId} and ${vendorId}` + ) + } + identityIndex.set(identity, vendorId) + } + } + + return identityIndex +} + /** * Merge community URLs objects * Priority: existing value > new value (if existing is null/undefined, use new) @@ -243,7 +278,8 @@ function createVendorObject(vendorId: string, vendorData: VendorData): VendorObj */ async function processManifest( manifestPath: string, - vendorsMap: Map + vendorsMap: Map, + identityIndex: Map ): Promise { try { const manifest = await loadJSON(manifestPath) @@ -253,7 +289,8 @@ async function processManifest( return } - const vendorId = vendorNameToId(vendorData.name) + const vendorId = + identityIndex.get(normalizeVendorName(vendorData.name)) ?? vendorNameToId(vendorData.name) // If vendor already exists in map, merge the data if (vendorsMap.has(vendorId)) { @@ -274,7 +311,8 @@ async function processManifest( */ async function processCategory( categoryDir: string, - vendorsMap: Map + vendorsMap: Map, + identityIndex: Map ): Promise { const jsonFiles = await getJsonFiles(categoryDir) @@ -283,7 +321,7 @@ async function processCategory( } for (const jsonFile of jsonFiles) { - await processManifest(jsonFile, vendorsMap) + await processManifest(jsonFile, vendorsMap, identityIndex) } } @@ -294,17 +332,18 @@ async function main(): Promise { console.log('🔄 Exporting vendors from manifest files...\n') // Categories to process - const categories = ['ides', 'clis', 'extensions', 'models', 'providers'] + const categories = ['ides', 'clis', 'desktops', 'extensions', 'models', 'providers'] // Map to store vendor data (vendorId -> vendorData) const vendorsMap = new Map() + const identityIndex = await loadVendorIdentityIndex() // Process all categories for (const category of categories) { const categoryDir = path.join(MANIFESTS_DIR, category) console.log(`📁 Processing ${category}/...`) - await processCategory(categoryDir, vendorsMap) + await processCategory(categoryDir, vendorsMap, identityIndex) } console.log(`\n📊 Found ${vendorsMap.size} unique vendors\n`) diff --git a/scripts/refactor/sort-manifest-fields.ts b/scripts/refactor/sort-manifest-fields.ts index 02ea0688..802c0ddd 100644 --- a/scripts/refactor/sort-manifest-fields.ts +++ b/scripts/refactor/sort-manifest-fields.ts @@ -992,6 +992,7 @@ async function main(): Promise { { dir: 'providers', schema: 'provider.schema.json' }, { dir: 'models', schema: 'model.schema.json' }, { dir: 'ides', schema: 'ide.schema.json' }, + { dir: 'desktops', schema: 'desktop.schema.json' }, { dir: 'extensions', schema: 'extension.schema.json' }, { dir: 'clis', schema: 'cli.schema.json' }, ] diff --git a/scripts/validate/changelog.ts b/scripts/validate/changelog.ts index 4ca6c09b..9906fbf6 100644 --- a/scripts/validate/changelog.ts +++ b/scripts/validate/changelog.ts @@ -8,6 +8,7 @@ import { fileURLToPath } from 'node:url' const MANIFEST_CATEGORIES = [ 'ides', 'clis', + 'desktops', 'extensions', 'models', 'providers', @@ -91,7 +92,7 @@ function parseManifestPath(filePath: string): { category: ManifestCategory; id: export function collectManifestChanges(rootDir: string, base: string): ManifestChange[] { const manifestPaths = MANIFEST_CATEGORIES.map(category => `manifests/${category}`) - const output = runGit(rootDir, [ + const trackedOutput = runGit(rootDir, [ 'diff', '--name-status', '--find-renames', @@ -99,10 +100,21 @@ export function collectManifestChanges(rootDir: string, base: string): ManifestC '--', ...manifestPaths, ]) - if (!output) return [] + const untrackedOutput = runGit(rootDir, [ + 'ls-files', + '--others', + '--exclude-standard', + '--', + ...manifestPaths, + ]) + const lines = [ + ...(trackedOutput ? trackedOutput.split('\n') : []), + ...(untrackedOutput ? untrackedOutput.split('\n').map(filePath => `A\t${filePath}`) : []), + ] + if (lines.length === 0) return [] const changes: ManifestChange[] = [] - for (const line of output.split('\n')) { + for (const line of lines) { const [status = '', firstPath, secondPath] = line.split('\t') const paths = status.startsWith('R') ? [firstPath, secondPath] : [firstPath] for (const filePath of paths.filter((value): value is string => Boolean(value))) { diff --git a/scripts/validate/data-health.ts b/scripts/validate/data-health.ts index c855a699..486c9dd4 100644 --- a/scripts/validate/data-health.ts +++ b/scripts/validate/data-health.ts @@ -7,6 +7,7 @@ import { fileURLToPath } from 'node:url' export const MANIFEST_CATEGORIES = [ 'ides', 'clis', + 'desktops', 'extensions', 'models', 'providers', @@ -21,6 +22,7 @@ const FRESHNESS_THRESHOLDS: Record = { providers: 30, ides: 60, clis: 60, + desktops: 60, extensions: 60, vendors: 90, } @@ -28,6 +30,7 @@ const FRESHNESS_THRESHOLDS: Record = { const RELATED_PRODUCT_CATEGORIES: Record = { ide: 'ides', cli: 'clis', + desktop: 'desktops', extension: 'extensions', } @@ -148,7 +151,7 @@ function countPricingCoverage(records: ManifestRecord[]): { total: number } { const products = records.filter(record => - ['ides', 'clis', 'extensions'].includes(record.category) + ['ides', 'clis', 'desktops', 'extensions'].includes(record.category) ) return { covered: products.filter( diff --git a/scripts/validate/lib/routes.ts b/scripts/validate/lib/routes.ts index fbeb4534..fddb8f16 100644 --- a/scripts/validate/lib/routes.ts +++ b/scripts/validate/lib/routes.ts @@ -22,6 +22,7 @@ export function getStaticRoutes(): string[] { '/', '/ides', '/clis', + '/desktops', '/extensions', '/models', '/model-providers', @@ -122,6 +123,7 @@ export function getDynamicRoutes(): DynamicRoute[] { return [ { path: '/ides', category: 'ides' }, { path: '/clis', category: 'clis' }, + { path: '/desktops', category: 'desktops' }, { path: '/extensions', category: 'extensions' }, { path: '/models', category: 'models' }, { path: '/model-providers', category: 'providers' }, diff --git a/src/app/[locale]/ai-coding-stack/page.tsx b/src/app/[locale]/ai-coding-stack/page.tsx index 715b5e2f..d852557c 100644 --- a/src/app/[locale]/ai-coding-stack/page.tsx +++ b/src/app/[locale]/ai-coding-stack/page.tsx @@ -45,6 +45,7 @@ export default async function AICodingStackPage({ params }: LocalePageProps) { {[ { key: 'ides', path: 'ides', category: 'ides' as const }, { key: 'clis', path: 'clis', category: 'clis' as const }, + { key: 'desktops', path: 'desktops', category: 'desktops' as const }, { key: 'extensions', path: 'extensions', category: 'extensions' as const }, { key: 'models', path: 'models', category: 'models' as const }, { key: 'modelProviders', path: 'model-providers', category: 'modelProviders' as const }, diff --git a/src/app/[locale]/desktops/[slug]/opengraph-image.tsx b/src/app/[locale]/desktops/[slug]/opengraph-image.tsx new file mode 100644 index 00000000..94cf7758 --- /dev/null +++ b/src/app/[locale]/desktops/[slug]/opengraph-image.tsx @@ -0,0 +1,35 @@ +import { ImageResponse } from 'next/og' +import { OGImageTemplate } from '@/components/og/OGImageTemplate' +import type { Locale } from '@/i18n/config' +import { getDesktop } from '@/lib/data/fetchers' + +export const size = { width: 1200, height: 630 } +export const contentType = 'image/png' + +export default async function Image({ + params, +}: { + params: Promise<{ locale: string; slug: string }> +}) { + const { locale, slug } = await params + const desktop = await getDesktop(slug, locale as Locale) + if (!desktop) { + return new ImageResponse( + , + { ...size } + ) + } + return new ImageResponse( + , + { ...size } + ) +} diff --git a/src/app/[locale]/desktops/[slug]/page.tsx b/src/app/[locale]/desktops/[slug]/page.tsx new file mode 100644 index 00000000..f2712f8b --- /dev/null +++ b/src/app/[locale]/desktops/[slug]/page.tsx @@ -0,0 +1,115 @@ +import { notFound } from 'next/navigation' +import { getTranslations } from 'next-intl/server' +import { BackToNavigation } from '@/components/navigation/BackToNavigation' +import { Breadcrumb } from '@/components/navigation/Breadcrumb' +import { CommunityLinks } from '@/components/product/CommunityLinks' +import { ProductCommands } from '@/components/product/ProductCommands' +import { ProductHero } from '@/components/product/ProductHero' +import { ProductPricing } from '@/components/product/ProductPricing' +import { RelatedProducts } from '@/components/product/RelatedProducts' +import { ResourceLinks } from '@/components/product/ResourceLinks' +import type { Locale } from '@/i18n/config' +import { PageLayout } from '@/layouts/PageLayout' +import { getDesktop, getRelatedProducts } from '@/lib/data/fetchers' +import { desktopsData as desktops } from '@/lib/generated' +import { getGithubStars } from '@/lib/generated/github-stars' +import { translateLicenseText } from '@/lib/license' +import { generateSoftwareDetailMetadata } from '@/lib/metadata' +import { generateSoftwareDetailSchema } from '@/lib/metadata/schemas' + +export const revalidate = 3600 + +export async function generateStaticParams() { + return desktops.map(desktop => ({ slug: desktop.id })) +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ locale: string; slug: string }> +}) { + const { locale, slug } = await params + const desktop = await getDesktop(slug, locale as Locale) + if (!desktop) return { title: 'Desktop App Not Found | AI Coding Stack' } + + const tShared = await getTranslations({ locale, namespace: 'shared' }) + return await generateSoftwareDetailMetadata({ + locale: locale as Locale, + category: 'desktops', + slug, + product: { + name: desktop.name, + description: desktop.description, + vendor: desktop.vendor, + platforms: desktop.platforms, + pricing: desktop.pricing, + license: translateLicenseText(desktop.license, tShared), + }, + typeDescription: 'Desktop Coding Agent for Developers', + }) +} + +export default async function DesktopPage({ + params, +}: { + params: Promise<{ locale: string; slug: string }> +}) { + const { locale, slug } = await params + const desktop = await getDesktop(slug, locale as Locale) + if (!desktop) notFound() + + const tShared = await getTranslations({ locale, namespace: 'shared' }) + const websiteUrl = desktop.websiteUrl || desktop.resourceUrls.download || undefined + const downloadUrl = desktop.resourceUrls.download || undefined + const pricingUrl = desktop.resourceUrls.pricing ?? undefined + const schema = await generateSoftwareDetailSchema({ + product: { + name: desktop.name, + description: desktop.description, + vendor: desktop.vendor, + websiteUrl, + downloadUrl, + version: desktop.latestVersion, + platforms: desktop.platforms, + pricing: desktop.pricing, + license: translateLicenseText(desktop.license, tShared), + }, + category: 'desktops', + locale: locale as Locale, + }) + const relatedProducts = await getRelatedProducts(desktop.relatedProducts || [], locale as Locale) + const breadcrumbItems = [ + { name: tShared('terms.aiCodingStack'), href: '/ai-coding-stack' }, + { name: tShared('categories.plural.desktops'), href: '/desktops' }, + { name: desktop.name, href: `/desktops/${desktop.id}` }, + ] + + return ( + + +
+ platform.os)} + websiteUrl={websiteUrl} + docsUrl={desktop.docsUrl || undefined} + downloadUrl={downloadUrl} + /> + + + + + + +
+
+ ) +} diff --git a/src/app/[locale]/desktops/opengraph-image.tsx b/src/app/[locale]/desktops/opengraph-image.tsx new file mode 100644 index 00000000..40f85593 --- /dev/null +++ b/src/app/[locale]/desktops/opengraph-image.tsx @@ -0,0 +1,19 @@ +import { ImageResponse } from 'next/og' +import { getTranslations } from 'next-intl/server' +import { OGImageTemplate } from '@/components/og/OGImageTemplate' + +export const size = { width: 1200, height: 630 } +export const contentType = 'image/png' + +export default async function Image({ params }: { params: Promise<{ locale: string }> }) { + const { locale } = await params + const tPage = await getTranslations({ locale, namespace: 'pages.desktops' }) + return new ImageResponse( + , + { ...size } + ) +} diff --git a/src/app/[locale]/desktops/page.client.tsx b/src/app/[locale]/desktops/page.client.tsx new file mode 100644 index 00000000..8d2b0a65 --- /dev/null +++ b/src/app/[locale]/desktops/page.client.tsx @@ -0,0 +1,116 @@ +'use client' + +import { useTranslations } from 'next-intl' +import { useMemo, useState } from 'react' +import FilterSortBar from '@/components/controls/FilterSortBar' +import { VerifiedBadge } from '@/components/controls/VerifiedBadge' +import Footer from '@/components/Footer' +import Header from '@/components/Header' +import StackTabs from '@/components/navigation/StackTabs' +import PageHeader from '@/components/PageHeader' +import type { Locale } from '@/i18n/config' +import { Link } from '@/i18n/navigation' +import { desktopsData } from '@/lib/generated' +import { translateLicenseText } from '@/lib/license' +import { localizeManifestItems } from '@/lib/manifest-i18n' + +type Props = { locale: string } + +export default function DesktopsPageClient({ locale }: Props) { + const tPage = useTranslations('pages.desktops') + const tShared = useTranslations('shared') + const [sortOrder, setSortOrder] = useState<'default' | 'name-asc' | 'name-desc'>('default') + const [licenseFilters, setLicenseFilters] = useState([]) + const [platformFilters, setPlatformFilters] = useState([]) + const [searchQuery, setSearchQuery] = useState('') + + const localizedDesktops = useMemo( + () => + localizeManifestItems( + desktopsData as unknown as Record[], + locale as Locale + ) as unknown as typeof desktopsData, + [locale] + ) + + const filteredDesktops = useMemo(() => { + let result = [...localizedDesktops] + const query = searchQuery.trim().toLowerCase() + if (query) { + result = result.filter(desktop => + [desktop.name, desktop.description, desktop.vendor].some(value => + value.toLowerCase().includes(query) + ) + ) + } + if (licenseFilters.length > 0) { + result = result.filter(desktop => + licenseFilters.includes(desktop.license === 'Proprietary' ? 'proprietary' : 'open-source') + ) + } + if (platformFilters.length > 0) { + result = result.filter(desktop => + platformFilters.some(platform => desktop.platforms.some(item => item.os === platform)) + ) + } + if (sortOrder === 'name-asc') result.sort((a, b) => a.name.localeCompare(b.name)) + if (sortOrder === 'name-desc') result.sort((a, b) => b.name.localeCompare(a.name)) + return result + }, [licenseFilters, localizedDesktops, platformFilters, searchQuery, sortOrder]) + + return ( + <> +
+
+
+ + + + {filteredDesktops.length === 0 ? ( +
+ {tPage('noMatches')} +
+ ) : ( +
+ {filteredDesktops.map(desktop => ( + +
+
+

{desktop.name}

+ {desktop.verified && } +
+ + → + +
+

+ {desktop.description} +

+
+ {desktop.vendor} + + {translateLicenseText(desktop.license, tShared)} +
+ + ))} +
+ )} +
+
+