feat: sync latest workspace changes

This commit is contained in:
coso
2026-04-19 18:50:13 +08:00
parent 3715b6e304
commit 9f31ba4cd7
301 changed files with 14618 additions and 14009 deletions
+23 -9
View File
@@ -4,18 +4,20 @@
`docs/` 是 Lime 文档中心,分为两类受众:
- 普通创作者:优先阅读 `content/` 下的入门与用户指南
- 普通创作者:`content/` 当前处于 LimeNext V2 重建期,只保留少量进阶页与法律说明
- 开发者与维护者:阅读 `aiprompts/`、`develop/`、`tech/`、`tests/` 等工程文档
文档站基于 Nuxt Content 构建。
## 目录索引
- `content/`:对外文档站正文(产品介绍、用户指南、进阶能力)
- `content/`:Nuxt Content 对外文档站入口,当前已删除过时入门/旧导航/旧开发文档,只保留少量仍与实现对齐的进阶页和法律说明
- `aiprompts/`:模块级工程文档(前后端组件、服务、命令、数据层)
- `research/`:外部产品、竞品与技术参考研究文档
- `exec-plans/`:执行计划、进度日志、技术债追踪
- `tech/`:跨模块技术蓝图与专题工程文档(当前已包含 Harness Engineering 指导文档)
- `bussniss/`:商务合作与代理运营方案
- `oem/`:品牌、slogan、Logo 替换与 OEM 物料
- `develop/`:开发流程与协作规范
- `plugins/`:插件与扩展相关文档
- `tests/`:测试策略与用例文档
@@ -26,6 +28,8 @@
- `exec-plans/upstream-runtime-alignment-plan.md`:参考运行时主链对齐总计划与排期事实源
- `exec-plans/upstream-runtime-alignment-progress.md`:参考运行时主链对齐进度日志
- `exec-plans/tech-debt-tracker.md`:技术债持续追踪表
- `bussniss/README.md`:商业与 OEM 文档导航,定义 current/compat 业务文档边界
- `oem/README.md`:OEM 品牌文档导航,统一品牌、slogan 与替换口径
- `develop/execution-tracker-technical-plan.md`:统一执行追踪(Execution Tracker)专项技术规划
- `develop/execution-tracker-deprecation-plan.md`:统一执行追踪旧路径退场计划(P0 收口)
- `develop/execution-tracker-p0-acceptance-report.md`:统一执行追踪 P0 验收报告
@@ -40,8 +44,11 @@
- `aiprompts/persistence-map.md`:Runtime 文件快照持久化主链、FileArtifact/sidecar/version/checkpoint 边界
- `aiprompts/state-history-telemetry.md`:State / History / Telemetry current 主链、session/thread/request/evidence/history 边界与 current/compat 分类
- `develop/scheduler-task-governance-p1.md`:调度任务治理 P1(连续失败、自动停用、冷却恢复)
- `roadmap/lime-skills-standardization-roadmap.md`:Skills 标准化与产品化路线图
- `roadmap/limenext/README.md`:LimeNext 平台总纲入口,统一挂接 Workspace、Scene、Runtime、Remote、Governance 与选品系统,并提供业务优先阅读顺序
- `aiprompts/skill-standard.md`:Skills 包标准、运行时投影与 current/compat 边界总文档
- `roadmap/lime-skills-standardization-roadmap.md`:Skills 标准化 supporting 收口计划,主要保留迁移边界与剩余差距
- `research/ribbi/README.md`:Ribbi 研究总入口,作为后续 LimeNext V2 的外部对照事实源
- `roadmap/limenextv2/README.md`:LimeNext V2 当前主规划入口,固定前台对象、skill-first 主线与运行时骨架
- `roadmap/limenext/README.md`:LimeNext 旧总纲入口,当前降级为 `legacy current reference`,主要保留实现锚点与阶段性收口记录
- `roadmap/limenext/sceneapp-capability-model.md`:SceneApp 底层能力模型,定义本地、浏览器、云端、混合场景需要的能力模块范围
- `roadmap/limenext/sceneapp-blueprints.md`:用 `x-article-export`、`@配音`、`每日趋势摘要 / 账号增长跟踪` 三条样板把 SceneApp 分类翻译成业务语言
- `roadmap/limenext/artifact-evidence-scorecards.md`:把样板场景继续翻译成“交付物、失败证据、经营评分”三层,方便业务与产品判断该继续做还是收缩
@@ -55,17 +62,24 @@
- `roadmap/limenext/sequences.md`:LimeNext 的业务时序与技术时序合集
- `prd/gongneng/x-article-export/prd.md`:`Browser-grounded SceneApp` 样板功能包,定义 `/x文章转存` 如何把真实网页沉淀成项目内 Markdown bundle
- `roadmap/lime-service-skill-cloud-config-prd.md`:服务型技能的端优先执行与云配置同步 PRD
- `roadmap/lime-browser-site-capability-prd.md`:站点能力按真实浏览器优先接入的产品需求文档
- `aiprompts/site-adapter-standard.md`:站点适配器标准与 `managed_cdp / existing_session` 当前执行边界
- `ops.md`:运维与发布说明
- `app.config.ts` / `nuxt.config.ts` / `package.json`:文档站配置
## 当前叙事基线
对外文档(`content/`)默认采用以下口径:
对外文档(`content/`)以及商业/品牌文档(`bussniss/`、`oem/`)默认采用以下口径:
1. 主叙事是“创作类 AI Agent 平台”,不再以“代理服务”作为首页主线
2. 先讲创作流程与场景,再讲模型连接和 API 兼容
3. 首页与入门页优先覆盖核心工作区主题与资源沉淀能力
1. 主叙事是“本地优先的内容闭环 Agent 系统”,不再主打“创作类 AI Agent 平台”或“通用 Agent 平台”
2. 前台主词固定为 `技能 / 灵感库 / 生成`,其中 `生成` 是唯一主执行面
3. 先讲任务闭环与结果推进,再讲模型连接、协议兼容、渠道入口和工具接入
4. `项目结果 / 复盘` 是生成链的结果视角,不默认讲成并列一级主舞台
涉及商务合作、官网定位、品牌与 OEM 时,优先阅读:
1. `roadmap/limenextv2/README.md`
2. `bussniss/README.md`
3. `oem/README.md`
## 维护原则
+29
View File
@@ -17,6 +17,21 @@
其余实现必须被明确归类。
## 无历史包袱原则
如果用户已经明确下面任一前提:
- 上一版无人使用
- 不需要兼容
- 旧实现正在阻碍 current 路线图主线
则额外遵守:
1. 不要因为旧实现“还能跑”就默认保留它
2. 与 current 规划直接冲突的旧实现,优先判成 `dead`;若必须分步删除,才判成带明确退出条件的 `deprecated`
3. `legacy current reference` 只表示“它曾经是实现锚点”,不表示“后续还能继续在这条旧实现上长功能”
4. 不要为了减少表面 diff,把旧页面、旧命令、旧协议包装成新的 compat 壳继续留在主链旁边
## 路线图任务防跑偏
如果用户明确绑定了某份路线图,尤其是要求“按顺序继续”“对齐目标”“先完成主线”,治理动作必须服从路线图主线,而不是反过来主导路线图。
@@ -103,6 +118,12 @@
没有退出条件的 compat,最终都会常驻。
如果当前任务已经明确“无兼容需求”,分类时额外遵守:
- 不要把“现在还有调用”自动翻译成必须保留 compat
- 先判断这些调用是不是也属于同一批应迁或应删的旧实现
- 只要同轮能迁完或删完,就直接按 `dead` / `deprecated` 收口,不要再补一层过渡包装
### 4. 优先做减法
默认优先执行这些动作,而不是再加一层抽象:
@@ -115,6 +136,14 @@
除非用户明确要求保留兼容,否则不要新增新的 compat 层。
如果路线图已经切换,而旧实现又在阻碍主线,优先级进一步固定为:
1. 删掉或下线阻碍主线的旧实现
2. 封住旧路回流
3. 再把 current 主链补完整
不要把“先让旧实现也顺手支持一下”当成折中方案。
### 5. 先封旧路,再谈“推荐新路”
治理不能靠口头约定,必须靠守卫机制。
@@ -7,6 +7,18 @@
- 绝对路径:`/Users/coso/Documents/dev/ai/limecloud/limecore/docs/aiprompts/lime-limecore-collaboration.md`
- 在 `limecore` 仓库内的相对路径:`docs/aiprompts/lime-limecore-collaboration.md`
已确认的服务端真实落点:
- `/Users/coso/Documents/dev/ai/limecloud/limecore/services/control-plane-svc`
- `/Users/coso/Documents/dev/ai/limecloud/limecore/services/gateway-svc`
- `/Users/coso/Documents/dev/ai/limecloud/limecore/services/scene-orchestrator-svc`
- `/Users/coso/Documents/dev/ai/limecloud/limecore/services/worker-svc`
固定纠偏:
- 不要再把控制面写成 “`lime` 仓库内待新建本地模块”
- `lime` 仓库默认是消费方,不是控制面唯一背景事实源
## 什么时候先读主文档
遇到下面这些任务时,默认先读 `limecore` 主文档:
+1 -3
View File
@@ -226,13 +226,11 @@
### `compat`
- `docs/roadmap/lime-conversation-execution-efficiency-roadmap.md`
- `docs/roadmap/lime-aster-codex-alignment-roadmap.md`
- `docs/roadmap/lime-aster-codex-state-model-implementation-plan.md`
- `src-tauri/src/commands/persona_cmd.rs::generate_persona`
- `src-tauri/src/commands/theme_context_cmd.rs::aster_agent_theme_context_search`
这些文档与专用命令仍可保留各自职责,但不再承担 Query Loop 唯一事实源职责。
这份历史档案与专用命令仍可保留各自职责,但不再承担 Query Loop 唯一事实源职责。
这两条命令属于专用一次性会话能力:允许显式拼自己的临时 `SessionConfig`,但不能参与 submit turn、runtime queue、turn context snapshot 或 evidence 真相定义。
当前命令层允许保留的原始执行面只剩这 3 处:`action_runtime` 属于 current 恢复链,`persona_cmd` 与 `theme_context_cmd` 属于受控 compat 一次性命令。
+1 -1
View File
@@ -200,7 +200,7 @@
### `compat`
- `docs/roadmap/lime-aster-codex-state-model-implementation-plan.md`
- `docs/roadmap/lime-aster-codex-alignment-roadmap.md`
- `docs/roadmap/reliability/README.md`
- `docs/roadmap/reliability/*`
- `src-tauri/src/commands/telemetry_cmd.rs`
@@ -1,56 +0,0 @@
---
title: 概述
description: 了解 Lime 如何支持从灵感到发布的完整创作流程
navigation:
icon: i-heroicons-home
---
# Lime 概述
Lime 是一款创作类 AI Agent 桌面应用。
它把对话、内容生成、图片创作、项目管理、资源沉淀放到同一个工作台里。
::alert{type="warning"}
**免责声明**: 请在合法合规前提下使用本产品。[查看完整声明](/legal/disclaimer)
::
## 你可以用它做什么
### 九类工作区主题
- 通用对话
- 社媒内容
- 图文海报
- 歌词曲谱
- 知识探索
- 计划规划
- 办公文档
- 短视频
- 小说创作
### 创作全流程
1. 用 Agent 把想法变成清晰方向
2. 生成文案、脚本或结构化草稿
3. 按需要生成图片并继续迭代
4. 把结果沉淀到项目和资源库,方便长期复用
### 一站式工作台
- AI 对话与创作在同一处完成
- 项目隔离上下文,避免内容串线
- 资源按文档/图片/语音/视频分类管理
- 支持参考图参与图片生成与编辑链路
## 使用场景
1. **自媒体创作**:每天稳定产出选题、文案、配图
2. **短视频团队**:快速完成脚本与分镜草稿
3. **小说连载**:持续积累设定、章节与角色信息
4. **品牌运营**:统一管理活动素材与历史版本
## 下一步
- [安装指南](/introduction/installation) - 下载并安装 Lime
- [快速开始](/introduction/quickstart) - 3 步完成首次创作
- [首页与工作台](/user-guide/dashboard) - 熟悉核心入口
@@ -1,80 +0,0 @@
---
title: 安装指南
description: 下载、安装并验证 Lime 可正常启动
navigation:
icon: i-heroicons-arrow-down-tray
---
# 安装指南
## 系统要求
| 平台 | 最低版本 | 架构 |
|------|----------|------|
| macOS | 11.0 (Big Sur) | Apple Silicon (arm64) |
| Windows | 10 | x64 |
## 下载
从 GitHub Releases 下载最新版本安装包:
[下载 Lime](https://github.com/aiclientproxy/lime/releases)
::alert{type="warning"}
Lime 当前仅提供 macOS 与 Windows 桌面端安装包,Linux 版本已暂停支持,不再发布 `.deb` 或 `AppImage`。
::
### 安装包
| 平台 | 文件名 | 说明 |
|------|--------|------|
| 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. 将 Lime 拖入 Applications 文件夹
4. 首次运行时,右键点击应用选择"打开"(绕过 Gatekeeper)
::alert{type="info"}
如果提示"无法验证开发者",请在系统偏好设置 > 安全性与隐私中点击"仍要打开"。
::
## Windows 安装
1. 优先下载 `Lime_x.x.x_x64-online-setup.exe`
2. 双击运行安装程序
3. 按照安装向导完成安装
4. 从开始菜单启动 Lime
::alert{type="info"}
如果设备处于离线、内网或受限网络环境,请改用 `Lime_x.x.x_x64-offline-setup.exe`。
::
## 验证安装
启动 Lime 后,你应该看到:
1. 主窗口正常打开
2. 左侧出现主要入口(AI Agent、项目、资源、设置等)
3. 可以进入设置页并看到版本信息
## 常见安装问题
### macOS: "应用已损坏"
```bash
# 移除隔离属性
xattr -cr /Applications/Lime.app
```
### Windows: SmartScreen 警告
点击"更多信息" > "仍要运行"即可继续安装。
## 下一步
安装完成后,继续阅读 [快速开始](/introduction/quickstart),用 3 步完成第一次创作。
@@ -1,64 +0,0 @@
---
title: 快速开始
description: 3 步完成首次创作并沉淀到项目资源库
navigation:
icon: i-heroicons-rocket-launch
---
# 快速开始
本指南帮助你在几分钟内完成第一次完整创作流程。
## 前置准备
确保你已经:
- [x] 安装了 Lime
- [x] 可以正常打开应用主界面
## 步骤 1:选择主题方向与项目
1. 启动 Lime,进入 AI Agent 或项目入口
2. 选择你的主题方向(如社媒、短视频、小说)
3. 新建项目,作为本次创作的工作空间
## 步骤 2:输入需求并生成内容
1. 用一句话描述你的目标
2. 让 Agent 先给结构,再生成首稿
3. 如需视觉内容,在 AI Agent 中用 `@素材` 搜图或触发图片生成,再把结果沉淀到资源库
## 步骤 3:沉淀到资源库
1. 将文档、图片等结果保存到当前项目资源库
2. 在资源页按分类查看(文档/图片/语音/视频)
3. 下次创作直接复用历史素材和上下文
## 一个最小创作示例
1. 主题:`短视频`
2. 输入:`做一条 30 秒“高效晨间复盘”口播内容`
3. 产出:
- 3 个开场钩子
- 1 版结构化口播稿
- 1 组配图提示词或参考图改写结果
## 常见问题
### 我可以只用对话,不做图片吗?
可以。你可以只用 AI Agent 完成文本创作和项目沉淀。
### 我可以直接改图吗?
可以。先在资源库上传参考图,再从 Claw 发起图片任务;若所选模型支持编辑接口,会自动走对应链路。
### 我还需要排查底层协议怎么办?
可以继续阅读 [API 参考](/api-reference/overview)。
## 下一步
- [首页与工作台](/user-guide/dashboard) - 理解核心导航
- [资源库](/user-guide/resources) - 管理创作资产
- [图片生成与素材链路](/user-guide/image-generation) - 理解 Claw 与资源页如何协同
-57
View File
@@ -1,57 +0,0 @@
---
title: 首页与工作台
description: 首页与创作工作台总览
navigation:
icon: i-heroicons-chart-bar
---
# 首页与工作台
首页是你进入 Lime 后的主入口。
建议把它理解为“创作操作台”,而不是单一功能面板。
## 左侧核心入口
- **AI Agent**:对话、任务推进、内容初稿
- **项目**:按创作目标管理长期内容
- **资源**:统一查看文档、图片、语音、视频
- **设置**:调整主题、模块开关、连接与高级选项
## 推荐工作方式
1. 先在项目中选择一个主题方向
2. 在 AI Agent 中完成结构和首稿
3. 需要视觉时在 AI Agent 中使用 `@素材` 或图片任务
4. 回到资源库统一管理本地图片、图库素材与回流结果
## 主题方向
当前支持的主题包括:
- 通用对话
- 社媒内容
- 图文海报
- 歌词曲谱
- 知识探索
- 计划规划
- 办公文档
- 短视频
- 小说创作
## 常见操作
### 新建一个创作项目
1. 进入项目页
2. 选择主题并创建项目
3. 开始持续沉淀对话与素材
### 从资源继续创作
1. 在资源页选中历史文档或图片
2. 跳转到 AI Agent 继续改写或扩展
3. 将新结果再次沉淀回资源库
### 只看某类素材
在资源页切换分类视图,可只看文档、图片、语音或视频。
-50
View File
@@ -1,50 +0,0 @@
---
title: 提示词模板
description: 管理可复用提示词,提升稳定产出效率
navigation:
icon: i-heroicons-document-text
---
# 提示词模板
提示词模板用于把“经常重复的表达方式”沉淀下来,减少每次从零开始。
## 模板结构建议
每个模板建议包含:
- 名称(便于检索)
- 使用场景(何时用)
- 模板正文(可复用)
- 变量占位(可选)
## 示例:短视频口播模板
```text
你是一名内容策划。
请基于主题「{{topic}}」生成一段 {{duration}} 秒口播稿,要求:
1. 开头 3 秒有抓力
2. 中段给出 3 个关键点
3. 结尾有明确行动引导
语气风格:{{tone}}
```
## 推荐组织方式
- 按主题分类:社媒、短视频、小说、办公
- 按阶段分类:灵感、初稿、润色、发布
- 统一标签:例如 `#高频`、`#可复用`
## 使用建议
### 一次只优化一个模板
避免同时改太多模板,难以判断效果。
### 模板要留“可变空间”
把固定规则写清楚,把创意部分留给变量。
### 和项目结合
在项目中沉淀效果好的模板,后续同类任务可直接复用。
-55
View File
@@ -1,55 +0,0 @@
---
title: 技能工作流
description: 把常见任务封装成可复用的 AI 技能
navigation:
icon: i-heroicons-sparkles
---
# 技能工作流
技能可以理解为“可复用的任务卡片”:
- 预设目标
- 预设风格
- 预设步骤
这样每次执行同类任务时,不必重复手工组织提示。
## 技能适合做什么
- 固定流程写作(如周报、复盘、活动文案)
- 固定结构产出(如短视频脚本、小说章节骨架)
- 固定标准检查(如发布前检查清单)
## 技能卡建议字段
- 名称:明确任务类型
- 描述:写清输入与输出
- 系统指令:定义角色与规则
- 参数:控制风格与长度
- 输出格式:约束结果结构
## 示例:活动文案技能
```yaml
name: "活动文案生成"
description: "根据主题生成活动预热文案与发布文案"
system_prompt: |
你是一名品牌内容策划,输出要简洁、有行动感。
output_format: "markdown"
```
## 组合为流程
你可以把多个技能串成流程,例如:
1. 选题拆解
2. 初稿生成
3. 风格统一
4. 发布前检查
## 团队使用建议
1. 共享高频技能模板
2. 每个技能指定维护人
3. 定期清理低使用技能,保持列表可维护
-60
View File
@@ -1,60 +0,0 @@
---
title: 设置
description: 管理应用偏好、导航模块和进阶系统选项
navigation:
icon: i-heroicons-cog-6-tooth
---
# 设置
设置页用于管理你的创作体验与系统行为。
## 通用
常见选项:
- 主题模式(浅色 / 深色 / 跟随系统)
- 语言选择
- 启动行为(开机自启动、最小化到托盘)
- 声音反馈开关
## 创作与导航偏好
你可以按使用习惯定制入口:
- 启用或停用工作区主题(如社媒、短视频、小说)
- 启用或停用导航模块(如 AI Agent、项目、资源、设置、插件)
这样可以让侧边栏更聚焦,减少干扰。
## 连接与系统
系统相关设置在这里管理:
- 连接与网络代理
- 安全与证书
- 存储目录与配额
- 外部工具联动
- 实验室与开发者选项
## 关于与版本
在“关于”标签页可以查看:
- 当前版本号
- 更新检查入口
- 相关项目信息
## 建议配置
### 个人创作者
- 保留:AI Agent、项目、资源
- 关闭:暂时不用的高级模块
- 目的:让工作台聚焦在“日常产出”
### 团队协作
- 统一主题配置
- 固定项目命名规则
- 约定资源标签方式
+41 -72
View File
@@ -1,6 +1,6 @@
---
title: 插件中心
description: 安装和管理扩展插件,按需扩展创作能力
description: 通过本地包或 URL 安装、启停与卸载插件
navigation:
icon: i-heroicons-puzzle-piece
---
@@ -8,97 +8,66 @@ navigation:
# 插件中心
::alert{type="info"}
📢 插件属于进阶能力。若你只做日常创作,可先跳过本页。
插件属于进阶能力。当前页面只覆盖已经落地的安装与管理链路,不再承诺“推荐插件市场”或“一键精选区”。
::
插件中心用于扩展 Lime 的能力,例如新增工具、接入外部流程、扩展特定场景工作流。
插件中心用于安装和管理扩展插件。当前可确认的主路径只有两条:从本地插件包安装,或从 URL 安装。
## 访问插件中心
## 当前可做的事
点击左侧导航栏的「插件中心」进入插件管理页面。
## 你能做什么
- 浏览推荐插件并一键安装
- 通过本地文件或 URL 安装插件包
- 管理启用状态与卸载
- 查看插件加载与执行状态
- 从本地文件安装插件包
- 从 URL 安装插件包
- 查看 `已安装插件包` 与 `已加载插件`
- 启用、禁用、卸载、重新加载插件
- 查看基础状态、最近错误与任务执行情况
## 安装插件
### 方式一:推荐插件一键安装
### 从本地文件安装
1. 在「推荐插件」区域找到想要的插件
2. 点击「一键安装」
3. 等待下载和安装完成
1. 打开 `插件中心`
2. 点击 `安装插件`
3. 选择本地插件包
4. 等待校验、解压和安装完成
### 方式二:从 URL 安装
当前文件安装支持:
1. 点击「安装插件」按钮
2. 输入插件 ZIP 包的下载 URL
3. 点击「安装」
- `.zip`
- `.tar.gz`
- `.tgz`
支持的 URL 格式:
- GitHub Release: `https://github.com/org/repo/releases/latest/download/plugin.zip`
- 直接下载链接: `https://example.com/plugin.zip`
### 从 URL 安装
### 方式三:从本地文件安装
1. 打开 `插件中心`
2. 点击 `安装插件`
3. 切换到 `URL` 页签
4. 输入插件包直链并开始安装
1. 点击「安装插件」按钮
2. 点击「选择文件」
3. 选择本地的 `.zip` 文件
4. 点击「安装」
当前 URL 安装接受 `http://` 或 `https://` 链接;如果用于团队分发,建议优先使用 `https://` 直链。
## 使用建议
## 安装时会校验什么
### 从小处开始
插件安装器会先做基础校验,再继续安装:
先安装 1 到 2 个高频插件,观察是否真正提升你的创作效率,再决定是否扩展更多插件。
- 压缩包格式是否有效
- 包内是否包含可解析的 `plugin.json`
- `name`、`version`、`entry` 等清单字段是否满足当前规则
- 如果声明了 `hooks`,其命名是否满足当前格式限制
### 明确用途
通过校验后,插件会进入 `已安装插件包` 列表;是否真正加载成功,还要以 `已加载插件` 区域的状态为准。
每个插件都应对应明确目的,例如:
## 日常管理
- 扩展素材处理
- 增加内容生成模板
- 对接外部工作流
你可以在插件中心完成这些操作:
## 管理插件
- 启用或禁用已安装插件
- 卸载不再需要的插件包
- 手动重新加载插件
- 查看插件状态、最近错误和基础执行信息
### 启用/禁用
如果某个插件声明了最低 Lime 版本要求,插件中心会给出版本提示;发布方是否兼容当前版本,仍应以实际安装和加载结果为准。
在已加载插件列表中,点击电源图标可以启用或禁用插件。
## 继续阅读
### 卸载
1. 在「已安装插件包」列表中找到要卸载的插件
2. 点击红色的删除按钮
3. 确认卸载
卸载会删除插件文件和配置,但不会删除插件产生的数据。
## 进阶阅读
- [开放平台 - 总览](/open-platform/overview)
- [开放平台 - 插件中心](/open-platform/plugins)
- [开放平台 - 插件开发](/open-platform/plugin-development)
## 常见问题
### 插件安装失败
1. 检查网络连接
2. 确认 URL 正确且可访问
3. 检查 ZIP 包格式是否正确
### 插件无法加载
1. 检查 Lime 版本是否满足插件要求
2. 查看日志了解详细错误信息
3. 尝试重新安装插件
### 二进制插件权限问题
部分二进制插件需要管理员权限:
- **Windows**: 以管理员身份运行 Lime
- **macOS/Linux**: 插件会提示需要的权限
- [插件打包指南](/open-platform/plugin-development)
- [扩展接入概览](/open-platform/overview)
@@ -1,71 +0,0 @@
---
title: 资源库
description: 管理项目中的文档、图片、语音和视频素材
navigation:
icon: i-heroicons-folder-open
---
# 资源库
资源库是 Lime 的创作资产中心。
它和项目绑定,用来长期沉淀你的创作结果。
## 资源分类
资源页支持按分类查看:
- 全部
- 文档
- 图片
- 语音
- 视频
当你只想找图或找文档时,直接切换分类即可。
## 常见操作
### 新建与上传
1. 选择左侧资源库(项目)
2. 新建文件夹或新建文档
3. 上传本地文件到当前目录
### 搜索与排序
- 支持按名称、描述、标签搜索
- 支持按更新时间、创建时间、名称排序
### 重命名与删除
在资源列表的操作菜单中,可对资源进行重命名、删除等操作。
## 资源与创作联动
### 从 Claw 与图片任务回流资源库
在 Claw 中发起图片生成任务,或从图片任务结果执行入库后,成功生成的图片会自动写入当前项目。
资料库的图片视图还统一承接:
- 本地图片上传
- 我的图片库浏览
- 选图后插入当前画布
### 从资源继续对话创作
在资源页选中素材后,可继续进入 AI Agent 进行改写、扩写或二次创作。
## 常见问题
### 为什么看不到某些图片?
先确认:
1. 当前选择的是否是正确资源库(项目)
2. 是否切到了“图片”分类
3. 文件后缀或 MIME 类型是否被识别为图片
### 为什么资源数量和预期不一致?
常见原因是“分类过滤”或“项目切换”导致显示范围变化。
建议先切换到“全部”分类再确认总量。
@@ -1,81 +0,0 @@
---
title: 图片生成与素材链路
description: 通过 Claw 与资源库完成搜图、图片生成、编辑与资产沉淀
navigation:
icon: i-heroicons-photo
---
# 图片生成与素材链路
Lime 不再把图片能力拆成独立页面。
现在的事实源是:
- Claw:负责联网搜图、图片生成、参考图编辑和任务推进
- 资源库:负责本地图片上传、我的图片库浏览、结果沉淀和插图复用
- 设置:负责图片模型、Provider 与联网搜图 Key 配置
## 基本流程
1. 在 AI Agent 中明确视觉目标
2. 需要找参考图时,用 Claw `@素材` 进行联网搜图
3. 需要生成或编辑图片时,在 Claw 发起对应图片任务
4. 结果自动或手动沉淀到资源库
5. 在资源库图片视图继续筛选、上传、插图或复用
## 联网搜图与生成
### 联网搜图
当你需要灵感图、风格参考或可复用素材时:
- 在 Claw 中使用 `@素材`
- 联网图片搜索结果会以任务结果或素材候选的形式返回
- 选中的图片可以继续进入正文插图、封面或图片任务链路
### 图片生成与编辑
当你已经明确提示词或参考图后:
- 在 Claw 发起图片生成任务
- 如模型支持参考图编辑,系统会优先走编辑链路
- 若某条接口不可用,运行时会回退到可用生成链路,尽量保障出图成功率
## 本地图片与我的图片库
本地图片与历史沉淀图片已经统一收口到资源库图片视图,你可以在这里:
- 上传本地图片
- 浏览“我的图片库”
- 选图后直接插入当前画布
- 在当前项目下统一管理图片资产
## 与资源库联动
### 结果回流
图片任务会根据当前项目和资源库选择自动回流;如果需要,也可以在结果完成后再手动入库。
### 插图复用
进入资源库的图片可以直接被当前画布复用,不需要再回到旧图片页面挑选。
## 配置入口
相关配置分布在两个位置:
- 图片模型与默认策略:设置中的媒体服务配置
- 联网图片搜索 Key:设置中的网络搜索配置
## 实用建议
### 先定方向再出图
先在 AI Agent 里明确画面目标,再决定是 `@素材` 搜图还是直接发起图片任务,会减少无效尝试。
### 一次只改一个变量
每轮仅调整一个维度(提示词、比例、参考图),更容易稳定收敛到理想结果。
### 把可用版本及时入库
选中可用图片后尽快入库,方便后续在资源页检索、插图和复用。
@@ -25,8 +25,8 @@ cloudflared --version
2. 已准备 Cloudflare 账号和域名(若使用固定域名)
3. 飞书应用已创建,拿到 `App ID` 与 `App Secret`
> 桌面端已支持在「渠道管理 > Gateway 公共隧道」中直接点击:
> `检测 cloudflared`、`一键安装 cloudflared`(支持 macOS / Windows / Ubuntu 等常见 Linux 发行版)。
> 当前界面已支持在「渠道管理 > Gateway 公共隧道」中直接点击:
> `检测 cloudflared`、`一键安装 cloudflared`。安装动作会按当前系统检测到的包管理器环境执行,例如 `brew`、`winget`、`apt-get`、`dnf`、`yum`、`scoop` 或 `choco`。
## 步骤 1:配置 Gateway 公共隧道
@@ -65,6 +65,11 @@ Cloudflare 相关字段(二选一):
- 将飞书渠道切换为 `webhook` 模式
- 回填飞书 `webhook_host/webhook_port/webhook_path`
注意:
- 当前同步动作只支持 `feishu`
- 同步前需要已经拿到 `public_base_url`,或已填写可推导公网地址的 `DNS Name`
## 步骤 3:启动隧道并验证状态
在 Gateway 公共隧道卡片依次点击:
@@ -150,9 +155,9 @@ Cloudflare 相关字段(二选一):
桌面端建议按环境选择:
1. `managed`(应用内托管,默认)
由 Lime 在启动后自动拉起 tunnel,并定时检查进程状态;异常退出会自动重拉。
Lime 启动后会启动守护逻辑,约每 `10` 秒检查一次 tunnel 状态;若隧道异常退出且不是手动停止,守护器会尝试重新拉起。
2. `external`(系统级常驻,生产更稳)
由系统服务管理 `cloudflared`,Lime 仅做状态诊断与 webhook 同步。
由系统服务管理 `cloudflared`,Lime 只做状态诊断与 webhook 同步,不负责应用内启动。
### 何时用 external
@@ -160,6 +165,10 @@ Cloudflare 相关字段(二选一):
- 本机网络波动较大,应用重启不希望影响 tunnel
- 需要把 tunnel 运维与桌面应用生命周期解耦
补充说明:
- 如果你在 `managed` 模式下手动点过 `停止`,守护器不会立刻自动再拉起,需手动重新 `启动` 或 `重启`
### 常见连通性检查
```bash
+58 -121
View File
@@ -1,164 +1,101 @@
---
title: 运行时 AGENTS 规则
description: 使用 `~/.lime/AGENTS.md` 与 Workspace `.lime/AGENTS.md` 为 Lime 运行时会话提供稳定指令
description: 用 `.lime/AGENTS.md` 体系为 Lime 运行时会话提供指令
navigation:
icon: i-heroicons-document-text
---
# 运行时 AGENTS 规则
Lime 应用运行时会话现在默认读取 `.lime/AGENTS.md` 体系,而不是仓库根的 `AGENTS.md`。
Lime 应用运行时会话不读取仓库根 `AGENTS.md`,而是使用 `.lime/AGENTS.md` 体系。
你也可以在「设置 → 记忆」里点击按钮,显式生成全局、Workspace 或本机私有模板文件。
如果是本机私有模板,还可以继续点击按钮,把 `.lime/AGENTS.local.md` 一键加入 Workspace 的 `.gitignore`。
首次创建新项目后,Lime 也会弹出一个非强制提示,允许你直接一键初始化这两个 Workspace 模板。
## 当前事实源
这让“开发 Lime 源码仓库本身的规则”和“Lime 应用实际运行时的规则”彻底分开:
运行时 AGENTS 相关能力当前分成两层:
- 仓库根 `AGENTS.md`:给外部 AI 编辑器或源码协作使用
- `~/.lime/AGENTS.md`:你的全局运行时偏好
- `<workspace>/.lime/AGENTS.md`:当前项目 / 工作区的运行时规则
1. 运行时 AGENTS 主层
## 加载顺序
- 全局:`~/.lime/AGENTS.md`
- 工作区:`<workspace>/.lime/AGENTS.md`
Lime 运行时会话默认按下面顺序加载:
这两层会直接进入 Lime 运行时 AGENTS 提示拼接。
1. 全局:`~/.lime/AGENTS.md`
2. 工作区:`<workspace>/.lime/AGENTS.md`
如果你保留默认记忆来源设置,Lime 还会继续把下面这个文件作为**本机私有补充**读取:
2. 本机私有补充层
- `<workspace>/.lime/AGENTS.local.md`
推荐做法:
这层默认通过记忆来源配置进入当前 workspace 的有效记忆,不会向父目录递归查找。
- 把长期个人偏好写进 `~/.lime/AGENTS.md`
- 把项目约束写进 `<workspace>/.lime/AGENTS.md`
- 把不想提交到仓库的本机补充写进 `<workspace>/.lime/AGENTS.local.md`
## 当前加载口径
## 什么时候用哪个文件
默认情况下,可以按下面这条顺序理解:
### `~/.lime/AGENTS.md`
1. 先读全局:`~/.lime/AGENTS.md`
2. 再读工作区:`<workspace>/.lime/AGENTS.md`
3. 如果保留默认记忆来源配置,再把 `<workspace>/.lime/AGENTS.local.md` 作为本机私有补充带入
适合放所有项目都通用的偏好,例如:
推荐分工:
- 统一回复语言
- 默认输出结构
- 常用代码风格
- 你长期偏好的解释方式
- `~/.lime/AGENTS.md`
- 放长期个人偏好
- `<workspace>/.lime/AGENTS.md`
- 放团队共享的项目规则
- `<workspace>/.lime/AGENTS.local.md`
- 放不想提交到仓库的本机补充
直接复制下面模板即可:
## 在哪里生成模板
```md
# 我的全局 Lime 运行时规则
当前在 `设置 → 记忆` 页面可以显式生成这些模板:
## 回复习惯
- 全局模板
- Workspace 模板
- Workspace 本机模板
- 默认使用中文简体
- 先给结论,再给关键步骤
- 没必要时保持简洁,不要过度展开
如果是本机模板,还可以继续一键把 `.lime/AGENTS.local.md` 写入当前 Workspace 的 `.gitignore`。
## 工程偏好
## 新项目提示
- 优先选择 KISS 方案
- 优先修根因,不做表面补丁
- 先说明影响范围,再做改动
首次创建新项目后,Lime 会弹出一个非强制提示,允许你一键初始化:
## 代码风格
- `.lime/AGENTS.md`
- `.lime/AGENTS.local.md`
- 尽量沿用现有项目风格
- 避免无关重构
- 没有明确收益时,不新增抽象层
```
## Workspace `.lime/AGENTS.md`
适合放当前项目独有的规则,例如:
- 仓库使用的语言
- 文档与注释风格
- 目录边界
- 测试、构建、提交前检查要求
把下面内容保存为工作区内的 `.lime/AGENTS.md`:
```md
# 当前项目运行时规则
## 项目背景
- 这是一个 React + Rust + Tauri 项目
- 前端使用 TypeScript
- 回答和文档默认使用中文简体
## 修改原则
- 先读后写
- 只改当前任务直接相关内容
- 保持现有目录结构和命名习惯
## 验证要求
- 前端改动后优先跑相关前端测试
- Rust 改动后优先跑相关单测
- 若无法完整验证,需要明确说明未验证部分
## 禁止事项
- 不要把临时排障脚本提交进仓库
- 不要修改与当前任务无关的配置
- 不要默认进行 git commit 或 push
```
## `.lime/AGENTS.local.md` 示例
如果你想保留**只在自己机器生效**的补充规则,可以新建 `.lime/AGENTS.local.md`,并把它加入 `.gitignore`。
例如:
```md
# 本机私有补充
- 优先使用本机已安装的 Node 与 Rust 工具链
- 如需浏览器调试,优先使用本机开发配置
- 涉及大体量编译时,先做定向测试再跑全量
```
## 推荐目录结构
```text
workspace-root/
├─ .lime/
│ ├─ AGENTS.md
│ └─ AGENTS.local.md
├─ src/
├─ src-tauri/
└─ ...
```
你的全局文件位于:
```text
~/.lime/AGENTS.md
```
同时自动补 `.gitignore` 的本机模板忽略规则。
## 注意事项
- Lime 运行时不会读取仓库根 `AGENTS.md`
- Workspace `.lime/AGENTS.md` 只读取当前 workspace,不会向父目录递归回溯
- `.lime/AGENTS.md` 与 `.lime/AGENTS.local.md` 都只看当前 workspace 根目录
- 如果团队要共享规则,请提交 `.lime/AGENTS.md`
- 如果规则只属于你自己,请放进 `.lime/AGENTS.local.md`
## 推荐起步模板
## 最小示例
如果你想先快速用起来,最小可用版本可以直接写:
`~/.lime/AGENTS.md`
```md
# Lime 运行时规则
# 我的全局 Lime 运行时规则
- 默认使用中文简体
- 先给结论,再展开说明
- 保持简洁,优先可执行建议
- 修改代码时先读后写
- 只改当前任务相关内容
- 先给结论,再给关键步骤
- 没必要时保持简洁
```
`<workspace>/.lime/AGENTS.md`
```md
# 当前项目运行时规则
- 先读后写
- 只改当前任务直接相关内容
- 若无法完整验证,需要明确说明
```
`<workspace>/.lime/AGENTS.local.md`
```md
# 本机私有补充
- 优先使用本机已安装工具链
- 涉及大体量编译时先跑定向测试
```
@@ -1,61 +0,0 @@
---
title: 创作数据与监控
description: 查看创作产出趋势、调用状态与问题定位信息
navigation:
icon: i-heroicons-eye
---
# 创作数据与监控
监控页帮助你回答三个问题:
1. 最近创作是否稳定
2. 哪些任务成功率更高
3. 出现异常时该从哪里排查
## 你能看到什么
### 概览指标
常见指标包括:
- 请求总量与成功率
- 平均响应耗时
- 活跃连接数量
- 近期错误趋势
### 趋势视图
你可以按时间查看:
- 调用量变化
- 成功率变化
- 延迟波动
这能帮助你判断问题是偶发,还是持续性异常。
## 日志排查
当某次生成失败时,优先看请求日志:
1. 找到失败时间点
2. 查看模型与请求参数
3. 对照错误信息定位问题(超时、认证、限流等)
## 对创作者最有用的用法
### 判断工作流是否健康
如果成功率持续下降,建议先减少并发任务,确认连接状态后再恢复批量生成。
### 对比不同创作任务
同样是生成任务,不同主题的耗时差异可能很大。通过趋势图可以更快选择稳定方案。
### 复盘高峰时段
高峰期(例如集中出图)出现波动时,可根据日志回看是否需要拆分任务批次。
## 数据导出
如果你需要做团队复盘,可导出统计数据用于周报或复盘记录。
@@ -1,55 +0,0 @@
---
title: 模型连接与账号
description: 管理模型连接方式与多账号状态(进阶)
navigation:
icon: i-heroicons-key
---
# 模型连接与账号
::alert{type="info"}
这是进阶页。普通创作者可直接使用默认连接能力,按需再回来配置。
::
该页面用于管理模型连接与账号状态,适合以下场景:
- 你有多个账号需要统一管理
- 你需要手动添加 API Key
- 你希望在连接异常时快速排查
## 常见连接方式
### 自动检测
应用会尝试检测本地常见凭证文件,检测成功后可直接使用。
### 手动添加
如果自动检测失败,可手动添加:
1. 选择连接类型
2. 填写必要凭证信息
3. 保存后执行连接测试
## 账号状态说明
- 可用:可正常调用
- 即将过期:建议尽快刷新
- 已失效:需重新登录或更新凭证
- 未验证:建议先执行测试
## 多账号使用建议
### 日常创作
保留 1 到 2 个稳定账号即可,优先保证可用性。
### 高强度创作
如果你需要长时间连续生成,可配置多个账号做冗余,降低单点失败影响。
## 安全建议
1. 不在聊天记录或公开文档里粘贴密钥
2. 定期清理失效连接
3. 导出配置时确认敏感信息不会被带出
@@ -1,110 +0,0 @@
---
title: 进阶配置示例
description: 按创作场景选择配置思路(示例)
navigation:
icon: i-heroicons-document-text
---
# 进阶配置示例
::alert{type="info"}
本页示例用于说明配置思路,不要求你逐字段照抄。具体字段以应用设置界面为准。
::
## 示例 1:个人创作者(推荐起步)
目标:少配置、快开始。
```yaml
profile: "solo-content"
navigation:
enabled:
- agent
- projects
- resources
- image-gen
themes:
enabled:
- general
```
适用:统一通用工作台入口,按项目内容继续细分任务。
## 示例 2:团队协作
目标:统一入口和主题,降低沟通成本。
```yaml
profile: "team-content"
navigation:
enabled:
- agent
- projects
- resources
- tools
themes:
enabled:
- general
resource:
naming: "project-date-version"
```
适用:品牌运营、活动策划、小团队协作的统一工作台配置。
## 示例 3:API 缓存策略(高级)
目标:精确控制哪些响应状态码参与短时缓存(非流式)。
```yaml
server:
host: "127.0.0.1"
port: 8999
api_key: "your-api-key"
response_cache:
enabled: true
ttl_secs: 600
max_entries: 200
max_body_bytes: 1048576
cacheable_status_codes: [200] # 默认仅缓存 200;可按需扩展 [200, 201]
```
适用:对缓存命中与语义一致性有要求的自动化/API 调用场景。
## 示例 4:运行时诊断接口(高级)
目标:像 ClawRouter 一样快速查看网关健康、缓存与统计信息。
```bash
# 基础健康检查(兼容旧行为)
curl "http://127.0.0.1:8999/health"
# 扩展健康检查(包含完整诊断)
curl "http://127.0.0.1:8999/health?full=true"
# 响应缓存配置与命中统计
curl "http://127.0.0.1:8999/cache"
# 统计诊断(默认最近 7 天,可传 days=1~30)
curl "http://127.0.0.1:8999/stats?days=7"
# 查看请求级调试头(缓存/去重/幂等等状态)
curl -i "http://127.0.0.1:8999/v1/chat/completions" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"ping"}]}'
```
适用:排查“为什么慢/为什么回退/是否命中缓存”等线上联调问题。
可观测调试头示例:
- `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`
## 调整顺序建议
1. 先确认导航与主题
2. 再确认连接与稳定性
3. 最后再做自动化与诊断扩展
@@ -1,66 +0,0 @@
---
title: 模型分发规则
description: 按任务类型将请求分发到不同模型(进阶)
navigation:
icon: i-heroicons-arrows-right-left
---
# 模型分发规则
::alert{type="info"}
这是进阶能力。只有在“多模型并行使用”时才需要配置。
::
分发规则用于把不同任务自动交给更合适的模型。
## 什么时候需要它
- 文本创作和图片任务使用不同模型
- 同一主题需要“快速草稿 + 高质量润色”两种路径
- 你希望把高成本任务限制在特定模型上
## 常见策略
### 按任务类型分发
- 长文写作走高质量模型
- 快速问答走低延迟模型
- 图片任务走图片专用模型
### 按阶段分发
- 初稿阶段:速度优先
- 定稿阶段:质量优先
### 按兜底分发
主模型异常时,自动回退到备用模型。
## 示例(示意)
```yaml
routes:
- pattern: "video-script-*"
provider: "primary"
model: "high-quality-model"
priority: 10
- pattern: "quick-*"
provider: "fast-lane"
model: "fast-model"
priority: 20
- pattern: "*"
provider: "fallback"
priority: 100
```
## 配置建议
1. 先只配 2 到 3 条关键规则
2. 给兜底规则留最后优先级
3. 每次改完都做一次路由测试
## 常见误区
- 规则过多导致难以维护
- 没有兜底规则,异常时直接失败
- 频繁改规则但不做回归测试
@@ -1,68 +0,0 @@
---
title: 稳定性与容错
description: 在高强度创作下保持调用稳定(进阶)
navigation:
icon: i-heroicons-shield-check
---
# 稳定性与容错
::alert{type="info"}
这是进阶能力。只有在你频繁遇到超时、失败、波动时才需要细调。
::
稳定性配置的核心目标是:
- 少失败
- 失败后可恢复
- 出错时可定位
## 三个关键参数
### 重试
用于处理偶发失败。
建议:
- 最大重试次数:2 到 3 次
- 首次重试延迟:1 秒左右
- 使用递增退避,避免短时间反复打满请求
### 超时
用于避免单次请求长时间卡住。
建议:
- 普通文本任务:较短超时
- 长文或复杂任务:适当放宽
- 图片任务:通常需要更长超时
### 故障回退
主连接失败后自动走备用连接,减少中断。
## 推荐调参顺序
1. 先调超时
2. 再调重试
3. 最后配置回退策略
## 诊断建议
### 连续失败
优先检查:
1. 连接状态是否可用
2. 当前模型是否可调用
3. 是否触发限流
### 偶发失败
通常先提高重试效果更明显。
### 高峰波动
建议拆分任务批次,避免同一时刻大量并发。
@@ -1,63 +0,0 @@
---
title: 配置管理与迁移
description: 导出、导入、备份与跨设备迁移配置
navigation:
icon: i-heroicons-document-duplicate
---
# 配置管理与迁移
配置管理适合两类人:
- 想把当前工作台快速迁移到另一台设备
- 团队内需要统一一套基础配置
## 导出配置
你可以将当前设置导出为配置文件,常用于备份和迁移。
常见导出内容:
- 主题与导航偏好
- 部分连接与路由策略
- 稳定性相关参数
::alert{type="warning"}
导出文件通常不包含敏感凭证信息。导入后需重新检查连接状态。
::
## 导入配置
1. 在设置页选择导入
2. 预览配置差异
3. 选择覆盖或合并策略
4. 导入后做一次连接与功能自检
## 备份建议
### 个人用户
至少保留最近 2 到 3 份配置备份。
### 团队用户
建议按版本管理配置文件,例如:
- `team-config-v1.yaml`
- `team-config-v1.1.yaml`
## 跨设备迁移清单
1. 导出配置文件
2. 在新设备导入配置
3. 重新校验连接状态
4. 检查主题、导航、资源路径是否符合预期
5. 进行一次完整创作演练
## 什么时候需要重置
当你长期调参后“越调越乱”,最稳妥的方式是:
1. 先备份当前配置
2. 恢复到基础配置
3. 只按必要场景逐项开启进阶能力
@@ -1,50 +0,0 @@
---
title: 工作模式切换
description: 在不同创作场景间快速切换配置
navigation:
icon: i-heroicons-arrows-up-down
---
# 工作模式切换
如果你在不同场景下有明显不同的工作方式,可以使用配置档案快速切换。
## 典型模式
### 日更模式
- 目标:快速产出
- 适合:社媒短内容、灵感快写
- 特点:速度优先、流程简化
### 深度创作模式
- 目标:质量优先
- 适合:长文、小说章节、方案定稿
- 特点:更强调结构和多轮迭代
### 出图冲刺模式
- 目标:集中生成并沉淀图片素材
- 适合:活动海报、视觉素材周更
- 特点:图片相关入口前置、资源回流优先
## 建议的档案字段
每个档案建议包含:
- 启用的导航模块
- 启用的工作区主题
- 关键连接与稳定性偏好
## 切换步骤
1. 选择目标档案
2. 应用后检查核心入口是否符合预期
3. 用一个小任务做快速验证
## 使用建议
1. 档案数量控制在 3 个以内
2. 一个档案只服务一个明确场景
3. 变更档案后记录用途,避免后续混乱
+57 -28
View File
@@ -1,53 +1,82 @@
---
title: MCP 工具扩展
description: 让 AI 调用外部工具与资源(进阶)
description: 管理 MCP 服务器配置,并浏览可用 Tools、Prompts 与 Resources
navigation:
icon: i-heroicons-puzzle-piece
---
# MCP 工具扩展
MCP 可以让 AI 不只“回答问题”,还可以调用外部工具完成动作。
::alert{type="info"}
这是进阶能力。建议先熟悉基础创作流程,再接入 MCP。
MCP 属于进阶能力,当前仍应按实验功能理解。它不会替代 Lime 的主创作路径,更适合已经明确需要外部工具或资源接入的场景。
::
## 适合的场景
当前 Lime 已提供 MCP 服务器管理与运行时浏览面板。你可以集中维护服务器配置,把它同步到常用外部工具,并在 Lime 内验证可用的 Tools、Prompts 和 Resources。
- 让 AI 读取指定目录素材
- 连接外部知识源或服务
- 把重复操作做成可调用工具
## 当前可做的事
## 基本使用流程
- 新增、编辑、删除 MCP 服务器配置
- 使用预设快速创建常见服务器
- 从 Claude、Codex、Gemini CLI 导入已有 MCP 配置
- 将当前配置同步回外部应用
- 查看服务器运行状态并手动启动、停止
- 浏览运行中服务器暴露的 Tools、Prompts、Resources
1. 添加 MCP 服务器配置
2. 启动并确认连接状态
3. 在工具列表里验证可用工具
4. 在实际任务里小范围试跑
## 一个简单示例
## 一个最小配置示例
```json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/workspace"]
}
}
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/workspace"],
"env": {}
}
```
如果你只是想先验证链路,`filesystem` 是最容易起步的示例。
## 推荐使用流程
1. 先选择一种来源
- 直接新建服务器配置
- 从 Claude、Codex、Gemini CLI 导入已有配置
2. 再决定同步范围
- 只在 Lime 内启用
- 或同步到 Claude、Codex、Gemini CLI 一起使用
3. 保存后验证运行状态
- 确认服务器能正常启动
- 确认 Lime 能读取到对应能力列表
4. 最后做小范围试跑
- 先试一个简单 Tool
- 再验证 Prompt 或 Resource 是否符合预期
## 当前常见入口
当前面板已经内置一些常见预设,适合快速起步:
- `Filesystem`
- `GitHub`
- `PostgreSQL`
- `自定义`
如果团队已有现成配置,优先导入;如果只是单机试验,优先从最小自定义或 `Filesystem` 开始。
## 安全边界建议
1. 只授权必要目录和资源
2. 敏感环境变量不要硬编码在公开配置里
3. 新工具先在测试项目验证
1. 只给服务器开放必要目录、数据库或环境变量
2. 新接入的 MCP 先在测试目录验证,不要直接连生产数据
3. 对外同步前,先确认对应应用确实需要这台服务器
4. 涉及密钥时,避免把敏感值直接写进会提交的公共配置
## 排错顺序
1. 看连接状态是否正常
2. 看工具是否成功注册
3. 看调用参数是否符合工具定义
4. 看服务器日志定位具体错误
1. 先看服务器配置 JSON 是否有效
2. 再看服务器是否能成功启动
3. 再看 Tools、Prompts、Resources 是否已被正确发现
4. 最后再检查具体调用参数、环境变量和外部依赖
+22 -51
View File
@@ -1,6 +1,6 @@
---
title: 模型连接概览
description: 了解不同连接方式,并按你的创作目标选择
description: 连接文档重建中,当前只保留应用内 Provider 与凭证入口说明
navigation:
icon: i-heroicons-squares-2x2
---
@@ -8,62 +8,33 @@ navigation:
# 模型连接概览
::alert{type="info"}
本章节属于进阶内容。普通创作者可先使用默认连接,只有在需要多账号或精细控制时再深入配置。
Provider 文档正在按 LimeNext V2 current 连接入口重建。
::
Lime 支持多种模型连接方式,你可以按自己的使用习惯选择。
旧版按单个 Provider 拆分、并以 `credential_pool:` / `routing:` YAML 为主的配置页已下线,避免继续传播已经偏离 current UI 的旧配置方式。
## 两类连接方式
## 当前事实源
### 自动连接(推荐)
当前模型连接能力以应用内 `Provider 与凭证` 入口为准,主要收敛到以下几类:
适合希望“少配置、快开始”的用户:
- `服务商`
默认主入口。
先补可用 API Key,再读取真实模型目录、做连接验证,并校准默认模型与兼容协议
- `中转服务`
对应 Lime Connect。
浏览已验证中转商,获取 API Key 后通过 `lime://connect` 深链一键带入凭证池
- `语音服务`
单独管理语音相关 Provider
- `OAuth 凭证`
管理 Kiro、Gemini、Antigravity、Codex、Claude OAuth 等登录型凭证
- 登录对应客户端后自动识别
- 日常创作可直接使用
## 当前建议
### 手动连接
1. 默认先从 `服务商` 分类补可用 API Key
2. 只有需要登录型凭证时,再进入 `OAuth 凭证`
3. 需要浏览中转商时,再进入 `中转服务`
4. 不再以旧 YAML 配置文档作为日常配置入口
适合有明确工程需求的用户:
## 后续说明
- 手动填写 API Key
- 自定义 Base URL
- 多账号并行管理
## 如何选择
### 追求稳定创作
优先选择你最常用、最稳定的连接方式,保持单一主连接即可。
### 追求多模型组合
可按任务分配不同连接,例如:
- 长文与定稿使用质量优先模型
- 快速草稿与批量任务使用速度优先模型
- 图片任务使用视觉能力更强的模型
### 追求高可用
可配置多个连接作为冗余,避免单点失败影响创作。
## 配置建议
1. 先完成一个主连接并测试可用
2. 再按场景增加备用连接
3. 每次新增连接后做一次小任务验证
## 下一步
按你的连接类型进入对应页面:
- [Kiro Claude](/providers/kiro-claude)
- [Gemini CLI](/providers/gemini-cli)
- [Qwen](/providers/qwen)
- [Codex](/providers/codex)
- [iFlow](/providers/iflow)
- [OpenAI Custom](/providers/openai-custom)
- [Claude Custom](/providers/claude-custom)
- [Gemini API Key](/providers/gemini-api-key)
- [Vertex AI](/providers/vertex-ai)
后续如果恢复单个 Provider 的对外文档,应直接按 current 表单、模型发现、连接校验与导入流程重写,而不是回收旧 `content/providers/*` 页面。
-197
View File
@@ -1,197 +0,0 @@
---
title: Vertex AI
description: Google Cloud Vertex AI Provider 配置
navigation:
icon: i-heroicons-cloud
---
# Vertex AI Provider
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
使用 API Key 访问 Google Cloud Vertex AI 服务,支持模型别名映射。
## 概述
Vertex AI Provider 允许你:
- 使用 API Key 访问 Vertex AI 兼容端点
- 配置模型别名映射
- 多账号负载均衡
- 为每个 Key 单独配置代理
## 支持的模型
- Gemini 2.0 系列
- Gemini 1.5 系列
- 其他 Vertex AI 支持的模型
## 配置
### 基础配置
```yaml
credential_pool:
vertex_api_keys:
- id: "vertex-main"
api_key: "vk-123..."
base_url: "https://example.com/api"
disabled: false
```
### 完整配置
```yaml
credential_pool:
vertex_api_keys:
- id: "vertex-main"
api_key: "vk-123..."
base_url: "https://example.com/api"
proxy_url: "socks5://proxy:1080"
models:
- name: "gemini-2.0-flash"
alias: "vertex-flash"
- name: "gemini-1.5-pro"
alias: "vertex-pro"
disabled: false
```
### 配置项说明
| 配置项 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | string | ✅ | 凭证唯一标识 |
| api_key | string | ✅ | Vertex AI API Key |
| base_url | string | ❌ | Vertex AI 端点 URL |
| proxy_url | string | ❌ | 单独的代理 URL |
| models | array | ❌ | 模型别名映射列表 |
| disabled | boolean | ❌ | 是否禁用此凭证 |
## 模型别名
### 工作原理
模型别名允许你使用自定义名称访问上游模型:
1. 客户端请求别名(如 `vertex-flash`)
2. Lime 将别名解析为上游模型名(如 `gemini-2.0-flash`)
3. 使用上游模型名发送请求
4. 响应中保留客户端请求的别名
### 配置示例
```yaml
models:
- name: "gemini-2.0-flash" # 上游模型名
alias: "vertex-flash" # 客户端使用的别名
- name: "gemini-1.5-pro"
alias: "vertex-pro"
- name: "gemini-2.0-flash-lite"
alias: "vertex-lite"
```
### 使用场景
1. **简化模型名称**:使用简短易记的别名
2. **版本管理**:通过别名切换模型版本
3. **兼容性**:保持客户端代码不变,后端切换模型
## API Key 认证
Vertex AI Provider 使用 `x-goog-api-key` 头进行认证:
```
x-goog-api-key: your-api-key
```
Lime 会自动将配置的 API Key 添加到请求头中。
## 负载均衡
### 配置多个凭证
```yaml
credential_pool:
vertex_api_keys:
- id: "vertex-1"
api_key: "vk-123..."
base_url: "https://endpoint1.example.com/api"
- id: "vertex-2"
api_key: "vk-456..."
base_url: "https://endpoint2.example.com/api"
```
### 工作原理
1. 使用 Round-Robin 在凭证之间分配请求
2. 如果某个凭证失败,自动尝试下一个
3. 配额超限时自动切换到其他凭证
## 使用示例
### 使用上游模型名
```bash
curl http://127.0.0.1:8999/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.0-flash",
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
### 使用模型别名
```bash
curl http://127.0.0.1:8999/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "vertex-flash",
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
### 路由配置
将 Vertex 模型路由到 Vertex AI Provider:
```yaml
routing:
rules:
- pattern: "vertex-*"
provider: "vertex"
priority: 1
```
## 与 Gemini API Key 的区别
| 特性 | Vertex AI | Gemini API Key |
|------|-----------|----------------|
| 认证方式 | x-goog-api-key | API Key |
| 模型别名 | ✅ | ❌ |
| 模型排除 | ❌ | ✅ |
| 自定义 Base URL | ✅ | ✅ |
| 适用场景 | Vertex 兼容端点 | 官方 Gemini API |
## 故障排除
### API Key 无效
1. 确认 Key 格式正确
2. 检查 Key 是否已被撤销
3. 确认 Base URL 正确
### 模型不可用
1. 检查模型名称或别名是否正确
2. 确认端点支持该模型
3. 检查别名映射配置
### 连接失败
1. 检查 Base URL 是否可访问
2. 确认代理配置正确
3. 检查网络连接
-120
View File
@@ -1,120 +0,0 @@
---
title: Kiro Claude
description: 配置 Kiro IDE 的 Claude 凭证
navigation:
icon: i-heroicons-cpu-chip
---
# Kiro Claude
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
Kiro Claude 是 AWS Kiro IDE 提供的 Claude AI 服务凭证。
## 凭证位置
### 默认路径
Kiro 凭证文件位于:
| 平台 | 路径 |
|------|------|
| macOS | `~/.kiro/credentials.json` |
| Windows | `%USERPROFILE%\.kiro\credentials.json` |
### 凭证格式
```json
{
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"expiresAt": "2024-01-01T00:00:00Z"
}
```
## 自动刷新机制
### Token 生命周期
- Access Token 有效期:约 1 小时
- Refresh Token 有效期:约 30 天
### 自动刷新
Lime 会自动处理 Token 刷新:
1. 检测 Access Token 即将过期
2. 使用 Refresh Token 获取新 Token
3. 更新本地凭证文件
4. 继续处理请求
### 刷新失败处理
如果刷新失败:
1. 标记凭证为"已过期"
2. 尝试使用其他可用凭证
3. 通知用户重新登录 Kiro
## 配置步骤
### 自动检测
1. 确保已安装 Kiro IDE
2. 在 Kiro 中完成登录
3. 启动 Lime
4. 凭证自动出现在凭证池中
### 手动添加
如果自动检测失败:
1. 进入 **凭证池** 页面
2. 点击 **添加凭证**
3. 选择 **Kiro Claude**
4. 选择凭证文件或手动输入
## 支持的模型
| 模型 | 说明 |
|------|------|
| claude-sonnet-4-20250514 | Claude Sonnet 4 |
| claude-3-5-sonnet-20241022 | Claude 3.5 Sonnet |
| claude-3-5-haiku-20241022 | Claude 3.5 Haiku |
## 使用限制
### 额度限制
Kiro 订阅有使用额度限制,具体取决于订阅计划。
### 并发限制
建议单个凭证的并发请求数不超过 5。
## 故障排除
### 凭证未检测到
1. 确认 Kiro 已安装并登录
2. 检查凭证文件是否存在
3. 点击 **刷新凭证** 重新扫描
### Token 过期
1. 打开 Kiro IDE
2. 确认登录状态
3. 如需要,重新登录
4. 在 Lime 中刷新凭证
### 请求失败
常见错误:
| 错误 | 原因 | 解决方案 |
|------|------|----------|
| 401 Unauthorized | Token 无效 | 刷新凭证或重新登录 |
| 429 Too Many Requests | 超出限制 | 等待或使用其他凭证 |
| 503 Service Unavailable | 服务不可用 | 稍后重试 |
-147
View File
@@ -1,147 +0,0 @@
---
title: Gemini CLI
description: 配置 Google Gemini CLI 凭证
navigation:
icon: i-heroicons-sparkles
---
# Gemini CLI
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
Gemini CLI 是 Google 提供的命令行 AI 工具,使用 OAuth 认证。
## 凭证位置
### 默认路径
Gemini CLI 凭证文件位于:
| 平台 | 路径 |
|------|------|
| macOS | `~/.config/gemini-cli/oauth_creds.json` |
| Windows | `%USERPROFILE%\.config\gemini-cli\oauth_creds.json` |
| Linux | `~/.config/gemini-cli/oauth_creds.json` |
### 凭证格式
```json
{
"client_id": "...",
"client_secret": "...",
"refresh_token": "...",
"token_uri": "https://oauth2.googleapis.com/token"
}
```
## 项目设置
### Google Cloud 项目
Gemini CLI 需要关联 Google Cloud 项目:
1. 访问 [Google Cloud Console](https://console.cloud.google.com)
2. 创建或选择项目
3. 启用 Gemini API
4. 配置 OAuth 同意屏幕
### 配置项目 ID
在 Lime 中配置项目:
```yaml
gemini:
project_id: "your-project-id"
location: "us-central1"
```
## 自动刷新机制
### Token 刷新
Lime 自动处理 OAuth Token 刷新:
1. 使用 Refresh Token 获取 Access Token
2. Access Token 过期前自动刷新
3. 无需用户干预
### 刷新失败
如果刷新失败:
1. 检查网络连接
2. 确认 Google 账户状态
3. 重新运行 `gemini auth login`
## 配置步骤
### 安装 Gemini CLI
```bash
# 使用 npm 安装
npm install -g @anthropic-ai/gemini-cli
# 或使用 pip
pip install gemini-cli
```
### 登录认证
```bash
gemini auth login
```
按提示完成 OAuth 认证流程。
### 在 Lime 中配置
1. 完成 Gemini CLI 登录
2. 启动 Lime
3. 凭证自动出现在凭证池中
## 支持的模型
| 模型 | 说明 |
|------|------|
| gemini-2.0-flash | Gemini 2.0 Flash |
| gemini-1.5-pro | Gemini 1.5 Pro |
| gemini-1.5-flash | Gemini 1.5 Flash |
## 使用限制
### 免费额度
Google 提供一定的免费使用额度,超出后需要付费。
### 速率限制
| 限制类型 | 限制值 |
|----------|--------|
| 每分钟请求数 | 60 |
| 每日请求数 | 1500 |
## 故障排除
### 凭证未检测到
1. 确认已运行 `gemini auth login`
2. 检查凭证文件是否存在
3. 确认文件权限正确
### 认证失败
```bash
# 重新登录
gemini auth logout
gemini auth login
```
### 项目配置错误
确认 Google Cloud 项目:
1. 已启用 Gemini API
2. 有足够的配额
3. 账单设置正确
-148
View File
@@ -1,148 +0,0 @@
---
title: Qwen (通义千问)
description: 配置阿里云通义千问凭证
navigation:
icon: i-heroicons-language
---
# Qwen (通义千问)
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
Qwen 是阿里云提供的大语言模型服务。
## 凭证位置
### 默认路径
Qwen 凭证文件位于:
| 平台 | 路径 |
|------|------|
| macOS | `~/.config/qwen/credentials.json` |
| Windows | `%USERPROFILE%\.config\qwen\credentials.json` |
| Linux | `~/.config/qwen/credentials.json` |
### 凭证格式
```json
{
"access_token": "...",
"refresh_token": "...",
"expires_at": "2024-01-01T00:00:00Z"
}
```
## 认证设置
### 获取凭证
1. 访问 [阿里云控制台](https://www.aliyun.com)
2. 开通通义千问服务
3. 获取 API 凭证
### 使用阿里云 CLI
```bash
# 安装阿里云 CLI
pip install aliyun-cli
# 配置凭证
aliyun configure
```
### 手动配置
在 Lime 中手动添加:
1. 进入 **凭证池** 页面
2. 点击 **添加凭证**
3. 选择 **Qwen**
4. 输入凭证信息
## 自动刷新
Lime 支持 Qwen Token 的自动刷新:
1. 检测 Token 即将过期
2. 使用 Refresh Token 获取新 Token
3. 更新凭证文件
## 支持的模型
| 模型 | 说明 |
|------|------|
| qwen-turbo | 通义千问 Turbo |
| qwen-plus | 通义千问 Plus |
| qwen-max | 通义千问 Max |
| qwen-long | 通义千问 Long(长文本) |
## 配置选项
### 区域设置
```yaml
qwen:
region: "cn-hangzhou"
endpoint: "https://dashscope.aliyuncs.com"
```
### 模型映射
将 OpenAI 模型名映射到 Qwen:
```yaml
routes:
- pattern: "gpt-4*"
provider: qwen
model: qwen-max
- pattern: "gpt-3.5*"
provider: qwen
model: qwen-turbo
```
## 使用限制
### 并发限制
| 模型 | 并发数 |
|------|--------|
| qwen-turbo | 10 |
| qwen-plus | 5 |
| qwen-max | 3 |
### Token 限制
| 模型 | 最大 Token |
|------|-----------|
| qwen-turbo | 8K |
| qwen-plus | 32K |
| qwen-max | 32K |
| qwen-long | 1M |
## 故障排除
### 凭证无效
1. 检查阿里云账户状态
2. 确认服务已开通
3. 重新获取凭证
### 请求失败
| 错误码 | 原因 | 解决方案 |
|--------|------|----------|
| InvalidApiKey | API Key 无效 | 检查凭证配置 |
| QuotaExhausted | 配额用尽 | 充值或等待重置 |
| RateLimitExceeded | 超出速率限制 | 降低请求频率 |
### 网络问题
如果在中国大陆以外使用,可能需要配置代理:
```yaml
qwen:
proxy: "http://proxy.example.com:8080"
```
@@ -1,143 +0,0 @@
---
title: OpenAI Custom
description: 配置自定义 OpenAI 兼容服务
navigation:
icon: i-heroicons-cube
---
# OpenAI Custom
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
OpenAI Custom 允许你配置任何 OpenAI 兼容的 API 服务。
## 适用场景
- 使用 OpenAI 官方 API
- 使用 Azure OpenAI
- 使用其他 OpenAI 兼容服务(如 Groq、Together AI)
- 使用本地部署的模型(如 Ollama、vLLM)
## API Key 配置
### 获取 API Key
**OpenAI 官方:**
1. 访问 [OpenAI Platform](https://platform.openai.com)
2. 进入 API Keys 页面
3. 创建新的 API Key
**Azure OpenAI:**
1. 访问 Azure Portal
2. 创建 Azure OpenAI 资源
3. 获取 API Key 和端点
### 在 Lime 中配置
1. 进入 **凭证池** 页面
2. 点击 **添加凭证**
3. 选择 **OpenAI Custom**
4. 填写配置信息:
| 字段 | 说明 |
|------|------|
| 名称 | 凭证标识名称 |
| API Key | OpenAI API Key |
| Base URL | API 端点(可选) |
## Base URL 设置
### 默认端点
不填写 Base URL 时,使用 OpenAI 官方端点:
```
https://api.openai.com/v1
```
### 自定义端点
| 服务 | Base URL |
|------|----------|
| Azure OpenAI | `https://{resource}.openai.azure.com/openai/deployments/{deployment}` |
| Groq | `https://api.groq.com/openai/v1` |
| Together AI | `https://api.together.xyz/v1` |
| Ollama | `http://localhost:11434/v1` |
### 配置示例
```yaml
providers:
- name: openai-official
type: openai-custom
api_key: "sk-..."
# 使用默认 Base URL
- name: azure-openai
type: openai-custom
api_key: "..."
base_url: "https://myresource.openai.azure.com/openai/deployments/gpt-4"
- name: ollama-local
type: openai-custom
api_key: "ollama" # Ollama 不需要真实 key
base_url: "http://localhost:11434/v1"
```
## 支持的模型
取决于你使用的服务,常见模型:
| 服务 | 模型 |
|------|------|
| OpenAI | gpt-4, gpt-4-turbo, gpt-3.5-turbo |
| Azure | 取决于部署 |
| Groq | llama-3.1-70b, mixtral-8x7b |
| Ollama | llama3, mistral, codellama |
## 高级配置
### 请求头
添加自定义请求头:
```yaml
openai-custom:
headers:
X-Custom-Header: "value"
```
### Azure 特殊配置
Azure OpenAI 需要额外配置:
```yaml
azure-openai:
api_key: "..."
base_url: "https://..."
api_version: "2024-02-15-preview"
headers:
api-key: "..." # Azure 使用 api-key 头
```
## 故障排除
### API Key 无效
1. 确认 API Key 正确
2. 检查 Key 是否过期
3. 确认账户有足够余额
### 连接失败
1. 检查 Base URL 是否正确
2. 确认网络可以访问端点
3. 检查是否需要代理
### 模型不存在
1. 确认模型名称正确
2. 检查账户是否有该模型的访问权限
3. Azure 用户确认部署名称
@@ -1,176 +0,0 @@
---
title: Claude Custom
description: 配置自定义 Claude 兼容服务
navigation:
icon: i-heroicons-beaker
---
# Claude Custom
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
Claude Custom 允许你配置 Anthropic 官方 API 或其他 Claude 兼容服务。
## 适用场景
- 使用 Anthropic 官方 API
- 使用 AWS Bedrock Claude
- 使用其他 Claude 兼容服务
## API Key 配置
### 获取 API Key
**Anthropic 官方:**
1. 访问 [Anthropic Console](https://console.anthropic.com)
2. 进入 API Keys 页面
3. 创建新的 API Key
**AWS Bedrock:**
1. 访问 AWS Console
2. 配置 Bedrock 访问权限
3. 获取 AWS 凭证
### 在 Lime 中配置
1. 进入 **凭证池** 页面
2. 点击 **添加凭证**
3. 选择 **Claude Custom**
4. 填写配置信息:
| 字段 | 说明 |
|------|------|
| 名称 | 凭证标识名称 |
| API Key | Anthropic API Key |
| Base URL | API 端点(可选) |
## Base URL 设置
### 默认端点
不填写 Base URL 时,使用 Anthropic 官方端点:
```
https://api.anthropic.com
```
### 自定义端点
| 服务 | Base URL |
|------|----------|
| Anthropic 官方 | `https://api.anthropic.com` |
| AWS Bedrock | 使用 AWS SDK |
| 代理服务 | 自定义 URL |
### 配置示例
```yaml
providers:
- name: anthropic-official
type: claude-custom
api_key: "sk-ant-..."
# 使用默认 Base URL
- name: claude-proxy
type: claude-custom
api_key: "..."
base_url: "https://my-proxy.example.com"
```
## 支持的模型
| 模型 | 说明 |
|------|------|
| claude-sonnet-4-20250514 | Claude Sonnet 4 |
| claude-3-5-sonnet-20241022 | Claude 3.5 Sonnet |
| claude-3-5-haiku-20241022 | Claude 3.5 Haiku |
| claude-3-opus-20240229 | Claude 3 Opus |
## API 版本
### 版本配置
Anthropic API 需要指定版本:
```yaml
claude-custom:
api_version: "2023-06-01"
```
### 请求头
Claude API 使用特定的请求头:
```
x-api-key: your-api-key
anthropic-version: 2023-06-01
```
## AWS Bedrock 配置
### 使用 AWS 凭证
```yaml
bedrock-claude:
type: claude-custom
aws_region: "us-east-1"
aws_access_key: "..."
aws_secret_key: "..."
model_id: "anthropic.claude-3-sonnet-20240229-v1:0"
```
### IAM 角色
推荐使用 IAM 角色而非 Access Key:
1. 配置 IAM 角色
2. 授予 Bedrock 访问权限
3. Lime 自动使用角色凭证
## 高级配置
### 自定义请求头
```yaml
claude-custom:
headers:
X-Custom-Header: "value"
```
### 超时设置
```yaml
claude-custom:
timeout:
connect: 10s
request: 180s # Claude 响应可能较慢
```
## 故障排除
### API Key 无效
1. 确认 API Key 正确
2. 检查 Key 是否过期
3. 确认账户状态正常
### 模型访问被拒
1. 确认账户有该模型的访问权限
2. 某些模型需要申请访问
3. 检查使用限制
### 速率限制
| 错误 | 解决方案 |
|------|----------|
| 429 Too Many Requests | 降低请求频率 |
| rate_limit_error | 等待后重试 |
### Bedrock 问题
1. 确认 AWS 凭证正确
2. 检查 IAM 权限
3. 确认区域支持 Claude
-145
View File
@@ -1,145 +0,0 @@
---
title: Codex
description: OpenAI Codex OAuth Provider 配置
navigation:
icon: i-heroicons-code-bracket
---
# Codex Provider
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
通过 OAuth 认证使用 OpenAI Codex 服务。
## 概述
Codex Provider 允许你使用 OpenAI Codex 的 OAuth 凭证访问 GPT 模型。
同时,为了兼容 Codex CLI 的「API Key 登录」用户(`~/.codex/auth.json` 只有 `api_key`),Lime 也支持读取 `api_key` 并作为 Bearer Token 使用(无需刷新)。
## 支持的模型
- GPT-4 系列
- GPT-3.5 系列
- 其他 Codex 支持的模型
## 配置
### 凭证池配置
```yaml
credential_pool:
codex:
- id: "codex-main"
token_file: "codex/oauth.json"
disabled: false
proxy_url: "http://proxy:8080" # 可选
```
### 配置项说明
| 配置项 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | string | ✅ | 凭证唯一标识 |
| token_file | string | ✅ | Token 文件路径(相对于 auth_dir) |
| disabled | boolean | ❌ | 是否禁用此凭证 |
| proxy_url | string | ❌ | 单独的代理 URL |
## OAuth 登录
### 通过 UI 登录
1. 打开 Lime
2. 进入 Provider 管理页面
3. 找到 Codex 部分
4. 点击"OAuth 登录"按钮
5. 在弹出的浏览器中完成认证
6. 认证成功后自动保存凭证
### Token 文件格式
#### OAuth 模式(推荐用于 Codex OAuth)
```json
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"expires_at": "2025-01-01T00:00:00Z",
"token_type": "Bearer"
}
```
#### API Key 模式(兼容 Codex CLI)
```json
{
"api_key": "sk-xxx",
"api_base_url": "https://api.openai.com"
}
```
说明:
- `api_key` / `apiKey`:必填
- `api_base_url` / `apiBaseUrl`:可选;可填写 `https://api.openai.com` 或带 `/v1` 的地址(例如网关、反代、Azure 兼容地址)
## Token 刷新
Lime 会自动在 Token 过期前刷新:
- 检测到 Token 即将过期时自动刷新
- 刷新失败时标记凭证为无效
- 无效凭证会在 UI 中显示警告
## 使用示例
### API 请求
```bash
curl http://127.0.0.1:8999/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
### 路由配置
将 GPT 模型路由到 Codex:
```yaml
routing:
rules:
- pattern: "gpt-*"
provider: "codex"
priority: 1
```
## 多账号配置
```yaml
credential_pool:
codex:
- id: "codex-1"
token_file: "codex/account1.json"
- id: "codex-2"
token_file: "codex/account2.json"
```
Lime 会自动在多个凭证之间负载均衡。
## 故障排除
### Token 刷新失败
1. 检查网络连接
2. 确认 OAuth 授权未被撤销
3. 尝试重新登录
### 凭证无效
1. 删除旧的 Token 文件
2. 重新进行 OAuth 登录
3. 检查账号状态
-173
View File
@@ -1,173 +0,0 @@
---
title: iFlow
description: iFlow Provider 配置(OAuth 和 Cookie)
navigation:
icon: i-heroicons-arrow-path
---
# iFlow Provider
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
iFlow Provider 支持两种认证方式:OAuth 和 Cookie。
## 概述
iFlow 是一个 AI 服务提供商,Lime 支持通过 OAuth 或 Cookie 方式使用其服务。
## 认证方式
### OAuth 认证
通过 OAuth 协议认证,支持自动刷新 Token。
### Cookie 认证
通过导入浏览器 Cookie 认证,适用于不支持 OAuth 的场景。
## 配置
### OAuth 模式
```yaml
credential_pool:
iflow:
- id: "iflow-oauth"
token_file: "iflow/oauth.json"
auth_type: "oauth"
disabled: false
proxy_url: "http://proxy:8080" # 可选
```
### Cookie 模式
```yaml
credential_pool:
iflow:
- id: "iflow-cookie"
auth_type: "cookie"
cookies: "session_id=abc123; auth_token=xyz789"
disabled: false
proxy_url: "http://proxy:8080" # 可选
```
### 配置项说明
| 配置项 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | string | ✅ | 凭证唯一标识 |
| auth_type | string | ✅ | 认证类型:`oauth` 或 `cookie` |
| token_file | string | OAuth | Token 文件路径(OAuth 模式必填) |
| cookies | string | Cookie | Cookie 字符串(Cookie 模式必填) |
| disabled | boolean | ❌ | 是否禁用此凭证 |
| proxy_url | string | ❌ | 单独的代理 URL |
## OAuth 登录
### 通过 UI 登录
1. 打开 Lime
2. 进入 Provider 管理页面
3. 找到 iFlow 部分
4. 点击"OAuth 登录"按钮
5. 在弹出的浏览器中完成认证
6. 认证成功后自动保存凭证
### Token 文件格式
```json
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"expires_at": "2025-01-01T00:00:00Z"
}
```
## Cookie 导入
### 获取 Cookie
1. 在浏览器中登录 iFlow
2. 打开开发者工具(F12)
3. 切换到 Network 标签
4. 刷新页面
5. 选择任意请求,查看 Request Headers
6. 复制 Cookie 头的值
### 通过 UI 导入
1. 打开 Lime
2. 进入 Provider 管理页面
3. 找到 iFlow 部分
4. 选择"Cookie 导入"
5. 粘贴 Cookie 字符串
6. 点击"保存"
### Cookie 格式
```
session_id=abc123; auth_token=xyz789; user_id=12345
```
## 使用示例
### API 请求
```bash
curl http://127.0.0.1:8999/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "iflow-model",
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
### 路由配置
将 iFlow 模型路由到 iFlow Provider:
```yaml
routing:
rules:
- pattern: "iflow-*"
provider: "iflow"
priority: 1
```
## 多账号配置
```yaml
credential_pool:
iflow:
# OAuth 账号
- id: "iflow-oauth-1"
token_file: "iflow/account1.json"
auth_type: "oauth"
# Cookie 账号
- id: "iflow-cookie-1"
auth_type: "cookie"
cookies: "session_id=abc123"
```
## 故障排除
### OAuth Token 刷新失败
1. 检查网络连接
2. 确认 OAuth 授权未被撤销
3. 尝试重新登录
### Cookie 过期
1. 重新从浏览器获取 Cookie
2. 更新配置中的 Cookie 字符串
3. Cookie 通常有效期较短,建议使用 OAuth
### 凭证无效
1. 检查账号状态
2. 确认服务可用
3. 尝试重新认证
@@ -1,203 +0,0 @@
---
title: Gemini API Key
description: Gemini API Key 多账号负载均衡配置
navigation:
icon: i-heroicons-key
---
# Gemini API Key Provider
::alert{type="info"}
本页属于进阶连接配置。若你已能正常创作,可先跳过。
::
使用 API Key 访问 Google Gemini 服务,支持多账号负载均衡和模型排除。
## 概述
Gemini API Key Provider 允许你:
- 配置多个 API Key 实现负载均衡
- 为每个 Key 设置排除的模型
- 自定义 Base URL
- 为每个 Key 单独配置代理
## 支持的模型
- Gemini 2.5 Pro
- Gemini 2.5 Flash
- Gemini 2.0 系列
- Gemini 1.5 系列
- 其他 Gemini API 支持的模型
## 配置
### 基础配置
```yaml
credential_pool:
gemini_api_keys:
- id: "gemini-key-1"
api_key: "AIzaSy..."
disabled: false
```
### 完整配置
```yaml
credential_pool:
gemini_api_keys:
- id: "gemini-key-1"
api_key: "AIzaSy...01"
base_url: "https://generativelanguage.googleapis.com"
proxy_url: "socks5://proxy1:1080"
excluded_models:
- "gemini-2.5-pro"
- "gemini-2.5-*"
- "*-preview"
disabled: false
- id: "gemini-key-2"
api_key: "AIzaSy...02"
disabled: false
```
### 配置项说明
| 配置项 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | string | ✅ | 凭证唯一标识 |
| api_key | string | ✅ | Gemini API Key |
| base_url | string | ❌ | 自定义 Base URL |
| proxy_url | string | ❌ | 单独的代理 URL |
| excluded_models | array | ❌ | 排除的模型列表 |
| disabled | boolean | ❌ | 是否禁用此凭证 |
## 模型排除
### 排除规则
支持以下匹配模式:
| 模式 | 说明 | 示例 |
|------|------|------|
| 精确匹配 | 完全匹配模型名称 | `gemini-2.5-pro` |
| 前缀匹配 | 以指定前缀开头 | `gemini-2.5-*` |
| 后缀匹配 | 以指定后缀结尾 | `*-preview` |
| 包含匹配 | 包含指定字符串 | `*flash*` |
### 配置示例
```yaml
excluded_models:
- "gemini-2.5-pro" # 精确匹配
- "gemini-2.5-*" # 匹配 gemini-2.5-flash, gemini-2.5-pro 等
- "*-preview" # 匹配所有预览版模型
- "*flash*" # 匹配所有包含 flash 的模型
```
### 使用场景
1. **配额限制**:某些 Key 对特定模型有配额限制
2. **区域限制**:某些 Key 在特定区域无法访问某些模型
3. **成本控制**:限制高成本模型的使用
## 负载均衡
### 工作原理
1. 收到请求时,检查请求的模型
2. 过滤掉排除了该模型的 Key
3. 在剩余的 Key 中使用 Round-Robin 选择
4. 如果选中的 Key 失败,尝试下一个
### 配置示例
```yaml
credential_pool:
gemini_api_keys:
# Key 1: 用于所有模型
- id: "gemini-all"
api_key: "AIzaSy...01"
# Key 2: 排除 Pro 模型
- id: "gemini-flash-only"
api_key: "AIzaSy...02"
excluded_models:
- "gemini-*-pro*"
# Key 3: 仅用于预览模型
- id: "gemini-preview"
api_key: "AIzaSy...03"
excluded_models:
- "gemini-2.5-pro"
- "gemini-2.5-flash"
```
## 自定义 Base URL
### 使用场景
- 使用代理服务
- 使用私有部署
- 使用第三方兼容服务
### 配置示例
```yaml
credential_pool:
gemini_api_keys:
- id: "gemini-proxy"
api_key: "AIzaSy..."
base_url: "https://my-proxy.example.com/gemini"
```
## 使用示例
### API 请求
```bash
curl http://127.0.0.1:8999/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-flash",
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
### 路由配置
将 Gemini 模型路由到 Gemini API Key Provider:
```yaml
routing:
rules:
- pattern: "gemini-*"
provider: "gemini_api_key"
priority: 1
```
## 获取 API Key
1. 访问 [Google AI Studio](https://aistudio.google.com/)
2. 登录 Google 账号
3. 点击"Get API Key"
4. 创建新的 API Key
5. 复制并保存 Key
## 故障排除
### API Key 无效
1. 确认 Key 格式正确(以 `AIzaSy` 开头)
2. 检查 Key 是否已被撤销
3. 确认账号状态正常
### 模型不可用
1. 检查模型名称是否正确
2. 确认 Key 有权访问该模型
3. 检查是否被排除规则过滤
### 配额超限
1. 等待配额重置
2. 添加更多 API Key
3. 启用配额超限自动切换
+41 -23
View File
@@ -1,6 +1,6 @@
---
title: API 概览
description: 面向进阶用户的本地接口能力说明
description: 当前只保留本地兼容接口入口说明
navigation:
icon: i-heroicons-code-bracket
---
@@ -8,48 +8,66 @@ navigation:
# API 概览
::alert{type="info"}
本章节面向进阶用户与开发者。普通创作者可直接在应用内使用,无需 API 接入。
本章节面向进阶用户与开发者。普通创作者直接在应用内使用即可,无需单独接 API。
::
当你需要把 Lime 接入脚本、自动化流程或第三方工具时,可使用本地 API。
当前 `content/api-reference` 只保留仍与实现锚点对齐的本地兼容接口说明,不再继续扩写旧管理接口或未挂载的兼容路由叙事。
## 常见端点类型
## 当前保留的兼容面
### 通用对话端点
### OpenAI 兼容
用于文本生成、对话续写等任务。
用于本地对话与模型发现:
### 模型与管理端点
- `POST /v1/chat/completions`
- `GET /v1/models`
用于读取模型列表、状态信息和部分管理能力。
[查看 OpenAI API 说明 →](/api-reference/openai-api)
### 扩展端点
### Claude 兼容
用于特定平台或集成场景。
用于 Claude Messages 协议兼容:
## 认证方式
- `POST /v1/messages`
- `POST /v1/messages/count_tokens`
- `Authorization: Bearer <api-key>`
- 或使用兼容格式的密钥头
请确保 API Key 仅在可信环境使用。
[查看 Claude API 说明 →](/api-reference/claude-api)
## 默认地址
默认本地地址:`http://127.0.0.1:8999`
默认本地地址:
通常建议保持本地监听,不对公网暴露。
```text
http://127.0.0.1:8999
```
通常建议只在本地监听,不对公网直接暴露。
## 认证方式
认证头会跟随兼容协议变化:
- OpenAI 兼容:`Authorization: Bearer <api-key>`
- Claude 兼容:`x-api-key: <api-key>`,并携带 `anthropic-version`
具体请求示例以各协议子页面为准。
## 错误排查建议
- `401`:密钥错误或请求头格式错误
- `404`:端点路径错误
- `429`:请求频率过高
- `5xx`:服务端异常或上游波动
- `401`
- 密钥错误
- 认证头格式与协议不匹配
- `404`
- 路径错误
- 协议路径写错
- `429`
- 请求频率过高
- 上游限流
- `5xx`
- 本地服务异常
- 上游模型服务波动
## 下一步
- [OpenAI API](/api-reference/openai-api)
- [Claude API](/api-reference/claude-api)
- [管理 API](/api-reference/management-api)
- [Amp CLI API](/api-reference/amp-cli-api)
+17 -11
View File
@@ -11,7 +11,13 @@ navigation:
本页是开发者进阶文档。普通创作者可直接在应用内使用,无需 API 调用。
::
Lime 提供完整的 OpenAI Chat Completions API 兼容。
Lime 当前提供 OpenAI Chat Completions 协议兼容入口,以及 `/v1/models` 模型发现端点。
## 当前边界
- 当前只覆盖 `/v1/chat/completions` 与 `/v1/models`
- 本页不把其他 OpenAI 风格端点写成已落地能力
- 具体可用模型仍以 Lime 当前加载到本地运行时的结果为准
## /v1/chat/completions
@@ -27,7 +33,7 @@ Authorization: Bearer your-api-key
```json
{
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
@@ -72,7 +78,7 @@ Authorization: Bearer your-api-key
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1234567890,
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"choices": [
{
"index": 0,
@@ -100,7 +106,7 @@ curl http://127.0.0.1:8999/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'
@@ -132,16 +138,16 @@ Authorization: Bearer your-api-key
"object": "list",
"data": [
{
"id": "claude-sonnet-4-20250514",
"id": "example-chat-model",
"object": "model",
"created": 1234567890,
"owned_by": "anthropic"
"owned_by": "provider-a"
},
{
"id": "gemini-2.0-flash",
"id": "example-fast-model",
"object": "model",
"created": 1234567890,
"owned_by": "google"
"owned_by": "provider-b"
}
]
}
@@ -153,7 +159,7 @@ Authorization: Bearer your-api-key
```json
{
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"messages": [{"role": "user", "content": "What's the weather in Tokyo?"}],
"tools": [
{
@@ -211,7 +217,7 @@ client = openai.OpenAI(
)
response = client.chat.completions.create(
model="claude-sonnet-4-20250514",
model="your-model-id",
messages=[{"role": "user", "content": "Hello!"}]
)
@@ -229,7 +235,7 @@ const client = new OpenAI({
});
const response = await client.chat.completions.create({
model: 'claude-sonnet-4-20250514',
model: 'your-model-id',
messages: [{ role: 'user', content: 'Hello!' }]
});
+17 -9
View File
@@ -11,7 +11,13 @@ navigation:
本页是开发者进阶文档。普通创作者可直接在应用内使用,无需 API 调用。
::
Lime 提供 Anthropic Claude Messages API 兼容。
Lime 当前提供 Claude Messages 协议兼容入口。
## 当前边界
- 当前只覆盖 `/v1/messages` 与 `/v1/messages/count_tokens`
- `/v1/messages/count_tokens` 目前用于兼容需要估算值的客户端,不承诺返回上游精确计费结果
- 具体可用模型仍以 Lime 当前加载到本地运行时的结果为准
## /v1/messages
@@ -28,7 +34,7 @@ anthropic-version: 2023-06-01
```json
{
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello!"}
@@ -83,7 +89,7 @@ anthropic-version: 2023-06-01
"content": [
{"type": "text", "text": "Hello! How can I help you today?"}
],
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 10,
@@ -102,7 +108,7 @@ curl http://127.0.0.1:8999/v1/messages \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
@@ -127,6 +133,8 @@ data: {"type":"message_stop"}
## /v1/messages/count_tokens
当前该端点返回估算值,用于兼容需要预估 token 数的客户端。
### 请求
```bash
@@ -140,7 +148,7 @@ anthropic-version: 2023-06-01
```json
{
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"messages": [
{"role": "user", "content": "Hello!"}
]
@@ -151,7 +159,7 @@ anthropic-version: 2023-06-01
```json
{
"input_tokens": 10
"input_tokens": 100
}
```
@@ -161,7 +169,7 @@ anthropic-version: 2023-06-01
```json
{
"model": "claude-sonnet-4-20250514",
"model": "your-model-id",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "What's the weather in Tokyo?"}],
"tools": [
@@ -209,7 +217,7 @@ client = anthropic.Anthropic(
)
message = client.messages.create(
model="claude-sonnet-4-20250514",
model="your-model-id",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}]
)
@@ -228,7 +236,7 @@ const client = new Anthropic({
});
const message = await client.messages.create({
model: 'claude-sonnet-4-20250514',
model: 'your-model-id',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Hello!' }]
});
@@ -1,324 +0,0 @@
---
title: 管理 API
description: Lime 远程管理 API 端点
navigation:
icon: i-heroicons-cog-6-tooth
---
# 管理 API
::alert{type="info"}
本页是开发者进阶文档,主要用于自动化管理与运维集成。
::
Lime 提供远程管理 API,用于配置和监控服务。
## 认证
所有管理 API 请求需要在 `Authorization` 头中提供密钥:
```bash
Authorization: Bearer your-secret-key
```
## 访问控制
管理 API 的访问受以下配置控制:
| 配置项 | 说明 |
|--------|------|
| `secret_key` | 管理密钥,为空时禁用所有管理端点(返回 404) |
| `allow_remote` | 是否允许远程访问,为 false 时仅允许 localhost |
::alert{type="warning"}
当前版本未启用 TLS,仅支持本地访问,`allow_remote` 必须保持为 `false`。
::
## /v0/management/status
获取服务器状态信息。
### 请求
```bash
GET /v0/management/status
Authorization: Bearer your-secret-key
```
### 响应
```json
{
"status": "running",
"version": "1.0.0",
"uptime_seconds": 3600,
"tls_enabled": false,
"active_credentials": 5,
"total_requests": 1234,
"providers": {
"kiro": {
"enabled": true,
"credentials_count": 2
},
"gemini": {
"enabled": true,
"credentials_count": 1
}
}
}
```
## /v0/management/credentials
### 获取凭证列表
```bash
GET /v0/management/credentials
Authorization: Bearer your-secret-key
```
### 响应
```json
{
"credentials": [
{
"id": "kiro-main",
"provider": "kiro",
"type": "oauth",
"status": "valid",
"expires_at": "2025-01-01T00:00:00Z",
"disabled": false
},
{
"id": "gemini-key-1",
"provider": "gemini_api_key",
"type": "api_key",
"status": "valid",
"disabled": false,
"excluded_models": ["gemini-2.5-pro"]
}
]
}
```
### 添加凭证
```bash
POST /v0/management/credentials
Authorization: Bearer your-secret-key
Content-Type: application/json
```
#### 添加 OAuth 凭证
```json
{
"provider": "kiro",
"id": "kiro-new",
"token_file": "kiro/new-token.json"
}
```
#### 添加 API Key 凭证
```json
{
"provider": "openai",
"id": "openai-new",
"api_key": "sk-xxx...",
"base_url": "https://api.openai.com/v1"
}
```
#### 添加 Gemini API Key
```json
{
"provider": "gemini_api_key",
"id": "gemini-key-new",
"api_key": "AIzaSy...",
"base_url": "https://generativelanguage.googleapis.com",
"excluded_models": ["gemini-2.5-pro", "*-preview"]
}
```
### 响应
```json
{
"success": true,
"credential_id": "kiro-new"
}
```
### 删除凭证
```bash
DELETE /v0/management/credentials/{credential_id}
Authorization: Bearer your-secret-key
```
### 响应
```json
{
"success": true
}
```
## /v0/management/config
### 获取配置
```bash
GET /v0/management/config
Authorization: Bearer your-secret-key
```
### 响应
```json
{
"server": {
"host": "127.0.0.1",
"port": 8999,
"tls": {
"enable": false
}
},
"routing": {
"default_provider": "kiro"
},
"quota_exceeded": {
"switch_project": true,
"switch_preview_model": true,
"cooldown_seconds": 300
}
}
```
### 更新配置
```bash
PUT /v0/management/config
Authorization: Bearer your-secret-key
Content-Type: application/json
```
```json
{
"routing": {
"default_provider": "gemini"
},
"quota_exceeded": {
"cooldown_seconds": 600
}
}
```
### 响应
```json
{
"success": true,
"restart_required": false
}
```
> **注意**: 某些配置更改(如 TLS、端口)需要重启服务器才能生效。
## 错误响应
### 401 Unauthorized
密钥无效或缺失:
```json
{
"error": {
"message": "Invalid or missing secret key",
"type": "authentication_error",
"code": "invalid_api_key"
}
}
```
### 403 Forbidden
远程访问被禁止:
```json
{
"error": {
"message": "Remote access not allowed",
"type": "permission_error",
"code": "remote_access_denied"
}
}
```
### 404 Not Found
管理 API 已禁用(secret_key 为空):
```json
{
"error": {
"message": "Management API is disabled",
"type": "not_found_error",
"code": "endpoint_not_found"
}
}
```
## 示例代码
### cURL
```bash
# 获取状态
curl http://127.0.0.1:8999/v0/management/status \
-H "Authorization: Bearer your-secret-key"
# 获取凭证列表
curl http://127.0.0.1:8999/v0/management/credentials \
-H "Authorization: Bearer your-secret-key"
# 添加凭证
curl http://127.0.0.1:8999/v0/management/credentials \
-H "Authorization: Bearer your-secret-key" \
-H "Content-Type: application/json" \
-d '{"provider": "openai", "id": "openai-new", "api_key": "sk-xxx"}'
```
### Python
```python
import requests
BASE_URL = "http://127.0.0.1:8999"
SECRET_KEY = "your-secret-key"
headers = {
"Authorization": f"Bearer {SECRET_KEY}",
"Content-Type": "application/json"
}
# 获取状态
response = requests.get(f"{BASE_URL}/v0/management/status", headers=headers)
print(response.json())
# 添加凭证
credential = {
"provider": "openai",
"id": "openai-new",
"api_key": "sk-xxx"
}
response = requests.post(
f"{BASE_URL}/v0/management/credentials",
headers=headers,
json=credential
)
print(response.json())
```
@@ -1,248 +0,0 @@
---
title: Amp CLI API
description: Amp CLI 集成路由端点
navigation:
icon: i-heroicons-command-line
---
# Amp CLI API
::alert{type="info"}
本页是开发者进阶文档。若你不涉及 Amp CLI 集成,可跳过。
::
Lime 提供 Amp CLI 兼容的路由端点,支持将 Amp CLI 请求路由到本地 OAuth 凭证。
## 概述
Amp CLI 集成允许你:
- 使用本地 OAuth 凭证处理 Amp CLI 请求
- 将不可用的模型映射到可用的替代模型
- 代理 Amp 的认证和账户管理功能
## Provider 路由
### /api/provider/{provider}/v1/chat/completions
处理 Amp CLI 的 OpenAI 格式聊天请求。
```bash
POST /api/provider/{provider}/v1/chat/completions
Content-Type: application/json
Authorization: Bearer your-api-key
```
#### 支持的 Provider
| Provider | 说明 |
|----------|------|
| `anthropic` | Claude 模型 |
| `openai` | GPT 模型 |
| `google` | Gemini 模型 |
#### 请求示例
```bash
curl http://127.0.0.1:8999/api/provider/anthropic/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'
```
### /api/provider/{provider}/v1/messages
处理 Amp CLI 的 Anthropic Messages 格式请求。
```bash
POST /api/provider/{provider}/v1/messages
Content-Type: application/json
x-api-key: your-api-key
anthropic-version: 2023-06-01
```
#### 请求示例
```bash
curl http://127.0.0.1:8999/api/provider/anthropic/v1/messages \
-H "x-api-key: your-api-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
## 模型映射
当 Amp CLI 请求的模型不可用时,Lime 可以自动映射到可用的替代模型。
### 配置
```yaml
ampcode:
model_mappings:
- from: "claude-opus-4.5"
to: "claude-sonnet-4"
- from: "gpt-5"
to: "gemini-2.5-pro"
- from: "claude-3-opus-20240229"
to: "claude-3-5-sonnet-20241022"
```
### 映射行为
1. 收到请求时检查模型名称
2. 如果模型在映射列表中,替换为目标模型
3. 使用替换后的模型名称路由请求
4. 响应中保留原始请求的模型名称
## 管理端点代理
Lime 可以代理 Amp 的认证和账户管理端点到上游服务器。
### /api/auth/*
代理认证相关请求。
```bash
# 登录
POST /api/auth/login
# 刷新 Token
POST /api/auth/refresh
# 登出
POST /api/auth/logout
```
### /api/user/*
代理用户账户相关请求。
```bash
# 获取用户信息
GET /api/user/profile
# 获取使用统计
GET /api/user/usage
```
### 配置
```yaml
ampcode:
upstream_url: "https://ampcode.com"
restrict_management_to_localhost: false
```
| 配置项 | 说明 |
|--------|------|
| `upstream_url` | Amp 上游服务器 URL |
| `restrict_management_to_localhost` | 是否限制管理端点只能从 localhost 访问 |
## 使用场景
### 场景 1:使用本地 OAuth 凭证
你有 Kiro 的 Claude 订阅,想用 Amp CLI 但不想额外付费:
1. 配置 Lime 加载 Kiro OAuth 凭证
2. 在 Amp CLI 中配置 Lime 作为 API 端点
3. Amp CLI 请求通过 Lime 路由到 Kiro 凭证
### 场景 2:模型替换
Amp CLI 请求 Claude Opus 4.5,但你只有 Sonnet 4 的访问权限:
```yaml
ampcode:
model_mappings:
- from: "claude-opus-4.5"
to: "claude-sonnet-4"
```
### 场景 3:多 Provider 负载均衡
配置多个凭证,Lime 自动在它们之间负载均衡:
```yaml
credential_pool:
kiro:
- id: "kiro-1"
token_file: "kiro/token-1.json"
- id: "kiro-2"
token_file: "kiro/token-2.json"
```
## Amp CLI 配置
在 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-lime-api-key
```
或在配置文件中:
```yaml
# ~/.amp/config.yaml
api:
base_url: http://127.0.0.1:8999/api/provider
key: your-lime-api-key
```
## 错误处理
### 模型不可用
当请求的模型不可用且没有配置映射时:
```json
{
"error": {
"message": "Model 'claude-opus-4.5' is not available",
"type": "invalid_request_error",
"code": "model_not_found"
}
}
```
### 上游连接失败
当无法连接到 Amp 上游服务器时:
```json
{
"error": {
"message": "Failed to connect to upstream server",
"type": "upstream_error",
"code": "connection_failed"
}
}
```
### 凭证耗尽
当所有凭证都不可用时:
```json
{
"error": {
"message": "All credentials exhausted",
"type": "service_unavailable",
"code": "no_credentials_available"
}
}
```
响应头会包含 `Retry-After` 指示何时可以重试。
@@ -1,125 +0,0 @@
---
title: 常见问题
description: 按症状快速定位问题并恢复创作
navigation:
icon: i-heroicons-question-mark-circle
---
# 常见问题
本页给你一个最快排查顺序:
1. 看页面提示
2. 看当前项目与资源选择是否正确
3. 看连接状态与网络
4. 再进入详细排查页
## 启动后看不到内容
### 症状
- 页面空白或内容未刷新
- 明明生成过,但当前列表看不到
### 先检查
1. 是否选错了项目
2. 是否切到了筛选分类(例如只看图片)
3. 是否处于搜索过滤状态
### 处理建议
- 先切回“全部”分类
- 清空搜索词
- 刷新当前页面再确认
## 图片没显示或数量不对
### 症状
- 资源页看不到已生成图片
- 图片数量和预期不一致
### 先检查
1. 当前资源库(项目)是否正确
2. 是否选在“图片”分类
3. 图片是否已入库(自动或手动补录)
### 处理建议
- 先确认当前项目与资源库选择一致
- 回看 Claw 中对应图片任务是否已经成功并完成入库
- 回资源页切换“全部”核对总量
## 生成失败或超时
### 症状
- 请求长时间无响应
- 返回超时或失败提示
### 处理建议
1. 降低同一时间的并发任务数
2. 缩短单次输入长度或拆成批次
3. 稍后重试,观察是否为瞬时波动
4. 必要时切换备用连接
## 认证或权限错误
### 常见提示
- `401`:认证失败
- `403`:权限不足
### 处理建议
1. 重新确认连接状态
2. 刷新或重建对应连接
3. 再做一次小请求测试
详见 [连接鉴权问题](/troubleshooting/credential-errors)。
## 网络连接不稳定
### 常见提示
- 网络超时
- DNS 解析失败
- TLS/证书错误
### 处理建议
1. 检查本机网络
2. 检查代理配置是否正确
3. 避开高峰时段进行批量任务
详见 [网络与连接问题](/troubleshooting/connection-issues)。
## Windows 安装后打不开或白屏
### 常见症状
- 双击应用无反应
- 启动后白屏
- 提示缺少运行时或被 SmartScreen 拦截
### 处理建议
1. 优先重新下载安装 `Lime_*_x64-online-setup.exe`
2. 确认 `%APPDATA%\lime\` 与 `%USERPROFILE%\.lime\` 可写
3. 如被 SmartScreen 拦截,确认来源可信后再继续
4. 如果处于离线、内网或受限网络环境,改用 `Lime_*_x64-offline-setup.exe`
5. 如有条件,运行一键收集脚本后再反馈
详见 [Windows 启动与安装问题](/troubleshooting/windows-startup-issues)。
## 仍然无法解决
请整理以下信息后反馈:
1. 问题发生时间
2. 页面截图与错误文案
3. 复现步骤(尽量 3 步内)
4. 当前版本号
@@ -1,61 +0,0 @@
---
title: 连接鉴权问题
description: 处理连接失效、认证失败与账号状态异常
navigation:
icon: i-heroicons-key
---
# 连接鉴权问题
本页用于处理“能打开应用,但调用失败”的问题。
## 快速判断
如果你看到以下报错,通常属于连接鉴权问题:
- `401` 认证失败
- `403` 权限不足
- 连接状态显示已失效
## 3 步排查
### 第 1 步:检查连接状态
在连接管理页面确认当前连接是否可用。
### 第 2 步:刷新或重建连接
- 先尝试刷新
- 刷新失败则重新登录或重新添加连接
### 第 3 步:做最小测试
使用一条简短请求验证是否恢复。
## 常见场景
### 场景 1:昨天还能用,今天突然失败
高概率是连接过期或上游状态变化。建议先重建该连接。
### 场景 2:部分模型可用,部分模型失败
可能是模型权限差异或连接配置不匹配。先换一个已知可用模型测试。
### 场景 3:导入配置后无法调用
导入通常不包含敏感凭证信息,需要重新校验连接。
## 进阶检查(可选)
如果你需要定位更深层原因,可检查:
- 本地凭证文件是否存在且可读
- 连接使用的账号是否仍有效
- 代理或网络环境是否变更
## 预防建议
1. 保留一个备用连接
2. 关键活动前做一次连通性测试
3. 定期清理长期失效连接
@@ -1,72 +0,0 @@
---
title: 网络与连接问题
description: 处理超时、DNS、证书和代理相关问题
navigation:
icon: i-heroicons-signal
---
# 网络与连接问题
当你频繁遇到超时、连接失败或证书错误时,按下面顺序排查。
## 排查顺序
1. 本机网络是否正常
2. 代理是否配置正确
3. 请求是否过于集中
4. 是否为上游短时波动
## 常见症状与处理
### 连接超时
处理建议:
1. 先减少并发
2. 拆分任务批次
3. 适当增加超时
4. 稍后重试
### DNS 解析失败
处理建议:
1. 切换网络后重试
2. 检查系统 DNS 设置
3. 清理 DNS 缓存后重试
### 证书错误
处理建议:
1. 校准系统时间
2. 检查网络代理是否拦截 HTTPS
3. 更换网络环境复测
## 代理相关
如果你使用代理,请重点检查:
1. 代理地址格式是否正确
2. 账号密码是否有效
3. 排除列表是否包含本地地址
常见格式示例:
- `http://proxy.example.com:8080`
- `http://user:password@proxy.example.com:8080`
- `socks5://proxy.example.com:1080`
## 什么时候判断是上游问题
满足以下特征时,通常是上游波动:
- 同一配置偶发失败、重试可恢复
- 不同网络环境都出现短时错误
- 一段时间后无需改配置自动恢复
## 仍未恢复怎么办
1. 记录失败时间段
2. 保存错误提示和关键日志
3. 先切换备用连接保障创作不中断
@@ -1,128 +0,0 @@
---
title: Windows 启动与安装问题
description: 处理打不开、白屏、缺少运行时与目录权限问题
navigation:
icon: i-heroicons-computer-desktop
---
# Windows 启动与安装问题
如果 Windows 用户反馈“打不开”“白屏”“没有任何反应”,请优先按本页顺序排查。
## 最快处理顺序
1. 先确认安装包类型
2. 再确认运行时与系统拦截
3. 再检查本地目录权限
4. 最后收集日志反馈
## 先确认安装包
推荐优先使用:
- `Lime_*_x64-online-setup.exe`
不建议优先分发:
- 便携版压缩包
- 旧的 `.msi` 安装包
原因:
- 在线安装包体积更小,适合大多数 Windows 10/11 用户
- 如果处于离线、内网或受限网络环境,请改用 `Lime_*_x64-offline-setup.exe`
## 常见症状与处理
### 双击后无反应
处理建议:
1. 确认下载来源可信
2. 如果被 SmartScreen 拦截,点击“更多信息”后再确认是否继续
3. 重新运行 Windows setup 安装包覆盖安装
4. 安装后从开始菜单再次启动
### 启动后白屏
处理建议:
1. 优先重装 Windows setup 安装包,补齐 WebView2 Runtime
2. 检查系统是否禁用了 Edge WebView2 Runtime
3. 再确认本地目录是否可写
### 提示缺少运行时
处理建议:
1. 不要先手动找旧版运行时
2. 先重新运行 Windows setup 安装包
3. 如仍失败,再单独检查 WebView2 Runtime 是否安装完整
## 目录权限检查
以下目录至少要保证当前用户可读写:
- `%APPDATA%\lime\`
- `%USERPROFILE%\.lime\`
这些目录分别用于:
- 配置与凭证副本
- 数据库、日志、请求日志和部分运行时状态
如果目录不可写,常见表现包括:
- 启动后立即退出
- 白屏
- 功能区能打开但数据无法加载
## 日志收集
反馈问题前,建议至少收集以下内容:
- `%USERPROFILE%\.lime\logs\`
- `%USERPROFILE%\.lime\request_logs\`
- 问题出现时间
- 安装包文件名
- 页面或弹窗提示截图
### 一键收集(推荐给支持/开发环境)
如果你有仓库脚本环境,可直接运行:
```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\windows-collect-support-bundle.ps1
```
脚本会:
- 打包 `%USERPROFILE%\.lime\logs\` 与 `request_logs\`
- 收集 WebView2、PowerShell、目录存在性等环境信息
- 默认不打包 `config.yaml`、数据库和凭证正文,避免泄露敏感信息
执行完成后,会在桌面生成 `Lime-Support-时间戳.zip`。
如果应用本身还能打开,也可以在“设置 / API 服务器 / 诊断接口”区域点击“导出支持包”。
## 如果页面出现 Windows 启动自检提示
新版本会在部分场景下提示以下问题:
- 应用数据目录不可写
- 用户目录数据根不可写
- 数据库不可访问
- 未检测到 WebView2 Runtime
- 未检测到 PowerShell 或 `cmd.exe`
建议按提示顺序处理,不要一开始就同时修改多项系统设置。
## 仍然无法恢复怎么办
请整理以下最小信息后反馈:
1. Windows 版本
2. Lime 版本
3. 使用的安装包文件名
4. 首次出现时间
5. 日志目录压缩包
@@ -1,229 +0,0 @@
---
title: 架构说明
description: Lime 技术架构
navigation:
icon: i-heroicons-cube-transparent
---
# 架构说明
Lime 是基于 Tauri 2.0 构建的跨平台桌面应用。
## 技术栈
| 层级 | 技术 |
|------|------|
| 前端 | React + TypeScript + Tailwind CSS |
| 后端 | Rust + Tauri 2.0 |
| 构建 | Vite |
| 包管理 | pnpm |
## Tauri 前后端通信
### 架构图
```
┌─────────────────────────────────────────────────────────┐
│ Frontend (React) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Dashboard │ │ Settings │ │ Monitoring │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ │ │
│ ┌─────▼─────┐ │
│ │ Tauri │ │
│ │ Commands │ │
│ └─────┬─────┘ │
└──────────────────────────┼──────────────────────────────┘
│ IPC
┌──────────────────────────┼──────────────────────────────┐
│ ┌─────▼─────┐ │
│ │ Command │ │
│ │ Handler │ │
│ └─────┬─────┘ │
│ │ │
│ ┌───────────────────────┼───────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Provider │ │Credential│ │ Router │ │
│ │ Manager │ │ Pool │ │ │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────────┘ │
│ │ │
│ ┌─────▼─────┐ │
│ │ API Server│ │
│ │ (Axum) │ │
│ └───────────┘ │
│ Backend (Rust) │
└───────────────────────────────────────────────────────┘
```
### 通信方式
前端通过 Tauri Commands 调用后端:
```typescript
// 前端调用
import { invoke } from '@tauri-apps/api/core';
const result = await invoke('get_credentials');
```
```rust
// 后端处理
#[tauri::command]
async fn get_credentials() -> Result<Vec<Credential>, String> {
// 处理逻辑
}
```
## Rust 后端模块
### 模块结构
```
src-tauri/src/
├── main.rs # 入口
├── lib.rs # 库导出
├── commands/ # Tauri 命令
│ ├── mod.rs
│ ├── config_cmd.rs
│ ├── credential_cmd.rs
│ └── server_cmd.rs
├── credential/ # 凭证管理
│ ├── mod.rs
│ ├── kiro.rs
│ ├── gemini.rs
│ └── qwen.rs
├── provider/ # Provider 实现
│ ├── mod.rs
│ ├── anthropic.rs
│ ├── openai.rs
│ └── gemini.rs
├── router/ # 请求路由
│ ├── mod.rs
│ └── rules.rs
├── converter/ # 协议转换
│ ├── mod.rs
│ ├── openai_to_claude.rs
│ └── claude_to_openai.rs
├── server/ # API Server
│ ├── mod.rs
│ ├── handlers.rs
│ └── middleware.rs
└── config/ # 配置管理
├── mod.rs
└── yaml.rs
```
### 核心模块
#### Credential 模块
负责凭证的加载、刷新和管理:
```rust
pub struct CredentialManager {
credentials: Vec<Credential>,
refresh_scheduler: RefreshScheduler,
}
impl CredentialManager {
pub async fn load_credentials(&mut self) -> Result<()>;
pub async fn refresh_token(&mut self, id: &str) -> Result<()>;
pub fn get_available(&self) -> Vec<&Credential>;
}
```
#### Provider 模块
实现不同 AI 服务的调用:
```rust
#[async_trait]
pub trait Provider: Send + Sync {
async fn chat_completion(&self, request: ChatRequest) -> Result<ChatResponse>;
async fn stream_completion(&self, request: ChatRequest) -> Result<impl Stream<Item = StreamChunk>>;
}
```
#### Router 模块
根据规则路由请求:
```rust
pub struct Router {
rules: Vec<RoutingRule>,
default_provider: String,
}
impl Router {
pub fn route(&self, model: &str) -> RoutingResult;
}
```
#### Converter 模块
在不同 API 格式之间转换:
```rust
pub fn openai_to_claude(request: OpenAIRequest) -> ClaudeRequest;
pub fn claude_to_openai(response: ClaudeResponse) -> OpenAIResponse;
```
## 请求处理流程
```
1. 客户端请求 → API Server (Axum)
│
2. 认证检查 ────────┤
│
3. 路由匹配 ────────┤ Router
│
4. 凭证选择 ────────┤ Credential Pool
│
5. 协议转换 ────────┤ Converter
│
6. Provider 调用 ───┤ Provider
│
7. 响应转换 ────────┤ Converter
│
8. 返回响应 ────────┘
```
## 数据流
### 请求流程
1. 前端发起 API 请求
2. Axum 服务器接收请求
3. 中间件进行认证和日志
4. Router 根据模型名称选择 Provider
5. Credential Pool 选择可用凭证
6. Converter 转换请求格式
7. Provider 调用实际 AI 服务
8. Converter 转换响应格式
9. 返回响应给客户端
### 事件流程
```
后端事件 → Tauri Event → 前端监听 → UI 更新
```
```rust
// 后端发送事件
app.emit("credential-updated", payload)?;
```
```typescript
// 前端监听
import { listen } from '@tauri-apps/api/event';
await listen('credential-updated', (event) => {
// 更新 UI
});
```
@@ -1,200 +0,0 @@
---
title: 贡献指南
description: 如何为 Lime 做贡献
navigation:
icon: i-heroicons-heart
---
# 贡献指南
感谢你对 Lime 的关注!本指南帮助你开始贡献。
## 开发环境设置
### 前置要求
| 工具 | 版本 |
| --------- | ------- |
| Node.js | >= 22 |
| pnpm | >= 8 |
| Rust | >= 1.70 |
| Tauri CLI | >= 2.0 |
### 安装依赖
```bash
# 克隆仓库
git clone https://github.com/aiclientproxy/lime.git
cd lime
# 安装前端依赖
pnpm install
# 安装 Tauri CLI
cargo install tauri-cli
```
### 开发模式
```bash
# 启动开发服务器
pnpm tauri dev
```
### 构建
```bash
# 构建发布版本
pnpm tauri build
```
## 代码规范
### TypeScript/React
- 使用 ESLint 和 Prettier
- 遵循 React Hooks 规范
- 组件使用函数式写法
```bash
# 检查代码
pnpm lint
# 格式化代码
pnpm format
```
### Rust
- 使用 rustfmt 格式化
- 使用 clippy 检查
- 遵循 Rust API Guidelines
```bash
# 格式化
cargo fmt
# 检查
cargo clippy
```
### 提交规范
使用 Conventional Commits:
```
feat: 添加新功能
fix: 修复 bug
docs: 更新文档
style: 代码格式调整
refactor: 代码重构
test: 添加测试
chore: 构建/工具变更
```
示例:
```
feat(credential): 添加 Qwen 凭证支持
fix(router): 修复路由规则匹配问题
docs: 更新安装指南
```
## PR 流程
### 1. Fork 仓库
在 GitHub 上 Fork 项目到你的账户。
### 2. 创建分支
```bash
git checkout -b feature/your-feature
```
### 3. 开发和测试
- 编写代码
- 添加测试
- 确保所有测试通过
### 4. 提交代码
```bash
git add .
git commit -m "feat: your feature description"
git push origin feature/your-feature
```
### 5. 创建 PR
1. 在 GitHub 上创建 Pull Request
2. 填写 PR 描述
3. 等待 Review
### PR 检查清单
- [ ] 代码通过 lint 检查
- [ ] 添加了必要的测试
- [ ] 更新了相关文档
- [ ] 提交信息符合规范
## 项目结构
```
lime/
├── src/ # 前端源码
│ ├── components/ # React 组件
│ ├── pages/ # 页面组件
│ ├── hooks/ # 自定义 Hooks
│ ├── lib/ # 工具函数
│ └── styles/ # 样式文件
├── src-tauri/ # Rust 后端
│ ├── src/ # 源码
│ ├── Cargo.toml # 依赖配置
│ └── tauri.conf.json # Tauri 配置
├── docs/ # 文档
└── public/ # 静态资源
```
## 测试
### 前端测试
```bash
# 运行测试
pnpm test
# 运行测试并生成覆盖率
pnpm test:coverage
```
### 后端测试
```bash
cd src-tauri
cargo test
```
## 问题反馈
### 报告 Bug
1. 搜索是否已有相同问题
2. 创建新 Issue
3. 提供详细信息:
- 操作系统和版本
- Lime 版本
- 复现步骤
- 错误日志
### 功能建议
1. 创建 Feature Request Issue
2. 描述功能需求
3. 说明使用场景
## 社区
- GitHub Issues: 问题反馈
- GitHub Discussions: 讨论交流
-283
View File
@@ -1,283 +0,0 @@
---
title: 构建指南
description: 本地开发和构建发布
navigation:
icon: i-heroicons-wrench-screwdriver
---
# 构建指南
本指南介绍如何在本地开发和构建 Lime。
## 本地开发
::alert{type="warning"}
Lime 桌面端当前仅支持 macOS 与 Windows,本页不再提供 Linux 打包与发布说明。
::
### 环境准备
1. **安装 Node.js**
```bash
# 使用 nvm 安装
nvm install 22
nvm use 22
```
Windows 用户请使用 Node.js 官方安装器安装 22.x,并重新打开终端后通过 `node -v` 确认版本。
2. **安装 pnpm**
```bash
npm install -g pnpm
```
3. **安装 Rust**
```bash
# macOS
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Windows
# 下载并运行 rustup-init.exe
```
4. **安装 Tauri 依赖**
**macOS:**
```bash
xcode-select --install
```
**Windows:**
- 安装 Visual Studio Build Tools
- 安装 WebView2(开发模式必需;对外分发时默认推荐在线小包,离线或受限网络环境再提供离线大包)
### 启动开发
```bash
# 安装依赖
pnpm install
# 启动开发模式
pnpm tauri dev
```
开发模式特性:
- 前端热重载
- Rust 代码变更自动重新编译
- 开发者工具可用
### 开发配置
#### 前端配置
`vite.config.ts`:
```typescript
export default defineConfig({
plugins: [react()],
server: {
port: 1420,
strictPort: true,
},
});
```
#### Tauri 配置
`src-tauri/tauri.conf.json`:
```json
{
"build": {
"devPath": "http://localhost:1420",
"distDir": "../dist"
}
}
```
## 构建发布
### 构建命令
```bash
# 构建当前平台
pnpm tauri build
# 构建 debug 版本
pnpm tauri build --debug
```
### 自动更新产物与签名
Lime 当前的桌面端升级流程分成两步:
- 检查更新:客户端直接请求静态清单 `latest.json`
- 安装更新:客户端使用 Tauri updater 校验签名并安装对应平台包
`src-tauri/tauri.conf.json` 与 `src-tauri/tauri.conf.headless.json` 已启用 `createUpdaterArtifacts: true`,构建发布包时会额外生成 updater 需要的签名产物与 `latest.json`。
本地或 CI 构建发布版本时,至少需要准备以下环境变量:
```bash
# updater 校验使用的公钥;编译时注入到桌面端
export LIME_UPDATER_PUBLIC_KEY="..."
# Tauri 生成 latest.json 和签名文件时使用的私钥
export TAURI_SIGNING_PRIVATE_KEY="..."
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD="..."
```
如果缺少 `LIME_UPDATER_PUBLIC_KEY`,应用仍可读取 `latest.json` 显示新版本信息,但会降级为只能跳转发布页手动下载,无法执行应用内安装。
### 构建产物
| 平台 | 产物位置 |
| ------- | --------------------------------------- |
| macOS | `src-tauri/target/release/bundle/dmg/` |
| Windows | `src-tauri/target/release/bundle/nsis/` |
### 跨平台构建
#### macOS 构建
```bash
# 构建 Apple Silicon
pnpm tauri build --target aarch64-apple-darwin
# 构建 Intel
pnpm tauri build --target x86_64-apple-darwin
# 构建 Universal
pnpm tauri build --target universal-apple-darwin
```
#### Windows 构建
```bash
# 构建 64 位 Windows 在线安装包(推荐,体积更小,安装时按需下载 WebView2)
pnpm tauri build --target x86_64-pc-windows-msvc --config src-tauri/tauri.windows.online.conf.json
# 构建 64 位 Windows 离线安装包(体积更大,内置离线 WebView2 安装器)
pnpm tauri build --target x86_64-pc-windows-msvc --config src-tauri/tauri.windows.conf.json
```
> 建议默认对外分发在线小包;只有内网、离线或受限网络环境,再提供离线大包。
## 版本管理
### 更新版本号
1. 更新 `package.json`:
```json
{
"version": "1.0.1"
}
```
2. 更新 `src-tauri/Cargo.toml`:
```toml
[package]
version = "1.0.1"
```
3. 更新 `src-tauri/tauri.conf.json`:
```json
{
"version": "1.0.1"
}
```
### 创建发布
```bash
# 创建 tag
git tag v1.0.1
git push origin v1.0.1
```
## CI/CD
### GitHub Actions
项目使用 GitHub Actions 自动构建:
- Push 到 main 分支触发构建
- 创建 tag 触发发布
- Release 工作流会把 `LIME_UPDATER_PUBLIC_KEY`、`TAURI_SIGNING_PRIVATE_KEY`、`TAURI_SIGNING_PRIVATE_KEY_PASSWORD` 注入构建环境,用于生成可校验的 updater 清单与安装包签名
### 构建矩阵
| 平台 | 架构 | Runner |
| ------- | ----- | ------------ |
| macOS | arm64 | macos-latest |
| macOS | x64 | macos-13 |
| Windows | x64 | windows-2022 |
## 调试
### 前端调试
开发模式下按 `F12` 打开开发者工具。
### 后端调试
```bash
# 启用 Rust 日志
RUST_LOG=debug pnpm tauri dev
```
### 日志位置
| 平台 | 路径 |
| ------- | ---------------------- |
| macOS | `~/Library/Logs/Lime/` |
| Windows | `%APPDATA%\Lime\logs\` |
## 常见问题
### 构建失败
1. 确保所有依赖已安装
2. 清理构建缓存:
```bash
# 清理前端
rm -rf node_modules dist
pnpm install
# 清理 Rust
cd src-tauri
cargo clean
```
### 签名问题
macOS 构建需要代码签名:
```bash
# 设置签名身份
export APPLE_SIGNING_IDENTITY="Developer ID Application: ..."
```
Windows 构建强烈建议签名:
```bash
# 设置签名证书
export TAURI_SIGNING_PRIVATE_KEY="..."
```
如果要让桌面端“检查更新后直接安装”可用,还需要同时配置:
```bash
export LIME_UPDATER_PUBLIC_KEY="..."
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD="..."
```
@@ -1,63 +0,0 @@
---
title: 上线运维
description: 生产就绪的最小运维清单
navigation:
icon: i-heroicons-wrench-screwdriver
---
# 上线运行与运维(生产就绪最小版)
本页面用于“马上上线且长期稳定运行”的最小运维闭环,避免上线后因配置、备份或回滚缺失导致不可恢复的问题。
## 上线前检查
- 确认服务仅本地监听:`server.host = 127.0.0.1`(当前版本仅支持本地监听)
- 设置强 API Key:不要使用默认值 `proxy_cast`
- 确认日志保留策略:`logging.retention_days` 合理(建议 >= 7 天)
- 确认凭证与配置已正确导入,并完成一次启动 + 健康检查
## 运行健康检查
- HTTP 健康检查:`GET /health`
- 关键字段应包含 `status=healthy` 与 `version`
- 建议在上线后做一次 API 冒烟请求(如 `/v1/models`)
## 备份与恢复(必须)
当前版本需要手动备份以下路径:
- 配置文件(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` 目录与数据库 `lime.db`
4. 如需保留历史日志,恢复 `logs/` 与 `request_logs/`
5. 启动应用并验证 `/health` 与关键功能
## Windows 启动失败排查
- 优先确认用户安装的是 `Lime_*_x64-online-setup.exe`;离线、内网或受限网络环境再提供 `Lime_*_x64-offline-setup.exe`
- 首次启动若提示缺少运行时,优先重新运行 Windows setup 安装包;如果在线安装失败,再切换到 offline 安装包
- 检查 `%APPDATA%\lime\` 与 `%USERPROFILE%\.lime\` 是否可写;数据库、日志与部分运行时状态依赖这两个目录
- 收集 `%USERPROFILE%\.lime\logs\` 与 `%USERPROFILE%\.lime\request_logs\` 作为一线排障材料
- 若前端出现 Windows 启动自检提示,按提示项优先检查目录权限、数据库可访问性、WebView2 与 Shell 可用性
## 回滚策略
- 如果升级失败,恢复备份的 `config.yaml` 与 `lime.db`
- 使用上一版本安装包覆盖安装
- 完成健康检查与冒烟测试
## 发布质量门槛(最小)
- `cd src-tauri && cargo test`
- `cd src-tauri && cargo clippy`
- `npm test`
- `npm run lint`
- `npm run build`
@@ -1,17 +0,0 @@
---
title: 插件开发(迁移说明)
description: 本章节已迁移至开放平台文档
navigation:
icon: i-heroicons-arrow-top-right-on-square
---
# 插件开发(迁移说明)
::alert{type="info"}
插件开发文档已迁移,请阅读:[开放平台 - 插件开发指南](/open-platform/plugin-development)。
::
迁移后,开发者文档与用户文档分层更清晰:
- 开放平台:插件规范、接入流程、生态能力
- 用户指南:插件安装与使用
+31 -23
View File
@@ -1,57 +1,65 @@
---
title: 免责声明
description: 使用条款和法律声明
description: Lime 使用条款与法律说明
navigation:
icon: i-heroicons-scale
---
# 免责声明
## 使用目的
## 适用范围
Lime 是一款开源工具,其设计初衷是帮助用户**充分利用已订阅的 AI 服务 Token**,在更多场景中发挥其价值。
Lime 是一款本地优先的内容闭环 Agent 桌面应用。
你在使用 Lime 及其接入的模型、插件、MCP 服务、浏览器连接器、Webhook 与其它外部服务时,应自行确保符合所在地法律法规以及对应服务条款。
::alert{type="warning"}
**重要提示**: 本工具仅限于个人合法使用,严禁用于任何非法盈利目的。
**重要提示**: 请仅在合法、合规、可授权的前提下使用本产品及其外部连接能力。
::
## 合法使用范围
## 你需要自行确认的事项
本工具的合法使用场景包括但不限于:
使用 Lime 前,请至少确认以下事项:
- ✅ 个人学习和研究
- ✅ 个人开发项目中使用已订阅的 AI 服务
- ✅ 在不同开发工具间复用个人订阅额度
- ✅ 提高个人工作效率
1. 你有权使用接入的模型账号、API Key、OAuth 凭证、插件包或 MCP 服务
2. 你有权处理导入到 Lime 的文本、图片、音视频、网页、代码和其它素材
3. 你已理解目标平台、模型服务商和第三方工具的使用限制
4. 你不会把本产品用于违法、侵权、欺诈、骚扰、滥用计算资源或规避服务限制等行为
## 禁止行为
以下行为严格禁止:
以下行为明确禁止:
- ❌ 将本工具用于商业盈利目的
- ❌ 转售或分享他人的 AI 服务凭证
- ❌ 违反 AI 服务提供商的服务条款
- ❌ 任何形式的非法活动
- ❌ 使用未经授权的账号、密钥、Cookie、凭证或第三方连接
- ❌ 上传、处理或传播你无权使用的内容、数据或素材
- ❌ 将 Lime 用于违法、侵权、诈骗、骚扰、恶意自动化、绕过风控或违反平台条款的场景
- ❌ 通过插件、Webhook、MCP、连接器或脚本向外泄露敏感信息
- ❌ 将本产品宣传为对第三方平台、模型服务或连接结果提供官方背书
## 责任声明
1. **用户责任**: 用户应确保其使用行为符合所在地区的法律法规,以及相关 AI 服务提供商的服务条款。
1. **用户责任**:你应对自己的配置、连接、导入内容、生成结果和发布行为负责。
2. **第三方风险**:模型服务、插件、MCP 服务、Webhook、浏览器连接器与外部服务均由对应提供方独立维护,其可用性、安全性与合规性不由 Lime 保证。
3. **风险自担**:使用本产品可能带来内容误判、外部服务波动、账号限制、连接失败、数据丢失或其它损失,相关风险由用户自行承担。
4. **按现状提供**:本产品按“现状”提供,不提供任何明示或暗示担保。
2. **风险自担**: 使用本工具所产生的任何后果由用户自行承担,包括但不限于账户封禁、服务终止等。
## 内容与结果说明
3. **无担保**: 本工具按"现状"提供,不提供任何明示或暗示的担保。
Lime 生成、改写、整理、抓取、导出或分发的内容,仍需由用户自行复核。
尤其是以下场景,请在发布或对外使用前做人工确认:
4. **免责**: 开发者不对因使用本工具而导致的任何直接或间接损失承担责任。
- 涉及事实正确性、日期、引用、来源、版权、隐私、品牌承诺的内容
- 涉及合同、医疗、法律、财务、监管合规等高风险领域的内容
- 通过自动化、Webhook、插件或外部服务进一步传播的内容
## 服务条款遵守
## 第三方条款遵守
使用本工具时,请务必遵守以下服务提供商的使用条款:
当你接入第三方模型、平台或服务时,请同时遵守对应条款与政策。常见示例包括但不限于:
- [Anthropic 使用政策](https://www.anthropic.com/policies)
- [Google AI 服务条款](https://policies.google.com/terms)
- [阿里云服务条款](https://terms.alibabacloud.com/)
- [OpenAI 使用政策](https://openai.com/policies)
- [阿里云服务条款](https://terms.alibabacloud.com/)
## 联系我们
如对本声明有任何疑问,请通过 GitHub Issues 联系我们。
如对本声明有疑问,请通过 GitHub Issues 或项目维护渠道联系。
+29 -20
View File
@@ -1,41 +1,50 @@
---
title: 开放平台概览
description: 面向开发者与生态合作方的扩展能力
title: 扩展接入概览
description: 当前只保留插件打包与 Connect 接入说明
navigation:
icon: i-heroicons-cube-transparent
---
# 开放平台概览
开放平台面向开发者与生态合作方,用于扩展 Lime 的能力边界。
# 扩展接入概览
::alert{type="info"}
如果你是普通创作者,可先跳过本章节。
当前这组“扩展接入”文档只保留仍有实现锚点的高级接入说明,不再把插件市场、生态合作流转或未落地的扩展能力写成既成事实。
::
## 平台能力
如果你是普通创作者,可以直接跳过本章节。这里面向的是需要扩展 Lime、分发接入包、或让外部系统与 Lime 建立连接的开发者。
### 插件系统
## 当前保留能力
用于扩展工具、工作流和界面能力。
### 插件打包与安装
[了解更多 →](/open-platform/plugins)
当前文档覆盖的是已经落地的插件安装链路:
### Connect 能力
- 本地文件安装
- URL 安装
- `plugin.json` 清单约束
- UI surface 与二进制字段的基础说明
用于外部平台与 Lime 的配置联动与生态集成。
[查看插件打包说明 →](/open-platform/plugin-development)
[了解更多 →](/open-platform/connect)
### Connect 接入
## 谁适合阅读
当前文档覆盖的是已经落地的 Connect 能力:
- 需要开发自定义插件的团队
- 需要对接外部系统的开发者
- 需要建设生态能力的合作方
- `lime://connect` 深链写入连接参数
- relay 注册表校验
- 用户确认后保存
- 可选 webhook 回调
[查看 Connect 说明 →](/open-platform/connect)
## 适合阅读的人
- 需要打包和分发插件的团队
- 需要把外部站点或服务接入 Lime 的开发者
- 需要对接 Connect 深链或回调的集成方
## 快速入口
- [插件中心](/open-platform/plugins)
- [插件开发指南](/open-platform/plugin-development)
- [插件打包指南](/open-platform/plugin-development)
- [Connect 接入](/open-platform/connect)
- [Connect 集成说明](/open-platform/connect-integration)
- [Connect 回调字段](/open-platform/connect-webhook)
@@ -1,38 +0,0 @@
---
title: 开放平台 - 插件中心
description: 面向开发者的插件安装、管理与发布能力
navigation:
icon: i-heroicons-puzzle-piece
---
# 开放平台 - 插件中心
::alert{type="info"}
本页面向开发者与高级用户。普通创作者可使用用户指南中的插件页。
::
Lime 支持通过插件扩展能力,适用于自定义工具、自动化流程和生态集成。
## 你可以做什么
- 安装推荐插件或第三方插件包
- 管理插件启用状态与版本
- 查看插件加载与执行状态
- 在工具入口中使用插件能力
## 安装方式
1. 推荐插件一键安装
2. 通过 URL 安装 ZIP 包
3. 通过本地文件安装 ZIP 包
## 管理建议
1. 先安装高频插件,再逐步扩展
2. 每次新增插件后做一次功能验证
3. 定期清理长期不用的插件
## 下一步
- [插件开发指南](/open-platform/plugin-development)
- [开放平台概览](/open-platform/overview)
@@ -1,44 +1,125 @@
---
title: 开放平台 - 插件开发指南
description: 开发 Lime 插件的规范与最佳实践
title: 插件打包指南
description: 当前插件安装链路、清单字段与打包约束
navigation:
icon: i-heroicons-code-bracket-square
---
# 开放平台 - 插件开发指南
# 插件打包指南
::alert{type="info"}
本页面向开发者。若你不开发插件,可跳过。
本页只记录当前已经落地的插件安装与清单约束。插件市场、审核流、灰度发布和未稳定的原生扩展能力不在当前承诺范围内。
::
本文档说明插件类型、打包方式和开发建议,帮助你把能力稳定接入 Lime。
如果你准备给 Lime 打包插件,当前最重要的事实源是安装链路本身:插件包通过本地文件或 URL 进入 Lime,安装器会校验压缩格式并读取包内清单。
## 插件类型
## 当前打包入口
### 脚本插件
当前公开可确认的安装入口只有两类:
基于 JavaScript/TypeScript,通过 Hook 扩展行为。
- 本地文件安装
- URL 安装
### 二进制插件
当前安装器接受这些压缩格式:
通过独立可执行文件提供系统级能力,适合重计算或本地工具集成。
- `.zip`
- `.tar.gz`
- `.tgz`
## 基础结构
建议把“插件根目录”直接打进压缩包,并确保包内能明确定位到 `plugin.json`。
插件以 ZIP 分发,至少包含:
## `plugin.json` 是当前安装清单
- `plugin.json`:元数据与入口定义
- 可选配置文件与资源文件
当前安装器会从压缩包中提取并校验 `plugin.json`。对外发布时,建议始终提供这份文件,并在发布前用当前 Lime 版本做一次真实安装验证。
## 开发建议
一个最小示例:
1. 先做最小可用版本
2. 明确输入输出协议
3. 做异常与超时处理
4. 提供清晰的版本兼容说明
```json
{
"name": "example_plugin",
"version": "1.0.0",
"plugin_type": "script",
"entry": "config.json",
"hooks": ["on_request"],
"ui": {
"surfaces": ["tools"],
"entry": "dist/index.js",
"title": "Example Plugin"
}
}
```
## 发布建议
## 当前清单字段
1. 版本号语义化管理
2. 发布前做跨平台验证
3. 提供回滚策略与变更日志
### 必填基础字段
- `name`
- 不能为空
- 只允许字母、数字、连字符和下划线
- 长度不能超过 `64`
- `version`
- 需要满足当前 semver 校验
- 当前接受 `x.y`、`x.y.z`、`x.y.z-suffix` 这类格式
- `entry`
- 不能为空
- 表示插件入口文件路径
### 常用可选字段
- `description`
- `author`
- `homepage`
- `license`
- `min_lime_version`
- `config_schema`
- `hooks`
如果声明了 `hooks`,当前只接受由字母、数字、下划线或冒号组成的名称。
### `plugin_type`
当前清单 schema 识别这些类型:
- `script`
- `binary`
- `native`
其中当前公开主路径应默认按 `script` 打包;`native` 仍属于预留能力,不建议作为对外稳定发布前提。若使用 `binary`,还需要补充二进制下载与平台映射信息。
### `ui`
如果插件需要在 Lime 内暴露界面,可声明 `ui` 段。当前已存在的字段包括:
- `surfaces`
- `icon`
- `title`
- `entry`
- `description`
- `default_width`
- `default_height`
`surfaces` 用于声明 UI 入口位置。当前代码中常见的 surface 标识包括 `tools`、`sidebar`、`main`、`settings`;发布前仍应在目标版本中实际验证展示结果。
### `binary`
如果插件类型为 `binary`,当前清单还支持补充:
- `binary_name`
- `github_owner`
- `github_repo`
- `platform_binaries`
- `checksum_file`
这类插件通常还需要分别准备各平台产物,并验证可执行文件权限与下载地址是否可用。
## 发布前最少检查
建议至少完成以下检查:
1. 用当前 Lime 版本做一次真实安装
2. 确认 `plugin.json` 能通过安装器校验
3. 确认插件能出现在 `已安装插件包`,并在需要时进入 `已加载插件`
4. 如果声明了 `ui`,确认目标 surface 能正常出现
5. 如果声明了 `min_lime_version`,同步写清最低版本要求
当前文档只保证“安装链路与字段约束”的说明,不再把尚未稳定的插件生态流程写成既成事实。
+40 -21
View File
@@ -1,32 +1,37 @@
---
title: 开放平台 - Connect
description: 面向服务提供方的一键配置接入能力
title: Connect 接入
description: 面向中转服务提供方的 Lime Deep Link 接入说明
navigation:
icon: i-heroicons-link
---
# 开放平台 - Connect
# Connect 接入
::alert{type="info"}
本页面向生态合作方与平台接入方。普通创作者可跳过。
本页面面向已进入 Lime Connect 注册表,或准备按当前 Deep Link / webhook 协议接入的中转服务提供方。
::
Connect 通过 Deep Link 提供“一键配置”能力,帮助外部平台将配置快速带入 Lime。
Connect 通过 `lime://connect` Deep Link,把外部服务下发的 API Key 一键带入 Lime。
## 核心价值
## 当前边界
- 用户:减少手动配置步骤
- 服务提供方:降低接入门槛
- 平台:提升配置成功率
当前 Connect 文档只覆盖已经落地的运行时边界:
## 一键配置流程
- `lime://connect` Deep Link 参数
- 已注册中转商的展示与确认流程
- 可选的统计回调行为
1. 用户在外部平台点击一键配置
2. 浏览器打开 `lime://` 链接
3. Lime 弹出确认
4. 用户确认后完成导入
不再在这里承诺额外的审核、灰度或人工接入流程。
## 基础协议
## 基础流程
1. 外部服务生成 `lime://connect` 链接
2. 用户点击链接后,Lime 解析参数
3. Lime 按 `relay` 查询本地已加载的中转商注册表
4. 用户确认后,API Key 被保存到 Lime 的当前 Provider 入口
5. 若该中转商配置了 webhook,Lime 会异步发送结果回调
## Deep Link 协议
```text
lime://connect?relay={relay_id}&key={api_key}&name={key_name}&ref={ref_code}
@@ -34,12 +39,26 @@ lime://connect?relay={relay_id}&key={api_key}&name={key_name}&ref={ref_code}
| 参数 | 必填 | 说明 |
|------|------|------|
| `relay` | ✅ | 服务方唯一标识 |
| `key` | ✅ | API Key |
| `name` | ❌ | 显示名称 |
| `ref` | ❌ | 推广或渠道标记 |
| `relay` | ✅ | 中转商唯一标识 |
| `key` | ✅ | 下发给用户的 API Key |
| `name` | ❌ | 在 Lime 中展示的 Key 名称 |
| `ref` | ❌ | 渠道或推广标记,运行时会映射为 `ref_code` |
## 下一步
## 运行时行为
- `relay` 与 `key` 缺失时,Lime 会拒绝该链接
- 中转商已在注册表中时,Lime 会展示品牌、链接和协议等信息
- 中转商不在注册表中时,仍会给出未验证提示,但不会自动拥有注册表元数据
- 如果该中转商配置了 webhook,用户确认、取消或失败时会触发异步回调
## 回调与统计
Connect 回调是可选能力:
- 未注册的中转商不会发送回调
- 注册表中未配置 `webhook.callback_url` 的中转商不会发送回调
- 回调地址必须使用 `https://`
详细字段见:
- [Connect 接入指南](/open-platform/connect-integration)
- [统计回调(Webhook)](/open-platform/connect-webhook)
@@ -1,45 +0,0 @@
---
title: 开放平台 - Connect 接入指南
description: 外部服务接入 Connect 的实施步骤与字段规范
navigation:
icon: i-heroicons-wrench-screwdriver
---
# 开放平台 - Connect 接入指南
::alert{type="info"}
本页面向生态合作方技术团队。
::
本文档说明如何把你的服务接入 Connect,并完成一键配置联动。
## 接入步骤
1. 准备服务方元数据
2. 按规范生成配置文件
3. 提交审核或接入申请
4. 联调 Deep Link
5. 灰度发布并观察回调数据
## 配置文件建议
建议包含:
- 唯一标识与展示信息
- 官网与文档链接
- API 基础信息
- 回调地址(可选)
## 联调重点
1. Deep Link 参数完整性
2. 用户确认流程体验
3. 异常输入的兜底处理
4. 回调状态与业务统计一致性
## 上线前检查
1. 参数合法性校验
2. 失效 Key 的处理策略
3. 安全与速率限制策略
4. 版本兼容说明
@@ -1,58 +1,110 @@
---
title: 开放平台 - 统计回调(Webhook)
description: Connect 回调事件格式与接入建议
title: Connect 统计回调(Webhook)
description: Connect 回调事件字段与发送行为
navigation:
icon: i-heroicons-arrow-path-rounded-square
---
# 开放平台 - 统计回调(Webhook)
# Connect 统计回调(Webhook)
::alert{type="info"}
本页面向生态合作方技术团队。
本页面向已经在 Connect 注册表中配置 webhook 的服务提供方。
::
Webhook 用于回传配置行为结果,帮助你统计接入效果。
Connect webhook 用于回传用户在 Lime 中处理 Deep Link 的结果。
## 回调时机
## 什么时候会发送
常见状态:
只有同时满足以下条件时,Lime 才会发送回调:
- `success`:用户确认并配置成功
- `cancelled`:用户取消
- `error`:执行失败
1. `relay` 能在注册表中找到
2. 该中转商配置了 `webhook.callback_url`
3. `callback_url` 为 `https://`
## 请求示例
如果任一条件不满足,Lime 会直接跳过,不会阻塞主流程。
```http
POST https://your-domain.com/lime/callback
Content-Type: application/json
## 状态类型
- `success`
用户确认并成功保存 API Key
- `cancelled`
用户取消添加
- `error`
保存流程失败
## Payload 字段
成功或取消时,Lime 会发送如下 JSON:
```json
{
"event": "connect",
"status": "success",
"relay_id": "your-relay",
"ref": "campaign-2026",
"timestamp": "2026-02-16T10:00:00Z"
"ref_code": "campaign-2026",
"key_prefix": "sk-abc12",
"timestamp": "2026-04-19T10:00:00Z",
"client": {
"version": "x.y.z",
"platform": "macos"
}
}
```
## 字段建议
错误时会额外包含:
- `event`:事件类型
- `status`:状态值
- `relay_id`:服务方标识
- `ref`:渠道标记
- `timestamp`:事件时间
```json
{
"event": "connect",
"status": "error",
"relay_id": "your-relay",
"key_prefix": "sk-abc12",
"timestamp": "2026-04-19T10:00:00Z",
"client": {
"version": "x.y.z",
"platform": "windows"
},
"error_code": "SAVE_FAILED",
"error_message": "failed to persist api key"
}
```
## 安全建议
字段说明:
1. 仅接受 HTTPS 回调
2. 校验来源与参数完整性
3. 对回调做幂等处理
4. 记录失败重试日志
- `event`
固定为 `connect`
- `status`
`success` / `cancelled` / `error`
- `relay_id`
中转商标识
- `ref_code`
可选渠道标记,对应 Deep Link 中的 `ref`
- `key_prefix`
仅保留前 7 位的脱敏 Key 前缀
- `timestamp`
UTC 时间
- `client.version`
Lime 当前版本
- `client.platform`
`macos` / `windows` / `linux`
- `error_code`
仅 `error` 时返回
- `error_message`
仅 `error` 时返回
## 监控建议
## 安全边界
1. 统计成功率与取消率
2. 跟踪错误类型占比
3. 区分渠道来源效果
- Lime 不为该回调增加额外签名
- 接收方应自行校验 `https://` 来源、参数完整性与幂等
- 若需要确认请求是否属于自己下发的 Key,可校验 `key_prefix`
## 重试行为
回调发送为异步行为,默认会按以下节奏重试:
1. 立即发送
2. 60 秒后重试
3. 300 秒后重试
4. 1800 秒后最后一次重试
发送失败不会阻塞用户在 Lime 中的主操作。
+21 -38
View File
@@ -1,53 +1,36 @@
---
title: Lime 文档中心
description: 创作类 AI Agent 平台文档,从灵感到发布的一站式指南
title: Lime 文档站
description: LimeNext V2 对外文档正在重建,当前只保留少量进阶页与法律说明
navigation: false
---
# Lime 文档中心
# Lime 文档站重建中
Lime 是创作类 AI Agent 平台。
你可以在同一个工作台里完成对话、创作、Claw 素材与图片任务、项目沉淀和资源复用。
`content/` 已进入 LimeNext V2 重建阶段。
旧版围绕 `AI Agent / 工作台 / 项目 / 资源库 / Claw` 的入门与导航文档已下线,避免继续传播过时的产品结构与命名。
## 从这里开始
## 当前口径
1. [概述](/introduction/overview):先了解平台能帮你完成什么
2. [安装指南](/introduction/installation):安装到本地桌面
3. [快速开始](/introduction/quickstart):3 步走完首次创作
当前对外文档默认采用以下口径:
## 九类工作区主题
1. Lime 是“本地优先的内容闭环 Agent 系统”
2. 前台主词固定为 `技能 / 灵感库 / 生成`
3. `生成` 是唯一主执行面
4. 先讲任务闭环与结果推进,再讲连接、协议和扩展能力
| 主题 | 常见产出 |
|------|----------|
| 通用对话 | 灵感梳理、问题分析、方案草稿 |
| 社媒内容 | 选题、标题、多平台文案 |
| 图文海报 | 主视觉文案、配图方向、活动海报内容 |
| 歌词曲谱 | 主题歌词、段落续写、风格改编 |
| 知识探索 | 知识卡片、结构化总结、学习资料 |
| 计划规划 | 周计划、项目拆解、执行清单 |
| 办公文档 | 报告、方案、邮件、纪要 |
| 短视频 | 脚本、分镜、口播稿 |
| 小说创作 | 设定、章节、人物对白 |
## 当前保留内容
## 常用功能入口
当前仅保留仍与实现锚点对齐、且不会直接误导前台叙事的少量页面:
- [首页与工作台](/user-guide/dashboard)
- [资源库](/user-guide/resources)
- [运行时 AGENTS 规则](/user-guide/runtime-agents)
- [图片生成与素材链路](/user-guide/image-generation)
- [设置](/user-guide/settings)
- [MCP 工具扩展](/user-guide/mcp)
- [插件中心](/user-guide/plugins)
- [Gateway 公共隧道与飞书 Webhook](/user-guide/gateway-tunnel-webhook)
- [模型连接概览](/providers/overview)
- [API 概览](/api-reference/overview)
- [扩展接入概览](/open-platform/overview)
- [免责声明](/legal/disclaimer)
## 进阶能力(可选)
## 后续说明
当你需要更深度的模型接入或工程能力时,可继续阅读:
- [Provider 概述](/providers/overview)
- [API 参考](/api-reference/overview)
- [开放平台](/open-platform/overview)
- [故障排查](/troubleshooting/common-issues)
## 免责声明
请在合法合规前提下使用本产品。
完整说明见 [免责声明](/legal/disclaimer)。
后续若继续恢复普通创作者向的对外文档,应直接按 LimeNext V2 当前路线重写,不再回收旧版 `content/` 页面。
@@ -5,7 +5,7 @@
目标是把 Lime 的 agent 主链从“线程态 + 工具流 + 诊断信号”升级为对标 Claude Code 的“统一任务运行时”:
- 主会话、子 agent、等待输入、完成结算都统一映射为可见任务。
- 简单问题不再错误抬升为常驻 `MAIN TASK` 面板,只在复杂、长链路、可跟踪任务里显示任务视图。
- 简单问题不再错误抬升为常驻 `MAIN TASK` 面板,只在复杂、长链路、可跟踪任务里显示当前进展。
- 工具调用按批次聚合,必须产出中间过程结论,而不是只留下工具名。
- `token usage` 与 `prompt cache` 在任务完成态和消息态都保持可见。
- E2E 与 GUI smoke 后续统一以“任务是否创建、推进、完成”为核心断言。
+15 -3
View File
@@ -92,6 +92,8 @@ LimeNext 当前不是缺一篇愿景文档,而是缺一条能持续推进的
- `AgentChatWorkspace` 当前会按 `sessionId -> sceneapp run` 回查最近运行
- 生成页顶部摘要卡已开始展示 `delivery completion / runtime evidence / governance artifact / observed failure signal`
- `AppPageContent` 已修正 `sceneapps` keep-alive 树位,`创作场景 -> 持续流程 -> 创作场景` 往返不会再触发目录页重挂载
- `useAppNavigation` 已升级为 `requested / committed` 双态导航,`AppSidebar + AppPageContent` 统一按请求态渲染,快速切换时以最后一次点击为准,不再出现主区短暂空白或左侧导航瞬时消失
- `SceneAppsPage` 当前只允许在激活且拥有当前导航请求时回写 `sceneapps` 参数与 recent visit,keep-alive 的旧页不会再把全局导航抢回去
26. `创作场景 -> 持续流程 / 自动化` 的事实源已经开始统一,而不是继续各讲各的:
- `AutomationJobDetailsDialog` 当前会识别 `sceneapp` 派生任务的 metadata,并回查同一条 `descriptor / project pack plan / run summary / scorecard`
- 自动化详情里已新增 `创作场景闭环` 摘要块,可直接回到 `创作场景` 准备页或治理复盘页
@@ -119,6 +121,15 @@ LimeNext 当前不是缺一篇愿景文档,而是缺一条能持续推进的
- 生成页当前还可在同一会话里直接触发 `补齐缺失部件 / 发布前检查 / 进入发布整理 / 生成渠道预览稿 / 整理上传稿`,继续复用 `@发布合规 / @发布 / @渠道预览 / @上传` 与当前 turn 提交主链,而不新增新的发布协议
- `AgentChatWorkspace` 与 `SceneAppsPage` 当前共享 `resolveSceneAppRunEntryNavigationTarget + prepareSceneAppRunGovernanceArtifact(s)` current 主链,不再各自维护一份 run entry 恢复逻辑
- 这一步把 `生成` 从“结果页旁边的跳转入口”推进成了第一批真正的统一编排面
32. `生成主执行面` 已开始直接消费当前会话里的发布后产物,而不再只负责发起发布动作:
- `AgentChatWorkspace` 当前会按 `taskFiles / sessionFiles / artifacts` 聚合最近一份 `发布稿 / 渠道预览稿 / 上传稿`,只消费已带 `contentPostIntent / contentPostLabel` metadata 的 current 发布产物,不把普通 `content-posts/*.md` 误判为投放结果
- `SceneAppExecutionSummaryCard` 已新增 `最近发布产物` 区块,用户可直接从生成页打开刚刚整理出的发布稿、渠道预览稿和上传稿,不需要再去消息流或侧栏翻文件
- 打开链继续复用现有工作区文件预览主链:优先打开 `task file / artifact`,没有内存态时再回落到 `session file` 读取,不新增新的 viewer 协议
- 旧结论里若继续写“生成页当前只会触发发布后动作、还不能消费动作结果”,当前都按已过时理解
33. `生成主执行面` 已开始补第一层发布态判断,而不再只把 `发布稿 / 渠道预览稿 / 上传稿` 平铺出来:
- `sceneAppExecutionContentPosts` 当前会继续检查同名 `*.cover.json / *.publish-pack.json` 伴随文件,并推导 `可继续发布 / 优先渠道预览 / 优先上传整理 / 待补封面信息、发布包` 这类轻量就绪态
- `SceneAppExecutionSummaryCard` 的 `最近发布产物` 卡片当前会直接显示就绪标签与伴随材料芯片,用户在生成页就能看出这轮结果更适合继续发布、先看预览还是先补投放材料
- 这一步仍然只复用现有 `content-posts` 文件命名约定与 session/task/artifact 三路事实源,不新增新的发布状态协议
尚未完成:
@@ -132,7 +143,7 @@ LimeNext 当前不是缺一篇愿景文档,而是缺一条能持续推进的
8. 让基础设置包的 schema 继续下沉到 bootstrap / seeded catalog 可消费的目录投影。
9. 把 `composition blueprint` 从文档口径继续收口到可校验、可投影的装配对象。
10. 继续把 `project pack` 的结构化读模型从当前已接通的 `session / evidence + deliveryArtifactRefs` 优先聚合,扩展到更完整的 `artifact validator / request telemetry / evidence summary` 主链。
11. 把 `project pack` 的治理闭环从当前已接通的“生成主执行面 + 场景目录 + 生成准备 + 治理复盘深链 + 经营评分 + 页面级治理看板 + 自动化详情 + 周会复盘包 / 结构化治理包 + 同聊补件 / 发布前检查 / 进入发布整理 / 渠道预览稿 / 上传稿”继续扩展到更完整的正式投放动作与更强的 evidence/review 闭环。
11. 把 `project pack` 的治理闭环从当前已接通的“生成主执行面 + 场景目录 + 生成准备 + 治理复盘深链 + 经营评分 + 页面级治理看板 + 自动化详情 + 周会复盘包 / 结构化治理包 + 同聊补件 / 发布前检查 / 进入发布整理 / 渠道预览稿 / 上传稿 + 最近发布产物直接消费 + 发布态轻量判断”继续扩展到更完整的正式投放动作与更强的 evidence/review 闭环。
12. 把装配包从已接通的 `service_skill_catalog + scene_catalog` 继续扩到 `command_catalog` 投影代码。
13. 决定第一版是“客户端内编译 package”还是“服务端下发预编译 projection,客户端只做 gate + fallback”。
14. 把剩余 seeded 来源继续收口,重点转到 `command` 与 automation 相关入口,不再保留新的手写 `local_custom` 补丁。
@@ -171,8 +182,9 @@ LimeNext 的实施总目标固定为:
依赖:
- `docs/roadmap/ribbi/*`
- `docs/roadmap/lime-product-convergence-plan.md`
- `docs/research/ribbi/*`
- `docs/roadmap/limenextv2/product-principles.md`
- `docs/roadmap/limenextv2/implementation-roadmap.md`
- `docs/roadmap/lime-service-skill-cloud-config-prd.md`
退出条件:
File diff suppressed because it is too large Load Diff
@@ -67,7 +67,7 @@ Lime 当前不是“能力不够”,而是“主链不够单一”。
| 文档群 | 归属主链 | 角色 |
| --- | --- | --- |
| `docs/roadmap/lime-aster-codex-alignment-roadmap.md`、`docs/roadmap/lime-aster-codex-state-model-implementation-plan.md` | `Query Loop`、`State / History / Telemetry` | Aster/Codex 历史专项档案,不再承担仓库级总排期或 current 实施入口职责 |
| `docs/roadmap/lime-aster-codex-alignment-roadmap.md` | `Query Loop`、`State / History / Telemetry` | Aster/Codex umbrella 历史专项档案,已吸收原状态模型与执行效率子专题,不再承担仓库级总排期或 current 实施入口职责 |
| `docs/roadmap/reliability/*` | `State / History / Telemetry` | Reliability control plane 专项 |
| `docs/tech/harness/*`、`docs/roadmap/harness-engine/*` | `State / History / Telemetry`、`Memory / Compaction` | Evidence / replay / review / observability / cleanup 专项 |
| `docs/develop/execution-tracker-technical-plan.md`、`docs/develop/execution-tracker-p1-p2-roadmap.md`、`docs/develop/scheduler-task-governance-p1.md` | `Task / Agent / Coordinator` | 长时执行与治理专项 |
@@ -182,15 +182,15 @@ Lime 当前不是“能力不够”,而是“主链不够单一”。
- 已完成第一刀:`docs/aiprompts/state-history-telemetry.md` 已成为 State / History / Telemetry current 入口
- 已完成第二刀:`agent_sessions / agent_messages -> SessionDetail -> AgentRuntimeThreadReadModel -> RequestLog 关联键 -> handoff/evidence/replay/analysis/review -> history-record/trend/cleanup/dashboard -> HarnessStatusPanel / AgentThreadReliabilityPanel` 已明确为 current 主链
- 已完成第三刀:`docs/roadmap/lime-aster-codex-state-model-implementation-plan.md`、`docs/roadmap/reliability/*` 与 `telemetry_cmd.rs` 已明确退回 compat;cleanup 报表里残留的 `requestTelemetry:unlinked` 旧语义已明确为 deprecated
- 已完成第三刀:原 `state-model` 历史子专题、`docs/roadmap/reliability/*` 与 `telemetry_cmd.rs` 已明确退回 compat;cleanup 报表里残留的 `requestTelemetry:unlinked` 旧语义已明确为 deprecated
- 已完成第四刀:`docs/README.md`、`docs/aiprompts/README.md`、`docs/aiprompts/overview.md`、`AGENTS.md` 已同步回挂新入口,仓库导航不再继续把状态模型专题计划、reliability 计划或原始 request log 控制台误当成 current 主链
- 已完成第五刀:`docs/roadmap/reliability/README.md` 已补成 compat 目录入口;cleanup 核心脚本已把旧 `requestTelemetry:unlinked` 样本折叠为 `known_gap`,避免旧历史语义继续充当现役状态类别
- 已完成第六刀:`docs/roadmap/reliability/*.md` 全部补上 compat 提示,正文开头先回挂 `state-history-telemetry.md`;`telemetry_cmd.rs` 也已明确只暴露原始 `RequestLog` 与聚合统计,不再和 thread read / evidence 主链抢解释权
- 已完成第七刀:`docs/roadmap/reliability/*.md` 顶部重复的上位文档列表已压成统一 `README + current 主链 + PR 对应映射` 导航,专项正文不再继续堆叠第二套入口说明
- 已完成第八刀:整组 `docs/roadmap/reliability/*` 已进一步压缩为 compat 历史摘要档案,只保留落地结果、current 映射与延后增强项;重复的目标/问题/范围/实施清单正文已回退到仓库历史
- 已完成第九刀:`docs/roadmap/lime-aster-codex-state-model-implementation-plan.md` 已进一步压缩为 compat 历史摘要档案,`alignment-roadmap` 顶部导航也已改回 `query-loop / state-history-telemetry / upstream-runtime-alignment-plan` 这组 current 入口
- 已完成第十刀:`docs/roadmap/lime-aster-codex-alignment-roadmap.md` 已进一步压缩为 compat 历史摘要档案,只保留阶段映射、历史判断与 current 回看入口
- 已完成第十一刀:`docs/roadmap/lime-conversation-execution-efficiency-roadmap.md` 已进一步压缩为 compat 历史摘要档案,`docs/roadmap/artifacts/*` 对运行时边界的引用也已统一改回 `query-loop / task-agent-taxonomy / state-history-telemetry / upstream-runtime-alignment-plan`
- 已完成第九刀:原 `state-model` 历史摘要已完成压缩并最终并入 `docs/roadmap/lime-aster-codex-alignment-roadmap.md`,current 入口固定回到 `query-loop / state-history-telemetry / upstream-runtime-alignment-plan`
- 已完成第十刀:`docs/roadmap/lime-aster-codex-alignment-roadmap.md` 已固定为 compat umbrella 历史档案,只保留阶段映射、状态模型与执行效率的核心判断
- 已完成第十一刀:原 `conversation-execution-efficiency` 历史摘要已并入 `alignment-roadmap`,`docs/roadmap/artifacts/*` 对运行时边界的引用也已统一改回 `query-loop / task-agent-taxonomy / state-history-telemetry / upstream-runtime-alignment-plan`
- `M5` 退出判断:已满足“session / thread / turn / request / evidence / history 的读模型叙事收口”的出口条件,后续只允许在 current 边界上继续长能力
## 7. 当前默认判断
@@ -274,7 +274,7 @@
- `env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" hooks::tests:: --lib -- --nocapture`
- 建立 State / History / Telemetry current 文档 [state-history-telemetry.md](../aiprompts/state-history-telemetry.md),把 `session / thread / turn / request / evidence / history` 收口成单一状态地图
- 将 `agent_sessions / agent_messages -> SessionDetail -> AgentRuntimeThreadReadModel -> RequestLog 关联键 -> handoff/evidence/replay/analysis/review -> history-record/trend/cleanup/dashboard -> HarnessStatusPanel / AgentThreadReliabilityPanel` 明确归到 state/history/telemetry current 主链
- 将 [lime-aster-codex-state-model-implementation-plan.md](../roadmap/lime-aster-codex-state-model-implementation-plan.md)、`docs/roadmap/reliability/*` 与 [telemetry_cmd.rs](../../src-tauri/src/commands/telemetry_cmd.rs) 明确归到 compat,并把 cleanup 报表里残留的 `requestTelemetry:unlinked` 旧语义标记为 deprecated
- 将原 `state-model` 历史子专题、`docs/roadmap/reliability/*` 与 [telemetry_cmd.rs](../../src-tauri/src/commands/telemetry_cmd.rs) 明确归到 compat,并把 cleanup 报表里残留的 `requestTelemetry:unlinked` 旧语义标记为 deprecated
- 将 state/history/telemetry 入口同步回 [docs/README.md](../README.md)、[docs/aiprompts/README.md](../aiprompts/README.md)、[docs/aiprompts/overview.md](../aiprompts/overview.md) 与 [AGENTS.md](../../AGENTS.md),仓库导航不再继续把旧状态模型方案或 reliability 计划当成 current 主线
- 再次执行 `npm run harness:doc-freshness` 并通过(`clean`)
- 新增 [docs/roadmap/reliability/README.md](../roadmap/reliability/README.md),把 reliability 目录补成明确的 compat 入口,不再让分阶段计划文件继续承担 current 导航职责
@@ -282,10 +282,10 @@
- 在 `docs/roadmap/reliability/*.md` 全部补上 compat 提示,正文开头统一先回挂 [state-history-telemetry.md](../aiprompts/state-history-telemetry.md),避免专项正文继续被误读成 current 主入口
- 在 `docs/roadmap/reliability/*.md` 进一步压缩顶部导航:把重复的上位文档长列表统一收口为 `README + current 主链 + PR 对应映射`,减少专项正文重复解释
- 将整组 `docs/roadmap/reliability/*` 进一步压缩为 compat 历史摘要档案:只保留落地结果、current 映射与延后增强项,重复的目标/问题/范围/实施清单正文统一回退到仓库历史
- 将 [lime-aster-codex-state-model-implementation-plan.md](../roadmap/lime-aster-codex-state-model-implementation-plan.md) 进一步压缩为 compat 历史摘要档案:只保留状态边界判断、current 映射与延后增强项,不再把它当 current 实施入口
- 将原状态模型历史子专题进一步压缩并最终并入 [lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md):只保留状态边界判断、current 映射与延后增强项,不再保留独立顶层路线图
- 在 [lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md) 收紧顶部导航:当前入口统一回挂到 [query-loop.md](../aiprompts/query-loop.md)、[state-history-telemetry.md](../aiprompts/state-history-telemetry.md) 与 [upstream-runtime-alignment-plan.md](./upstream-runtime-alignment-plan.md)
- 将 [lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md) 进一步压缩为 compat 历史摘要档案:只保留阶段映射、历史判断与 current 回看入口,不再继续承载长篇阶段任务与验证流水
- 将 [lime-conversation-execution-efficiency-roadmap.md](../roadmap/lime-conversation-execution-efficiency-roadmap.md) 进一步压缩为 compat 历史摘要档案:只保留历史主题、current 映射与延后方向,不再继续承载运行时边界总入口职责
- 将原对话执行效率历史子专题进一步压缩并并入 [lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md):只保留历史主题、current 映射与延后方向,不再保留独立顶层路线图
- 将 `docs/roadmap/artifacts/*` 中仍把旧执行效率路线图当 current 运行时依据的说明,统一改回 `query-loop / task-agent-taxonomy / state-history-telemetry / upstream-runtime-alignment-plan`
- 在 [telemetry_cmd.rs](../../src-tauri/src/commands/telemetry_cmd.rs) 收紧命令注释:这些命令只暴露原始 `RequestLog` 与聚合统计,不负责定义 session/thread current 状态真相
- 继续对齐 team / task tool surface:
@@ -340,7 +340,7 @@
- `M1` Query Loop 收口:已完成第二十五刀实现,并继续收口 `TurnInputEnvelope -> SessionConfig` 的 turn context snapshot 分叉、`action_runtime` 辅助恢复链的 turn context 旁路,以及 `compact_session` 控制回合的最小上下文边界;当前主路径已压成 `execute_aster_chat_request -> execute_runtime_turn_pipeline -> entry/ingress/submit_preparation/session_scope_execute`,turn context 的 output schema / auto_compact / request metadata 也已进一步收紧到共享 snapshot helper
- `M2` Task / Agent taxonomy 收口:已完成 current taxonomy 文档、索引回挂与分类判断;当前长时执行入口统一按 `agent turn / subagent turn / automation job` 解释,`ExecutionTracker` 只作为统一执行摘要层,`SchedulerService` 只作为 compat 触发壳
- `M3` Remote runtime 收口:已完成 current remote 文档、索引回挂与分类判断;当前远程入口统一按 `消息渠道 runtime + 浏览器连接器 / ChromeBridge` 解释,`DevBridge` 与 `OpenClaw` 只作为 compat 支撑,`telegram_remote_cmd` 只作为 deprecated 单通道入口
- `M5` State / History / Telemetry 收口:已完成 current 状态地图、索引回挂与分类判断;当前状态链统一按 `SessionDetail -> AgentRuntimeThreadReadModel -> RequestLog 关联键 -> export/history` 解释,旧状态模型方案、reliability 计划、Aster/Codex 联合路线图、旧执行效率路线图与原始 request log 浏览面只作为 compat 附属层,其中 `docs/roadmap/reliability/*`、[lime-aster-codex-state-model-implementation-plan.md](../roadmap/lime-aster-codex-state-model-implementation-plan.md)、[lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md) 与 [lime-conversation-execution-efficiency-roadmap.md](../roadmap/lime-conversation-execution-efficiency-roadmap.md) 已进一步压成历史摘要档案
- `M5` State / History / Telemetry 收口:已完成 current 状态地图、索引回挂与分类判断;当前状态链统一按 `SessionDetail -> AgentRuntimeThreadReadModel -> RequestLog 关联键 -> export/history` 解释,旧状态模型方案、reliability 计划、Aster/Codex 联合路线图与原始 request log 浏览面只作为 compat 附属层,其中 `docs/roadmap/reliability/*` 与 [lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md) 已进一步压成 umbrella 历史摘要档案
- `M1` 退出判断:已满足“不再需要横跳多份文档才能解释 Lime 主循环”的出口条件,后续默认不再继续微切 `runtime_turn.rs`
- `M2` 退出判断:已满足“所有长时执行入口都能归到唯一 taxonomy”的出口条件,后续不再继续把 execution tracker、scheduler、subagent、automation 当作多条平级主线分别排期
- `M3` 退出判断:已满足“remote 不再是多个并列产品旁路”的出口条件,后续只允许在 `gateway_channel_*` 与 `browser connector / ChromeBridge` current ingress 上继续长能力
@@ -349,5 +349,5 @@
### 下一刀
- `docs/roadmap/reliability/*`、[lime-aster-codex-state-model-implementation-plan.md](../roadmap/lime-aster-codex-state-model-implementation-plan.md)、[lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md) 与 [lime-conversation-execution-efficiency-roadmap.md](../roadmap/lime-conversation-execution-efficiency-roadmap.md) 的 compat 历史档案化已完成;当前又收口了 `TurnInputEnvelope -> SessionConfig` 的 turn context 分叉、`action_runtime` 辅助恢复链旁路,并显式化了 `compact_session` 控制回合的最小上下文边界;剩余散落在 `persona_cmd` / `theme_context_cmd` 的一次性临时会话配置也已收回专用 helper,零入口旧发送壳已删除,Tauri 命令层 raw execution 也已经固定为 3 处并补了源码扫描守卫。下一刀转向继续盘点 `src-tauri/src` 非命令层与 README/示例面是否还残留会误导实现者的原始执行旁路叙事
- `docs/roadmap/reliability/*` 与 [lime-aster-codex-alignment-roadmap.md](../roadmap/lime-aster-codex-alignment-roadmap.md) 的 compat 历史档案化已完成;其中原 `state-model` 与 `conversation-execution-efficiency` 子专题已经并入 `alignment-roadmap`。当前又收口了 `TurnInputEnvelope -> SessionConfig` 的 turn context 分叉、`action_runtime` 辅助恢复链旁路,并显式化了 `compact_session` 控制回合的最小上下文边界;剩余散落在 `persona_cmd` / `theme_context_cmd` 的一次性临时会话配置也已收回专用 helper,零入口旧发送壳已删除,Tauri 命令层 raw execution 也已经固定为 3 处并补了源码扫描守卫。下一刀转向继续盘点 `src-tauri/src` 非命令层与 README/示例面是否还残留会误导实现者的原始执行旁路叙事
- 后续若出现 `runtime_turn` 行为回退,再回到 `M1` current 主路径做定点修复,而不是继续常态化微切
+90
View File
@@ -0,0 +1,90 @@
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<!-- Supreme Lime Gradient: Waxy Emerald Peel cascading into acidic vibrant juice pool -->
<linearGradient id="ringGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#064E3B" /> <!-- Deep Pine/Rind -->
<stop offset="35%" stop-color="#10B981" /> <!-- Emerald Flesh -->
<stop offset="70%" stop-color="#84CC16" /> <!-- Lime Burst -->
<stop offset="100%" stop-color="#D9F99D" /> <!-- Acidic Juice Reflection -->
</linearGradient>
<!-- Star Glow: Intense snapshot of generative inspiration -->
<linearGradient id="starGrad" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#22C55E" />
<stop offset="100%" stop-color="#ECFCCB" /> <!-- Blinding white-green -->
</linearGradient>
<!-- macOS Big Sur Volumetric Glass Extrusion Filter -->
<!-- This dynamic engine reads the exact alpha boundaries and raises perfectly physical 3D bevels -->
<filter id="macOSVolume" x="-15%" y="-15%" width="130%" height="130%">
<!-- 1. Inner Highlight (Light gleaming from Top-Left onto the juicy edges) -->
<feOffset dx="2" dy="2" in="SourceAlpha" result="lightOffset" />
<feComposite operator="out" in="SourceAlpha" in2="lightOffset" result="lightEdge" />
<feFlood flood-color="#ffffff" flood-opacity="0.6" result="lightColor" />
<feComposite operator="in" in="lightColor" in2="lightEdge" result="lightRim" />
<!-- 2. Inner Shadow (Depth and weight settling into the Bottom-Right edges) -->
<feOffset dx="-3" dy="-3" in="SourceAlpha" result="darkOffset" />
<feComposite operator="out" in="SourceAlpha" in2="darkOffset" result="darkEdge" />
<feFlood flood-color="#022C22" flood-opacity="0.5" result="darkColor" />
<feComposite operator="in" in="darkColor" in2="darkEdge" result="darkRim" />
<!-- 3. Classic Apple physical ambient drop shadow -->
<feDropShadow dx="0" dy="16" stdDeviation="20" flood-color="#022C22" flood-opacity="0.15" in="SourceGraphic" result="shadowedGraphic" />
<!-- Merge Everything into one hyper-realistic cohesive object -->
<feMerge>
<feMergeNode in="shadowedGraphic" />
<feMergeNode in="lightRim" />
<feMergeNode in="darkRim" />
</feMerge>
</filter>
<mask id="ringMask">
<rect width="512" height="512" fill="white" />
<!-- Sharp vector segment cuts (The Pith of the Lime) -->
<line x1="256" y1="256" x2="-20" y2="256" stroke="black" stroke-width="14" />
<line x1="256" y1="256" x2="-20" y2="532" stroke="black" stroke-width="14" />
<line x1="256" y1="256" x2="256" y2="532" stroke="black" stroke-width="14" />
</mask>
</defs>
<!-- Apply the mighty macOS rendering engine globally so all elements light perfectly and uniformly -->
<g filter="url(#macOSVolume)">
<!-- Base 3/4 Segmented Ring (The Body of the Citrus) -->
<g mask="url(#ringMask)">
<path d="M 256 56
A 200 200 0 0 0 56 256
A 200 200 0 0 0 256 456
A 200 200 0 0 0 456 256
L 336 256
A 80 80 0 0 1 256 336
A 80 80 0 0 1 176 256
A 80 80 0 0 1 256 176
Z"
fill="url(#ringGrad)" />
</g>
<!-- Core Hub (The Inner Seed) -->
<path d="M 256 220
Q 256 256 292 256
Q 256 256 256 292
Q 256 256 220 256
Q 256 256 256 220 Z"
fill="#10B981" />
<!-- Generation Star (The Spark of Zest bursting out the right side) -->
<path d="M 356 92
Q 356 156 420 156
Q 356 156 356 220
Q 356 156 292 156
Q 356 156 356 92 Z"
fill="url(#starGrad)" />
<!-- Splashing Juice Dew / Secondary Sparks (Lime Context) -->
<circle cx="436" cy="62" r="10" fill="#D9F99D" />
<circle cx="456" cy="100" r="5" fill="#84CC16" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

+8 -2
View File
@@ -1,5 +1,9 @@
# OEM Logo 快速替换指南
> 状态:current oem derivative
> 更新:2026-04-19
> 上游事实源:brand.md、slogan.md
本文用于未来 OEM / 代理商定制时,快速把 Lime 的品牌图替换为代理商品牌图,并尽量让 AI 一次完成主要资产更新。
目标不是讲设计理论,而是提供一条可执行、可复用、低沟通成本的流程。
@@ -129,8 +133,10 @@ oem-logo-splash.png
另外把启动页改成只保留 logo、slogan、进度动画。
新的 slogan 是:
“青柠一下,灵感即来”
副标是:
“从一句想法,到成稿、成图、成片、成事”
产品副标是:
“把一个内容任务推进为可交付结果”
可选说明行是:
“技能起手,灵感入库,生成推进”
```
如果需要统一引用当前确认的品牌方案,优先查看:
-534
View File
@@ -1,534 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ProxyCast Connect 测试页面</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 40px 20px;
}
.container { max-width: 900px; margin: 0 auto; }
h1 { color: white; text-align: center; margin-bottom: 10px; font-size: 2rem; }
.subtitle { color: rgba(255,255,255,0.8); text-align: center; margin-bottom: 40px; }
.tabs {
display: flex; gap: 8px; margin-bottom: 24px;
background: rgba(255,255,255,0.1); padding: 8px; border-radius: 12px;
}
.tab {
flex: 1; padding: 12px 20px; border: none; border-radius: 8px;
font-size: 0.95rem; font-weight: 600; cursor: pointer;
background: transparent; color: rgba(255,255,255,0.7); transition: all 0.2s;
}
.tab.active { background: white; color: #667eea; }
.tab:hover:not(.active) { background: rgba(255,255,255,0.1); color: white; }
.tab-content { display: none; }
.tab-content.active { display: block; }
.card {
background: white; border-radius: 16px; padding: 30px;
margin-bottom: 24px; box-shadow: 0 10px 40px rgba(0,0,0,0.2);
}
.card-title {
font-size: 1.25rem; font-weight: 600; margin-bottom: 20px; color: #1a1a2e;
display: flex; align-items: center; gap: 10px;
}
.card-title::before {
content: ''; width: 4px; height: 24px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 2px;
}
.form-group { margin-bottom: 20px; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 600px) { .form-row { grid-template-columns: 1fr; } }
label { display: block; font-weight: 500; margin-bottom: 8px; color: #374151; }
.label-hint { font-weight: normal; color: #9ca3af; font-size: 0.85rem; }
input, select {
width: 100%; padding: 12px 16px; border: 2px solid #e5e7eb;
border-radius: 10px; font-size: 1rem; transition: border-color 0.2s;
}
input:focus, select:focus { outline: none; border-color: #667eea; }
.btn {
display: inline-flex; align-items: center; gap: 8px;
padding: 14px 28px; border: none; border-radius: 10px;
font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.2s;
}
.btn-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; }
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4); }
.btn-secondary { background: #f3f4f6; color: #374151; }
.btn-secondary:hover { background: #e5e7eb; }
.btn-group { display: flex; gap: 12px; flex-wrap: wrap; }
.result-box {
background: #f8fafc; border: 2px dashed #e2e8f0;
border-radius: 10px; padding: 20px; margin-top: 20px;
}
.result-box.success { background: #ecfdf5; border-color: #10b981; border-style: solid; }
.result-label { font-size: 0.875rem; color: #64748b; margin-bottom: 8px; }
.result-url {
font-family: 'Monaco', 'Menlo', monospace; font-size: 0.875rem;
word-break: break-all; color: #1e293b; background: white;
padding: 12px; border-radius: 8px; border: 1px solid #e2e8f0;
}
.quick-test {
display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 12px; margin-top: 20px;
}
.quick-test-btn {
padding: 16px; background: #f8fafc; border: 2px solid #e2e8f0;
border-radius: 12px; cursor: pointer; transition: all 0.2s; text-align: left;
}
.quick-test-btn:hover { border-color: #667eea; background: #f0f4ff; }
.quick-test-btn .name { font-weight: 600; color: #1a1a2e; margin-bottom: 4px; }
.quick-test-btn .desc { font-size: 0.875rem; color: #64748b; }
.tips {
background: #fffbeb; border: 1px solid #fcd34d;
border-radius: 10px; padding: 16px; margin-top: 20px;
}
.tips.info { background: #eff6ff; border-color: #3b82f6; }
.tips-title { font-weight: 600; color: #92400e; margin-bottom: 8px; }
.tips.info .tips-title { color: #1d4ed8; }
.tips-content { font-size: 0.875rem; color: #a16207; line-height: 1.6; }
.tips.info .tips-content { color: #1e40af; }
.log-container {
max-height: 300px; overflow-y: auto; background: #1a1a2e;
border-radius: 10px; padding: 16px; margin-top: 16px;
}
.log-entry {
font-family: 'Monaco', 'Menlo', monospace; font-size: 0.8rem;
color: #a0aec0; margin-bottom: 8px; padding-bottom: 8px; border-bottom: 1px solid #2d3748;
}
.log-entry:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.log-entry .time { color: #718096; }
.log-entry .type { padding: 2px 6px; border-radius: 4px; font-size: 0.7rem; margin: 0 8px; }
.log-entry .type.info { background: #3182ce; color: white; }
.log-entry .type.success { background: #38a169; color: white; }
.log-entry .type.error { background: #e53e3e; color: white; }
.log-entry .message { color: #e2e8f0; }
.toast {
position: fixed; bottom: 20px; right: 20px; background: #1a1a2e;
color: white; padding: 12px 20px; border-radius: 8px;
opacity: 0; transform: translateY(20px); transition: all 0.3s; z-index: 1000;
}
.toast.show { opacity: 1; transform: translateY(0); }
.toast.success { background: #10b981; }
.toast.error { background: #ef4444; }
.status-badge {
display: inline-flex; align-items: center; gap: 6px;
padding: 4px 12px; border-radius: 20px; font-size: 0.8rem; font-weight: 500;
}
.status-badge.success { background: #dcfce7; color: #166534; }
.status-badge.cancelled { background: #fef3c7; color: #92400e; }
.status-badge.error { background: #fee2e2; color: #991b1b; }
</style>
</head>
<body>
<div class="container">
<h1>🔗 ProxyCast Connect 测试</h1>
<p class="subtitle">模拟中转商后台的一键配置功能 & Webhook 回调测试</p>
<div class="tabs">
<button class="tab active" onclick="switchTab('deeplink')">🚀 Deep Link 测试</button>
<button class="tab" onclick="switchTab('webhook')">📤 Webhook 回调</button>
<button class="tab" onclick="switchTab('docs')">📖 使用说明</button>
</div>
<!-- Deep Link 测试标签页 -->
<div id="tab-deeplink" class="tab-content active">
<div class="card">
<h2 class="card-title">自定义测试</h2>
<div class="form-row">
<div class="form-group">
<label for="relay">中转商 ID (relay) <span class="label-hint">必填</span></label>
<input type="text" id="relay" placeholder="例如: openrouter" value="openrouter">
</div>
<div class="form-group">
<label for="key">API Key <span class="label-hint">必填</span></label>
<input type="text" id="key" placeholder="例如: sk-or-v1-xxxx" value="sk-test-1234567890">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="name">Key 名称 <span class="label-hint">可选</span></label>
<input type="text" id="name" placeholder="例如: 我的主账号" value="测试Key">
</div>
<div class="form-group">
<label for="ref">推广码 <span class="label-hint">可选,用于统计</span></label>
<input type="text" id="ref" placeholder="例如: promo2024">
</div>
</div>
<div class="btn-group">
<button class="btn btn-primary" onclick="openDeepLink()">🚀 一键配置 ProxyCast</button>
<button class="btn btn-secondary" onclick="generateLink()">📋 生成链接</button>
</div>
<div class="result-box" id="resultBox" style="display: none;">
<div class="result-label">生成的 Deep Link:</div>
<div class="result-url" id="resultUrl"></div>
<button class="btn btn-secondary" style="margin-top: 12px; padding: 8px 16px; font-size: 0.875rem;" onclick="copyLink()">复制链接</button>
</div>
</div>
<div class="card">
<h2 class="card-title">快速测试场景</h2>
<div class="quick-test">
<button class="quick-test-btn" onclick="quickTest('openrouter', 'sk-or-v1-test123', 'OpenRouter测试', '')">
<div class="name">✅ OpenRouter</div>
<div class="desc">正常配置流程</div>
</button>
<button class="quick-test-btn" onclick="quickTest('siliconflow', 'sk-sf-test456', '硅基流动测试', 'promo2024')">
<div class="name">✅ 硅基流动 + 推广码</div>
<div class="desc">带推广码的配置</div>
</button>
<button class="quick-test-btn" onclick="quickTest('unknown-relay', 'sk-unknown', '未知中转', '')">
<div class="name">❌ 未注册中转商</div>
<div class="desc">测试错误处理</div>
</button>
<button class="quick-test-btn" onclick="quickTest('openrouter', '', '', '')">
<div class="name">❌ 缺少 Key</div>
<div class="desc">测试参数校验</div>
</button>
</div>
</div>
</div>
<!-- Webhook 回调测试标签页 -->
<div id="tab-webhook" class="tab-content">
<div class="card">
<h2 class="card-title">Webhook 回调测试</h2>
<p style="color: #64748b; margin-bottom: 20px;">模拟 ProxyCast 发送的统计回调请求</p>
<div class="form-row">
<div class="form-group">
<label for="callbackUrl">回调地址 (Callback URL) <span class="label-hint">必填</span></label>
<input type="text" id="callbackUrl" placeholder="https://api.myrelay.com/proxycast/callback">
</div>
<div class="form-group">
<label for="callbackRelay">中转商 ID</label>
<input type="text" id="callbackRelay" placeholder="openrouter" value="openrouter">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="callbackStatus">回调状态</label>
<select id="callbackStatus">
<option value="success">✅ success - 配置成功</option>
<option value="cancelled">⚠️ cancelled - 用户取消</option>
<option value="error">❌ error - 配置失败</option>
</select>
</div>
<div class="form-group">
<label for="callbackRef">推广码 (ref) <span class="label-hint">可选</span></label>
<input type="text" id="callbackRef" placeholder="promo2024" value="promo2024">
</div>
</div>
<div class="form-group">
<label for="callbackKeyPrefix">Key 前缀 <span class="label-hint">脱敏后的 Key(前 7 位)</span></label>
<input type="text" id="callbackKeyPrefix" placeholder="sk-or-v" value="sk-or-v" maxlength="7">
</div>
<div class="btn-group">
<button class="btn btn-primary" onclick="sendCallback()">📤 发送回调</button>
<button class="btn btn-secondary" onclick="generateCallbackPayload()">📋 生成 Payload</button>
<button class="btn btn-secondary" onclick="clearLogs()">🗑️ 清空日志</button>
</div>
<div class="result-box" id="callbackResultBox" style="display: none;">
<div class="result-label">回调 Payload:</div>
<pre class="result-url" id="callbackPayload" style="white-space: pre-wrap; font-size: 0.8rem;"></pre>
</div>
<div style="margin-top: 24px;">
<div class="result-label">请求日志:</div>
<div class="log-container" id="logContainer">
<div class="log-entry">
<span class="time">[--:--:--]</span>
<span class="type info">INFO</span>
<span class="message">等待发送回调请求...</span>
</div>
</div>
</div>
<div class="tips info" style="margin-top: 20px;">
<div class="tips-title">💡 验证说明</div>
<div class="tips-content">
由于 ProxyCast 是开源软件,不使用签名验证。<br>
中转商应通过检查 <code>key_prefix</code> 是否为自己下发的 Key 来验证请求。
</div>
</div>
</div>
<div class="card">
<h2 class="card-title">回调字段说明</h2>
<table style="width: 100%; border-collapse: collapse;">
<thead>
<tr style="border-bottom: 2px solid #e5e7eb;">
<th style="padding: 12px 0; text-align: left; color: #374151;">字段</th>
<th style="padding: 12px 0; text-align: left; color: #374151;">说明</th>
</tr>
</thead>
<tbody>
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 10px 0; font-family: monospace;">status</td>
<td style="padding: 10px 0;">
<span class="status-badge success">success</span>
<span class="status-badge cancelled">cancelled</span>
<span class="status-badge error">error</span>
</td>
</tr>
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 10px 0; font-family: monospace;">relay_id</td>
<td style="padding: 10px 0; color: #64748b;">中转商 ID</td>
</tr>
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 10px 0; font-family: monospace;">key_prefix</td>
<td style="padding: 10px 0; color: #64748b;">Key 前缀(脱敏,仅前 7 位)- 用于验证</td>
</tr>
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 10px 0; font-family: monospace;">ref</td>
<td style="padding: 10px 0; color: #64748b;">推广码(可选)</td>
</tr>
<tr>
<td style="padding: 10px 0; font-family: monospace;">client</td>
<td style="padding: 10px 0; color: #64748b;">客户端信息 {version, platform}</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 使用说明标签页 -->
<div id="tab-docs" class="tab-content">
<div class="card">
<h2 class="card-title">Deep Link 协议</h2>
<div style="margin-bottom: 20px;">
<h3 style="font-size: 1rem; margin-bottom: 12px; color: #374151;">协议格式</h3>
<div class="result-url">proxycast://connect?relay={relay_id}&key={api_key}&name={key_name}&ref={ref_code}</div>
</div>
<table style="width: 100%; border-collapse: collapse;">
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 10px 0; font-weight: 500; font-family: monospace;">relay</td>
<td style="padding: 10px 0; color: #ef4444; font-weight: 500;">必填</td>
<td style="padding: 10px 0; color: #64748b;">中转商 ID</td>
</tr>
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 10px 0; font-weight: 500; font-family: monospace;">key</td>
<td style="padding: 10px 0; color: #ef4444; font-weight: 500;">必填</td>
<td style="padding: 10px 0; color: #64748b;">API Key</td>
</tr>
<tr style="border-bottom: 1px solid #e5e7eb;">
<td style="padding: 10px 0; font-weight: 500; font-family: monospace;">name</td>
<td style="padding: 10px 0; color: #64748b;">可选</td>
<td style="padding: 10px 0; color: #64748b;">Key 显示名称</td>
</tr>
<tr>
<td style="padding: 10px 0; font-weight: 500; font-family: monospace;">ref</td>
<td style="padding: 10px 0; color: #64748b;">可选</td>
<td style="padding: 10px 0; color: #64748b;">推广码</td>
</tr>
</table>
<div class="tips">
<div class="tips-title">💡 测试前提</div>
<div class="tips-content">
1. 确保 ProxyCast 应用已安装并运行<br>
2. 确保 Deep Link 协议已正确注册<br>
3. 如果点击无反应,检查浏览器是否阻止了协议跳转
</div>
</div>
</div>
<div class="card">
<h2 class="card-title">相关链接</h2>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px;">
<a href="https://github.com/aiclientproxy/connect" target="_blank" class="quick-test-btn" style="text-decoration: none;">
<div class="name">📦 中转商注册仓库</div>
<div class="desc">提交 PR 注册中转商</div>
</a>
<a href="https://proxycast.dev/docs/open-platform/connect" target="_blank" class="quick-test-btn" style="text-decoration: none;">
<div class="name">📖 Connect 文档</div>
<div class="desc">详细的接入指南</div>
</a>
</div>
</div>
</div>
</div>
<div class="toast" id="toast"></div>
<script>
// Tab 切换
function switchTab(tabId) {
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
document.querySelector(`[onclick="switchTab('${tabId}')"]`).classList.add('active');
document.getElementById(`tab-${tabId}`).classList.add('active');
}
// 生成 Deep Link
function generateDeepLink() {
const relay = document.getElementById('relay').value.trim();
const key = document.getElementById('key').value.trim();
const name = document.getElementById('name').value.trim();
const ref = document.getElementById('ref').value.trim();
if (!relay) { showToast('请输入中转商 ID', 'error'); return null; }
if (!key) { showToast('请输入 API Key', 'error'); return null; }
let url = `proxycast://connect?relay=${encodeURIComponent(relay)}&key=${encodeURIComponent(key)}`;
if (name) url += `&name=${encodeURIComponent(name)}`;
if (ref) url += `&ref=${encodeURIComponent(ref)}`;
return url;
}
// 打开 Deep Link
function openDeepLink() {
const url = generateDeepLink();
if (url) {
window.location.href = url;
showToast('正在打开 ProxyCast...', 'success');
}
}
// 生成并显示链接
function generateLink() {
const url = generateDeepLink();
if (url) {
document.getElementById('resultUrl').textContent = url;
document.getElementById('resultBox').style.display = 'block';
document.getElementById('resultBox').classList.add('success');
}
}
// 复制链接
function copyLink() {
const url = document.getElementById('resultUrl').textContent;
navigator.clipboard.writeText(url).then(() => {
showToast('链接已复制', 'success');
});
}
// 快速测试
function quickTest(relay, key, name, ref) {
document.getElementById('relay').value = relay;
document.getElementById('key').value = key;
document.getElementById('name').value = name;
document.getElementById('ref').value = ref;
openDeepLink();
}
// Toast 提示
function showToast(message, type = 'info') {
const toast = document.getElementById('toast');
toast.textContent = message;
toast.className = `toast show ${type}`;
setTimeout(() => toast.classList.remove('show'), 3000);
}
// 添加日志
function addLog(type, message) {
const container = document.getElementById('logContainer');
const time = new Date().toLocaleTimeString();
const entry = document.createElement('div');
entry.className = 'log-entry';
entry.innerHTML = `
<span class="time">[${time}]</span>
<span class="type ${type}">${type.toUpperCase()}</span>
<span class="message">${message}</span>
`;
container.appendChild(entry);
container.scrollTop = container.scrollHeight;
}
// 清空日志
function clearLogs() {
const container = document.getElementById('logContainer');
container.innerHTML = `
<div class="log-entry">
<span class="time">[--:--:--]</span>
<span class="type info">INFO</span>
<span class="message">日志已清空</span>
</div>
`;
}
// 生成回调 Payload
function generateCallbackPayload() {
const payload = buildCallbackPayload();
if (payload) {
document.getElementById('callbackPayload').textContent = JSON.stringify(payload, null, 2);
document.getElementById('callbackResultBox').style.display = 'block';
}
}
// 构建回调 Payload
function buildCallbackPayload() {
const relay = document.getElementById('callbackRelay').value.trim();
const status = document.getElementById('callbackStatus').value;
const ref = document.getElementById('callbackRef').value.trim();
const keyPrefix = document.getElementById('callbackKeyPrefix').value.trim();
if (!relay) { showToast('请输入中转商 ID', 'error'); return null; }
if (!keyPrefix) { showToast('请输入 Key 前缀', 'error'); return null; }
const payload = {
event: 'connect',
status: status,
relay_id: relay,
key_prefix: keyPrefix.substring(0, 7),
timestamp: new Date().toISOString(),
client: {
version: '0.29.0',
platform: 'web-test'
}
};
if (ref) payload.ref_code = ref;
if (status === 'error') {
payload.error_code = 'TEST_ERROR';
payload.error_message = '测试错误消息';
}
return payload;
}
// 发送回调
async function sendCallback() {
const url = document.getElementById('callbackUrl').value.trim();
if (!url) { showToast('请输入回调地址', 'error'); return; }
if (!url.startsWith('https://')) { showToast('回调地址必须使用 HTTPS', 'error'); return; }
const payload = buildCallbackPayload();
if (!payload) return;
addLog('info', `发送回调到: ${url}`);
addLog('info', `Payload: ${JSON.stringify(payload)}`);
try {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'User-Agent': 'ProxyCast/0.29.0 (Test)'
},
body: JSON.stringify(payload)
});
if (response.ok) {
addLog('success', `回调成功! HTTP ${response.status}`);
showToast('回调发送成功', 'success');
} else {
addLog('error', `回调失败: HTTP ${response.status}`);
showToast(`回调失败: HTTP ${response.status}`, 'error');
}
} catch (error) {
addLog('error', `网络错误: ${error.message}`);
showToast('网络错误,请检查回调地址', 'error');
}
}
</script>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+10 -10
View File
@@ -5,7 +5,7 @@
> 文档版本:v1.0
> 状态:Draft
> 更新时间:2026-04-06
> 适用范围:`image_generate` skill、`lime-cli`、媒体任务协议、Claw 对话框、图片工作台
> 适用范围:`image_generate` skill、`lime-cli`、媒体任务协议、聊天区、图片工作台
> 目标读者:产品、前端、Rust/CLI、测试
---
@@ -19,12 +19,12 @@
1. `@配图` 前端快路径
已具备占位反馈、图片卡、图片工作台展开等体验,但真相源偏前端本地运行时。
2. `image_generate` skill 任务路径
已具备稳定的任务创建能力,能输出 `task_id / task_type / path / status`,但当前只做到“提交任务”,没有把任务状态与结果动态回流到 Claw 对话框。
已具备稳定的任务创建能力,能输出 `task_id / task_type / path / status`,但当前只做到“提交任务”,没有把任务状态与结果动态回流到聊天区。
这导致三个核心问题:
1. **能力割裂**:前端快路径与 skill 任务路径体验不一致。
2. **黑盒感强**:用户在 Claw 中看不到真实生成进度与真实结果替换。
2. **黑盒感强**:用户在聊天区中看不到真实生成进度与真实结果替换。
3. **难以组合与测试**:如果图片生成过程继续停留在某个前端页面或某个 skill 内部,就很难在自动化、批处理、队列、重试、回放中复用。
本 PRD 的目标是把图片生成正式收敛为一条异步、解耦、标准化的主链:
@@ -40,7 +40,7 @@
### 2.1 产品目标
1. 让用户在 Claw 对话框中发起图片 skill 后,立即看到可感知的动态反馈。
1. 让用户在聊天区中发起图片 skill 后,立即看到可感知的动态反馈。
2. 让图片 skill 与正文配图、封面、自动化、未来 worker 共用同一套任务协议。
3. 让图片任务具备标准生命周期:创建、排队、执行、成功、失败、重试、取消、恢复。
4. 让前端显示的是“真实任务状态”,而不是 assistant 文案猜测。
@@ -63,7 +63,7 @@
### 3.2 Task File 是唯一真相源
图片任务的状态、结果、错误、来源关系都必须落到标准 task file 或其等价协议存储中。Claw、工作台、CLI、测试统一读取这一事实源。
图片任务的状态、结果、错误、来源关系都必须落到标准 task file 或其等价协议存储中。聊天区、工作台、CLI、测试统一读取这一事实源。
### 3.3 前端是观察者,不是执行器
@@ -95,9 +95,9 @@
## 四、用户体验目标
## 4.1 Claw 对话框中的图片任务体验
## 4.1 聊天区中的图片任务体验
用户在 Claw 中触发 `image_generate` 后,系统行为应如下:
用户在聊天区中触发 `image_generate` 后,系统行为应如下:
1. 立即创建图片任务。
2. 聊天区立即出现一张图片任务卡。
@@ -147,7 +147,7 @@
```mermaid
graph TD
USER[用户 / Claw 对话框] --> SKILL[image_generate skill]
USER[用户 / 聊天区] --> SKILL[image_generate skill]
SKILL --> CLI[CLI / Task API]
CLI --> TASKFILE[Task File / 标准任务协议]
WORKER[图片执行器 / Worker] --> TASKFILE
@@ -512,7 +512,7 @@ skill 输出的语义是:
### 11.1 用户体验验收
1. 用户在 Claw 中通过图片 skill 发起任务后,聊天区立刻出现图片占位卡。
1. 用户在聊天区中通过图片 skill 发起任务后,聊天区立刻出现图片占位卡。
2. 任务执行中,占位卡保持动态渲染,不出现“无反馈空窗”。
3. 任务成功后,占位卡自动替换为真实图片。
4. 点击成功图片可以打开图片工作台或图片画布。
@@ -551,7 +551,7 @@ skill 输出的语义是:
- 暴露前端任务读取接口
- 保证执行器会写回结果与错误
### Phase 2:Claw 聊天区动态卡
### Phase 2:聊天区动态卡
- 监听任务创建
- 插入占位图片卡
+7 -8
View File
@@ -14,7 +14,7 @@ Lime 当前已经具备一套轻量 task file 底座,能够覆盖:
- `typesetting`
- `modal_resource_search`
现有协议已经解决了“任务创建、状态读取、简单重试”的基础问题,但当 Lime 开始把图片生成、图片编辑、视频生成、视频编辑、自动化工作流、Claw 动态渲染统一收口到同一条主线时,现有 task file 还存在四类缺口:
现有协议已经解决了“任务创建、状态读取、简单重试”的基础问题,但当 Lime 开始把图片生成、图片编辑、视频生成、视频编辑、自动化工作流、聊天区动态渲染统一收口到同一条主线时,现有 task file 还存在四类缺口:
1. **顶层字段不够稳定**
- 现在更像“任务记录壳”,还不是“统一任务协议信封”
@@ -27,7 +27,7 @@ Lime 当前已经具备一套轻量 task file 底座,能够覆盖:
这会直接影响后续几条主线:
- Claw 对话框中的动态占位图与结果替换
- 聊天区中的动态占位图与结果替换
- 图片生成 / 图片编辑 / 视频生成 / 视频编辑的统一观察面
- 队列、重试、幂等、恢复、诊断能力
- 类似竞品“统一任务面板”的可交付体验
@@ -297,7 +297,7 @@ Lime 当前已经具备一套轻量 task file 底座,能够覆盖:
如果每次重试都新建任务文件,会带来这些问题:
- 前端需要在旧卡片和新卡片之间重新绑定
- Claw 动态替换更复杂
- 聊天区动态替换更复杂
- 统一任务列表会出现大量碎片任务
- “这其实还是同一个任务”的语义丢失
@@ -561,7 +561,7 @@ Lime 当前已经具备一套轻量 task file 底座,能够覆盖:
## 10. 进度、错误与 UI 提示
为了支撑 Claw 动态占位与结果替换,task file 不能只提供最终状态,还必须提供“可渲染的运行时信息”。
为了支撑聊天区动态占位与结果替换,task file 不能只提供最终状态,还必须提供“可渲染的运行时信息”。
## 10.1 `progress`
@@ -716,7 +716,7 @@ Lime 当前已经具备一套轻量 task file 底座,能够覆盖:
流程:
1. 用户在 Claw 中触发 `image_generate`
1. 用户在聊天区中触发 `image_generate`
2. 创建 `task_family=image / task_type=image_generate`
3. `relationships.slot_id` 绑定正文占位块
4. 前端先显示占位图
@@ -779,7 +779,7 @@ Lime 当前已经具备一套轻量 task file 底座,能够覆盖:
并且保证:
- Claw、CLI、worker 读到的是同一份状态
- 聊天区、CLI、worker 读到的是同一份状态
- 可以支撑统一任务面板,而不需要第二套状态系统
---
@@ -831,5 +831,4 @@ task file 应该被设计成 Lime 的统一任务协议,而不是某个业务
- **父子任务与依赖关系**
- **结构化进度、错误、UI 提示**
这样 Lime 才能把图片生成、图片编辑、视频生成、视频编辑、Claw 动态渲染、CLI、worker、统一任务面板全部收敛到同一条主链。
这样 Lime 才能把图片生成、图片编辑、视频生成、视频编辑、聊天区动态渲染、CLI、worker、统一任务面板全部收敛到同一条主链。
File diff suppressed because it is too large Load Diff
@@ -1,8 +1,10 @@
# Lime 服务型技能:端优先执行、云配置同步 PRD
> 状态:提案
> 更新时间:2026-03-24
> 状态:current supporting cross-repo plan
> 更新时间:2026-04-19
> 当前主规划:`docs/roadmap/limenextv2/README.md`
> 目标:吸收 Ribbi 式服务型技能入口的产品方法,但保持 Lime 的端优先执行与低云成本架构
> 作用域:本文只保留服务型技能在 `lime` / `limecore` 之间的产品对象、目录分层与执行边界,不替代 `docs/aiprompts/command-runtime.md`、`docs/aiprompts/limecore-collaboration-entry.md` 与 `limecore/docs/api/lime-client-integration.md`
## 1. 文档依据
@@ -10,25 +12,46 @@
`lime` 侧主要事实源:
- `src/components/agent/chat/index.tsx`
- `src/components/agent/chat/components/EmptyState.tsx`
- `src-tauri/src/skills/README.md`
- `src-tauri/src/services/automation_service/mod.rs`
- `src-tauri/src/services/execution_tracker_service.rs`
- `src/lib/api/serviceSkills.ts`
- `src/lib/serviceSkillCatalogBootstrap.ts`
- `src/hooks/useOemCloudAccess.ts`
- `src/components/agent/chat/workspace/serviceSkillSceneLaunch.ts`
- `src/components/agent/chat/workspace/useWorkspaceSendActions.ts`
- `docs/aiprompts/command-runtime.md`
`limecore` 侧主要事实源:
- `docs/api/lime-client-integration.md`
- `docs/aiprompts/lime-limecore-collaboration.md`
- `services/control-plane-svc/internal/model/client_bootstrap.go`
- `services/control-plane-svc/internal/controller/public_client.go`
- `services/scene-orchestrator-svc/README.md`
- `services/control-plane-svc/internal/model/commercial.go`
关键环境事实:
1. `lime` 已有任务入口、技能执行链、自动化调度链、执行追踪链。
2. `limecore` 已有 `control-plane-svc / gateway-svc / scene-orchestrator-svc`,并已有客户端 bootstrap 聚合接口。
3. `bootstrap.serviceCatalog` 现有语义偏商业服务目录,不适合直接承载新的服务型技能目录。
4. `scene-orchestrator-svc` 已定位为 Scene 运行时服务,但不应在本方案中演进为默认主执行流。
2. `limecore` 已有 `control-plane-svc / gateway-svc / scene-orchestrator-svc`,并已提供 `client/bootstrap`、`client/skills`、`client/service-skills`。
3. `client/bootstrap` 当前已同时返回 `skillCatalog` 与 `serviceSkillCatalog`:
- `skillCatalog.entries` 是统一命令发现协议
- `serviceSkillCatalog` 是完整服务型技能目录
- `serviceCatalog` 仍保持商业服务目录语义,不应混用
4. `lime` 当前已消费在线目录并保留 seeded / fallback 韧性兜底,不再只依赖客户端静态常量。
5. `scene-orchestrator-svc` 已定位为 Scene 运行时服务,但不应在本方案中演进为普通任务的默认主执行流。
## 1.1 当前吸收结果(2026-04-19)
这份 PRD 的核心判断已经被 current 主链部分吸收:
1. `limecore` 负责在线目录事实源:
- `bootstrap.skillCatalog`
- `bootstrap.serviceSkillCatalog`
- `GET /api/v1/public/tenants/:tenantId/client/skills`
- `GET /api/v1/public/tenants/:tenantId/client/service-skills`
2. `lime` 负责本地 catalog 同步、seeded fallback、补参启动与执行路由。
3. `skillCatalog.entries` 负责统一 `@ / / skill` 发现协议;`serviceSkillCatalog` 继续保留完整服务型技能目录,不与 `serviceCatalog` 混用。
因此,本文今天更适合作为跨仓产品边界说明,而不是单独的待落地提案。
## 2. 背景与问题
@@ -117,17 +140,22 @@ Ribbi 这类产品最值得借鉴的,不是“49 个技能入口”或“看
## 5.2 ServiceSkillCatalog
新的客户端目录字段命名为:
当前客户端目录已经分成两层:
`serviceSkillCatalog`
1. `skillCatalog`
- 聚合后的技能中心目录
- `entries` 负责统一命令发现协议
2. `serviceSkillCatalog`
- 完整服务型技能目录
- 适合技能发布、诊断、细粒度刷新与运行时绑定解析
而不是复用现有 `bootstrap.serviceCatalog`。
`serviceSkillCatalog` 仍然不应复用 `serviceCatalog`。
原因:
- 现有 `serviceCatalog` 在 `limecore` 中偏商业服务目录与计费目录
- 新目录是客户端任务入口目录,语义不同
- 强行复用会让商业服务和服务型技能混成一层
- `serviceCatalog` 在 `limecore` 中仍偏商业服务目录与计费目录
- `skillCatalog` 与 `serviceSkillCatalog` 分别承担“统一发现”和“完整目录”两种不同职责
- 强行混用会让商业服务、通用技能与服务型技能重新打成一团
建议结构:
@@ -249,10 +277,11 @@ flowchart TB
### `limecore control-plane-svc` 负责
- `serviceSkillCatalog` 下发
- `bootstrap.skillCatalog` 与 `bootstrap.serviceSkillCatalog` 聚合
- `client/skills` 与 `client/service-skills` 下发
- OEM/租户级目录配置
- 开关、排序、默认参数、版本
- 客户端 bootstrap 聚合
- 客户端 bootstrap 聚合与目录事实源发布
### `limecore scene-orchestrator-svc` 负责
@@ -280,7 +309,7 @@ sequenceDiagram
User->>Lime: 启动客户端
Lime->>CP: GET /client/bootstrap
alt 拉取成功
CP-->>Lime: bootstrap + serviceSkillCatalog
CP-->>Lime: bootstrap(skillCatalog + serviceSkillCatalog)
Lime->>Cache: 写入目录缓存(version, syncedAt, items)
Lime-->>User: 首页展示云目录服务项
else 拉取失败
@@ -493,7 +522,7 @@ flowchart LR
### Phase 1:目录与即时执行
- `limecore` 下发 `serviceSkillCatalog`
- `limecore` 下发 `skillCatalog.entries` 与 `serviceSkillCatalog`
- `lime` 接收并缓存云目录
- 首页展示服务型技能卡片
- 跑通 `instant + client_default`
@@ -514,7 +543,7 @@ flowchart LR
满足以下条件视为本 PRD 成立:
1. 客户端可从 bootstrap 读取独立的 `serviceSkillCatalog`。
1. 客户端可从 `bootstrap.skillCatalog + bootstrap.serviceSkillCatalog` 读取统一发现目录与完整服务型技能目录。
2. 云目录可本地缓存,离线时可回退展示。
3. 首页可直接启动服务型技能,而不是先选模型和能力开关。
4. 参数采集由 `slotSchema` 驱动,而不是纯 prompt 注入。
@@ -528,7 +557,7 @@ flowchart LR
1. 客户端职责膨胀风险
- 如果目录、参数采集、执行、任务中心同时无边界扩张,客户端仍会变重
2. 术语冲突风险
- `serviceCatalog / sceneCatalog / serviceSkillCatalog` 若不统一,会让实现和产品都混乱
- `serviceCatalog / skillCatalog / serviceSkillCatalog / sceneCatalog` 若不统一,会让实现和产品都混乱
3. 本地调度可靠性风险
- `scheduled / managed` 留在本地会受到应用在线状态影响
4. 云执行漂移风险