@ahggg/dsh-side-chat 0.3.0 → 0.4.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 +8 -6
- package/README.zh-CN.md +8 -6
- package/lib/client/apply.d.ts.map +1 -1
- package/lib/client/apply.js +7 -1
- package/lib/client/apply.js.map +1 -1
- package/lib/client/panel/SelectionQuote.d.ts +6 -4
- package/lib/client/panel/SelectionQuote.d.ts.map +1 -1
- package/lib/client/panel/SelectionQuote.js +32 -9
- package/lib/client/panel/SelectionQuote.js.map +1 -1
- package/lib/client/panel/SideChatPanel.d.ts +1 -2
- package/lib/client/panel/SideChatPanel.d.ts.map +1 -1
- package/lib/client/panel/SideChatPanel.js +2 -2
- package/lib/client/panel/SideChatPanel.js.map +1 -1
- package/lib/client/panel/messages.d.ts +2 -2
- package/lib/client/panel/messages.d.ts.map +1 -1
- package/lib/client/panel/messages.js +4 -4
- package/lib/client/panel/messages.js.map +1 -1
- package/lib/client/parent-composer/ParentConversationAnnotations.d.ts +27 -0
- package/lib/client/parent-composer/ParentConversationAnnotations.d.ts.map +1 -0
- package/lib/client/parent-composer/ParentConversationAnnotations.js +97 -0
- package/lib/client/parent-composer/ParentConversationAnnotations.js.map +1 -0
- package/lib/client/parent-composer/add-to-conversation.d.ts +64 -0
- package/lib/client/parent-composer/add-to-conversation.d.ts.map +1 -1
- package/lib/client/parent-composer/add-to-conversation.js +182 -0
- package/lib/client/parent-composer/add-to-conversation.js.map +1 -1
- package/lib/client/rc6/ArchivedConversation.d.ts +1 -2
- package/lib/client/rc6/ArchivedConversation.d.ts.map +1 -1
- package/lib/client/rc6/ArchivedConversation.js +2 -2
- package/lib/client/rc6/ArchivedConversation.js.map +1 -1
- package/lib/client/rc6/Rc6SideChatOverlay.d.ts.map +1 -1
- package/lib/client/rc6/Rc6SideChatOverlay.js +48 -10
- package/lib/client/rc6/Rc6SideChatOverlay.js.map +1 -1
- package/lib/client/rc6/context.d.ts +6 -1
- package/lib/client/rc6/context.d.ts.map +1 -1
- package/lib/client/rc6/sessions-adapter.d.ts +6 -0
- package/lib/client/rc6/sessions-adapter.d.ts.map +1 -1
- package/lib/client/rc6/sessions-adapter.js +30 -0
- package/lib/client/rc6/sessions-adapter.js.map +1 -1
- package/lib/client/selection/SelectionActions.d.ts +4 -1
- package/lib/client/selection/SelectionActions.d.ts.map +1 -1
- package/lib/client/selection/SelectionActions.js +62 -3
- package/lib/client/selection/SelectionActions.js.map +1 -1
- package/lib/client.js +619 -179
- package/lib/client.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ Ask a focused follow-up about selected text without leaving your current DeepSee
|
|
|
6
6
|
|
|
7
7
|
[简体中文](README.zh-CN.md)
|
|
8
8
|
|
|
9
|
-

|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
@@ -30,18 +30,20 @@ Open the URL printed by DSH. The plugin loads automatically in the Web client.
|
|
|
30
30
|
|
|
31
31
|
1. Complete at least one turn in the main conversation.
|
|
32
32
|
2. Select text inside one completed user or assistant message.
|
|
33
|
-
3. Click `More details` to send an explanation request immediately, or
|
|
34
|
-
4. When writing your own question, press `Enter` to send it.
|
|
33
|
+
3. Click `Add to chat` to add an optional comment before attaching the passage to the main composer, `More details` to send an explanation request immediately, or `Ask in side chat` to write a focused question.
|
|
34
|
+
4. When writing your own message or question, press `Enter` to send it.
|
|
35
35
|
5. Press `Esc` or click `×` when you are done.
|
|
36
36
|
|
|
37
37
|
Useful details:
|
|
38
38
|
|
|
39
39
|
- `Shift+Enter` inserts a newline.
|
|
40
|
+
- After clicking `Add to chat`, press `Enter` or click `Save` to keep the annotation. Click outside the comment box or click `Cancel` to discard it.
|
|
41
|
+
- `Add to chat` keeps any existing draft text and can collect multiple numbered passages, each with its own optional comment, in one annotation capsule.
|
|
40
42
|
- The input grows with its content and becomes scrollable at its maximum height.
|
|
41
43
|
- While a reply is running, the send icon becomes a stop button.
|
|
42
44
|
- Assistant replies use DSH's native Markdown rendering.
|
|
43
|
-
- Hover over `
|
|
44
|
-
- Before
|
|
45
|
+
- Hover over `N annotations` to preview every selected passage and its comment.
|
|
46
|
+
- Before sending, hover over the annotation capsule and click `×` to remove it; after sending, the same capsule appears above the user message.
|
|
45
47
|
- The main conversation stays visible and is never switched to the child Session.
|
|
46
48
|
|
|
47
49
|
## What happens to the conversation
|
|
@@ -55,7 +57,7 @@ The parent and child share the same workspace. File changes, commands, and other
|
|
|
55
57
|
## Current limitations
|
|
56
58
|
|
|
57
59
|
- A selection must stay inside one completed message.
|
|
58
|
-
- Attachments
|
|
60
|
+
- Attachments and `/side` are not supported yet.
|
|
59
61
|
- Closed Side Chats cannot be reopened from the panel.
|
|
60
62
|
- There is no automatic history cleanup or “keep as normal chat” action.
|
|
61
63
|
- An archived child may briefly appear in normal Session lists.
|
package/README.zh-CN.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
[English](README.md)
|
|
8
8
|
|
|
9
|
-

|
|
10
10
|
|
|
11
11
|
## 安装
|
|
12
12
|
|
|
@@ -30,18 +30,20 @@ dsh web --port 3080
|
|
|
30
30
|
|
|
31
31
|
1. 在主会话中至少完成一轮对话。
|
|
32
32
|
2. 在一条已完成的用户或助手消息内选中文字。
|
|
33
|
-
3. 点击 `More details` 可以立即发送详细解释请求;点击 `Ask in side chat`
|
|
34
|
-
4.
|
|
33
|
+
3. 点击 `Add to chat` 可以先填写一条可选批注,再把引用加入主会话输入框;点击 `More details` 可以立即发送详细解释请求;点击 `Ask in side chat` 可以自己输入聚焦问题。
|
|
34
|
+
4. 自己输入消息或问题时,按 `Enter` 发送。
|
|
35
35
|
5. 完成后按 `Esc`,或者点击 `×` 关闭。
|
|
36
36
|
|
|
37
37
|
常用操作:
|
|
38
38
|
|
|
39
39
|
- `Shift+Enter` 换行。
|
|
40
|
+
- 点击 `Add to chat` 后,按 `Enter` 或点击 `Save` 保存 annotation;点击批注框外部或点击 `Cancel` 则直接取消。
|
|
41
|
+
- `Add to chat` 会保留输入框中已有的草稿,并可把多段带序号的文本及各自的可选批注汇总到同一个 annotation 胶囊中。
|
|
40
42
|
- 输入框会随内容自动增高,达到最大高度后在内部滚动。
|
|
41
43
|
- 回复生成期间,发送图标会替换为停止按钮。
|
|
42
44
|
- Assistant 回复使用 DSH 原生 Markdown 渲染。
|
|
43
|
-
- hover `
|
|
44
|
-
-
|
|
45
|
+
- hover `N annotations` 可以预览每一段所选文本及对应批注。
|
|
46
|
+
- 发送前可以 hover annotation 胶囊并点击 `×` 移除;发送后,同一个胶囊会显示在用户消息上方。
|
|
45
47
|
- 主会话会一直保留在页面中,不会自动切换到 child Session。
|
|
46
48
|
|
|
47
49
|
## 会话和数据如何处理
|
|
@@ -55,7 +57,7 @@ dsh web --port 3080
|
|
|
55
57
|
## 当前限制
|
|
56
58
|
|
|
57
59
|
- 选区必须位于同一条已完成消息内。
|
|
58
|
-
-
|
|
60
|
+
- 暂不支持附件和 `/side`。
|
|
59
61
|
- 关闭后不能从面板重新打开原 Side Chat。
|
|
60
62
|
- 暂无自动历史清理或“保留为普通会话”操作。
|
|
61
63
|
- 已归档的 child 可能短暂出现在普通会话列表中。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAalD,eAAO,MAAM,IAAI,qBAAqB,CAAA;AACtC,eAAO,MAAM,MAAM,UAAmE,CAAA;AAEtF,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvD"}
|
package/lib/client/apply.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { createElement } from 'react';
|
|
2
2
|
import sideChatCss from './panel/side-chat.css';
|
|
3
|
+
import { selectionReferenceSource } from './parent-composer/add-to-conversation.js';
|
|
4
|
+
import { mountParentConversationAnnotations } from './parent-composer/ParentConversationAnnotations.js';
|
|
3
5
|
import { SideChatController } from './side-chat-controller.js';
|
|
4
6
|
import { mountArchivedRemote } from './rc6/remote-adapter.js';
|
|
5
7
|
import { Rc6SideChatOverlay } from './rc6/Rc6SideChatOverlay.js';
|
|
6
8
|
import { Rc6SideChatSessions } from './rc6/sessions-adapter.js';
|
|
7
9
|
export const name = 'side-chat-client';
|
|
8
|
-
export const inject = ['remote', 'sessions', 'slots'];
|
|
10
|
+
export const inject = ['conversation', 'inputTriggers', 'remote', 'sessions', 'slots'];
|
|
9
11
|
export async function apply(ctx) {
|
|
10
12
|
const stylesheet = document.createElement('style');
|
|
11
13
|
stylesheet.textContent = sideChatCss;
|
|
@@ -14,7 +16,9 @@ export async function apply(ctx) {
|
|
|
14
16
|
document.head.append(stylesheet);
|
|
15
17
|
const clientCtx = ctx;
|
|
16
18
|
const mounted = await mountArchivedRemote(clientCtx);
|
|
19
|
+
const removeSelectionReferenceSource = clientCtx.inputTriggers.registerSource(selectionReferenceSource);
|
|
17
20
|
const sessions = new Rc6SideChatSessions(clientCtx);
|
|
21
|
+
const removeParentAnnotations = mountParentConversationAnnotations(clientCtx, () => { sessions.removeConversationAnnotations(); });
|
|
18
22
|
const controller = new SideChatController(mounted.remote, sessions);
|
|
19
23
|
const removeOverlay = clientCtx.slots.inject('shell.overlay', () => clientCtx.slots.register({
|
|
20
24
|
name: 'shell.overlay',
|
|
@@ -26,6 +30,8 @@ export async function apply(ctx) {
|
|
|
26
30
|
await controller.dispose();
|
|
27
31
|
}
|
|
28
32
|
finally {
|
|
33
|
+
removeParentAnnotations();
|
|
34
|
+
removeSelectionReferenceSource();
|
|
29
35
|
removeOverlay();
|
|
30
36
|
await mounted.dispose();
|
|
31
37
|
stylesheet.remove();
|
package/lib/client/apply.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAKrC,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAG/D,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAKrC,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AACnF,OAAO,EAAE,kCAAkC,EAAE,MAAM,oDAAoD,CAAA;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAG/D,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AAEtF,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAClD,UAAU,CAAC,WAAW,GAAG,WAAW,CAAA;IACpC,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAA;IAC3C,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAA;IAC5C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEhC,MAAM,SAAS,GAAG,GAAkC,CAAA;IACpD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,8BAA8B,GAAG,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAA;IACvG,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAA;IACnD,MAAM,uBAAuB,GAAG,kCAAkC,CAChE,SAAS,EACT,GAAG,EAAE,GAAG,QAAQ,CAAC,6BAA6B,EAAE,CAAA,CAAC,CAAC,CACnD,CAAA;IACD,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3F,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,EAAE;KACV,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;QAC5B,CAAC;gBAAS,CAAC;YACT,uBAAuB,EAAE,CAAA;YACzB,8BAA8B,EAAE,CAAA;YAChC,aAAa,EAAE,CAAA;YACf,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,UAAU,CAAC,MAAM,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,EAAE,+BAA+B,CAAC,CAAA;AACrC,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { ConversationSelection } from '../../shared/contracts.js';
|
|
2
1
|
import type { SideChatMessages } from './messages.js';
|
|
2
|
+
export interface SelectionQuoteItem {
|
|
3
|
+
readonly text: string;
|
|
4
|
+
readonly comment?: string;
|
|
5
|
+
}
|
|
3
6
|
/** Selected passage displayed separately from the user's first question. */
|
|
4
|
-
export declare function SelectionQuote({
|
|
5
|
-
readonly
|
|
7
|
+
export declare function SelectionQuote({ selections, messages, onRemove, }: {
|
|
8
|
+
readonly selections: readonly SelectionQuoteItem[];
|
|
6
9
|
readonly messages: SideChatMessages;
|
|
7
|
-
readonly onCopy?: (text: string) => void;
|
|
8
10
|
readonly onRemove?: () => void;
|
|
9
11
|
}): import("react/jsx-runtime").JSX.Element;
|
|
10
12
|
//# sourceMappingURL=SelectionQuote.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionQuote.d.ts","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"SelectionQuote.d.ts","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAErD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAC/B,2CAiGA"}
|
|
@@ -1,25 +1,48 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useRef, useState } from 'react';
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
/** Selected passage displayed separately from the user's first question. */
|
|
4
|
-
export function SelectionQuote({
|
|
4
|
+
export function SelectionQuote({ selections, messages, onRemove, }) {
|
|
5
5
|
const [expanded, setExpanded] = useState(false);
|
|
6
|
+
const [hovered, setHovered] = useState(false);
|
|
6
7
|
const quoteRef = useRef(null);
|
|
7
8
|
const detailsRef = useRef(null);
|
|
8
|
-
const
|
|
9
|
+
const leaveTimerRef = useRef();
|
|
10
|
+
const keepHoverOpen = () => {
|
|
11
|
+
if (leaveTimerRef.current !== undefined)
|
|
12
|
+
window.clearTimeout(leaveTimerRef.current);
|
|
13
|
+
leaveTimerRef.current = undefined;
|
|
14
|
+
setHovered(true);
|
|
15
|
+
};
|
|
16
|
+
const closeHoverAfterGrace = () => {
|
|
17
|
+
if (leaveTimerRef.current !== undefined)
|
|
18
|
+
window.clearTimeout(leaveTimerRef.current);
|
|
19
|
+
leaveTimerRef.current = window.setTimeout(() => {
|
|
20
|
+
leaveTimerRef.current = undefined;
|
|
21
|
+
setHovered(false);
|
|
22
|
+
}, 220);
|
|
23
|
+
};
|
|
24
|
+
useEffect(() => () => {
|
|
25
|
+
if (leaveTimerRef.current !== undefined)
|
|
26
|
+
window.clearTimeout(leaveTimerRef.current);
|
|
27
|
+
}, []);
|
|
28
|
+
const constrainDetailsToBoundary = () => {
|
|
9
29
|
const details = detailsRef.current;
|
|
10
|
-
const
|
|
11
|
-
if (details === null
|
|
30
|
+
const boundary = quoteRef.current?.closest('.dsh-side-chat-panel, [data-composer-seat], [data-chat-flow-kind]');
|
|
31
|
+
if (details === null)
|
|
12
32
|
return;
|
|
13
33
|
details.style.setProperty('--dsh-side-chat-quote-offset-x', '0px');
|
|
14
34
|
const detailsRect = details.getBoundingClientRect();
|
|
15
|
-
const
|
|
16
|
-
const leftEdge =
|
|
17
|
-
const rightEdge =
|
|
35
|
+
const boundaryRect = boundary?.getBoundingClientRect();
|
|
36
|
+
const leftEdge = (boundaryRect?.left ?? 0) + 16;
|
|
37
|
+
const rightEdge = (boundaryRect?.right ?? window.innerWidth) - 16;
|
|
18
38
|
const offset = detailsRect.left < leftEdge
|
|
19
39
|
? leftEdge - detailsRect.left
|
|
20
40
|
: detailsRect.right > rightEdge ? rightEdge - detailsRect.right : 0;
|
|
21
41
|
details.style.setProperty('--dsh-side-chat-quote-offset-x', `${String(offset)}px`);
|
|
22
42
|
};
|
|
23
|
-
return (_jsxs("section", { ref: quoteRef, className: "dsh-side-chat-quote", "aria-label": messages.selectedPassage, "data-expanded": expanded || undefined,
|
|
43
|
+
return (_jsxs("section", { ref: quoteRef, className: "dsh-side-chat-quote", "aria-label": messages.selectedPassage, "data-expanded": expanded || undefined, "data-hovered": hovered || undefined, onMouseEnter: () => {
|
|
44
|
+
keepHoverOpen();
|
|
45
|
+
constrainDetailsToBoundary();
|
|
46
|
+
}, onMouseLeave: closeHoverAfterGrace, onFocusCapture: constrainDetailsToBoundary, children: [_jsxs("div", { className: "dsh-side-chat-quote-chip", children: [_jsxs("button", { type: "button", className: "dsh-side-chat-quote-trigger", "aria-expanded": expanded, "aria-label": `${expanded ? messages.collapse : messages.expand}: ${messages.selectedPassage}`, onClick: () => { setExpanded(value => !value); }, children: [_jsxs("svg", { className: "dsh-side-chat-quote-icon", viewBox: "0 0 24 24", "aria-hidden": "true", children: [_jsx("path", { d: "M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4Z" }), _jsx("path", { d: "M8 8h8M8 12h5" })] }), _jsx("strong", { children: messages.selectionAttachments(selections.length) })] }), onRemove !== undefined && (_jsx("button", { type: "button", className: "dsh-side-chat-quote-remove", "aria-label": messages.removeSelection, onClick: onRemove, children: "\u00D7" }))] }), _jsx("div", { ref: detailsRef, className: "dsh-side-chat-quote-details", role: "tooltip", children: selections.map((selection, index) => (_jsxs("div", { className: "dsh-side-chat-quote-detail", children: [_jsx("div", { className: "dsh-side-chat-quote-details-header", children: _jsxs("strong", { children: [String(index + 1), ". ", messages.selectionPreviewLabel, ":"] }) }), _jsx("pre", { children: selection.text }), selection.comment !== undefined && (_jsxs("div", { className: "dsh-side-chat-quote-comment", children: [_jsxs("strong", { children: [messages.selectionCommentLabel, ":"] }), _jsx("pre", { children: selection.comment })] }))] }, `${String(index)}-${selection.text}`))) })] }));
|
|
24
47
|
}
|
|
25
48
|
//# sourceMappingURL=SelectionQuote.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionQuote.js","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"SelectionQuote.js","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,7 @@ export interface SideChatPanelProps {
|
|
|
10
10
|
readonly onClose: () => Promise<SideChatActionResult<void>>;
|
|
11
11
|
readonly onRetry: () => Promise<SideChatActionResult<unknown>>;
|
|
12
12
|
readonly onFocusParent: () => void;
|
|
13
|
-
readonly onCopySelection?: (text: string) => void;
|
|
14
13
|
readonly onRemoveSelection?: () => void;
|
|
15
14
|
}
|
|
16
|
-
export declare function SideChatPanel({ state, locale, embeddedConversation, onDraftChange, onFirstSend, onClose, onRetry, onFocusParent,
|
|
15
|
+
export declare function SideChatPanel({ state, locale, embeddedConversation, onDraftChange, onFirstSend, onClose, onRetry, onFocusParent, onRemoveSelection, }: SideChatPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
17
16
|
//# sourceMappingURL=SideChatPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideChatPanel.d.ts","sourceRoot":"","sources":["../../../src/client/panel/SideChatPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAS3D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAA;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAA;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/C,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9D,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAA;IAClC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"SideChatPanel.d.ts","sourceRoot":"","sources":["../../../src/client/panel/SideChatPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAS3D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAA;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAA;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/C,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9D,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAA;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;CACxC;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,MAAa,EACb,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,OAAO,EACP,OAAO,EACP,aAAa,EACb,iBAAiB,GAClB,EAAE,kBAAkB,2CAmFpB"}
|
|
@@ -7,7 +7,7 @@ import { SideChatBody } from './SideChatBody.js';
|
|
|
7
7
|
import { SideChatErrorState } from './SideChatErrorState.js';
|
|
8
8
|
import { SideChatHeader } from './SideChatHeader.js';
|
|
9
9
|
import { useAutoGrowingTextarea } from './use-auto-growing-textarea.js';
|
|
10
|
-
export function SideChatPanel({ state, locale = 'en', embeddedConversation, onDraftChange, onFirstSend, onClose, onRetry, onFocusParent,
|
|
10
|
+
export function SideChatPanel({ state, locale = 'en', embeddedConversation, onDraftChange, onFirstSend, onClose, onRetry, onFocusParent, onRemoveSelection, }) {
|
|
11
11
|
const messages = SIDE_CHAT_MESSAGES[locale];
|
|
12
12
|
const [submitting, setSubmitting] = useState(false);
|
|
13
13
|
const draftRef = useAutoGrowingTextarea(state.draft);
|
|
@@ -25,7 +25,7 @@ export function SideChatPanel({ state, locale = 'en', embeddedConversation, onDr
|
|
|
25
25
|
};
|
|
26
26
|
return (_jsxs("aside", { className: "dsh-side-chat-panel", "data-side-chat-panel": "", "aria-label": messages.title, "aria-busy": ['creating', 'opening', 'closing'].includes(state.phase) || undefined, children: [_jsx(SideChatHeader, { phase: state.phase, messages: messages, onFocusParent: onFocusParent, onClose: () => { void onClose(); } }), state.error !== undefined && (_jsx(SideChatErrorState, { error: state.error, messages: messages, onRetry: () => { void onRetry(); } })), state.childSessionId !== undefined && embeddedConversation !== undefined
|
|
27
27
|
? _jsx(SideChatBody, { children: embeddedConversation })
|
|
28
|
-
: (_jsxs("form", { className: "dsh-side-chat-draft", onSubmit: (event) => { void submit(event); }, children: [state.selection !== undefined && (_jsx(SelectionQuote, {
|
|
28
|
+
: (_jsxs("form", { className: "dsh-side-chat-draft", onSubmit: (event) => { void submit(event); }, children: [state.selection !== undefined && (_jsx(SelectionQuote, { selections: [state.selection], messages: messages, ...onRemoveSelection === undefined ? {} : { onRemove: onRemoveSelection } })), _jsx("label", { htmlFor: "dsh-side-chat-draft-input", children: messages.placeholder }), _jsx("textarea", { id: "dsh-side-chat-draft-input", ref: draftRef, autoFocus: true, rows: 1, value: state.draft, disabled: ['creating', 'opening', 'closing'].includes(state.phase), placeholder: messages.placeholder, onChange: (event) => { onDraftChange(event.target.value); }, onKeyDown: (event) => {
|
|
29
29
|
if (event.key === 'Enter' && !event.shiftKey) {
|
|
30
30
|
event.preventDefault();
|
|
31
31
|
event.currentTarget.form?.requestSubmit();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideChatPanel.js","sourceRoot":"","sources":["../../../src/client/panel/SideChatPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkC,MAAM,OAAO,CAAA;AAGhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"SideChatPanel.js","sourceRoot":"","sources":["../../../src/client/panel/SideChatPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,12 @@ export interface SideChatMessages {
|
|
|
4
4
|
readonly placeholder: string;
|
|
5
5
|
readonly send: string;
|
|
6
6
|
readonly selectedPassage: string;
|
|
7
|
-
readonly
|
|
7
|
+
readonly selectionAttachments: (count: number) => string;
|
|
8
8
|
readonly selectionPreviewLabel: string;
|
|
9
|
+
readonly selectionCommentLabel: string;
|
|
9
10
|
readonly removeSelection: string;
|
|
10
11
|
readonly expand: string;
|
|
11
12
|
readonly collapse: string;
|
|
12
|
-
readonly copy: string;
|
|
13
13
|
readonly temporary: string;
|
|
14
14
|
readonly referenceOnly: string;
|
|
15
15
|
readonly cannotReopen: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/client/panel/messages.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/client/panel/messages.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACxD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,EAAE,gBAAgB,CAAC,CAyChF,CAAA"}
|
|
@@ -5,12 +5,12 @@ export const SIDE_CHAT_MESSAGES = Object.freeze({
|
|
|
5
5
|
placeholder: 'Ask about this in a Side Chat',
|
|
6
6
|
send: 'Send',
|
|
7
7
|
selectedPassage: 'Selected passage',
|
|
8
|
-
|
|
8
|
+
selectionAttachments: (count) => `${String(count)} ${count === 1 ? 'annotation' : 'annotations'}`,
|
|
9
9
|
selectionPreviewLabel: 'Selected text',
|
|
10
|
+
selectionCommentLabel: 'User comment',
|
|
10
11
|
removeSelection: 'Remove annotation',
|
|
11
12
|
expand: 'Expand',
|
|
12
13
|
collapse: 'Collapse',
|
|
13
|
-
copy: 'Copy',
|
|
14
14
|
temporary: 'Archived when closed; history remains on disk',
|
|
15
15
|
referenceOnly: 'Inherits the complete parent conversation prefix',
|
|
16
16
|
cannotReopen: 'No reopen action',
|
|
@@ -25,12 +25,12 @@ export const SIDE_CHAT_MESSAGES = Object.freeze({
|
|
|
25
25
|
placeholder: '在侧边对话中询问这段内容',
|
|
26
26
|
send: '发送',
|
|
27
27
|
selectedPassage: '所选段落',
|
|
28
|
-
|
|
28
|
+
selectionAttachments: (count) => `${String(count)} 条引用`,
|
|
29
29
|
selectionPreviewLabel: '所选文本',
|
|
30
|
+
selectionCommentLabel: '用户批注',
|
|
30
31
|
removeSelection: '移除引用',
|
|
31
32
|
expand: '展开',
|
|
32
33
|
collapse: '收起',
|
|
33
|
-
copy: '复制',
|
|
34
34
|
temporary: '关闭时归档;历史仍保存在磁盘上',
|
|
35
35
|
referenceOnly: '完整继承父会话对话前缀',
|
|
36
36
|
cannotReopen: '不提供重新打开操作',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/client/panel/messages.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,kBAAkB,GAAuD,MAAM,CAAC,MAAM,CAAC;IAClG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,kBAAkB;QACnC,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/client/panel/messages.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,kBAAkB,GAAuD,MAAM,CAAC,MAAM,CAAC;IAClG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,kBAAkB;QACnC,oBAAoB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE;QACzG,qBAAqB,EAAE,eAAe;QACtC,qBAAqB,EAAE,cAAc;QACrC,eAAe,EAAE,mBAAmB;QACpC,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,+CAA+C;QAC1D,aAAa,EAAE,kDAAkD;QACjE,YAAY,EAAE,kBAAkB;QAChC,eAAe,EAAE,6BAA6B;QAC9C,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,iBAAiB;QAC/B,UAAU,EAAE,+BAA+B;KAC5C,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,IAAI;QACV,eAAe,EAAE,MAAM;QACvB,oBAAoB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;QAC/D,qBAAqB,EAAE,MAAM;QAC7B,qBAAqB,EAAE,MAAM;QAC7B,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,iBAAiB;QAC5B,aAAa,EAAE,aAAa;QAC5B,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,WAAW;QAC5B,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAE,UAAU;KACvB,CAAC;CACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ElementType, type ReactNode } from 'react';
|
|
2
|
+
import type { Rc6ClientContext } from '../rc6/context.js';
|
|
3
|
+
import { SIDE_CHAT_MESSAGES } from '../panel/messages.js';
|
|
4
|
+
import { type ParentComposerInputSnapshot } from './add-to-conversation.js';
|
|
5
|
+
type Locale = keyof typeof SIDE_CHAT_MESSAGES;
|
|
6
|
+
interface UserNodeProps {
|
|
7
|
+
readonly node: {
|
|
8
|
+
readonly data: {
|
|
9
|
+
readonly content: readonly unknown[];
|
|
10
|
+
};
|
|
11
|
+
readonly [key: string]: unknown;
|
|
12
|
+
};
|
|
13
|
+
readonly [key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
type UserNodeRenderer = ElementType<UserNodeProps>;
|
|
16
|
+
/** The interactive annotation capsule occupying the reserved first composer row. */
|
|
17
|
+
export declare function ParentComposerAnnotations({ input, onRemove, locale, }: {
|
|
18
|
+
readonly input: ParentComposerInputSnapshot;
|
|
19
|
+
readonly onRemove: () => void;
|
|
20
|
+
readonly locale?: Locale;
|
|
21
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
22
|
+
/** Wrap DSH's own user renderer only when this plugin's durable prefix exists. */
|
|
23
|
+
export declare function annotatedUserMessageRenderer(Original: UserNodeRenderer): (props: UserNodeProps) => ReactNode;
|
|
24
|
+
/** Mount the composer capsule and a thin wrapper around DSH's user renderers. */
|
|
25
|
+
export declare function mountParentConversationAnnotations(ctx: Rc6ClientContext, removeAnnotations: () => void): () => void;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=ParentConversationAnnotations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParentConversationAnnotations.d.ts","sourceRoot":"","sources":["../../../src/client/parent-composer/ParentConversationAnnotations.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAA;AAEjC,KAAK,MAAM,GAAG,MAAM,OAAO,kBAAkB,CAAA;AAC7C,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,IAAI,EAAE;YAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAA;SAAE,CAAA;QACvD,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAChC,CAAA;IACD,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AACD,KAAK,gBAAgB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;AAyBlD,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,QAAQ,EACR,MAAwB,GACzB,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAA;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB,kDAYA;AA4BD,kFAAkF;AAClF,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,CAqB5G;AAED,iFAAiF;AACjF,wBAAgB,kCAAkC,CAChD,GAAG,EAAE,gBAAgB,EACrB,iBAAiB,EAAE,MAAM,IAAI,GAC5B,MAAM,IAAI,CAyCZ"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createElement } from 'react';
|
|
3
|
+
import { SIDE_CHAT_MESSAGES } from '../panel/messages.js';
|
|
4
|
+
import { SelectionQuote } from '../panel/SelectionQuote.js';
|
|
5
|
+
import { conversationAnnotations, parseAnnotatedConversationPrompt, } from './add-to-conversation.js';
|
|
6
|
+
function currentLocale() {
|
|
7
|
+
return navigator.language.toLowerCase().startsWith('zh') ? 'zh-CN' : 'en';
|
|
8
|
+
}
|
|
9
|
+
/** The interactive annotation capsule occupying the reserved first composer row. */
|
|
10
|
+
export function ParentComposerAnnotations({ input, onRemove, locale = currentLocale(), }) {
|
|
11
|
+
const annotations = conversationAnnotations(input);
|
|
12
|
+
if (annotations.length === 0)
|
|
13
|
+
return null;
|
|
14
|
+
return (_jsx("div", { className: "dsh-side-chat-parent-annotation-dock", children: _jsx(SelectionQuote, { selections: annotations, messages: SIDE_CHAT_MESSAGES[locale], onRemove: onRemove }) }));
|
|
15
|
+
}
|
|
16
|
+
function contentText(content) {
|
|
17
|
+
return content.map((block) => {
|
|
18
|
+
if (typeof block !== 'object' || block === null)
|
|
19
|
+
return '';
|
|
20
|
+
const value = block;
|
|
21
|
+
return value.type === 'text' && typeof value.text === 'string' ? value.text : '';
|
|
22
|
+
}).join('');
|
|
23
|
+
}
|
|
24
|
+
function visibleMessage(message) {
|
|
25
|
+
const wrapped = /^<user_question>\n?([\s\S]*?)\n?<\/user_question>$/u.exec(message);
|
|
26
|
+
return wrapped?.[1]?.trim() ?? message;
|
|
27
|
+
}
|
|
28
|
+
function replaceTextContent(content, message) {
|
|
29
|
+
let replaced = false;
|
|
30
|
+
const next = content.flatMap((block) => {
|
|
31
|
+
if (typeof block !== 'object' || block === null)
|
|
32
|
+
return [block];
|
|
33
|
+
const value = block;
|
|
34
|
+
if (value.type !== 'text' || typeof value.text !== 'string')
|
|
35
|
+
return [block];
|
|
36
|
+
if (replaced)
|
|
37
|
+
return [];
|
|
38
|
+
replaced = true;
|
|
39
|
+
return [{ ...value, text: message }];
|
|
40
|
+
});
|
|
41
|
+
return replaced ? next : [{ type: 'text', text: message }, ...next];
|
|
42
|
+
}
|
|
43
|
+
/** Wrap DSH's own user renderer only when this plugin's durable prefix exists. */
|
|
44
|
+
export function annotatedUserMessageRenderer(Original) {
|
|
45
|
+
return function AnnotatedUserMessageRenderer(props) {
|
|
46
|
+
const parsed = parseAnnotatedConversationPrompt(contentText(props.node.data.content));
|
|
47
|
+
if (parsed === undefined)
|
|
48
|
+
return createElement(Original, props);
|
|
49
|
+
const node = {
|
|
50
|
+
...props.node,
|
|
51
|
+
data: {
|
|
52
|
+
...props.node.data,
|
|
53
|
+
content: replaceTextContent(props.node.data.content, visibleMessage(parsed.message)),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
return (_jsxs("div", { className: "dsh-side-chat-parent-user-message", children: [_jsx(SelectionQuote, { selections: parsed.annotations, messages: SIDE_CHAT_MESSAGES[currentLocale()] }), createElement(Original, { ...props, node })] }));
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Mount the composer capsule and a thin wrapper around DSH's user renderers. */
|
|
60
|
+
export function mountParentConversationAnnotations(ctx, removeAnnotations) {
|
|
61
|
+
const slots = ctx.slots;
|
|
62
|
+
const removeDock = slots.inject('conversation.input.dock', () => slots.register({
|
|
63
|
+
name: 'conversation.input.dock',
|
|
64
|
+
id: 'dsh-side-chat-annotations',
|
|
65
|
+
order: -100,
|
|
66
|
+
}, ({ input }) => (_jsx(ParentComposerAnnotations, { input: input, onRemove: removeAnnotations }))));
|
|
67
|
+
const shadow = (key) => slots.inject('conversation.chat.node', () => {
|
|
68
|
+
const ShadowedUserMessage = (props) => {
|
|
69
|
+
// Built-in keyed renderers can register after this declaration callback.
|
|
70
|
+
// Resolve the next-priority renderer at render time so load order does
|
|
71
|
+
// not decide whether annotations are projected.
|
|
72
|
+
const original = slots.entries('conversation.chat.node')
|
|
73
|
+
.find(entry => entry.options.key === key
|
|
74
|
+
&& entry.component !== ShadowedUserMessage
|
|
75
|
+
&& (entry.options.priority ?? 0) >= 0)
|
|
76
|
+
?.component;
|
|
77
|
+
if (original === undefined)
|
|
78
|
+
return null;
|
|
79
|
+
const Renderer = annotatedUserMessageRenderer(original);
|
|
80
|
+
return createElement(Renderer, props);
|
|
81
|
+
};
|
|
82
|
+
return slots.register({
|
|
83
|
+
name: 'conversation.chat.node',
|
|
84
|
+
key,
|
|
85
|
+
priority: -100,
|
|
86
|
+
locale: 'conversation',
|
|
87
|
+
}, ShadowedUserMessage);
|
|
88
|
+
});
|
|
89
|
+
const removeUser = shadow('user');
|
|
90
|
+
const removeSteering = shadow('steering');
|
|
91
|
+
return () => {
|
|
92
|
+
removeSteering();
|
|
93
|
+
removeUser();
|
|
94
|
+
removeDock();
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=ParentConversationAnnotations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParentConversationAnnotations.js","sourceRoot":"","sources":["../../../src/client/parent-composer/ParentConversationAnnotations.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,68 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
1
2
|
import type { ConversationSelection, SideChatPromptPart } from '../../shared/contracts.js';
|
|
3
|
+
export declare const SELECTION_REFERENCE_LABEL = "__dsh_side_chat_annotations__";
|
|
4
|
+
export interface ConversationAnnotation {
|
|
5
|
+
readonly text: string;
|
|
6
|
+
readonly comment?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ParentComposerOccurrence {
|
|
9
|
+
readonly occurrenceId: number;
|
|
10
|
+
readonly source: string;
|
|
11
|
+
readonly ref: string;
|
|
12
|
+
readonly offset: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ParentComposerInputSnapshot {
|
|
15
|
+
readonly draft: string;
|
|
16
|
+
readonly draftRev: number;
|
|
17
|
+
readonly occurrences: readonly ParentComposerOccurrence[];
|
|
18
|
+
}
|
|
19
|
+
export interface ParentComposerInput {
|
|
20
|
+
readonly state: {
|
|
21
|
+
getSnapshot(): ParentComposerInputSnapshot;
|
|
22
|
+
};
|
|
23
|
+
setDraft(text: string): void;
|
|
24
|
+
insertReference(reference: {
|
|
25
|
+
readonly source: string;
|
|
26
|
+
readonly ref: string;
|
|
27
|
+
readonly label: string;
|
|
28
|
+
readonly clipboardText: string;
|
|
29
|
+
}, span: {
|
|
30
|
+
readonly start: number;
|
|
31
|
+
readonly end: number;
|
|
32
|
+
readonly draftRev: number;
|
|
33
|
+
}): boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface ParentConversationService {
|
|
36
|
+
readonly input: {
|
|
37
|
+
for(scope: Context): ParentComposerInput;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface SelectionReferenceSource {
|
|
41
|
+
readonly trigger: '@';
|
|
42
|
+
readonly name: string;
|
|
43
|
+
readonly order: number;
|
|
44
|
+
candidates(): Promise<readonly never[]>;
|
|
45
|
+
onPick(): undefined;
|
|
46
|
+
readonly codec: {
|
|
47
|
+
clipboardText(ref: string): string;
|
|
48
|
+
serialize(ref: string, signal: AbortSignal): Promise<string>;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export declare function decodeSelectionReference(ref: string): readonly ConversationAnnotation[];
|
|
52
|
+
/** Read all plugin annotations represented by the current DSH input occurrence. */
|
|
53
|
+
export declare function conversationAnnotations(snapshot: ParentComposerInputSnapshot): readonly ConversationAnnotation[];
|
|
54
|
+
/** Remove every unsent plugin annotation while preserving the user's draft. */
|
|
55
|
+
export declare function removeConversationAnnotations(input: ParentComposerInput): boolean;
|
|
56
|
+
/** Reference codec used by DSH's native composer chip and submit pipeline. */
|
|
57
|
+
export declare const selectionReferenceSource: SelectionReferenceSource;
|
|
58
|
+
/** Add one passage to the parent composer's aggregated annotation occurrence. */
|
|
59
|
+
export declare function addSelectionToConversation(input: ParentComposerInput, selection: ConversationSelection, comment?: string): boolean;
|
|
60
|
+
export interface AnnotatedConversationPrompt {
|
|
61
|
+
readonly annotations: readonly ConversationAnnotation[];
|
|
62
|
+
readonly message: string;
|
|
63
|
+
}
|
|
64
|
+
/** Parse the durable model form back into the user-facing annotation capsule. */
|
|
65
|
+
export declare function parseAnnotatedConversationPrompt(text: string): AnnotatedConversationPrompt | undefined;
|
|
2
66
|
/** Add the selected quote to the first child prompt. */
|
|
3
67
|
export declare function buildSideChatPrompt(selection: ConversationSelection | undefined, question: string): readonly SideChatPromptPart[];
|
|
4
68
|
//# sourceMappingURL=add-to-conversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-to-conversation.d.ts","sourceRoot":"","sources":["../../../src/client/parent-composer/add-to-conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"add-to-conversation.d.ts","sourceRoot":"","sources":["../../../src/client/parent-composer/add-to-conversation.ts"],"names":[],"mappings":"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"}
|