dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Kidai-ClipBoard (纪代剪贴板, KCB) — 跨会话剪贴板 + 会话预设:复制内容随时回填当前会话,把会话存为预设供下一步分支,支持右侧停靠侧栏、文件夹树与标签体系。
DSH 全局高级剪贴板 —— 保存输入与整段会话,在新会话中一键分支继续。 简体中文 · English
DeepSeek Harness 的对话、命令、片段散落在各个会话里。KCB 把「抓取草稿、保存会话、从快照分支续写、粘贴回输入框」收进一个悬浮窗口——不再翻聊天历史,不再复制粘贴长文本。
装上即用 —— 重启 DSH 后,侧边栏底部「自动剪贴板」打开窗口。
# 本地开发安装(或经该插件自身市场安装)
dsh plugin --profile desktop add file:D:\path\to\kidai-clipboard
# 或 GitHub:
dsh plugin --profile desktop add git+https://github.com/NokorinNishikino/Kidai-Clipboard.git
重启 DSH 生效。
dsh plugin --profile desktop remove kidai-clipboard
或从 profiles/desktop/package.json 移除依赖与 bundle 声明,删除 node_modules/kidai-clipboard。
kidai-clipboard;品牌名 Kidai-ClipBoard(纪代剪贴板),简称 KCB$DSH_HOME/kidai-clipboard/store.json(schema 1,原子写)| 部分 | 文件 | 职责 |
|---|---|---|
| Host 半 | lib/index.js | webServer 注册 GET/PUT /kidai-clipboard/state 与 /ping;JSON 校验 + 原子落盘 |
| Client 半 | lib/client.js | 悬浮窗 UI、捕获/粘贴/fork 逻辑、文件夹树、标签管理(ModuleLoader 格式) |
| 组装 | cordis.patch.yml | 单 loader row 挂载 host;dsh.client 声明驱动 browser 模块 |
| 槽位 | —— | sidebar.footer.action / shell.overlay / conversation.chat.assistant-actions / kidai-hub.tabs / settings.section |
settings.window.dock: "right";右端钉死左侧拖宽(最小 280);收起/关闭自动释放;停靠时扁平无缝(无投影、去掉自身顶边框、顶边紧贴会话区分界线)#kidai-clipboard-dock-inset → [data-conversation-scroll]{margin-right:Npx!important}(不用 inline style —— DSH 重渲染会把 React 不认识的 inline 属性清掉,切换会话后内容就会被面板挡住);收起态挤出胶囊宽度 42px;拖动/拖到边缘时跟手,松手用 .kidc_snapBack 过渡滑入停靠位requestAnimationFrame 节流),左侧工作区联动按 ~90 ms 节流;面板内容在拖动时隐藏并显示实时尺寸占位屏,松手才落库一次settings.ui.resizeHandle = corner(默认,右下角)/ edge(窗口左侧整条竖列;左边界跟随指针、右边界固定)—— 右下角被其它插件遮挡时用 edgesettings.ui.actionBar = bottom(默认,底部一行:新建输入 / 保存快照 / 抓取输入)/ left(面板左侧竖栏排列)settings.window.pillTop 记忆竖直位置(缺省=会话区顶);位移 ≥3px 才算拖动、否则算点击(点击语义在 pointerup 判定,避免残留状态吞掉下一次点击);向左拖离右缘 >24px 视为"拖出停靠" → dock: null 并在该位置以悬浮窗展开kidai-snapshot-guard —— 状态 chips(统计 + 版本)→ 横向页签(通用 / 会话保存 / 数据 / 关于)→ 卡片内容;SettingsPanel({ layout }) 的 hub 形态用左侧品牌栏(168px),classic(设置页回退)用横向品牌头部draggable + dragstart/dragover/drop,条目 id 走 dataTransfer)。拖到文件夹行=设 folderId;拖到另一条目=按鼠标在卡片上下半决定插入前/后,并继承其 folderId,随后重编同容器内所有条目的 order(0..n-1);拖到列表空白=folderId = null。排序规则:置顶 → order → 最近更新。拖放事件一律 stopPropagation,否则会被父级(文件夹行/列表根)抢走prefs.folderEditor 记录目标 id,弹窗内改名称 + 从 PALETTE 选色(含 null=无色),Enter 保存 / Esc 关闭remote.session.follow + 反向 page(slim 事件),保存 sessionId / lastSeq / transcript / agentPreset / cwdturn/end 事件列出已完成轮次;选定第 N 轮时 atSeq = 该 turn/end 的 seq,turnCount / totalTurns 记录截断信息,records 与转录同步裁剪follow 最新一页,再用 session.page({throughSeq}) 逐页回溯(滚动到顶部同样触发;浏览上限 20000 事件,独立于「最大会话记录数」),保存前自动补齐ctx.sessions.fork({sessionId, atSeq})——先按选定轮次边界切,失败降级到最后完成轮次,再失败转录兜底scripts/smoke-*.mjs(host 路由/契约/槽位行为);scripts/verify-*.mjs(真实组合/捕获校验)sessions/conversation/remote.session(不可用时给出提示)node scripts/sync-install.mjs 同步到 profile 再重启MIT