YJLTF/dsh-eyebrain--packages-dsh-eyebrain-client ↗★ 1

dsh-eyebrain-client

dsh-eyebrain 的 dsh Web 客户端插件:插件设置卡片(识图模型 / 思考档位 / 接管清单)+ composer 工具行思考强度 chip(会话级覆盖)。 是dsh-eyebrain的配套前端,适合需要可视化调节思考强度的用户。

Package
dsh-eyebrain-client
Compatibility
Unverified
Harness peer range
^0.1.6-alpha.1
Version
0.2.0-rc.1
License
MIT
Last updated
Sep 17, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:YJLTF/dsh-eyebrain#6598e911a4b9955a23171f937165364106e650f5&path:packages/dsh-eyebrain-client

dsh-eyebrain-client

dsh-eyebrain 的 dsh Web 客户端插件(React):插件设置卡片 + composer 工具行思考强度 chip。

  • 设置卡片(设置 → 插件 → dsh-eyebrain):识图提供方增删改(接口地址 / 模型 ID / API Key 引用 / 图片精度 / max_tokens / 默认提问模板)、识图总开关、全局思考档位、端点接管清单。视觉对齐官方 PluginCard(--dsw-alias-* 设计令牌 + primitives Switch,明暗主题自动跟随)。
  • 思考强度 chip(对话输入框工具行,conversation.input.left 席位、「完全权限」旁):点击弹出官方 Menu(向上展开)四档选择,写入当前会话覆盖(sessionOverrides[sessionId]),下一轮请求生效;有覆盖时标注「会话」徽标,菜单含「清除会话覆盖,恢复全局」。

实现契约(对齐官方客户端插件)

  • 本包声明 dsh.bundle(自挂载 patch:把自己 mount 成一个 cordis 层)。dsh-client-modules 只扫描已激活层中声明 dsh.client 的包并将其浏览器入口编入 window.__DSH_BOOT__,因此该声明是设置卡片与思考 pill 被 Web 加载的前提;dsh plugin add 也因此能自动激活本包(无 "declares no dsh.bundle" 告警)。
  • 产物 lib/client.js 为 window.__ModuleLoader__.load({ id, factory }) 工厂格式(与 dsh-client-ui-settings-plugins 一致),react 经工厂 require 注入。
  • 模块级 inject 必须声明 apply 访问的全部服务:['slots', 'settingsScope']。dsh 内置 cordis 对插件上下文有严格守卫,未声明的服务属性访问直接抛 cannot get property "..." without inject,插件 fiber 进入 failed(web boot 报「entry did not activate」)。package.json 里 dsh.client.inject 则是浏览器模块图的依赖包列表(本包只 require react 种子模块,保持 []),两者不是一回事。
  • 读写走官方 settingsScope.bind 契约(与 dsh-client-ui-settings 的卡片同构):apply 期间 ctx.settingsScope.bind({ namespace }) 得到 bound scope;读 scope.getSnapshot()({status:'loading'|'ready'|'unavailable', value, revision, writable})+ scope.subscribe;写 scope.set(field, value)——revision 乐观并发、冲突恢复、镜像回填(mirror.acceptView)全部由 scope 托管,写完快照立即可见。不直接访问 ctx.remote(scope 经提供方 fiber 写入)。
  • 提交时读 scope 最新快照合并,不使用组件闭包里的 doc 构造整段写入,避免连续编辑时基于过期状态互相覆盖;文本字段失焦/回车提交,pill/勾选/下拉即时提交。
  • 卡片结构复刻官方 PluginCard:`` 根 + 折叠头按钮(aria-expanded,标题+描述+chevron)+ 展开时才渲染 body;命名空间 unavailable 时整卡不渲染(官方同款语义)。折叠箭头用 @deepseek-ai/dsh-client-ui-primitives 的 IconChevronDownOutline14(运行时种子模块,缺失退化为文本)。
  • 样式经 ensureStyles() 注入一条共享 ``(官方 data-plugin-css 机制同款),全部使用 --dsw-alias-* / --dsw-specific-* 设计令牌;组件视觉取材官方 primitives(Menu / Switch / 图标),单项缺失时逐项退化(Menu→简易弹层、Switch→checkbox、图标→文本)。
  • 插槽:settings.plugin.item(按命名空间 key 挂卡片)、conversation.input.left(composer 工具行左侧官方席位,kind:'list' / scope:'session';cell 组件经 standard props 或 inject(sessionId) 拿到当前会话,仅会话内渲染。曾用的 conversation.input.dock 是输入卡上方的整行席位,视觉突兀,已弃用)。

设置数据由后台主包 dsh-eyebrain 注册的 settings 命名空间承载;本包不注册命名空间,请与主包一同安装。

安装

pnpm install && pnpm -r run build   # 或直接使用仓库已提交的 lib/
dsh plugin --profile web add /path/to/packages/dsh-eyebrain-client   # 与主包一同挂进 web profile
dsh web

插件必须挂进 web profile(dsh web 即 --profile web):挂在 default 等 其他 profile 时 Web 宿主与浏览器 roster 都看不到,设置卡片会按官方「命名空间 不可用」语义整卡不渲染。

开发

pnpm run build       # tsup 双产物:lib/index.js(ESM)+ lib/client.js(工厂壳,build 脚本改名自 .cjs)
pnpm run typecheck   # tsc --noEmit

License

MIT