@qilin-agent/client-ui-chat 3.1.4 → 3.1.6

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.i18n.yaml CHANGED
@@ -12,14 +12,14 @@
12
12
  en: 98d792dbc1b1975e
13
13
  zh: 96acf5c3a5165047
14
14
  /qilin-agent-client-ui-chat/table-of-contents:
15
- en: e7894dec53e4732d
16
- zh: cdf9d812077b1741
15
+ en: 080fd52cf1fab80e
16
+ zh: 58858ae0eb558f89
17
17
  /qilin-agent-client-ui-chat/reference-previews:
18
- en: 66e17df4efe43eb8
19
- zh: 82d91d704004d8f2
20
- /qilin-agent-client-ui-chat/system-prompt-row:
21
- en: 939728341ffbff11
22
- zh: 74ec4ec5ca1fbd60
18
+ en: d930954fb905ac4c
19
+ zh: f7f635ccf869c31c
20
+ /qilin-agent-client-ui-chat/hidden-chat-rows:
21
+ en: 62f8dd2da22d06d8
22
+ zh: fbc0ffdc0167a61f
23
23
  /qilin-agent-client-ui-chat/turn-token-usage:
24
24
  en: a50c6802be7e4669
25
25
  zh: 31233a9bd23fd04b
@@ -27,11 +27,11 @@
27
27
  en: bb3e55382117d78f
28
28
  zh: 75a2b59c1a5cf9ce
29
29
  /qilin-agent-client-ui-chat/turn-process-folding:
30
- en: d9b30a78f214ae90
31
- zh: b33aef585fe6f756
30
+ en: c0ea5b698147669b
31
+ zh: 04814d6fb165d36b
32
32
  /qilin-agent-client-ui-chat/grouped-rendering:
33
- en: 60144aa1c496159f
34
- zh: 67caa0891406578e
33
+ en: c8d6c1610a8c1d60
34
+ zh: e056320040816405
35
35
  /qilin-agent-client-ui-chat/turn-triggers:
36
36
  en: 4a2ec4ccc2f92b7c
37
37
  zh: ac3f1402d0875ec4
package/README.md CHANGED
@@ -15,7 +15,7 @@ File-mention providers receive the viewed Session ID with the closing-turn owner
15
15
  ## Table of Contents
16
16
 
17
17
  - [Reference previews](#reference-previews)
18
- - [System prompt row](#system-prompt-row)
18
+ - [Hidden Chat rows](#system-prompt-row)
19
19
  - [Turn token usage](#turn-token-usage)
20
20
  - [Completed-turn footer](#completed-turn-footer)
21
21
  - [Turn Process Folding](#turn-process-folding)
@@ -32,6 +32,8 @@ File-mention providers receive the viewed Session ID with the closing-turn owner
32
32
  <a id="reference-previews"></a>
33
33
  ## Reference previews
34
34
 
35
+ Sent generic-file attachments retain the draft card's large radius token (`--qilin-radius-lg`).
36
+
35
37
  Chat supplies file and HTTP(S) navigation through one `MarkdownDelegateProvider` around its node list. Assistant Markdown file links open in the right Sidebar after the message settles, including references to unmodified files. Relative paths resolve in the viewed Session's workspace; absolute paths retain the same Session's filesystem access. `#L24` and `#L24-L30` navigate to the first specified line and reuse an existing file tab. Missing files show the preview's error state.
36
38
 
37
39
  Standalone Markdown images show contained previews and open the shared image lightbox; local paths resolve against the viewed workspace after settlement. Image file links keep their sidebar activation and show a thumbnail after hover dwell or keyboard focus. Escape dismisses the thumbnail. Failed images retain a localized status and their description; no duplicate-image filtering is applied.
@@ -39,9 +41,9 @@ Standalone Markdown images show contained previews and open the shared image lig
39
41
  HTTP(S) links in Assistant Markdown open a new right-Sidebar Browser tab on ordinary clicks when that type is registered, or the system browser otherwise; modified clicks retain the native external-link behavior. Sent file references and skills confirmed by the message’s logged invocation also open in the right Sidebar. File paths use the viewed Session; skill names resolve through its current input-trigger source. Both use the prose file-link dotted underline on hover or focus. Sessions, directories, and command labels remain non-navigating references.
40
42
 
41
43
  <a id="system-prompt-row"></a>
42
- ## System prompt row
44
+ ## Hidden Chat rows
43
45
 
44
- Each nonempty appended `system/message` owns a collapsed prompt row, including a complete prompt at the start of a headerless window; the same-step header does not duplicate it. Chat also shows a collapsed `System prompt` row for a non-empty initial request, explicit message-series start, or `system/message` surface node replacement whose text differs, reading the last nonempty surviving system node in surface order at the `request/header`; a non-initial request whose preceding header is outside the loaded history window also shows one. A resume repeats the row even when its system text is unchanged, including after pagination supplies the preceding header and system node; same-series config-only or tool-only changes, tool steps, and retries create no repetition, and a `system/message` event is never rendered as a transcript message. The row appears before that request's user messages, matching the provider envelope, and expands to the exact model-visible text with its original line breaks. A request whose system node is empty or outside the loaded window creates no row until the page holding the node arrives.
46
+ Chat omits `system-prompt`, ordinary Context injection, and `permission` command rows in every work-details mode. A Context carrying tool additions or removals keeps its notice row. The filter changes neither recorded Session events nor Trajectory inspection: those Nodes stay logged and addressable while [`orderedVisibleChatNodes`](src/client/conversation-nodes/chat-snapshot-builder.ts) drops them before ordering, grouping, and rendering. Non-human Turn triggers remain independent, bordered notices with a contrasting neutral background; other command rows remain in Chat.
45
47
 
46
48
  <a id="turn-token-usage"></a>
47
49
  ## Turn token usage
@@ -62,16 +64,18 @@ The completed-turn action footer starts 20px below the preceding prose or extens
62
64
 
63
65
  Each reasoning row starts collapsed, including during streaming and in reasoning-only replies. Clicking the row opens or closes its complete Markdown; incoming answer text, Tool calls, and stream completion preserve that choice. Expanded reasoning uses compact secondary typography: headings add bold weight without changing text size, line height, or color. The collapsed summary stays on one line, follows the latest reasoning line while streaming, and shows the first line after settlement.
64
66
 
65
- Settings → General exposes a persisted, localized `Compact` / `Standard` / `Detailed` / `Full detail` conversation-display preference in the `ui-chat` namespace; `Standard` is the default. `Full detail` leaves process rows visible and renders no Turn-process control. Every folding mode keeps the System prompt independently visible before the opening User throughout the Turn. Context injection, reasoning, Assistant material, Tool rows, and Retry rows remain expanded while a Turn is open. At `turn/end`, its latest Step becomes the final-answer boundary only when it contains non-blank text, an image, or an unknown visible block—and no Tool-call block; preceding Context injection, reasoning, earlier Assistant material, Tool rows, and Retry rows then collapse by default. The control's title reports the Turn's status rather than its counts: `Working for <duration>` while the Turn runs, then `Took <duration>`, `Worked`, `Stopped`, or `Failed`. Turn-wide durable counts for non-subagent Tool calls, reply-bearing Assistant messages before the final answer, and subagent delegation calls stay on the control's data attributes for test assertions. A Turn with neither external process nor inline reasoning has nothing to collapse: the control renders disabled without a collapse action, and its Context and System-prompt rows stay available to find-in-page. A full-width divider below the summary separates it from the answer or expanded process rows. User and steering messages, System prompt, error, max-token, and turn-tail rows stay outside, and a closed Turn with no final answer keeps all process evidence visible. The preference scales the transcript itself: `Compact` drops the settled reasoning preview and the running-activity detail in group titles; every mode keeps settled tool bodies behind the row toggle, opened only by a reader click; `Full detail` alone leaves the completed Turn unfolded. The separate `Performance & usage` setting gates the composer statistics dialogs and the per-turn usage pill; its `Compact` level keeps only the speed and cache-hit readings. A newly available process control is inserted without changing the relative order of existing rows: opening human input precedes the control and process rows from their first projection, while System prompt remains above that input. A loaded Turn end is enough to fold: unloaded older history no longer withholds the control. Each group header names its ranked activity categories and the running activity instead of listing them inside the answer row. Stable Chat Node Seats keep every renderer mounted, hidden members add no flow spacing, and a closed control sits 8px above its answer only when no independent input intervenes. Completion collapse does not depend on tail-follow position, so a reader above the tail may see the transcript reflow. An automatic collapse that would hide keyboard focus keeps the group open and leaves focus in place; a manual close focuses the process control before hiding its members. The session-scoped store records only manually expanded Turn-and-answer-Step generations; a different answer generation starts collapsed.
67
+ Settings → General exposes a persisted, localized `Compact` / `Standard` / `Detailed` / `Full detail` conversation-display preference in the `ui-chat` namespace; `Standard` is the default. `Full detail` leaves process rows visible and renders no Turn-process control. Context injection, reasoning, Assistant material, Tool rows, and Retry rows remain expanded while a Turn is open. At `turn/end`, its latest Step becomes the final-answer boundary only when it contains non-blank text, an image, or an unknown visible block—and no Tool-call block; preceding Context injection, reasoning, earlier Assistant material, Tool rows, and Retry rows then collapse by default. The control's title reports the Turn's status rather than its counts: `Working for <duration>` while the Turn runs, then `Took <duration>`, `Worked`, `Stopped`, or `Failed`. A stopped or failed Turn keeps its process visible instead of folding as a whole: a stop reads `Stopped` without elapsed time, and a Turn closed by restart recovery after the QiLin process exited also renders the localized stopped row without a code chip. Turn-wide durable counts for non-subagent Tool calls, reply-bearing Assistant messages before the final answer, and subagent delegation calls stay on the control's data attributes for test assertions. A Turn with neither external process nor inline reasoning has nothing to collapse: the control renders disabled without a collapse action. A full-width divider below the summary separates it from the answer or expanded process rows. User and steering messages, error, max-token, and turn-tail rows stay outside, and a closed Turn with no final answer keeps all process evidence visible. The preference scales the transcript itself: `Compact` drops the settled reasoning preview and the running-activity detail in group titles; every mode keeps settled tool bodies behind the row toggle, opened only by a reader click; `Full detail` alone leaves the completed Turn unfolded. The separate `Performance & usage` setting gates the composer statistics dialogs and the per-turn usage pill; its `Compact` level keeps only the speed and cache-hit readings. A newly available process control is inserted without changing the relative order of existing rows: opening human input precedes the control and process rows from their first projection. A loaded Turn end is enough to fold: unloaded older history no longer withholds the control. Each group header names its ranked activity categories and the running activity instead of listing them inside the answer row. Stable Chat Node Seats keep every renderer mounted, hidden members add no flow spacing, and a closed control sits 8px above its answer only when no independent input intervenes. Completion collapse does not depend on tail-follow position, so a reader above the tail may see the transcript reflow. An automatic collapse that would hide keyboard focus keeps the group open and leaves focus in place; a manual close focuses the process control before hiding its members. The session-scoped store records only manually expanded Turn-and-answer-Step generations; a different answer generation starts collapsed.
68
+
69
+ The composer statistics are two `conversation.composer.dock` list entries: `activity` (order 0, turn and step counts and output speed, with LLM time, tool time, and TTFT) and `usage` (order 1, token total and cache hit). Another plugin replaces one pill by registering the same id and the same `order`; the dock orders rows by `order`, while a lower `priority` picks the replacement: a dynamic plugin receives one automatically, and a statically composed plugin passes it explicitly. A new id adds a pill. Each pill carries its id in `data-composer-stat`. An open pill dialog closes on Escape or on a pointerdown or click outside it, so activating another pill by pointer or keyboard swaps dialogs instead of stacking them.
66
70
 
67
71
  -----
68
72
 
69
73
  <a id="grouped-rendering"></a>
70
74
  ## Grouped rendering
71
75
 
72
- Consecutive reasoning, Tool, and Assistant rows between independent inputs become activity groups owned by one Chat Group Definition. A group seat subscribes only to its member array, and each member keeps its keyed Node source and renderer. `groupPart` selects the renderer-owned part, with a distinct DOM anchor per part. System-prompt, Context injection, and command rows remain independent rows and end the preceding group: the upstream infrastructure-row filter is not ported, so grouping keeps those kinds outside every process group. Presentation modes change group visibility, never member parents. The [business-rule reference](src/client/conversation-nodes/README.md) owns segmentation, display-mode titles, and activity summaries.
76
+ Consecutive reasoning, Tool, and Assistant rows between independent inputs become activity groups owned by one Chat Group Definition. A group seat subscribes only to its member array, and each member keeps its keyed Node source and renderer. `groupPart` selects the renderer-owned part, with a distinct DOM anchor per part. `isVisibleChatNode` removes system-prompt, ordinary Context injection, and permission-command Nodes from the visible order before ordering and grouping, so they neither render as rows nor split a group; a Context carrying tool additions or removals keeps its notice row. Presentation modes change group visibility, never member parents. The [business-rule reference](src/client/conversation-nodes/README.md) owns segmentation, display-mode titles, and activity summaries.
73
77
 
74
- The Settings row below Work details offers an [independent collapse-timing preference](src/client/conversation-nodes/README.md#collapse-timing).
78
+ The Settings row below Work details offers an [independent collapse-timing preference](src/client/conversation-nodes/README.md#collapse-timing), saved through the same Host profile configuration.
75
79
 
76
80
  The Chat Builder publishes `bottomSource` per Node: true for visible Nodes belonging to the last Turn in the loaded timeline, not just the final row. Advancing the bottom Turn notifies only Nodes in the old and new bottom Turns. Groups read their first member's position. Pending-input deduplication and collapse decisions remain in the Chat view, outside the Builder.
77
81
 
package/README.zh.md CHANGED
@@ -15,7 +15,7 @@ kind: "package-reference"
15
15
  ## 目录
16
16
 
17
17
  - [引用预览](#reference-previews)
18
- - [系统提示词行](#system-prompt-row)
18
+ - [隐藏的 Chat 行](#system-prompt-row)
19
19
  - [轮次 token 用量](#turn-token-usage)
20
20
  - [已完成轮次的页脚](#completed-turn-footer)
21
21
  - [轮次过程折叠](#turn-process-folding)
@@ -32,6 +32,8 @@ kind: "package-reference"
32
32
  <a id="reference-previews"></a>
33
33
  ## 引用预览
34
34
 
35
+ 已发送的普通文件附件保留草稿卡片的大圆角令牌(`--qilin-radius-lg`)。
36
+
35
37
  Chat 在节点列表外通过一个 `MarkdownDelegateProvider` 提供文件及 HTTP(S) 导航。Assistant Markdown 文件链接在消息落定后可于右侧栏打开,包括未修改文件的引用。相对路径基于当前查看的 Session 工作区解析;绝对路径仍使用同一 Session 的文件系统访问。`#L24` 和 `#L24-L30` 定位到指定起始行,并复用现有文件标签。文件缺失时显示预览错误状态。
36
38
 
37
39
  独立的 Markdown 图片以内嵌预览显示,点击打开共享图片浮层;本地路径在消息落定后基于当前查看的工作区解析。图片文件链接保持点击打开侧栏,鼠标停留或键盘聚焦时显示缩略图,Esc 关闭缩略图。图片加载失败时保留本地化状态与图片说明;不执行重复图片过滤。
@@ -39,9 +41,9 @@ Chat 在节点列表外通过一个 `MarkdownDelegateProvider` 提供文件及 H
39
41
  Assistant Markdown 中的 HTTP(S) 链接在普通点击时会在该类型已注册时打开新的右侧 Sidebar Browser tab,否则改用系统浏览器;带修饰键的点击保留原生外部链接行为。已发送的文件引用及消息日志确认调用的 skill 也可在右侧栏打开预览。文件路径使用当前查看的 Session;skill 名称由该 Session 当前的输入触发源解析。两者悬停或聚焦时均使用正文文件链接的虚线下划线。会话、目录和命令标签仍只作为引用展示。
40
42
 
41
43
  <a id="system-prompt-row"></a>
42
- ## 系统提示词行
44
+ ## 隐藏的 Chat 行
43
45
 
44
- 每个非空追加的 `system/message` 都拥有一行折叠提示词,包括无 header 窗口起点的完整提示词;同一步骤的 header 不会重复它。Chat 也会为非空的初始请求、显式消息序列起点、文本发生变化的 `system/message` surface 节点替换(文本读取自 `request/header` 处 surface 顺序中最后一个非空存活系统节点),或前序 header 尚未进入已加载历史窗口的非初始请求显示一行默认折叠的 `系统提示词`。即使系统文本未变,恢复也会重复该行,包括分页补齐前序 header 和系统节点后;同一序列内仅配置或仅工具变化、工具步骤与重试不会重复,且 `system/message` 事件绝不会渲染为对话消息。该行位于请求的用户消息之前,与提供方 envelope 顺序一致;展开后显示模型所见的确切文本,并保留其原始换行。系统节点为空或位于已加载窗口之外的请求不创建该行,直到包含该节点的分页到达。
46
+ Chat 在所有展示档位下都不渲染 `system-prompt`、普通 Context 注入及 `permission` 命令行。带有工具增删的 Context 仍保留其通知行。该过滤不改变已记录的 Session 事件,也不影响 Trajectory 检视:这些 Node 仍被记录并可寻址,只是由 [`orderedVisibleChatNodes`](src/client/conversation-nodes/chat-snapshot-builder.ts) 在排序、分组与渲染之前移除。非人工的轮次触发仍作为独立、带边框的提示行展示,并使用对比中性的背景;其他命令行仍留在 Chat 中。
45
47
 
46
48
  -----
47
49
 
@@ -64,16 +66,18 @@ Assistant 回复结算后,已完成轮次的页脚只保留用量入口:轮
64
66
 
65
67
  每个思考行初始都折叠,包括流式输出期间和仅含思考的回复。点击该行可展开或收起完整 Markdown;后续回答文本、工具调用和流结束都保留用户的选择。展开的思考采用紧凑的次级排版:标题只加粗,不改变字号、行高或颜色。折叠摘要保持单行,在流式输出期间跟随最新思考行,结算后显示第一行。
66
68
 
67
- 「设置 → 通用设置」提供持久化到 `ui-chat` 命名空间的「简洁」/「标准」/「详细」/「完全展开」对话显示偏好,默认使用「标准」。「完全展开」保持所有过程行可见且不渲染轮次过程控件。每个折叠档位下,系统提示词在整个轮次中始终独立显示于开场 User 上方。轮次打开期间,上下文注入、推理、Assistant 内容、工具行与重试行始终展开。到 `turn/end` 时,最后一个步骤只有在包含非空文本、图片或未知可见块且不含工具调用块时才成为最终答案边界;边界之前的上下文注入、推理、较早 Assistant 内容、工具行与重试行随后默认收起。控件标题展示轮次状态而非计数:运行中为「QiLin...,用时{duration}」,结算后为「用时 {duration}」「已完成工作」「已停止」或「处理失败」;覆盖整个轮次的非 subagent 工具调用数、最终答案之前带回复内容的 Assistant 消息数和 subagent 委派数只保留在控件的数据属性上供测试断言。轮次既无外部过程也无内联推理时没有可折叠内容:控件渲染为禁用、不提供折叠动作,其上下文注入与系统提示词行保留给「页内查找」而非点击展开。摘要下方的通栏分隔线将其与正文或展开后的过程行隔开。用户与 steering 消息、系统提示词、错误、最大 token 与 turn-tail 行留在过程组外;关闭时没有最终答案的轮次保留全部过程证据。该偏好会改变会话本体的渲染:「简洁」档隐藏已结算思考预览与分组标题中的运行活动细节;各档都把已结算的工具明细保留在行展开开关之后、只按读者点击展开;仅「完全展开」档另外不折叠已完成的轮次。「性能与用量」设置单独控制编写区统计对话框与轮次用量入口:其「简洁」档只保留速度与缓存命中读数。新的过程控件插入时不会改变既有行的相对顺序:开场人工输入从首次投影起便位于控件和过程行之前,系统提示词则始终位于该输入上方。只要已加载轮次结束即可折叠:更早的未加载历史不再阻止过程控件出现。每个分组标题列出其排序后的活动类别与运行中的活动,而不再由正文行承担该信息。稳定 Chat Node Seat 会让每个 renderer 保持挂载,隐藏成员不产生消息流间距;只有中间没有独立输入时,收起控件才与正文相隔 8px。完成后的收起不依赖是否跟随尾部,因此正在上方阅读的用户可能看到 transcript 重排。若自动收起会隐藏当前键盘焦点,则过程组保持展开且焦点留在原处;手动收起会先把焦点移到过程控件,再隐藏成员。会话作用域存储只记录用户手动展开的「轮次 + 正文步骤」generation;不同正文 generation 默认收起。
69
+ 「设置 → 通用设置」提供持久化到 `ui-chat` 命名空间的「简洁」/「标准」/「详细」/「完全展开」对话显示偏好,默认使用「标准」。「完全展开」保持所有过程行可见且不渲染轮次过程控件。轮次打开期间,上下文注入、推理、Assistant 内容、工具行与重试行始终展开。到 `turn/end` 时,最后一个步骤只有在包含非空文本、图片或未知可见块且不含工具调用块时才成为最终答案边界;边界之前的上下文注入、推理、较早 Assistant 内容、工具行与重试行随后默认收起。控件标题展示轮次状态而非计数:运行中为「QiLin...,用时{duration}」,结算后为「用时 {duration}」「已完成工作」「已停止」或「处理失败」。停止或失败的轮次保持过程可见、不整轮收起:停止不显示耗时,重启恢复关闭的中断轮次另渲染一条本地化的停止行,说明 QiLin 进程已退出,且不带错误码;覆盖整个轮次的非 subagent 工具调用数、最终答案之前带回复内容的 Assistant 消息数和 subagent 委派数只保留在控件的数据属性上供测试断言。轮次既无外部过程也无内联推理时没有可折叠内容:控件渲染为禁用、不提供折叠动作。摘要下方的通栏分隔线将其与正文或展开后的过程行隔开。用户与 steering 消息、错误、最大 token 与 turn-tail 行留在过程组外;关闭时没有最终答案的轮次保留全部过程证据。该偏好会改变会话本体的渲染:「简洁」档隐藏已结算思考预览与分组标题中的运行活动细节;各档都把已结算的工具明细保留在行展开开关之后、只按读者点击展开;仅「完全展开」档另外不折叠已完成的轮次。「性能与用量」设置单独控制编写区统计对话框与轮次用量入口:其「简洁」档只保留速度与缓存命中读数。新的过程控件插入时不会改变既有行的相对顺序:开场人工输入从首次投影起便位于控件和过程行之前。只要已加载轮次结束即可折叠:更早的未加载历史不再阻止过程控件出现。每个分组标题列出其排序后的活动类别与运行中的活动,而不再由正文行承担该信息。稳定 Chat Node Seat 会让每个 renderer 保持挂载,隐藏成员不产生消息流间距;只有中间没有独立输入时,收起控件才与正文相隔 8px。完成后的收起不依赖是否跟随尾部,因此正在上方阅读的用户可能看到 transcript 重排。若自动收起会隐藏当前键盘焦点,则过程组保持展开且焦点留在原处;手动收起会先把焦点移到过程控件,再隐藏成员。会话作用域存储只记录用户手动展开的「轮次 + 正文步骤」generation;不同正文 generation 默认收起。
70
+
71
+ 输入框统计信息由两个 `conversation.composer.dock` 列表条目组成:`activity`(order 0,轮次数、步骤数与输出速度,以及 LLM 耗时、工具耗时与 TTFT)和 `usage`(order 1,token 总量与缓存命中)。其他插件以相同的 id 和相同的 `order` 注册即可替换某个胶囊;dock 按 `order` 排列各行,更低的 `priority` 决定由替换者渲染:动态插件会自动获得,静态组合的插件需显式传入。以新 id 注册则新增胶囊。每个胶囊在 `data-composer-stat` 中携带其 id。按下 Escape,或在已打开的对话框之外发生 pointerdown 或点击时,该对话框会关闭,因此用指针或键盘激活另一个胶囊会切换对话框,而不会叠加两个。
68
72
 
69
73
  -----
70
74
 
71
75
  <a id="grouped-rendering"></a>
72
76
  ## 分组渲染
73
77
 
74
- 独立输入之间的连续推理、工具与 Assistant 行会组成活动分组,由 Chat 的一个分组定义拥有。分组座位只订阅自己的成员数组,每个成员继续使用原有的键控 Node 来源与 renderer。`groupPart` 选择 renderer 自有的部分,每个部分拥有独立的 DOM 锚点。系统提示词、上下文注入与命令行仍是独立行,并会结束前面的分组:上游的「基础设施行过滤」未移植,因此分组会把这些类型留在所有过程分组之外。展示档位只改变分组的可见性,不改变成员的父级。[业务规则参考](src/client/conversation-nodes/README.zh.md)负责分段、展示档位标题与活动摘要的完整定义。
78
+ 独立输入之间的连续推理、工具与 Assistant 行会组成活动分组,由 Chat 的一个分组定义拥有。分组座位只订阅自己的成员数组,每个成员继续使用原有的键控 Node 来源与 renderer。`groupPart` 选择 renderer 自有的部分,每个部分拥有独立的 DOM 锚点。`isVisibleChatNode` 会在排序与分组前把系统提示词、普通 Context 注入及 `permission` 命令 Node 从可见顺序中移除,因此它们既不会渲染为行,也不会拆分组;带有工具增删的 Context 仍保留其通知行。展示档位只改变分组的可见性,不改变成员的父级。[业务规则参考](src/client/conversation-nodes/README.zh.md)负责分段、展示档位标题与活动摘要的完整定义。
75
79
 
76
- 工作步骤展示下方的设置行提供[独立的收起时机设置](src/client/conversation-nodes/README.zh.md#collapse-timing)。
80
+ 工作步骤展示下方的设置行提供[独立的收起时机设置](src/client/conversation-nodes/README.zh.md#collapse-timing),通过相同的 Host profile 配置保存。
77
81
 
78
82
  Chat Builder 按节点发布 `bottomSource`:节点可见且属于已加载时间线的最后一轮时为 true,而不只是列表最后一行。底部轮次推进时,只有旧、新底部轮次的节点收到位置变化通知。Group 读取其首个成员的位置。待发送消息去重与收起判断仍由 Chat 视图处理,不进入 Builder。
79
83