dsh-sidenote 0.6.0 → 0.6.2
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/README.md +50 -67
- package/docs/assets/README.md +23 -0
- package/docs/assets/logo.svg +18 -0
- package/lib/client.js +115 -110
- package/package.json +4 -2
- package/src/client/sidechat/ComposerBar.tsx +5 -0
package/README.md
CHANGED
|
@@ -1,110 +1,93 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(max-width: 640px)" srcset="docs/assets/hero-compact.svg">
|
|
4
|
+
<img src="docs/assets/hero.svg" alt="dsh-sidenote:思路可以分岔,主线始终向前。划选注释、侧边追问,再把结论带回来。" width="100%">
|
|
5
|
+
</picture>
|
|
3
6
|
</p>
|
|
4
7
|
|
|
5
8
|
<p align="center">
|
|
6
|
-
|
|
9
|
+
为 <b>DeepSeek Harness</b> 加上侧边聊天与划选注释。<br>
|
|
10
|
+
读到一个疑问,就在旁边聊透;有了结论,再带回正在推进的任务。
|
|
7
11
|
</p>
|
|
8
12
|
|
|
9
13
|
<p align="center">
|
|
10
|
-
<a href="
|
|
11
|
-
<a href="
|
|
12
|
-
<a href="
|
|
13
|
-
<
|
|
14
|
+
<a href="#安装">安装</a> ·
|
|
15
|
+
<a href="#看看它如何工作">功能演示</a> ·
|
|
16
|
+
<a href="docs/usage.md">使用指南</a> ·
|
|
17
|
+
<a href="README_EN.md">English</a>
|
|
14
18
|
</p>
|
|
15
19
|
|
|
16
20
|
<p align="center">
|
|
17
|
-
<a href="
|
|
21
|
+
<a href="https://www.npmjs.com/package/dsh-sidenote"><img src="https://img.shields.io/npm/v/dsh-sidenote?color=3B5BFD&label=npm" alt="npm version"></a>
|
|
22
|
+
<a href="https://github.com/g-yixuan/dsh-sidenote/actions/workflows/ci.yml"><img src="https://github.com/g-yixuan/dsh-sidenote/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
23
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-60708E" alt="MIT license"></a>
|
|
18
24
|
</p>
|
|
19
25
|
|
|
20
|
-

|
|
27
|
+
|
|
28
|
+
<p align="center"><sub>dsh-sidenote 0.6.0 · DSH 0.2.0-rc.2 · 原生侧栏 · 浅色主题</sub></p>
|
|
21
29
|
|
|
22
30
|
## 安装
|
|
23
31
|
|
|
32
|
+
在已安装 DSH 的环境中执行:
|
|
33
|
+
|
|
24
34
|
```bash
|
|
25
35
|
dsh plugin --profile web add dsh-sidenote
|
|
26
36
|
```
|
|
27
37
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
本地开发挂载:`dsh plugin --profile web add link:<本仓库路径>`(client 改动热重载,host 改动需重启 `dsh web`)。
|
|
31
|
-
|
|
32
|
-
## 侧边聊天——支线问题不打断主线
|
|
33
|
-
|
|
34
|
-
从当前主会话 **fork**(全量历史快照,不压缩)出独立侧边会话,在右侧栏多轮对话:
|
|
38
|
+
打开 DSH Web,点击会话顶栏的 **「侧边」**,或划选一段回复开始。也可输入 `/side` 打开侧聊,用 `Alt+J` 切换主、侧输入焦点。
|
|
35
39
|
|
|
36
|
-
-
|
|
37
|
-
- 与主对话**同一套渲染材质**:工具卡、思考预览、任务卡、模型/权限切换、`@` 引用、图片附件;
|
|
38
|
-
- 审批/提问**在面板内直接答复**,不用跳回主视图;跑完有 toast 通知;
|
|
39
|
-
- 继承历史默认折叠成指示卡;折叠态/滚动位置刷新不丢;`Alt+J` 主↔侧切焦点。
|
|
40
|
-
- 侧聊默认不进入左侧会话列表或搜索结果,创建时也不会先出现再消失;保存为正式会话后才列出。DSH 0.1.7+ 可在 **设置 → 通用设置 → 在会话列表中显示侧边聊天** 中找回较早的侧聊;该选择仅保存在当前浏览器、当前 DSH 地址。旧版继续归档隐藏,通过 `/side` 重开最近关闭。
|
|
40
|
+
原生侧栏宿主无需额外安装 `dsh-better-sidebar`;旧宿主按[兼容表](docs/compatibility.md)安装对应组合。
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
## 一个任务,容得下更多思路
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
### 有疑问,在旁边聊透
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
- 「保存为正式会话」转正进会话列表;`/side` 弹层重开最近关闭。
|
|
46
|
+
评审方案时想追问一个细节,读代码时想弄清一种实现,都可以从当前对话开一个侧聊。**完整历史随 fork 保留**,不用再交代一遍背景。
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
侧聊有独立的多轮对话、工具卡、模型和权限切换,也支持图片、`@` 引用以及面板内审批。主线和支线各自推进。
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
### 有想法,直接落在原文上
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
- 添加到主对话或侧边聊天都保存为同一类受控注释,使用同一套 chip 预览、逐条移除及批量清空;引用和注解全文保留,**草稿零污染**,可只发送引用;
|
|
55
|
-
- 新建注解点击编辑器外部或按 Enter 保存,Esc 明确取消;主→侧先等待选定 Tab 的真实子会话,等待期间可按 Esc 取消,失败则保留注解并提示重试;
|
|
56
|
-
- 通过宿主原生输入机发送,保留 `@` 引用、图片附件和队列/steer 仲裁;目标会话出现持久消息或真实队列记录后,这一批注释才标为已发送,气泡收成「批注 ×N」留痕;
|
|
57
|
-
- 保存的注释按目标会话隔离;存储不可用时提示仅保存在内存。发送失败保留注释与正文,提交期间新增或修改的注释留给下一条消息。
|
|
58
|
-
- 侧边 assistant 正文也支持局部划选、多段落、列表与代码引用,入口只向所在侧聊添加;继承历史同样归当前子会话。流式、跨消息、思考和控件不作为引用。角标与高亮跟随来源消息并裁剪到其可见区域;原文折叠时注释仍在 chip 中。
|
|
59
|
-
- 已保存注释刷新后保留。宿主恢复原生 tab 时重新绑定原子会话;未恢复侧栏时,可用 `/side` 中的“重开”恢复原子会话及注释。新建 fork 使用自己的独立注释列表。
|
|
60
|
-
|
|
61
|
-
| 划选浮层 | 注解编辑器 |
|
|
62
|
-
|---|---|
|
|
63
|
-
|  |  |
|
|
52
|
+
划选主对话或侧聊中的一段回复,写下问题或修改意见。**原文和注释一起保留**,可累积多条,发送前预览、移除,正文草稿照常编辑。
|
|
64
53
|
|
|
54
|
+
读到「没有结果时,引导用户调整搜索词」,就选中这一句,追问「这里如何设计才不会让用户卡住?」。
|
|
65
55
|
|
|
66
|
-
|
|
67
|
-
<summary><b>更多截图</b></summary>
|
|
56
|
+
### 有结论,带回正在做的事
|
|
68
57
|
|
|
69
|
-
|
|
70
|
-
|---|---|
|
|
71
|
-
|  |  |
|
|
58
|
+
侧聊回答下点击「回流到主会话」,**问题与回答成对带回**,出现在主输入框上方,随下一条消息送入主线。也可以整段回流,或将值得保留的侧聊保存为正式会话。
|
|
72
59
|
|
|
73
|
-
|
|
74
|
-
|---|---|
|
|
75
|
-
|  |  |
|
|
60
|
+
## 看看它如何工作
|
|
76
61
|
|
|
77
|
-
|
|
62
|
+
**划选一句 → 带着上下文追问 → 把结论带回主线。**
|
|
78
63
|
|
|
79
|
-
|
|
64
|
+

|
|
80
65
|
|
|
81
|
-
|
|
66
|
+
[观看清晰版 MP4](docs/assets/demo.mp4) · [查看静态截图](docs/assets/workflow.jpg)
|
|
82
67
|
|
|
83
|
-
|
|
68
|
+
<sub>以上素材重新录制于 dsh-sidenote 0.6.0 / DSH 0.2.0-rc.2。使用隔离环境中的示例对话与本地演示模型,展示真实界面操作;内容与回答为合成示例。</sub>
|
|
84
69
|
|
|
85
|
-
|
|
70
|
+
## 用起来顺手的细节
|
|
86
71
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
72
|
+
| 你关心的事 | Sidenote 如何处理 |
|
|
73
|
+
|---|---|
|
|
74
|
+
| 之前聊过的内容 | 侧聊继承完整历史,默认折叠,按需展开。 |
|
|
75
|
+
| 一次有多处意见 | 多条注释可以一起发送,也能逐条预览和移除。 |
|
|
76
|
+
| 发不出去怎么办 | 发送失败保留注释与正文,便于重试。 |
|
|
77
|
+
| 刷新后继续 | 已保存的注释保留;侧栏未恢复时,可从 `/side` 重开原侧聊。 |
|
|
78
|
+
| 不想让支线堆满列表 | 侧聊默认不进入会话列表和搜索,保存为正式会话后才列出。 |
|
|
79
|
+
| 结论值得长期保留 | 保存为正式会话,后续继续讨论。 |
|
|
92
80
|
|
|
93
|
-
|
|
81
|
+
具体操作、恢复行为和划选范围见[使用指南](docs/usage.md)。
|
|
94
82
|
|
|
95
|
-
|
|
96
|
-
|---|---|
|
|
97
|
-
| `pnpm typecheck` | tsc --noEmit |
|
|
98
|
-
| `pnpm test` | vitest 单测(先运行 build) |
|
|
99
|
-
| `pnpm build` | 类型声明 + tsdown(host ESM + client CJS bundle,纯度门) |
|
|
100
|
-
| `pnpm test:mount` | 真实 `dsh web` + 种子会话 + Playwright 挂载与交互验收(`BS_VERSION`/`DSH_CMD` 切版本矩阵) |
|
|
83
|
+
## 兼容与帮助
|
|
101
84
|
|
|
102
|
-
|
|
85
|
+
已验证的原生侧栏组合为 **DSH 0.1.5-rc.2、0.1.7-rc.2、0.2.0-rc.2**;旧版的三组 BS 组合继续保留验收。支持范围以[兼容与维护政策](docs/compatibility.md)中的精确版本为准。
|
|
103
86
|
|
|
104
|
-
|
|
87
|
+
遇到问题时,可在 **设置 → 通用设置 → dsh-sidenote 诊断模式** 开启诊断,查看并手动导出接入状态。[报告问题或提出建议](https://github.com/g-yixuan/dsh-sidenote/issues/new/choose)。
|
|
105
88
|
|
|
106
|
-
|
|
89
|
+
## 一起完善 Sidenote
|
|
107
90
|
|
|
108
|
-
|
|
91
|
+
欢迎补充使用反馈、复现问题、改进文档和提交代码,中文与 English 都可以。开发环境、命令和检查步骤见[贡献指南](CONTRIBUTING.md)。
|
|
109
92
|
|
|
110
|
-
MIT
|
|
93
|
+
[仓库维护](docs/maintaining.md) · [发布指南](docs/releasing.md) · [MIT License](LICENSE)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# README media / 首页素材
|
|
2
|
+
|
|
3
|
+
The screenshots and recording used by the README were captured on **2026-10-18** with **dsh-sidenote 0.6.0** (source: `7ed85e4`) and **DSH 0.2.0-rc.2**, using the native right sidebar without better-sidebar. The host's active bundle inventory and the mounted plugin's build hash were checked before capture.
|
|
4
|
+
|
|
5
|
+
首页截图与录屏于 **2026-10-18** 重新采集,使用 **dsh-sidenote 0.6.0**(源码 `7ed85e4`)与 **DSH 0.2.0-rc.2** 原生右侧栏,不安装 better-sidebar。采集前核对了宿主实际激活的组件版本与插件构建摘要。
|
|
6
|
+
|
|
7
|
+
- `workflow.jpg`: the main and side conversations with a returned answer / 主、侧对话与回流结论。
|
|
8
|
+
- `selection.jpg`: a selected passage and its note editor / 划选与注释编辑器。
|
|
9
|
+
- `sidechat.jpg`: a completed side-chat response / 侧聊问答。
|
|
10
|
+
- `demo.gif`, `demo.mp4`: the same continuous selection → annotation → side reply → reflow sequence / 同一段连续操作的 GIF 与 MP4。
|
|
11
|
+
- `hero.svg`, `hero-en.svg` and their `-compact.svg` variants: original vector covers; regenerate with `python3 scripts/build-brand-assets.py` / 原创矢量封面,可用该命令重新生成。
|
|
12
|
+
|
|
13
|
+
The host uses its **light theme** and a 16 px conversation font. Screenshots show the real interface; they are not UI mockups. The recording preserves browser frame timing. A browser translation extension's floating control was temporarily hidden during capture and restored afterwards. No DSH controls were altered.
|
|
14
|
+
|
|
15
|
+
宿主使用**浅色主题**与 16 px 会话字号。截图来自真实界面,录屏保留浏览器帧的时间间隔。录制期间临时隐藏了浏览器翻译扩展的浮动控件,随后恢复;没有修改 DSH 控件。
|
|
16
|
+
|
|
17
|
+
Conversation content is a synthetic note-search design example. A local demo adapter supplies fixed answers through the host's LLM interface; the fork, annotation, submission, and reflow paths are real. This illustrates the workflow, not model answer quality or latency. No private sessions or external model credentials are used.
|
|
18
|
+
|
|
19
|
+
对话内容是合成的笔记搜索设计示例。本地演示模型通过宿主 LLM 接口提供固定回答;fork、注释、发送与回流均执行真实流程。素材用于说明操作,不代表模型回答质量或响应速度,也不使用私人会话或外部模型凭证。
|
|
20
|
+
|
|
21
|
+
For future captures, use a fresh isolated DSH home and a verified host version, confirm the mounted bundle, select the light theme, and repeat the complete workflow. The older `capture-demo.mjs` and `capture-video.mjs` scripts target historical BS layouts and do not reproduce these native-sidebar assets unchanged.
|
|
22
|
+
|
|
23
|
+
以后重录时,使用全新隔离的 DSH home 和已验证宿主版本,核对实际挂载构建,选择浅色主题,并走完完整流程。旧 `capture-demo.mjs`、`capture-video.mjs` 面向历史 BS 布局,不能原样用于复现这组原生侧栏素材。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0" stop-color="#3B5BFD"/>
|
|
5
|
+
<stop offset="1" stop-color="#2743D8"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect width="128" height="128" rx="28" fill="url(#bg)"/>
|
|
9
|
+
<!-- 主区:两行文本(主对话流)——垂直中心配平 -->
|
|
10
|
+
<rect x="24" y="42" width="46" height="9" rx="4.5" fill="#fff" opacity="0.92"/>
|
|
11
|
+
<rect x="24" y="59" width="36" height="9" rx="4.5" fill="#fff" opacity="0.5"/>
|
|
12
|
+
<!-- 侧栏分隔线 -->
|
|
13
|
+
<rect x="79" y="30" width="2.5" height="68" rx="1.25" fill="#fff" opacity="0.3"/>
|
|
14
|
+
<!-- 侧边气泡(侧边聊天)——尾巴与泡体一体成形 -->
|
|
15
|
+
<path d="M94.5 42 h12 a5.5 5.5 0 0 1 5.5 5.5 v6 a5.5 5.5 0 0 1 -5.5 5.5 h-7.5 l-4.5 6 v-6 a5.5 5.5 0 0 1 -5.5 -5.5 v-6 a5.5 5.5 0 0 1 5.5 -5.5 z" fill="#fff"/>
|
|
16
|
+
<!-- 侧栏次级行 -->
|
|
17
|
+
<rect x="89" y="70" width="15" height="7" rx="3.5" fill="#fff" opacity="0.5"/>
|
|
18
|
+
</svg>
|
package/lib/client.js
CHANGED
|
@@ -619,7 +619,7 @@ window.__ModuleLoader__.load({
|
|
|
619
619
|
let dockRegistered = false;
|
|
620
620
|
let report = {
|
|
621
621
|
versions: {
|
|
622
|
-
sidenote: "0.6.
|
|
622
|
+
sidenote: "0.6.2",
|
|
623
623
|
dsh: "unknown",
|
|
624
624
|
betterSidebar: null
|
|
625
625
|
},
|
|
@@ -1234,15 +1234,15 @@ window.__ModuleLoader__.load({
|
|
|
1234
1234
|
document.head.appendChild(tag);
|
|
1235
1235
|
}
|
|
1236
1236
|
var diagnostics_module_css_default = {
|
|
1237
|
-
"list": "tGe0LW_list",
|
|
1238
|
-
"header": "tGe0LW_header",
|
|
1239
1237
|
"description": "tGe0LW_description",
|
|
1240
|
-
"settingTitle": "tGe0LW_settingTitle",
|
|
1241
|
-
"actions": "tGe0LW_actions",
|
|
1242
|
-
"trigger": "tGe0LW_trigger",
|
|
1243
1238
|
"versions": "tGe0LW_versions",
|
|
1239
|
+
"list": "tGe0LW_list",
|
|
1244
1240
|
"panel": "tGe0LW_panel",
|
|
1245
|
-
"
|
|
1241
|
+
"actions": "tGe0LW_actions",
|
|
1242
|
+
"setting": "tGe0LW_setting",
|
|
1243
|
+
"header": "tGe0LW_header",
|
|
1244
|
+
"trigger": "tGe0LW_trigger",
|
|
1245
|
+
"settingTitle": "tGe0LW_settingTitle"
|
|
1246
1246
|
};
|
|
1247
1247
|
//#endregion
|
|
1248
1248
|
//#region src/client/diagnostics/index.tsx
|
|
@@ -3225,97 +3225,97 @@ window.__ModuleLoader__.load({
|
|
|
3225
3225
|
document.head.appendChild(tag);
|
|
3226
3226
|
}
|
|
3227
3227
|
var sidechat_module_css_default = {
|
|
3228
|
-
"snapshotText": "_5KEEsG_snapshotText",
|
|
3229
|
-
"toolRunning": "_5KEEsG_toolRunning",
|
|
3230
|
-
"reasoningBody": "_5KEEsG_reasoningBody",
|
|
3231
|
-
"composerCard": "_5KEEsG_composerCard",
|
|
3232
3228
|
"todoBody": "_5KEEsG_todoBody",
|
|
3233
|
-
"
|
|
3234
|
-
"
|
|
3235
|
-
"
|
|
3236
|
-
"
|
|
3237
|
-
"densityToggle": "_5KEEsG_densityToggle",
|
|
3238
|
-
"attachRail": "_5KEEsG_attachRail",
|
|
3239
|
-
"pendingReason": "_5KEEsG_pendingReason",
|
|
3240
|
-
"densityRow": "_5KEEsG_densityRow",
|
|
3241
|
-
"stateScreen": "_5KEEsG_stateScreen",
|
|
3242
|
-
"quoteBody": "_5KEEsG_quoteBody",
|
|
3243
|
-
"composerChips": "_5KEEsG_composerChips",
|
|
3244
|
-
"sentChip": "_5KEEsG_sentChip",
|
|
3229
|
+
"toolBodyText": "_5KEEsG_toolBodyText",
|
|
3230
|
+
"emptyIcon": "_5KEEsG_emptyIcon",
|
|
3231
|
+
"attachImg": "_5KEEsG_attachImg",
|
|
3232
|
+
"pendingCard": "_5KEEsG_pendingCard",
|
|
3245
3233
|
"pendingQuestion": "_5KEEsG_pendingQuestion",
|
|
3234
|
+
"stateScreen": "_5KEEsG_stateScreen",
|
|
3235
|
+
"parentStrip": "_5KEEsG_parentStrip",
|
|
3236
|
+
"attachRail": "_5KEEsG_attachRail",
|
|
3246
3237
|
"visibilitySetting": "_5KEEsG_visibilitySetting",
|
|
3247
|
-
"
|
|
3248
|
-
"
|
|
3249
|
-
"empty": "_5KEEsG_empty",
|
|
3250
|
-
"slashGroupTitle": "_5KEEsG_slashGroupTitle",
|
|
3251
|
-
"noticeRow": "_5KEEsG_noticeRow",
|
|
3252
|
-
"pendingHead": "_5KEEsG_pendingHead",
|
|
3253
|
-
"composerFoot": "_5KEEsG_composerFoot",
|
|
3254
|
-
"pendingBtnGhost": "_5KEEsG_pendingBtnGhost",
|
|
3255
|
-
"sidechat-pulse": "_5KEEsG_sidechat-pulse",
|
|
3256
|
-
"slashMenu": "_5KEEsG_slashMenu",
|
|
3257
|
-
"sentChipRow": "_5KEEsG_sentChipRow",
|
|
3258
|
-
"slashItemName": "_5KEEsG_slashItemName",
|
|
3259
|
-
"slashItemDetail": "_5KEEsG_slashItemDetail",
|
|
3260
|
-
"jumpBottom": "_5KEEsG_jumpBottom",
|
|
3261
|
-
"body": "_5KEEsG_body",
|
|
3262
|
-
"attachButton": "_5KEEsG_attachButton",
|
|
3263
|
-
"snapshotBody": "_5KEEsG_snapshotBody",
|
|
3264
|
-
"slashItemActive": "_5KEEsG_slashItemActive",
|
|
3265
|
-
"pendingCustom": "_5KEEsG_pendingCustom",
|
|
3266
|
-
"stateDetail": "_5KEEsG_stateDetail",
|
|
3267
|
-
"pendingOptionActive": "_5KEEsG_pendingOptionActive",
|
|
3268
|
-
"dotPending": "_5KEEsG_dotPending",
|
|
3269
|
-
"toolBody": "_5KEEsG_toolBody",
|
|
3270
|
-
"pendingDesc": "_5KEEsG_pendingDesc",
|
|
3271
|
-
"root": "_5KEEsG_root",
|
|
3272
|
-
"errorRow": "_5KEEsG_errorRow",
|
|
3238
|
+
"todoText": "_5KEEsG_todoText",
|
|
3239
|
+
"reflowButton": "_5KEEsG_reflowButton",
|
|
3273
3240
|
"toolGenericBody": "_5KEEsG_toolGenericBody",
|
|
3274
|
-
"
|
|
3275
|
-
"pendingCard": "_5KEEsG_pendingCard",
|
|
3241
|
+
"snapshotBody": "_5KEEsG_snapshotBody",
|
|
3276
3242
|
"toolError": "_5KEEsG_toolError",
|
|
3277
|
-
"
|
|
3243
|
+
"pendingReason": "_5KEEsG_pendingReason",
|
|
3244
|
+
"root": "_5KEEsG_root",
|
|
3278
3245
|
"pendingOptionDesc": "_5KEEsG_pendingOptionDesc",
|
|
3279
|
-
"reasoning": "_5KEEsG_reasoning",
|
|
3280
|
-
"attachImg": "_5KEEsG_attachImg",
|
|
3281
|
-
"pendingActions": "_5KEEsG_pendingActions",
|
|
3282
3246
|
"headerSide": "_5KEEsG_headerSide",
|
|
3283
|
-
"
|
|
3284
|
-
"
|
|
3247
|
+
"userBubble": "_5KEEsG_userBubble",
|
|
3248
|
+
"dotIdle": "_5KEEsG_dotIdle",
|
|
3249
|
+
"composerChips": "_5KEEsG_composerChips",
|
|
3250
|
+
"pendingBtnGhost": "_5KEEsG_pendingBtnGhost",
|
|
3285
3251
|
"todoItem": "_5KEEsG_todoItem",
|
|
3286
|
-
"
|
|
3287
|
-
"
|
|
3252
|
+
"sentChipRow": "_5KEEsG_sentChipRow",
|
|
3253
|
+
"pendingQHeader": "_5KEEsG_pendingQHeader",
|
|
3254
|
+
"sidechat-pulse": "_5KEEsG_sidechat-pulse",
|
|
3255
|
+
"rowPreview": "_5KEEsG_rowPreview",
|
|
3288
3256
|
"streamingHint": "_5KEEsG_streamingHint",
|
|
3289
|
-
"
|
|
3290
|
-
"
|
|
3291
|
-
"
|
|
3292
|
-
"
|
|
3293
|
-
"
|
|
3257
|
+
"snapshotText": "_5KEEsG_snapshotText",
|
|
3258
|
+
"slashItemActive": "_5KEEsG_slashItemActive",
|
|
3259
|
+
"attachThumb": "_5KEEsG_attachThumb",
|
|
3260
|
+
"pendingOption": "_5KEEsG_pendingOption",
|
|
3261
|
+
"nativeHost": "_5KEEsG_nativeHost",
|
|
3262
|
+
"pendingActions": "_5KEEsG_pendingActions",
|
|
3263
|
+
"errorRow": "_5KEEsG_errorRow",
|
|
3264
|
+
"flowRow": "_5KEEsG_flowRow",
|
|
3265
|
+
"slashItemName": "_5KEEsG_slashItemName",
|
|
3266
|
+
"composerFoot": "_5KEEsG_composerFoot",
|
|
3267
|
+
"sentChip": "_5KEEsG_sentChip",
|
|
3268
|
+
"writeNotice": "_5KEEsG_writeNotice",
|
|
3269
|
+
"composerCard": "_5KEEsG_composerCard",
|
|
3270
|
+
"densityRow": "_5KEEsG_densityRow",
|
|
3294
3271
|
"modelSelect": "_5KEEsG_modelSelect",
|
|
3272
|
+
"attachRemove": "_5KEEsG_attachRemove",
|
|
3295
3273
|
"dotRunning": "_5KEEsG_dotRunning",
|
|
3296
|
-
"
|
|
3297
|
-
"
|
|
3274
|
+
"modelLabel": "_5KEEsG_modelLabel",
|
|
3275
|
+
"emptyTitle": "_5KEEsG_emptyTitle",
|
|
3276
|
+
"emptyText": "_5KEEsG_emptyText",
|
|
3277
|
+
"noticeRow": "_5KEEsG_noticeRow",
|
|
3278
|
+
"stopButton": "_5KEEsG_stopButton",
|
|
3279
|
+
"toolRunning": "_5KEEsG_toolRunning",
|
|
3280
|
+
"slashMenu": "_5KEEsG_slashMenu",
|
|
3281
|
+
"rowActions": "_5KEEsG_rowActions",
|
|
3298
3282
|
"pendingBar": "_5KEEsG_pendingBar",
|
|
3299
|
-
"
|
|
3300
|
-
"
|
|
3301
|
-
"
|
|
3302
|
-
"
|
|
3303
|
-
"
|
|
3283
|
+
"pendingHead": "_5KEEsG_pendingHead",
|
|
3284
|
+
"pendingTitle": "_5KEEsG_pendingTitle",
|
|
3285
|
+
"transcript": "_5KEEsG_transcript",
|
|
3286
|
+
"empty": "_5KEEsG_empty",
|
|
3287
|
+
"quoteBody": "_5KEEsG_quoteBody",
|
|
3304
3288
|
"assistantRow": "_5KEEsG_assistantRow",
|
|
3289
|
+
"todoDot": "_5KEEsG_todoDot",
|
|
3290
|
+
"attachButton": "_5KEEsG_attachButton",
|
|
3291
|
+
"toolBody": "_5KEEsG_toolBody",
|
|
3292
|
+
"pendingOptionActive": "_5KEEsG_pendingOptionActive",
|
|
3293
|
+
"assistantBody": "_5KEEsG_assistantBody",
|
|
3294
|
+
"composer": "_5KEEsG_composer",
|
|
3295
|
+
"pendingQText": "_5KEEsG_pendingQText",
|
|
3296
|
+
"actionGroup": "_5KEEsG_actionGroup",
|
|
3297
|
+
"toolCard": "_5KEEsG_toolCard",
|
|
3298
|
+
"jumpBottom": "_5KEEsG_jumpBottom",
|
|
3299
|
+
"toolLocations": "_5KEEsG_toolLocations",
|
|
3300
|
+
"slashGroupTitle": "_5KEEsG_slashGroupTitle",
|
|
3301
|
+
"flowRowError": "_5KEEsG_flowRowError",
|
|
3302
|
+
"slashItem": "_5KEEsG_slashItem",
|
|
3303
|
+
"pendingBtnPrimary": "_5KEEsG_pendingBtnPrimary",
|
|
3304
|
+
"toolHead": "_5KEEsG_toolHead",
|
|
3305
|
+
"writeNoticeClose": "_5KEEsG_writeNoticeClose",
|
|
3305
3306
|
"inheritedBody": "_5KEEsG_inheritedBody",
|
|
3306
|
-
"
|
|
3307
|
-
"
|
|
3308
|
-
"
|
|
3309
|
-
"
|
|
3310
|
-
"
|
|
3307
|
+
"reasoning": "_5KEEsG_reasoning",
|
|
3308
|
+
"userRow": "_5KEEsG_userRow",
|
|
3309
|
+
"reasoningBody": "_5KEEsG_reasoningBody",
|
|
3310
|
+
"pendingCustom": "_5KEEsG_pendingCustom",
|
|
3311
|
+
"dotPending": "_5KEEsG_dotPending",
|
|
3312
|
+
"pendingDesc": "_5KEEsG_pendingDesc",
|
|
3313
|
+
"stateDetail": "_5KEEsG_stateDetail",
|
|
3314
|
+
"input": "_5KEEsG_input",
|
|
3315
|
+
"body": "_5KEEsG_body",
|
|
3311
3316
|
"sendButton": "_5KEEsG_sendButton",
|
|
3312
|
-
"
|
|
3313
|
-
"
|
|
3314
|
-
"toolCard": "_5KEEsG_toolCard",
|
|
3315
|
-
"parentStrip": "_5KEEsG_parentStrip",
|
|
3316
|
-
"pendingOption": "_5KEEsG_pendingOption",
|
|
3317
|
-
"actionGroup": "_5KEEsG_actionGroup",
|
|
3318
|
-
"writeNoticeClose": "_5KEEsG_writeNoticeClose"
|
|
3317
|
+
"densityToggle": "_5KEEsG_densityToggle",
|
|
3318
|
+
"slashItemDetail": "_5KEEsG_slashItemDetail"
|
|
3319
3319
|
};
|
|
3320
3320
|
//#endregion
|
|
3321
3321
|
//#region src/client/chat/ToolCard.tsx
|
|
@@ -5298,17 +5298,17 @@ ${entries.map((entry) => {
|
|
|
5298
5298
|
document.head.appendChild(tag);
|
|
5299
5299
|
}
|
|
5300
5300
|
var annotations_module_css_default = {
|
|
5301
|
+
"chip": "SVnebq_chip",
|
|
5302
|
+
"chipRow": "SVnebq_chipRow",
|
|
5301
5303
|
"chipClearAll": "SVnebq_chipClearAll",
|
|
5302
5304
|
"side": "SVnebq_side",
|
|
5303
|
-
"
|
|
5304
|
-
"
|
|
5305
|
-
"chipPanel": "SVnebq_chipPanel",
|
|
5306
|
-
"chip": "SVnebq_chip",
|
|
5307
|
-
"chipWrap": "SVnebq_chipWrap",
|
|
5305
|
+
"chipRemove": "SVnebq_chipRemove",
|
|
5306
|
+
"storageNotice": "SVnebq_storageNotice",
|
|
5308
5307
|
"chipText": "SVnebq_chipText",
|
|
5308
|
+
"chipPanel": "SVnebq_chipPanel",
|
|
5309
5309
|
"chipNote": "SVnebq_chipNote",
|
|
5310
|
-
"
|
|
5311
|
-
"
|
|
5310
|
+
"chipNumber": "SVnebq_chipNumber",
|
|
5311
|
+
"chipWrap": "SVnebq_chipWrap"
|
|
5312
5312
|
};
|
|
5313
5313
|
//#endregion
|
|
5314
5314
|
//#region src/client/annotations/chip.tsx
|
|
@@ -5733,6 +5733,11 @@ ${entries.map((entry) => {
|
|
|
5733
5733
|
composer.setDraft(event.target.value);
|
|
5734
5734
|
triggerCtl?.track(event.target.value, event.target.selectionStart ?? event.target.value.length, guardOf(composer.phase), composer.draftRev ?? 0);
|
|
5735
5735
|
},
|
|
5736
|
+
onPaste: (event) => {
|
|
5737
|
+
if (!composer.canAttach) return;
|
|
5738
|
+
const images = [...event.clipboardData.files].filter((file) => file.type.startsWith("image/"));
|
|
5739
|
+
if (images.length > 0 && composer.attachImages(images)) event.preventDefault();
|
|
5740
|
+
},
|
|
5736
5741
|
onKeyDown: (event) => {
|
|
5737
5742
|
if (menuOpen && triggerCtl !== null) {
|
|
5738
5743
|
const arbKey = arbitrateKeyOf(event.key);
|
|
@@ -7811,34 +7816,34 @@ ${entries.map((entry) => {
|
|
|
7811
7816
|
document.head.appendChild(tag);
|
|
7812
7817
|
}
|
|
7813
7818
|
var annotate_module_css_default = {
|
|
7814
|
-
"
|
|
7815
|
-
"sentCardNote": "_SVViG_sentCardNote",
|
|
7816
|
-
"hint": "_SVViG_hint",
|
|
7817
|
-
"badgeSent": "_SVViG_badgeSent",
|
|
7818
|
-
"hintClose": "_SVViG_hintClose",
|
|
7819
|
-
"editorSpacer": "_SVViG_editorSpacer",
|
|
7819
|
+
"toolbar": "_SVViG_toolbar",
|
|
7820
7820
|
"editorNew": "_SVViG_editorNew",
|
|
7821
|
-
"cancelButton": "_SVViG_cancelButton",
|
|
7822
7821
|
"editorEdit": "_SVViG_editorEdit",
|
|
7823
|
-
"
|
|
7822
|
+
"highlight": "_SVViG_highlight",
|
|
7823
|
+
"editorTextarea": "_SVViG_editorTextarea",
|
|
7824
7824
|
"editorTarget": "_SVViG_editorTarget",
|
|
7825
|
-
"
|
|
7826
|
-
"
|
|
7827
|
-
"
|
|
7825
|
+
"badge": "_SVViG_badge",
|
|
7826
|
+
"editorSpacer": "_SVViG_editorSpacer",
|
|
7827
|
+
"toolbarBelow": "_SVViG_toolbarBelow",
|
|
7828
|
+
"editorFooter": "_SVViG_editorFooter",
|
|
7829
|
+
"cancelButton": "_SVViG_cancelButton",
|
|
7828
7830
|
"editorError": "_SVViG_editorError",
|
|
7831
|
+
"sentCardTitle": "_SVViG_sentCardTitle",
|
|
7832
|
+
"deleteButton": "_SVViG_deleteButton",
|
|
7829
7833
|
"toolbarButton": "_SVViG_toolbarButton",
|
|
7834
|
+
"confirmButton": "_SVViG_confirmButton",
|
|
7835
|
+
"saveButton": "_SVViG_saveButton",
|
|
7836
|
+
"badgeSent": "_SVViG_badgeSent",
|
|
7837
|
+
"sentCardQuote": "_SVViG_sentCardQuote",
|
|
7838
|
+
"sentCardNote": "_SVViG_sentCardNote",
|
|
7839
|
+
"editorAskRow": "_SVViG_editorAskRow",
|
|
7840
|
+
"hint": "_SVViG_hint",
|
|
7830
7841
|
"dshSidenoteHintIn": "_SVViG_dshSidenoteHintIn",
|
|
7842
|
+
"sentChip": "_SVViG_sentChip",
|
|
7831
7843
|
"sentChipRow": "_SVViG_sentChipRow",
|
|
7832
|
-
"
|
|
7833
|
-
"highlight": "_SVViG_highlight",
|
|
7834
|
-
"editorTextarea": "_SVViG_editorTextarea",
|
|
7835
|
-
"sentCardQuote": "_SVViG_sentCardQuote",
|
|
7836
|
-
"toolbar": "_SVViG_toolbar",
|
|
7837
|
-
"saveButton": "_SVViG_saveButton",
|
|
7844
|
+
"hintClose": "_SVViG_hintClose",
|
|
7838
7845
|
"editorInput": "_SVViG_editorInput",
|
|
7839
|
-
"
|
|
7840
|
-
"sentChip": "_SVViG_sentChip",
|
|
7841
|
-
"sentCardTitle": "_SVViG_sentCardTitle"
|
|
7846
|
+
"editorAsk": "_SVViG_editorAsk"
|
|
7842
7847
|
};
|
|
7843
7848
|
//#endregion
|
|
7844
7849
|
//#region src/client/annotate/hint.tsx
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-sidenote",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.6.2",
|
|
4
|
+
"description": "Follow the tangent. Keep the thread. Annotate, explore on the side, and bring answers back to DeepSeek Harness. / 思路可以分岔,主线始终向前。划选注释、侧边追问,再把结论带回正在推进的任务。",
|
|
5
|
+
"icon": "docs/assets/logo.svg",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"license": "MIT",
|
|
7
8
|
"main": "lib/index.js",
|
|
@@ -42,6 +43,7 @@
|
|
|
42
43
|
"lib/types/**/*.d.ts",
|
|
43
44
|
"src",
|
|
44
45
|
"cordis.patch.yml",
|
|
46
|
+
"docs/assets/logo.svg",
|
|
45
47
|
"README.md",
|
|
46
48
|
"LICENSE"
|
|
47
49
|
],
|
|
@@ -84,6 +84,11 @@ export function ComposerBar(props: {
|
|
|
84
84
|
composer.draftRev ?? 0,
|
|
85
85
|
)
|
|
86
86
|
}}
|
|
87
|
+
onPaste={(event) => {
|
|
88
|
+
if (!composer.canAttach) return
|
|
89
|
+
const images = [...event.clipboardData.files].filter(file => file.type.startsWith('image/'))
|
|
90
|
+
if (images.length > 0 && composer.attachImages(images)) event.preventDefault()
|
|
91
|
+
}}
|
|
87
92
|
onKeyDown={(event) => {
|
|
88
93
|
// 菜单开着先仲裁(上下/Enter 选中/Esc 关闭归控制器)。
|
|
89
94
|
if (menuOpen && triggerCtl !== null) {
|