Skip to content

Conversation

@ehgen0ng
Copy link
Collaborator

@ehgen0ng ehgen0ng commented Jan 7, 2026

概述

本 PR 实现了 AMP Code 工具的完整透明代理支持,包含 4 个核心功能:Profile 选择、透明代理、用户认证、本地网页搜索与内容提取

功能亮点

🎯 AMP Code Profile 选择

  • 新增 AMP Code Profile 选择的后端服务和 Tauri 命令
  • 实现前端 AmpProfileSelector 组件,支持选择 Claude/Codex/Gemini Profile
  • 在 Profile 管理页面增加 AMP Code 专用标签页
  • 目标:让 AMP Code 复用现有工具的 Profile 配置

🔌 透明代理支持

  • 引入 AmpHeadersProcessor,根据请求特征(路径、头部、模型字段)自动识别上游 API 类型
  • 实现动态路由,自动转发到 Claude/Codex/Gemini 对应的 Profile
  • 为 AMP Code 提供独立的代理配置和默认端口 (8790)
  • 前端界面全面支持 AMP Code 的显示和交互

🔐 用户认证功能

  • 实现 Access Token 验证和用户信息获取命令
  • 引入 AmpNativeConfigService,支持 AMP Code CLI 配置文件备份、修改和还原
  • 智能路由:内部 API → ampcode.com;LLM 请求 → 用户选择的 Profile

🔍 本地网页搜索与内容提取

  • webSearch2 本地工具:在代理层本地执行网页搜索
    • 优先使用 Tavily API(需配置 API Key)
    • 未配置时自动降级使用 DuckDuckGo HTML 搜索
  • extractWebPageContent 本地工具:本地提取网页内容
    • 流式读取,5MB 响应体硬限制
  • SSRF 安全防护
    • URL 协议白名单(仅 http/https)
    • 禁止 userinfo(防止 http://good.com@evil.com 绕过)
    • 私有 IP 地址过滤(10.0.0.0/8、127.0.0.1、fc00::/7 等)
    • 禁止内网域名(localhost、.local、.internal)
    • 禁止重定向(防止二次跳转绕过)

数据流设计

AMP Code CLI 请求 → webSearch 代理 (8790)
  ├─ 本地工具请求(webSearch2 / extractWebPageContent)
  │   └─ dc-local:// 协议 → 本地处理并直接返回
  │
  ├─ 内部 API 请求(/api/*)
  │   └─ 转发至 ampcode.com(使用用户 Access Token)
  │
  └─ LLM 请求(/v1/chat/completions 等)
      └─ 路由至对应 Profile(Claude/Codex/Gemini)

技术实现

后端(Rust)

新增 Tauri 命令

  • get_amp_user_info / verify_and_save_amp_token - 用户认证
  • get_amp_profile_config / save_amp_profile_config - Profile 配置管理

新增服务

  • services/amp_native_config.rs - AMP Code 原生配置管理
  • services/proxy/headers/amp_processor.rs - 请求处理器(智能路由 + 本地工具)

本地工具实现

  • 全局 HTTP Client(复用连接池,15s 超时,禁止重定向)
  • Tavily API 集成 + DuckDuckGo HTML 解析降级方案
  • SSRF 防护:validate_url_security() + is_private_ip()
  • 流式限额:read_response_with_limit() (5MB)

数据模型扩展

  • ToolProxyConfig 新增 tavily_api_key 字段

前端(React + TypeScript)

新增组件

  • AmpProfileSelector - AMP Code Profile 选择器
  • Access Token 输入和验证 UI
  • Tavily API Key 配置输入框

测试情况

代码质量检查

  • ESLint 检查通过
  • Clippy 检查通过
  • Prettier 检查通过
  • cargo fmt 检查通过

功能测试

  • AMP Code Profile 选择和保存
  • 透明代理启动/停止
  • Access Token 验证
  • 智能路由(Claude/Codex/Gemini 请求识别)
  • 本地网页搜索(Tavily + DuckDuckGo 降级)
  • 本地网页提取(含 SSRF 防护验证)

风险评估

低风险 ✅

  • 新增功能,不影响现有工具的代理逻辑
  • AMP Code 原生配置备份机制确保可还原
  • SSRF 防护已覆盖常见攻击向量

需注意 ⚠️

  • 依赖 ampcode.com API 可用性(用户认证)
  • DuckDuckGo HTML 结构变更可能影响降级搜索

Breaking Changes: 无
依赖变更: 无

- 添加 AMP profile 选择的后端服务和 Tauri 命令
- 实现 AMP profile 选择前端组件,允许选择 claude, codex, gemini profile
- 将 AMP profile 选择功能集成至 Profile 管理页面,并增加专用标签页
- 定义 AMP profile 相关类型,并新增 AMP logo 资源
- 目标是让 AMP Code 复用现有工具的 Profile 配置
- 在代理服务中集成 amp code 工具,实现动态路由到 claude/codex/gemini
- 引入 `AmpHeadersProcessor`,根据请求特征(路径、头部、模型字段)自动识别上游 api 类型
- 更新后端配置模型和存储,为 amp code 提供独立的代理配置和默认端口 (8790)
- 调整代理启动和请求处理逻辑,amp code 动态获取 api key 和 base url,跳过直接配置验证
- 在前端界面(工具列表、控制栏、设置)中全面支持 amp code 的显示和交互
- 优化前端代理控制栏显示,amp code 不显示 profile 配置和切换按钮
  - 【feat】新增 Amp Code 用户认证功能:
    - 实现后端命令,支持获取用户信息、验证并保存 Access Token。
    - 引入 Amp 原生配置管理服务,用于备份、修改和还原 Amp CLI 配置文件。
    - 更新代理配置模型,支持存储 Amp 原生配置备份,确保代理停止时能完整还原。
    - 新增前端 UI,支持 Amp Access Token 输入、验证和用户状态显示,并调整会话级端点配置的显示逻辑。
    - 将 Amp Code 添加到自动启动代理列表和 Tauri 命令处理。
  - 【refactor】重构 Amp 请求处理器,实现智能路由:
    - 将内部 Amp API 请求转发至 ampcode.com。
    - 将 LLM 相关请求路由至用户选择的 AI 模型 Profile。
  - 【refactor】优化代理实例的停止逻辑,引入取消令牌以实现更优雅的服务关闭。
  - 【chore】更新代理配置迁移逻辑,以支持新的 Amp 配置字段。
@github-actions
Copy link

github-actions bot commented Jan 8, 2026

本评论会随各平台任务完成自动更新:
如首轮 npm run check 失败,请在本地执行 npm run check:fixnpm run check 并提交修复 commit。
如 fix 仍失败,请在本地排查并确保 npm run check 通过后再提交。
跨平台差异若无法复现,请复制日志交给 AI 获取排查建议。

平台 结果 明细 日志包 运行链接
ubuntu-22.04 ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-ubuntu-22.04 日志
windows-latest ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-windows-latest 日志
macos-14 (arm64) ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-macos-arm64 日志
macos-15 (x64) ✅ 直接通过 check=success / fix=skipped / recheck=skipped pr-check-macos-x64 日志

This comment auto-updates as each platform finishes:
If the first npm run check fails, run locally: npm run check:fixnpm run check and commit the fix.
If fix still fails, investigate locally and ensure npm run check passes before committing.
If cross-platform issues can't be reproduced, copy logs to an AI for hints.

Platform Status Detail Artifact Run
ubuntu-22.04 ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-ubuntu-22.04 日志
windows-latest ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-windows-latest 日志
macos-14 (arm64) ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-macos-arm64 日志
macos-15 (x64) ✅ Passed check=success / fix=skipped / recheck=skipped pr-check-macos-x64 日志

  - 确保当输入为空时,AMP Access Token 和基础 URL 能够被正确保存为 null,从而允许清除配置
  - 修复了之前无法通过清空输入框来重置 AMP Access Token 配置的问题

style(amp-code): 统一 AMP Code 品牌命名为大写
  - 将原生配置文件中的“Amp Code”注释更新为“AMP Code”以保持一致性
  - 将透明代理页面工具列表中的“Amp Code”显示名称更新为“AMP Code”
@ehgen0ng ehgen0ng changed the title feat(amp): 新增 Amp Code 透明代理支持 feat(amp): 新增 AMP Code 透明代理支持 Jan 9, 2026
- 【新功能】在 AMP Code 中实现 `webSearch2` 和 `extractWebPageContent` 本地工具
- 【新功能】添加 Tavily API 密钥配置,增强网页搜索能力
- 【新功能】Tavily 密钥未配置时,提供 DuckDuckGo HTML 搜索作为网页搜索备用方案
- 【新功能】为 `extractWebPageContent` 引入健壮的 SSRF 防护,防止访问内部网络
- 【重构】统一代码库中所有“Amp”引用为“AMP Code”,提升一致性
- 调整多行表达式和函数签名的换行,提升代码可读性
- 统一代码缩进,保持项目代码风格一致性
- 将 AMP Code 配置备份从原始 JSON 字符串切换为 `serde_json::Value`
- 实现配置的语义化备份,增强处理健壮性并避免误删用户文件
- 更新 `amp_native_config` 服务,直接操作 JSON 对象而非字符串
- 引入 `DataManager` 统一文件读写,提升跨平台兼容性和错误处理
- 优化 home 目录获取逻辑,确保不同系统下路径识别正确
- 修复旧版配置迁移中 `original_amp_settings` 和 `original_amp_secrets` 的解析
@DuckCoding-dev DuckCoding-dev merged commit 82a034b into DuckCoding-dev:main Jan 13, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants