@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 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. **新增"整段会话"搜索**:通过会话服务 `ctx.sessions`(`binding(id).session.loadOlder()` + 快照里的 `hasMore`)把尚未加载的历史分页拉进页面,每页之后重跑匹配,使命中计数覆盖整段会话;宿主读不到 `hasMore` 时退化为"翻到页面不再变化为止";
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 Desktop 的 **⌘F / Ctrl+F 查找**插件。它有一个和浏览器查找不一样的地方:**会向宿主请求更早的历史,不只搜索当前已经显示出来的部分。**
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
- 先按 **DSH 运行时版本**选择安装入口;它不一定等于 Desktop 产品版本。
28
-
29
- **运行时 0.2.0-rc.2**:用 Desktop 自带的插件命令安装:
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
- **运行时 0.2.0-rc.1 / 0.1.7-rc.2**:这两个官方安装包没有上述新版 CLI 入口,通用 `dsh plugin --profile desktop` 也会拒绝操作。请在 Desktop 中打开「插件 / Plugins」→「添加插件 / Add plugin」,填入 `@ryuu-64/dsh-find-all`,点击「安装 / Install」,完成后点击「立即启用 / Enable now」。不要用版本豁免绕过安装错误。
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
- | 打开查找栏 | `⌘F` / `Ctrl+F` |
56
- | 下一个 / 上一个命中 | `Enter` / `Shift+Enter` |
57
- | 下一个 / 上一个命中(另一套) | `⌘G`(`Ctrl+G`)/ `F3`,加 `Shift` 反向 |
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
- 发现 Bug、兼容性问题或有功能建议,请先[提交 Issue](https://github.com/Ryuu-64/dsh-find-all/issues),并附上 DSH Desktop、DSH 运行时和插件版本、复现步骤及必要截图;不要公开 API 密钥或私密对话。
26
+ ## 更新
76
27
 
77
- QQ 交流群:`1129212995`。群聊用于使用交流和社区互助;需要持续跟踪的问题请先提交 Issue,再把 Issue 链接发到群里。群聊不替代 Issue 中可检索的正式记录。
28
+ 在 `⋯` 中点「检查更新」。有新版时,去 DSH「插件」页卸载本插件,再按上面的步骤重新安装并重启 DSH。
78
29
 
79
- ## 卸载 / 回退
30
+ ## 反馈与交流
80
31
 
81
- 运行时 0.2.0-rc.2 可用:
32
+ 遇到问题请[到 GitHub 反馈](https://github.com/Ryuu-64/dsh-find-all/issues/new),说明你做了什么、遇到什么问题,附上必要截图。可点 `⋯` →「复制诊断信息」后粘贴到反馈中。不要公开密钥或私密对话。
82
33
 
83
- ```sh
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
- 运行时 0.2.0-rc.1 / 0.1.7-rc.2 请在「插件 / Plugins」中卸载本插件;需要回退时,再通过「添加插件 / Add plugin」安装 `dsh-find-bar`。
36
+ 点 `⋯` →「关于」可查看作者、联系方式与项目链接。
89
37
 
90
- ## 关于这个项目
38
+ ## 作者与致谢
91
39
 
92
- 本插件 fork 自 [secyborg/dsh-find-bar](https://github.com/secyborg/dsh-find-bar)(作者 secyborg,MIT),在上游的基础上加了自动加载更早内容的会话搜索。上游原有的查找条界面、高亮、`n/N` 计数和键盘导航都保留了下来。
40
+ 由 [Ryuu-64](https://github.com/Ryuu-64) 维护,基于 [secyborg/dsh-find-bar](https://github.com/secyborg/dsh-find-bar) 开发,感谢 secyborg 的原作。
93
41
 
94
- 版权与许可为 MIT 双署名:`Copyright (c) 2026 secyborg` 与 `Copyright (c) 2026 Ryuu-64`。上游 README 原样保存在 `README.fork-origin.md`,改动清单与致谢见 `NOTICE.md`。
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)。
@@ -1,4 +1,29 @@
1
- # Issue #1: compatibility acceptance
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 test those bytes:
49
- FIND_ALL_PACKAGE_ROOT=/tmp/find-all-candidate/package node --test test/session-adapter.test.mjs
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.