dsh-thought-buddy

DSH PLUGIN浏览器与联网

仓库 dsh-plugins/dsh-thought-buddy · npm @dsh-plugin/dsh-thought-buddy

浏览器与联网 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

DSH plugin 在「Deep diving...」状态提示前放置一只 GrokBot 风格动画小伙伴,表情与状态文字同步打字机变换,为 DeepSeek Harness 界面增添趣味。

验证等级 L5 L5 · 运行验证通过
GitHub 星标 7 复刻 2 · 未关闭 issue 未标注
最近更新 2026-09-03 创建于 2026-08-15
README 10.1 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add @dsh-plugin/[email protected]
兼容 DSH 版本0.2.0-rc.2 等 7 个版本版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名@dsh-plugin/dsh-thought-buddy可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-thought-buddy:DeepSeek Harness 的动画思考小伙伴插件

  • GrokBot 动画头像
  • 表情同步打字机
  • Emoji 模式
  • 主题自适应
  • 减少动态效果

适用场景

联网搜索

上游标签

buddydeepseekdeepseek-harnessdsh-plugindsh-pluginsgrokbot

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度稳定按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✓ 通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

仓库档案

浏览器与联网
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方dsh-plugins仓库 dsh-thought-buddy · 默认分支 未标注
分类浏览器与联网search
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证BSD-3-Clause商用或二次分发前请确认条款原文
星标 / 复刻 / issue7 / 2 / 未标注收录时的数值,非实时
创建 / 更新2026-08-15 · 2026-09-03最后推送 未标注
本站收录2026-08-18首次进入本站目录的时间

README 全文

10.1 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-thought-buddy

A DeepSeek Harness Web plugin that puts a dynamic little buddy — a GrokBot-style animated avatar with a synchronized typewriter status line — right in front of the "Deep diving..." indicator.

English | 简体中文

dsh-thought-buddy is a pure client-side plugin for the DeepSeek Harness Web GUI. While the model is working, the status pill that reads Deep diving... grows a tiny Grok-style robot avatar: it blinks, swaps expressions with a springy morph, wanders its gaze, and gently bobs — all drawn live as SVG via requestAnimationFrame, with zero runtime dependencies. Every time the avatar switches expression, the status text rewrites itself with a typewriter effect (deleting character by character, then typing out the next word).

The avatar animation is ported from nasawz/GrokBot (a pure Flutter CustomPaint widget) to the web: all 25 expressions × 2 eyes × 48-point eye rings, 18 body shapes, and 39 states with their expression/blink cadences are preserved.

Features

Feature Description
GrokBot avatar thinking-state expression pool [8,16,14,17,5] cycles automatically; springy morph between expressions; 320 ms blinks (random 3.5–7 s interval); spherical head-turn projection + wandering gaze; gentle 1.7 s breathing bob
Expression-synced typewriter on every expression switch, the status text leaves Deep diving... via a typewriter effect (delete character by character, pause, then type out the next word) cycling through 55 candidates (Accomplishing…Working), e.g. Reticulating...; React re-renders never overwrite it (the text fiber's children string never changes, so React bails out)
Emoji mode fallback mode that cycles an emoji list (default 🤿 🫧 🌊 🐙 🔍 🧠 💭) with a pop-in on every switch
Theme aware follows prefers-color-scheme: light #5b7fe5/#fffdf7, dark #6689ea/#181a15 (matching the DSH theme)
Reduced motion under prefers-reduced-motion: reduce, the bob and head-turn sway are disabled; expression changes and blinks remain
Self-cleaning the animation stops as soon as the status pill leaves the DOM; inserted nodes survive React re-renders and are re-asserted on the next mutation if ever removed

Install

Copy the block below and paste it to your DSH agent (the assistant in this web
GUI). The agent performs the install and verification for you — no manual npm
or profile editing needed:

Install the @dsh-plugin/dsh-thought-buddy plugin into the profile I specify (or ask me if I didn't name one). The npm package name is `@dsh-plugin/dsh-thought-buddy`; use the GitHub source `github:dsh-plugins/dsh-thought-buddy`, or `file:` / `link:` for local development.

Steps:
1. Add the plugin dependency: `dsh plugin --profile  add @dsh-plugin/dsh-thought-buddy` (or the equivalent plugin-manager command for my profile).
2. Verify `node_modules/@dsh-plugin/dsh-thought-buddy` resolves and holds a built `lib/` directory (at least `lib/index.js` and `lib/client.js`). The runtime has no dependencies; building the TypeScript sources needs the `typescript` devDependency (`npm ci`/`npm install` once). If the artifacts are missing, run `npm run build` in the plugin directory and re-add.
3. Make sure the profile manifest's `dsh.profile.bundles` includes `@dsh-plugin/dsh-thought-buddy` — the bundle patch (`cordis.patch.yml`) inserts the plugin row automatically at boot.
4. Do not start the profile — install and verify only, then report what you changed.

Then restart dsh web, refresh the page, and send the model a message — the buddy appears in front of Deep diving.... All runtime options are set via localStorage (see below); there is no settings page.

Install from a local checkout (link:)

For local development, wire the plugin into a web profile via a link: dependency (example: C:\Users\Administrator\.dsh\profiles\web):

// package.json (profile)
"dependencies": { "@dsh-plugin/dsh-thought-buddy": "link:C:/path/to/dsh-thought-buddy" },
"dsh": { "profile": { "bundles": [ /* ... */, "@dsh-plugin/dsh-thought-buddy" ] } }
  1. Build the artifacts: npm run build → compiles TypeScript and produces lib/client.js + lib/index.js
  2. In the profile, run pnpm install (works offline)
  3. Restart dsh web — the client-module manifest is composed at boot, so a new bundle needs a restart
  4. Refresh the page and send the model a message

Configuration (localStorage, applied on reload)

Key Default Description
dsh-thought-buddy.enabled 1 0 disables the plugin
dsh-thought-buddy.mode avatar emoji switches to emoji cycling
dsh-thought-buddy.size 18 avatar size in px (8–64)
dsh-thought-buddy.emojis 🤿 🫧 🌊 🐙 🔍 🧠 💭 space/comma-separated emoji list (emoji mode)
// console example
localStorage.setItem('dsh-thought-buddy.mode', 'emoji')
localStorage.setItem('dsh-thought-buddy.size', '22')
location.reload()

Development

dsh-thought-buddy/
├── ref/GrokBot/            # reference project (git-ignored, read-only)
├── src/
│   ├── index.ts            # host half (no-op mount row)
│   └── client/
│       ├── data.ts         # generated typed data: 25 expressions × 2 eyes × 48 points, 18 shapes, 39 states
│       └── index.ts        # client engine: SVG avatar + typewriter + observer + apply()
├── scripts/
│   ├── gen-data-lib.mjs    # Dart parsing + data.ts rendering helpers
│   ├── gen-data.mjs        # regenerates data.ts from ref/GrokBot's Dart sources
│   └── build.mjs           # assembles lib/client.js (__ModuleLoader__ contract) from tsc output
├── test/verify.mjs         # browserless tests against the built bundle (SVG, pacing, typewriter)
├── tsconfig.json           # host-half compile: src/index.ts → lib/ (node ESM)
├── tsconfig.client.json    # client-half compile: src/client/*.ts → .build/client/ (plain scripts)
├── demo/                   # local preview (node demo/server.mjs → 4173)
└── cordis.patch.yml        # bundle patch: inserts the thought-buddy row
npm install           # once — installs the typescript devDependency
npm run gen           # refresh data (after upstream GrokBot data changes)
npm run typecheck     # type-check both halves (no emit)
npm run build         # compile TS → lib/ + .build/client/, then assemble lib/client.js
npm run verify        # full browserless verification
node demo/server.mjs 4173   # preview http://127.0.0.1:4173/demo/demo.html (run npm run build first)

> The client half is written as TypeScript "plain scripts" (no import/export,
> so the types and data stay in one global scope). tsc compiles them to plain
> JS in .build/client/, and scripts/build.mjs concatenates the two files into
> the window.__ModuleLoader__ factory — the same loader contract as before.
> data.ts must be evaluated before index.ts (build order is fixed).

Architecture

  • Host half: provides only the cordis bundle mount row (cordis.patch.yml inserts thought-buddy), so client-modules discovers the dsh.client declaration and exports["./client"], serving the browser half at /plugins/@dsh-plugin/dsh-thought-buddy/client.js.
  • Client half: apply(ctx) registers a MutationObserver watching [data-conversation-scroll] [role="status"] pills whose text contains "diving"; the avatar/typewriter mount in front of the text and live with the pill's DOM lifecycle.
  • Animation: a per-frame port of Flutter's _GrokBotState._onTick — critically-damped spring expression morphing (ω=7, 1/120 substeps), thinking-pool expression switching, 320 ms blink curve, spherical head-turn projection (asin/cos depth culling), wandering gaze; polygon coordinates are written to the SVG points attribute every frame.
  • Typewriter: a timer-driven state machine over the pill's text node. React never touches the node because the text fiber's children string is always "Deep diving..." (bail-out), exactly like the injected avatar node.

> ⚠️ Two different injects: the bundle's exported exports.inject is the cordis service dependency (this plugin only uses ctx.effect, so it must be an empty array — putting package names there makes the fiber wait forever for a service that does not exist and boot fails with pending (waiting for service: ...)); package.json's dsh.client.inject is the client module dependency declaration (this plugin needs none, so it is omitted).

Links

  • Repository: https://github.com/dsh-plugins/dsh-thought-buddy
  • npm: https://www.npmjs.com/package/@dsh-plugin/dsh-thought-buddy

License

BSD-3-Clause. The eye-ring geometry, body shapes, and state cadences derive from nasawz/GrokBot (BSD-3-Clause, Copyright (c) 2026 nasawz), credited in the LICENSE file.

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-thought-buddy 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add @dsh-plugin/[email protected]` 即可。对应的 npm 包名是 `@dsh-plugin/dsh-thought-buddy`。

dsh-thought-buddy 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-thought-buddy 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-thought-buddy 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.2.0-rc.2、0.2.0-rc.1、0.1.7-rc.2、0.1.7-rc.1、0.1.6-alpha.2、0.1.6-alpha.1、0.1.1-rc.2。

dsh-thought-buddy 用的是什么许可证?

上游标注为 BSD-3-Clause。商用或二次分发前请到仓库确认许可证原文。

dsh-thought-buddy 有哪些功能?

GrokBot 动画头像、表情同步打字机、Emoji 模式、主题自适应、减少动态效果。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

浏览器与联网
按星标排序,可作替代方案

dsh-our-free-model

dsh-our-free-model

在 DeepSeek Harness 中装上这个 DSH plugin,无需登录、注册或填 API Key,即可直接调用 DeepSeek

L3 · 安装规范通过 8,796 星

dsh-web

dsh-web

侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。

L3 · 安装规范通过 8,549 星

BrowserSkill

BrowserSkill

BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edg

L4 · 沙盒安装通过 8,456 星

dsh-pocket

dsh-pocket

DSH Pocket 让 DeepSeek Harness 装进口袋:电脑跑 dsh web,手机扫码即实时同步访问(局域网+公网),人在外

L5 · 运行验证通过 1,656 星

Browser4

Browser4

L4 · 沙盒安装通过 1,152 星

agentrq

agentrq

L4 · 沙盒安装通过 1,140 星

dsh-plugins 的其它插件

6 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。