deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Jessie-1939/whalepal
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
一只住在你桌面、安静陪着你、并且「看得懂你在忙什么」的鲸鱼伙伴。
A desktop whale-girl companion that understands what you're working on — cloud vision for understanding, local-only data, zero telemetry.

鲸伴 = MineContext 的「理解」 × 鲸鱼娘的「陪伴」。
她是一个独立的 Windows 桌面应用:一条透明置顶的鲸鱼桌宠待在屏幕角落,可以拖拽、摸头、投喂; 背后的上下文引擎周期性地「看」屏幕(画面有变化时才分析),用云端多模态模型理解你正在做什么, 据此切换状态、主动关心,并能回答「我刚才在干嘛」「今天做了什么」。
她默认安静:不漫游、不刷屏、工作时不插嘴;所有数据只存在应用自己的文件夹里。
仓库里的 packages/dsh-bridge 是一个真的 DSH 插件(dsh.bundle + cordis.patch.yml + 宿主侧 apply(ctx)),
装上之后 DSH 会把 agent 的真实状态(思考 / 在跑哪个工具 / 报错 / 回合结束 / 等你在界面上点确认)
通过 127.0.0.1 推给桌面上的鲸伴——她就不用靠截屏猜了。DSH 没开时鲸伴照常用,两者互不依赖。
dsh plugin --profile web add dsh-whalepal-bridge
# 或从本仓库直接装:dsh plugin --profile web add github:Jessie-1939/whalepal#path:/packages/dsh-bridge
插件只往回环地址发(非回环地址一律拒绝)、不读消息内容、无遥测;鲸伴侧在 设置 → 陪伴 → 「DSH 桥接」里可随时关闭。
把 https://github.com/Jessie-1939/whalepal 里的
packages/dsh-bridge子包装成 DSH 插件:
- 找到 DSH profile 目录(默认
~/.dsh/profiles/web);- 在该目录执行
pnpm add "github:Jessie-1939/whalepal#path:/packages/dsh-bridge";- 确认该目录
package.json的dsh.profile.bundles里出现dsh-whalepal-bridge(没有的话再跑一次dsh plugin --profile web ls触发对账);- 用
dsh --profile web --dump-config确认配置树里有whalepal-bridge,然后重启dsh web。⚠️ 注意:这是一个 monorepo,要装的是
packages/dsh-bridge子包,不是仓库根目录的 Electron 应用; Windows 下不要用官方dsh plugin add直接传带空格的本地路径(CLI 转发给 pnpm 时会被拆成两个包),用上面的 git 规格最稳。
| 陪伴设置 | 活动日历 |
|---|---|
![]() |
![]() |
| 主动搭话(手动触发) | 隐私与记忆体积 |
|---|---|
![]() |
![]() |
git clone https://github.com/Jessie-1939/whalepal.git
cd whalepal
npm install
npm start # 或者:装完依赖后直接双击 启动鲸伴.vbs(无命令行窗口)
开箱即用:立绘素材(60+ 张)随仓库提交,无需额外下载;不填 API Key 也能完整运行(基础感知 / 关怀 / 日历 / 模板问答),填了 Key 才启用云端理解。
需要 Node.js 20+(建议 22 LTS)。想验证依赖装好了没:npm test(应输出 80+ 个用例全过)。
Windows 想要桌面图标和开机自启:powershell -ExecutionPolicy Bypass -File scripts/create-desktop-shortcut.ps1。
$env:ELECTRON_MIRROR='https://npmmirror.com/mirrors/electron/'; npm installnode node_modules/electron/install.js(可先设上面的镜像环境变量)。git config --global --add safe.directory <仓库路径>。设置 → 云端模型,内置预设一键切换(模型分析全部在云端完成,本应用不运行本地模型):
| 预设 | 说明 |
|---|---|
| 阿里云百炼(Qwen) | 默认预设,qwen3.8-omni-flash(OpenAI 兼容模式,已默认关闭思考模式:单次约 1 秒) |
| DeepSeek | deepseek-flash(原生视觉输入,1M 上下文;预设关闭思考模式:实测 1.7s / 约 1.4k token 一次屏幕理解) |
| Doubao(火山方舟) | doubao-seed-1-6-flash 系列 |
| OpenAI | gpt-4o-mini 等 |
| 自定义 | 任意 OpenAI 兼容端点(含本地网关,http 仅允许 localhost) |
API Key 只保存在本机 data/config.json(被 git 忽略,界面不回显)。用量记账在 data/usage.json:
按天记录调用次数与 token(输入 / 输出 / 缓存命中),设置页「数据」与「云端模型」都能看到——
想换更便宜的模型时,先看这里再决定。
Kaspersky / ESET / 360 这类软件会重签 HTTPS 证书(中间人),Windows 信任它、但 Node/Electron 不认识这张根证书,于是所有云端调用都会失败。两种修法(都不改系统设置):
npm run start:ca 启动(内部给 Electron 加 --use-system-ca:直接采用 Windows 信任库);启动鲸伴.vbs(已内置上面的开关,并在首次启动时把系统根证书导出到 data/tls/windows-roots.pem 兜底)。也可以单独导出:pwsh -File scripts/export-system-ca.ps1。
导出的 PEM 只在 data/ 内(已被 git 忽略),不联网、不装证书。
<应用目录>/data/:配置、事件、摘要、对话、养成、截图、缓存、日志——不写系统图片 / 文档 / AppData。src/main/context/net.js),任何第三方地址的请求直接拒绝;Chromium 后台联网 / 组件更新 / 崩溃上报已关闭;无遥测、无自动更新。推送前自检:npm run privacy(扫描当前文件 + 全部提交历史中的密钥 / 个人路径 / 专属域名)。细节见 docs/11-隐私与数据流.md。
detail(具体在做什么)+ entities(项目/文件名/关键词)+ topics,而不是几个字;
截图之外还会附上一段无障碍树文本摘录(本机只读、不是 OCR、可关)作为精确文本提示。完整调研与决策(含 screenpipe / OpenAdapt / MineContext / OpenViking 对照)见 docs/10-上下文设计.md 与 docs/12-记忆介质决策.md。
Electron 37 · 原生 JS 渲染(无构建链)· 纯函数状态机 · JSONL/JSON 本地存储 · node:test · 云端 OpenAI 兼容多模态接口(百炼 / 豆包 / OpenAI / 自定义)。
src/
├─ main/ 主进程:窗口/托盘/IPC + context/(截屏、去重、分析、存储、关怀、问答、主动搭话)
├─ preload/ contextBridge 白名单
└─ renderer/
├─ core/ 纯函数状态机、台词库、姿势映射(可单测)
├─ pet/ 桌宠窗口 + assets/poses/<姿势>/ 立绘(12 个姿势组,60+ 张)
└─ settings/ 设置面板(Apple Liquid Glass 风格)
npm test # 52 项单元测试(状态机 / 感知哈希 / 分类器 / 姿势映射 / 日历 / 隐私出口)
npm run check # 全量语法检查
npm run privacy # 推送前隐私审计(当前文件 + 全部历史)
npm run gif # 由 data/gif-frames/ 的连续帧生成 README 动图
npm run dist # 打包:dist/ 下产出 zip(绿色单文件夹)与 NSIS 安装包
自检开关(开发用):
WHALEPAL_SMOKE=1(跑一次完整感知链路后退出)、
WHALEPAL_DEBUG_CAPTURE=1(打印窗口坐标并抓取桌宠/设置窗口)、
WHALEPAL_DEBUG_PROACTIVE=1(立即执行一次主动搭话判断)、
WHALEPAL_DEBUG_FRAMES=16(连续抓帧,供 npm run gif 使用)。
| 文档 | 内容 |
|---|---|
| docs/01-项目大纲.md | 项目定位、愿景、范围、成功标准 |
| docs/02-需求规格.md | 功能需求 FR- 与非功能需求 NFR- |
| docs/03-系统架构.md | 架构、模块职责、数据流、IPC、单文件夹布局 |
| docs/04-技术选型与集成方案.md | 技术栈决策、融合映射、素材复用、成本模型 |
| docs/05-桌宠交互与陪伴设计.md | 状态机、物理参数、互动、关怀、养成 |
| docs/06-开发计划与里程碑.md | M0–M5 里程碑与任务清单 |
| docs/07-验收标准.md | 逐模块验收清单 |
| docs/08-风险与架构决策.md | 风险登记与 ADR |
| docs/09-实现约定变更.md | 实现过程中的设计约定变更(1–12) |
| docs/10-上下文设计.md | 分层上下文、图片 vs 文本、市面项目调研 |
| docs/11-隐私与数据流.md | 隐私硬保证、出网清单、自查方法 |
| docs/12-记忆介质决策.md | 为什么长期记忆用文本(本机实测) |
| docs/13-主动搭话说明.md | 主动搭话门控与"为什么不说话" |
变更记录见 CHANGELOG.md。
参考项目与署名见 NOTICE:MineContext(Apache-2.0,上下文管线/去重窗口/日历热力图思路)、 dsh-whale-musume(MIT,立绘素材与桌宠交互设计参考)、dsh-whale-pet ×2 与 dsh-maid-whale-suite(双形态/皮肤参考)。
本项目以 MIT License 开源;立绘素材按来源项目许可(MIT)使用并署名。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。