← 返回列表
✓ 可直接安装
DSH Web GUI 的方向键导航。无需离开键盘即可切换会话:
自动检查通过:npm 包已发布且 engines 声明满足基线;该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/21 · 已提供中文文档
综合分
29.8
GitHub 分
29.8
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-arrowkey-navnpm 包 dsh-arrowkey-nav 已校验归属本仓库,走 npm 安装最省事
信任档位:已验证本站已于 1 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · other
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 5 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/24
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/22(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-arrowkey-nav @ 0.1.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/22 15:34:09
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-arrowkey-nav DSH Web GUI 的方向键导航。无需离开键盘即可切换会话: | 按键 | 操作 | 范围 | | --- | --- | --- | | ↑ | 上一个会话 | 当前工作区内 | | ↓ | 下一个会话 | 当前工作区内 | | ← | 上一个工作区 | 所有工作区 | | → | 下一个工作区 | 所有工作区 | ↑/↓ 在工作区两端循环,绝不会跨越到相邻工作区;跨越是 ←/→ 的职责。切换后,目标行会滚动到可见区域,并且如果按键开始时焦点在输入框,焦点会返回输入框,因此可以立即继续输入。 安装 dsh plugin --profile web add E:\test\rewrite-agently\dsh-arrowkey-nav 之后重启该 profile —— 正在运行的实例不会热加载新的 bundle 层。然后重新加载 http://127.0.0.1:3080。 确认该行已出现在组合后的配置树中: dsh web --dump-config | Select-String dsh-arrowkey-nav 移除 dsh plugin --profile web remove dsh-arrowkey-nav 重启后,按键行为与安装前完全一致:监听器由插件的 Cordis effect 持有,并随之移除。 工作原理 身份来自两个客户端控制器,绝不来自 DOM:行不携带任何 data-*,也没有 id,因此无法询问某一行是哪个会话。 - ctx.sessions.open(id) 执行每一次切换。详情面板无需处理:当前会话变化时,已发布的框架会自动关闭它。 - ctx.workspaces.list.getSnapshot() 提供工作区顺序 —— 即 ←/→ 遍历的顺序,也是每个工作区成员列表的来源。 哪个会话是“下一个”遵循侧边栏绘制的顺序,而不是控制器的成员顺序。两者恰好在你会注意到的情况下不一致:侧边栏会将自己持久化的顺序与成员关系进行协调,并将最近活跃的会话提升到顶部,因此一个旧会话在你打开它的那一刻就会跳到第一行。因此,插件从侧边栏读取渲染后的行顺序,并在侧边栏未挂载(折叠的侧栏)时回退到控制器顺序。只有当某个分区的行涵盖了控制器为该工作区报告的所有会话时,该分区才会被接受;有歧义或不匹配的分区会回退,而不是猜测。 当事件已经属于其他人时,按键不会被处理:任何修饰键、IME 组合输入、已在上游处理的事件,或焦点位于对话框、菜单或其他可编辑字段(侧边栏的会话搜索、重命名框)内。监听器在捕获阶段注册,但仅在实际导航时调用 preventDefault()。 输入框是唯一有条件的情况。空输入框会让出它的方向键 —— 没有光标需要移动,因此该按键是空闲的 —— 这正是你在发送消息后、输入框仍保持焦点时能够立即导航的原因。一旦输入框持有草稿,它的方向键就重新属于光标, 因此编辑提示词永远不会被劫持。 浏览器端没有 React 组件、没有 CSS,也没有平台模块请求,并且该包没有运行时依赖——lib/client.js 由 scripts/build-client.mjs 生成,符合页面所期望的模块加载器契约。 开发 npm run typecheck # 两个编译器面 npm test # 解析器单元测试 + 构建产物冒烟测试 npm run build # 编辑 src/client 后重新生成 lib/client.js npm run build 需要 typescript;如果该包中未安装它,请将 DSH_TYPESCRIPT 指向一个现有的 typescript 模块目录。 已知限制 - 折叠的工作区分组不会滚动。 其行未挂载,且 dsh 没有公开的展开分组方式,因此切换会发生,但目标行仍不可见。当前会话所在的工作区由 dsh 自身保持展开,因此 ↑/↓ 不受影响。 - 侧边栏折叠为窄栏时不会滚动,原因相同:树未挂载。切换仍会发生。 - “单一列表”模式没有工作区分区,但 ←/→ 仍会按控制器的工作区顺序移动,因此列表看起来可能在分区之间跳跃。 - 滚动是尽力而为。 任何查找失败都会被吞掉:选择已经移动,缺失的行绝不能变成错误的行。 - 固定于 dsh 0.1.2-rc.1。 sessions 和 workspaces 快照字段尚未稳定。如果 dsh 升级改变了它们,src/client/navigate.ts 和 src/client/apply.ts 是仅需重新审视的文件;某个服务消失会让插件保持挂起,而不是让页面失败。 版本兼容性 此分支(compat/0.1.1)面向 DSH ≤ 0.1.1-rc.2(dsh-client-runtime 代际)。 - package.json → dsh.client.inject 为空:0.1.1 早于 dsh-api-session-controller,声明此代际上不存在的 bundle 可能会破坏客户端组合。服务仅通过 Cordis 注入(sessions、workspaces)解析。 - uiWorkspace 未被注入且是可选的:在没有它的构建上,空工作区回退会被跳过(blank-first / newest-first 仍然有效)。 - 如果任一快照服务在运行时缺失,插件会保持挂载但不起作用,并且每次按下方向键都会记录 services missing——它从不抛出异常。 - 在 0.1.1-rc.2 上的实机验证尚待进行;首次使用前,请在 Web 控制台中运行 diagnose-console.js 并检查 __dshArrowkeyNav.snapshot()。 对于 DSH 0.1.5-rc.x,请参见 compat/0.1.5-rc 分支。 布局 src/index.ts node 端:加载器入口,不安装任何内容 src/client/constants.ts 拥有的按键、读取的 DOM 锚点 src/client/navigate.ts 窄腰:快照类型 + 方向键解析器 src/client/apply.ts 执行:open / blank-first / connectWorkspace src/client/dom.ts 只读 DOM:滚动容器、分区绑定、滚动、聚焦 src/client/session-nav.ts 按键守卫 + 一次方向键按下端到端 src/client/index.ts Cordis 入口:注入 + 一个捕获监听器 scripts/build-client.mjs 生成 lib/client.js tests/ 解析器单元测试 + 打包冒烟测试 许可证 MIT