在「新建会话」的工作区下拉里直接搜索:中文支持拼音首字母与全拼,英文支持任意位置子串与忽略分隔符匹配。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:d0ublecl1ck/dsh-search-enhance
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
🌐 中文 · English
dsh-search-enhance
「工作区攒到三十个以后,每次开新会话都要在下拉里瞪着眼睛找一个名字——现在打两个字母就够了。」
给「新建会话」的工作区下拉装上搜索框:中文打拼音首字母,英文打中间任意几个字母,都能一次命中。
看效果 · 快速开始 · 匹配规则 · 它和同类有什么不同 · 安全边界
gz → 「工作区拼音测试」。中文名按拼音首字母和全拼建索引,不需要切换输入法。
它解决什么问题
事情是这样的:DSH 的工作区是刻意做成「可以一直加」的。一个人同时开着 foliole、笔记库、几个脚本仓库、给客户的两个项目——攒到二三十个很正常。
然后每次点「新会话」,下拉里就是一条长长的名单。官方的这个下拉没有搜索框,只能一行行看过去。你想找「工作区拼音测试」,眼睛得扫过每一个名字。
真正别扭的是:这个列表你明明能背下来,只是它太长。缺的不是记忆,是一个输入框。
这个插件做的就是这一件事——接管那个下拉,在顶上放一个搜索框,然后按你脑子里想的那个方式来匹配:
- 想中文工作区?打
gz(拼音首字母)或gongzuo(全拼),不用切输入法; - 记得英文名里有一段?打
pp就能找到apple-pie,不必从第一个字母开始; - 名字里有连字符、下划线?
folioleenhance也能找到foliole-enhance。
效果示例
同一个下拉,输入两三个字符就开始收窄(截图来自真实运行实例,由 scripts/verify-browser.mjs 驱动拍摄):
| 输入 | 结果 |
|---|---|
gz |
「工作区拼音测试」 |
pp |
apple-pie |
pp → apple-pie。英文匹配是任意位置子串,不要求前缀。
键盘全程可用:↑ ↓ 移动光标,Enter 选中,Esc 关闭,打开即自动聚焦搜索框。原来那个「添加工作区…」入口原样保留在面板底部。
快速开始
从 GitHub 安装:
dsh plugin --profile web add github:d0ublecl1ck/dsh-search-enhance
从本地克隆安装(改代码用这个):
git clone https://github.com/d0ublecl1ck/dsh-search-enhance
dsh plugin --profile web add ./dsh-search-enhance
装完重启 DSH Desktop(客户端模块图在 harness 启动时组合,刷新页面不够)。重启后打开新建会话页,点开工作区下拉,就能看到搜索框。
匹配规则
| 输入 | 命中 | 规则 |
|---|---|---|
gz / gzq |
工作区拼音测试 | 拼音首字母(子串或前缀) |
gongzuo / gongzuoqu |
工作区拼音测试 | 拼音全拼(子串或前缀) |
pp |
apple-pie | 英文任意位置子串 |
folioleenhance |
foliole-enhance | 去掉分隔符后比较 |
samples |
foliole-enhance-samples | 普通子串 |
aple |
apple | 子序列(弱权重兜底,只在标题上) |
| 路径片段 | 对应工作区 | 路径只参与子串匹配 |
排序:完全相等 > 前缀 > 子串 > 子序列;中文同时比对原文与拼音;同分保持官方原有顺序。
两条刻意的边界,都是真实浏览器里发现并修的:拼音投影不允许子序列(否则 pp 这种两字母查询会通过 gongzuoqupinyinceshi 命中几乎一切),路径不做模糊兜底(否则路径里的 /private/tmp/ 自带两个 p,人人都会命中 pp)。
触发方式
打开「新会话」页,点工作区按钮,然后:
gz— 找「工作区拼音测试」gongzuo— 同一件事,全拼打法pp— 找apple-piefolioleenhance— 找foliole-enhance(不记得连字符在哪)pkm— 找路径里含pkm的工作区↑↓Enter— 全键盘挑一个Esc或点面板外 — 关掉,不做任何选择
它和同类有什么不同
同类插件都在解决「工作区/会话多了不好找」,但切的位置不一样:
| 插件 | 它切的入口 | 匹配方式 | 和本插件的差异 |
|---|---|---|---|
| dsh-search-enhance(本插件) | 「新建会话」的工作区下拉,内联搜索框 | 拼音首字母 + 全拼 + 任意位置子串 + 分隔符无关 + 子序列兜底 | 唯一在这个下拉里就地过滤的 |
| dsh-workspace-kit | ⌘K 全局 Spotlight 面板 + 接管侧栏 | 名称模糊搜索 | 全局面板,不进工作区下拉;无拼音 |
| dsh-advancesearch | 侧栏搜索按钮 + MCP 工具 | 会话正文全文检索 | 搜的是会话内容,不是选择器过滤 |
| dsh-workspace-search | dsh-better-sidebar 的 Search 页签 | 工作区文件内容检索 | 搜文件,不是工作区名 |
| dsh-codex-ui | 整体替换侧栏 | 全局搜索 | 换了一整套 UI,改动面大 |
选谁取决于你要找什么:找会话内容用 advancesearch,找文件用 workspace-search,找工作区选择器本身用本插件。
安全边界
- 不写任何工作区或会话数据。 选中一行只是调用官方下拉本来就调的
onPick;「添加工作区…」走的是官方uiWorkspace.pickDirectory()+createWorkspace()。 - 只遮蔽,不替换。 插件以
priority: -1注册到 single 槽conversation.hero.workspace遮蔽官方下拉;官方注册仍在,卸载插件即恢复。 - 崩了会自动让位。 single 槽的渲染错误会触发槽注册表的 abdicate 语义,官方下拉随即接管——插件自身出问题不会让「选择工作区」整体不可用。
- 零持久化、零网络。 没有 localStorage、没有额外请求、没有遥测。
- 面板只用官方 client UI 0.1.5 与 0.1.7 都在的原子(
useAnchoredPosition加图标),图标导出名的版本差异由回退处理。
文件结构
client.js 浏览器半边:搜索算法 + 下拉面板(含内嵌拼音表)
index.js 宿主半边占位(bundle 需要一个 apply 导出)
cordis.patch.yml bundle 层:把插件插入 profile
scripts/generate-pinyin-table.mjs 生成 client.js 里的拼音表(GB2312 全字集)
scripts/verify-browser.mjs 真实浏览器端到端断言(自起 Chrome 走 CDP)
tests/search.test.mjs 搜索算法单测
tests/picker.test.mjs 组件渲染与最小 primitives 兼容性测试
assets/showcase/ README 用的真实运行截图
验证与测试
npm install # 只为生成拼音表(devDependency: pinyin-pro)
npm test # 19 项:搜索算法 + 组件渲染 + 版本兼容
npm run check:pinyin # 拼音表是否为最新
真实浏览器端到端(需要先跑起一个含三份测试工作区的 DSH 实例):
node scripts/verify-browser.mjs --url "http://127.0.0.1:4401/?token=<token>"
它会自己起 headless Chrome,断言 14 项:样式注入、引导弹窗清理、面板打开、8 组查询的精确结果集、↑↓ 光标移动、零页面错误。当前实测输出:
PASS shell paints — the boot graph rendered without a load failure
PASS plugin applies — stylesheet tag is present
PASS onboarding dismissed — first-run dialogs cleared
PASS picker opens — the shadowing occupant replaced the shipped picker
PASS query "" ... PASS query "gz" ... PASS query "gzq" ... PASS query "gongzuo"
PASS query "pp" ... PASS query "folioleenhance" ... PASS query "samples" ... PASS query "zzz"
PASS ArrowDown moves the cursor row — active row is "apple-pie"
PASS no page errors
verified: the picker searched correctly in a real browser
已知边界
- 只增强这一个下拉。 侧栏那条搜索属于
sidebar.workspacessingle 槽,要加同款匹配就得整体接管官方侧栏浏览器(会话分组、拖拽排序、归档、行菜单、目录选择)。官方在查询非空时只渲染它自己判定的命中行,DOM 层也没法把被过滤掉的行加回来——那是另一次独立交付。 - 多音字按 pinyin-pro 的主读音投影(表里保留其他读音,但候选侧只用主读音)。
- 工作区标题或路径里出现生僻字(GB2312 之外)时,该字不参与拼音匹配,仍可被子串匹配命中。
License
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 8835
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 8835
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 5002
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
ccch1mneyyy/dsh-TUI★ 4685
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/DSH-better-sidebar★ 4214
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1469
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。