dsh-sidenote 0.7.6 → 0.8.0
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
CHANGED
|
@@ -37,7 +37,7 @@ dsh plugin --profile web add dsh-sidenote
|
|
|
37
37
|
|
|
38
38
|
打开 DSH Web,点击会话顶栏的 **「侧边」**,或划选一段回复开始。也可输入 `/side` 打开侧聊,用 `Alt+S` 切换主、侧输入焦点。
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
自 dsh-sidenote **0.8.0** 起,主线维护 DSH **0.2.1 系列(rc.2 起)**,允许同系列后续 RC 及正式版安装,无需 `dsh-better-sidebar`。已验证版本为 0.2.1-rc.2/rc.3/rc.4/rc.5;未来 RC 允许安装不等于已经验证,历史包声明不变。DSH 0.2.0-rc.2 固定 `dsh-sidenote@0.7.6`,更早宿主固定各自最后兼容包,详见[兼容政策](docs/compatibility.md)。
|
|
41
41
|
|
|
42
42
|
## 一个任务,容得下更多思路
|
|
43
43
|
|
|
@@ -82,7 +82,7 @@ dsh plugin --profile web add dsh-sidenote
|
|
|
82
82
|
|
|
83
83
|
## 兼容与帮助
|
|
84
84
|
|
|
85
|
-
维护窗口按
|
|
85
|
+
维护窗口按 **当前基础版本系列** 滚动,侧聊共用原生 Conversation。同系列 RC 持续覆盖;新系列完成验收并随插件发布后,再停止维护原系列。日常 PR 检查当前系列的最低版和最新已验证版,每日探测新增宿主、每周回归全部窗口内版本。窗口外保留最后兼容插件。详见[兼容与维护政策](docs/compatibility.md);公开安装以对应 Release 为准。
|
|
86
86
|
|
|
87
87
|
遇到问题时,可在 **设置 → 通用设置 → dsh-sidenote 诊断模式** 开启诊断,查看并手动导出接入状态。[报告问题或提出建议](https://github.com/g-yixuan/dsh-sidenote/issues/new/choose)。
|
|
88
88
|
|
package/docs/assets/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# README and storefront media / 首页与商店素材
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Chinese media was captured on **2026-10-25** with the published **dsh-sidenote 0.7.2** package (source: `0d55fcd`). English media was captured on **2026-10-29** with published **dsh-sidenote 0.7.6** (source: `3f0de44`), with both the interface and conversation in English. Both use **DSH 0.2.1-rc.2**, native Conversation, and the native right sidebar. The mounted plugin's version and bundle digest, plus the host's active conversation, composer, and sidebar packages, were checked before capture.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
中文素材于 **2026-10-25** 录制,使用已发布的 **dsh-sidenote 0.7.2**(源码 `0d55fcd`)。英文素材于 **2026-10-29** 录制,使用已发布的 **dsh-sidenote 0.7.6**(源码 `3f0de44`),界面和对话内容均为英文。两套素材均使用 **DSH 0.2.1-rc.2** 原生对话和右侧栏。录制前核对了实际挂载的插件版本与构建摘要,以及宿主正在运行的对话、输入框和侧栏组件版本。
|
|
6
6
|
|
|
7
7
|
## Real model responses / 真实模型回答
|
|
8
8
|
|
|
@@ -16,18 +16,19 @@ The recording starts with the real main-chat answer already visible. It then sho
|
|
|
16
16
|
|
|
17
17
|
## Assets / 文件
|
|
18
18
|
|
|
19
|
-
- `workflow.jpg`:
|
|
20
|
-
- `context-preview.jpg`:
|
|
21
|
-
- `selection.jpg`: selected text and the two annotation destinations,
|
|
22
|
-
- `sidechat.jpg`:
|
|
23
|
-
- `demo.gif`, `demo.mp4`: the same approximately **43-second** continuous workflow / 同一段约 **43
|
|
19
|
+
- `workflow.jpg` / `workflow-en.jpg`: Chinese / English follow-up captures showing the selection toolbar's two destinations, a real side-chat answer, pending annotation and handback chips, and context bubbles in sent messages / 中文与英文补拍主图:同屏展示划选菜单的两种去向、真实侧聊回答、待发送的批注与回流标签,以及已发送消息中的上下文气泡。
|
|
20
|
+
- `context-preview.jpg` / `context-preview-en.jpg`: Chinese / English compact previews with the selected passage, editable note, and horizontal context chips / 中文与英文的紧凑悬浮层,展示原文、可编辑注解与横向标签。
|
|
21
|
+
- `selection.jpg` / `selection-en.jpg`: Chinese / English selected text and the two annotation destinations, captured during each recording / 分别在中文与英文录制中采集的划选画面与两种批注去向。
|
|
22
|
+
- `sidechat.jpg` / `sidechat-en.jpg`: Chinese / English real side-chat answers and the hovered reply-toolbar handback icon / 中文与英文的真实侧聊回答与悬停中的回流图标。
|
|
23
|
+
- `demo.gif`, `demo.mp4`: the same approximately **43-second** continuous Chinese workflow / 同一段约 **43 秒**的中文连续操作。
|
|
24
|
+
- `demo-en.gif`, `demo-en.mp4`: the same approximately **38-second** continuous English workflow / 同一段约 **38 秒**的英文连续操作。
|
|
24
25
|
- `hero.svg`, `hero-en.svg` and their `-compact.svg` variants: vector brand covers; regenerate with `python3 scripts/build-brand-assets.py` / 品牌矢量封面,可用该命令重新生成。
|
|
25
26
|
|
|
26
27
|
## Capture and distribution / 录制与展示
|
|
27
28
|
|
|
28
|
-
The real interface uses the host's **light theme** and **18 px** conversation font. The hero uses a **1440 × 780** viewport and is exported at 2160 × 1170 so the selection menu and both composers fit together. Other stills use a **1440 × 900** viewport, captured at 2× pixel density and exported at 2160 × 1350; the selection still is a native 1440 × 900 recording frame. MP4 is 1440 × 900 at 30 fps; GIF is 1120 × 700 at 12 fps. Encoding preserves the browser's frame timing without speeding up responses. A small pointer overlay follows actual mouse events in the recording; product controls and model replies are not redrawn or substituted.
|
|
29
|
+
The real interface uses the host's **light theme** and **18 px** conversation font. The Chinese hero uses a **1440 × 780** viewport and is exported at 2160 × 1170; the English hero uses **1440 × 840**, exported at 2160 × 1260, so the selection menu, sent-message labels, and both composers fit together. Other stills use a **1440 × 900** viewport, captured at 2× pixel density and exported at 2160 × 1350; the Chinese selection still is a native 1440 × 900 recording frame. MP4 is 1440 × 900 at 30 fps; GIF is 1120 × 700 at 12 fps. Encoding preserves the browser's frame timing without speeding up responses. A small pointer overlay follows actual mouse events in the recording; product controls and model replies are not redrawn or substituted.
|
|
29
30
|
|
|
30
|
-
真实界面使用宿主的**浅色主题**和 **18 px**
|
|
31
|
+
真实界面使用宿主的**浅色主题**和 **18 px** 会话字号。中文主图以 **1440 × 780** 视口补拍,导出为 2160 × 1170;英文主图使用 **1440 × 840** 视口,导出为 2160 × 1260,让划选菜单、已发送消息中的标签和两侧输入框完整同屏。其余静态截图使用 **1440 × 900** 视口,按 2 倍像素密度采集后导出为 2160 × 1350;中文划选截图直接取自 1440 × 900 的录屏帧。MP4 为 1440 × 900 / 30 fps,GIF 为 1120 × 700 / 12 fps,均按浏览器帧时间编码,没有加速模型响应。录屏中仅添加跟随真实鼠标事件的小光标辅助层,没有重绘产品控件或替换模型回答。
|
|
31
32
|
|
|
32
33
|
[`screenshots.json`](../../screenshots.json) declares the storefront gallery. The [catalog's screenshot convention](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/contributing.md#screenshots--截图optional-recommended--可选推荐) resolves those paths from this repository, and the next catalog build refreshes the gallery. Existing screenshot paths remain available for cached catalogs.
|
|
33
34
|
|
package/lib/client.js
CHANGED
|
@@ -740,7 +740,7 @@ window.__ModuleLoader__.load({
|
|
|
740
740
|
let dockRegistered = false;
|
|
741
741
|
let report = {
|
|
742
742
|
versions: {
|
|
743
|
-
sidenote: "0.
|
|
743
|
+
sidenote: "0.8.0",
|
|
744
744
|
dsh: "unknown",
|
|
745
745
|
betterSidebar: null
|
|
746
746
|
},
|
|
@@ -1409,15 +1409,15 @@ window.__ModuleLoader__.load({
|
|
|
1409
1409
|
document.head.appendChild(tag);
|
|
1410
1410
|
}
|
|
1411
1411
|
var diagnostics_module_css_default = {
|
|
1412
|
-
"actions": "tGe0LW_actions",
|
|
1413
|
-
"settingTitle": "tGe0LW_settingTitle",
|
|
1414
|
-
"trigger": "tGe0LW_trigger",
|
|
1415
|
-
"versions": "tGe0LW_versions",
|
|
1416
1412
|
"panel": "tGe0LW_panel",
|
|
1413
|
+
"header": "tGe0LW_header",
|
|
1414
|
+
"list": "tGe0LW_list",
|
|
1417
1415
|
"description": "tGe0LW_description",
|
|
1416
|
+
"trigger": "tGe0LW_trigger",
|
|
1418
1417
|
"setting": "tGe0LW_setting",
|
|
1419
|
-
"
|
|
1420
|
-
"
|
|
1418
|
+
"actions": "tGe0LW_actions",
|
|
1419
|
+
"settingTitle": "tGe0LW_settingTitle",
|
|
1420
|
+
"versions": "tGe0LW_versions"
|
|
1421
1421
|
};
|
|
1422
1422
|
//#endregion
|
|
1423
1423
|
//#region src/client/diagnostics/index.tsx
|
|
@@ -2213,6 +2213,19 @@ window.__ModuleLoader__.load({
|
|
|
2213
2213
|
};
|
|
2214
2214
|
}
|
|
2215
2215
|
//#endregion
|
|
2216
|
+
//#region src/client/host/reasoning.ts
|
|
2217
|
+
/** Match rc.5's display preparation without changing persisted model output.
|
|
2218
|
+
* Older hosts expose only the raw block; the context reader uses this same
|
|
2219
|
+
* preparation on every supported host, including incomplete streaming tags. */
|
|
2220
|
+
function reasoningDisplayText(raw) {
|
|
2221
|
+
if (!raw.startsWith("<")) return raw;
|
|
2222
|
+
const opening = "<signature>";
|
|
2223
|
+
if (opening.startsWith(raw)) return "";
|
|
2224
|
+
if (!raw.startsWith(opening)) return raw;
|
|
2225
|
+
const end = raw.indexOf("</signature>", 11);
|
|
2226
|
+
return end < 0 ? "" : raw.slice(end + 12).replace(/^(?:\r?\n)*/, "");
|
|
2227
|
+
}
|
|
2228
|
+
//#endregion
|
|
2216
2229
|
//#region src/snapshotProtocol.ts
|
|
2217
2230
|
/** Durable first-send marker, shared by the host projection and client reader. */
|
|
2218
2231
|
const decodeSnapshotXml = (value) => value.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, "\"").replace(/&/g, "&");
|
|
@@ -2350,33 +2363,33 @@ window.__ModuleLoader__.load({
|
|
|
2350
2363
|
document.head.appendChild(tag);
|
|
2351
2364
|
}
|
|
2352
2365
|
var annotations_module_css_default = {
|
|
2353
|
-
"contextSource": "SVnebq_contextSource",
|
|
2354
|
-
"contextFooter": "SVnebq_contextFooter",
|
|
2355
|
-
"contextNumber": "SVnebq_contextNumber",
|
|
2356
|
-
"contextLabel": "SVnebq_contextLabel",
|
|
2357
2366
|
"chip": "SVnebq_chip",
|
|
2358
|
-
"
|
|
2359
|
-
"
|
|
2360
|
-
"sentChips": "SVnebq_sentChips",
|
|
2367
|
+
"chipDismissShade": "SVnebq_chipDismissShade",
|
|
2368
|
+
"chipClearAll": "SVnebq_chipClearAll",
|
|
2361
2369
|
"sentChipGroup": "SVnebq_sentChipGroup",
|
|
2362
|
-
"storageNotice": "SVnebq_storageNotice",
|
|
2363
|
-
"sentChevron": "SVnebq_sentChevron",
|
|
2364
|
-
"sentChevronOpen": "SVnebq_sentChevronOpen",
|
|
2365
|
-
"chipDismiss": "SVnebq_chipDismiss",
|
|
2366
|
-
"sentChip": "SVnebq_sentChip",
|
|
2367
|
-
"sentPreview": "SVnebq_sentPreview",
|
|
2368
|
-
"userContextHost": "SVnebq_userContextHost",
|
|
2369
2370
|
"contextAction": "SVnebq_contextAction",
|
|
2370
|
-
"
|
|
2371
|
-
"
|
|
2372
|
-
"chipDismissShade": "SVnebq_chipDismissShade",
|
|
2371
|
+
"sentChip": "SVnebq_sentChip",
|
|
2372
|
+
"sentChevron": "SVnebq_sentChevron",
|
|
2373
2373
|
"contextEditor": "SVnebq_contextEditor",
|
|
2374
|
+
"contextLabel": "SVnebq_contextLabel",
|
|
2375
|
+
"contextFooter": "SVnebq_contextFooter",
|
|
2374
2376
|
"chipWrap": "SVnebq_chipWrap",
|
|
2375
|
-
"
|
|
2376
|
-
"
|
|
2377
|
-
"
|
|
2377
|
+
"userContextHost": "SVnebq_userContextHost",
|
|
2378
|
+
"sentPreview": "SVnebq_sentPreview",
|
|
2379
|
+
"contextContent": "SVnebq_contextContent",
|
|
2380
|
+
"contextText": "SVnebq_contextText",
|
|
2381
|
+
"contextNumber": "SVnebq_contextNumber",
|
|
2378
2382
|
"contextActions": "SVnebq_contextActions",
|
|
2379
|
-
"
|
|
2383
|
+
"storageNotice": "SVnebq_storageNotice",
|
|
2384
|
+
"contextItem": "SVnebq_contextItem",
|
|
2385
|
+
"contextList": "SVnebq_contextList",
|
|
2386
|
+
"sentChips": "SVnebq_sentChips",
|
|
2387
|
+
"chipMain": "SVnebq_chipMain",
|
|
2388
|
+
"sentChevronOpen": "SVnebq_sentChevronOpen",
|
|
2389
|
+
"contextPanel": "SVnebq_contextPanel",
|
|
2390
|
+
"contextSource": "SVnebq_contextSource",
|
|
2391
|
+
"contextAppear": "SVnebq_contextAppear",
|
|
2392
|
+
"chipDismiss": "SVnebq_chipDismiss"
|
|
2380
2393
|
};
|
|
2381
2394
|
//#endregion
|
|
2382
2395
|
//#region src/client/annotations/NativeUserContext.tsx
|
|
@@ -2850,39 +2863,39 @@ window.__ModuleLoader__.load({
|
|
|
2850
2863
|
document.head.appendChild(tag);
|
|
2851
2864
|
}
|
|
2852
2865
|
var sidechat_module_css_default = {
|
|
2853
|
-
"
|
|
2854
|
-
"contextBubble": "_5KEEsG_contextBubble",
|
|
2855
|
-
"progressContent": "_5KEEsG_progressContent",
|
|
2856
|
-
"stateScreen": "_5KEEsG_stateScreen",
|
|
2866
|
+
"contextChevronOpen": "_5KEEsG_contextChevronOpen",
|
|
2857
2867
|
"emptyIcon": "_5KEEsG_emptyIcon",
|
|
2858
|
-
"contextChevron": "_5KEEsG_contextChevron",
|
|
2859
|
-
"errorRow": "_5KEEsG_errorRow",
|
|
2860
|
-
"contextImage": "_5KEEsG_contextImage",
|
|
2861
|
-
"nativeToolbarActions": "_5KEEsG_nativeToolbarActions",
|
|
2862
|
-
"emptyText": "_5KEEsG_emptyText",
|
|
2863
|
-
"nativeConversation": "_5KEEsG_nativeConversation",
|
|
2864
2868
|
"progressEntry": "_5KEEsG_progressEntry",
|
|
2865
|
-
"
|
|
2866
|
-
"
|
|
2869
|
+
"visibilitySetting": "_5KEEsG_visibilitySetting",
|
|
2870
|
+
"progressProcess": "_5KEEsG_progressProcess",
|
|
2871
|
+
"progressPreview": "_5KEEsG_progressPreview",
|
|
2867
2872
|
"historyToggle": "_5KEEsG_historyToggle",
|
|
2868
|
-
"
|
|
2869
|
-
"
|
|
2873
|
+
"progressContent": "_5KEEsG_progressContent",
|
|
2874
|
+
"nativeConversation": "_5KEEsG_nativeConversation",
|
|
2875
|
+
"contextBubble": "_5KEEsG_contextBubble",
|
|
2870
2876
|
"nativeToolbar": "_5KEEsG_nativeToolbar",
|
|
2871
|
-
"contextChevronOpen": "_5KEEsG_contextChevronOpen",
|
|
2872
|
-
"progress": "_5KEEsG_progress",
|
|
2873
|
-
"mainContext": "_5KEEsG_mainContext",
|
|
2874
|
-
"nativeAction": "_5KEEsG_nativeAction",
|
|
2875
|
-
"visibilitySetting": "_5KEEsG_visibilitySetting",
|
|
2876
|
-
"contextColumn": "_5KEEsG_contextColumn",
|
|
2877
2877
|
"emptyTitle": "_5KEEsG_emptyTitle",
|
|
2878
|
-
"
|
|
2879
|
-
"
|
|
2878
|
+
"nativeHost": "_5KEEsG_nativeHost",
|
|
2879
|
+
"stateDetail": "_5KEEsG_stateDetail",
|
|
2880
|
+
"headerSide": "_5KEEsG_headerSide",
|
|
2881
|
+
"contextChevron": "_5KEEsG_contextChevron",
|
|
2880
2882
|
"contextHint": "_5KEEsG_contextHint",
|
|
2881
|
-
"chatView": "_5KEEsG_chatView",
|
|
2882
|
-
"progressPreview": "_5KEEsG_progressPreview",
|
|
2883
2883
|
"contextUserRow": "_5KEEsG_contextUserRow",
|
|
2884
|
+
"progress": "_5KEEsG_progress",
|
|
2885
|
+
"errorRow": "_5KEEsG_errorRow",
|
|
2886
|
+
"nativeToolbarActions": "_5KEEsG_nativeToolbarActions",
|
|
2887
|
+
"reflowAction": "_5KEEsG_reflowAction",
|
|
2888
|
+
"nativeAction": "_5KEEsG_nativeAction",
|
|
2889
|
+
"root": "_5KEEsG_root",
|
|
2884
2890
|
"progressLatest": "_5KEEsG_progressLatest",
|
|
2885
|
-
"
|
|
2891
|
+
"emptyText": "_5KEEsG_emptyText",
|
|
2892
|
+
"progressEntries": "_5KEEsG_progressEntries",
|
|
2893
|
+
"progressDetail": "_5KEEsG_progressDetail",
|
|
2894
|
+
"mainContext": "_5KEEsG_mainContext",
|
|
2895
|
+
"chatView": "_5KEEsG_chatView",
|
|
2896
|
+
"contextColumn": "_5KEEsG_contextColumn",
|
|
2897
|
+
"contextImage": "_5KEEsG_contextImage",
|
|
2898
|
+
"stateScreen": "_5KEEsG_stateScreen"
|
|
2886
2899
|
};
|
|
2887
2900
|
//#endregion
|
|
2888
2901
|
//#region src/client/sidechat/ContextProgress.tsx
|
|
@@ -2924,6 +2937,8 @@ window.__ModuleLoader__.load({
|
|
|
2924
2937
|
},
|
|
2925
2938
|
footnotes: t("contextFootnotes")
|
|
2926
2939
|
}), [t("contextCopy")]);
|
|
2940
|
+
const text = entry.kind === "thinking" ? reasoningDisplayText(entry.text) : entry.text;
|
|
2941
|
+
if (entry.kind === "thinking" && text !== entry.text && text.trim() === "") return null;
|
|
2927
2942
|
const unfinished = entry.unfinished || entry.kind === "streaming";
|
|
2928
2943
|
const status = unfinished ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2929
2944
|
className: sidechat_module_css_default.contextHint,
|
|
@@ -2977,17 +2992,17 @@ window.__ModuleLoader__.load({
|
|
|
2977
2992
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: entry.kind === "tool" ? entry.toolName : t("contextthinking") }),
|
|
2978
2993
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2979
2994
|
className: sidechat_module_css_default.progressPreview,
|
|
2980
|
-
children:
|
|
2995
|
+
children: text
|
|
2981
2996
|
}),
|
|
2982
2997
|
status,
|
|
2983
2998
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronDownOutline14, { size: 12 })
|
|
2984
2999
|
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2985
3000
|
className: sidechat_module_css_default.progressDetail,
|
|
2986
3001
|
children: entry.kind === "thinking" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
|
|
2987
|
-
text
|
|
3002
|
+
text,
|
|
2988
3003
|
streaming: live && unfinished,
|
|
2989
3004
|
labels
|
|
2990
|
-
}) :
|
|
3005
|
+
}) : text
|
|
2991
3006
|
})]
|
|
2992
3007
|
});
|
|
2993
3008
|
});
|
|
@@ -6597,34 +6612,34 @@ ${body}
|
|
|
6597
6612
|
document.head.appendChild(tag);
|
|
6598
6613
|
}
|
|
6599
6614
|
var annotate_module_css_default = {
|
|
6600
|
-
"highlight": "_SVViG_highlight",
|
|
6601
|
-
"editorSpacer": "_SVViG_editorSpacer",
|
|
6602
|
-
"sentCardNote": "_SVViG_sentCardNote",
|
|
6603
6615
|
"toolbarButton": "_SVViG_toolbarButton",
|
|
6604
|
-
"cancelButton": "_SVViG_cancelButton",
|
|
6605
|
-
"deleteButton": "_SVViG_deleteButton",
|
|
6606
6616
|
"badge": "_SVViG_badge",
|
|
6617
|
+
"editorAskRow": "_SVViG_editorAskRow",
|
|
6618
|
+
"editorNew": "_SVViG_editorNew",
|
|
6619
|
+
"toolbar": "_SVViG_toolbar",
|
|
6620
|
+
"editorTarget": "_SVViG_editorTarget",
|
|
6621
|
+
"hint": "_SVViG_hint",
|
|
6622
|
+
"sentCardQuote": "_SVViG_sentCardQuote",
|
|
6607
6623
|
"confirmButton": "_SVViG_confirmButton",
|
|
6608
|
-
"editorEdit": "_SVViG_editorEdit",
|
|
6609
6624
|
"saveButton": "_SVViG_saveButton",
|
|
6610
|
-
"
|
|
6611
|
-
"sentCardQuote": "_SVViG_sentCardQuote",
|
|
6612
|
-
"hint": "_SVViG_hint",
|
|
6625
|
+
"sentChip": "_SVViG_sentChip",
|
|
6613
6626
|
"dshSidenoteHintIn": "_SVViG_dshSidenoteHintIn",
|
|
6614
|
-
"
|
|
6627
|
+
"hintClose": "_SVViG_hintClose",
|
|
6628
|
+
"editorEdit": "_SVViG_editorEdit",
|
|
6615
6629
|
"editorFooter": "_SVViG_editorFooter",
|
|
6616
|
-
"editorTextarea": "_SVViG_editorTextarea",
|
|
6617
6630
|
"toolbarBelow": "_SVViG_toolbarBelow",
|
|
6618
|
-
"
|
|
6631
|
+
"highlight": "_SVViG_highlight",
|
|
6632
|
+
"editorTextarea": "_SVViG_editorTextarea",
|
|
6619
6633
|
"sentChipRow": "_SVViG_sentChipRow",
|
|
6620
|
-
"
|
|
6621
|
-
"editorNew": "_SVViG_editorNew",
|
|
6622
|
-
"sentCardTitle": "_SVViG_sentCardTitle",
|
|
6623
|
-
"editorAskRow": "_SVViG_editorAskRow",
|
|
6624
|
-
"editorTarget": "_SVViG_editorTarget",
|
|
6625
|
-
"sentChip": "_SVViG_sentChip",
|
|
6634
|
+
"cancelButton": "_SVViG_cancelButton",
|
|
6626
6635
|
"editorAsk": "_SVViG_editorAsk",
|
|
6627
|
-
"
|
|
6636
|
+
"deleteButton": "_SVViG_deleteButton",
|
|
6637
|
+
"editorInput": "_SVViG_editorInput",
|
|
6638
|
+
"editorError": "_SVViG_editorError",
|
|
6639
|
+
"badgeSent": "_SVViG_badgeSent",
|
|
6640
|
+
"editorSpacer": "_SVViG_editorSpacer",
|
|
6641
|
+
"sentCardTitle": "_SVViG_sentCardTitle",
|
|
6642
|
+
"sentCardNote": "_SVViG_sentCardNote"
|
|
6628
6643
|
};
|
|
6629
6644
|
//#endregion
|
|
6630
6645
|
//#region src/client/annotate/hint.tsx
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Match rc.5's display preparation without changing persisted model output.
|
|
2
|
+
* Older hosts expose only the raw block; the context reader uses this same
|
|
3
|
+
* preparation on every supported host, including incomplete streaming tags. */
|
|
4
|
+
export declare function reasoningDisplayText(raw: string): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-sidenote",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Follow the tangent. Keep the thread. Annotate, explore on the side, and bring answers back to DeepSeek Harness. / 思路可以分岔,主线始终向前。划选注释、侧边追问,再把结论带回正在推进的任务。",
|
|
5
5
|
"icon": "docs/assets/logo.svg",
|
|
6
6
|
"type": "module",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
23
|
"node": ">=20",
|
|
24
|
-
"dsh": "
|
|
24
|
+
"dsh": ">=0.2.1-rc.2 <0.2.2-0"
|
|
25
25
|
},
|
|
26
26
|
"dsh": {
|
|
27
27
|
"bundle": {
|
|
@@ -37,13 +37,17 @@
|
|
|
37
37
|
"platform": "web"
|
|
38
38
|
},
|
|
39
39
|
"engines": {
|
|
40
|
-
"dsh": "
|
|
40
|
+
"dsh": ">=0.2.1-rc.2 <0.2.2-0"
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"dshSupport": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
|
|
44
|
+
"minimum": "0.2.1-rc.2",
|
|
45
|
+
"verified": [
|
|
46
|
+
"0.2.1-rc.2",
|
|
47
|
+
"0.2.1-rc.3",
|
|
48
|
+
"0.2.1-rc.4",
|
|
49
|
+
"0.2.1-rc.5"
|
|
50
|
+
]
|
|
47
51
|
},
|
|
48
52
|
"files": [
|
|
49
53
|
"lib/index.js",
|
|
@@ -56,7 +60,7 @@
|
|
|
56
60
|
"LICENSE"
|
|
57
61
|
],
|
|
58
62
|
"peerDependencies": {
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-primitives": "
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-primitives": ">=0.2.1-rc.2 <0.2.2-0",
|
|
60
64
|
"cordis": "^4.0.2",
|
|
61
65
|
"react": "^18.2.0",
|
|
62
66
|
"react-dom": "^18.2.0"
|
|
@@ -98,6 +102,7 @@
|
|
|
98
102
|
"micromark-util-types": "^2.0.2",
|
|
99
103
|
"react": "^18.2.0",
|
|
100
104
|
"react-dom": "^18.2.0",
|
|
105
|
+
"semver": "^7.8.5",
|
|
101
106
|
"shiki": "^4.4.3",
|
|
102
107
|
"tsdown": "^0.22.2",
|
|
103
108
|
"typescript": "^5.6.0",
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Match rc.5's display preparation without changing persisted model output.
|
|
2
|
+
* Older hosts expose only the raw block; the context reader uses this same
|
|
3
|
+
* preparation on every supported host, including incomplete streaming tags. */
|
|
4
|
+
export function reasoningDisplayText(raw: string): string {
|
|
5
|
+
if (!raw.startsWith('<')) return raw
|
|
6
|
+
const opening = '<signature>'
|
|
7
|
+
if (opening.startsWith(raw)) return ''
|
|
8
|
+
if (!raw.startsWith(opening)) return raw
|
|
9
|
+
const closing = '</signature>'
|
|
10
|
+
const end = raw.indexOf(closing, opening.length)
|
|
11
|
+
return end < 0 ? '' : raw.slice(end + closing.length).replace(/^(?:\r?\n)*/, '')
|
|
12
|
+
}
|
|
@@ -3,6 +3,7 @@ import { MarkdownText } from '@deepseek-ai/dsh-client-ui-primitives'
|
|
|
3
3
|
import { IconChevronDownOutline14, IconCodeOutline16, IconThinkOutline16 } from '../host/icons.ts'
|
|
4
4
|
import { t } from '../locales.ts'
|
|
5
5
|
import { conversationViewOf } from '../host/dom.ts'
|
|
6
|
+
import { reasoningDisplayText } from '../host/reasoning.ts'
|
|
6
7
|
import { SentContext, sentContextRule } from '../annotations/NativeUserContext.tsx'
|
|
7
8
|
import type { SnapshotEntry } from './snapshot.ts'
|
|
8
9
|
import type { ContextEntry } from './context.ts'
|
|
@@ -24,6 +25,8 @@ const ProgressEntry = memo(function ProgressEntry({ entry, live, loadImage }: {
|
|
|
24
25
|
const protocol = entry.kind === 'request' ? sentContextRule.match(entry.text, 0) : undefined
|
|
25
26
|
const process = entry.kind === 'thinking' || entry.kind === 'tool'
|
|
26
27
|
const labels = useMemo(() => ({ code: { copyLabel: t('contextCopy'), copiedLabel: t('contextCopied') }, footnotes: t('contextFootnotes') }), [t('contextCopy')])
|
|
28
|
+
const text = entry.kind === 'thinking' ? reasoningDisplayText(entry.text) : entry.text
|
|
29
|
+
if (entry.kind === 'thinking' && text !== entry.text && text.trim() === '') return null
|
|
27
30
|
const unfinished = entry.unfinished || entry.kind === 'streaming'
|
|
28
31
|
const status = unfinished ? <span className={css.contextHint}>{t(live ? 'contextstreaming' : 'contextUnfinished')}</span> : null
|
|
29
32
|
if (entry.kind === 'request') return <div className={css.contextUserRow} data-context-kind="request" data-context-key={entry.key}>
|
|
@@ -40,10 +43,10 @@ const ProgressEntry = memo(function ProgressEntry({ entry, live, loadImage }: {
|
|
|
40
43
|
</div>
|
|
41
44
|
return <details className={css.progressProcess} data-context-kind={entry.kind} data-context-key={entry.key}>
|
|
42
45
|
<summary>{entry.kind === 'tool' ? <IconCodeOutline16 size={14} /> : <IconThinkOutline16 size={14} />}
|
|
43
|
-
<span>{entry.kind === 'tool' ? entry.toolName : t('contextthinking')}</span><span className={css.progressPreview}>{
|
|
46
|
+
<span>{entry.kind === 'tool' ? entry.toolName : t('contextthinking')}</span><span className={css.progressPreview}>{text}</span>{status}
|
|
44
47
|
<IconChevronDownOutline14 size={12} />
|
|
45
48
|
</summary>
|
|
46
|
-
<div className={css.progressDetail}>{entry.kind === 'thinking' ? <MarkdownText text={
|
|
49
|
+
<div className={css.progressDetail}>{entry.kind === 'thinking' ? <MarkdownText text={text} streaming={live && unfinished} labels={labels} /> : text}</div>
|
|
47
50
|
</details>
|
|
48
51
|
})
|
|
49
52
|
|