mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-10-28 03:43:32 +08:00
feat: release v0.89.0 and rename Proxycast to Lime
This commit is contained in:
@@ -47,4 +47,4 @@ jobs:
|
||||
|
||||
- name: Run OpenClaw install regression tests
|
||||
shell: pwsh
|
||||
run: cargo test -p proxycast-core openclaw_install --manifest-path "src-tauri/Cargo.toml"
|
||||
run: cargo test -p lime-core openclaw_install --manifest-path "src-tauri/Cargo.toml"
|
||||
|
||||
@@ -125,7 +125,7 @@ jobs:
|
||||
fi
|
||||
{
|
||||
echo "RELEASE_BODY<<RELEASE_BODY_EOF"
|
||||
echo "## ProxyCast ${TAG}"
|
||||
echo "## Lime ${TAG}"
|
||||
echo ""
|
||||
echo "### Changes"
|
||||
echo "${CHANGELOG}"
|
||||
@@ -177,7 +177,7 @@ jobs:
|
||||
tauriScript: npx tauri
|
||||
projectPath: src-tauri
|
||||
tagName: ${{ github.event.inputs.version || github.ref_name }}
|
||||
releaseName: "ProxyCast ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseName: "Lime ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseBody: ${{ env.RELEASE_BODY }}
|
||||
releaseDraft: false
|
||||
prerelease: false
|
||||
@@ -200,7 +200,7 @@ jobs:
|
||||
tauriScript: npx tauri
|
||||
projectPath: src-tauri
|
||||
tagName: ${{ github.event.inputs.version || github.ref_name }}
|
||||
releaseName: "ProxyCast ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseName: "Lime ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseBody: ${{ env.RELEASE_BODY }}
|
||||
releaseDraft: false
|
||||
prerelease: false
|
||||
@@ -225,7 +225,7 @@ jobs:
|
||||
tauriScript: npx tauri
|
||||
projectPath: src-tauri
|
||||
tagName: ${{ github.event.inputs.version || github.ref_name }}
|
||||
releaseName: "ProxyCast ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseName: "Lime ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseBody: ${{ env.RELEASE_BODY }}
|
||||
releaseDraft: false
|
||||
prerelease: false
|
||||
@@ -260,7 +260,7 @@ jobs:
|
||||
tauriScript: npx tauri
|
||||
projectPath: src-tauri
|
||||
tagName: ${{ github.event.inputs.version || github.ref_name }}
|
||||
releaseName: "ProxyCast ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseName: "Lime ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseBody: ${{ env.RELEASE_BODY }}
|
||||
releaseDraft: false
|
||||
prerelease: false
|
||||
@@ -289,7 +289,7 @@ jobs:
|
||||
tauriScript: npx tauri
|
||||
projectPath: src-tauri
|
||||
tagName: ${{ github.event.inputs.version || github.ref_name }}
|
||||
releaseName: "ProxyCast ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseName: "Lime ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseBody: ${{ env.RELEASE_BODY }}
|
||||
releaseDraft: false
|
||||
prerelease: false
|
||||
@@ -312,7 +312,7 @@ jobs:
|
||||
tauriScript: npx tauri
|
||||
projectPath: src-tauri
|
||||
tagName: ${{ github.event.inputs.version || github.ref_name }}
|
||||
releaseName: "ProxyCast ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseName: "Lime ${{ github.event.inputs.version || github.ref_name }}"
|
||||
releaseBody: ${{ env.RELEASE_BODY }}
|
||||
releaseDraft: false
|
||||
prerelease: false
|
||||
|
||||
@@ -34,14 +34,14 @@ jobs:
|
||||
|
||||
# 下载 ARM64 DMG
|
||||
echo "下载 ARM64 DMG..."
|
||||
curl -sL -o arm64.dmg "https://github.com/aiclientproxy/proxycast/releases/download/v${VERSION}/proxycast_${VERSION}_aarch64.dmg"
|
||||
curl -sL -o arm64.dmg "https://github.com/aiclientproxy/lime/releases/download/v${VERSION}/lime_${VERSION}_aarch64.dmg"
|
||||
ARM64_SHA=$(shasum -a 256 arm64.dmg | awk '{print $1}')
|
||||
echo "ARM64 SHA256: $ARM64_SHA"
|
||||
echo "arm64_sha=$ARM64_SHA" >> $GITHUB_OUTPUT
|
||||
|
||||
# 下载 x64 DMG
|
||||
echo "下载 x64 DMG..."
|
||||
curl -sL -o x64.dmg "https://github.com/aiclientproxy/proxycast/releases/download/v${VERSION}/proxycast_${VERSION}_x64.dmg"
|
||||
curl -sL -o x64.dmg "https://github.com/aiclientproxy/lime/releases/download/v${VERSION}/lime_${VERSION}_x64.dmg"
|
||||
X64_SHA=$(shasum -a 256 x64.dmg | awk '{print $1}')
|
||||
echo "x64 SHA256: $X64_SHA"
|
||||
echo "x64_sha=$X64_SHA" >> $GITHUB_OUTPUT
|
||||
@@ -59,37 +59,37 @@ jobs:
|
||||
ARM64_SHA="${{ steps.sha.outputs.arm64_sha }}"
|
||||
X64_SHA="${{ steps.sha.outputs.x64_sha }}"
|
||||
|
||||
cat > homebrew-tap/Casks/proxycast.rb << EOF
|
||||
cask "proxycast" do
|
||||
cat > homebrew-tap/Casks/lime.rb << EOF
|
||||
cask "lime" do
|
||||
version "$VERSION"
|
||||
|
||||
on_arm do
|
||||
sha256 "$ARM64_SHA"
|
||||
url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/proxycast_#{version}_aarch64.dmg"
|
||||
url "https://github.com/aiclientproxy/lime/releases/download/v#{version}/lime_#{version}_aarch64.dmg"
|
||||
end
|
||||
|
||||
on_intel do
|
||||
sha256 "$X64_SHA"
|
||||
url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/proxycast_#{version}_x64.dmg"
|
||||
url "https://github.com/aiclientproxy/lime/releases/download/v#{version}/lime_#{version}_x64.dmg"
|
||||
end
|
||||
|
||||
name "ProxyCast"
|
||||
name "Lime"
|
||||
desc "AI API 代理桌面应用 - 将 AI 客户端凭证转换为 OpenAI 兼容接口"
|
||||
homepage "https://github.com/aiclientproxy/proxycast"
|
||||
homepage "https://github.com/aiclientproxy/lime"
|
||||
|
||||
livecheck do
|
||||
url :url
|
||||
strategy :github_latest
|
||||
end
|
||||
|
||||
app "ProxyCast.app"
|
||||
app "Lime.app"
|
||||
|
||||
zap trash: [
|
||||
"~/.config/com.proxycast.app",
|
||||
"~/Library/Application Support/com.proxycast.app",
|
||||
"~/Library/Caches/com.proxycast.app",
|
||||
"~/Library/Preferences/com.proxycast.app.plist",
|
||||
"~/Library/Saved Application State/com.proxycast.app.savedState",
|
||||
"~/.config/com.lime.app",
|
||||
"~/Library/Application Support/com.lime.app",
|
||||
"~/Library/Caches/com.lime.app",
|
||||
"~/Library/Preferences/com.lime.app.plist",
|
||||
"~/Library/Saved Application State/com.lime.app.savedState",
|
||||
]
|
||||
end
|
||||
EOF
|
||||
@@ -99,6 +99,6 @@ jobs:
|
||||
cd homebrew-tap
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git add Casks/proxycast.rb
|
||||
git commit -m "chore: bump proxycast to ${{ steps.version.outputs.version }}"
|
||||
git add Casks/lime.rb
|
||||
git commit -m "chore: bump lime to ${{ steps.version.outputs.version }}"
|
||||
git push
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ docs/prd/
|
||||
# Internal roadmap&gongzonghao (private)
|
||||
docs/roadmap/
|
||||
docs/gongzonghao/
|
||||
|
||||
docs/bussniss/
|
||||
# Issues tracking (internal use only)
|
||||
.issues/
|
||||
|
||||
|
||||
@@ -153,14 +153,14 @@ Kiro 凭证采用完全独立的副本策略:
|
||||
|
||||
### 修改凭证管理
|
||||
|
||||
- 凭证文件存储在应用数据目录下的 `proxycast/credentials/`;`~/Library/Application Support/proxycast/credentials/` 仅作为 macOS 示例,Windows 请使用对应的应用数据目录
|
||||
- 凭证文件存储在应用数据目录下的 `lime/credentials/`;`~/Library/Application Support/lime/credentials/` 仅作为 macOS 示例,Windows 请使用对应的应用数据目录
|
||||
- 数据库存储凭证元数据和状态
|
||||
- Token 缓存在数据库中,避免频繁读取文件
|
||||
|
||||
### 调试技巧
|
||||
|
||||
- 日志输出使用 `tracing` 宏
|
||||
- API 请求调试文件保存在应用日志目录;`~/.proxycast/logs/` 仅作为 macOS 示例,实现与排障时不要写死该路径
|
||||
- API 请求调试文件保存在应用日志目录;`~/.lime/logs/` 仅作为 macOS 示例,实现与排障时不要写死该路径
|
||||
- 使用 `debug_kiro_credentials` 命令调试凭证加载
|
||||
|
||||
## 文档维护
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div align="center">
|
||||
|
||||
# ProxyCast
|
||||
# Lime
|
||||
|
||||
**以创作为中心的本地优先 AI Agent 交互工作台**
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
## 这是什么
|
||||
|
||||
ProxyCast 是一个基于 Tauri 的桌面应用,面向创作者、内容团队与轻知识工作者。它把 Workspace、Agent、Skills、MCP、Claw 渠道和 Artifact 交付整合到同一个桌面环境里,让工作从输入需求直接走向可沉淀、可复用、可继续执行的结果。
|
||||
Lime 是一个基于 Tauri 的桌面应用,面向创作者、内容团队与轻知识工作者。它把 Workspace、Agent、Skills、MCP、Claw 渠道和 Artifact 交付整合到同一个桌面环境里,让工作从输入需求直接走向可沉淀、可复用、可继续执行的结果。
|
||||
|
||||
你可以在一个地方完成:
|
||||
|
||||
@@ -34,13 +34,13 @@ ProxyCast 是一个基于 Tauri 的桌面应用,面向创作者、内容团队
|
||||
|
||||
- Skills 封装 prompt、references、scripts、assets 和调用规则
|
||||
- Skills 既定义如何交互,也定义任务如何推进
|
||||
- 它们是 ProxyCast 中经验复用、流程复用和领域方法沉淀的核心单元
|
||||
- 它们是 Lime 中经验复用、流程复用和领域方法沉淀的核心单元
|
||||
|
||||
### 3. MCP 是标准能力层
|
||||
|
||||
- 基于 MCP 接入 tools、resources、prompts 和工作边界
|
||||
- 让浏览器、文件、终端和外部服务成为 Agent 的标准化能力网络
|
||||
- 让 ProxyCast 的能力扩展建立在开放标准之上
|
||||
- 让 Lime 的能力扩展建立在开放标准之上
|
||||
|
||||
### 4. Claw 渠道是异步协作入口
|
||||
|
||||
@@ -101,7 +101,7 @@ ProxyCast 是一个基于 Tauri 的桌面应用,面向创作者、内容团队
|
||||
|
||||
## 如何工作
|
||||
|
||||
ProxyCast 的核心工作方式是:
|
||||
Lime 的核心工作方式是:
|
||||
|
||||
1. 在 Workspace 内组织项目、素材、记忆和风格
|
||||
2. 用 Skills 定义经验交互与流程推进
|
||||
@@ -119,15 +119,15 @@ ProxyCast 的核心工作方式是:
|
||||
|
||||
```bash
|
||||
brew tap aiclientproxy/tap
|
||||
brew install --cask proxycast
|
||||
brew install --cask lime
|
||||
```
|
||||
|
||||
#### 手动下载
|
||||
|
||||
从 [Releases](https://github.com/aiclientproxy/proxycast/releases) 下载对应平台安装包。
|
||||
从 [Releases](https://github.com/aiclientproxy/lime/releases) 下载对应平台安装包。
|
||||
|
||||
- Windows 用户默认优先下载 `ProxyCast_*_x64-online-setup.exe`(NSIS 在线安装器,体积更小)
|
||||
- 如果处于离线、内网或受限网络环境,请改用 `ProxyCast_*_x64-offline-setup.exe`
|
||||
- Windows 用户默认优先下载 `Lime_*_x64-online-setup.exe`(NSIS 在线安装器,体积更小)
|
||||
- 如果处于离线、内网或受限网络环境,请改用 `Lime_*_x64-offline-setup.exe`
|
||||
- 如被 SmartScreen 拦截,属于未签名或签名信誉不足的 Windows 常见提示,不代表安装包必然损坏
|
||||
|
||||
---
|
||||
|
||||
+14
-35
@@ -1,52 +1,31 @@
|
||||
## ProxyCast v0.88.0
|
||||
## Lime v0.89.0
|
||||
|
||||
### ✨ 新功能
|
||||
### ✨ 主要更新
|
||||
|
||||
- **自动化任务中心**:新增 `automation` 命令、服务、DAO 与设置页,支持定时任务、计划预览、健康检查、运行历史,以及 `Agent 对话任务 / 浏览器会话任务` 两种执行形态
|
||||
- **浏览器资料与环境预设**:新增 Browser Profile / Browser Environment Preset 管理,支持托管浏览器与附着当前 Chrome 两种资料模式,并可直接复用于浏览器运行时
|
||||
- **浏览器现有会话接管**:补齐 existing session attach、页签切换、桥接状态同步与 Browser Runtime 工作区协同链路
|
||||
- **Agent Chat 决策与空状态升级**:新增 `DecisionPanel`、空状态 Hero / Quick Actions、A2UI 预览卡、线程分组与消息轮次分组,强化新任务入口与浏览器协助预热
|
||||
- **品牌正式更名为 Lime**:主程序名称、仓库链接、安装包命名、Tauri `productName` / `identifier`、深链 scheme、浏览器桥扩展目录与发布文案已统一从 `Proxycast` 切换到 `Lime`
|
||||
- **版本事实源继续收口**:统一 `package.json`、Cargo workspace / package、两份 Tauri 配置与 `RELEASE_NOTES.md` 的版本入口,发布流程继续只读取这一套版本源
|
||||
- **运行时命名继续收口**:Tool Calling、Web Search、Durable Memory、workspace sandbox、真实测试与浏览器桥接等运行时环境变量统一以 `LIME_*` / `__LIME_*` 为现役事实源,旧 `PROXYCAST_*` 仅保留兼容读取
|
||||
- **生态入口同步完成**:README、插件升级入口、About 页、扩展说明与下载地址等对外入口统一使用 `Lime`
|
||||
|
||||
### 🔧 优化与重构
|
||||
### ⚠️ 兼容性说明
|
||||
|
||||
- **执行系统收敛**:移除旧 `batch` 页面/API 与 `heartbeat` 命令/设置入口,统一收口到 `automation` 与 `execution tracker`
|
||||
- **OpenClaw 工作台重做**:重排安装、配置、运行、Dashboard 与进度页,补强 Windows 环境检测、修复引导与诊断复制
|
||||
- **Settings v2 持续整理**:合并媒体服务设置,重构 Chrome Relay、Execution Tracker、About、Appearance 等页面,统一导航与信息架构
|
||||
- **资源与创作工作台更新**:重构资源页、图像生成、视频画布、项目选择器与多处内容创作界面,提升工作区一致性
|
||||
|
||||
### 🐛 修复
|
||||
|
||||
- **插件兼容与更新提示补强**:插件管理页新增 Windows 主程序升级入口和最低版本提示,降低插件与主程序版本错配的排障成本
|
||||
- **Browser Runtime / DevBridge 稳定性提升**:补齐浏览器会话启动参数、流诊断、桥接 mock 与状态同步,减少运行时偏差
|
||||
- **Provider 配置读写修复**:完善 API Key Provider 的 `api_version`、`project` 等配置项读写与表单校验
|
||||
- **Windows 启动与安装诊断改进**:补充安装说明、常见问题与构建文档,降低受限网络与依赖缺失场景下的排障摩擦
|
||||
|
||||
### ⚠️ 兼容性调整
|
||||
|
||||
- 旧 `Batch` / `Heartbeat` 相关前端入口与后端命令已下线;既有流程请迁移到新的 `Automation` 设置页与统一执行记录
|
||||
- 旧 `proxycast` 数据目录、数据库文件与历史路径仍保留启动迁移兼容,现有数据会继续被识别并迁移到 `lime` 目录
|
||||
- 后续对外暴露的现役命名统一使用 `Lime`;旧 `Proxycast` 命名仅作为兼容层保留,不再继续扩展
|
||||
|
||||
### 🧪 测试
|
||||
|
||||
- 新增 Automation、Browser Profile / Environment Preset、Existing Session Attach、Agent Chat 分组与插件版本提示等测试覆盖
|
||||
- 补充 Browser Runtime、OpenClaw、Execution Tracker、Chrome Relay 与多处设置页交互测试
|
||||
- 发布前已执行:`cargo fmt --all`、`cargo test`、`cargo clippy`、`npm run lint`
|
||||
- 发布前执行:`cargo test`、`cargo fmt --all`、`cargo clippy`、`npm run lint`
|
||||
|
||||
### 📝 文档
|
||||
|
||||
- 更新 README、架构概览、安装、故障排查、构建与运维文档
|
||||
- 补充 NextBrowser 相关研究资料与浏览器自动化设计记录
|
||||
|
||||
### 🛠️ 开发体验
|
||||
|
||||
- **Windows 发布流程增强**:Release Workflow 现同时产出在线 / 离线两个 Windows 安装包
|
||||
- **版本源保持一致**:统一 `package.json`、Cargo workspace、两份 Tauri 配置与 `RELEASE_NOTES.md` 的发布版本入口
|
||||
- 更新发布说明、仓库链接、安装与分发文案,统一使用 `Lime`
|
||||
|
||||
### 📦 Windows 下载说明
|
||||
|
||||
- `ProxyCast_*_x64-online-setup.exe`:默认推荐,体积更小,安装时按需下载 WebView2
|
||||
- `ProxyCast_*_x64-offline-setup.exe`:适用于离线、内网或受限网络环境
|
||||
- `Lime_*_x64-online-setup.exe`:默认推荐,体积更小,安装时按需下载 WebView2
|
||||
- `Lime_*_x64-offline-setup.exe`:适用于离线、内网或受限网络环境
|
||||
- 如果在线安装失败,请改用离线安装包
|
||||
|
||||
---
|
||||
|
||||
**完整变更**: v0.87.0...v0.88.0
|
||||
**完整变更**: v0.88.0...v0.89.0
|
||||
|
||||
+3
-2
@@ -2,7 +2,7 @@
|
||||
|
||||
## 目录定位
|
||||
|
||||
`docs/` 是 ProxyCast 文档中心,分为两类受众:
|
||||
`docs/` 是 Lime 文档中心,分为两类受众:
|
||||
|
||||
- 普通创作者:优先阅读 `content/` 下的入门与用户指南
|
||||
- 开发者与维护者:阅读 `aiprompts/`、`develop/`、`tests/` 等工程文档
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
- `content/`:对外文档站正文(产品介绍、用户指南、进阶能力)
|
||||
- `aiprompts/`:模块级工程文档(前后端组件、服务、命令、数据层)
|
||||
- `bussniss/`:商务合作与代理运营方案
|
||||
- `develop/`:开发流程与协作规范
|
||||
- `plugins/`:插件与扩展相关文档
|
||||
- `tests/`:测试策略与用例文档
|
||||
@@ -24,7 +25,7 @@
|
||||
- `develop/execution-tracker-p0-acceptance-report.md`:统一执行追踪 P0 验收报告
|
||||
- `develop/execution-tracker-p1-p2-roadmap.md`:统一执行追踪后续路线(P1/P2)
|
||||
- `develop/scheduler-task-governance-p1.md`:调度任务治理 P1(连续失败、自动停用、冷却恢复)
|
||||
- `roadmap/proxycast-skills-standardization-roadmap.md`:Skills 标准化与产品化路线图
|
||||
- `roadmap/lime-skills-standardization-roadmap.md`:Skills 标准化与产品化路线图
|
||||
- `ops.md`:运维与发布说明
|
||||
- `app.config.ts` / `nuxt.config.ts` / `package.json`:文档站配置
|
||||
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
# ProxyCast 技术规格文档
|
||||
# Lime 技术规格文档
|
||||
|
||||
## 项目概述
|
||||
|
||||
ProxyCast 是一个桌面端 AI API 代理工具,将各种大模型客户端 API(Gemini CLI、Qwen Code、Kiro Claude 等)统一转换为本地 OpenAI 兼容接口。
|
||||
Lime 是一个桌面端 AI API 代理工具,将各种大模型客户端 API(Gemini CLI、Qwen Code、Kiro Claude 等)统一转换为本地 OpenAI 兼容接口。
|
||||
|
||||
## 技术栈
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 集成状态 ✅
|
||||
|
||||
ProxyCast 已完整集成 aster-rust 框架,包括凭证池桥接。
|
||||
Lime 已完整集成 aster-rust 框架,包括凭证池桥接。
|
||||
|
||||
**后端模块** (`src-tauri/src/agent/`):
|
||||
|
||||
@@ -49,7 +49,7 @@ ProxyCast 已完整集成 aster-rust 框架,包括凭证池桥接。
|
||||
│ │ │ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌─────────────────────────────────────┐ │
|
||||
│ │ ProxyCast 凭证池 │ │
|
||||
│ │ Lime 凭证池 │ │
|
||||
│ │ - ProviderPoolService │ │
|
||||
│ │ - ApiKeyProviderService │ │
|
||||
│ └─────────────────────────────────────┘ │
|
||||
@@ -69,7 +69,7 @@ ProxyCast 已完整集成 aster-rust 框架,包括凭证池桥接。
|
||||
|
||||
### 支持的凭证类型映射
|
||||
|
||||
| ProxyCast 凭证类型 | Aster Provider |
|
||||
| Lime 凭证类型 | Aster Provider |
|
||||
| -------------------------- | -------------- |
|
||||
| OpenAIKey | openai |
|
||||
| ClaudeKey / AnthropicKey | anthropic |
|
||||
|
||||
@@ -112,7 +112,7 @@ src-tauri/src/converter/
|
||||
```rust
|
||||
// Antigravity 请求格式 (参考 CLIProxyAPI)
|
||||
{
|
||||
"project": "proxycast",
|
||||
"project": "lime",
|
||||
"request": {
|
||||
"contents": [...],
|
||||
"systemInstruction": {...},
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# ProxyCast UI 视觉语言
|
||||
# Lime UI 视觉语言
|
||||
|
||||
## 适用范围
|
||||
|
||||
本规范适用于 ProxyCast 全部前端界面,包括:
|
||||
本规范适用于 Lime 全部前端界面,包括:
|
||||
|
||||
- 设置页
|
||||
- 功能工作台
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
## 视觉目标
|
||||
|
||||
ProxyCast 的整体界面应当接近以下气质:
|
||||
Lime 的整体界面应当接近以下气质:
|
||||
|
||||
- 轻盈、清晰、专业,而不是炫技
|
||||
- 信息优先,装饰只服务层级
|
||||
|
||||
@@ -190,7 +190,7 @@ npm run governance:legacy-report
|
||||
|
||||
只有当新增依赖被封住、调用量清零、旁路迁完,才允许删旧路径。
|
||||
|
||||
## Proxycast 中的典型判断方式
|
||||
## Lime 中的典型判断方式
|
||||
|
||||
以聊天系统为例,遇到新旧并存时,必须同时问这几个问题:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# ProxyCast 项目架构概览
|
||||
# Lime 项目架构概览
|
||||
|
||||
## 概述
|
||||
|
||||
ProxyCast 是一个以创作为中心的本地优先 AI Agent 交互工作台,基于 Tauri 桌面应用构建,面向创作者、内容团队与轻知识工作者。系统由 Workspace、Skills 编排层、MCP 标准能力层、Claw 渠道层、Artifact 交付层与多模型接入能力共同组成。
|
||||
Lime 是一个以创作为中心的本地优先 AI Agent 交互工作台,基于 Tauri 桌面应用构建,面向创作者、内容团队与轻知识工作者。系统由 Workspace、Skills 编排层、MCP 标准能力层、Claw 渠道层、Artifact 交付层与多模型接入能力共同组成。
|
||||
|
||||
可以把它理解为三层结构:
|
||||
|
||||
@@ -20,12 +20,12 @@ ProxyCast 是一个以创作为中心的本地优先 AI Agent 交互工作台,
|
||||
- **Tracing**:时间线、步骤与调用轨迹可观测
|
||||
- **MCP**:tools / resources / prompts / roots 的标准能力接入
|
||||
|
||||
在 ProxyCast 中,Skills 处于比 MCP 更贴近产品的一层:它不是底层原语,而是将领域经验、交互方式和执行流程打包后的编排单元。
|
||||
在 Lime 中,Skills 处于比 MCP 更贴近产品的一层:它不是底层原语,而是将领域经验、交互方式和执行流程打包后的编排单元。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
proxycast/
|
||||
lime/
|
||||
├── src/ # React 前端
|
||||
│ ├── components/ # UI 组件
|
||||
│ ├── pages/ # 页面组件
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 目的
|
||||
|
||||
本文件用于指导 AI Agent 在 ProxyCast 中继续进行浏览器端 E2E 测试,特别适用于以下场景:
|
||||
本文件用于指导 AI Agent 在 Lime 中继续进行浏览器端 E2E 测试,特别适用于以下场景:
|
||||
|
||||
- 用户说“继续测试”“继续复现”“继续用 Playwright MCP 验证”
|
||||
- 需要复用当前浏览器标签页和已有页面状态
|
||||
@@ -79,7 +79,7 @@ npm run bridge:health -- --timeout-ms 120000
|
||||
优先顺序:
|
||||
|
||||
1. 调用 `browser_tabs` 查看当前标签页
|
||||
2. 如果已有 `ProxyCast` 标签页,先查看当前 URL、标题、页面状态
|
||||
2. 如果已有 `Lime` 标签页,先查看当前 URL、标题、页面状态
|
||||
3. 如果页面已漂移到旧状态,直接重新导航到 `http://127.0.0.1:1420/`
|
||||
|
||||
建议:
|
||||
@@ -113,7 +113,7 @@ npm run bridge:health -- --timeout-ms 120000
|
||||
- 页面中明确可见的标题文本
|
||||
- `browser_snapshot` 返回的 ref 作为精确交互目标
|
||||
|
||||
## ProxyCast 推荐 E2E 主路径
|
||||
## Lime 推荐 E2E 主路径
|
||||
|
||||
### 首页基础验证
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 概述
|
||||
|
||||
插件系统支持扩展 ProxyCast 功能,包含声明式 UI 系统。
|
||||
插件系统支持扩展 Lime 功能,包含声明式 UI 系统。
|
||||
|
||||
## 目录结构
|
||||
|
||||
|
||||
+11
-11
@@ -2,7 +2,7 @@
|
||||
|
||||
## 概述
|
||||
|
||||
Workspace 是 ProxyCast 应用层的概念,用于组织和管理 AI Agent 的工作上下文。它是对 Aster 框架 `Session.working_dir` 的命名和配置包装,不修改 Aster 框架本身。
|
||||
Workspace 是 Lime 应用层的概念,用于组织和管理 AI Agent 的工作上下文。它是对 Aster 框架 `Session.working_dir` 的命名和配置包装,不修改 Aster 框架本身。
|
||||
|
||||
## 设计背景
|
||||
|
||||
@@ -29,7 +29,7 @@ Workspace 是 ProxyCast 应用层的概念,用于组织和管理 AI Agent 的
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ ProxyCast (应用层) │
|
||||
│ Lime (应用层) │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐│
|
||||
│ │ Workspace 管理 ││
|
||||
│ │ - WorkspaceManager: CRUD 操作 ││
|
||||
@@ -55,7 +55,7 @@ Workspace 是 ProxyCast 应用层的概念,用于组织和管理 AI Agent 的
|
||||
|
||||
- Workspace 通过 `root_path` 与 Aster `Session.working_dir` 关联
|
||||
- 一个 Workspace 可以包含多个 Session(同一 working_dir)
|
||||
- ProxyCast 按 Workspace 分组显示 Session 列表
|
||||
- Lime 按 Workspace 分组显示 Session 列表
|
||||
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ Workspace 是 ProxyCast 应用层的概念,用于组织和管理 AI Agent 的
|
||||
### Workspace 类型定义
|
||||
|
||||
```rust
|
||||
// proxycast/src-tauri/src/workspace/types.rs
|
||||
// lime/src-tauri/src/workspace/types.rs
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::path::PathBuf;
|
||||
@@ -107,7 +107,7 @@ pub struct WorkspaceSettings {
|
||||
### 数据库 Schema
|
||||
|
||||
```sql
|
||||
-- proxycast 应用数据库
|
||||
-- lime 应用数据库
|
||||
CREATE TABLE workspaces (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
@@ -129,7 +129,7 @@ CREATE INDEX idx_workspaces_root_path ON workspaces(root_path);
|
||||
### WorkspaceManager
|
||||
|
||||
```rust
|
||||
// proxycast/src-tauri/src/workspace/manager.rs
|
||||
// lime/src-tauri/src/workspace/manager.rs
|
||||
|
||||
impl WorkspaceManager {
|
||||
/// 创建新 workspace
|
||||
@@ -187,7 +187,7 @@ impl WorkspaceManager {
|
||||
### Tauri 命令
|
||||
|
||||
```rust
|
||||
// proxycast/src-tauri/src/commands/workspace_cmd.rs
|
||||
// lime/src-tauri/src/commands/workspace_cmd.rs
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn workspace_create(name: String, root_path: String) -> Result<Workspace, String>;
|
||||
@@ -226,8 +226,8 @@ pub async fn workspace_create_session(workspace_id: String, name: String) -> Res
|
||||
│ └── sessions.db # Aster 管理的 session 数据库
|
||||
└── state/
|
||||
|
||||
~/Library/Application Support/proxycast/ # ProxyCast 应用目录
|
||||
├── proxycast.db # 应用数据库(包含 workspaces 表)
|
||||
~/Library/Application Support/lime/ # Lime 应用目录
|
||||
├── lime.db # 应用数据库(包含 workspaces 表)
|
||||
├── credentials/ # 凭证文件
|
||||
└── workspaces/ # workspace 级配置
|
||||
├── default/
|
||||
@@ -241,7 +241,7 @@ pub async fn workspace_create_session(workspace_id: String, name: String) -> Res
|
||||
### WorkspaceSelector
|
||||
|
||||
```typescript
|
||||
// proxycast/src/components/workspace/WorkspaceSelector.tsx
|
||||
// lime/src/components/workspace/WorkspaceSelector.tsx
|
||||
|
||||
interface Workspace {
|
||||
id: string;
|
||||
@@ -304,7 +304,7 @@ export function WorkspaceSelector() {
|
||||
|
||||
| 决策点 | 选择 | 理由 |
|
||||
|--------|------|------|
|
||||
| Workspace 存储位置 | ProxyCast 应用层 | 不修改 Aster 框架,保持框架通用性 |
|
||||
| Workspace 存储位置 | Lime 应用层 | 不修改 Aster 框架,保持框架通用性 |
|
||||
| 与 Session 关系 | 通过 working_dir 关联 | 利用 Aster 现有字段,无需修改框架 |
|
||||
| 配置存储 | 独立目录 + 数据库 | 配置文件便于编辑,元数据存数据库 |
|
||||
| 默认 Workspace | 支持 | 新 Session 自动关联默认 Workspace |
|
||||
|
||||
+6
-6
@@ -1,18 +1,18 @@
|
||||
export default {
|
||||
docus: {
|
||||
title: "ProxyCast",
|
||||
title: "Lime",
|
||||
description: "把你的 AI 客户端额度用到任何地方",
|
||||
url: "https://aiclientproxy.github.io/proxycast",
|
||||
url: "https://aiclientproxy.github.io/lime",
|
||||
|
||||
image: "/images/logo-banner.svg",
|
||||
|
||||
socials: {
|
||||
github: "aiclientproxy/proxycast",
|
||||
github: "aiclientproxy/lime",
|
||||
},
|
||||
|
||||
header: {
|
||||
logo: true,
|
||||
title: "ProxyCast",
|
||||
title: "Lime",
|
||||
showLinkIcon: true,
|
||||
},
|
||||
|
||||
@@ -25,13 +25,13 @@ export default {
|
||||
footer: {
|
||||
credits: {
|
||||
icon: "",
|
||||
text: "Made with 💜 by ProxyCast Team",
|
||||
text: "Made with 💜 by Lime Team",
|
||||
href: "https://github.com/aiclientproxy",
|
||||
},
|
||||
textLinks: [
|
||||
{
|
||||
text: "GitHub",
|
||||
href: "https://github.com/aiclientproxy/proxycast",
|
||||
href: "https://github.com/aiclientproxy/lime",
|
||||
target: "_blank",
|
||||
},
|
||||
],
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
title: 概述
|
||||
description: 了解 ProxyCast 如何支持从灵感到发布的完整创作流程
|
||||
description: 了解 Lime 如何支持从灵感到发布的完整创作流程
|
||||
navigation:
|
||||
icon: i-heroicons-home
|
||||
---
|
||||
|
||||
# ProxyCast 概述
|
||||
# Lime 概述
|
||||
|
||||
ProxyCast 是一款创作类 AI Agent 桌面应用。
|
||||
Lime 是一款创作类 AI Agent 桌面应用。
|
||||
它把对话、内容生成、图片创作、项目管理、资源沉淀放到同一个工作台里。
|
||||
|
||||
::alert{type="warning"}
|
||||
@@ -51,6 +51,6 @@ ProxyCast 是一款创作类 AI Agent 桌面应用。
|
||||
|
||||
## 下一步
|
||||
|
||||
- [安装指南](/introduction/installation) - 下载并安装 ProxyCast
|
||||
- [安装指南](/introduction/installation) - 下载并安装 Lime
|
||||
- [快速开始](/introduction/quickstart) - 3 步完成首次创作
|
||||
- [首页与工作台](/user-guide/dashboard) - 熟悉核心入口
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: 安装指南
|
||||
description: 下载、安装并验证 ProxyCast 可正常启动
|
||||
description: 下载、安装并验证 Lime 可正常启动
|
||||
navigation:
|
||||
icon: i-heroicons-arrow-down-tray
|
||||
---
|
||||
@@ -18,21 +18,21 @@ navigation:
|
||||
|
||||
从 GitHub Releases 下载最新版本安装包:
|
||||
|
||||
[下载 ProxyCast](https://github.com/aiclientproxy/proxycast/releases)
|
||||
[下载 Lime](https://github.com/aiclientproxy/lime/releases)
|
||||
|
||||
### 安装包
|
||||
|
||||
| 平台 | 文件名 | 说明 |
|
||||
|------|--------|------|
|
||||
| macOS | `ProxyCast_x.x.x_aarch64.dmg` | Apple Silicon Mac |
|
||||
| Windows | `ProxyCast_x.x.x_x64-online-setup.exe` | 默认推荐,体积更小,安装时按需下载 WebView2 |
|
||||
| Windows | `ProxyCast_x.x.x_x64-offline-setup.exe` | 离线、内网或受限网络环境使用 |
|
||||
| macOS | `Lime_x.x.x_aarch64.dmg` | Apple Silicon Mac |
|
||||
| Windows | `Lime_x.x.x_x64-online-setup.exe` | 默认推荐,体积更小,安装时按需下载 WebView2 |
|
||||
| Windows | `Lime_x.x.x_x64-offline-setup.exe` | 离线、内网或受限网络环境使用 |
|
||||
|
||||
## macOS 安装
|
||||
|
||||
1. 下载 `.dmg` 文件
|
||||
2. 双击打开 DMG 镜像
|
||||
3. 将 ProxyCast 拖入 Applications 文件夹
|
||||
3. 将 Lime 拖入 Applications 文件夹
|
||||
4. 首次运行时,右键点击应用选择"打开"(绕过 Gatekeeper)
|
||||
|
||||
::alert{type="info"}
|
||||
@@ -41,18 +41,18 @@ navigation:
|
||||
|
||||
## Windows 安装
|
||||
|
||||
1. 优先下载 `ProxyCast_x.x.x_x64-online-setup.exe`
|
||||
1. 优先下载 `Lime_x.x.x_x64-online-setup.exe`
|
||||
2. 双击运行安装程序
|
||||
3. 按照安装向导完成安装
|
||||
4. 从开始菜单启动 ProxyCast
|
||||
4. 从开始菜单启动 Lime
|
||||
|
||||
::alert{type="info"}
|
||||
如果设备处于离线、内网或受限网络环境,请改用 `ProxyCast_x.x.x_x64-offline-setup.exe`。
|
||||
如果设备处于离线、内网或受限网络环境,请改用 `Lime_x.x.x_x64-offline-setup.exe`。
|
||||
::
|
||||
|
||||
## 验证安装
|
||||
|
||||
启动 ProxyCast 后,你应该看到:
|
||||
启动 Lime 后,你应该看到:
|
||||
|
||||
1. 主窗口正常打开
|
||||
2. 左侧出现主要入口(AI Agent、项目、资源、图片生成等)
|
||||
@@ -64,7 +64,7 @@ navigation:
|
||||
|
||||
```bash
|
||||
# 移除隔离属性
|
||||
xattr -cr /Applications/ProxyCast.app
|
||||
xattr -cr /Applications/Lime.app
|
||||
```
|
||||
|
||||
### Windows: SmartScreen 警告
|
||||
|
||||
@@ -13,12 +13,12 @@ navigation:
|
||||
|
||||
确保你已经:
|
||||
|
||||
- [x] 安装了 ProxyCast
|
||||
- [x] 安装了 Lime
|
||||
- [x] 可以正常打开应用主界面
|
||||
|
||||
## 步骤 1:选择创作主题与项目
|
||||
|
||||
1. 启动 ProxyCast,进入 AI Agent 或项目入口
|
||||
1. 启动 Lime,进入 AI Agent 或项目入口
|
||||
2. 选择你的主题方向(如社媒、短视频、小说)
|
||||
3. 新建项目,作为本次创作的工作空间
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ navigation:
|
||||
|
||||
# 首页与工作台
|
||||
|
||||
首页是你进入 ProxyCast 后的主入口。
|
||||
首页是你进入 Lime 后的主入口。
|
||||
建议把它理解为“创作操作台”,而不是单一功能面板。
|
||||
|
||||
## 左侧核心入口
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
📢 插件属于进阶能力。若你只做日常创作,可先跳过本页。
|
||||
::
|
||||
|
||||
插件中心用于扩展 ProxyCast 的能力,例如新增工具、接入外部流程、扩展特定场景工作流。
|
||||
插件中心用于扩展 Lime 的能力,例如新增工具、接入外部流程、扩展特定场景工作流。
|
||||
|
||||
## 访问插件中心
|
||||
|
||||
@@ -93,12 +93,12 @@ navigation:
|
||||
|
||||
### 插件无法加载
|
||||
|
||||
1. 检查 ProxyCast 版本是否满足插件要求
|
||||
1. 检查 Lime 版本是否满足插件要求
|
||||
2. 查看日志了解详细错误信息
|
||||
3. 尝试重新安装插件
|
||||
|
||||
### 二进制插件权限问题
|
||||
|
||||
部分二进制插件需要管理员权限:
|
||||
- **Windows**: 以管理员身份运行 ProxyCast
|
||||
- **Windows**: 以管理员身份运行 Lime
|
||||
- **macOS/Linux**: 插件会提示需要的权限
|
||||
|
||||
@@ -7,7 +7,7 @@ navigation:
|
||||
|
||||
# 资源库
|
||||
|
||||
资源库是 ProxyCast 的创作资产中心。
|
||||
资源库是 Lime 的创作资产中心。
|
||||
它和项目绑定,用来长期沉淀你的创作结果。
|
||||
|
||||
## 资源分类
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
|
||||
## 适用版本
|
||||
|
||||
- ProxyCast 已支持“渠道管理 > Gateway 公共隧道”配置卡片
|
||||
- Lime 已支持“渠道管理 > Gateway 公共隧道”配置卡片
|
||||
- 飞书渠道支持 `webhook` 模式
|
||||
|
||||
## 前置条件
|
||||
@@ -137,7 +137,7 @@ Cloudflare 相关字段(二选一):
|
||||
处理:
|
||||
|
||||
1. 确认 URL 为 `https://` 且可访问
|
||||
2. 对齐飞书后台与 ProxyCast 的 Token/Encrypt Key
|
||||
2. 对齐飞书后台与 Lime 的 Token/Encrypt Key
|
||||
|
||||
## 运维建议
|
||||
|
||||
@@ -150,9 +150,9 @@ Cloudflare 相关字段(二选一):
|
||||
桌面端建议按环境选择:
|
||||
|
||||
1. `managed`(应用内托管,默认)
|
||||
由 ProxyCast 在启动后自动拉起 tunnel,并定时检查进程状态;异常退出会自动重拉。
|
||||
由 Lime 在启动后自动拉起 tunnel,并定时检查进程状态;异常退出会自动重拉。
|
||||
2. `external`(系统级常驻,生产更稳)
|
||||
由系统服务管理 `cloudflared`,ProxyCast 仅做状态诊断与 webhook 同步。
|
||||
由系统服务管理 `cloudflared`,Lime 仅做状态诊断与 webhook 同步。
|
||||
|
||||
### 何时用 external
|
||||
|
||||
|
||||
@@ -118,13 +118,13 @@ curl -i "http://127.0.0.1:8999/v1/chat/completions" \
|
||||
适用:排查“为什么慢/为什么回退/是否命中缓存”等线上联调问题。
|
||||
|
||||
可观测调试头示例:
|
||||
- `x-proxycast-request-id`
|
||||
- `x-proxycast-cache`(`hit/store/skip-*`)
|
||||
- `x-proxycast-dedup`(`replay/wait-replay/new/removed-on-error`)
|
||||
- `x-proxycast-idempotency`(`replay/in-progress/new/removed-on-error`)
|
||||
- `x-proxycast-requested-provider` / `x-proxycast-effective-provider` / `x-proxycast-model`
|
||||
- `x-lime-request-id`
|
||||
- `x-lime-cache`(`hit/store/skip-*`)
|
||||
- `x-lime-dedup`(`replay/wait-replay/new/removed-on-error`)
|
||||
- `x-lime-idempotency`(`replay/in-progress/new/removed-on-error`)
|
||||
- `x-lime-requested-provider` / `x-lime-effective-provider` / `x-lime-model`
|
||||
|
||||
补充:在「团队共享网关(内网)」页面的「网关 API 测试」结果展开区域,也会直接显示这些 `x-proxycast-*` 调试头。
|
||||
补充:在「团队共享网关(内网)」页面的「网关 API 测试」结果展开区域,也会直接显示这些 `x-lime-*` 调试头。
|
||||
|
||||
## 调整顺序建议
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: 本地 API 接入
|
||||
description: 将 ProxyCast 能力暴露给外部工具(进阶)
|
||||
description: 将 Lime 能力暴露给外部工具(进阶)
|
||||
navigation:
|
||||
icon: i-heroicons-server
|
||||
---
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
这是进阶能力。普通创作者可以不配置,直接在应用内完成创作。
|
||||
::
|
||||
|
||||
当你希望把 ProxyCast 接入脚本、自动化工具或第三方客户端时,可启用本地 API。
|
||||
当你希望把 Lime 接入脚本、自动化工具或第三方客户端时,可启用本地 API。
|
||||
|
||||
## 核心说明
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本章节属于进阶内容。普通创作者可先使用默认连接,只有在需要多账号或精细控制时再深入配置。
|
||||
::
|
||||
|
||||
ProxyCast 支持多种模型连接方式,你可以按自己的使用习惯选择。
|
||||
Lime 支持多种模型连接方式,你可以按自己的使用习惯选择。
|
||||
|
||||
## 两类连接方式
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ credential_pool:
|
||||
模型别名允许你使用自定义名称访问上游模型:
|
||||
|
||||
1. 客户端请求别名(如 `vertex-flash`)
|
||||
2. ProxyCast 将别名解析为上游模型名(如 `gemini-2.0-flash`)
|
||||
2. Lime 将别名解析为上游模型名(如 `gemini-2.0-flash`)
|
||||
3. 使用上游模型名发送请求
|
||||
4. 响应中保留客户端请求的别名
|
||||
|
||||
@@ -105,7 +105,7 @@ Vertex AI Provider 使用 `x-goog-api-key` 头进行认证:
|
||||
x-goog-api-key: your-api-key
|
||||
```
|
||||
|
||||
ProxyCast 会自动将配置的 API Key 添加到请求头中。
|
||||
Lime 会自动将配置的 API Key 添加到请求头中。
|
||||
|
||||
## 负载均衡
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ Kiro 凭证文件位于:
|
||||
|
||||
### 自动刷新
|
||||
|
||||
ProxyCast 会自动处理 Token 刷新:
|
||||
Lime 会自动处理 Token 刷新:
|
||||
|
||||
1. 检测 Access Token 即将过期
|
||||
2. 使用 Refresh Token 获取新 Token
|
||||
@@ -64,7 +64,7 @@ ProxyCast 会自动处理 Token 刷新:
|
||||
|
||||
1. 确保已安装 Kiro IDE
|
||||
2. 在 Kiro 中完成登录
|
||||
3. 启动 ProxyCast
|
||||
3. 启动 Lime
|
||||
4. 凭证自动出现在凭证池中
|
||||
|
||||
### 手动添加
|
||||
@@ -107,7 +107,7 @@ Kiro 订阅有使用额度限制,具体取决于订阅计划。
|
||||
1. 打开 Kiro IDE
|
||||
2. 确认登录状态
|
||||
3. 如需要,重新登录
|
||||
4. 在 ProxyCast 中刷新凭证
|
||||
4. 在 Lime 中刷新凭证
|
||||
|
||||
### 请求失败
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ Gemini CLI 需要关联 Google Cloud 项目:
|
||||
|
||||
### 配置项目 ID
|
||||
|
||||
在 ProxyCast 中配置项目:
|
||||
在 Lime 中配置项目:
|
||||
|
||||
```yaml
|
||||
gemini:
|
||||
@@ -61,7 +61,7 @@ gemini:
|
||||
|
||||
### Token 刷新
|
||||
|
||||
ProxyCast 自动处理 OAuth Token 刷新:
|
||||
Lime 自动处理 OAuth Token 刷新:
|
||||
|
||||
1. 使用 Refresh Token 获取 Access Token
|
||||
2. Access Token 过期前自动刷新
|
||||
@@ -95,10 +95,10 @@ gemini auth login
|
||||
|
||||
按提示完成 OAuth 认证流程。
|
||||
|
||||
### 在 ProxyCast 中配置
|
||||
### 在 Lime 中配置
|
||||
|
||||
1. 完成 Gemini CLI 登录
|
||||
2. 启动 ProxyCast
|
||||
2. 启动 Lime
|
||||
3. 凭证自动出现在凭证池中
|
||||
|
||||
## 支持的模型
|
||||
|
||||
@@ -55,7 +55,7 @@ aliyun configure
|
||||
|
||||
### 手动配置
|
||||
|
||||
在 ProxyCast 中手动添加:
|
||||
在 Lime 中手动添加:
|
||||
|
||||
1. 进入 **凭证池** 页面
|
||||
2. 点击 **添加凭证**
|
||||
@@ -64,7 +64,7 @@ aliyun configure
|
||||
|
||||
## 自动刷新
|
||||
|
||||
ProxyCast 支持 Qwen Token 的自动刷新:
|
||||
Lime 支持 Qwen Token 的自动刷新:
|
||||
|
||||
1. 检测 Token 即将过期
|
||||
2. 使用 Refresh Token 获取新 Token
|
||||
|
||||
@@ -34,7 +34,7 @@ OpenAI Custom 允许你配置任何 OpenAI 兼容的 API 服务。
|
||||
2. 创建 Azure OpenAI 资源
|
||||
3. 获取 API Key 和端点
|
||||
|
||||
### 在 ProxyCast 中配置
|
||||
### 在 Lime 中配置
|
||||
|
||||
1. 进入 **凭证池** 页面
|
||||
2. 点击 **添加凭证**
|
||||
|
||||
@@ -33,7 +33,7 @@ Claude Custom 允许你配置 Anthropic 官方 API 或其他 Claude 兼容服务
|
||||
2. 配置 Bedrock 访问权限
|
||||
3. 获取 AWS 凭证
|
||||
|
||||
### 在 ProxyCast 中配置
|
||||
### 在 Lime 中配置
|
||||
|
||||
1. 进入 **凭证池** 页面
|
||||
2. 点击 **添加凭证**
|
||||
@@ -127,7 +127,7 @@ bedrock-claude:
|
||||
|
||||
1. 配置 IAM 角色
|
||||
2. 授予 Bedrock 访问权限
|
||||
3. ProxyCast 自动使用角色凭证
|
||||
3. Lime 自动使用角色凭证
|
||||
|
||||
## 高级配置
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ navigation:
|
||||
## 概述
|
||||
|
||||
Codex Provider 允许你使用 OpenAI Codex 的 OAuth 凭证访问 GPT 模型。
|
||||
同时,为了兼容 Codex CLI 的「API Key 登录」用户(`~/.codex/auth.json` 只有 `api_key`),ProxyCast 也支持读取 `api_key` 并作为 Bearer Token 使用(无需刷新)。
|
||||
同时,为了兼容 Codex CLI 的「API Key 登录」用户(`~/.codex/auth.json` 只有 `api_key`),Lime 也支持读取 `api_key` 并作为 Bearer Token 使用(无需刷新)。
|
||||
|
||||
## 支持的模型
|
||||
|
||||
@@ -50,7 +50,7 @@ credential_pool:
|
||||
|
||||
### 通过 UI 登录
|
||||
|
||||
1. 打开 ProxyCast
|
||||
1. 打开 Lime
|
||||
2. 进入 Provider 管理页面
|
||||
3. 找到 Codex 部分
|
||||
4. 点击"OAuth 登录"按钮
|
||||
@@ -85,7 +85,7 @@ credential_pool:
|
||||
|
||||
## Token 刷新
|
||||
|
||||
ProxyCast 会自动在 Token 过期前刷新:
|
||||
Lime 会自动在 Token 过期前刷新:
|
||||
|
||||
- 检测到 Token 即将过期时自动刷新
|
||||
- 刷新失败时标记凭证为无效
|
||||
@@ -128,7 +128,7 @@ credential_pool:
|
||||
token_file: "codex/account2.json"
|
||||
```
|
||||
|
||||
ProxyCast 会自动在多个凭证之间负载均衡。
|
||||
Lime 会自动在多个凭证之间负载均衡。
|
||||
|
||||
## 故障排除
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ iFlow Provider 支持两种认证方式:OAuth 和 Cookie。
|
||||
|
||||
## 概述
|
||||
|
||||
iFlow 是一个 AI 服务提供商,ProxyCast 支持通过 OAuth 或 Cookie 方式使用其服务。
|
||||
iFlow 是一个 AI 服务提供商,Lime 支持通过 OAuth 或 Cookie 方式使用其服务。
|
||||
|
||||
## 认证方式
|
||||
|
||||
@@ -68,7 +68,7 @@ credential_pool:
|
||||
|
||||
### 通过 UI 登录
|
||||
|
||||
1. 打开 ProxyCast
|
||||
1. 打开 Lime
|
||||
2. 进入 Provider 管理页面
|
||||
3. 找到 iFlow 部分
|
||||
4. 点击"OAuth 登录"按钮
|
||||
@@ -98,7 +98,7 @@ credential_pool:
|
||||
|
||||
### 通过 UI 导入
|
||||
|
||||
1. 打开 ProxyCast
|
||||
1. 打开 Lime
|
||||
2. 进入 Provider 管理页面
|
||||
3. 找到 iFlow 部分
|
||||
4. 选择"Cookie 导入"
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本章节面向进阶用户与开发者。普通创作者可直接在应用内使用,无需 API 接入。
|
||||
::
|
||||
|
||||
当你需要把 ProxyCast 接入脚本、自动化流程或第三方工具时,可使用本地 API。
|
||||
当你需要把 Lime 接入脚本、自动化流程或第三方工具时,可使用本地 API。
|
||||
|
||||
## 常见端点类型
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本页是开发者进阶文档。普通创作者可直接在应用内使用,无需 API 调用。
|
||||
::
|
||||
|
||||
ProxyCast 提供完整的 OpenAI Chat Completions API 兼容。
|
||||
Lime 提供完整的 OpenAI Chat Completions API 兼容。
|
||||
|
||||
## /v1/chat/completions
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本页是开发者进阶文档。普通创作者可直接在应用内使用,无需 API 调用。
|
||||
::
|
||||
|
||||
ProxyCast 提供 Anthropic Claude Messages API 兼容。
|
||||
Lime 提供 Anthropic Claude Messages API 兼容。
|
||||
|
||||
## /v1/messages
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: 管理 API
|
||||
description: ProxyCast 远程管理 API 端点
|
||||
description: Lime 远程管理 API 端点
|
||||
navigation:
|
||||
icon: i-heroicons-cog-6-tooth
|
||||
---
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本页是开发者进阶文档,主要用于自动化管理与运维集成。
|
||||
::
|
||||
|
||||
ProxyCast 提供远程管理 API,用于配置和监控服务。
|
||||
Lime 提供远程管理 API,用于配置和监控服务。
|
||||
|
||||
## 认证
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本页是开发者进阶文档。若你不涉及 Amp CLI 集成,可跳过。
|
||||
::
|
||||
|
||||
ProxyCast 提供 Amp CLI 兼容的路由端点,支持将 Amp CLI 请求路由到本地 OAuth 凭证。
|
||||
Lime 提供 Amp CLI 兼容的路由端点,支持将 Amp CLI 请求路由到本地 OAuth 凭证。
|
||||
|
||||
## 概述
|
||||
|
||||
@@ -80,7 +80,7 @@ curl http://127.0.0.1:8999/api/provider/anthropic/v1/messages \
|
||||
|
||||
## 模型映射
|
||||
|
||||
当 Amp CLI 请求的模型不可用时,ProxyCast 可以自动映射到可用的替代模型。
|
||||
当 Amp CLI 请求的模型不可用时,Lime 可以自动映射到可用的替代模型。
|
||||
|
||||
### 配置
|
||||
|
||||
@@ -104,7 +104,7 @@ ampcode:
|
||||
|
||||
## 管理端点代理
|
||||
|
||||
ProxyCast 可以代理 Amp 的认证和账户管理端点到上游服务器。
|
||||
Lime 可以代理 Amp 的认证和账户管理端点到上游服务器。
|
||||
|
||||
### /api/auth/*
|
||||
|
||||
@@ -152,9 +152,9 @@ ampcode:
|
||||
|
||||
你有 Kiro 的 Claude 订阅,想用 Amp CLI 但不想额外付费:
|
||||
|
||||
1. 配置 ProxyCast 加载 Kiro OAuth 凭证
|
||||
2. 在 Amp CLI 中配置 ProxyCast 作为 API 端点
|
||||
3. Amp CLI 请求通过 ProxyCast 路由到 Kiro 凭证
|
||||
1. 配置 Lime 加载 Kiro OAuth 凭证
|
||||
2. 在 Amp CLI 中配置 Lime 作为 API 端点
|
||||
3. Amp CLI 请求通过 Lime 路由到 Kiro 凭证
|
||||
|
||||
### 场景 2:模型替换
|
||||
|
||||
@@ -169,7 +169,7 @@ ampcode:
|
||||
|
||||
### 场景 3:多 Provider 负载均衡
|
||||
|
||||
配置多个凭证,ProxyCast 自动在它们之间负载均衡:
|
||||
配置多个凭证,Lime 自动在它们之间负载均衡:
|
||||
|
||||
```yaml
|
||||
credential_pool:
|
||||
@@ -182,14 +182,14 @@ credential_pool:
|
||||
|
||||
## Amp CLI 配置
|
||||
|
||||
在 Amp CLI 中配置 ProxyCast:
|
||||
在 Amp CLI 中配置 Lime:
|
||||
|
||||
```bash
|
||||
# 设置 API 端点
|
||||
amp config set api.base_url http://127.0.0.1:8999/api/provider
|
||||
|
||||
# 设置 API Key
|
||||
amp config set api.key your-proxycast-api-key
|
||||
amp config set api.key your-lime-api-key
|
||||
```
|
||||
|
||||
或在配置文件中:
|
||||
@@ -198,7 +198,7 @@ amp config set api.key your-proxycast-api-key
|
||||
# ~/.amp/config.yaml
|
||||
api:
|
||||
base_url: http://127.0.0.1:8999/api/provider
|
||||
key: your-proxycast-api-key
|
||||
key: your-lime-api-key
|
||||
```
|
||||
|
||||
## 错误处理
|
||||
|
||||
@@ -107,10 +107,10 @@ navigation:
|
||||
|
||||
### 处理建议
|
||||
|
||||
1. 优先重新下载安装 `ProxyCast_*_x64-online-setup.exe`
|
||||
2. 确认 `%APPDATA%\proxycast\` 与 `%USERPROFILE%\.proxycast\` 可写
|
||||
1. 优先重新下载安装 `Lime_*_x64-online-setup.exe`
|
||||
2. 确认 `%APPDATA%\lime\` 与 `%USERPROFILE%\.lime\` 可写
|
||||
3. 如被 SmartScreen 拦截,确认来源可信后再继续
|
||||
4. 如果处于离线、内网或受限网络环境,改用 `ProxyCast_*_x64-offline-setup.exe`
|
||||
4. 如果处于离线、内网或受限网络环境,改用 `Lime_*_x64-offline-setup.exe`
|
||||
5. 如有条件,运行一键收集脚本后再反馈
|
||||
|
||||
详见 [Windows 启动与安装问题](/troubleshooting/windows-startup-issues)。
|
||||
|
||||
@@ -20,7 +20,7 @@ navigation:
|
||||
|
||||
推荐优先使用:
|
||||
|
||||
- `ProxyCast_*_x64-online-setup.exe`
|
||||
- `Lime_*_x64-online-setup.exe`
|
||||
|
||||
不建议优先分发:
|
||||
|
||||
@@ -30,7 +30,7 @@ navigation:
|
||||
原因:
|
||||
|
||||
- 在线安装包体积更小,适合大多数 Windows 10/11 用户
|
||||
- 如果处于离线、内网或受限网络环境,请改用 `ProxyCast_*_x64-offline-setup.exe`
|
||||
- 如果处于离线、内网或受限网络环境,请改用 `Lime_*_x64-offline-setup.exe`
|
||||
|
||||
## 常见症状与处理
|
||||
|
||||
@@ -63,8 +63,8 @@ navigation:
|
||||
|
||||
以下目录至少要保证当前用户可读写:
|
||||
|
||||
- `%APPDATA%\proxycast\`
|
||||
- `%USERPROFILE%\.proxycast\`
|
||||
- `%APPDATA%\lime\`
|
||||
- `%USERPROFILE%\.lime\`
|
||||
|
||||
这些目录分别用于:
|
||||
|
||||
@@ -81,8 +81,8 @@ navigation:
|
||||
|
||||
反馈问题前,建议至少收集以下内容:
|
||||
|
||||
- `%USERPROFILE%\.proxycast\logs\`
|
||||
- `%USERPROFILE%\.proxycast\request_logs\`
|
||||
- `%USERPROFILE%\.lime\logs\`
|
||||
- `%USERPROFILE%\.lime\request_logs\`
|
||||
- 问题出现时间
|
||||
- 安装包文件名
|
||||
- 页面或弹窗提示截图
|
||||
@@ -97,11 +97,11 @@ powershell -ExecutionPolicy Bypass -File .\scripts\windows-collect-support-bundl
|
||||
|
||||
脚本会:
|
||||
|
||||
- 打包 `%USERPROFILE%\.proxycast\logs\` 与 `request_logs\`
|
||||
- 打包 `%USERPROFILE%\.lime\logs\` 与 `request_logs\`
|
||||
- 收集 WebView2、PowerShell、目录存在性等环境信息
|
||||
- 默认不打包 `config.yaml`、数据库和凭证正文,避免泄露敏感信息
|
||||
|
||||
执行完成后,会在桌面生成 `ProxyCast-Support-时间戳.zip`。
|
||||
执行完成后,会在桌面生成 `Lime-Support-时间戳.zip`。
|
||||
|
||||
如果应用本身还能打开,也可以在“设置 / API 服务器 / 诊断接口”区域点击“导出支持包”。
|
||||
|
||||
@@ -122,7 +122,7 @@ powershell -ExecutionPolicy Bypass -File .\scripts\windows-collect-support-bundl
|
||||
请整理以下最小信息后反馈:
|
||||
|
||||
1. Windows 版本
|
||||
2. ProxyCast 版本
|
||||
2. Lime 版本
|
||||
3. 使用的安装包文件名
|
||||
4. 首次出现时间
|
||||
5. 日志目录压缩包
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
title: 架构说明
|
||||
description: ProxyCast 技术架构
|
||||
description: Lime 技术架构
|
||||
navigation:
|
||||
icon: i-heroicons-cube-transparent
|
||||
---
|
||||
|
||||
# 架构说明
|
||||
|
||||
ProxyCast 是基于 Tauri 2.0 构建的跨平台桌面应用。
|
||||
Lime 是基于 Tauri 2.0 构建的跨平台桌面应用。
|
||||
|
||||
## 技术栈
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
title: 贡献指南
|
||||
description: 如何为 ProxyCast 做贡献
|
||||
description: 如何为 Lime 做贡献
|
||||
navigation:
|
||||
icon: i-heroicons-heart
|
||||
---
|
||||
|
||||
# 贡献指南
|
||||
|
||||
感谢你对 ProxyCast 的关注!本指南帮助你开始贡献。
|
||||
感谢你对 Lime 的关注!本指南帮助你开始贡献。
|
||||
|
||||
## 开发环境设置
|
||||
|
||||
@@ -24,8 +24,8 @@ navigation:
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone https://github.com/aiclientproxy/proxycast.git
|
||||
cd proxycast
|
||||
git clone https://github.com/aiclientproxy/lime.git
|
||||
cd lime
|
||||
|
||||
# 安装前端依赖
|
||||
pnpm install
|
||||
@@ -142,7 +142,7 @@ git push origin feature/your-feature
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
proxycast/
|
||||
lime/
|
||||
├── src/ # 前端源码
|
||||
│ ├── components/ # React 组件
|
||||
│ ├── pages/ # 页面组件
|
||||
@@ -184,7 +184,7 @@ cargo test
|
||||
2. 创建新 Issue
|
||||
3. 提供详细信息:
|
||||
- 操作系统和版本
|
||||
- ProxyCast 版本
|
||||
- Lime 版本
|
||||
- 复现步骤
|
||||
- 错误日志
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ navigation:
|
||||
|
||||
# 构建指南
|
||||
|
||||
本指南介绍如何在本地开发和构建 ProxyCast。
|
||||
本指南介绍如何在本地开发和构建 Lime。
|
||||
|
||||
## 本地开发
|
||||
|
||||
@@ -227,9 +227,9 @@ RUST_LOG=debug pnpm tauri dev
|
||||
|
||||
| 平台 | 路径 |
|
||||
| ------- | -------------------------------- |
|
||||
| macOS | `~/Library/Logs/ProxyCast/` |
|
||||
| Windows | `%APPDATA%\ProxyCast\logs\` |
|
||||
| Linux | `~/.local/share/proxycast/logs/` |
|
||||
| macOS | `~/Library/Logs/Lime/` |
|
||||
| Windows | `%APPDATA%\Lime\logs\` |
|
||||
| Linux | `~/.local/share/lime/logs/` |
|
||||
|
||||
## 常见问题
|
||||
|
||||
|
||||
@@ -26,31 +26,31 @@ navigation:
|
||||
|
||||
当前版本需要手动备份以下路径:
|
||||
|
||||
- 配置文件(macOS: `~/Library/Application Support/proxycast/config.yaml`,Linux: `~/.config/proxycast/config.yaml`,Windows: `%APPDATA%\\proxycast\\config.yaml`)
|
||||
- 凭证池副本目录(导入的凭证文件):macOS `~/Library/Application Support/proxycast/credentials/`,Linux `~/.local/share/proxycast/credentials/`,Windows `%APPDATA%\\proxycast\\credentials\\`
|
||||
- OAuth 凭证目录:`~/.proxycast/auth/`
|
||||
- 数据库文件:`~/.proxycast/proxycast.db`
|
||||
- 日志目录:`~/.proxycast/logs/`、`~/.proxycast/request_logs/`
|
||||
- 配置文件(macOS: `~/Library/Application Support/lime/config.yaml`,Linux: `~/.config/lime/config.yaml`,Windows: `%APPDATA%\\lime\\config.yaml`)
|
||||
- 凭证池副本目录(导入的凭证文件):macOS `~/Library/Application Support/lime/credentials/`,Linux `~/.local/share/lime/credentials/`,Windows `%APPDATA%\\lime\\credentials\\`
|
||||
- OAuth 凭证目录:`~/.lime/auth/`
|
||||
- 数据库文件:`~/.lime/lime.db`
|
||||
- 日志目录:`~/.lime/logs/`、`~/.lime/request_logs/`
|
||||
|
||||
恢复步骤(顺序建议):
|
||||
|
||||
1. 停止应用
|
||||
2. 恢复 `config.yaml`
|
||||
3. 恢复 `credentials` 目录、`auth` 目录与数据库 `proxycast.db`
|
||||
3. 恢复 `credentials` 目录、`auth` 目录与数据库 `lime.db`
|
||||
4. 如需保留历史日志,恢复 `logs/` 与 `request_logs/`
|
||||
5. 启动应用并验证 `/health` 与关键功能
|
||||
|
||||
## Windows 启动失败排查
|
||||
|
||||
- 优先确认用户安装的是 `ProxyCast_*_x64-online-setup.exe`;离线、内网或受限网络环境再提供 `ProxyCast_*_x64-offline-setup.exe`
|
||||
- 优先确认用户安装的是 `Lime_*_x64-online-setup.exe`;离线、内网或受限网络环境再提供 `Lime_*_x64-offline-setup.exe`
|
||||
- 首次启动若提示缺少运行时,优先重新运行 Windows setup 安装包;如果在线安装失败,再切换到 offline 安装包
|
||||
- 检查 `%APPDATA%\proxycast\` 与 `%USERPROFILE%\.proxycast\` 是否可写;数据库、日志与部分运行时状态依赖这两个目录
|
||||
- 收集 `%USERPROFILE%\.proxycast\logs\` 与 `%USERPROFILE%\.proxycast\request_logs\` 作为一线排障材料
|
||||
- 检查 `%APPDATA%\lime\` 与 `%USERPROFILE%\.lime\` 是否可写;数据库、日志与部分运行时状态依赖这两个目录
|
||||
- 收集 `%USERPROFILE%\.lime\logs\` 与 `%USERPROFILE%\.lime\request_logs\` 作为一线排障材料
|
||||
- 若前端出现 Windows 启动自检提示,按提示项优先检查目录权限、数据库可访问性、WebView2 与 Shell 可用性
|
||||
|
||||
## 回滚策略
|
||||
|
||||
- 如果升级失败,恢复备份的 `config.yaml` 与 `proxycast.db`
|
||||
- 如果升级失败,恢复备份的 `config.yaml` 与 `lime.db`
|
||||
- 使用上一版本安装包覆盖安装
|
||||
- 完成健康检查与冒烟测试
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ navigation:
|
||||
|
||||
## 使用目的
|
||||
|
||||
ProxyCast 是一款开源工具,其设计初衷是帮助用户**充分利用已订阅的 AI 服务 Token**,在更多场景中发挥其价值。
|
||||
Lime 是一款开源工具,其设计初衷是帮助用户**充分利用已订阅的 AI 服务 Token**,在更多场景中发挥其价值。
|
||||
|
||||
::alert{type="warning"}
|
||||
**重要提示**: 本工具仅限于个人合法使用,严禁用于任何非法盈利目的。
|
||||
|
||||
@@ -7,7 +7,7 @@ navigation:
|
||||
|
||||
# 开放平台概览
|
||||
|
||||
开放平台面向开发者与生态合作方,用于扩展 ProxyCast 的能力边界。
|
||||
开放平台面向开发者与生态合作方,用于扩展 Lime 的能力边界。
|
||||
|
||||
::alert{type="info"}
|
||||
如果你是普通创作者,可先跳过本章节。
|
||||
@@ -23,7 +23,7 @@ navigation:
|
||||
|
||||
### Connect 能力
|
||||
|
||||
用于外部平台与 ProxyCast 的配置联动与生态集成。
|
||||
用于外部平台与 Lime 的配置联动与生态集成。
|
||||
|
||||
[了解更多 →](/open-platform/connect)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本页面向开发者与高级用户。普通创作者可使用用户指南中的插件页。
|
||||
::
|
||||
|
||||
ProxyCast 支持通过插件扩展能力,适用于自定义工具、自动化流程和生态集成。
|
||||
Lime 支持通过插件扩展能力,适用于自定义工具、自动化流程和生态集成。
|
||||
|
||||
## 你可以做什么
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: 开放平台 - 插件开发指南
|
||||
description: 开发 ProxyCast 插件的规范与最佳实践
|
||||
description: 开发 Lime 插件的规范与最佳实践
|
||||
navigation:
|
||||
icon: i-heroicons-code-bracket-square
|
||||
---
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本页面向开发者。若你不开发插件,可跳过。
|
||||
::
|
||||
|
||||
本文档说明插件类型、打包方式和开发建议,帮助你把能力稳定接入 ProxyCast。
|
||||
本文档说明插件类型、打包方式和开发建议,帮助你把能力稳定接入 Lime。
|
||||
|
||||
## 插件类型
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ navigation:
|
||||
本页面向生态合作方与平台接入方。普通创作者可跳过。
|
||||
::
|
||||
|
||||
Connect 通过 Deep Link 提供“一键配置”能力,帮助外部平台将配置快速带入 ProxyCast。
|
||||
Connect 通过 Deep Link 提供“一键配置”能力,帮助外部平台将配置快速带入 Lime。
|
||||
|
||||
## 核心价值
|
||||
|
||||
@@ -22,14 +22,14 @@ Connect 通过 Deep Link 提供“一键配置”能力,帮助外部平台将
|
||||
## 一键配置流程
|
||||
|
||||
1. 用户在外部平台点击一键配置
|
||||
2. 浏览器打开 `proxycast://` 链接
|
||||
3. ProxyCast 弹出确认
|
||||
2. 浏览器打开 `lime://` 链接
|
||||
3. Lime 弹出确认
|
||||
4. 用户确认后完成导入
|
||||
|
||||
## 基础协议
|
||||
|
||||
```text
|
||||
proxycast://connect?relay={relay_id}&key={api_key}&name={key_name}&ref={ref_code}
|
||||
lime://connect?relay={relay_id}&key={api_key}&name={key_name}&ref={ref_code}
|
||||
```
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|
||||
@@ -24,7 +24,7 @@ Webhook 用于回传配置行为结果,帮助你统计接入效果。
|
||||
## 请求示例
|
||||
|
||||
```http
|
||||
POST https://your-domain.com/proxycast/callback
|
||||
POST https://your-domain.com/lime/callback
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
title: ProxyCast 文档中心
|
||||
title: Lime 文档中心
|
||||
description: 创作类 AI Agent 平台文档,从灵感到发布的一站式指南
|
||||
navigation: false
|
||||
---
|
||||
|
||||
# ProxyCast 文档中心
|
||||
# Lime 文档中心
|
||||
|
||||
ProxyCast 是创作类 AI Agent 平台。
|
||||
Lime 是创作类 AI Agent 平台。
|
||||
你可以在同一个工作台里完成对话、创作、图片生成、项目沉淀与资源复用。
|
||||
|
||||
## 从这里开始
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# ProxyCast 设置页面重构设计
|
||||
# Lime 设置页面重构设计
|
||||
|
||||
> 参考 LobeHub 的设置架构,为 ProxyCast 设计现代化的设置界面
|
||||
> 参考 LobeHub 的设置架构,为 Lime 设计现代化的设置界面
|
||||
|
||||
## 一、设计目标
|
||||
|
||||
@@ -548,7 +548,7 @@ export function SettingHeader({ title, extra }: SettingHeaderProps) {
|
||||
|
||||
## 八、与 LobeHub 的对应关系
|
||||
|
||||
| LobeHub 设置项 | ProxyCast 对应 | 备注 |
|
||||
| LobeHub 设置项 | Lime 对应 | 备注 |
|
||||
|---------------|---------------|------|
|
||||
| Profile | account/profile | 用户资料 |
|
||||
| Stats | account/stats | 使用统计 |
|
||||
@@ -568,7 +568,7 @@ export function SettingHeader({ title, extra }: SettingHeaderProps) {
|
||||
## 九、UI 设计参考
|
||||
|
||||
### 颜色方案
|
||||
- 使用 ProxyCast 现有的 CSS 变量(`hsl(var(--xxx))`)
|
||||
- 使用 Lime 现有的 CSS 变量(`hsl(var(--xxx))`)
|
||||
- 侧边栏背景:`--card`
|
||||
- 激活项背景:`--accent`
|
||||
- 分组标题:`--muted-foreground`
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# ProxyCast AI Agent 开发指南
|
||||
# Lime AI Agent 开发指南
|
||||
|
||||
> 面向未来 AI Agent 功能开发的架构设计与最佳实践
|
||||
|
||||
## 一、愿景与定位
|
||||
|
||||
ProxyCast 的未来方向是从 **API 代理工具** 演进为 **AI Agent 创作平台**。
|
||||
Lime 的未来方向是从 **API 代理工具** 演进为 **AI Agent 创作平台**。
|
||||
核心目标是让用户能够:
|
||||
|
||||
1. **创建自定义 Agent** - 定义 Agent 的能力、工具、行为
|
||||
@@ -13,7 +13,7 @@ ProxyCast 的未来方向是从 **API 代理工具** 演进为 **AI Agent 创作
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ ProxyCast AI Agent 平台 │
|
||||
│ Lime AI Agent 平台 │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
@@ -512,4 +512,4 @@ agent/
|
||||
|
||||
---
|
||||
|
||||
_本文档定义了 ProxyCast AI Agent 功能的架构设计,随着开发进展会持续更新。_
|
||||
_本文档定义了 Lime AI Agent 功能的架构设计,随着开发进展会持续更新。_
|
||||
|
||||
@@ -83,8 +83,8 @@ P0 目标整体达成,统一执行追踪已进入可用状态并通过构建
|
||||
已通过:
|
||||
|
||||
- `cd src-tauri && cargo check`
|
||||
- `cd src-tauri && cargo test -p proxycast-core agent_run::tests -- --nocapture`
|
||||
- `cd src-tauri && cargo test -p proxycast execution_tracker_service::tests -- --nocapture`
|
||||
- `cd src-tauri && cargo test -p lime-core agent_run::tests -- --nocapture`
|
||||
- `cd src-tauri && cargo test -p lime execution_tracker_service::tests -- --nocapture`
|
||||
- `npm run build`
|
||||
|
||||
## 5. 与 P0 验收标准对照
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# ProxyCast 统一执行追踪(Execution Tracker)技术规划
|
||||
# Lime 统一执行追踪(Execution Tracker)技术规划
|
||||
|
||||
## 1. 背景与问题定义
|
||||
|
||||
当前 ProxyCast 的执行入口分散在多个模块:
|
||||
当前 Lime 的执行入口分散在多个模块:
|
||||
|
||||
- `aster_agent_cmd.rs`(通用 Agent 对话)
|
||||
- `skill_exec_cmd.rs`(Skill 执行)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# LobsterAI 业务闭环对标与 ProxyCast AI Agent 规划
|
||||
# LobsterAI 业务闭环对标与 Lime AI Agent 规划
|
||||
|
||||
## 1. 文档目标
|
||||
|
||||
本文从**资深架构师**与**产品经理**双视角,对 `LobsterAI` 与 `ProxyCast` 做业务闭环级对标,明确:
|
||||
本文从**资深架构师**与**产品经理**双视角,对 `LobsterAI` 与 `Lime` 做业务闭环级对标,明确:
|
||||
|
||||
1. 我们应该借鉴什么(高价值能力)
|
||||
2. 我们不应该照搬什么(避免技术债和垃圾代码)
|
||||
@@ -23,7 +23,7 @@
|
||||
- `src/main/libs/coworkMemoryExtractor.ts`
|
||||
- `src/main/im/imGatewayManager.ts`
|
||||
|
||||
### 2.2 ProxyCast 侧(已核对)
|
||||
### 2.2 Lime 侧(已核对)
|
||||
|
||||
- `src-tauri/src/services/execution_tracker_service.rs`
|
||||
- `src-tauri/src/services/heartbeat_service/mod.rs`
|
||||
@@ -44,7 +44,7 @@
|
||||
- 已形成多入口入站闭环:本地 + IM(钉钉/飞书/Telegram/Discord)
|
||||
- IM 不只是通知,而是可直接触发任务/会话执行
|
||||
|
||||
### ProxyCast
|
||||
### Lime
|
||||
|
||||
- 已具备本地执行与 Heartbeat 任务执行
|
||||
- WebSocket RPC 的 `agent.run` / `cron.run` 仍是占位实现(TODO)
|
||||
@@ -66,7 +66,7 @@
|
||||
- 达到阈值后自动停用任务(避免无限失败)
|
||||
- 应用异常退出后会修复 stuck running 状态
|
||||
|
||||
### ProxyCast
|
||||
### Lime
|
||||
|
||||
- Heartbeat 已有:超时、重试、执行记录、通知
|
||||
- Execution Tracker 已有统一 run 摘要(`agent_runs`)
|
||||
@@ -86,7 +86,7 @@
|
||||
- 任务与 run 记录绑定,便于按任务看健康度
|
||||
- 调度执行结果可做通知回执
|
||||
|
||||
### ProxyCast
|
||||
### Lime
|
||||
|
||||
- `agent_runs` 已统一 chat/skill/heartbeat,这是明显优势
|
||||
- 但尚未形成“任务健康面板 + 告警阈值 + 运营指标”产品层
|
||||
@@ -105,7 +105,7 @@
|
||||
- 有对话记忆提取链路(规则 + 守门)
|
||||
- 更接近“会话后自动沉淀”
|
||||
|
||||
### ProxyCast
|
||||
### Lime
|
||||
|
||||
- 已有统一记忆体系和 `unified_memory_analyze`
|
||||
- 更偏分析/批处理入口,实时自动沉淀闭环不够强
|
||||
@@ -122,7 +122,7 @@
|
||||
|
||||
- 有工具审批机制
|
||||
|
||||
### ProxyCast
|
||||
### Lime
|
||||
|
||||
- `aster_agent_cmd` 已有较完整的权限与沙箱策略
|
||||
- 安全基础不弱,具备差异化潜力
|
||||
@@ -163,7 +163,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 6. ProxyCast 可执行路线图(业务优先)
|
||||
## 6. Lime 可执行路线图(业务优先)
|
||||
|
||||
## P0(必须,2~3 周):先打通“远程可控最小闭环”
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
|
||||
### 架构师视角
|
||||
|
||||
ProxyCast 的底座(追踪、权限、沙箱、Provider 能力)已经具备,当前应避免重构冲动,重点补齐远程触发和任务治理层。
|
||||
Lime 的底座(追踪、权限、沙箱、Provider 能力)已经具备,当前应避免重构冲动,重点补齐远程触发和任务治理层。
|
||||
|
||||
### 产品经理视角
|
||||
|
||||
|
||||
@@ -73,8 +73,8 @@
|
||||
|
||||
关键测试:
|
||||
|
||||
- `proxycast-scheduler`:
|
||||
- `lime-scheduler`:
|
||||
- `scheduler::tests::test_mark_task_failed_should_trigger_cooldown`
|
||||
- `dao::tests::test_create_tables_should_add_missing_columns_for_existing_table`
|
||||
- `proxycast-websocket`:
|
||||
- `lime-websocket`:
|
||||
- `handlers::rpc_handler::tests::test_cron_run_should_block_when_task_in_cooldown`
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Translation Fixes Applied
|
||||
|
||||
## Summary
|
||||
Fixed 20 translation issues in `proxycast/src/i18n/patches/en.json` where English translations had concatenated words or incorrect formatting, plus fixed a critical bug in the DOM replacement algorithm that caused partial translations.
|
||||
Fixed 20 translation issues in `lime/src/i18n/patches/en.json` where English translations had concatenated words or incorrect formatting, plus fixed a critical bug in the DOM replacement algorithm that caused partial translations.
|
||||
|
||||
## Critical Bug Fix: DOM Replacement Order
|
||||
|
||||
@@ -15,7 +15,7 @@ The DOM replacer was applying translations in an arbitrary order (based on `Obje
|
||||
- Result: Broken translation like "初timesSettings向导"
|
||||
|
||||
### Solution
|
||||
Modified `proxycast/src/i18n/dom-replacer.ts` to sort translation entries by length (longest first) before applying replacements. This ensures that longer, more specific phrases are translated before their component parts.
|
||||
Modified `lime/src/i18n/dom-replacer.ts` to sort translation entries by length (longest first) before applying replacements. This ensures that longer, more specific phrases are translated before their component parts.
|
||||
|
||||
```typescript
|
||||
// Sort patches by length (longest first) to avoid partial replacements
|
||||
@@ -65,7 +65,7 @@ These translations had technical terms incorrectly formatted:
|
||||
| 安装完成后点击 | Click after InstallComplete | Click after installation completes |
|
||||
|
||||
## Impact
|
||||
These fixes improve the quality and readability of English translations throughout the ProxyCast application, ensuring:
|
||||
These fixes improve the quality and readability of English translations throughout the Lime application, ensuring:
|
||||
- Proper spacing between words
|
||||
- Natural English phrasing
|
||||
- Consistent terminology
|
||||
@@ -73,8 +73,8 @@ These fixes improve the quality and readability of English translations througho
|
||||
- **No more partial or broken translations**
|
||||
|
||||
## Files Modified
|
||||
- `proxycast/src/i18n/patches/en.json` - 20 translation entries corrected
|
||||
- `proxycast/src/i18n/dom-replacer.ts` - Fixed replacement order algorithm
|
||||
- `lime/src/i18n/patches/en.json` - 20 translation entries corrected
|
||||
- `lime/src/i18n/dom-replacer.ts` - Fixed replacement order algorithm
|
||||
|
||||
## Testing Recommendations
|
||||
1. Restart the application to ensure patches apply with the new algorithm
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
3. **aster 框架能力未接入**
|
||||
- aster 有渐进式工具响应移除能力
|
||||
- aster 支持 AI 摘要
|
||||
- ProxyCast 未正确配置和使用这些能力
|
||||
- Lime 未正确配置和使用这些能力
|
||||
|
||||
## 改进方案
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# ProxyCast AI Agent 改进 - 实施进度报告
|
||||
# Lime AI Agent 改进 - 实施进度报告
|
||||
|
||||
## 已完成工作
|
||||
|
||||
### 1. 研究与分析(任务 #1-#4)✅
|
||||
|
||||
通过对比研究 OpenAI Codex 和 aster-rust 框架,完成了 ProxyCast AI Agent 的全面分析,输出了改进研究报告,识别了四大痛点:
|
||||
通过对比研究 OpenAI Codex 和 aster-rust 框架,完成了 Lime AI Agent 的全面分析,输出了改进研究报告,识别了四大痛点:
|
||||
- 工具调用能力弱
|
||||
- 上下文管理差
|
||||
- 流式体验不好
|
||||
@@ -96,7 +96,7 @@
|
||||
**背景**: aster 框架的上下文管理能力不明确
|
||||
|
||||
**决策**:
|
||||
- 阶段 1: 在 ProxyCast 层实现 AI 摘要(当前)
|
||||
- 阶段 1: 在 Lime 层实现 AI 摘要(当前)
|
||||
- 阶段 2: P1 完成后统一到 aster 框架
|
||||
|
||||
**理由**:
|
||||
@@ -152,6 +152,6 @@
|
||||
|
||||
## 参考资料
|
||||
|
||||
- 研究报告: ProxyCast AI Agent 改进研究报告
|
||||
- 研究报告: Lime AI Agent 改进研究报告
|
||||
- Codex 架构: SQ/EQ 异步队列对、AI 摘要
|
||||
- aster-rust: 渐进式工具响应移除、SubAgentScheduler
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
- 依赖 aster 框架的能力
|
||||
- 需要等待 P1 任务完成(general 模式迁移)
|
||||
|
||||
### 策略 B:在 ProxyCast 层实现(备选)
|
||||
### 策略 B:在 Lime 层实现(备选)
|
||||
|
||||
**前提**:aster 框架不支持或支持不足
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
**优点**:
|
||||
- 完全可控,不依赖外部框架
|
||||
- 可以针对 ProxyCast 的场景优化
|
||||
- 可以针对 Lime 的场景优化
|
||||
|
||||
**缺点**:
|
||||
- 需要自己实现和维护
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
## 参考资料
|
||||
|
||||
- 研究报告:ProxyCast AI Agent 改进研究报告
|
||||
- 研究报告:Lime AI Agent 改进研究报告
|
||||
- aster-rust GitHub: https://github.com/astercloud/aster-rust
|
||||
- 相关文件:
|
||||
- src-tauri/crates/services/src/session_context_service.rs
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
```rust
|
||||
//! AI 驱动的会话摘要服务
|
||||
|
||||
use proxycast_core::general_chat::ChatMessage;
|
||||
use lime_core::general_chat::ChatMessage;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -36,7 +36,7 @@ pub struct AISummaryResponse {
|
||||
}
|
||||
|
||||
pub struct AISummaryService {
|
||||
// 使用 ProxyCast 的 provider pool
|
||||
// 使用 Lime 的 provider pool
|
||||
provider_pool: Arc<ProviderPoolService>,
|
||||
}
|
||||
|
||||
@@ -223,6 +223,6 @@ impl SessionContextService {
|
||||
|
||||
## 参考资料
|
||||
|
||||
- 研究报告:ProxyCast AI Agent 改进研究报告
|
||||
- 研究报告:Lime AI Agent 改进研究报告
|
||||
- Codex 上下文压缩:AI 摘要 + 保留最近消息
|
||||
- aster 上下文管理:渐进式工具响应移除 + 摘要
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
export default {
|
||||
extends: ["docus"],
|
||||
app: {
|
||||
baseURL: "/proxycast/",
|
||||
baseURL: "/lime/",
|
||||
},
|
||||
image: {
|
||||
provider: "none",
|
||||
@@ -10,6 +10,6 @@ export default {
|
||||
robotsTxt: false,
|
||||
},
|
||||
llms: {
|
||||
domain: "https://proxycast.local",
|
||||
domain: "https://lime.local",
|
||||
},
|
||||
};
|
||||
|
||||
+21
-21
@@ -9,27 +9,27 @@
|
||||
- 本机使用 `127.0.0.1`/`localhost`。
|
||||
- 当前版本仅支持本地监听,不支持对外服务。
|
||||
- 若需要 HTTPS,请使用反向代理终止 TLS;当前服务端未启用内置 TLS。
|
||||
- 确认磁盘权限可写:`~/.proxycast/`、`~/.proxycast/request_logs/`、应用数据目录(macOS: `~/Library/Application Support/proxycast/`,Linux: `~/.local/share/proxycast/`,Windows: `%APPDATA%\\proxycast\\`)。
|
||||
- 确认磁盘权限可写:`~/.lime/`、`~/.lime/request_logs/`、应用数据目录(macOS: `~/Library/Application Support/lime/`,Linux: `~/.local/share/lime/`,Windows: `%APPDATA%\\lime\\`)。
|
||||
|
||||
## 配置路径与加载顺序
|
||||
|
||||
- YAML 配置(优先):
|
||||
- macOS: `~/Library/Application Support/proxycast/config.yaml`
|
||||
- Linux: `~/.config/proxycast/config.yaml`
|
||||
- Windows: `%APPDATA%\\proxycast\\config.yaml`
|
||||
- JSON 配置(兼容):macOS `~/Library/Application Support/proxycast/config.json`,Linux `~/.config/proxycast/config.json`,Windows `%APPDATA%\\proxycast\\config.json`
|
||||
- 旧版遗留路径:`~/.proxycast/config.json`(检测到会提示手动迁移)
|
||||
- macOS: `~/Library/Application Support/lime/config.yaml`
|
||||
- Linux: `~/.config/lime/config.yaml`
|
||||
- Windows: `%APPDATA%\\lime\\config.yaml`
|
||||
- JSON 配置(兼容):macOS `~/Library/Application Support/lime/config.json`,Linux `~/.config/lime/config.json`,Windows `%APPDATA%\\lime\\config.json`
|
||||
- 旧版遗留路径:`~/.lime/config.json`(检测到会提示手动迁移)
|
||||
- 两者都不存在时使用默认配置。
|
||||
- 首次启动会自动生成强随机 API Key 并写入配置。
|
||||
|
||||
## 数据与日志位置
|
||||
|
||||
- SQLite 数据库:`~/.proxycast/proxycast.db`
|
||||
- 凭证池副本目录:macOS `~/Library/Application Support/proxycast/credentials/`,Linux `~/.local/share/proxycast/credentials/`,Windows `%APPDATA%\\proxycast\\credentials\\`
|
||||
- OAuth/Token 目录(默认):`~/.proxycast/auth/`
|
||||
- 日志目录:`~/.proxycast/logs/`
|
||||
- 请求日志目录:`~/.proxycast/request_logs/`
|
||||
- 数据库备份目录:`~/.proxycast/backups/`
|
||||
- SQLite 数据库:`~/.lime/lime.db`
|
||||
- 凭证池副本目录:macOS `~/Library/Application Support/lime/credentials/`,Linux `~/.local/share/lime/credentials/`,Windows `%APPDATA%\\lime\\credentials\\`
|
||||
- OAuth/Token 目录(默认):`~/.lime/auth/`
|
||||
- 日志目录:`~/.lime/logs/`
|
||||
- 请求日志目录:`~/.lime/request_logs/`
|
||||
- 数据库备份目录:`~/.lime/backups/`
|
||||
|
||||
## 备份与恢复
|
||||
|
||||
@@ -39,24 +39,24 @@
|
||||
- `POST /v0/management/backup`
|
||||
2. 或手动备份(建议停服后执行):
|
||||
- 复制以下路径:
|
||||
- 配置文件(macOS: `~/Library/Application Support/proxycast/config.yaml`,Linux: `~/.config/proxycast/config.yaml`,Windows: `%APPDATA%\\proxycast\\config.yaml`)
|
||||
- 配置文件(macOS: `~/Library/Application Support/lime/config.yaml`,Linux: `~/.config/lime/config.yaml`,Windows: `%APPDATA%\\lime\\config.yaml`)
|
||||
- 配置备份文件:`config.yaml.backup`
|
||||
- 凭证池副本目录(macOS: `~/Library/Application Support/proxycast/credentials/`,Linux: `~/.local/share/proxycast/credentials/`,Windows: `%APPDATA%\\proxycast\\credentials\\`)
|
||||
- `~/.proxycast/proxycast.db`
|
||||
- `~/.proxycast/auth/`(如需要保留 OAuth/Token)
|
||||
- `~/.proxycast/logs/`、`~/.proxycast/request_logs/`(如需保留日志)
|
||||
- 凭证池副本目录(macOS: `~/Library/Application Support/lime/credentials/`,Linux: `~/.local/share/lime/credentials/`,Windows: `%APPDATA%\\lime\\credentials\\`)
|
||||
- `~/.lime/lime.db`
|
||||
- `~/.lime/auth/`(如需要保留 OAuth/Token)
|
||||
- `~/.lime/logs/`、`~/.lime/request_logs/`(如需保留日志)
|
||||
3. 将备份文件存入受控存储(加密磁盘或安全存储)。
|
||||
|
||||
### 自动备份
|
||||
|
||||
- 服务运行期间每 24 小时自动创建数据库备份到 `~/.proxycast/backups/`。
|
||||
- 服务运行期间每 24 小时自动创建数据库备份到 `~/.lime/backups/`。
|
||||
- 备份默认保留 7 天,过期文件会被清理。
|
||||
|
||||
### 恢复
|
||||
|
||||
1. 停止 ProxyCast 服务。
|
||||
1. 停止 Lime 服务。
|
||||
2. 使用管理端点恢复(建议停服后执行,执行时会锁定数据库并短暂阻塞请求):
|
||||
- `POST /v0/management/restore`,请求体:`{"backup_path": "/path/to/proxycast_YYYYMMDD_HHMMSS.db"}`
|
||||
- `POST /v0/management/restore`,请求体:`{"backup_path": "/path/to/lime_YYYYMMDD_HHMMSS.db"}`
|
||||
3. 或手动恢复上述文件到原路径。
|
||||
4. 启动服务并检查 `/health` 与 `/ready`。
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
- 常见问题排查:
|
||||
- 端口占用:修改配置端口或释放占用端口。
|
||||
- 配置解析失败:检查 YAML/JSON 语法,确认缩进正确。
|
||||
- 数据库初始化失败:检查 `~/.proxycast/` 权限与磁盘空间。
|
||||
- 数据库初始化失败:检查 `~/.lime/` 权限与磁盘空间。
|
||||
|
||||
## 安全基线
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "proxycast-docs",
|
||||
"name": "lime-docs",
|
||||
"engines": {
|
||||
"node": ">=22.0.0"
|
||||
},
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# ProxyCast Plugin UI 系统设计
|
||||
# Lime Plugin UI 系统设计
|
||||
|
||||
## 概述
|
||||
|
||||
借鉴 A2UI 的设计理念,为 ProxyCast 设计一套声明式的插件 UI 系统。核心思想是:
|
||||
借鉴 A2UI 的设计理念,为 Lime 设计一套声明式的插件 UI 系统。核心思想是:
|
||||
|
||||
- **安全如数据,表达如代码**:插件只能声明 UI 结构,不能执行任意代码
|
||||
- **声明式 JSON 格式**:插件通过 JSON 描述 UI 意图,宿主应用负责渲染
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ ProxyCast Host │
|
||||
│ Lime Host │
|
||||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||||
│ │ Plugin UI Renderer │ │
|
||||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
|
||||
@@ -365,7 +365,7 @@ interface SurfaceStyles {
|
||||
|
||||
## 与 A2UI 的差异
|
||||
|
||||
| 特性 | A2UI | ProxyCast Plugin UI |
|
||||
| 特性 | A2UI | Lime Plugin UI |
|
||||
|------|------|---------------------|
|
||||
| 传输方式 | SSE/JSONL 流 | Tauri IPC |
|
||||
| 渲染框架 | Lit/Angular/Flutter | React |
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### 1.1 插件简介
|
||||
|
||||
Antigravity Provider 是 ProxyCast 的 OAuth Provider 插件,用于对接 **Google 内部 Gemini CLI** 服务(Antigravity)。它支持 **动态协议选择**:根据模型类型自动选择输出协议(Claude 模型 → Anthropic,Gemini 模型 → Gemini)。
|
||||
Antigravity Provider 是 Lime 的 OAuth Provider 插件,用于对接 **Google 内部 Gemini CLI** 服务(Antigravity)。它支持 **动态协议选择**:根据模型类型自动选择输出协议(Claude 模型 → Anthropic,Gemini 模型 → Gemini)。
|
||||
|
||||
### 1.2 核心能力
|
||||
|
||||
@@ -87,13 +87,13 @@ antigravity-provider/
|
||||
"name": "antigravity-provider",
|
||||
"version": "1.0.0",
|
||||
"description": "Antigravity (Google Gemini CLI) OAuth Provider - 支持 Gemini 和 Claude 模型",
|
||||
"author": "ProxyCast Team",
|
||||
"author": "Lime Team",
|
||||
"homepage": "https://github.com/aiclientproxy/antigravity-provider",
|
||||
"license": "MIT",
|
||||
|
||||
"plugin_type": "oauth_provider",
|
||||
"entry": "antigravity-provider-cli",
|
||||
"min_proxycast_version": "1.0.0",
|
||||
"min_lime_version": "1.0.0",
|
||||
|
||||
"provider": {
|
||||
"id": "antigravity",
|
||||
@@ -599,13 +599,13 @@ impl AntigravityProvider {
|
||||
|
||||
```tsx
|
||||
// src/index.tsx
|
||||
import { ProxyCastPluginSDK } from '@proxycast/plugin-sdk';
|
||||
import { LimePluginSDK } from '@lime/plugin-sdk';
|
||||
import { CredentialList } from './components/CredentialList';
|
||||
import { AntigravityForm } from './components/AntigravityForm';
|
||||
import { SettingsPanel } from './components/SettingsPanel';
|
||||
|
||||
interface PluginProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
pluginId: string;
|
||||
}
|
||||
|
||||
@@ -684,7 +684,7 @@ export default function AntigravityProviderUI({ sdk, pluginId }: PluginProps) {
|
||||
type AddMode = 'oauth' | 'file';
|
||||
|
||||
interface AntigravityFormProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
onSuccess: () => void;
|
||||
onCancel: () => void;
|
||||
}
|
||||
@@ -917,7 +917,7 @@ export function CredentialCard({ credential, onRefresh, onDelete }: CredentialCa
|
||||
// src/components/SettingsPanel.tsx
|
||||
|
||||
interface SettingsPanelProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
pluginId: string;
|
||||
onClose: () => void;
|
||||
}
|
||||
@@ -1240,4 +1240,4 @@ pnpm test
|
||||
|
||||
- [Google Cloud AI Platform](https://cloud.google.com/ai-platform)
|
||||
- [Gemini API 文档](https://ai.google.dev/docs)
|
||||
- [ProxyCast 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [Lime 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### 1.1 插件简介
|
||||
|
||||
Claude Provider 是 ProxyCast 的综合性 Anthropic/Claude 插件,支持 **多种认证方式** 访问 Claude 模型。无论是官方 OAuth、Claude Code、Console、AWS Bedrock 还是第三方中转服务,都可以通过此插件统一管理。
|
||||
Claude Provider 是 Lime 的综合性 Anthropic/Claude 插件,支持 **多种认证方式** 访问 Claude 模型。无论是官方 OAuth、Claude Code、Console、AWS Bedrock 还是第三方中转服务,都可以通过此插件统一管理。
|
||||
|
||||
### 1.2 支持的认证方式
|
||||
|
||||
@@ -102,13 +102,13 @@ claude-provider/
|
||||
"name": "claude-provider",
|
||||
"version": "1.0.0",
|
||||
"description": "Claude Provider - 支持 OAuth、Claude Code、Console、Bedrock、CCR 多种认证方式",
|
||||
"author": "ProxyCast Team",
|
||||
"author": "Lime Team",
|
||||
"homepage": "https://github.com/aiclientproxy/claude-provider",
|
||||
"license": "MIT",
|
||||
|
||||
"plugin_type": "oauth_provider",
|
||||
"entry": "claude-provider-cli",
|
||||
"min_proxycast_version": "1.0.0",
|
||||
"min_lime_version": "1.0.0",
|
||||
|
||||
"provider": {
|
||||
"id": "claude",
|
||||
@@ -649,13 +649,13 @@ impl ClaudeProvider {
|
||||
|
||||
```tsx
|
||||
// src/index.tsx
|
||||
import { ProxyCastPluginSDK } from '@proxycast/plugin-sdk';
|
||||
import { LimePluginSDK } from '@lime/plugin-sdk';
|
||||
import { CredentialList } from './components/CredentialList';
|
||||
import { AuthMethodTabs } from './components/AuthMethodTabs';
|
||||
import { SettingsPanel } from './components/SettingsPanel';
|
||||
|
||||
interface PluginProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
pluginId: string;
|
||||
}
|
||||
|
||||
@@ -725,7 +725,7 @@ export default function ClaudeProviderUI({ sdk, pluginId }: PluginProps) {
|
||||
type AuthMethod = 'oauth' | 'claude_code' | 'console' | 'setup_token' | 'bedrock' | 'ccr';
|
||||
|
||||
interface AuthMethodTabsProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
onSuccess: () => void;
|
||||
onCancel: () => void;
|
||||
}
|
||||
@@ -1251,5 +1251,5 @@ pnpm test
|
||||
|
||||
- [Anthropic API 文档](https://docs.anthropic.com/)
|
||||
- [AWS Bedrock Claude](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html)
|
||||
- [ProxyCast 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [Lime 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [claude-relay-service](https://github.com/aiclientproxy/claude-relay-service)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### 1.1 插件简介
|
||||
|
||||
Codex Provider 是 ProxyCast 的 OpenAI Codex 凭证提供者插件,支持 **OAuth 2.0 + PKCE** 和 **API Key** 两种认证方式访问 OpenAI GPT 系列模型。插件兼容 Codex CLI 的凭证格式,可以直接导入 `~/.codex/auth.json` 使用。
|
||||
Codex Provider 是 Lime 的 OpenAI Codex 凭证提供者插件,支持 **OAuth 2.0 + PKCE** 和 **API Key** 两种认证方式访问 OpenAI GPT 系列模型。插件兼容 Codex CLI 的凭证格式,可以直接导入 `~/.codex/auth.json` 使用。
|
||||
|
||||
### 1.2 支持的认证方式
|
||||
|
||||
@@ -91,13 +91,13 @@ codex-provider/
|
||||
"name": "codex-provider",
|
||||
"version": "1.0.0",
|
||||
"description": "Codex Provider - 支持 OAuth 和 API Key 两种认证方式访问 OpenAI GPT 模型",
|
||||
"author": "ProxyCast Team",
|
||||
"author": "Lime Team",
|
||||
"homepage": "https://github.com/aiclientproxy/codex-provider",
|
||||
"license": "MIT",
|
||||
|
||||
"plugin_type": "oauth_provider",
|
||||
"entry": "codex-provider-cli",
|
||||
"min_proxycast_version": "1.0.0",
|
||||
"min_lime_version": "1.0.0",
|
||||
|
||||
"provider": {
|
||||
"id": "codex",
|
||||
@@ -730,13 +730,13 @@ fn transform_to_codex_format(request: &Value) -> Result<Value> {
|
||||
|
||||
```tsx
|
||||
// src/index.tsx
|
||||
import { ProxyCastPluginSDK } from '@proxycast/plugin-sdk';
|
||||
import { LimePluginSDK } from '@lime/plugin-sdk';
|
||||
import { CredentialList } from './components/CredentialList';
|
||||
import { AuthMethodTabs } from './components/AuthMethodTabs';
|
||||
import { SettingsPanel } from './components/SettingsPanel';
|
||||
|
||||
interface PluginProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
pluginId: string;
|
||||
}
|
||||
|
||||
@@ -806,7 +806,7 @@ export default function CodexProviderUI({ sdk, pluginId }: PluginProps) {
|
||||
type AuthMethod = 'oauth' | 'api_key' | 'import';
|
||||
|
||||
interface AuthMethodTabsProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
onSuccess: () => void;
|
||||
onCancel: () => void;
|
||||
}
|
||||
@@ -1803,4 +1803,4 @@ pub fn calculate_cost(usage: &UsageData, model: &str) -> CostInfo {
|
||||
- [OpenAI API 文档](https://platform.openai.com/docs/api-reference)
|
||||
- [Codex CLI 项目](https://github.com/openai/codex)
|
||||
- [OAuth 2.0 PKCE 规范](https://datatracker.ietf.org/doc/html/rfc7636)
|
||||
- [ProxyCast 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [Lime 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### 1.1 插件简介
|
||||
|
||||
Droid Provider 是 ProxyCast 的 Factory.ai (Droid) 插件,通过 **WorkOS OAuth** 集成 Factory.ai 平台,支持 Claude、OpenAI、Gemini 等多种模型的统一访问。
|
||||
Droid Provider 是 Lime 的 Factory.ai (Droid) 插件,通过 **WorkOS OAuth** 集成 Factory.ai 平台,支持 Claude、OpenAI、Gemini 等多种模型的统一访问。
|
||||
|
||||
### 1.2 支持的认证方式
|
||||
|
||||
@@ -105,13 +105,13 @@ droid-provider/
|
||||
"name": "droid-provider",
|
||||
"version": "1.0.0",
|
||||
"description": "Droid Provider - Factory.ai 集成,支持 WorkOS OAuth 和 API Key 模式",
|
||||
"author": "ProxyCast Team",
|
||||
"author": "Lime Team",
|
||||
"homepage": "https://github.com/aiclientproxy/droid-provider",
|
||||
"license": "MIT",
|
||||
|
||||
"plugin_type": "oauth_provider",
|
||||
"entry": "droid-provider-cli",
|
||||
"min_proxycast_version": "1.0.0",
|
||||
"min_lime_version": "1.0.0",
|
||||
|
||||
"provider": {
|
||||
"id": "droid",
|
||||
@@ -1538,13 +1538,13 @@ impl DroidRelayService {
|
||||
|
||||
```tsx
|
||||
// src/index.tsx
|
||||
import { ProxyCastPluginSDK } from '@proxycast/plugin-sdk';
|
||||
import { LimePluginSDK } from '@lime/plugin-sdk';
|
||||
import { CredentialList } from './components/CredentialList';
|
||||
import { AuthMethodTabs } from './components/AuthMethodTabs';
|
||||
import { SettingsPanel } from './components/SettingsPanel';
|
||||
|
||||
interface PluginProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
pluginId: string;
|
||||
}
|
||||
|
||||
@@ -1614,7 +1614,7 @@ export default function DroidProviderUI({ sdk, pluginId }: PluginProps) {
|
||||
type AuthMethod = 'workos_oauth' | 'api_key' | 'manual';
|
||||
|
||||
interface AuthMethodTabsProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
onSuccess: () => void;
|
||||
onCancel: () => void;
|
||||
}
|
||||
@@ -2025,5 +2025,5 @@ pnpm test
|
||||
|
||||
- [Factory.ai 官网](https://factory.ai/)
|
||||
- [WorkOS 文档](https://workos.com/docs/)
|
||||
- [ProxyCast 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [Lime 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [claude-relay-service](https://github.com/aiclientproxy/claude-relay-service)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### 1.1 插件简介
|
||||
|
||||
Gemini Provider 是 ProxyCast 的 Google Gemini 凭证提供者插件,支持 **OAuth 2.0 + PKCE**(Gemini CLI 兼容)和 **API Key**(Google AI Studio)两种认证方式。插件通过 Google Code Assist API 访问 Gemini 模型,支持个人 Google 账户和 Google Cloud/Workspace 企业账户。
|
||||
Gemini Provider 是 Lime 的 Google Gemini 凭证提供者插件,支持 **OAuth 2.0 + PKCE**(Gemini CLI 兼容)和 **API Key**(Google AI Studio)两种认证方式。插件通过 Google Code Assist API 访问 Gemini 模型,支持个人 Google 账户和 Google Cloud/Workspace 企业账户。
|
||||
|
||||
### 1.2 支持的认证方式
|
||||
|
||||
@@ -93,13 +93,13 @@ gemini-provider/
|
||||
"name": "gemini-provider",
|
||||
"version": "1.0.0",
|
||||
"description": "Gemini Provider - 支持 OAuth 和 API Key 两种认证方式访问 Google Gemini 模型",
|
||||
"author": "ProxyCast Team",
|
||||
"author": "Lime Team",
|
||||
"homepage": "https://github.com/aiclientproxy/gemini-provider",
|
||||
"license": "MIT",
|
||||
|
||||
"plugin_type": "oauth_provider",
|
||||
"entry": "gemini-provider-cli",
|
||||
"min_proxycast_version": "1.0.0",
|
||||
"min_lime_version": "1.0.0",
|
||||
|
||||
"provider": {
|
||||
"id": "gemini",
|
||||
@@ -881,13 +881,13 @@ pub fn convert_gemini_response(
|
||||
|
||||
```tsx
|
||||
// src/index.tsx
|
||||
import { ProxyCastPluginSDK } from '@proxycast/plugin-sdk';
|
||||
import { LimePluginSDK } from '@lime/plugin-sdk';
|
||||
import { CredentialList } from './components/CredentialList';
|
||||
import { AuthMethodTabs } from './components/AuthMethodTabs';
|
||||
import { SettingsPanel } from './components/SettingsPanel';
|
||||
|
||||
interface PluginProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
pluginId: string;
|
||||
}
|
||||
|
||||
@@ -1532,4 +1532,4 @@ pnpm test
|
||||
- [Gemini API 文档](https://ai.google.dev/docs)
|
||||
- [Google Cloud OAuth 2.0](https://developers.google.com/identity/protocols/oauth2)
|
||||
- [Gemini CLI 项目](https://github.com/google/gemini-cli)
|
||||
- [ProxyCast 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [Lime 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### 1.1 插件简介
|
||||
|
||||
Kiro Provider 是 ProxyCast 的 OAuth Provider 插件,用于对接 **AWS CodeWhisperer** (Kiro IDE) 服务。它将 Anthropic/OpenAI 协议请求转换为 CodeWhisperer 协议,并处理复杂的风控逻辑。
|
||||
Kiro Provider 是 Lime 的 OAuth Provider 插件,用于对接 **AWS CodeWhisperer** (Kiro IDE) 服务。它将 Anthropic/OpenAI 协议请求转换为 CodeWhisperer 协议,并处理复杂的风控逻辑。
|
||||
|
||||
### 1.2 核心能力
|
||||
|
||||
@@ -85,13 +85,13 @@ kiro-provider/
|
||||
"name": "kiro-provider",
|
||||
"version": "1.0.0",
|
||||
"description": "Kiro (AWS CodeWhisperer) OAuth Provider - 支持 Claude 模型",
|
||||
"author": "ProxyCast Team",
|
||||
"author": "Lime Team",
|
||||
"homepage": "https://github.com/aiclientproxy/kiro-provider",
|
||||
"license": "MIT",
|
||||
|
||||
"plugin_type": "oauth_provider",
|
||||
"entry": "kiro-provider-cli",
|
||||
"min_proxycast_version": "1.0.0",
|
||||
"min_lime_version": "1.0.0",
|
||||
|
||||
"provider": {
|
||||
"id": "kiro",
|
||||
@@ -596,13 +596,13 @@ impl CwToAnthropicTranslator {
|
||||
|
||||
```tsx
|
||||
// src/index.tsx
|
||||
import { ProxyCastPluginSDK } from '@proxycast/plugin-sdk';
|
||||
import { LimePluginSDK } from '@lime/plugin-sdk';
|
||||
import { CredentialList } from './components/CredentialList';
|
||||
import { KiroForm } from './components/KiroForm';
|
||||
import { SettingsPanel } from './components/SettingsPanel';
|
||||
|
||||
interface PluginProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
pluginId: string;
|
||||
}
|
||||
|
||||
@@ -676,7 +676,7 @@ type BrowserMode = 'system' | 'playwright';
|
||||
type OAuthProvider = 'google' | 'github' | 'builder_id';
|
||||
|
||||
interface KiroFormProps {
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
onSuccess: () => void;
|
||||
onCancel: () => void;
|
||||
}
|
||||
@@ -737,7 +737,7 @@ interface LoginModeProps {
|
||||
oauthProvider: OAuthProvider;
|
||||
setOAuthProvider: (provider: OAuthProvider) => void;
|
||||
playwrightStatus?: PlaywrightStatus;
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
onSuccess: () => void;
|
||||
}
|
||||
|
||||
@@ -910,7 +910,7 @@ export function BrowserModeSelector({ value, onChange, playwrightStatus }: Brows
|
||||
interface CredentialListProps {
|
||||
credentials: Credential[];
|
||||
onRefresh: () => void;
|
||||
sdk: ProxyCastPluginSDK;
|
||||
sdk: LimePluginSDK;
|
||||
}
|
||||
|
||||
export function CredentialList({ credentials, onRefresh, sdk }: CredentialListProps) {
|
||||
@@ -1252,4 +1252,4 @@ pnpm test
|
||||
|
||||
- [AWS CodeWhisperer 文档](https://docs.aws.amazon.com/codewhisperer/)
|
||||
- [Kiro IDE](https://kiro.dev/)
|
||||
- [ProxyCast 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
- [Lime 插件开发指南](../prd/credential-provider-plugin-architecture.md)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
# ProxyCast 创作类 AI Agent 平台 - 产品介绍
|
||||
# Lime 创作类 AI Agent 平台 - 产品介绍
|
||||
|
||||
> 版本: 2.0.0
|
||||
> 更新: 2026-02-16
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
**面向创作者的一站式 AI Agent 平台**
|
||||
|
||||
ProxyCast 不是单点工具,而是一条完整创作链路:
|
||||
Lime 不是单点工具,而是一条完整创作链路:
|
||||
|
||||
- 从灵感讨论开始
|
||||
- 到文本与图片产出
|
||||
@@ -107,7 +107,7 @@ ProxyCast 不是单点工具,而是一条完整创作链路:
|
||||
|
||||
## 七、进阶能力(可选)
|
||||
|
||||
对于开发者或自动化场景,ProxyCast 还提供:
|
||||
对于开发者或自动化场景,Lime 还提供:
|
||||
|
||||
- 本地 API 接入
|
||||
- MCP 工具扩展
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 值得 Proxycast 参考的设计
|
||||
## 值得 Lime 参考的设计
|
||||
|
||||
### 1. 守护进程 + 客户端架构 ⭐⭐⭐
|
||||
|
||||
@@ -48,7 +48,7 @@ async function dispatch(line: string, socket: Socket) {
|
||||
}
|
||||
```
|
||||
|
||||
**Proxycast 应用:**
|
||||
**Lime 应用:**
|
||||
- ✅ **替代 Tauri event 的高吞吐方案** - 当事件推送超过 100/s 时,切换到本地 Unix Socket
|
||||
- ✅ **守护进程管理浏览器实例** - 避免每次命令都启动新浏览器
|
||||
- ✅ **命令-响应模式** - 清晰的请求/响应边界,便于错误处理
|
||||
@@ -90,7 +90,7 @@ async function launch() {
|
||||
2. **预注入 Hook** - 使用 `addInitScript` 在页面加载前注入 React DevTools hook
|
||||
3. **自动打开 DevTools** - `--auto-open-devtools-for-tabs` 确保扩展激活
|
||||
|
||||
**Proxycast 应用:**
|
||||
**Lime 应用:**
|
||||
- ✅ **扩展 CDP 能力** - 不仅仅是原始 CDP,还可以加载自定义扩展
|
||||
- ✅ **预注入脚本** - 在页面加载前注入监控/调试脚本
|
||||
- ✅ **持久化上下文** - 使用 `launchPersistentContext` 保持会话状态
|
||||
@@ -128,7 +128,7 @@ export async function inspect(page: Page, nodeId: number) {
|
||||
}
|
||||
```
|
||||
|
||||
**Proxycast 应用:**
|
||||
**Lime 应用:**
|
||||
- ✅ **深度调试能力** - 不仅看到 DOM,还能看到 React 组件结构
|
||||
- ✅ **状态检查** - 检查组件的 props/hooks/state
|
||||
- ✅ **源码定位** - 通过 source map 定位到原始源码位置
|
||||
@@ -184,7 +184,7 @@ export async function unlock() {
|
||||
3. **Unlock** - 释放锁,让动态数据加载
|
||||
4. **Analyze** - 对比 locked/unlocked 状态,识别哪些组件是动态的
|
||||
|
||||
**Proxycast 应用:**
|
||||
**Lime 应用:**
|
||||
- ✅ **性能分析** - 识别哪些组件导致页面加载慢
|
||||
- ✅ **SSR/CSR 边界** - 清晰看到服务端渲染和客户端渲染的边界
|
||||
- ✅ **优化指导** - 帮助用户优化 PPR shell,提升首屏加载速度
|
||||
@@ -246,7 +246,7 @@ export function inspect(idx: number) {
|
||||
}
|
||||
```
|
||||
|
||||
**Proxycast 应用:**
|
||||
**Lime 应用:**
|
||||
- ✅ **完整的 Network 追踪** - 记录所有请求/响应
|
||||
- ✅ **性能分析** - 识别慢请求
|
||||
- ✅ **调试 API 调用** - 检查请求/响应内容
|
||||
@@ -290,7 +290,7 @@ async function getConsumer(url: string) {
|
||||
}
|
||||
```
|
||||
|
||||
**Proxycast 应用:**
|
||||
**Lime 应用:**
|
||||
- ✅ **错误定位** - 将压缩代码的错误映射到原始源码
|
||||
- ✅ **组件定位** - 显示组件在源码中的位置
|
||||
- ✅ **调试体验** - 让用户看到可读的源码,而不是压缩后的代码
|
||||
@@ -327,7 +327,7 @@ export async function errors() {
|
||||
}
|
||||
```
|
||||
|
||||
**Proxycast 应用:**
|
||||
**Lime 应用:**
|
||||
- ✅ **统一错误收集** - 收集构建错误、运行时错误、Console 错误
|
||||
- ✅ **结构化错误** - 提供完整的堆栈信息和源码位置
|
||||
- ✅ **错误分类** - 区分不同类型的错误,便于排查
|
||||
@@ -352,7 +352,7 @@ export async function errors() {
|
||||
└─────────────────────┘
|
||||
```
|
||||
|
||||
### Proxycast 当前架构
|
||||
### Lime 当前架构
|
||||
```
|
||||
┌─────────────┐
|
||||
│ 前端 UI │
|
||||
@@ -505,4 +505,4 @@ impl ReactDevTools {
|
||||
5. **Source Map 支持** - 将压缩代码映射到原始源码
|
||||
6. **完整的 Network 追踪** - 记录所有请求/响应
|
||||
|
||||
这些设计可以直接应用到 Proxycast 的 Phase 2-3 实现中,特别是守护进程架构和预注入脚本能力。
|
||||
这些设计可以直接应用到 Lime 的 Phase 2-3 实现中,特别是守护进程架构和预注入脚本能力。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 基于 CDP 的远程浏览器实时流控与调试方案(Proxycast 落地版)
|
||||
# 基于 CDP 的远程浏览器实时流控与调试方案(Lime 落地版)
|
||||
|
||||
> 融合 NextBrowser 特征调查 + Codex 架构设计的务实实施方案
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
2. **画面流通道**: 基于 `Page.startScreencast` 或受控截图轮询输出低延迟页面画面,用于任务执行中的实时观察与回放
|
||||
|
||||
### 设计原则
|
||||
- ✅ **保持现有架构**: 不改动后端优先级模型(aster_compat、proxycast_extension_bridge、cdp_direct 并存)
|
||||
- ✅ **保持现有架构**: 不改动后端优先级模型(aster_compat、lime_extension_bridge、cdp_direct 并存)
|
||||
- ✅ **渐进式增强**: 只升级 cdp_direct 从"HTTP 探测初版"到"有状态 CDP 会话后端"
|
||||
- ✅ **KISS/YAGNI**: 不引入第四套浏览器控制通道,避免过度设计
|
||||
- ✅ **跨平台兼容**: macOS 与 Windows 都可运行,平台差异仅体现在 Chrome 启动和端口探测
|
||||
@@ -31,7 +31,7 @@
|
||||
- 双向交互(观看 + 控制)
|
||||
- WebSocket 持久连接
|
||||
|
||||
**Proxycast 实现优先级:** 🔥 高优先级
|
||||
**Lime 实现优先级:** 🔥 高优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
- WebSocket debugger URL: `wss://...`
|
||||
- 支持多标签页调试
|
||||
|
||||
**Proxycast 实现优先级:** 🔥 高优先级
|
||||
**Lime 实现优先级:** 🔥 高优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
- 地理定位: 国家/地区/城市/ISP
|
||||
- 用于绕过地理限制和反爬虫检测
|
||||
|
||||
**Proxycast 实现优先级:** 🔥 高优先级
|
||||
**Lime 实现优先级:** 🔥 高优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
- Geolocation API 覆盖
|
||||
- User-Agent 和设备特征模拟
|
||||
|
||||
**Proxycast 实现优先级:** 🟡 中优先级
|
||||
**Lime 实现优先级:** 🟡 中优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
- 用户级别隔离
|
||||
- 支持会话刷新
|
||||
|
||||
**Proxycast 实现优先级:** 🔥 高优先级
|
||||
**Lime 实现优先级:** 🔥 高优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
- 会话过期时自动重新认证
|
||||
- 支持双因素认证
|
||||
|
||||
**Proxycast 实现优先级:** 🟡 中优先级
|
||||
**Lime 实现优先级:** 🟡 中优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
- FunCAPTCHA
|
||||
- 等等
|
||||
|
||||
**Proxycast 实现优先级:** 🟢 低优先级 (可集成第三方服务)
|
||||
**Lime 实现优先级:** 🟢 低优先级 (可集成第三方服务)
|
||||
|
||||
---
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
- 一次性任务: 指定日期和时间运行
|
||||
- 循环任务: 每小时/每天/每周/自定义 cron 表达式
|
||||
|
||||
**Proxycast 实现优先级:** 🟡 中优先级
|
||||
**Lime 实现优先级:** 🟡 中优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
- OAuth 认证
|
||||
- 自动续期连接
|
||||
|
||||
**Proxycast 实现优先级:** 🟢 低优先级
|
||||
**Lime 实现优先级:** 🟢 低优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
- JSON
|
||||
- 超链接
|
||||
|
||||
**Proxycast 实现优先级:** 🟡 中优先级
|
||||
**Lime 实现优先级:** 🟡 中优先级
|
||||
|
||||
---
|
||||
|
||||
@@ -1100,7 +1100,7 @@ describe('BrowserDebugPanel', () => {
|
||||
|
||||
#### 场景 1: 基础会话建立
|
||||
```bash
|
||||
# 1. 启动 Proxycast
|
||||
# 1. 启动 Lime
|
||||
npm run tauri:dev
|
||||
|
||||
# 2. 打开调试面板
|
||||
@@ -1242,7 +1242,7 @@ npm run tauri:dev
|
||||
**解决方案**:
|
||||
1. **独立用户数据目录**
|
||||
```rust
|
||||
let user_data_dir = format!("/tmp/proxycast/profile_{}", profile_key);
|
||||
let user_data_dir = format!("/tmp/lime/profile_{}", profile_key);
|
||||
let chrome_args = vec![
|
||||
format!("--user-data-dir={}", user_data_dir),
|
||||
"--no-first-run",
|
||||
@@ -1349,7 +1349,7 @@ npm run tauri:dev
|
||||
3. **用户级别隔离**
|
||||
```rust
|
||||
// 每个用户使用独立的加密密钥
|
||||
let user_salt = format!("proxycast_user_{}", user_id);
|
||||
let user_salt = format!("lime_user_{}", user_id);
|
||||
let encryption_key = derive_encryption_key(&user_password, user_salt.as_bytes());
|
||||
```
|
||||
|
||||
@@ -1483,7 +1483,7 @@ npm run tauri:dev
|
||||
|
||||
---
|
||||
|
||||
## 七、与现有 Proxycast 架构的集成
|
||||
## 七、与现有 Lime 架构的集成
|
||||
|
||||
### 7.1 复用现有模块
|
||||
|
||||
@@ -1494,7 +1494,7 @@ npm run tauri:dev
|
||||
- ✅ DevBridge - 前端与 Tauri 通信,复用事件推送机制
|
||||
|
||||
**集成策略**:
|
||||
1. **不改动现有优先级**: aster_compat、proxycast_extension_bridge、cdp_direct 继续并存
|
||||
1. **不改动现有优先级**: aster_compat、lime_extension_bridge、cdp_direct 继续并存
|
||||
2. **只增强 cdp_direct**: 从 HTTP 探测升级为有状态 WebSocket 会话
|
||||
3. **保持接口兼容**: `browser_execute_action` 保持现有签名,补充 `session_id`/`target_id` 返回值
|
||||
|
||||
@@ -1587,7 +1587,7 @@ NextBrowser 的核心价值在于:
|
||||
3. **远程调试** - CDP Debugger 提供专业调试能力
|
||||
|
||||
### 实施策略
|
||||
Proxycast 已经具备了 CDP 基础设施,采用**渐进式增强**策略:
|
||||
Lime 已经具备了 CDP 基础设施,采用**渐进式增强**策略:
|
||||
1. **Phase 1 (2-3 周)**: 核心 CDP 会话 - 建立稳定的 WebSocket 连接和统一事件模型
|
||||
2. **Phase 2 (1-2 周)**: 画面流通道 - 实现 screencast + screenshot fallback
|
||||
3. **Phase 3 (1-2 周)**: Profiles 持久化 - 实现 Cookies 加密存储
|
||||
@@ -1613,7 +1613,7 @@ Proxycast 已经具备了 CDP 基础设施,采用**渐进式增强**策略:
|
||||
|
||||
## 九、基于当前代码库的差距复盘(截至 2026-03-15)
|
||||
|
||||
> 本节用于校正文档前文的“规划态”描述,按当前仓库真实实现判断 Proxycast 已做到什么、还缺什么,以及后续应如何按基础设施优先推进。
|
||||
> 本节用于校正文档前文的“规划态”描述,按当前仓库真实实现判断 Lime 已做到什么、还缺什么,以及后续应如何按基础设施优先推进。
|
||||
|
||||
### 9.1 当前已经具备的能力底座
|
||||
|
||||
@@ -1982,7 +1982,7 @@ Proxycast 已经具备了 CDP 基础设施,采用**渐进式增强**策略:
|
||||
- `webhook` 当前会输出并透传:
|
||||
- payload 字段 `delivery_attempt_id`
|
||||
- 请求头 `Idempotency-Key`
|
||||
- 请求头 `X-Proxycast-Delivery-Attempt-Id`
|
||||
- 请求头 `X-Lime-Delivery-Attempt-Id`
|
||||
- `google_sheets` 当前会在每一行前置:
|
||||
- `delivery_attempt_id`
|
||||
- `run_id`
|
||||
@@ -2057,7 +2057,7 @@ Proxycast 已经具备了 CDP 基础设施,采用**渐进式增强**策略:
|
||||
|
||||
### 9.7 结论
|
||||
|
||||
从代码现状看,Proxycast 并不是“还没有浏览器底座”,而是已经跨过了最难的第一步:
|
||||
从代码现状看,Lime 并不是“还没有浏览器底座”,而是已经跨过了最难的第一步:
|
||||
- 已有实时画面
|
||||
- 已有 CDP 会话
|
||||
- 已有人工接管
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
# ProxyCast 测试体系
|
||||
# Lime 测试体系
|
||||
|
||||
> 基于 Anthropic AI Agent 评估指南与 Orchids Bridge 项目实践
|
||||
|
||||
## 概述
|
||||
|
||||
ProxyCast 作为 AI API 代理和 Agent 集成平台,需要一套完整的测试体系来确保:
|
||||
Lime 作为 AI API 代理和 Agent 集成平台,需要一套完整的测试体系来确保:
|
||||
- API 代理的正确性和稳定性
|
||||
- 凭证池管理的可靠性
|
||||
- Aster Agent 集成的功能完整性
|
||||
@@ -14,7 +14,7 @@ ProxyCast 作为 AI API 代理和 Agent 集成平台,需要一套完整的测
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ ProxyCast 测试金字塔 │
|
||||
│ Lime 测试金字塔 │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────┐ │
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# ProxyCast Agent 评估指南
|
||||
# Lime Agent 评估指南
|
||||
|
||||
> 基于 Anthropic AI Agent 评估指南的实践
|
||||
|
||||
## 概述
|
||||
|
||||
ProxyCast 集成了 Aster Agent,需要专门的评估体系来确保 Agent 行为的正确性和稳定性。本指南基于 Anthropic 官方评估指南和 Orchids Bridge 项目的实践经验。
|
||||
Lime 集成了 Aster Agent,需要专门的评估体系来确保 Agent 行为的正确性和稳定性。本指南基于 Anthropic 官方评估指南和 Orchids Bridge 项目的实践经验。
|
||||
|
||||
## 核心概念
|
||||
|
||||
### 评估术语
|
||||
|
||||
| 术语 | 定义 | ProxyCast 示例 |
|
||||
| 术语 | 定义 | Lime 示例 |
|
||||
|------|------|----------------|
|
||||
| **Task** | 单个测试任务 | "使用 Agent 读取文件并总结" |
|
||||
| **Trial** | 对任务的一次尝试 | 同一任务运行 5 次 |
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# ProxyCast E2E 测试指南
|
||||
# Lime E2E 测试指南
|
||||
|
||||
> 端到端测试验证完整用户流程
|
||||
|
||||
## 概述
|
||||
|
||||
E2E 测试模拟真实用户操作,验证从前端到后端的完整流程。ProxyCast 使用 Tauri 框架,E2E 测试需要覆盖:
|
||||
E2E 测试模拟真实用户操作,验证从前端到后端的完整流程。Lime 使用 Tauri 框架,E2E 测试需要覆盖:
|
||||
|
||||
- 桌面应用启动和初始化
|
||||
- 用户界面交互
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# ProxyCast 集成测试指南
|
||||
# Lime 集成测试指南
|
||||
|
||||
> 测试模块间的协作和数据流
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 概述
|
||||
|
||||
Agent 测试验证 Aster Agent 在 ProxyCast 中的集成,包括:
|
||||
Agent 测试验证 Aster Agent 在 Lime 中的集成,包括:
|
||||
- 基础对话功能
|
||||
- 流式响应
|
||||
- 工具调用
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 概述
|
||||
|
||||
协议转换器是 ProxyCast 的核心模块,负责在不同 API 格式之间转换。测试需要覆盖:
|
||||
协议转换器是 Lime 的核心模块,负责在不同 API 格式之间转换。测试需要覆盖:
|
||||
- 消息格式转换
|
||||
- 流式响应转换
|
||||
- 工具调用转换
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# ProxyCast 单元测试指南
|
||||
# Lime 单元测试指南
|
||||
|
||||
> 针对独立模块的确定性测试
|
||||
|
||||
## 概述
|
||||
|
||||
单元测试是测试金字塔的基础,覆盖最小的可测试单元。ProxyCast 的单元测试主要针对:
|
||||
单元测试是测试金字塔的基础,覆盖最小的可测试单元。Lime 的单元测试主要针对:
|
||||
- 协议转换器
|
||||
- Provider 模块
|
||||
- 工具函数
|
||||
|
||||
@@ -4,26 +4,26 @@
|
||||
|
||||
## 架构说明
|
||||
|
||||
ProxyCast 的 Skills 集成基于 aster-rust 框架的 `SkillTool`:
|
||||
Lime 的 Skills 集成基于 aster-rust 框架的 `SkillTool`:
|
||||
|
||||
```
|
||||
用户消息 → AI Agent → SkillTool → global_registry → 执行 Skill
|
||||
↑
|
||||
|
|
||||
load_proxycast_skills() 加载 ~/.proxycast/skills/
|
||||
load_lime_skills() 加载 ~/.lime/skills/
|
||||
```
|
||||
|
||||
关键组件:
|
||||
- `AsterAgentState::load_proxycast_skills()` - 启动时加载 Skills
|
||||
- `AsterAgentState::reload_proxycast_skills()` - 安装/卸载后刷新
|
||||
- `AsterAgentState::load_lime_skills()` - 启动时加载 Skills
|
||||
- `AsterAgentState::reload_lime_skills()` - 安装/卸载后刷新
|
||||
- `aster::skills::global_registry()` - 全局 Skill 注册表
|
||||
- `aster::skills::SkillTool` - AI 调用 Skills 的工具
|
||||
|
||||
## 前置条件
|
||||
|
||||
1. ProxyCast 应用已构建并可运行
|
||||
1. Lime 应用已构建并可运行
|
||||
2. 至少配置了一个可用的 AI Provider(如 OpenAI API Key)
|
||||
3. 终端可以访问 `~/.proxycast/skills/` 目录
|
||||
3. 终端可以访问 `~/.lime/skills/` 目录
|
||||
|
||||
## 测试场景
|
||||
|
||||
@@ -35,8 +35,8 @@ ProxyCast 的 Skills 集成基于 aster-rust 框架的 `SkillTool`:
|
||||
|
||||
1. 创建测试 Skill:
|
||||
```bash
|
||||
mkdir -p ~/.proxycast/skills/test-greeting
|
||||
cat > ~/.proxycast/skills/test-greeting/SKILL.md << 'EOF'
|
||||
mkdir -p ~/.lime/skills/test-greeting
|
||||
cat > ~/.lime/skills/test-greeting/SKILL.md << 'EOF'
|
||||
---
|
||||
name: test-greeting
|
||||
description: 一个简单的问候技能,用于测试 Skills 集成
|
||||
@@ -46,21 +46,21 @@ description: 一个简单的问候技能,用于测试 Skills 集成
|
||||
|
||||
当用户请求问候时,使用以下格式回复:
|
||||
|
||||
"你好!我是 ProxyCast 助手,很高兴为你服务!"
|
||||
"你好!我是 Lime 助手,很高兴为你服务!"
|
||||
|
||||
请始终使用中文回复。
|
||||
EOF
|
||||
```
|
||||
|
||||
2. 启动 ProxyCast 应用:
|
||||
2. 启动 Lime 应用:
|
||||
```bash
|
||||
cd proxycast && npm run tauri dev
|
||||
cd lime && npm run tauri dev
|
||||
```
|
||||
|
||||
3. 打开开发者工具(Cmd+Option+I),查看控制台日志
|
||||
|
||||
4. **预期结果**:
|
||||
- 日志中应显示 `[AsterAgent] 成功加载 1 个 ProxyCast Skills 到 global_registry`
|
||||
- 日志中应显示 `[AsterAgent] 成功加载 1 个 Lime Skills 到 global_registry`
|
||||
- 日志中应显示 `[AsterAgent] 已注册 Skill: user:test-greeting`
|
||||
|
||||
### 场景 2:AI 自动调用 Skill
|
||||
@@ -71,7 +71,7 @@ cd proxycast && npm run tauri dev
|
||||
|
||||
1. 确保测试 Skill 已创建(见场景 1)
|
||||
|
||||
2. 在 ProxyCast 聊天界面发送消息:
|
||||
2. 在 Lime 聊天界面发送消息:
|
||||
```
|
||||
请用问候技能跟我打个招呼
|
||||
```
|
||||
@@ -79,7 +79,7 @@ cd proxycast && npm run tauri dev
|
||||
3. **预期结果**:
|
||||
- AI 应该识别到 `test-greeting` Skill
|
||||
- AI 应该调用 Skill 并返回问候语
|
||||
- 响应中应包含 "你好!我是 ProxyCast 助手"
|
||||
- 响应中应包含 "你好!我是 Lime 助手"
|
||||
|
||||
### 场景 3:通过斜杠命令调用 Skill
|
||||
|
||||
@@ -102,10 +102,10 @@ cd proxycast && npm run tauri dev
|
||||
|
||||
**步骤**:
|
||||
|
||||
1. 在 ProxyCast 运行时,创建新 Skill:
|
||||
1. 在 Lime 运行时,创建新 Skill:
|
||||
```bash
|
||||
mkdir -p ~/.proxycast/skills/test-calculator
|
||||
cat > ~/.proxycast/skills/test-calculator/SKILL.md << 'EOF'
|
||||
mkdir -p ~/.lime/skills/test-calculator
|
||||
cat > ~/.lime/skills/test-calculator/SKILL.md << 'EOF'
|
||||
---
|
||||
name: test-calculator
|
||||
description: 一个简单的计算器技能
|
||||
@@ -119,7 +119,7 @@ description: 一个简单的计算器技能
|
||||
EOF
|
||||
```
|
||||
|
||||
2. 在 ProxyCast Skills 页面点击刷新(或重新进入页面)
|
||||
2. 在 Lime Skills 页面点击刷新(或重新进入页面)
|
||||
|
||||
3. 发送消息:
|
||||
```
|
||||
@@ -138,10 +138,10 @@ EOF
|
||||
|
||||
1. 删除测试 Skill:
|
||||
```bash
|
||||
rm -rf ~/.proxycast/skills/test-greeting
|
||||
rm -rf ~/.lime/skills/test-greeting
|
||||
```
|
||||
|
||||
2. 在 ProxyCast Skills 页面点击刷新
|
||||
2. 在 Lime Skills 页面点击刷新
|
||||
|
||||
3. 发送消息:
|
||||
```
|
||||
@@ -157,15 +157,15 @@ rm -rf ~/.proxycast/skills/test-greeting
|
||||
测试完成后,清理测试 Skills:
|
||||
|
||||
```bash
|
||||
rm -rf ~/.proxycast/skills/test-greeting
|
||||
rm -rf ~/.proxycast/skills/test-calculator
|
||||
rm -rf ~/.lime/skills/test-greeting
|
||||
rm -rf ~/.lime/skills/test-calculator
|
||||
```
|
||||
|
||||
## 常见问题排查
|
||||
|
||||
### Skills 没有被加载
|
||||
|
||||
1. 检查目录是否存在:`ls -la ~/.proxycast/skills/`
|
||||
1. 检查目录是否存在:`ls -la ~/.lime/skills/`
|
||||
2. 检查 SKILL.md 文件格式是否正确
|
||||
3. 查看应用日志中是否有错误信息
|
||||
|
||||
@@ -177,7 +177,7 @@ rm -rf ~/.proxycast/skills/test-calculator
|
||||
|
||||
### 动态刷新不生效
|
||||
|
||||
1. 确认调用了 `reload_proxycast_skills()`
|
||||
1. 确认调用了 `reload_lime_skills()`
|
||||
2. 检查日志中是否有刷新相关的输出
|
||||
3. 尝试重启应用
|
||||
|
||||
@@ -192,7 +192,7 @@ test('AI should auto-invoke skill based on intent', async ({ page }) => {
|
||||
await createTestSkill('test-greeting');
|
||||
|
||||
// 2. 启动应用
|
||||
await launchProxyCast();
|
||||
await launchLime();
|
||||
|
||||
// 3. 发送消息
|
||||
await page.fill('[data-testid="chat-input"]', '请用问候技能跟我打招呼');
|
||||
@@ -200,6 +200,6 @@ test('AI should auto-invoke skill based on intent', async ({ page }) => {
|
||||
|
||||
// 4. 验证响应
|
||||
await expect(page.locator('[data-testid="chat-message"]'))
|
||||
.toContainText('你好!我是 ProxyCast 助手');
|
||||
.toContainText('你好!我是 Lime 助手');
|
||||
});
|
||||
```
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# ProxyCast AI Agent 测试指南
|
||||
# Lime AI Agent 测试指南
|
||||
|
||||
> 基于 Anthropic 评估理论与实践经验的 AI Agent 测试策略
|
||||
|
||||
@@ -789,4 +789,4 @@ async fn test_with_transcript() {
|
||||
|
||||
---
|
||||
|
||||
*本文档定义了 ProxyCast AI Agent 功能的测试策略,随着开发进展会持续更新。*
|
||||
*本文档定义了 Lime AI Agent 功能的测试策略,随着开发进展会持续更新。*
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Proxycast Chrome Bridge 扩展
|
||||
# Lime Chrome Bridge 扩展
|
||||
|
||||
用于把 Chrome 页面能力接入 Proxycast 的浏览器桥接通道,供各业务 AI Agent 通过统一 `browser_execute_action` / MCP 浏览器工具调用。
|
||||
用于把 Chrome 页面能力接入 Lime 的浏览器桥接通道,供各业务 AI Agent 通过统一 `browser_execute_action` / MCP 浏览器工具调用。
|
||||
|
||||
## 功能
|
||||
|
||||
- Observer 通道自动连接:`/proxycast-chrome-observer/Proxycast_Key=...`
|
||||
- Observer 通道自动连接:`/lime-chrome-observer/Lime_Key=...`
|
||||
- 页面信息上报:标题、URL、Markdown
|
||||
- 远程指令执行:`open_url` / `click` / `type` / `scroll` / `switch_tab` / `list_tabs` / `go_back` 等
|
||||
- 弹窗配置:`serverUrl`、`bridgeKey`、`profileKey`、监控开关、手动抓取
|
||||
@@ -14,21 +14,21 @@
|
||||
1. 打开 Chrome `chrome://extensions`
|
||||
2. 打开右上角「开发者模式」
|
||||
3. 点击「加载已解压的扩展程序」
|
||||
4. 选择目录:`extensions/proxycast-chrome`
|
||||
4. 选择目录:`extensions/lime-chrome`
|
||||
|
||||
## 配置
|
||||
|
||||
点击扩展图标打开弹窗,配置:
|
||||
|
||||
- `Server URL`:Proxycast 服务地址,例如 `ws://127.0.0.1:8999`
|
||||
- `Bridge Key`:Proxycast 服务 API Key(与后端 `Proxycast_Key` 一致)
|
||||
- `Server URL`:Lime 服务地址,例如 `ws://127.0.0.1:8999`
|
||||
- `Bridge Key`:Lime 服务 API Key(与后端 `Lime_Key` 一致)
|
||||
- `Profile Key`:浏览器会话隔离键(建议与业务场景对应,如 `research_a`)
|
||||
|
||||
点击「保存并重连」后,扩展会建立 observer WebSocket 连接。
|
||||
|
||||
## 验证
|
||||
|
||||
1. 在 Proxycast 设置中查看 `get_chrome_bridge_status`,`observer_count` 应大于 0
|
||||
1. 在 Lime 设置中查看 `get_chrome_bridge_status`,`observer_count` 应大于 0
|
||||
2. 调用 `browser_execute_action`:
|
||||
|
||||
```json
|
||||
@@ -22,17 +22,17 @@ let lastSettings = { ...DEFAULT_SETTINGS };
|
||||
|
||||
function logInfo(message, payload) {
|
||||
if (payload === undefined) {
|
||||
console.log(`[ProxycastBridge] ${message}`);
|
||||
console.log(`[LimeBridge] ${message}`);
|
||||
} else {
|
||||
console.log(`[ProxycastBridge] ${message}`, payload);
|
||||
console.log(`[LimeBridge] ${message}`, payload);
|
||||
}
|
||||
}
|
||||
|
||||
function logWarn(message, payload) {
|
||||
if (payload === undefined) {
|
||||
console.warn(`[ProxycastBridge] ${message}`);
|
||||
console.warn(`[LimeBridge] ${message}`);
|
||||
} else {
|
||||
console.warn(`[ProxycastBridge] ${message}`, payload);
|
||||
console.warn(`[LimeBridge] ${message}`, payload);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ function buildObserverUrl(settings) {
|
||||
|
||||
const normalized = serverUrl.replace(/\/$/, "");
|
||||
const profileKey = encodeURIComponent(settings.profileKey || "default");
|
||||
return `${normalized}/proxycast-chrome-observer/${encodeURIComponent(bridgeKey)}?profileKey=${profileKey}`;
|
||||
return `${normalized}/lime-chrome-observer/${encodeURIComponent(bridgeKey)}?profileKey=${profileKey}`;
|
||||
}
|
||||
|
||||
async function connectObserver(forceReconnect = false) {
|
||||
+7
-3
@@ -1,17 +1,21 @@
|
||||
// 使用 IIFE 避免重复注入时的变量冲突
|
||||
(function () {
|
||||
// 检查是否已经注入过
|
||||
if (window.__PROXYCAST_CONTENT_SCRIPT_LOADED__) {
|
||||
if (
|
||||
window.__LIME_CONTENT_SCRIPT_LOADED__ ||
|
||||
window.__PROXYCAST_CONTENT_SCRIPT_LOADED__
|
||||
) {
|
||||
return;
|
||||
}
|
||||
window.__LIME_CONTENT_SCRIPT_LOADED__ = true;
|
||||
window.__PROXYCAST_CONTENT_SCRIPT_LOADED__ = true;
|
||||
|
||||
let refCounter = 0;
|
||||
const REF_ATTR = "proxycast-id";
|
||||
const REF_ATTR = "lime-id";
|
||||
|
||||
function nextRefId() {
|
||||
refCounter += 1;
|
||||
return `proxycast-${refCounter}`;
|
||||
return `lime-${refCounter}`;
|
||||
}
|
||||
|
||||
function resetRefs() {
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Proxycast Browser Bridge",
|
||||
"description": "Connect Chrome tabs with Proxycast browser runtime for AI agents.",
|
||||
"name": "Lime Browser Bridge",
|
||||
"description": "Connect Chrome tabs with Lime browser runtime for AI agents.",
|
||||
"version": "0.1.0",
|
||||
"permissions": ["storage", "tabs", "activeTab", "scripting", "clipboardRead"],
|
||||
"host_permissions": ["http://*/*", "https://*/*"],
|
||||
@@ -9,7 +9,7 @@
|
||||
"service_worker": "background.js"
|
||||
},
|
||||
"action": {
|
||||
"default_title": "Proxycast Browser Bridge",
|
||||
"default_title": "Lime Browser Bridge",
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"content_scripts": [
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Proxycast Browser Bridge</title>
|
||||
<title>Lime Browser Bridge</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
@@ -169,8 +169,8 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>Proxycast Browser Bridge</h1>
|
||||
<p>连接 Chrome 与 Proxycast 服务</p>
|
||||
<h1>Lime Browser Bridge</h1>
|
||||
<p>连接 Chrome 与 Lime 服务</p>
|
||||
</div>
|
||||
|
||||
<div class="status-row">
|
||||
@@ -185,7 +185,7 @@
|
||||
|
||||
<div class="quick-config">
|
||||
<div class="quick-config-title">🚀 一键配置</div>
|
||||
<div class="quick-config-hint">从剪贴板粘贴配置(在 ProxyCast 页面点击"复制配置")</div>
|
||||
<div class="quick-config-hint">从剪贴板粘贴配置(在 Lime 页面点击"复制配置")</div>
|
||||
<div class="quick-config-buttons">
|
||||
<button id="pasteConfigBtn" class="btn btn-small">粘贴配置</button>
|
||||
<button id="clearConfigBtn" class="btn btn-small">清除配置</button>
|
||||
@@ -208,7 +208,7 @@
|
||||
type="text"
|
||||
id="bridgeKey"
|
||||
class="form-input"
|
||||
placeholder="输入 Proxycast API Key"
|
||||
placeholder="输入 Lime API Key"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@ function buildObserverEndpoint(serverUrl, bridgeKey, profileKey) {
|
||||
if (!base || !key) {
|
||||
return "Observer URL: 未配置";
|
||||
}
|
||||
return `Observer URL: ${base}/proxycast-chrome-observer/Proxycast_Key=${encodeURIComponent(key)}?profileKey=${profile}`;
|
||||
return `Observer URL: ${base}/lime-chrome-observer/Lime_Key=${encodeURIComponent(key)}?profileKey=${profile}`;
|
||||
}
|
||||
|
||||
function applyStatus(status) {
|
||||
@@ -99,7 +99,7 @@ async function loadInitialState() {
|
||||
const status = await sendMessage({ type: "GET_STATUS" });
|
||||
applyStatus(status || {});
|
||||
} catch (error) {
|
||||
console.warn("[ProxycastBridgePopup] 获取状态失败", error?.message || String(error));
|
||||
console.warn("[LimeBridgePopup] 获取状态失败", error?.message || String(error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@ async function saveAndReconnect() {
|
||||
saveBtnEl.textContent = originalText;
|
||||
saveBtnEl.disabled = false;
|
||||
}, 1200);
|
||||
console.warn("[ProxycastBridgePopup] 保存设置失败", error?.message || String(error));
|
||||
console.warn("[LimeBridgePopup] 保存设置失败", error?.message || String(error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ async function toggleConnection() {
|
||||
try {
|
||||
await sendMessage({ type: "TOGGLE_CONNECTION" });
|
||||
} catch (error) {
|
||||
console.warn("[ProxycastBridgePopup] 切换连接失败", error?.message || String(error));
|
||||
console.warn("[LimeBridgePopup] 切换连接失败", error?.message || String(error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ async function toggleMonitoring() {
|
||||
try {
|
||||
await sendMessage({ type: "TOGGLE_MONITORING" });
|
||||
} catch (error) {
|
||||
console.warn("[ProxycastBridgePopup] 切换监控失败", error?.message || String(error));
|
||||
console.warn("[LimeBridgePopup] 切换监控失败", error?.message || String(error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ async function capturePageNow() {
|
||||
try {
|
||||
await sendMessage({ type: "REQUEST_PAGE_CAPTURE" });
|
||||
} catch (error) {
|
||||
console.warn("[ProxycastBridgePopup] 请求抓取失败", error?.message || String(error));
|
||||
console.warn("[LimeBridgePopup] 请求抓取失败", error?.message || String(error));
|
||||
} finally {
|
||||
setTimeout(() => {
|
||||
captureBtnEl.textContent = originalText;
|
||||
@@ -208,7 +208,7 @@ async function pasteConfigFromClipboard() {
|
||||
pasteBtn.textContent = originalText;
|
||||
pasteBtn.disabled = false;
|
||||
}, 1500);
|
||||
console.warn("[ProxycastBridgePopup] 粘贴配置失败", error?.message || String(error));
|
||||
console.warn("[LimeBridgePopup] 粘贴配置失败", error?.message || String(error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
cask "lime" do
|
||||
version "0.37.0"
|
||||
|
||||
on_arm do
|
||||
sha256 "REPLACE_WITH_ARM64_SHA256"
|
||||
url "https://github.com/aiclientproxy/lime/releases/download/v#{version}/Lime_#{version}_aarch64.dmg"
|
||||
end
|
||||
|
||||
on_intel do
|
||||
sha256 "REPLACE_WITH_X64_SHA256"
|
||||
url "https://github.com/aiclientproxy/lime/releases/download/v#{version}/Lime_#{version}_x64.dmg"
|
||||
end
|
||||
|
||||
name "Lime"
|
||||
desc "AI 代理服务桌面应用 - 多 Provider 凭证池管理"
|
||||
homepage "https://github.com/aiclientproxy/lime"
|
||||
|
||||
livecheck do
|
||||
url :url
|
||||
strategy :github_latest
|
||||
end
|
||||
|
||||
app "Lime.app"
|
||||
|
||||
zap trash: [
|
||||
"~/Library/Application Support/com.lime.app",
|
||||
"~/Library/Caches/com.lime.app",
|
||||
"~/Library/Preferences/com.lime.app.plist",
|
||||
"~/Library/Saved Application State/com.lime.app.savedState",
|
||||
]
|
||||
end
|
||||
@@ -1,31 +0,0 @@
|
||||
cask "proxycast" do
|
||||
version "0.37.0"
|
||||
|
||||
on_arm do
|
||||
sha256 "REPLACE_WITH_ARM64_SHA256"
|
||||
url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/ProxyCast_#{version}_aarch64.dmg"
|
||||
end
|
||||
|
||||
on_intel do
|
||||
sha256 "REPLACE_WITH_X64_SHA256"
|
||||
url "https://github.com/aiclientproxy/proxycast/releases/download/v#{version}/ProxyCast_#{version}_x64.dmg"
|
||||
end
|
||||
|
||||
name "ProxyCast"
|
||||
desc "AI 代理服务桌面应用 - 多 Provider 凭证池管理"
|
||||
homepage "https://github.com/aiclientproxy/proxycast"
|
||||
|
||||
livecheck do
|
||||
url :url
|
||||
strategy :github_latest
|
||||
end
|
||||
|
||||
app "ProxyCast.app"
|
||||
|
||||
zap trash: [
|
||||
"~/Library/Application Support/com.proxycast.app",
|
||||
"~/Library/Caches/com.proxycast.app",
|
||||
"~/Library/Preferences/com.proxycast.app.plist",
|
||||
"~/Library/Saved Application State/com.proxycast.app.savedState",
|
||||
]
|
||||
end
|
||||
+8
-8
@@ -1,6 +1,6 @@
|
||||
# ProxyCast Homebrew Tap
|
||||
# Lime Homebrew Tap
|
||||
|
||||
ProxyCast 的 Homebrew Cask 分发仓库。
|
||||
Lime 的 Homebrew Cask 分发仓库。
|
||||
|
||||
## 安装
|
||||
|
||||
@@ -8,20 +8,20 @@ ProxyCast 的 Homebrew Cask 分发仓库。
|
||||
# 添加 tap
|
||||
brew tap terryso/tap
|
||||
|
||||
# 安装 ProxyCast
|
||||
brew install --cask proxycast
|
||||
# 安装 Lime
|
||||
brew install --cask lime
|
||||
```
|
||||
|
||||
## 更新
|
||||
|
||||
```bash
|
||||
brew upgrade --cask proxycast
|
||||
brew upgrade --cask lime
|
||||
```
|
||||
|
||||
## 卸载
|
||||
|
||||
```bash
|
||||
brew uninstall --cask proxycast
|
||||
brew uninstall --cask lime
|
||||
```
|
||||
|
||||
## 维护说明
|
||||
@@ -29,8 +29,8 @@ brew uninstall --cask proxycast
|
||||
### 手动更新版本
|
||||
|
||||
1. 下载新版本的 DMG 文件
|
||||
2. 计算 sha256: `shasum -a 256 ProxyCast_x.x.x_aarch64.dmg`
|
||||
3. 更新 `Casks/proxycast.rb` 中的 `version` 和 `sha256`
|
||||
2. 计算 sha256: `shasum -a 256 Lime_x.x.x_aarch64.dmg`
|
||||
3. 更新 `Casks/lime.rb` 中的 `version` 和 `sha256`
|
||||
4. 推送到仓库
|
||||
|
||||
### 自动化更新
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#!/bin/bash
|
||||
# 自动更新 ProxyCast Homebrew Cask 版本
|
||||
# 自动更新 Lime Homebrew Cask 版本
|
||||
# 用法: ./update-cask.sh <version>
|
||||
# 示例: ./update-cask.sh 0.38.0
|
||||
|
||||
set -e
|
||||
|
||||
VERSION=$1
|
||||
REPO="aiclientproxy/proxycast"
|
||||
CASK_FILE="$(dirname "$0")/../Casks/proxycast.rb"
|
||||
REPO="aiclientproxy/lime"
|
||||
CASK_FILE="$(dirname "$0")/../Casks/lime.rb"
|
||||
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "用法: $0 <version>"
|
||||
@@ -15,11 +15,11 @@ if [ -z "$VERSION" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🔄 更新 ProxyCast Cask 到版本 $VERSION"
|
||||
echo "🔄 更新 Lime Cask 到版本 $VERSION"
|
||||
|
||||
# 下载 DMG 并计算 sha256
|
||||
ARM64_URL="https://github.com/$REPO/releases/download/v$VERSION/ProxyCast_${VERSION}_aarch64.dmg"
|
||||
X64_URL="https://github.com/$REPO/releases/download/v$VERSION/ProxyCast_${VERSION}_x64.dmg"
|
||||
ARM64_URL="https://github.com/$REPO/releases/download/v$VERSION/Lime_${VERSION}_aarch64.dmg"
|
||||
X64_URL="https://github.com/$REPO/releases/download/v$VERSION/Lime_${VERSION}_x64.dmg"
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
trap "rm -rf $TEMP_DIR" EXIT
|
||||
@@ -43,6 +43,6 @@ sed -i '' "/on_intel do/,/end/ s/sha256 \".*\"/sha256 \"$X64_SHA\"/" "$CASK_FILE
|
||||
echo "✅ 更新完成!"
|
||||
echo ""
|
||||
echo "下一步:"
|
||||
echo " 1. git add Casks/proxycast.rb"
|
||||
echo " 2. git commit -m 'chore: bump proxycast to $VERSION'"
|
||||
echo " 1. git add Casks/lime.rb"
|
||||
echo " 2. git commit -m 'chore: bump lime to $VERSION'"
|
||||
echo " 3. git push"
|
||||
|
||||
+2
-2
@@ -2,9 +2,9 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<link rel="icon" type="image/png" href="/logo.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ProxyCast</title>
|
||||
<title>Lime</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
+4
-4
@@ -5,20 +5,20 @@ echo "📊 统一记忆系统 - 性能监控"
|
||||
echo ""
|
||||
|
||||
# 数据库大小
|
||||
DB_SIZE=$(du -h ~/.proxycast/proxycast.db 2>/dev/null | cut -f1)
|
||||
DB_SIZE=$(du -h ~/.lime/lime.db 2>/dev/null | cut -f1)
|
||||
echo "数据库大小: ${DB_SIZE:-未知}"
|
||||
|
||||
# 记忆数量
|
||||
MEMORY_COUNT=$(sqlite3 ~/.proxycast/proxycast.db "SELECT COUNT(*) FROM unified_memory WHERE archived = 0;" 2>/dev/null)
|
||||
MEMORY_COUNT=$(sqlite3 ~/.lime/lime.db "SELECT COUNT(*) FROM unified_memory WHERE archived = 0;" 2>/dev/null)
|
||||
echo "记忆数量: ${MEMORY_COUNT:-0}"
|
||||
|
||||
# 反馈数量
|
||||
FEEDBACK_COUNT=$(sqlite3 ~/.proxycast/proxycast.db "SELECT COUNT(*) FROM memory_feedback;" 2>/dev/null)
|
||||
FEEDBACK_COUNT=$(sqlite3 ~/.lime/lime.db "SELECT COUNT(*) FROM memory_feedback;" 2>/dev/null)
|
||||
echo "反馈数量: ${FEEDBACK_COUNT:-0}"
|
||||
|
||||
# 批准率
|
||||
if [ "$FEEDBACK_COUNT" -gt 0 ]; then
|
||||
APPROVE_COUNT=$(sqlite3 ~/.proxycast/proxycast.db "SELECT COUNT(*) FROM memory_feedback WHERE action LIKE '%approve%';" 2>/dev/null)
|
||||
APPROVE_COUNT=$(sqlite3 ~/.lime/lime.db "SELECT COUNT(*) FROM memory_feedback WHERE action LIKE '%approve%';" 2>/dev/null)
|
||||
RATE=$(echo "scale=1; $APPROVE_COUNT * 100 / $FEEDBACK_COUNT" | bc 2>/dev/null)
|
||||
echo "批准率: ${RATE:-0}%"
|
||||
fi
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user