@ryuu-64/dsh-find-all 0.1.10 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/NOTICE.md +46 -2
- package/README.md +23 -74
- package/docs/compatibility.md +28 -3
- package/lib/client.js +8374 -1904
- package/package.json +12 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.11
|
|
4
|
+
|
|
5
|
+
- Match the Host’s filled three-dot options icon and show readable idle, searching, empty, and incomplete count states; only available results open match-number navigation.
|
|
6
|
+
|
|
7
|
+
- Show the running plugin version and a manual public-npm latest check in search options, with bounded requests, explicit failure states, and update instructions. No automatic installation or restart.
|
|
8
|
+
|
|
9
|
+
- Add a localized About dialog using the Host Modal, with the author, explicit QQ-group copying, project links, upstream credits, and license notices.
|
|
10
|
+
|
|
11
|
+
- Add a fixed GitHub feedback link next to diagnostic copying, with public-submission guidance and no automatic data transfer.
|
|
12
|
+
- Let the result count temporarily edit a match number, with strict bounds, Enter-only navigation, accessible keyboard controls, and cancellation when result identities change.
|
|
13
|
+
|
|
14
|
+
- Search the current session through a fixed durable cursor, checking continuous event coverage instead of loading the entire Chat DOM.
|
|
15
|
+
- Keep query scans separate from history reads, show cutoff and partial states, and retain loaded-only search when the full-history capability is unavailable.
|
|
16
|
+
- Project text with the Host renderer and resolve matches to exact original-Chat message blocks on demand. Keep saved-but-unrendered fields explicit, and isolate image descriptions and live-tail counts.
|
|
17
|
+
- Preserve keyboard navigation, movable find controls and return-to-reading-position behavior.
|
|
18
|
+
|
|
3
19
|
## 0.1.10
|
|
4
20
|
|
|
5
21
|
- Keep the find bar below the conversation header and allow moving it within the conversation body with a drag handle or directional buttons.
|
package/NOTICE.md
CHANGED
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
相对上游快照 `ce7eb75`,本仓库改动如下(原上游功能一律保留):
|
|
24
24
|
|
|
25
25
|
1. 插件的名称与 cordis 行 id:`dsh-find-bar` → `dsh-find-all`(npm 包名:`@ryuu-64/dsh-find-all`);
|
|
26
|
-
2.
|
|
27
|
-
3.
|
|
26
|
+
2. **新增完整会话搜索**:通过正式 `ctx.remote.session.follow/page` 接口读取固定截点的已保存历史,验证事件序号连续覆盖,在内存文字上搜索,并在选择命中时按需定位原聊天;
|
|
27
|
+
3. 新增范围切换(`完整会话` / `已加载内容`)、读取与扫描进度(含点击停止)、独立结果展示上限与会话切换时的状态重置;
|
|
28
28
|
4. `test/find-logic.test.mjs` 由上游测试改写为 `node:test` 并扩充:新增匹配器、键盘路由与分页状态机的 19 项用例;
|
|
29
29
|
5. 新增 README、`NOTICE.md`(本文件)与仓库元数据。
|
|
30
30
|
|
|
@@ -41,3 +41,47 @@ Copyright (c) 2026 Ryuu-64 ← 本 fork dsh-find-all 的修改部分
|
|
|
41
41
|
|
|
42
42
|
- 上游部分的版权归 **secyborg**,本仓库不对上游代码主张任何额外权利;
|
|
43
43
|
- 本仓库新增/修改的部分版权归 **Ryuu-64**,同样以 MIT 发布。任何人使用本仓库时,这两行版权声明都要一并保留。
|
|
44
|
+
|
|
45
|
+
## React server text projection
|
|
46
|
+
|
|
47
|
+
The client bundle includes the React DOM 18.3.1 server renderer. It uses the Host's existing React runtime to turn the Host's public text components into inert text projections. React DOM is distributed under the MIT License:
|
|
48
|
+
|
|
49
|
+
Copyright (c) Facebook, Inc. and its affiliates.
|
|
50
|
+
|
|
51
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
52
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
53
|
+
in the Software without restriction, including without limitation the rights
|
|
54
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
55
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
56
|
+
furnished to do so, subject to the following conditions:
|
|
57
|
+
|
|
58
|
+
The above copyright notice and this permission notice shall be included in all
|
|
59
|
+
copies or substantial portions of the Software.
|
|
60
|
+
|
|
61
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
62
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
63
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
64
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
65
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
66
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
67
|
+
SOFTWARE.
|
|
68
|
+
|
|
69
|
+
## Version comparison
|
|
70
|
+
|
|
71
|
+
The client bundle includes npm node-semver 7.8.5 (https://github.com/npm/node-semver), distributed under the ISC License:
|
|
72
|
+
|
|
73
|
+
The ISC License
|
|
74
|
+
|
|
75
|
+
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
76
|
+
|
|
77
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
78
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
79
|
+
copyright notice and this permission notice appear in all copies.
|
|
80
|
+
|
|
81
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
82
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
83
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
84
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
85
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
86
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
87
|
+
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,94 +1,43 @@
|
|
|
1
1
|
# dsh-find-all
|
|
2
2
|
|
|
3
|
-
DSH
|
|
4
|
-
|
|
5
|
-
## 为什么需要它
|
|
6
|
-
|
|
7
|
-
DSH 桌面窗口是 Electron 壳,本身没有浏览器那种查找栏。而会话视图一次只在页面里保留最近 50 条消息——点一次「加载更早」才再多 50 条。
|
|
8
|
-
|
|
9
|
-
所以拿普通查找条搜一个较早的词,结果永远是 0,哪怕这段会话里确实有。
|
|
10
|
-
|
|
11
|
-
这个插件在你输入关键词之后,通过会话服务把更早的历史一页页加载进来,每加载一页就重搜一次。宿主不再提供更早页时,最后重搜并提示“已搜索当前可用历史”。宿主公开接口不能证明历史完整性,插件不会把终止信号当作“全部搜完”。
|
|
12
|
-
|
|
13
|
-
## 功能
|
|
14
|
-
|
|
15
|
-
- **⌘F / Ctrl+F** 唤起查找栏,优先带入有效的选中文字;没有新选词时恢复上次关键词。关键词仅保留在当前插件实例内存中,禁用、刷新或重启后清空
|
|
16
|
-
- **范围切换**:`包含更早内容`(默认)↔ `已加载内容`,点那个胶囊按钮切换
|
|
17
|
-
- **已加载内容**:只搜索当前会话中已经加载到页面的内容,包括滚动区域外的内容;不会继续加载历史,也不会移除先前已经加载的内容
|
|
18
|
-
- **边搜边加载**:“包含更早内容”模式下自动分页加载历史,高亮与计数随加载实时更新
|
|
19
|
-
- **进度可见**:显示「正在加载更早的历史… 已 3 页」,**点一下这段文字即可停止加载**
|
|
20
|
-
- **安全上限**:最多加载 400 页(约 2 万条消息);历史不再增长时会自行停止
|
|
21
|
-
- **导航**:Enter / Shift+Enter 上下一个;⌘G(Ctrl+G)/ F3 下一个,加 Shift 反向;Esc 关闭查找栏并清除高亮
|
|
22
|
-
- 切换会话时清除旧结果,并在新会话里重搜同一关键词
|
|
23
|
-
- 后台重扫首次找到结果时选中第一项;前插历史时优先保留可确认的当前命中,不自动滚动。原节点可对应,或同一正文块仍在且原文完全未变时,可在 Text/span 换树后恢复当前项;无法确认时把旧序号夹到新结果范围,换词或换会话则选第一项
|
|
3
|
+
DeepSeek Harness(DSH)的当前会话查找插件。按 **⌘F / Ctrl+F** 查找消息,跳到想看的地方。
|
|
24
4
|
|
|
25
5
|
## 安装
|
|
26
6
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
```sh
|
|
32
|
-
dsh plugin --profile desktop add @ryuu-64/dsh-find-all
|
|
33
|
-
```
|
|
7
|
+
1. 打开 DSH 的「插件」→「添加插件」。
|
|
8
|
+
2. 输入 `@ryuu-64/dsh-find-all`,安装并启用。
|
|
9
|
+
3. 重启 DSH(网页版需重启服务并刷新页面)。
|
|
34
10
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
安装后**完整重启一次 DSH Desktop**,再检查插件是否正常加载。
|
|
38
|
-
|
|
39
|
-
装完按 **⌘F / Ctrl+F**,右上角出现查找栏就算装好了。
|
|
40
|
-
|
|
41
|
-
### 和 dsh-find-bar 只能留一个
|
|
42
|
-
|
|
43
|
-
`dsh-find-bar` 和本插件**都会抢 Ctrl+F**,两个同时装会互相顶掉。如果你之前装过它,先卸掉。运行时 0.2.0-rc.2 可用:
|
|
44
|
-
|
|
45
|
-
```sh
|
|
46
|
-
dsh plugin --profile desktop remove dsh-find-bar
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
运行时 0.2.0-rc.1 / 0.1.7-rc.2 请在「插件 / Plugins」中找到 `dsh-find-bar` 并选择「卸载 / Uninstall」。
|
|
11
|
+
如果装过 `dsh-find-bar`,请先卸载,避免快捷键冲突。
|
|
50
12
|
|
|
51
13
|
## 使用
|
|
52
14
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
| 停止加载更早的历史 | 点「正在加载更早的历史…」那行文字 |
|
|
60
|
-
| 关闭并清除高亮 | `Esc` |
|
|
61
|
-
|
|
62
|
-
搜索全部在本机完成:插件只向 DSH 的会话服务要更早的历史,不发网络请求,也不改动会话内容。
|
|
63
|
-
|
|
64
|
-
## 已知限制
|
|
15
|
+
- **打开查找**:按 `⌘F / Ctrl+F`,输入关键词。
|
|
16
|
+
- **切换结果**:按 `Enter` / `Shift+Enter`;也可点击结果数量,输入序号后按 `Enter` 跳转。
|
|
17
|
+
- **调整搜索**:点 `⋯`,切换「完整会话 / 已加载内容」,或勾选思考、工具等内容。默认搜索用户消息和助手回复。
|
|
18
|
+
- **搜索新消息**:点 `⋯` →「重新读取最新会话历史」。
|
|
19
|
+
- **停止搜索**:点查找栏里正在搜索的状态提示。
|
|
20
|
+
- **关闭查找**:按 `Esc`;选项展开时会先收起选项。
|
|
65
21
|
|
|
66
|
-
|
|
67
|
-
- 单次搜索仅显示前 5000 处匹配
|
|
68
|
-
- 折叠起来的工具调用和思考块,正文不在页面里,搜不到——先展开再搜
|
|
69
|
-
- “包含更早内容”模式要真的翻历史,所以很长的会话首次搜索需要等几秒
|
|
70
|
-
- 宿主尚未就绪、公开报错、无进展或到达上限时,保留已找到的结果并提示未完成;再次打开查找或输入关键词可手动重试。停止、关闭、换词或切换会话会取消插件任务,但不会中断宿主已经发出的请求
|
|
71
|
-
- “已搜索当前可用历史”不保证历史完整。宿主可能在正常末页和不连续页错误时都不再提供更早页;此时重新查找也不保证恢复缺失历史
|
|
22
|
+
「完整会话」搜索已保存的消息;如果无法使用,可改选「已加载内容」。不搜索图片里的文字或附件内容。最多显示前 5000 个结果;没搜完或无法准确跳转时会提示。
|
|
72
23
|
|
|
73
|
-
|
|
24
|
+
搜索在你的设备上完成,不改动聊天记录,也不会把聊天内容发送给其他服务。
|
|
74
25
|
|
|
75
|
-
|
|
26
|
+
## 更新
|
|
76
27
|
|
|
77
|
-
|
|
28
|
+
在 `⋯` 中点「检查更新」。有新版时,去 DSH「插件」页卸载本插件,再按上面的步骤重新安装并重启 DSH。
|
|
78
29
|
|
|
79
|
-
##
|
|
30
|
+
## 反馈与交流
|
|
80
31
|
|
|
81
|
-
|
|
32
|
+
遇到问题请[到 GitHub 反馈](https://github.com/Ryuu-64/dsh-find-all/issues/new),说明你做了什么、遇到什么问题,附上必要截图。可点 `⋯` →「复制诊断信息」后粘贴到反馈中。不要公开密钥或私密对话。
|
|
82
33
|
|
|
83
|
-
|
|
84
|
-
dsh plugin --profile desktop remove @ryuu-64/dsh-find-all # 卸载
|
|
85
|
-
dsh plugin --profile desktop add dsh-find-bar # 想换回上游那个插件
|
|
86
|
-
```
|
|
34
|
+
QQ 交流群:**1129212995**。需要跟进的问题请到 GitHub 反馈。
|
|
87
35
|
|
|
88
|
-
|
|
36
|
+
点 `⋯` →「关于」可查看作者、联系方式与项目链接。
|
|
89
37
|
|
|
90
|
-
##
|
|
38
|
+
## 作者与致谢
|
|
91
39
|
|
|
92
|
-
|
|
40
|
+
由 [Ryuu-64](https://github.com/Ryuu-64) 维护,基于 [secyborg/dsh-find-bar](https://github.com/secyborg/dsh-find-bar) 开发,感谢 secyborg 的原作。
|
|
93
41
|
|
|
94
|
-
|
|
42
|
+
[MIT 许可](LICENSE):Copyright (c) 2026 secyborg / Copyright (c) 2026 Ryuu-64。
|
|
43
|
+
上游 README 见 [README.fork-origin.md](README.fork-origin.md),改动与致谢见 [NOTICE.md](NOTICE.md)。
|
package/docs/compatibility.md
CHANGED
|
@@ -1,4 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Full-session search compatibility
|
|
2
|
+
|
|
3
|
+
The unreleased full-session path targets the official DSH `0.2.0-rc.2` contract at [`639ed015`](https://github.com/deepseek-ai/deepseek-harness/tree/639ed015397290b3745d163aafe02ffee4aa3f84). The historical matrix below describes the pre-existing loaded/DOM-paging implementation; it is not acceptance evidence for this data-search path.
|
|
4
|
+
|
|
5
|
+
## Durable read and lifecycle
|
|
6
|
+
|
|
7
|
+
The plugin subscribes through `ctx.remote.session.follow`, captures the first snapshot cursor, closes that subscription, and pages older records with the same `throughSeq`. Every page must be ordered, unique and dense, meet the preceding boundary, and collectively cover `0..T`. `SessionFace.hasMore` is never used as proof of complete history. Read coverage, text-projection coverage, query scanning and the 5000-result display limit are independent states.
|
|
8
|
+
|
|
9
|
+
Remote services are acquired in a Cordis child dependency scope. Missing or withdrawn services disable full-session search without preventing the existing loaded-only mode from mounting. Query, acquisition and navigation generations are separate. Closing, scope/session changes and disposal cancel owned work; changing a query reuses the current session's text cache. No persistence, worker or alternate reader is installed.
|
|
10
|
+
|
|
11
|
+
## Text and original-Chat positioning
|
|
12
|
+
|
|
13
|
+
Assistant Markdown is projected through the Host's public `MarkdownText` component with the Host's React 18 runtime and a bundled React DOM server renderer. Each source is rendered once into an inert, unmounted template, converted to independent UTF-16 text blocks, and released. Generated code does not bundle React or request images. The single checked-in client bundle is reproducible with `npm run build`; `npm run check:build` rejects a stale artifact.
|
|
14
|
+
|
|
15
|
+
Saved source identity is retained separately from renderer offsets. Navigation uses the selected session's `loadThrough`, validates the native semantic node and content part, opens only the corresponding native disclosures, and compares complete text-block sequences before making a Range. React replacement nodes are revalidated during settling. Capped process fades and the find bar are excluded from the readable area. If a boundary prevents scrolling clear of the bar, a temporary in-panel displacement preserves its saved manual position; cancellation and user movement end that displacement.
|
|
16
|
+
|
|
17
|
+
Read, Diff, Search and supported terminal cards use validated first-party presentation data. Context follows the final RC2 Chat visibility filter: ordinary background context and system prompts are excluded; turn triggers and context containing tool changes use their native form and DOM markers. Saved but unrendered attempts/fields and Host display limits remain explicit navigation limitations. Authored image descriptions are independent saved-text results; images, OCR and attachment internals are excluded. Unknown required text types or unverified custom tool presentation report incomplete coverage rather than a false zero or complete count.
|
|
18
|
+
|
|
19
|
+
## Build and verification scope
|
|
20
|
+
|
|
21
|
+
The package version remains unchanged while the feature is under review. Packaging keeps the existing single classic-script client registration and introduces no required Host package. The final candidate must be verified with the bounded official-Host scenarios for data coverage, original-Chat landing, cancellation and return behavior; the prior release matrix is not automatically rerun or claimed.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Historical loaded-mode acceptance
|
|
26
|
+
|
|
2
27
|
|
|
3
28
|
This implementation follows the approved [Issue #1 plan](https://github.com/Ryuu-64/dsh-find-all/issues/1#issuecomment-5933617888), with the accepted release scope and unverified Desktop limits recorded in [PR #9](https://github.com/Ryuu-64/dsh-find-all/pull/9). This does not promise compatibility with untested or future hosts. Issues #2–#8 are outside this change.
|
|
4
29
|
|
|
@@ -45,8 +70,8 @@ npm ci --ignore-scripts --legacy-peer-deps
|
|
|
45
70
|
npm run check
|
|
46
71
|
npm_config_cache=/tmp/find-all-npm-cache npm run verify:release
|
|
47
72
|
npm pack --ignore-scripts --pack-destination /tmp/find-all-candidate
|
|
48
|
-
# Extract this one tgz, retain its SHA-256, then
|
|
49
|
-
|
|
73
|
+
# Extract this one tgz, retain its SHA-256, then verify its registration bytes:
|
|
74
|
+
node scripts/check-client-registration.mjs /tmp/find-all-candidate/package
|
|
50
75
|
```
|
|
51
76
|
|
|
52
77
|
`--legacy-peer-deps` here is only for isolated development test dependencies; it is not a host installation result or exemption. Test sessions must be synthetic, with no user data or model credentials. Do not change the artifact between version runs. Unknown future host versions need fresh regression evidence before changing support metadata.
|