dsh-history
by xuender
在 DSH 中用 ↑/↓ 键调出并重跑当前会话的命令历史
Recall and re-run the current session's command history with ↑/↓ keys in the DSH
安装
dsh plugin --profile web add github:xuender/dsh-historyGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
English · 简体中文
dsh-history — DSH Web 命令历史插件
在 DSH Web GUI 中记住当前会话的历史命令,输入框获得焦点时按 ↑ / ↓ 键即可切换之前的命令,修改后按 Enter 重新执行。
✨ 功能
- 记录:自动记录当前会话中你发送过的所有消息(普通消息与
/xxx斜杠命令),按会话隔离;历史来自会话日志(user/command节点),因此刷新页面后会自动重建,无需额外存储。 - ↑:从输入框回退到上一条命令;再按继续往前翻。首次按下时会保存你正在编辑的草稿,之后按 ↓ 可回到它。
- ↓:向前翻到更新的一条;翻到最新后再按 ↓ 回到之前保存的草稿。
- 修改再执行:召回的命令写入输入框草稿,直接编辑后按 Enter 即重新发送。
- 安全兜底:
/或@触发菜单打开时、中文等 IME 输入中、composer 忙碌/锁定时、焦点不在输入框时,↑/↓ 保持原有行为,不会干扰。
📦 加载方式
插件是标准的 DSH 静态插件(参见 develop/basic 教程)。入口名必须是裸包名 dsh-history,并且要从两个解析树都能解析到本包目录(host loader 从 DSH 安装目录的 node_modules 解析裸名,客户端模块扫描器从 profile 目录向上解析 dsh-history/package.json),因此需要建立两个符号链接:
# 1) profile 侧(客户端模块扫描器):$DSH_HOME 默认 ~/.dsh
ln -s /absolute/path/to/dsh-history ~/.dsh/profiles/node_modules/dsh-history
# 2) 安装侧(host loader 裸名解析):指向 dsh 安装的 node_modules
ln -s /absolute/path/to/dsh-history /home/ender/.npm/_npx/1e7f6d9597241db0/node_modules/dsh-history
然后通过 patch 启动:
dsh web --patch /absolute/path/to/dsh-history/cordis.yml
或把 cordis.yml 的内容(insert 一段)合并进 $DSH_HOME/profiles/web/cordis.patch.yml 常驻加载。
🗂️ 目录结构
dsh-history/
├── package.json # dsh.client 声明(platform: web)→ 被 client-modules 扫描进 __DSH_BOOT__
├── cordis.yml # patch:把插件 entry 插入 loader
├── lib/
│ ├── index.js # host 半区:仅占位(loader 需要可解析的模块)
│ └── client.js # 浏览器 bundle:历史记录 + ↑/↓ 导航 + dock 指示器
├── scripts/
│ └── smoke-test.mjs # Node 冒烟测试(npm test)
├── README.md # 英文版
└── README.zh-CN.md # 本文件(简体中文)
⚙️ 工作原理
- 客户端模块机制:包声明
dsh.client: { platform: "web" }且exports["./client"]指向lib/client.js后,dsh-client-modules会自动把该 entry 编入window.__DSH_BOOT__,并以/plugins/<entry名>/client.js提供;浏览器端按window.__ModuleLoader__.load({ id, factory })契约注册插件。 - 记录:注册在
conversation.input.dock插槽的组件订阅会话快照useSession((s) => s.nodes),按seq增量扫描user/command节点(列表按 seq 升序且不截断),去重(相邻相同合并)、上限 100 条,存于模块级Map<sessionId, …>。 - 导航:
document上挂 capture 阶段keydown,仅当焦点在[data-composer-card]内、无触发菜单(claim为空)、非 IME、无修饰键、非忙碌时接管 ↑/↓,通过inputActions.setDraft(text)写入草稿;编辑检测会在你输入后自动回到实时位置。 - 指示器:浏览历史时在 composer 上方显示「历史 n/m」小徽标。
⚠️ 限制
- 历史按会话隔离、内存驻留(页面刷新后从会话日志重建,因此会话内不丢;浏览器关闭则丢弃)。
- 斜杠命令以
/name args形式召回(来自command节点)。 - 图片消息(无文本)不进入历史。
🤝 社区
- 贡献指南 — 如何报告 Bug、提功能需求、提交 Pull Request(含面向新手的
good first issue入门任务)。 - 行为准则 — 我们对社区每一位成员的期望。
- 安全政策 — 如何私下上报安全漏洞。
- 支持渠道 — 在哪里提问(Issues 与 讨论区 的分工)。
📄 许可证
原始 README: https://github.com/xuender/dsh-history/blob/main/README.zh-CN.md ↗
同类插件
查看全部 →
dsh-web-ui-all
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。

dsh-web-ui
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。

dsh-TUI
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。

DSH-better-sidebar
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。

working-activity
让 agent 的"工作状态行"活过来——实时工具动态与进度、俏皮文案、模型自述、上下文预警。同一套想法,适配两个平台: pi CLI 与 DeepSeek Harness(DSH) 。

deepseek-idesign
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。