Files
Bundle OKF 0.1 · 7 conceitos · warjiang/LLMToolForge
Open source Repository Open in the app JSON README (API)
About
# Files
- [LLMToolForge](quickstart.md) - A Tauri 2 desktop application for unified LLM tool management — API keys, provider configuration, agent chat, local Unified API gateway, MCP servers, third-party connectors, skills marketplace, SSH terminals, and encrypted storage sync.
# Directories
- [agent](agent/)
- [architecture](architecture/)
- [development](development/)
- [infrastructure](infrastructure/)
- [integrations](integrations/)
- [providers](providers/)
Details
- Kind
- OKF bundles
- Topic
- AI, RAG & memory
- Publisher
- warjiang
- Origin
- okf_github
- Category
- dados
- Version
- 0.1
- Stars
- 2
- Last push
- 2026-09-09T07:12:30Z
- Repository state
- ativo
- Language
- TypeScript
- Added
- 2026-09-08 09:04:14
- Updated
- 2026-09-08 09:04:14
- Origin id
warjiang/LLMToolForge:openwiki/index.md
README
# LLMToolForge
为大模型提供各类工具的统一管理桌面端:**API Key 管理、Skill 管理、MCP 管理、第三方连接器(Connectors)**。
## 技术栈
- **桌面框架**:Tauri 2(Rust + WebView)
- **前端**:React 18 + TypeScript + Vite
- **UI**:shadcn 风格组件 + Tailwind CSS,设计对齐 Vercel [Geist](https://vercel.com/geist) 设计系统(明 / 暗主题)
- **路由 / 状态**:react-router-dom + zustand
- **本地持久化**:tauri-plugin-store(浏览器开发时自动回退到 localStorage),通过 repository 抽象层封装
## 功能
- **概览(Dashboard)**:各模块统计与快速入口
- **API Keys**:提供商密钥的增删改查,列表掩码展示、一键复制
- **Providers(多 provider 接入)**:统一入口,顶部切换 provider 类型,新增接入时手动选择 provider
- **Volcengine(火山引擎)**:录入 AK/SK,自动拉取账号已开通的模型(推理 Endpoint)与 Ark API Key;模型按 context window / Function Call / 多模态等能力分类展示
- **New API**:OpenAI 兼容网关,录入 Base URL + API Key,通过 `/v1/models` 拉取可用模型
- **LiteLLM**:OpenAI 兼容代理,录入 Base URL + API Key,通过 `/v1/models` 拉取可用模型
- **Agent 聊天**:基于已接入的连接(Volcengine 凭证或 New API / LiteLLM 网关)的对话测试界面,支持 OpenAI Chat 与 Responses(火山引擎)两种请求格式、流式输出、System Prompt / 温度 / Max Tokens 参数,多模态模型可附带图片输入,并可组合 Skill 与工具执行真实对话
- **Unified API(本地统一网关)**:把已接入的各 provider 模型统一暴露为一个本地 HTTP 服务,供 Codex、Claude Code 与本地 agent 直接使用(仅桌面端 Tauri 运行时可启动服务)
- **OpenAI 兼容**:`GET /v1/models`、`POST /v1/chat/completions`(流式 + 非流式)
- **Anthropic 兼容**:`POST /v1/messages`(请求/响应/流式事件与工具调用翻译,供 Claude Code 使用)
- 模型 id 形如 `{连接名}/{model}`,默认全部暴露,可按模型单独开关;可选本地 API Key 校验
- 内置交互式文档:`GET /openapi.json`(OpenAPI 3.1)、`GET /docs`(Redoc)
- 内置接入指南:OpenAI Python / Node SDK、curl、Codex、Claude Code 一键复制示例
- 调用监控:实时调用日志、成功率 / P95 耗时 / token 统计与 SVG 图表,支持过滤、清空、导出(JSON/CSV)
- **Skills**:技能的增删改查、启用开关、标签;支持**从市场安装**——可输入 GitHub 仓库(`owner/repo`)列出其中的 `SKILL.md`,或通过 [skills.sh](https://www.skills.sh) 市场搜索并安装(内容仍从对应 GitHub 仓库拉取)。安装会拉取**整个 skill 目录**(`SKILL.md` + `references/` / 脚本 / 资源等多文件,文本原样保存、二进制经 base64),记录来源与内容哈希以便检测更新(可选配置 GitHub Token 提升请求限额)
- **Agent(基于 Pi 的智能体)**:基于 [`earendil-works/pi`](https://github.com/earendil-works/pi)(`@earendil-works/pi-agent-core` + `@earendil-works/pi-ai`)的真实 agent,支持多轮 tool loop、流式输出与工具的真正执行(仅桌面端可用)
- **模型接入**:经本地 Unified 网关路由(`http://127.0.0.1:<port>/v1`),使用 pi-ai 原生 `openai-completions` provider;运行前需先在 Unified 页面启动网关并启用模型
- **内部工具**:`bash` 与文件工具 `read / write / edit / ls / grep`(Rust 实现),按沙箱模式(read-only / workspace-write / danger-full-access)门控,限定在工作目录内
- **外部工具(MCP)**:把每个启用的 MCP Server 的 Tools 包装为 agent 工具,经现有 `mcp_inspect` / `mcp_call_tool` 真正执行
- **连接器工具(Connectors)**:可选开启 OpenConnector 发现型工具,让 agent 按需检索并执行第三方 Action(凭证由运行时提供,agent 不接触明文)
- **Skill 调用**:Pi 风格——启用的 Skill 以 `<available_skills>` 注入系统提示词,并提供 `load_skill` 工具按需加载内容
- **自定义 Agent**:可创建可复用的 `AgentDefinition`(系统提示词 / 模型 / 内部工具 / Skill / MCP / 沙箱 / 温度 / Max Tokens),在输入栏下拉选择,内置最小管理页(增删改查)
- **MCP Servers**:MCP 服务器增删改查,按传输方式(stdio / SSE / HTTP)动态表单、启用开关;支持从标准 `mcpServers` JSON 一键导入(重名自动跳过并提示);内置 **Inspector**:连接服务器完成 `initialize` 握手,浏览并调用其 Tools(按 JSON Schema 生成参数表单 / 原始 JSON 两种模式)、读取 Resources、获取 Prompts,结果实时展示(仅桌面端可用)
- **Connectors(第三方连接器)**:内置 [open-connector](https://github.com/oomol-lab/open-connector)(Apache-2.0,vendored 上游 commit 见 `sidecar/connector/UPSTREAM.json`)运行时,作为 **sidecar** 由应用启动/停止/健康检查,让智能体安全访问 1000+ 第三方平台的 10000+ Action(仅桌面端可用)
- **运行时管理**:单二进制由 `sidecar/connector/build.ts` 用 bun 编译(`node:sqlite`→`bun:sqlite` 兼容 shim),Rust supervisor(`src-tauri/src/connector/`)负责生命周期、随机/可配置端口(仅绑 `127.0.0.1`)、生成并持久化 admin token;catalog / migrations / Web Console 作为 Tauri 资源随应用分发
- **凭证边界**:第三方凭证(API Key / OAuth2)仅保存在运行时自己的 SQLite 数据目录(`<app-data>/connector`)内,**绝不写入应用配置或参与数据同步**
- **Connectors 页面**:运行时状态卡(启动/停止、端口、打开内置 Web 控制台)、Provider 目录浏览与搜索、per-provider 凭证配置(API Key 表单 + OAuth2 客户端配置与系统浏览器授权流程)、Action 搜索与调试(按 JSON Schema 生成参数表单,执行并展示结果)、运行记录
- **Agent 工具接入**:以 4 个发现型工具对接(`connector_list_apps` / `connector_search_actions` / `connector_get_action_guide` / `connector_execute_action`),不平铺上万 Action;在自定义 `AgentDefinition` 与会话输入栏均可开关(默认关闭),运行时未启动时返回引导性错误
- **实用工具**:URL 编解码、JSON 预览(尽力解开被转义/双重编码的嵌套字段)、转义/去转义、Unicode 编解码,纯本地计算
- **设置**:主题切换、数据存储说明、**数据同步**(加密同步到 S3 / S3 兼容对象存储,支持从远程恢复)
> 第一阶段为脚手架 + UI 骨架 + 本地 CRUD,数据保存在本机。现已支持**加密同步**:在「设置 → 数据同步」配置 S3(或 S3 兼容)存储与加密口令,即可将本地资源经 AES-256-GCM 加密后同步到对象存储,并在新设备上恢复。
### 数据同步(Storage Sync)
- **后端抽象**:Rust 侧定义 `StorageBackend` trait,本期实现 S3(及 MinIO/R2 等兼容端,支持自定义 endpoint 与 path-style);后续可扩展其它后端。
- **端到端加密**:用户口令经 Argon2id 派生 AES-256 密钥,逐资源对象加密后上传;密钥/口令永不上传,KDF salt 随明文 manifest 共享以便多设备派生同一密钥。
- **按资源分项同步 + 时间戳合并**:每类资源单独加密对象,拉取时按 `updatedAt` 逐条 last-write-wins 合并,删除以墓碑(tombstone)传播,避免“复活”。
- **可扩展**:前端 `src/data/sync/registry.ts` 注册可同步资源,新增资源仅需加一行。
- **仅桌面端**:S3 传输与加密在 Rust 原生执行,浏览器开发模式下该功能禁用。
## 开发
前置:Node.js + pnpm,以及 Rust 工具链(用于 Tauri);构建 sidecar 还需 [Bun](https://bun.sh)。
```bash
pnpm install
# 仅前端(浏览器,数据走 localStorage)
pnpm dev
# 构建 sidecar 二进制(gateway + connector),桌面端首次运行前必须执行一次
# connector 会按固定 commit 联网克隆 open-connector 源码并用 bun 编译
pnpm run sidecar:build
# 桌面应用(Tauri,数据走 tauri-plugin-store)
pnpm tauri:dev
```
> 全新克隆或执行 `pnpm clean` 之后,`src-tauri/binaries/` 下的 sidecar 二进制会缺失(它们被 gitignore,仅在本地/CI 构建时生成)。此时直接 `pnpm tauri:dev` 会报 `resource path ... doesn't exist`,需先跑一次 `pnpm run sidecar:build`。也可单独构建:`pnpm run sidecar:gateway:build` / `pnpm run sidecar:connector:build`。
## 构建
```bash
# 前端产物
pnpm build
# sidecar 二进制(若尚未构建)
pnpm run sidecar:build
# 桌面安装包
pnpm tauri:build
```
## 目录结构
```
src/
components/
ui/ # 基础组件(button、input、dialog…)
layout/ # 侧边栏、顶栏、应用外壳
common/ # PageHeader、EmptyState、ConfirmDialog、ModelFeatureBadges
data/ # 存储适配层 + repository 抽象
store/ # zustand 状态(集合 store 工厂、主题)
pages/ # 各功能页面与表单弹窗(含 providers/、agent/)
lib/
http.ts # Tauri/浏览器统一的 fetch(桌面端绕过 CORS)
volc/ # 火山引擎 OpenAPI V4 签名
providers/ # provider 适配层(统一类型 + volcengine 管理/推理 + openai-compatible 网关)
types/ # 数据模型
sidecar/ # bun 编译的 sidecar 二进制(gateway、connector/open-connector)
src-tauri/ # Tauri Rust 后端(含 unified/ 与 connector/ 两个 sidecar supervisor)
```
## CI / CD
通过 GitHub Actions 实现持续集成与跨平台发布。
### CI(`.github/workflows/ci.yml`)
每次向 `main` 推送或提 PR 时运行:
- **Frontend**:`pnpm install` → `pnpm build`(`tsc` 类型检查 + Vite 构建)
- **Rust**:在 Linux / Windows / macOS 上执行 `cargo fmt --check`、`cargo clippy -D warnings`、`cargo check`
### Release(`.github/workflows/release.yml`)
推送 `v*` 形式的 tag(或手动 `workflow_dispatch`)时,使用
[`tauri-action`](https://github.com/tauri-apps/tauri-action) 在矩阵中构建并发布到 GitHub Release(草稿):
| 平台 | Runner | 产物 |
| --- | --- | --- |
| macOS Apple Silicon | `macos-latest` (`aarch64-apple-darwin`) | `.dmg` / `.app` |
| macOS Intel | `macos-latest` (`x86_64-apple-darwin`) | `.dmg` / `.app` |
| Linux x64 | `ubuntu-22.04` | `.AppImage` / `.deb` / `.rpm` |
| Windows x64 | `windows-latest` | `.msi` / `.exe (NSIS)` |
发布步骤(版本号跟随 tag):
```bash
# 打 tag 并推送即可,CI 会自动把版本号同步进 package.json / Cargo.toml / tauri.conf.json
git tag v0.2.0
git push origin v0.2.0
# Actions 自动各平台构建、签名、生成 latest.json 并发布 Release(非草稿)
```
> 无需手动改版本号:`scripts/set-version.sh <tag>` 会在 CI 里把 `vX.Y.Z` 写入三处版本字段。
### 自动更新
应用内置 Tauri Updater,更新源指向 GitHub Releases 的 `latest.json`:
`https://github.com/warjiang/LLMToolForge/releases/latest/download/latest.json`
- **启动**:静默检查,有新版弹窗提示版本/更新日志,用户确认后下载安装并自动重启。
- **设置页**:显示当前版本,提供「检查更新」按钮。
- 平台支持:macOS / Windows 全量支持,Linux 仅 AppImage。
### 必需 Secrets(自动更新签名)
```bash
pnpm tauri signer generate -w ~/.tauri/llmtoolforge.key
# 公钥已写入 tauri.conf.json 的 plugins.updater.pubkey
```
仓库 Secrets 中配置(缺失则更新产物不签名,客户端无法升级):
- **Tauri Updater 签名**:`TAURI_SIGNING_PRIVATE_KEY`、`TAURI_SIGNING_PRIVATE_KEY_PASSWORD`
- **macOS 签名/公证(可选)**:`APPLE_CERTIFICATE`、`APPLE_CERTIFICATE_PASSWORD`、`APPLE_SIGNING_IDENTITY`、`APPLE_ID`、`APPLE_PASSWORD`、`APPLE_TEAM_ID`
> 更换公钥需同步更新 `tauri.conf.json`,否则已发布客户端无法验证新包。