diff --git a/README.md b/README.md index 5c93ad76..e134e192 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ |------|------|------| | **日常编码** | Claude Code 或 Aider | 最强推理 / 最好 Git 集成 | | **免费使用** | Qwen Code 或 Gemini CLI | 1000 次/天免费 OAuth / Google 账号 | -| **多模型切换** | OpenCode 或 Goose | 100+ models.dev / 58+ 提供商 | +| **多模型切换** | OpenCode、Goose 或 Qwen Code | 100+ models.dev / 58+ 提供商 / Arena 多模型竞争 | | **VS Code 用户** | Cline 或 Continue | IDE 原生集成 / PR Checks | | **中文开发者** | Qwen Code 或 Kimi CLI | 6 语言 UI / 月之暗面中文模型 | | **CI/CD 自动化** | SWE-agent 或 OpenHands | 批量评估 / Docker 沙箱 | @@ -67,27 +67,27 @@ ## 快速对比表 -> 为减少动态数字重复维护,Stars / 下载量 / 免费层等高频变化数据已迁移到 [`docs/data/agents-metadata.json`](./docs/data/agents-metadata.json)。 - -| Agent | 开发者 | 许可证 | 语言 | 提供商 | 特色 | -|------|--------|--------|------|-------|------| -| [OpenCode](./docs/tools/opencode/) | Anomaly | MIT | TypeScript(Bun) | 100+ | 多客户端(TUI+Web+桌面),37 LSP | -| [Gemini CLI](./docs/tools/gemini-cli/) | Google | Apache-2.0 | TypeScript | 1 | 8 策略模型路由,TOML 策略引擎 | -| [Claude Code](./docs/tools/claude-code/) | Anthropic | 专有 | Rust | 1 | 50ms 启动,24 Hook 事件,Channels | -| [OpenHands](./docs/tools/openhands.md) | OpenHands | MIT | Python | 100+ | Docker 沙箱,三层安全,多代理 | -| [Codex CLI](./docs/tools/codex-cli/) | OpenAI | Apache-2.0 | Rust | 1 | 三平台 OS 沙箱,Cloud 远程执行 | -| [Cline](./docs/tools/cline.md) | Cline | Apache-2.0 | TypeScript | 48+ | VS Code 原生,Git Checkpoint | -| [Aider](./docs/tools/aider/) | Paul Gauthier | GPL-3.0 | Python | 100+ | 14 编辑格式,三槽位模型,/undo | -| [Goose](./docs/tools/goose/) | Block | Apache-2.0 | Rust | 58+ | MCP 原生,11 Platform Extension,Recipe + Cron 调度 | -| [Continue](./docs/tools/continue.md) | Continue | Apache-2.0 | TypeScript | 60+ | PR Checks CI 审查,语义索引 | -| [Warp](./docs/tools/warp.md) | Warp | 专有 | Rust | 多种 | GPU 渲染终端,块结构输出 | -| [Qwen Code](./docs/tools/qwen-code/) | 阿里云 | Apache-2.0 | TypeScript | 6+ | 免费 1000 次/天,Arena 多模型竞争,41 命令 | -| [SWE-agent](./docs/tools/swe-agent.md) | Princeton | MIT | Python | 100+ | SWE-bench 评估,Docker 沙箱 | -| [Copilot CLI](./docs/tools/copilot-cli/) | GitHub | 专有 | TypeScript | 多种 | 67 GitHub 工具,GitHub 生态集成 | -| [Kimi CLI](./docs/tools/kimi-cli/) | 月之暗面 | Apache-2.0 | Python | 6 | Wire 协议,D-Mail 时间回溯 | -| [Cursor](./docs/tools/cursor-cli.md) | Cursor | 专有 | TypeScript | 多种 | AI 原生 IDE,Background Agent | -| [Qoder CLI](./docs/tools/qoder-cli/) | QoderAI | 专有 | Go | 多种 | Quest 模式,Claude Code 兼容 | -| [Oh My OpenAgent](./docs/tools/oh-my-openagent.md) | code-yeongyu | SUL-1.0 | TypeScript | 多种 | OpenCode Harness 层,7~10 Discipline Agent | +> 高频变化数据(Stars / 下载量 / 免费层)的权威来源为 [`docs/data/agents-metadata.json`](./docs/data/agents-metadata.json)。下表 Stars 列为 **2026-03-31 快照**,按 Stars 降序排列;后续更新将通过脚本从数据层自动生成,不再手工同步。 + +| Agent | 开发者 | 许可证 | 语言 | Stars | 提供商 | 特色 | +|------|--------|--------|------|------|-------|------| +| [OpenCode](./docs/tools/opencode/) | Anomaly | MIT | TypeScript(Bun) | 133k | 100+ | 多客户端(TUI+Web+桌面),37 LSP | +| [Gemini CLI](./docs/tools/gemini-cli/) | Google | Apache-2.0 | TypeScript | 100k | 1 | 8 策略模型路由,TOML 策略引擎 | +| [Claude Code](./docs/tools/claude-code/) | Anthropic | 专有 | Rust | 85k | 1 | 50ms 启动,24 Hook 事件,Channels | +| [OpenHands](./docs/tools/openhands.md) | OpenHands | MIT | Python | 70k | 100+ | Docker 沙箱,三层安全,多代理 | +| [Codex CLI](./docs/tools/codex-cli/) | OpenAI | Apache-2.0 | Rust | 68k | 1 | 三平台 OS 沙箱,Cloud 远程执行 | +| [Cline](./docs/tools/cline.md) | Cline | Apache-2.0 | TypeScript | 60k | 48+ | VS Code 原生,Git Checkpoint | +| [Oh My OpenAgent](./docs/tools/oh-my-openagent.md) | code-yeongyu | SUL-1.0 | TypeScript | ~45k | 多种 | OpenCode Harness 层,7~10 Discipline Agent | +| [Aider](./docs/tools/aider/) | Paul Gauthier | GPL-3.0 | Python | 43k | 100+ | 14 编辑格式,三槽位模型,/undo | +| [Goose](./docs/tools/goose/) | Block | Apache-2.0 | Rust | 34k | 58+ | MCP 原生,11 Platform Extension,Recipe + Cron 调度 | +| [Continue](./docs/tools/continue.md) | Continue | Apache-2.0 | TypeScript | 32k | 68+ | PR Checks CI 审查,语义索引 | +| [Cursor](./docs/tools/cursor-cli.md) | Cursor | 专有 | TypeScript | ~33k | 多种 | AI 原生 IDE,Background Agent | +| [Warp](./docs/tools/warp.md) | Warp | 专有 | Rust | 26k | 多种 | GPU 渲染终端,块结构输出 | +| [Qwen Code](./docs/tools/qwen-code/) | 阿里云 | Apache-2.0 | TypeScript | 21k | 6+ | 免费 1000 次/天,Arena 多模型竞争,41 命令 | +| [SWE-agent](./docs/tools/swe-agent.md) | Princeton | MIT | Python | 19k | 100+ | SWE-bench 评估,Docker 沙箱 | +| [Copilot CLI](./docs/tools/copilot-cli/) | GitHub | 专有 | TypeScript | 10k | 多种 | 67 GitHub 工具,GitHub 生态集成 | +| [Kimi CLI](./docs/tools/kimi-cli/) | 月之暗面 | Apache-2.0 | Python | 7k | 6 | Wire 协议,D-Mail 时间回溯 | +| [Qoder CLI](./docs/tools/qoder-cli/) | QoderAI | 专有 | Go | — | 多种 | Quest 模式,Claude Code 兼容 | --- diff --git a/docs/comparison/aider-vs-goose.md b/docs/comparison/aider-vs-goose.md index 25976e8b..f2c2cc05 100644 --- a/docs/comparison/aider-vs-goose.md +++ b/docs/comparison/aider-vs-goose.md @@ -8,7 +8,7 @@ |------|-------|-------| | **开发者** | Paul Gauthier | Block(原 Square) | | **许可证** | GPL-3.0 | Apache-2.0 | -| **Stars** | ~42k | ~33k | +| **Stars** | ~43k | ~34k | | **语言** | Python | Rust | | **核心代码量** | base_coder.py 2485 行 + 模块 | ~55k 行 Rust | | **模型支持** | 100+ 模型(LiteLLM) | 58+ 提供商 | diff --git a/docs/comparison/architecture-deep-dive.md b/docs/comparison/architecture-deep-dive.md index 37bbd8c9..6e59e3bc 100644 --- a/docs/comparison/architecture-deep-dive.md +++ b/docs/comparison/architecture-deep-dive.md @@ -607,4 +607,4 @@ Harness(环境设计) **关键实证**:LangChain coding agent 仅修改 Harness(不改模型),Terminal Bench 2.0 分数从 52.8% 提升到 66.5%——表明 Harness 优化可以在不更换模型的情况下带来显著性能提升。详见[构建自己的 AI 编程 Agent](../guides/build-your-own-agent.md)中的「Harness Engineering」章节。 -**实践案例**:[Oh My OpenAgent](../tools/oh-my-openagent.md)(~44K Stars)在 OpenCode 之上构建了 7~10 个 Discipline Agent 编排 + 分类模型路由 + Hash-Anchored Edit,是目前最成功的开源 Harness 层实践。 +**实践案例**:[Oh My OpenAgent](../tools/oh-my-openagent.md)(~45k Stars)在 OpenCode 之上构建了 7~10 个 Discipline Agent 编排 + 分类模型路由 + Hash-Anchored Edit,是目前最成功的开源 Harness 层实践。 diff --git a/docs/comparison/evolution-community.md b/docs/comparison/evolution-community.md index f40193d5..fdd58784 100644 --- a/docs/comparison/evolution-community.md +++ b/docs/comparison/evolution-community.md @@ -1,20 +1,27 @@ # 13. 版本迭代与社区数据 -> 采集时间: 2026-03-25。数据来源: GitHub API (`gh api repos/X`)。 +> 采集时间: 2026-03-31。Stars / Forks / 贡献者 / 创建时间来自 GitHub API(`gh api repos/X`);许可证和语言字段部分结合仓库文档或人工校验(如 GitHub 返回 `NOASSERTION` 或 `null` 时以实际声明为准)。 ## 项目概览 | Agent | Stars | Forks | 贡献者 | 创建时间 | 语言 | 许可证 | |------|-------|-------|--------|---------|------|--------| -| **Gemini CLI** | 99,025 | 12,601 | 447 | 2025-04 | TypeScript | Apache-2.0 | -| **Claude Code** | 82,456 | 6,901 | 47 | 2025-02 | Shell/Bun | 专有 | -| **Codex CLI** | 67,475 | 9,029 | 386 | 2025-04 | Rust | Apache-2.0 | -| **Aider** | 42,362 | 4,065 | 170 | 2023-05 | Python | Apache-2.0 | -| **Goose** | 33,552 | 3,124 | 398 | 2024-08 | Rust | Apache-2.0 | -| **Qwen Code** | 21,039 | 1,877 | 350 | 2025-06 | TypeScript | Apache-2.0 | -| **OpenCode** | 11,578 | — | — | 2025-03 | Go | MIT | -| **Copilot CLI** | 9,559 | 1,298 | 19 | 2023-01 | Shell | 专有 | -| **Kimi CLI** | 7,364 | 760 | 53 | 2025-10 | Python | Apache-2.0 | +| **Gemini CLI** | 99,571 | 12,601 | 447 | 2025-04 | TypeScript | Apache-2.0 | +| **Claude Code** | 84,642 | 6,901 | 47 | 2025-02 | Shell/Bun | 专有 | +| **OpenHands** | 70,225 | — | — | — | Python | MIT | +| **Codex CLI** | 68,455 | 9,029 | 386 | 2025-04 | Rust | Apache-2.0 | +| **Cline** | 59,676 | — | — | — | TypeScript | Apache-2.0 | +| **Oh My OpenAgent** | 44,992 | — | — | — | TypeScript | SUL-1.0 | +| **Aider** | 42,575 | 4,065 | 170 | 2023-05 | Python | GPL-3.0 | +| **Goose** | 33,771 | 3,124 | 398 | 2024-08 | Rust | Apache-2.0 | +| **Cursor** | 32,532 | — | — | — | TypeScript | 专有 | +| **Continue** | 32,175 | — | — | — | TypeScript | Apache-2.0 | +| **Warp** | 26,267 | — | — | — | Rust | 专有 | +| **Qwen Code** | 21,360 | 1,877 | 350 | 2025-06 | TypeScript | Apache-2.0 | +| **SWE-agent** | 18,888 | — | — | — | Python | MIT | +| **OpenCode** | 132,999 | — | — | 2025-03 | TypeScript | MIT | +| **Copilot CLI** | 9,673 | 1,298 | 19 | 2023-01 | Shell | 专有 | +| **Kimi CLI** | 7,455 | 760 | 53 | 2025-10 | Python | Apache-2.0 | ## 发布节奏 diff --git a/docs/data/CHANGELOG.md b/docs/data/CHANGELOG.md index 26788a04..f0cdd476 100644 --- a/docs/data/CHANGELOG.md +++ b/docs/data/CHANGELOG.md @@ -16,6 +16,9 @@ | 日期 | 文件 | 更新范围 | 数据来源 | 备注 | |------|------|---------|---------|------| +| 2026-03-31 | `agents-metadata.json` | Stars 全量更新(GitHub API);新增 github_repo 防错字段 | GitHub REST API(17 个 repo) | 回滚 OpenCode 至 133k(anomalyco/opencode);新增 Cursor/Cline/Oh My OpenAgent/OpenHands/SWE-agent/Warp Stars | +| 2026-03-31 | `README.md` | 快速对比表增加 Stars 列,数据同步 | `agents-metadata.json` | 按 Stars 降序重排 | +| 2026-03-31 | `evolution-community.md` | 项目概览 Stars 更新,新增 7 个 Agent | GitHub REST API | 采集时间更新为 2026-03-31 | | 2026-03-30 | `agents-metadata.json` | 初始化统一数据层;补充 Agent 元数据、免费层、证据状态、最后验证日期 | npm Registry API / PyPI Stats / `gh api` / 各 Agent 文档与 EVIDENCE.md | 首次建立 `docs/data/` | | 2026-03-30 | `README.md`, `docs/SUMMARY.md` | 收敛高频变化的 Stars / 下载量 / 免费层引用,改为指向数据层 | `docs/data/agents-metadata.json` | 降低重复维护 | | 2026-03-30 | `scripts/check_stale_data.py`, `scripts/check_all.py` | 新增动态数据漂移检查与统一检查入口 | 本仓库维护脚本 | 用于提交前校验 | diff --git a/docs/data/SCHEMA.md b/docs/data/SCHEMA.md index 58609dfe..2b8a5c33 100644 --- a/docs/data/SCHEMA.md +++ b/docs/data/SCHEMA.md @@ -98,9 +98,17 @@ - `none` - `unknown` +### `github_repo` + +- 格式:`owner/repo`,如 `anomalyco/opencode`、`anthropics/claude-code` +- 语义:Agent 对应的 GitHub 仓库(Stars 数据的来源) +- 无公开仓库的 Agent 设为 `null`(如 Qoder CLI) +- 校验:`scripts/check_repo_url.py` 会调用 GitHub API 验证仓库存在且 Stars 数量级与 `stars` 字段一致(2x 以内) +- **更新 Stars 前必须核对此字段**,禁止凭记忆猜测仓库地址 + ### `stars` -- 默认语义:GitHub Stars 的紧凑展示值,如 `83k`、`~132k` +- 默认语义:GitHub Stars 的紧凑展示值,如 `85k`、`~45k` - 时间基准:由顶层 `last_updated` 统一表示本批动态数据的采样时间 - 允许哨兵值:`-`、`—`、`unknown` - 对于闭源或无明确仓库映射的 Agent,可使用 `-` / `unknown`,并在相应文档中说明原因 diff --git a/docs/data/agents-metadata.json b/docs/data/agents-metadata.json index c1b26fd5..c37c1ebf 100644 --- a/docs/data/agents-metadata.json +++ b/docs/data/agents-metadata.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "last_updated": "2026-03-30", + "last_updated": "2026-03-31", "maintainer_note": "Dynamic metrics should be updated from official APIs or clearly labeled estimates. Static architecture facts should be sourced from repository analysis or EVIDENCE.md.", "agents": [ { @@ -12,7 +12,8 @@ "implementation_language": "Rust", "runtime": "Bun(内嵌)/ 原生二进制", "package_ecosystem": "npm", - "stars": "83k", + "github_repo": "anthropics/claude-code", + "stars": "85k", "downloads": { "type": "npm_weekly", "value": "1020万", @@ -49,7 +50,8 @@ "source_type": "binary-analysis", "evidence_path": "docs/tools/copilot-cli/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "github/copilot-cli" }, { "id": "codex-cli", @@ -73,7 +75,8 @@ "source_type": "binary-analysis", "evidence_path": "docs/tools/codex-cli/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "openai/codex" }, { "id": "gemini-cli", @@ -84,7 +87,7 @@ "implementation_language": "TypeScript", "runtime": "Node.js >= 20", "package_ecosystem": "npm", - "stars": "99k", + "stars": "100k", "downloads": { "type": "npm_weekly", "value": "74万", @@ -97,7 +100,8 @@ "source_type": "source-analysis", "evidence_path": "docs/tools/gemini-cli/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "google-gemini/gemini-cli" }, { "id": "qwen-code", @@ -121,7 +125,8 @@ "source_type": "source-analysis", "evidence_path": "docs/tools/qwen-code/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "QwenLM/qwen-code" }, { "id": "aider", @@ -132,7 +137,7 @@ "implementation_language": "Python", "runtime": "Python >= 3.10", "package_ecosystem": "pypi", - "stars": "42k", + "stars": "43k", "downloads": { "type": "pypi_monthly", "value": "78万", @@ -145,7 +150,8 @@ "source_type": "source-analysis", "evidence_path": "docs/tools/aider/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "Aider-AI/aider" }, { "id": "kimi-cli", @@ -169,7 +175,8 @@ "source_type": "source-analysis", "evidence_path": "docs/tools/kimi-cli/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "MoonshotAI/kimi-cli" }, { "id": "opencode", @@ -180,7 +187,7 @@ "implementation_language": "TypeScript(v1.0+)", "runtime": "Bun 1.3+", "package_ecosystem": "none", - "stars": "130k", + "stars": "133k", "downloads": { "type": "none", "value": "—", @@ -193,7 +200,8 @@ "source_type": "source-analysis", "evidence_path": "docs/tools/opencode/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "anomalyco/opencode" }, { "id": "goose", @@ -217,7 +225,8 @@ "source_type": "source-analysis", "evidence_path": "docs/tools/goose/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "block/goose" }, { "id": "qoder-cli", @@ -241,7 +250,8 @@ "source_type": "binary-analysis", "evidence_path": "docs/tools/qoder-cli/EVIDENCE.md", "last_verified": "2026-03-26" - } + }, + "github_repo": null }, { "id": "oh-my-openagent", @@ -252,7 +262,7 @@ "implementation_language": "TypeScript", "runtime": "OpenCode Harness / Node.js", "package_ecosystem": "npm", - "stars": "~44k", + "stars": "~45k", "downloads": { "type": "unknown", "value": "—", @@ -265,7 +275,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/oh-my-openagent.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "code-yeongyu/oh-my-openagent" }, { "id": "cline", @@ -276,7 +287,7 @@ "implementation_language": "TypeScript", "runtime": "VS Code 扩展", "package_ecosystem": "vscode-marketplace", - "stars": "59k", + "stars": "60k", "downloads": { "type": "unknown", "value": "—", @@ -289,7 +300,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/cline.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "cline/cline" }, { "id": "continue", @@ -313,7 +325,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/continue.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "continuedev/continue" }, { "id": "cursor-cli", @@ -324,7 +337,7 @@ "implementation_language": "TypeScript", "runtime": "IDE / Desktop", "package_ecosystem": "desktop", - "stars": "-", + "stars": "~33k", "downloads": { "type": "unknown", "value": "—", @@ -337,7 +350,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/cursor-cli.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "cursor/cursor" }, { "id": "openhands", @@ -361,7 +375,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/openhands.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "OpenHands/OpenHands" }, { "id": "swe-agent", @@ -385,7 +400,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/swe-agent.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "SWE-agent/SWE-agent" }, { "id": "warp", @@ -409,7 +425,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/warp.md", "last_verified": "2026-03-26" - } + }, + "github_repo": "warpdotdev/Warp" }, { "id": "mini-swe-agent", @@ -433,7 +450,8 @@ "source_type": "summary-analysis", "evidence_path": "docs/tools/mini-swe-agent.md", "last_verified": "2026-03-26" - } + }, + "github_repo": null } ] } diff --git a/docs/data/agents-metadata.schema.json b/docs/data/agents-metadata.schema.json index 6e90012c..ea104fdf 100644 --- a/docs/data/agents-metadata.schema.json +++ b/docs/data/agents-metadata.schema.json @@ -145,6 +145,11 @@ "type": "string", "minLength": 1 }, + "github_repo": { + "type": ["string", "null"], + "description": "GitHub repo in owner/repo format. Null if no public repo.", + "pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$" + }, "stars": { "type": "string" }, diff --git a/docs/tools/README.md b/docs/tools/README.md index 9b881e0e..9718e6fa 100644 --- a/docs/tools/README.md +++ b/docs/tools/README.md @@ -26,7 +26,7 @@ | [SWE-agent](./swe-agent.md) | 单文件 | 178 | SWE-bench 74%+,Docker 沙箱 | | [Cline](./cline.md) | 单文件 | 151 | VS Code 扩展,24+ 工具,子代理系统 | | [OpenHands](./openhands.md) | 单文件 | 144 | SWE-bench 77.6%,浏览器操作,Docker | -| [Oh My OpenAgent](./oh-my-openagent.md) | 单文件 | — | OpenCode Harness 层,7~10 Discipline Agent 编排,~44K Stars | +| [Oh My OpenAgent](./oh-my-openagent.md) | 单文件 | — | OpenCode Harness 层,7~10 Discipline Agent 编排,~45K Stars | | [mini-swe-agent](./mini-swe-agent.md) | 单文件 | 93 | 教学用,SWE-bench 74%+ | ## 对比文档 diff --git a/docs/tools/aider/01-overview.md b/docs/tools/aider/01-overview.md index 66c8f7a5..c0a2dac5 100644 --- a/docs/tools/aider/01-overview.md +++ b/docs/tools/aider/01-overview.md @@ -4,7 +4,7 @@ **许可证:** GPL-3.0 **仓库:** [github.com/Aider-AI/aider](https://github.com/Aider-AI/aider) **文档:** [aider.chat/docs](https://aider.chat/docs/) -**Stars:** 约 40k+ +**Stars:** 约 43k **最后更新:** 2026-03 ## 概述 @@ -99,7 +99,7 @@ aider --auto-commit --auto-test --test-cmd "pytest tests/" 2. **编辑格式丰富**:14 种格式适配不同模型特点 3. **仓库映射**:AST 级别的智能上下文选择 4. **反思循环**:自动修复 lint/测试失败 -5. **实战验证**:每天数千开发者使用,40k+ Stars +5. **实战验证**:每天数千开发者使用,43k+ Stars 6. **Prompt 缓存**:Anthropic 缓存优化,降低成本 ## 劣势 diff --git a/docs/tools/aider/EVIDENCE.md b/docs/tools/aider/EVIDENCE.md index 7f7171a5..b343f7c5 100644 --- a/docs/tools/aider/EVIDENCE.md +++ b/docs/tools/aider/EVIDENCE.md @@ -1,7 +1,7 @@ # Aider 源码深度分析证据 ## 基本信息 -- 仓库: Aider-AI/aider, GPL-3.0, Python, 42k+ stars +- 仓库: Aider-AI/aider, GPL-3.0, Python, 43k+ stars - 版本: latest (源码分析 commands.py 1712 行) ## 遥测系统(源码: aider/analytics.py) diff --git a/docs/tools/aider/README.md b/docs/tools/aider/README.md index a04a6a01..7270e985 100644 --- a/docs/tools/aider/README.md +++ b/docs/tools/aider/README.md @@ -5,7 +5,7 @@ **开发者:** Paul Gauthier **许可证:** GPL-3.0 **仓库:** [github.com/Aider-AI/aider](https://github.com/Aider-AI/aider) -**Stars:** 约 40k+ +**Stars:** 约 43k ## 目录 diff --git a/docs/tools/cline.md b/docs/tools/cline.md index 00a2354d..363f3fee 100644 --- a/docs/tools/cline.md +++ b/docs/tools/cline.md @@ -3,7 +3,7 @@ **开发者:** Cline **许可证:** Apache-2.0 **仓库:** [github.com/cline/cline](https://github.com/cline/cline) -**Stars:** 约 59k+ +**Stars:** 约 60k **最后更新:** 2026-03 ## 概述 @@ -128,7 +128,7 @@ Anthropic, OpenRouter, OpenAI, Google Gemini, AWS Bedrock, Azure, GCP Vertex, SA 2. **Checkpoint 回滚**:Git 快照保证安全 3. **提供商丰富**:43+ 提供商支持 4. **Plan/Act 模式**:规划和执行分离 -5. **社区庞大**:59k+ Stars,5M+ 用户,活跃开发 +5. **社区庞大**:60k+ Stars,5M+ 用户,活跃开发 6. **MCP + Hook**:强大的扩展能力 ## 劣势 diff --git a/docs/tools/gemini-cli/01-overview.md b/docs/tools/gemini-cli/01-overview.md index 21cfac06..ee2ee406 100644 --- a/docs/tools/gemini-cli/01-overview.md +++ b/docs/tools/gemini-cli/01-overview.md @@ -4,12 +4,12 @@ **许可证:** Apache-2.0 **仓库:** [github.com/google-gemini/gemini-cli](https://github.com/google-gemini/gemini-cli)(npm: `@google/gemini-cli`) **文档:** [geminicli.com](https://geminicli.com) -**Stars:** ~99k(100+ 贡献者,12.5k Forks) +**Stars:** ~100k(100+ 贡献者,12.5k Forks) **最后更新:** 2026-03 ## 概述 -Gemini CLI 是 Google 官方的开源 AI 编程代理,运行在终端中,基于 TypeScript + Ink/React 19 构建。采用 ReAct 模式驱动代理循环,主循环最多 100 轮对话,子代理默认 30 轮/10 分钟。项目于 2025 年 6 月 25 日首次公开发布(v0.1.0),当前稳定版为 v0.34.0(2026-03-17),采用每周二稳定/预览/夜间三通道发布模式。整体代码量约 22 万行 TypeScript(不含测试,含测试约 53 万行),是 GitHub 上增长最快的开源项目之一(不到一年从 0 到 ~99k Stars)。它也是 Qwen Code 的上游项目,其架构被广泛借鉴。 +Gemini CLI 是 Google 官方的开源 AI 编程代理,运行在终端中,基于 TypeScript + Ink/React 19 构建。采用 ReAct 模式驱动代理循环,主循环最多 100 轮对话,子代理默认 30 轮/10 分钟。项目于 2025 年 6 月 25 日首次公开发布(v0.1.0),当前稳定版为 v0.34.0(2026-03-17),采用每周二稳定/预览/夜间三通道发布模式。整体代码量约 22 万行 TypeScript(不含测试,含测试约 53 万行),是 GitHub 上增长最快的开源项目之一(不到一年从 0 到 ~100k Stars)。它也是 Qwen Code 的上游项目,其架构被广泛借鉴。 ## 核心功能 @@ -110,7 +110,7 @@ gemini 6. **多代理架构**:5 个内置代理 + 自定义代理 + 远程 A2A 代理 7. **丰富沙箱**:7 种沙箱后端(Seatbelt/Bubblewrap/Docker/Podman/gVisor/LXC/Windows Sandbox) 8. **检查点 & 回退**:基于 Git 快照的安全网,`Esc Esc` 即时回退 -9. **开源**:Apache-2.0 许可,~99k Stars,代码质量高 +9. **开源**:Apache-2.0 许可,~100k Stars,代码质量高 10. **生态影响力大**:Qwen Code 基于此分叉,众多社区衍生项目 ## 劣势 @@ -168,7 +168,7 @@ gemini | **v0.34.0** | 2026-03-17 | Plan Mode 默认启用,原生 gVisor + LXC 沙箱 | | v0.36.0-preview | 2026-03-24 | 最新预览版(Linux Bubblewrap/Seccomp 沙箱等) | -不到一年发布 **36 个主要版本**,从零开始成长为 ~99k Stars 的顶级开源项目。 +不到一年发布 **36 个主要版本**,从零开始成长为 ~100k Stars 的顶级开源项目。 ### 开发节奏 - **总提交数**:8,910+ diff --git a/docs/tools/goose.md b/docs/tools/goose.md index a73b5ffe..ed617ab5 100644 --- a/docs/tools/goose.md +++ b/docs/tools/goose.md @@ -4,7 +4,7 @@ **许可证:** Apache-2.0 **仓库:** [github.com/block/goose](https://github.com/block/goose) **文档:** [block.github.io/goose](https://block.github.io/goose/docs/quickstart/) -**Stars:** ~33k +**Stars:** ~34k **最后更新:** 2026-03 ## 概述 diff --git a/docs/tools/goose/EVIDENCE.md b/docs/tools/goose/EVIDENCE.md index c632896c..065905f7 100644 --- a/docs/tools/goose/EVIDENCE.md +++ b/docs/tools/goose/EVIDENCE.md @@ -1,7 +1,7 @@ # Goose 源码深度分析证据 ## 基本信息 -- 仓库: block/goose, Apache-2.0, Rust, 33k+ stars +- 仓库: block/goose, Apache-2.0, Rust, 34k+ stars - 版本: v1.28.0(源码: `ui/desktop/package.json`,`Cargo.toml` workspace) - 架构: MCP 原生(所有工具通过 MCP 协议) - SDK: rmcp (Rust MCP SDK) diff --git a/docs/tools/goose/README.md b/docs/tools/goose/README.md index f81bc051..970aa747 100644 --- a/docs/tools/goose/README.md +++ b/docs/tools/goose/README.md @@ -11,4 +11,4 @@ | [EVIDENCE.md](./EVIDENCE.md) | 源码分析证据(PostHog、SecurityManager、MCP) | **仓库:** [github.com/block/goose](https://github.com/block/goose) -**Stars:** 33k+ | **许可证:** Apache-2.0 | **语言:** Rust +**Stars:** 34k | **许可证:** Apache-2.0 | **语言:** Rust diff --git a/docs/tools/kimi-cli/01-overview.md b/docs/tools/kimi-cli/01-overview.md index 5316cd32..80326992 100644 --- a/docs/tools/kimi-cli/01-overview.md +++ b/docs/tools/kimi-cli/01-overview.md @@ -169,7 +169,7 @@ OPENAI_BASE_URL, OPENAI_API_KEY ## 劣势 -1. **社区规模**:与 OpenCode(~132k Stars)、Gemini CLI(~99k Stars)相比社区较小 +1. **社区规模**:与 OpenCode(~133k Stars)、Gemini CLI(~100k Stars)相比社区较小 2. **Python 启动速度**:不如 Rust/Go 原生编译(但提供 PyInstaller 二进制) 3. **文档**:英文文档相对较新,中文资源更丰富 4. **部分功能实验性**:D-Mail、okabe 代理、远程执行仍在演进 diff --git a/docs/tools/oh-my-openagent.md b/docs/tools/oh-my-openagent.md index 6a4e76d1..6129cf25 100644 --- a/docs/tools/oh-my-openagent.md +++ b/docs/tools/oh-my-openagent.md @@ -4,14 +4,14 @@ **许可证:** SUL-1.0(Sustainable Use License) **仓库:** [github.com/code-yeongyu/oh-my-openagent](https://github.com/code-yeongyu/oh-my-openagent) **官网:** [ohmyopenagent.com](https://ohmyopenagent.com/) -**Stars:** ~44K(2026-03) +**Stars:** ~45k(2026-03) **语言:** TypeScript **基座:** 基于 OpenCode 的 Harness/扩展层 **最后更新:** 2026-03-28(多次日更) ## 概述 -Oh My OpenAgent(原 oh-my-opencode)是一个基于 OpenCode 的 **Agent Harness 层**,不是独立的 Agent——它在 OpenCode 之上添加了多代理编排、多模型路由和增强工具链。自称 "the best agent harness",~44K Stars(2025-12 创建至 2026-03,基于 GitHub 数据)。 +Oh My OpenAgent(原 oh-my-opencode)是一个基于 OpenCode 的 **Agent Harness 层**,不是独立的 Agent——它在 OpenCode 之上添加了多代理编排、多模型路由和增强工具链。自称 "the best agent harness",~45k Stars(2025-12 创建至 2026-03,基于 GitHub 数据)。 与本项目收录的其他 Agent 的关键区别:**它不是从零构建的 Agent,而是 Harness Engineering 的实践案例**——在成品 Agent(OpenCode)之上设计环境、编排和反馈循环。 @@ -76,7 +76,7 @@ Oh My OpenAgent(原 oh-my-opencode)是一个基于 OpenCode 的 **Agent Harn | **多代理** | 7~10 Discipline Agent | Teammates | 实验性 | 无 | | **模型路由** | 按任务类别自动路由 | 手动选择 | 无 | 手动选择 | | **编辑精度** | Hash-Anchored(LINE#ID) | Edit/MultiEdit | apply_patch | 继承 | -| **Stars** | ~44k | N/A(闭源) | ~68k | ~132k | +| **Stars** | ~45k | N/A(闭源) | ~68k | ~133k | | **许可证** | SUL-1.0 | 专有 | Apache-2.0 | MIT | ## Harness Engineering 视角 @@ -106,7 +106,7 @@ bunx oh-my-opencode install 1. **多代理编排**——7~10 个 Discipline Agent 按职能自动分工,Sisyphus 统一调度 2. **多模型路由**——按任务类别自动选择最优模型(visual/deep/quick/ultrabrain) 3. **Hash-Anchored Edit**——内容哈希验证编辑精确性,防止行号偏移 -4. **快速迭代**——多次日更,社区活跃(~44K Stars,4 个月) +4. **快速迭代**——多次日更,社区活跃(~45k Stars,4 个月) 5. **Claude Code 兼容**——兼容 Claude Code hooks/commands/skills/MCPs/plugins ## 劣势 diff --git a/docs/tools/opencode/01-overview.md b/docs/tools/opencode/01-overview.md index 4b50ef6f..769b3f7f 100644 --- a/docs/tools/opencode/01-overview.md +++ b/docs/tools/opencode/01-overview.md @@ -4,7 +4,7 @@ **许可证:** MIT **仓库:** [github.com/anomalyco/opencode](https://github.com/anomalyco/opencode)(npm: `opencode-ai`) **网站:** [opencode.ai](https://opencode.ai/) -**Stars:** ~132k +**Stars:** ~133k **最后更新:** 2026-03 ## 概述 diff --git a/docs/tools/opencode/03-architecture.md b/docs/tools/opencode/03-architecture.md index c8d5188c..3dd4b94d 100644 --- a/docs/tools/opencode/03-architecture.md +++ b/docs/tools/opencode/03-architecture.md @@ -214,7 +214,7 @@ GlobalBus ←── 文件变更/状态事件(10 秒心跳 + 自动重连) | 2025-08 | v0.3 → v0.5 | 首批 releases;会话管理、Context Path、格式化器 | | 2025-03 ~ 07 | 开发期 | Go + Bubbletea TUI 启动(原名 termai),Go→TypeScript 渐进重写,无 release | -一年内发布 **450+ releases**,从 Go TUI 原型成长为 ~132k Stars 的多客户端 AI 编程平台。 +一年内发布 **450+ releases**,从 Go TUI 原型成长为 ~133k Stars 的多客户端 AI 编程平台。 ### v1.3.0 关键变化(2026-03-22) diff --git a/docs/tools/qwen-code.md b/docs/tools/qwen-code.md index c75ade77..ae7f859a 100644 --- a/docs/tools/qwen-code.md +++ b/docs/tools/qwen-code.md @@ -4,7 +4,7 @@ **许可证:** Apache-2.0 **仓库:** [github.com/QwenLM/qwen-code](https://github.com/QwenLM/qwen-code) **文档:** [qwenlm.github.io/qwen-code-docs](https://qwenlm.github.io/qwen-code-docs/zh/) -**Stars:** 约 20k+ +**Stars:** 约 21k **最后更新:** 2026-03 ## 概述 diff --git a/docs/tools/qwen-code/01-overview.md b/docs/tools/qwen-code/01-overview.md index 69d4b0e7..2515a9dd 100644 --- a/docs/tools/qwen-code/01-overview.md +++ b/docs/tools/qwen-code/01-overview.md @@ -19,7 +19,7 @@ AGENTS.md 声明:*"This project is based on Google Gemini CLI with adaptations - **Gemini CLI 分叉**:继承 Gemini CLI 核心架构,新增 Arena/扩展系统/多提供商等能力 - **免费 OAuth 额度**:通义账号每天 1000 次免费请求,零门槛入门 - **16 个内置工具**:文件编辑、Shell 执行、Grep 搜索、Web 抓取/搜索、LSP 等 -- **40+ 斜杠命令**:覆盖会话管理、Arena 模式、扩展管理、多语言切换等 +- **41 斜杠命令**:覆盖会话管理、Arena 模式、扩展管理、多语言切换等 - **多提供商**:Qwen OAuth(免费)、DashScope、ModelScope、Anthropic、Gemini、Vertex AI、自定义 - **完整 SDK**:TypeScript SDK + Java SDK,支持编程式集成 - **扩展兼容**:可转换 Claude Code 插件和 Gemini CLI 扩展格式 diff --git a/docs/tools/qwen-code/EVIDENCE.md b/docs/tools/qwen-code/EVIDENCE.md index 8c2a1656..0580da2e 100644 --- a/docs/tools/qwen-code/EVIDENCE.md +++ b/docs/tools/qwen-code/EVIDENCE.md @@ -1,7 +1,7 @@ # Qwen Code 源码深度分析证据 ## 基本信息 -- 仓库: QwenLM/qwen-code, Apache-2.0, TypeScript, 21k+ stars +- 仓库: QwenLM/qwen-code, Apache-2.0, TypeScript, ~21k stars - 基于: Google Gemini CLI 分叉 - AGENTS.md: "This project is based on Google Gemini CLI with adaptations to better support Qwen-Coder models." diff --git a/docs/tools/qwen-code/README.md b/docs/tools/qwen-code/README.md index 77780da9..41d45675 100644 --- a/docs/tools/qwen-code/README.md +++ b/docs/tools/qwen-code/README.md @@ -14,4 +14,4 @@ | [用户指南](../../guides/qwen-code-user-guide.md) | 安装、免费使用、Arena 模式 | **仓库:** [github.com/QwenLM/qwen-code](https://github.com/QwenLM/qwen-code) -**Stars:** 21k+ | **许可证:** Apache-2.0 | **语言:** TypeScript +**Stars:** ~21k | **许可证:** Apache-2.0 | **语言:** TypeScript diff --git a/scripts/check_all.py b/scripts/check_all.py index 079dd1e1..b275a3e9 100644 --- a/scripts/check_all.py +++ b/scripts/check_all.py @@ -6,15 +6,17 @@ ROOT = Path(__file__).resolve().parents[1] SCRIPTS = ROOT / 'scripts' CHECKS = [ - ('data schema', SCRIPTS / 'check_data_schema.py'), - ('repository consistency', SCRIPTS / 'check_repo_consistency.py'), - ('stale data', SCRIPTS / 'check_stale_data.py'), + ('data schema', str(SCRIPTS / 'check_data_schema.py')), + ('repository consistency', str(SCRIPTS / 'check_repo_consistency.py')), + ('stale data', str(SCRIPTS / 'check_stale_data.py')), + ('repo URL + Stars verification', str(SCRIPTS / 'check_repo_url.py')), ] -def run_check(label: str, script: Path) -> int: - print(f'==> Running {label}: {script.name}') - result = subprocess.run([sys.executable, str(script)], cwd=ROOT) +def run_check(label: str, script: str) -> int: + print(f'==> Running {label}: {script}') + parts = script.split() + result = subprocess.run([sys.executable] + parts, cwd=ROOT) print(f'==> Exit code: {result.returncode}\n') return result.returncode diff --git a/scripts/check_data_schema.py b/scripts/check_data_schema.py index 609316be..c0ef1057 100644 --- a/scripts/check_data_schema.py +++ b/scripts/check_data_schema.py @@ -16,7 +16,7 @@ 'id', 'name', 'category', 'license', 'developer', 'implementation_language', 'runtime', 'package_ecosystem', 'evidence' } -AGENT_OPTIONAL = {'stars', 'downloads', 'pricing_summary', 'free_tier'} +AGENT_OPTIONAL = {'stars', 'downloads', 'pricing_summary', 'free_tier', 'github_repo'} DOWNLOADS_REQUIRED = {'type', 'value', 'as_of'} EVIDENCE_REQUIRED = {'status', 'source_type', 'evidence_path', 'last_verified'} STARS_SENTINEL_VALUES = {'-', '—', 'unknown'} diff --git a/scripts/check_repo_url.py b/scripts/check_repo_url.py new file mode 100644 index 00000000..1ee611cd --- /dev/null +++ b/scripts/check_repo_url.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +"""Check github_repo fields against GitHub API to catch repo mapping errors. + +Reads agents-metadata.json. For each agent with a github_repo and stars field, +fetches the repo from GitHub API and verifies the stars count is within a +tolerance (default 2x). This catches issues like wrong repo mappings. + +Usage: + python3 scripts/check_repo_url.py # full check with API + python3 scripts/check_repo_url.py --no-api # schema-only check (fast) +""" + +import json +import re +import sys +import time +import urllib.request +import urllib.error +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +DATA_FILE = ROOT / "docs" / "data" / "agents-metadata.json" + +# Stars mismatch beyond this ratio triggers a MAJOR error. +MAJOR_RATIO = 2.0 + + +def load_data(): + with open(DATA_FILE, encoding="utf-8") as f: + return json.load(f) + + +def parse_compact_stars(s: str) -> int | None: + """Parse compact star strings like '130k', '~133k', '21k' to int.""" + if not s or s in ("-", "—", "unknown"): + return None + m = re.match(r"~?\s*(\d+(?:\.\d+)?)\s*[kK万]?", s.strip()) + if not m: + return None + num = float(m.group(1)) + if "k" in s.lower() or "K" in s: + num *= 1000 + elif "万" in s: + num *= 10000 + return int(num) + + +def fetch_github_stars(owner: str, repo: str) -> int | None: + """Fetch stargazers_count from GitHub API with retry.""" + url = f"https://api.github.com/repos/{owner}/{repo}" + for attempt in range(3): + try: + req = urllib.request.Request(url, headers={"User-Agent": "codeagents-check/1.0"}) + with urllib.request.urlopen(req, timeout=15) as resp: + data = json.loads(resp.read().decode("utf-8")) + return data.get("stargazers_count") + except urllib.error.HTTPError as e: + if e.code == 404: + return None # repo not found + if e.code == 403: + # rate limited + wait = min(60, 10 * (attempt + 1)) + print(f" Rate limited, waiting {wait}s...") + time.sleep(wait) + continue + if e.code >= 500: + time.sleep(5 * (attempt + 1)) + continue + return None + except Exception: + time.sleep(3) + continue + return None + + +def main(): + import argparse + + parser = argparse.ArgumentParser(description="Check github_repo and Stars consistency") + parser.add_argument("--no-api", action="store_true", help="Skip GitHub API calls (fast, schema-only)") + args = parser.parse_args() + + data = load_data() + + errors = [] + warnings = [] + + for agent in data.get("agents", []): + agent_id = agent.get("id", "unknown") + github_repo = agent.get("github_repo") + stars_str = agent.get("stars", "") + + if not github_repo: + warnings.append(f"{agent_id}: no github_repo configured") + continue + + # Validate repo format + parts = github_repo.split("/") + if len(parts) != 2 or not all(parts): + errors.append(f"{agent_id}: invalid github_repo format: {github_repo}") + continue + + if args.no_api: + continue + + # Skip if no stars to compare + metadata_stars = parse_compact_stars(stars_str) + if metadata_stars is None: + continue + + github_stars = fetch_github_stars(parts[0], parts[1]) + if github_stars is None: + errors.append(f"{agent_id}: cannot fetch GitHub repo {github_repo}") + continue + + ratio = metadata_stars / github_stars if github_stars > 0 else float("inf") + + if ratio > MAJOR_RATIO or ratio < 1 / MAJOR_RATIO: + errors.append( + f"{agent_id}: MAJOR Stars mismatch: " + f"metadata={stars_str} ({metadata_stars}) vs GitHub={github_stars} " + f"(ratio={ratio:.1f}x, threshold={MAJOR_RATIO}x)" + ) + elif ratio > 1.5 or ratio < 0.67: + warnings.append( + f"{agent_id}: Stars possibly stale: " + f"metadata={stars_str} ({metadata_stars}) vs GitHub={github_stars} " + f"(ratio={ratio:.1f}x)" + ) + + # Rate limit: sleep between API calls + time.sleep(1) + + if errors: + print("ERRORS:") + for e in errors: + print(f" ERROR: {e}") + if warnings: + for w in warnings: + print(f" WARN: {w}") + + if errors: + print(f"\nFAILED: {len(errors)} error(s) found") + return 1 + + print("OK: repository URL checks passed") + return 0 + + +if __name__ == "__main__": + sys.exit(main())