mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-09-24 23:10:56 +08:00
feat: sync latest workspace changes
This commit is contained in:
+23
-9
@@ -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`
|
||||
|
||||
## 维护原则
|
||||
|
||||
|
||||
@@ -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` 主文档:
|
||||
|
||||
@@ -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 一次性命令。
|
||||
|
||||
|
||||
@@ -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 与资源页如何协同
|
||||
@@ -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. 将新结果再次沉淀回资源库
|
||||
|
||||
### 只看某类素材
|
||||
|
||||
在资源页切换分类视图,可只看文档、图片、语音或视频。
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
title: 提示词模板
|
||||
description: 管理可复用提示词,提升稳定产出效率
|
||||
navigation:
|
||||
icon: i-heroicons-document-text
|
||||
---
|
||||
|
||||
# 提示词模板
|
||||
|
||||
提示词模板用于把“经常重复的表达方式”沉淀下来,减少每次从零开始。
|
||||
|
||||
## 模板结构建议
|
||||
|
||||
每个模板建议包含:
|
||||
|
||||
- 名称(便于检索)
|
||||
- 使用场景(何时用)
|
||||
- 模板正文(可复用)
|
||||
- 变量占位(可选)
|
||||
|
||||
## 示例:短视频口播模板
|
||||
|
||||
```text
|
||||
你是一名内容策划。
|
||||
请基于主题「{{topic}}」生成一段 {{duration}} 秒口播稿,要求:
|
||||
1. 开头 3 秒有抓力
|
||||
2. 中段给出 3 个关键点
|
||||
3. 结尾有明确行动引导
|
||||
语气风格:{{tone}}
|
||||
```
|
||||
|
||||
## 推荐组织方式
|
||||
|
||||
- 按主题分类:社媒、短视频、小说、办公
|
||||
- 按阶段分类:灵感、初稿、润色、发布
|
||||
- 统一标签:例如 `#高频`、`#可复用`
|
||||
|
||||
## 使用建议
|
||||
|
||||
### 一次只优化一个模板
|
||||
|
||||
避免同时改太多模板,难以判断效果。
|
||||
|
||||
### 模板要留“可变空间”
|
||||
|
||||
把固定规则写清楚,把创意部分留给变量。
|
||||
|
||||
### 和项目结合
|
||||
|
||||
在项目中沉淀效果好的模板,后续同类任务可直接复用。
|
||||
@@ -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. 定期清理低使用技能,保持列表可维护
|
||||
@@ -1,60 +0,0 @@
|
||||
---
|
||||
title: 设置
|
||||
description: 管理应用偏好、导航模块和进阶系统选项
|
||||
navigation:
|
||||
icon: i-heroicons-cog-6-tooth
|
||||
---
|
||||
|
||||
# 设置
|
||||
|
||||
设置页用于管理你的创作体验与系统行为。
|
||||
|
||||
## 通用
|
||||
|
||||
常见选项:
|
||||
|
||||
- 主题模式(浅色 / 深色 / 跟随系统)
|
||||
- 语言选择
|
||||
- 启动行为(开机自启动、最小化到托盘)
|
||||
- 声音反馈开关
|
||||
|
||||
## 创作与导航偏好
|
||||
|
||||
你可以按使用习惯定制入口:
|
||||
|
||||
- 启用或停用工作区主题(如社媒、短视频、小说)
|
||||
- 启用或停用导航模块(如 AI Agent、项目、资源、设置、插件)
|
||||
|
||||
这样可以让侧边栏更聚焦,减少干扰。
|
||||
|
||||
## 连接与系统
|
||||
|
||||
系统相关设置在这里管理:
|
||||
|
||||
- 连接与网络代理
|
||||
- 安全与证书
|
||||
- 存储目录与配额
|
||||
- 外部工具联动
|
||||
- 实验室与开发者选项
|
||||
|
||||
## 关于与版本
|
||||
|
||||
在“关于”标签页可以查看:
|
||||
|
||||
- 当前版本号
|
||||
- 更新检查入口
|
||||
- 相关项目信息
|
||||
|
||||
## 建议配置
|
||||
|
||||
### 个人创作者
|
||||
|
||||
- 保留:AI Agent、项目、资源
|
||||
- 关闭:暂时不用的高级模块
|
||||
- 目的:让工作台聚焦在“日常产出”
|
||||
|
||||
### 团队协作
|
||||
|
||||
- 统一主题配置
|
||||
- 固定项目命名规则
|
||||
- 约定资源标签方式
|
||||
@@ -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
|
||||
|
||||
@@ -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. 变更档案后记录用途,避免后续混乱
|
||||
@@ -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. 最后再检查具体调用参数、环境变量和外部依赖
|
||||
|
||||
@@ -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/*` 页面。
|
||||
|
||||
@@ -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. 检查网络连接
|
||||
@@ -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 | 服务不可用 | 稍后重试 |
|
||||
@@ -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. 账单设置正确
|
||||
@@ -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
|
||||
@@ -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. 检查账号状态
|
||||
@@ -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. 启用配额超限自动切换
|
||||
@@ -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)
|
||||
|
||||
@@ -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!' }]
|
||||
});
|
||||
|
||||
|
||||
@@ -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: 讨论交流
|
||||
@@ -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)。
|
||||
::
|
||||
|
||||
迁移后,开发者文档与用户文档分层更清晰:
|
||||
|
||||
- 开放平台:插件规范、接入流程、生态能力
|
||||
- 用户指南:插件安装与使用
|
||||
@@ -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 或项目维护渠道联系。
|
||||
|
||||
@@ -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`,同步写清最低版本要求
|
||||
|
||||
当前文档只保证“安装链路与字段约束”的说明,不再把尚未稳定的插件生态流程写成既成事实。
|
||||
|
||||
@@ -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
@@ -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 后续统一以“任务是否创建、推进、完成”为核心断言。
|
||||
|
||||
@@ -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 主路径做定点修复,而不是继续常态化微切
|
||||
|
||||
@@ -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
@@ -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 是:
|
||||
“青柠一下,灵感即来”
|
||||
副标是:
|
||||
“从一句想法,到成稿、成图、成片、成事”
|
||||
产品副标是:
|
||||
“把一个内容任务推进为可交付结果”
|
||||
可选说明行是:
|
||||
“技能起手,灵感入库,生成推进”
|
||||
```
|
||||
|
||||
如果需要统一引用当前确认的品牌方案,优先查看:
|
||||
|
||||
@@ -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
@@ -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:聊天区动态卡
|
||||
|
||||
- 监听任务创建
|
||||
- 插入占位图片卡
|
||||
|
||||
@@ -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. 云执行漂移风险
|
||||
|
||||
Reference in New Issue
Block a user