npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@linbin-mk/dsh-client-ui-settings-sync

v0.5.0

Published

Session sync UI plugin for the dsh web GUI: the Sync settings page (git remote, cadence, cleanup, and the read-only synced-session tree), the session row's sync toggle, and the sync-records dialog, all talking to the host through the plugin's own same-ori

Readme

English | 简体中文

@linbin-mk/dsh-client-ui-settings-sync

npm 版本 许可证

dsh-session-sync 插件的浏览器半边:DeepSeek Harness Web GUI 的会话同步设置页(settings.section id sync)与侧栏状态点(sidebar.footer.action id session-sync-status)。

设置段走 harness 通用的 config form(ctx.configForms.get('session-sync'):读取、订阅推送,写入是带修订号围栏的 mutate),因此不碰 harness 的 RPC 表;状态、手动同步/清理与日志经 host 自建的同源 HTTP API(/session-sync/*,普通 fetch)传输。Host 把偏好保留在浏览器进程内的页面(非 loopback,mode: 'memory')只读展示配置、禁用全部写入控件;config form 把 host 的拒绝压成 false,此时页面再用插件的 POST /session-sync/settings 取回拒绝原因。工作区选项来自标准的 useWorkspaces hook。

host 半边见 @linbin-mk/dsh-session-sync。

组合配置

- id: ui-settings-sync
  name: '@linbin-mk/dsh-client-ui-settings-sync'

要求 DeepSeek Harness 0.1.7-rc.2(@deepseek-ai/cordis ^4.0.4),并 peer 依赖 Host 半边 @linbin-mk/dsh-session-sync ^0.4.0。

开发

pnpm test        # controller、设置页、状态页脚、slot 注册
pnpm typecheck
pnpm build       # tsc(类型)+ tsdown(node 半边 + lib/client.js 浏览器 bundle)

测试基于最小假件(tests/helpers.ts)与 vendor 的快照存储引擎运行——因为已发布的 harness 客户端包只以浏览器 bundle 提供其 /client 运行时;详见仓库 README。

许可证

MIT —— 见 LICENSE。

src/client/store.ts 中的快照存储引擎裁剪自采用 MIT 许可证的 DeepSeek Harness;浏览器 bundle(lib/client.js)在构建期内联了同样采用 MIT 许可证的 zustand、immer 与 clsx。上游版权声明与许可证文本见 NOTICE。

v2(0.5)浏览器半边

v2 起会话同步不再由置顶决定:会话行 ... 菜单里出现本插件的条目,设置页改为只读的同步会话集合。本包现在注册四个槽:

| 槽 | id | order | 内容 | |---|---|---|---| | settings.section | sync | 30 | 设置页(enabled / remote / branch / intervalMinutes / cleanup 仍是草稿-保存,mappings 已删除) | | sidebar.footer.action | session-sync-status | 0 | 状态点(名称改为 syncedCount) | | sidebar.workspaces.session.menu.item | session-sync.toggle | 500 | 「同步会话」/「会话同步中」 | | shell.overlay | session-sync.dialog | 0 | 该会话的同步记录弹窗 |

  • 菜单项:已加入 → 「会话同步中」,点击经 apply 闭包里的 observable 向弹窗提出请求;未加入 → 「同步会话」,点击先落本地乐观状态再 POST /session-sync/sessions/<id> 并关闭菜单(host 顺带立刻跑一轮)。插件未配置(status.configured === false)或集合里该会话 present === false(本机不持有)时整条不渲染。
  • 弹窗:GET /session-sync/sessions/<id>/records(新→旧)列出机器 / 时间 / 方向 / 事件数 / 冲突,带加载与可重试的错误态,动作为「立即同步」「关闭同步」「关闭」。shell.overlay 本身点击穿透,弹窗经 ui-primitives 的 Modal(自己的全屏层设 pointer-events: auto)重新接收指针事件。
  • 设置页:只读的「同步会话集合」树(工作区 → 会话;同名 0 个 / 多个分别给出警告徽标)与只读的「待匹配工作区」区(没有任何绑定 UI:在本机建同名工作区即自动匹配)。
  • 选择集合在插件启动时就读一次(行菜单在设置页从未打开时也要能判定文案),此后每次变更、settings/document-updated(同命名空间)与 connection/reset 都会刷新。
  • 本机不再使用 useWorkspaces:树上的 matched / matches 由 host 的选择视图给出。
  • shell.overlay 由 ui-layout 声明,而本包不依赖它,因此 src/client/slot-contract.ts 原样重述了该槽的 SlotMap 声明(仅类型,运行期不依赖);host 路由字面量同理在 src/client/api.ts 重述(浏览器 bundle 的纯净性门禁禁止跨插件值导入)。