登录即可使用的本地 AI Agent 桌面客户端
由 DeepSeek Harness 驱动,并与 BOTCF / NewAPI 账号、令牌、模型和路由状态原生集成。
Important
本仓库采用“源代码开放(source-available)、仅限非商业用途”的方式发布。个人使用、学习、研究、修改与非商业再分发不另设项目方限制;任何商业使用均须事先取得书面授权。它不属于 OSI 认证的开源软件,完整条款见 LICENSE。
BOTCF的 Agent 主引擎已经替换为 DeepSeek Harness(DSH)。开发服务与 Electron 桌面端都直接启动官方 DSH Web UI,不再经过 Pi Bridge;原 Vinext 界面和 Pi Bridge 源码仅作为兼容层保留。
- 登录即用:使用 BOTCF 账号完成 NewAPI 授权,维护以
🚀开头的专属兜底 Key(默认🚀codex-pro),并只把当前选中 Key 的模型加载到前台,无需手工复制 API Key。 - 单一 Key 模型入口:前台只加载当前选择 Key 可用的模型,并统一归入一个 BOTCF 供应商;切换 Key 后自动替换模型列表。
- 模型能力完整同步:读取上游能力声明,并通过官方规则与用户覆盖补齐模型思考等级。
- 账号与令牌控制台:左下角直接显示用户名、账户余额与退出登录;控制台可查看总额度、已用与剩余额度、请求统计,并创建、编辑、启停或删除普通 Token。
- 渠道健康可见:独立路由状态页展示可用性、延迟、PING 与近期检测历史;选模型时直接显示对应 BOTCF 渠道健康状态。
- 本地优先:凭据由桌面主进程和系统安全存储处理;DSH 服务仅监听本机回环地址。
- 完整 Agent 工作台:内置知识库、DAG 工作流、Skills、MCP、文件、Git、终端、浏览器、SSH 与应用管理。
- 从本项目的 Releases 页面下载 macOS Apple 芯片版或 Windows x64 安装包。
- 启动 BOTCF Agent,并在登录页输入 BOTCF 账号。
- 登录成功后,应用会自动补齐专属兜底 Key,并同步当前 Key 的模型与思考能力;默认使用
🚀codex-pro,也可以随时切换到其他 Key,前台模型列表会随之替换。
当前公开安装包未进行 Apple Developer ID 或 Windows Authenticode 商业证书签名。首次安装时系统可能显示“未知开发者”或“未知发布者”,请从本仓库 Releases 获取安装包并核对 SHA-256 校验值。
DSH 官方 Web UI
│ loopback HTTP
▼
DeepSeek Harness 0.1.0-rc.7
├─ Agent presets(标准 / PTC / 极简 / 创造 / 性能实验)
├─ Sandbox + Approval + Permission presets
├─ Plan 模式安全联动
└─ BOTCF项目资源插件(知识库 / 工作流 / Skills / MCP)
DSH 只监听本机回环地址。Electron 使用随机端口启动运行时,渲染进程保持 sandbox: true、nodeIntegration: false,并拒绝网页权限请求。
npm install
npm run dev默认工作区是 pi-client 的上级项目目录。也可以显式指定工作区或让 DSH 选择随机端口:
npm run dev -- --workspace /absolute/path/to/project --port 0Electron 开发模式:
npm run desktop:dev桌面版启动后会先进入BOTCF登录页。使用 BOTCF 账号登录后,应用会自动完成以下工作:
- 在主线路
https://edge-cn.botcf.com与备用线路https://botcf.com之间自动容灾登录 - 读取账号中的 Token,但只为当前选中 Key 注册一个 DSH 模型供应商;切换 Key 时清理旧路由并替换前台模型列表
- 根据 Token 的模型白名单同步可用模型;优先沿用上次默认 Token,否则使用最新启用项
- 将首个可用模型设为当前会话及后续新会话的默认模型
- 通过 DSH 凭据服务单独保存 Key,不向页面返回明文
勾选“在这台设备上自动登录”后,密码只会通过 Electron safeStorage 加密保存。左下角显示当前用户名、整个账户的剩余额度和退出登录入口;可在“设置 > BOTCF 控制台”查看账户总余额、已用额度、剩余额度和请求数,创建、编辑、启停或删除普通 Token,并手动重新同步全部模型路由。以 🚀 开头的专属 Key 是系统兜底令牌:缺失时自动补齐且不能删除或停用,但不会锁定用户选择,任何已启用的普通 Key 都可切换为当前对话令牌。项目侧边栏的“渠道状态”读取 BOTCF 公开模型状态窗口,展示逐模型成功率、首字延迟、吞吐和最近一分钟趋势;模型状态接口暂时不可用时,自动降级为主、备用线路探测。默认服务地址为 https://edge-cn.botcf.com 和 https://botcf.com;开发部署可通过逗号分隔的 BOTCF_NEWAPI_ROUTES 覆盖(仍兼容旧的 LAOBOS_NEWAPI_ROUTES)。
DSH 模型选择器采用三级来源解析思考等级:先读取 New API /v1/models 返回的显式能力声明,没有声明时按 New API 官方模型族和后缀规则推导,最后允许在“设置 > BOTCF 控制台 > 模型思考能力”按模型手动覆盖或标记为不支持。控制台会显示每个模型当前使用的是“上游声明 / 官方规则 / 手动覆盖 / 未识别”哪一种来源;手动设置按服务地址与用户 ID 隔离,并具有最终优先级。普通且未声明能力的模型不会伪造思考等级,避免向不支持的上游发送无效参数。
开发版使用“BOTCF(开发版)”窗口标题,并继续使用独立的 botcf-dsh-agent 数据目录,不会与其他 BOTCF 桌面版本共享会话、凭据或单实例锁。
公开发布提供两个原生安装包:macOS Apple 芯片版(DMG)与 Windows x64 版(NSIS EXE)。两者都由 GitHub Actions 在对应系统的原生 Runner 上构建,避免原生模块交叉编译导致不兼容。应用内更新还会使用 macOS ZIP、blockmap 与 latest*.yml 元数据。
Windows 的 Sharp、Koffi、SWC、ripgrep、Node 内建加载器和 node-pty 都包含平台原生文件,并随包携带经过 SHA-256 固定校验的官方 MinGit,版本中心不依赖系统 PATH 或用户另行安装 Git。发布校验不仅检查 npm 依赖清单和 Windows x64 PE 文件,还会通过打包后的 Electron 实际启动 ripgrep,防止 app.asar 虚拟路径被误传给子进程;完整操作和故障案例见桌面打包与应用内更新手册。
# macOS Apple Silicon(DMG 首次安装,ZIP 用于应用内更新)
npm run desktop:installer -- --mac dmg zip --arm64
# Windows x64
npm run desktop:installer -- --win nsis --x64发布流水线优先使用 Apple Developer ID、公证凭据和 Windows Authenticode 证书;仓库未配置商业证书时,macOS 改用固定 requirement 的 ad-hoc 测试签名,Windows 生成未签名测试安装包,并在发布说明中明确风险。发布页同时提供 SHA-256 校验值用于核对文件完整性。签名证书和密码只允许通过 CI Secret 注入,禁止提交到仓库。
内置 @laobos/dsh-updater 插件在“设置 > 软件更新”中提供检查、下载进度和“重启并安装”。插件只负责界面,更新地址、校验和安装由受信任的 Electron 主进程通过 electron-updater 完成;渲染器不能指定任意下载地址或本地安装路径。
下载完成的更新会保留在 Electron 更新缓存的 pending 目录,并在桌面设置中记录待安装版本。应用重启后会重新获取 Release 元数据、校验 SHA-512 并复用本地文件,不会因为界面状态重置而重复下载。安装器启动失败时仍保留缓存和错误信息,用户可以重试;成功更新到该版本后会自动清理过期的待安装记录。
没有 Developer ID 证书时,只能用 npm run desktop:installer:test-update -- --mac dmg zip --arm64 构建受控测试链。该命令通过独立配置对整个 .app 做 ad-hoc 签名、关闭 hardened runtime,并使用仅按 com.botcf.dsh.agent 标识符匹配的固定测试 requirement,使 Squirrel 能验证 Bundle 资源和相邻测试版本;基线包和云端更新包必须都用该命令构建。此 requirement 不能证明发布者身份,只允许在测试设备使用,不能替代正式签名与 Apple 公证。
正式版本从本项目公开的 BOTCF Agent Releases 获取更新。默认启动 15 秒后检查,每 24 小时最多一次,不自动下载。开发版明确禁用更新。
内置插件在开发版可使用符号链接,Windows 和全部安装版则复制到 DSH Home。插件运行时使用的 Logo、图片、模板和配置必须保存在插件自身目录;禁止通过相对路径读取仓库根目录资源,否则会出现“源码正常、安装版缺失”。
发布方式:
- 更新根
package.json的 SemVer 版本。 - 将源码提交推送到本项目
main,再推送与版本一致的vX.Y.ZTag。 Desktop Release工作流执行测试,在原生 Runner 上构建,并先创建 Draft Release;配置证书时走正式签名链,否则生成明确标注的测试签名资产。- 所有安装包、更新元数据和校验文件验证通过后,工作流才公开 Release。
正式签名发布可配置以下 Actions Secrets;未配置时仍会生成用于测试的公开安装包和更新包:
MAC_CSC_LINK、MAC_CSC_KEY_PASSWORDAPPLE_ID、APPLE_APP_SPECIFIC_PASSWORD、APPLE_TEAM_IDWIN_CSC_LINK、WIN_CSC_KEY_PASSWORDRELEASES_TOKEN:可选;同仓库发布默认使用工作流自带的github.token
第一版不提供启动失败后的自动降级;旧版本会保留在公开 Release 中,可手动下载安装回退。
0.3.0 是首次携带更新器的引导版本:已安装 0.2.x 的用户需要手动安装一次 0.3.0,此后的版本才能使用应用内更新。
常用诊断:
npm run dump-config
npm run test:dsh
npm test
npm run lint项目直接使用 DSH 官方 presets:
| preset | 界面名称 | 适用场景 |
|---|---|---|
standard |
标准模式 | 通用 Agent 工作 |
code |
PTC 模式 | 代码与工具密集任务 |
minimal |
极简模式 | 更少上下文与更轻执行 |
cordis |
创造模式 | Cordis / 创造型工作流 |
performance |
性能模式(实验) | 首轮对齐官方 Minimal,之后保留精简常驻工具并按需解锁完整能力;V4 Pro 建议使用 max 推理等级 |
模式选择、会话、模型配置和运行状态均由 DSH 官方 UI 管理。
性能模式作为BOTCF只读系统 preset 随软件安装,不覆盖官方极简模式。macOS/Linux 使用官方持久 Bash;Windows 通过 @laobos/dsh-shell 优先选择持久 WSL Bash,然后降级到持久 Git Bash,最后使用 PowerShell 兼容模式。Shell 后端只在命令尚未开始时故障转移,避免重复执行可能已经产生副作用的命令。
config/laobos.cordis.patch.yml 提供三档权限预设:
| preset | 沙箱 | 审批策略 |
|---|---|---|
read-only |
只读 | 越权操作询问 |
workspace-write |
工作区可写 | 敏感操作询问(默认) |
danger-full-access |
完全访问 | 不询问,仅限可信环境 |
进入 Plan 模式会强制切换到 read-only;退出 Plan 后恢复进入前的权限。状态来自 DSH 会话事件,因此恢复会话或重启后仍可正确联动。
工具误把当前已经生效或更窄的沙箱模式传入 sandbox_permissions 时,BOTCF将其视为无需升权并继续使用当前有效权限,不触发审批也不会降级;真正的升权仍必须经过原有审批流程。
桌面主进程保留 BOTCF NewAPI 登录页,并在认证后读取账号 Token、模型目录和能力元数据,只为当前选中 Key 创建隔离的 DSH 路由。API Key 通过 DSH credentials 保存,不写入 settings 或前端状态。
- 服务容灾:按配置的 BOTCF 地址依次尝试,网络故障时自动切换备用地址,凭据错误不会盲目重试。
- 请求优化:只读取当前选中 Token 的密钥;响应设有超时和体积限制,避免无关请求、慢请求或异常大响应占用进程。
- 并发登录:登录请求按顺序执行并带版本标识,新请求不会复用旧请求的结果。
- 自动登录:优先用 Electron
safeStorage加密密码;系统安全存储不可用时仅在当前进程内保留,不向磁盘写入明文。 - 会话校验:登录后定期检查账号状态;短时网络波动保留当前会话,连续失败达到阈值后才清理模型路由并返回登录页。
- Token 管理:内置控制台支持创建、编辑、启停、删除和切换当前 Token;前台只展示当前 Token 可用的模型。
- 模型能力:优先使用远端元数据,结合兼容规则和用户手动覆盖生成推理等级;上下文窗口切换后会重新同步现有 BOTCF 路由。
@laobos/dsh-context-window 是独立的 Host + Web Client DSH 插件。它接管对话输入区的模型菜单,在模型与推理等级上方增加“上下文调节开关”:
- 关闭:标准上下文
200K - 开启:长上下文
1M - 生效时机:下一次模型请求组装;不会改变正在运行的步骤,也不会向对话追加消息
- 压缩联动:DSH 自动压缩从插件提供的有效上下文容量计算压力阈值
- 持久化:仅保存
{ schema, enabled }到 DSH 数据目录,不保存提示词、模型输出或凭据
该值描述BOTCF向 DSH 公布的上下文容量。实际模型服务端仍必须支持对应窗口;若后端限制更小,仍可能返回上下文超限错误。
首次启动时,如果发现 ~/.pi/agent 且 DSH 尚无迁移 manifest,会自动迁移,并保留原 Pi 数据不动。迁移内容包括:
- Provider 配置与 API Key(写入 DSH 凭据文件,不打印明文)
- 默认模型与推理级别
- SYSTEM、MEMORY、Skills 与附件
- Pi JSONL 历史会话到 DSH 原生会话
- 原知识库与旧版工作流 SQLite 快照(仅保留迁移备份,不再加载工作流插件)
手动预检和执行:
npm run migrate:pi
npm run migrate:pi -- --apply已有 DSH 配置默认不会覆盖;只有显式追加 --force 才覆盖同名配置。
macOS 默认数据目录:
~/Library/Application Support/botcf-dsh-agent/dsh
Electron 登录资料、凭据引用、缓存与 DSH 数据统一放在独立的
botcf-dsh-agent 用户目录,不会与旧版默认目录、参考项目的 BOTCF平台 目录或其他 BOTCF 桌面版本共用。可通过 BOTCF_USER_DATA 和 BOTCF_DSH_HOME 分别覆盖用户目录与 DSH 数据目录。
可通过 LAOBOS_USER_DATA 覆盖整个应用数据目录,通过 LAOBOS_DSH_HOME
单独指定 DSH 目录,通过 LAOBOS_WORKSPACE 指定默认工作区。
@laobos/dsh-system-tools 作为 DSH 插件运行。官方会话栏保持在左侧;项目导航固定在最右侧,与中间工作区组成三列布局。右栏折叠时保留 56px 图标轨道,展开宽度默认为 224px,并可在 200–300px 之间拖动调整。点击“对话、文件管理器、版本中心、知识库、Skills、MCP、浏览器、设置”等入口都会复用中间工作区进行独立页面切换;设置页包含系统提示词编辑,以及可直达模型、Agent 预设、安全审批、插件分区的 DSH 系统设置入口;原左侧设置入口已迁移到右栏底部。
- 本地 SQLite + FTS 全文检索,支持自然问句拆词、标题加权和相邻片段扩展
- Agent 可按需自动创建、读取和更新知识;删除经过 DSH 审批,暂停的知识库不会被全局搜索访问
- Agent 默认把知识写入当前工作区;只有明确的跨项目知识才进入全局作用域
- 知识库页面保持轻量插件形态,支持召回测试、资料编辑、图片 URL 预览与结果渲染、重新索引、启停和删除
- Skills 以名称、简介、范围、状态和实际文件位置的管理表展示;默认管理 DSH 原生目录,可按需查看
.agents/skills兼容内容,并支持一键复制位置、启停、删除和 DSH 热更新 - MCP 支持 stdio 与 streamable HTTP,以 Server、连接方式、连接目标、工具数量和连接状态的管理表展示;可启停、重连和删除,密钥只以遮罩返回界面
- 第三方前台集成可通过
laobos.project.integration列表槽注册完整工作台页面;宿主会按order将入口加入“集成管理”,并以注册项id定向渲染对应组件 - 插件市场源码内置于
packages/laobos-market,可在“设置 > 插件市场”搜索、安装和管理带有dsh-plugintopic 的插件;代理地址和上传账号默认留空,由使用者自行配置 - 管理页支持右栏折叠按钮、再次点击当前菜单项、页面“收起”按钮和 Esc 快速返回对话;未保存的 Skills/MCP 修改会先确认
- 设置中的“系统提示词”默认展示可编辑的“三橘”身份,以
order: 39注册在 preset persona 与旧迁移指令之后、工具说明之前;用户修改姓名或角色后会覆盖冲突设定,不会保留旧名称作为别名 - 实体插件清单与虚拟工作流插件统一使用 DSH 官方“设置 > Plugins”页面,不占用项目主侧栏
- HTTP 管理接口只接受本机请求并校验 Origin
数据位于 DSH Home 的 data/system-tools.db。
第三方集成可在页面组件上声明 SVG 图标;图标组件应接收并透传 size 和 className:
function IntegrationIcon({ size = 16, className }) {
return h("svg", {
className,
width: size,
height: size,
viewBox: "0 0 16 16",
fill: "none",
stroke: "currentColor",
}, h("path", { d: "M3 8h10M8 3v10" }));
}
IntegrationPage.projectIntegrationIcon = IntegrationIcon;
ctx.slots.inject("laobos.project.integration", () => ctx.slots.register({
name: "laobos.project.integration",
id: "example-integration",
order: 10,
label: () => "示例集成",
}, IntegrationPage));未声明 projectIntegrationIcon 时,项目侧栏使用通用插件图标。SVG 由插件自身维护,不需要在宿主中增加插件 ID 映射。
桌面版把右侧项目栏分成“对话 / 工作台 / 集成管理”三组,并把高权限能力收敛到 Electron 主进程。网页侧只能调用经过校验的最小化 preload API,文件路径会做工作区边界、真实路径和符号链接检查。
- 会话:编辑上一轮并从稳定边界创建分支、重试上一轮、完整分页导出独立 HTML(包含折叠内容)、重命名和可恢复删除
- 右键菜单:工作区可打开文件管理器、Git 审查和终端;会话可打开、编辑、重试、导出、重命名和删除
- 文件工作台:目录浏览、文本/图片/PDF/音视频预览和 Finder 定位;敏感文件名、二进制内容和超大文件会被限制
- 版本中心:状态与 staged/unstaged diff、未跟踪文件预览、提交历史、初始化、暂存、提交、分支管理,以及需确认的恢复和远端同步;桌面 UI 与 Agent 共用结构化 Git 服务
- 文件上传:图片继续使用 DSH 原生图片附件;普通文件通过输入框回形针选择,复制到受管目录后以文件 Chip 显示,并把受管副本的绝对路径封装进提示词
- 上传路径:在“设置 > 文件上传”中选择“默认”或“工作区内”;默认写入 DSH Home 的
uploads/v1,后者使用当前工作区的update文件夹 - 终端插件:基于
node-pty与 xterm;每个标签使用独立的稳定命名 tmux 会话,打开或重连时自动回到当前工作区,未安装 tmux 时明确提示并回退到登录 Shell - 浏览器插件:使用隔离的
WebContentsView预览 HTTP(S) 地址;BrowserOps daemon 仅在用户点击后启动,并可随时停止 - SSH 插件:终端、SFTP 和 Agent 远程工具共用主进程连接服务;支持 OpenSSH 配置导入、默认身份文件、SSH Agent 与 ProxyJump,密码和私钥使用系统
safeStorage加密,主机密钥采用 TOFU 校验,发生变更时阻止连接 - 应用管理插件:登记、探测、启动、停止和查看日志;进程始终以
shell: false启动,“移出管理”不会删除项目文件 - 账号授权:登录页直接对接 BOTCF/NewAPI,会自动获取 Token 和模型并写入 DSH 原生模型路由;密码只在用户启用自动登录时通过系统安全存储加密落盘
- Shell 与 WSL:自动检测 Windows 的 WSL、Linux 发行版、Git Bash 与 PowerShell;设置页提供需 UAC 确认的 WSL/Ubuntu 安装、分阶段进度、重启恢复和可编辑的标准模式诊断对话
删除的会话会先归档,再移动到 DSH Home 下的BOTCF回收站;不会直接永久擦除。Terminal、BrowserOps、SSH 和应用管理均为独立 DSH 客户端插件,配置位于 config/laobos.cordis.patch.yml。修改终端或 SSH 的 JSX 源码后,可单独重建浏览器插件:
npm run build:desktop-plugins旧代码没有删除,但不再是默认 Agent 引擎:
npm run site:dev # 原 Vinext 管理界面
npm run pi:bridge # 原 Pi Bridge
npm run pi:dev # 原 Pi Bridge + Vinext 全量开发npm run desktop:package
npm run desktop:make桌面包会携带 DSH 及其运行依赖,不再打包或查找 Pi 二进制。macOS 签名身份可通过 LAOBOS_CODESIGN_IDENTITY 设置;未设置时使用临时签名。
用户创建的 API Key、工作区选择、会话、知识库和 SSH 配置均属于本机运行数据,不是本仓库源码的一部分。桌面版数据默认保存在系统的应用数据目录;开发模式的 .dsh、.pi、数据库、JSONL、SSH 凭据和环境变量文件已加入 .gitignore。旧版工作流数据只作为本地历史兼容数据保留,不再暴露页面、Agent 工具或 HTTP 接口。
公开提交前请执行:
npm run audit:public该检查会扫描所有待提交源码,阻止常见真实密钥、私钥块、本机绝对路径,以及数据库、会话和 SSH 配置等高风险文件进入版本库。它不能替代密钥轮换;如果密钥曾被提交到任何远端,应立即撤销并重新生成。
提交 Issue 或代码前请阅读 CONTRIBUTING.md。安全问题请遵循 SECURITY.md,不要在公开 Issue 中披露漏洞或凭据。
本项目自有代码和自有资源采用 PolyForm Noncommercial License 1.0.0:
- 允许符合许可定义的个人学习、研究、实验和非商业组织使用。
- 允许在许可范围内修改和再分发,但必须保留许可条款及 Required Notice。
- 除禁止商业使用和许可证要求的必要声明外,项目方不附加额外使用限制。
- 任何商业使用、预期商业应用或商业分发均须另行取得书面授权。
- “BOTCF”名称、Logo 和其他品牌标识不因源码许可而授予商标权。
第三方组件以及内置插件市场继续适用各自的许可证,详见 THIRD_PARTY_NOTICES.md。如本说明与 LICENSE 冲突,以 LICENSE 原文为准。
