@deepseek-ai/dsh-client-ui-subagent 0.1.7-alpha.2 → 0.1.7-rc.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.i18n.yaml +63 -5
- package/README.md +3 -1
- package/README.zh.md +3 -1
- package/lib/client.js +67 -48
- package/lib/types/client/SubagentHeaderLineage.d.ts +1 -1
- package/lib/types/client/locales.d.ts +14 -13
- package/package.json +18 -18
package/README.i18n.yaml
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
|
-
# Bilingual-pair consistency record (docs/i18n/README.md):
|
|
2
|
-
#
|
|
3
|
-
#
|
|
1
|
+
# Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
|
|
2
|
+
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
|
3
|
+
# After editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write packages/client/ui-subagent/README.md
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/:
|
|
6
|
+
en: ff1b1fbd0d7f629b
|
|
7
|
+
zh: c68a59640e73c0ce
|
|
8
|
+
/deepseek-ai-dsh-client-ui-subagent:
|
|
9
|
+
en: 930db612ece65ad4
|
|
10
|
+
zh: ad7e9d9afb4545ac
|
|
11
|
+
/deepseek-ai-dsh-client-ui-subagent/summary:
|
|
12
|
+
en: 50f267d55833a683
|
|
13
|
+
zh: 89d6b827576baa8b
|
|
14
|
+
/deepseek-ai-dsh-client-ui-subagent/table-of-contents:
|
|
15
|
+
en: d152484eb41ac6b4
|
|
16
|
+
zh: 09388d293f9be9cb
|
|
17
|
+
/deepseek-ai-dsh-client-ui-subagent/use-this-package:
|
|
18
|
+
en: 06f6bac3153361f5
|
|
19
|
+
zh: e8b23941cbd16036
|
|
20
|
+
/deepseek-ai-dsh-client-ui-subagent/use-this-package/browsing-the-tree:
|
|
21
|
+
en: 3508631091820123
|
|
22
|
+
zh: ec7da9e5bedb22ba
|
|
23
|
+
/deepseek-ai-dsh-client-ui-subagent/use-this-package/continuing-a-conversation:
|
|
24
|
+
en: 876e7152c8b9c4a6
|
|
25
|
+
zh: f89f5e2a812e8451
|
|
26
|
+
/deepseek-ai-dsh-client-ui-subagent/use-this-package/the-reference-source:
|
|
27
|
+
en: 6a5f91b7dfcefafe
|
|
28
|
+
zh: 2d11441952cfea53
|
|
29
|
+
/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation:
|
|
30
|
+
en: 8dc3c556cd57bdd8
|
|
31
|
+
zh: f5c86a690bba7f7d
|
|
32
|
+
/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation/catalog-derivation:
|
|
33
|
+
en: 5e1c83ef8eb26c52
|
|
34
|
+
zh: f5be8f1e78c74859
|
|
35
|
+
/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation/duration-completion-and-tokens:
|
|
36
|
+
en: b817e9907392f59c
|
|
37
|
+
zh: e42feb97d572a989
|
|
38
|
+
/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation/composer-election:
|
|
39
|
+
en: 1c15af4dd7c0b791
|
|
40
|
+
zh: f789737ab4dd8cb2
|
|
41
|
+
/deepseek-ai-dsh-client-ui-subagent/further-exploration:
|
|
42
|
+
en: 3b9b3cb4ad8f65f6
|
|
43
|
+
zh: 63a2c10a4613cca1
|
|
44
|
+
/deepseek-ai-dsh-client-ui-subagent/model-experience:
|
|
45
|
+
en: 215e7ba838619b7b
|
|
46
|
+
zh: a311da3843709f90
|
|
47
|
+
/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt:
|
|
48
|
+
en: 7207881f1c032278
|
|
49
|
+
zh: 911d6e8b319da21a
|
|
50
|
+
/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt/what-the-model-sees:
|
|
51
|
+
en: 5688696ee061a0e1
|
|
52
|
+
zh: 7199ef8cb8697960
|
|
53
|
+
/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt/token-effect:
|
|
54
|
+
en: bf3c483598710d54
|
|
55
|
+
zh: 32742fbb880db1b2
|
|
56
|
+
/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt/kv-cache-effect:
|
|
57
|
+
en: de2762a99572475f
|
|
58
|
+
zh: 9b41107ad14ebf8a
|
|
59
|
+
/deepseek-ai-dsh-client-ui-subagent/known-limitations-and-deferred-work:
|
|
60
|
+
en: ee310ff3cd487639
|
|
61
|
+
zh: 23793aa1c28a23af
|
|
62
|
+
/deepseek-ai-dsh-client-ui-subagent/known-limitations-and-deferred-work/dev-note:
|
|
63
|
+
en: 3dd148cecbb1a4df
|
|
64
|
+
zh: 626cc5ed9f65c72a
|
package/README.md
CHANGED
|
@@ -25,12 +25,14 @@ Use this package to browse every subagent conversation beneath a parent session,
|
|
|
25
25
|
<a id="use-this-package"></a>
|
|
26
26
|
## Use this package
|
|
27
27
|
|
|
28
|
-
The session header keeps the current session title as the lineage breadcrumb; when the session's direct catalog has entries or a read has failed, the descendant-count trigger renders
|
|
28
|
+
The session header keeps the current session title as the lineage breadcrumb; when the session's direct catalog has entries or a read has failed, the descendant-count trigger renders at the start of the header actions band, with no breadcrumb separator. An absent catalog, an empty loading catalog, or a successfully loaded empty catalog hides the count trigger. The trigger opens that direct catalog, reports its total and running counts, and loads nested catalogs only when their rows expand. Select any depth to open that child's conversation with its exact `{parentSessionId, childSessionId, mode}` address, or use the row's trailing arrow to open the same address in the right Sidebar, preferring a separate pane when room permits.
|
|
29
29
|
|
|
30
30
|
This package registers the `dsh-resource://subagentchat/session/<child>?parent=<parent>&mode=<mode>` resource and builtin Sidebar tab type. The resource retains the child `SessionReference` directly from its address without refreshing the parent catalog, and releases the reference when the tab record closes. The tab renders the shared `conversation.content` Factory through `sidebar.chat.conversation`, fixes the local View to Chat, and omits the main Conversation header and width controls.
|
|
31
31
|
|
|
32
32
|
### Browsing the tree
|
|
33
33
|
|
|
34
|
+
Hovering a trigger opens its catalog after 150ms; leaving both trigger and catalog closes it after 120ms. Clicking the descendant-count trigger pins its catalog until outside click or Escape from the trigger or tree. Breadcrumb-title clicks navigate to the corresponding conversation.
|
|
35
|
+
|
|
34
36
|
Rows display mode plus activity and an optional log-backed title; running uses the shared ongoing loader, an inactive child whose latest closed turn completed normally uses the shared success dot, and other inactive children use the shared idle dot. Every row reserves the same 14px status column, centering smaller dots so titles align with the loader state. The compact header trigger vertically centers its activity glyph and count with a 4px gap. The trailing column stacks total durable provider usage above active-turn duration. Keyboard navigation works with ArrowRight/ArrowLeft to expand and collapse branches and ArrowUp/ArrowDown, Home, End, and Escape to navigate or close the tree. An unlabeled one-shot row falls back to its session id. A row is a known leaf only after its own catalog loads empty.
|
|
35
37
|
|
|
36
38
|
### Continuing a conversation
|
package/README.zh.md
CHANGED
|
@@ -25,12 +25,14 @@ kind: "package-reference"
|
|
|
25
25
|
<a id="use-this-package"></a>
|
|
26
26
|
## 使用本包
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
会话页头把当前会话标题作为谱系面包屑;当会话的直接目录有子项或读取失败时,后代数量触发器渲染在页头操作区的最前方,不带任何面包屑分隔符。目录缺席、空目录加载中或成功加载为空时,均隐藏数量触发器。触发器打开该直接目录,报告总数与运行数,并且只在行展开时加载嵌套目录。选择任意深度,即可用该子会话的确切 `{parentSessionId, childSessionId, mode}` 地址打开其对话;也可以使用行尾箭头在右侧 Sidebar 打开同一地址,并在空间允许时优先使用独立分栏。
|
|
29
29
|
|
|
30
30
|
本包注册 `dsh-resource://subagentchat/session/<child>?parent=<parent>&mode=<mode>` 资源与 builtin Sidebar tab 类型。资源直接根据地址保留 child 的 `SessionReference`,不刷新 parent 目录,并在 tab 记录关闭时释放 reference。tab 通过 `sidebar.chat.conversation` 渲染共享 `conversation.content` Factory,把局部 View 固定为 Chat,并省略主 Conversation 的 Header 与宽度控制。
|
|
31
31
|
|
|
32
32
|
### 浏览目录
|
|
33
33
|
|
|
34
|
+
悬停触发器 150ms 后打开目录;指针离开触发器和目录后,经过 120ms 关闭。点击后代数量触发器会固定目录,直到点击外部,或在触发器或树内按 Escape 关闭。点击面包屑标题会导航至对应会话。
|
|
35
|
+
|
|
34
36
|
行显示 mode、活动状态与由日志支撑的可选 title;running 使用共享 ongoing loading,最近一个已结束轮次正常完成的 inactive child 使用共享 success 绿点,其他 inactive child 使用共享 idle 灰点。每行都为状态图标预留相同的 14px 列宽,并将较小的圆点居中,使 title 与 loading 状态对齐。紧凑的页头触发器会垂直居中活动图标与数量,并保留 4px 水平间距。尾随列在上行显示提供方的持久化 token 用量总计,在下行显示活跃轮次耗时。键盘导航:ArrowRight/ArrowLeft 展开和折叠分支;ArrowUp/ArrowDown、Home、End 与 Escape 用于导航或关闭树。没有 label 的 one-shot 行回退到其会话 id。只有一行自身的目录加载为空后,它才是已知叶子。
|
|
35
37
|
|
|
36
38
|
### 续接对话
|
package/lib/client.js
CHANGED
|
@@ -9,7 +9,7 @@ window.__ModuleLoader__.load({
|
|
|
9
9
|
let react_dom = require("react-dom");
|
|
10
10
|
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
11
11
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-subagent/src/client/SubagentHeaderLineage.module.css.mjs
|
|
12
|
-
const css$2 = ".ZKlsPq_root{align-items:center;gap:10px;min-width:0;display:inline-flex;position:relative}.ZKlsPq_switcherRoot{min-width:0;margin-left:6px}.ZKlsPq_trigger,.ZKlsPq_switcherTrigger{min-height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;
|
|
12
|
+
const css$2 = ".ZKlsPq_root{align-items:center;gap:10px;min-width:0;display:inline-flex;position:relative}.ZKlsPq_switcherRoot{min-width:0;margin-left:6px}.ZKlsPq_trigger,.ZKlsPq_switcherTrigger{border-radius:var(--dsw-radius-sm);min-height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;align-items:center;padding:3px 2px;font-size:12px;line-height:18px;display:inline-flex}.ZKlsPq_trigger{gap:4px}.ZKlsPq_switcherTrigger{min-width:0;max-width:244px;color:var(--dsw-alias-label-primary);gap:4px;font-weight:500}.ZKlsPq_ancestorSwitcherTrigger{color:var(--dsw-alias-label-tertiary);font-weight:400}.ZKlsPq_switcherTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.ZKlsPq_switcherTrigger svg{flex:none}.ZKlsPq_activitySlot{flex:none;justify-content:center;align-items:center;width:14px;height:14px;display:inline-flex}.ZKlsPq_trigger:hover,.ZKlsPq_trigger:focus-visible,.ZKlsPq_switcherTrigger:hover,.ZKlsPq_switcherTrigger:focus-visible{color:var(--dsw-alias-label-primary)}.ZKlsPq_ancestorSwitcherTrigger:hover,.ZKlsPq_ancestorSwitcherTrigger:focus-visible{color:var(--dsw-alias-label-tertiary)}.ZKlsPq_trigger svg,.ZKlsPq_switcherTrigger svg{transition:transform .12s}.ZKlsPq_triggerOpen{transform:rotate(180deg)}.ZKlsPq_menu{z-index:100;box-sizing:border-box;border-radius:var(--dsw-radius-lg);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);width:336px;max-width:min(400px,100vw - 32px);max-height:min(560px,100vh - 140px);box-shadow:var(--dsw-elevation-prominent);flex-direction:column;padding:3px;display:flex;position:fixed;overflow:hidden}.ZKlsPq_menu:before{content:\"\";z-index:-1;border-radius:inherit;background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);position:absolute;inset:0}.ZKlsPq_menuBody{flex-direction:column;flex:auto;min-height:0;display:flex;overflow:auto}.ZKlsPq_node{min-width:0;position:relative}.ZKlsPq_menuBody>.ZKlsPq_node{margin-left:-2px}.ZKlsPq_row{box-sizing:border-box;border-radius:var(--dsw-radius-lg);width:100%;min-height:44px;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:0;outline:none;align-items:flex-start;gap:6px;padding:6px 7px 6px 9px;font-size:12px;line-height:17px;display:flex;position:relative}.ZKlsPq_row:hover>.ZKlsPq_clickarea,.ZKlsPq_row:focus-visible>.ZKlsPq_clickarea{background:var(--dsw-alias-interactive-bg-hover)}.ZKlsPq_clickarea{box-sizing:border-box;border-radius:var(--dsw-radius-lg);flex:1;align-self:stretch;align-items:flex-start;gap:6px;min-width:0;margin:-6px -7px;padding:6px 7px;display:flex}.ZKlsPq_rowActivitySlot{flex:none;justify-content:center;align-items:center;width:14px;height:17px;display:inline-flex}.ZKlsPq_disclosure,.ZKlsPq_disclosureSpace{flex:none;width:14px;height:17px}.ZKlsPq_disclosure{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;transition:transform .12s;display:inline-flex}.ZKlsPq_disclosure svg{width:12px;height:12px}.ZKlsPq_disclosure:hover{color:var(--dsw-alias-label-primary)}.ZKlsPq_disclosureOpen{transform:rotate(90deg)}.ZKlsPq_content{flex-direction:column;flex:1;min-width:0;display:flex}.ZKlsPq_label,.ZKlsPq_summary{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ZKlsPq_label{color:inherit;font-weight:400}.ZKlsPq_currentLabel{font-weight:600}.ZKlsPq_summary,.ZKlsPq_metrics{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.ZKlsPq_metrics{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;flex:none;grid-template-rows:17px 15px;display:grid}.ZKlsPq_metricToken{grid-row:1;line-height:17px}.ZKlsPq_metricDuration{grid-row:2}.ZKlsPq_sidebarButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;margin:4px 0;padding:6px;display:inline-flex}.ZKlsPq_sidebarButton:hover,.ZKlsPq_sidebarButton:focus-visible{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.ZKlsPq_children{margin-left:16px;padding-left:3px;position:relative}.ZKlsPq_children:before,.ZKlsPq_children>.ZKlsPq_node:before{content:\"\";border-left:.5px solid var(--dsw-alias-border-l2);position:absolute;left:0}.ZKlsPq_children:before{height:23px;top:-23px}.ZKlsPq_children[aria-busy=true]:before{content:none}.ZKlsPq_children>.ZKlsPq_node:before{top:0;bottom:0;left:-3px}.ZKlsPq_children>.ZKlsPq_node:last-child:before{height:15px;bottom:auto}.ZKlsPq_children>.ZKlsPq_node>.ZKlsPq_row:before{content:\"\";border-top:.5px solid var(--dsw-alias-border-l2);width:12px;position:absolute;top:14px;left:-3px}.ZKlsPq_notice,.ZKlsPq_error{color:var(--dsw-alias-label-tertiary);padding:8px 10px;font-size:11px;line-height:16px}.ZKlsPq_error{color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:10px;display:flex}.ZKlsPq_refresh{border-radius:var(--dsw-radius-sm);color:inherit;cursor:pointer;background:0 0;border:0;flex:none;align-items:center;gap:3px;padding:3px 5px;display:inline-flex}.ZKlsPq_refresh svg{width:12px;height:12px}.ZKlsPq_refresh:hover{background:var(--dsw-alias-interactive-bg-hover)}";
|
|
13
13
|
const tagId$2 = "@deepseek-ai/dsh-client-ui-subagent/SubagentHeaderLineage.module.css";
|
|
14
14
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
|
|
15
15
|
const tag = document.createElement("style");
|
|
@@ -31,6 +31,7 @@ window.__ModuleLoader__.load({
|
|
|
31
31
|
"error": "ZKlsPq_error",
|
|
32
32
|
"label": "ZKlsPq_label",
|
|
33
33
|
"menu": "ZKlsPq_menu",
|
|
34
|
+
"menuBody": "ZKlsPq_menuBody",
|
|
34
35
|
"metricDuration": "ZKlsPq_metricDuration",
|
|
35
36
|
"metricToken": "ZKlsPq_metricToken",
|
|
36
37
|
"metrics": "ZKlsPq_metrics",
|
|
@@ -296,16 +297,20 @@ window.__ModuleLoader__.load({
|
|
|
296
297
|
children: durationMetric.compact
|
|
297
298
|
})]
|
|
298
299
|
}),
|
|
299
|
-
!isCurrent && (0, react_jsx_runtime.jsx)(
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
300
|
+
!isCurrent && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
301
|
+
label: t("open.sidebar"),
|
|
302
|
+
side: "bottom",
|
|
303
|
+
align: "end",
|
|
304
|
+
children: (0, react_jsx_runtime.jsx)("button", {
|
|
305
|
+
type: "button",
|
|
306
|
+
className: SubagentHeaderLineage_module_css_default.sidebarButton,
|
|
307
|
+
"aria-label": t("open.sidebar.aria", { label }),
|
|
308
|
+
onClick: openAside,
|
|
309
|
+
onKeyDown: (event) => {
|
|
310
|
+
event.stopPropagation();
|
|
311
|
+
},
|
|
312
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutlineRegular, {})
|
|
313
|
+
})
|
|
309
314
|
})
|
|
310
315
|
]
|
|
311
316
|
})]
|
|
@@ -370,6 +375,7 @@ window.__ModuleLoader__.load({
|
|
|
370
375
|
const menuRef = (0, react.useRef)(null);
|
|
371
376
|
const hoverOpenTimer = (0, react.useRef)(void 0);
|
|
372
377
|
const hoverCloseTimer = (0, react.useRef)(void 0);
|
|
378
|
+
const pinnedRef = (0, react.useRef)(false);
|
|
373
379
|
const currentEntry = currentSessionId === void 0 ? void 0 : catalog?.entries.find((entry) => entry.id === currentSessionId);
|
|
374
380
|
const switcherDisplayTitle = currentEntry !== void 0 ? currentEntry.label ?? currentEntry.id : displayTitle;
|
|
375
381
|
const directChildren = catalog?.entries ?? [];
|
|
@@ -402,6 +408,7 @@ window.__ModuleLoader__.load({
|
|
|
402
408
|
setOpen(true);
|
|
403
409
|
setMenuPosition(catalogMenuPosition(trigger));
|
|
404
410
|
} else {
|
|
411
|
+
pinnedRef.current = false;
|
|
405
412
|
setOpen(false);
|
|
406
413
|
setMenuPosition(void 0);
|
|
407
414
|
setExpanded(/* @__PURE__ */ new Set());
|
|
@@ -422,6 +429,7 @@ window.__ModuleLoader__.load({
|
|
|
422
429
|
const scheduleHoverClose = () => {
|
|
423
430
|
cancelHoverOpen();
|
|
424
431
|
cancelHoverClose();
|
|
432
|
+
if (pinnedRef.current) return;
|
|
425
433
|
hoverCloseTimer.current = setTimeout(() => {
|
|
426
434
|
hoverCloseTimer.current = void 0;
|
|
427
435
|
changeOpen(false);
|
|
@@ -481,6 +489,7 @@ window.__ModuleLoader__.load({
|
|
|
481
489
|
cancelHoverOpen();
|
|
482
490
|
cancelHoverClose();
|
|
483
491
|
if (!open) return;
|
|
492
|
+
pinnedRef.current = false;
|
|
484
493
|
setOpen(false);
|
|
485
494
|
setExpanded(/* @__PURE__ */ new Set());
|
|
486
495
|
}, [visible, open]);
|
|
@@ -514,16 +523,21 @@ window.__ModuleLoader__.load({
|
|
|
514
523
|
className: `${SubagentHeaderLineage_module_css_default.root} ${variant === "switcher" ? SubagentHeaderLineage_module_css_default.switcherRoot : ""}`,
|
|
515
524
|
ref: rootRef,
|
|
516
525
|
onKeyDown: navigate,
|
|
517
|
-
onMouseEnter: scheduleHoverOpen,
|
|
518
526
|
onMouseLeave: scheduleHoverClose,
|
|
519
527
|
children: [(0, react_jsx_runtime.jsxs)("button", {
|
|
520
528
|
ref: triggerRef,
|
|
529
|
+
onMouseEnter: scheduleHoverOpen,
|
|
521
530
|
type: "button",
|
|
522
531
|
className: variant === "switcher" ? `${SubagentHeaderLineage_module_css_default.switcherTrigger} ${ancestorSwitcher ? SubagentHeaderLineage_module_css_default.ancestorSwitcherTrigger : ""}` : SubagentHeaderLineage_module_css_default.trigger,
|
|
523
532
|
"aria-haspopup": "tree",
|
|
524
533
|
"aria-expanded": open,
|
|
525
534
|
"aria-label": variant === "switcher" ? t("switcher.aria", { title: switcherDisplayTitle }) : t(runningCount > 0 ? runningCountKey : totalCountKey, { count: runningCount > 0 ? runningCount : directCount }),
|
|
526
|
-
onClick: openTitle === void 0 ?
|
|
535
|
+
onClick: openTitle === void 0 ? () => {
|
|
536
|
+
cancelHoverOpen();
|
|
537
|
+
cancelHoverClose();
|
|
538
|
+
pinnedRef.current = true;
|
|
539
|
+
if (!open) changeOpen(true);
|
|
540
|
+
} : () => {
|
|
527
541
|
cancelHoverOpen();
|
|
528
542
|
if (open) changeOpen(false);
|
|
529
543
|
openTitle();
|
|
@@ -550,33 +564,36 @@ window.__ModuleLoader__.load({
|
|
|
550
564
|
ref: menuRef,
|
|
551
565
|
className: SubagentHeaderLineage_module_css_default.menu,
|
|
552
566
|
style: menuPosition,
|
|
553
|
-
role: "tree",
|
|
554
|
-
"aria-label": t("tree.aria"),
|
|
555
567
|
onMouseEnter: cancelHoverClose,
|
|
556
568
|
onMouseLeave: scheduleHoverClose,
|
|
557
|
-
children: (0, react_jsx_runtime.jsx)(
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
569
|
+
children: (0, react_jsx_runtime.jsx)("div", {
|
|
570
|
+
className: SubagentHeaderLineage_module_css_default.menuBody,
|
|
571
|
+
role: "tree",
|
|
572
|
+
"aria-label": t("tree.aria"),
|
|
573
|
+
children: (0, react_jsx_runtime.jsx)(CatalogRows, {
|
|
574
|
+
parentSessionId: rootSessionId,
|
|
575
|
+
currentSessionId,
|
|
576
|
+
catalog: presentedCatalog,
|
|
577
|
+
catalogs,
|
|
578
|
+
summaries,
|
|
579
|
+
expanded,
|
|
580
|
+
level: 1,
|
|
581
|
+
openChild,
|
|
582
|
+
openChildAside,
|
|
583
|
+
refreshProjection,
|
|
584
|
+
toggleBranch,
|
|
585
|
+
closeCatalog: () => {
|
|
586
|
+
changeOpen(false);
|
|
587
|
+
},
|
|
588
|
+
t
|
|
589
|
+
})
|
|
573
590
|
})
|
|
574
591
|
}), document.body)]
|
|
575
592
|
});
|
|
576
593
|
}
|
|
577
594
|
/**
|
|
578
595
|
* Session-header catalog action for root sessions: the descendant count and
|
|
579
|
-
* its dropdown
|
|
596
|
+
* its dropdown at the start of the header actions band. Child sessions render nothing
|
|
580
597
|
* here — their breadcrumb switcher in the lineage slot owns the same
|
|
581
598
|
* navigation.
|
|
582
599
|
* @param props - Session standard props plus the catalog actions and translator.
|
|
@@ -630,7 +647,7 @@ window.__ModuleLoader__.load({
|
|
|
630
647
|
}
|
|
631
648
|
//#endregion
|
|
632
649
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-subagent/src/client/SubagentReadOnlyComposer.module.css.mjs
|
|
633
|
-
const css$1 = ".XJ7liG_frame{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);min-height:54px;color:var(--dsw-alias-label-tertiary);
|
|
650
|
+
const css$1 = ".XJ7liG_frame{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-lg);background:var(--dsw-alias-bg-layer-1);min-height:54px;color:var(--dsw-alias-label-tertiary);justify-content:center;align-items:center;gap:8px;margin:0 24px 20px;padding:10px 16px;font-size:13px;line-height:20px;display:flex}.XJ7liG_frame strong{color:var(--dsw-alias-label-primary);font-weight:510}";
|
|
634
651
|
const tagId$1 = "@deepseek-ai/dsh-client-ui-subagent/SubagentReadOnlyComposer.module.css";
|
|
635
652
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
636
653
|
const tag = document.createElement("style");
|
|
@@ -830,8 +847,8 @@ window.__ModuleLoader__.load({
|
|
|
830
847
|
"tokens.thousand": "{value}K",
|
|
831
848
|
"tokens.million": "{value}M",
|
|
832
849
|
"tokens.total": "{value} tok",
|
|
833
|
-
"loading.label": "
|
|
834
|
-
"load.error": "
|
|
850
|
+
"loading.label": "正在加载子智能体…",
|
|
851
|
+
"load.error": "无法加载子智能体",
|
|
835
852
|
"retry": "重试",
|
|
836
853
|
"mode.oneShot": "一次性",
|
|
837
854
|
"mode.continuable": "可继续",
|
|
@@ -840,18 +857,19 @@ window.__ModuleLoader__.load({
|
|
|
840
857
|
"activity.running": "正在运行",
|
|
841
858
|
"activity.completed": "已完成",
|
|
842
859
|
"activity.inactive": "当前未运行",
|
|
843
|
-
"branch.collapse": "收起 {label}
|
|
844
|
-
"branch.expand": "展开 {label}
|
|
845
|
-
"count.total.one": "{count}
|
|
846
|
-
"count.total.other": "{count}
|
|
847
|
-
"count.running.one": "{count}
|
|
848
|
-
"count.running.other": "{count}
|
|
849
|
-
"switcher.aria": "
|
|
850
|
-
"tree.aria": "
|
|
851
|
-
"open.sidebar": "在侧边栏打开
|
|
860
|
+
"branch.collapse": "收起 {label} 的下级子智能体",
|
|
861
|
+
"branch.expand": "展开 {label} 的下级子智能体",
|
|
862
|
+
"count.total.one": "{count} 个子智能体",
|
|
863
|
+
"count.total.other": "{count} 个子智能体",
|
|
864
|
+
"count.running.one": "{count} 个子智能体,正在运行",
|
|
865
|
+
"count.running.other": "{count} 个子智能体,正在运行",
|
|
866
|
+
"switcher.aria": "切换子智能体:{title}",
|
|
867
|
+
"tree.aria": "子智能体会话",
|
|
868
|
+
"open.sidebar": "在侧边栏打开",
|
|
869
|
+
"open.sidebar.aria": "在侧边栏打开 {label}",
|
|
852
870
|
"sidebar.chat": "聊天",
|
|
853
|
-
"readonly.oneShot.title": "
|
|
854
|
-
"readonly.title": "
|
|
871
|
+
"readonly.oneShot.title": "一次性子智能体记录",
|
|
872
|
+
"readonly.title": "此子智能体暂时只读",
|
|
855
873
|
"readonly.oneShot.body": "一次性任务不支持后续消息,可在这里查看完整执行记录。",
|
|
856
874
|
"readonly.body": "父会话当前不在线,重新打开父会话后即可继续发送消息。"
|
|
857
875
|
};
|
|
@@ -889,7 +907,8 @@ window.__ModuleLoader__.load({
|
|
|
889
907
|
"count.running.other": "{count} subagents running",
|
|
890
908
|
"switcher.aria": "Switch subagent: {title}",
|
|
891
909
|
"tree.aria": "Subagent sessions",
|
|
892
|
-
"open.sidebar": "Open
|
|
910
|
+
"open.sidebar": "Open in sidebar",
|
|
911
|
+
"open.sidebar.aria": "Open {label} in sidebar",
|
|
893
912
|
"sidebar.chat": "Chat",
|
|
894
913
|
"readonly.oneShot.title": "One-shot subagent record",
|
|
895
914
|
"readonly.title": "This subagent is read-only for now",
|
|
@@ -949,7 +968,7 @@ window.__ModuleLoader__.load({
|
|
|
949
968
|
ctx.slots.inject("conversation.session.header.actions", () => ctx.slots.register({
|
|
950
969
|
name: "conversation.session.header.actions",
|
|
951
970
|
id: "subagent-catalog",
|
|
952
|
-
order: 30,
|
|
971
|
+
order: -30,
|
|
953
972
|
locale: NS,
|
|
954
973
|
inject: catalogActions
|
|
955
974
|
}, SubagentCatalogAction));
|
|
@@ -14,7 +14,7 @@ export type SubagentHeaderLineageProps = PropsRuntime<'conversation.session.head
|
|
|
14
14
|
export type SubagentCatalogActionProps = PropsRuntime<'conversation.session.header.actions'> & SubagentCatalogInjected & PropsLocale<typeof NS>;
|
|
15
15
|
/**
|
|
16
16
|
* Session-header catalog action for root sessions: the descendant count and
|
|
17
|
-
* its dropdown
|
|
17
|
+
* its dropdown at the start of the header actions band. Child sessions render nothing
|
|
18
18
|
* here — their breadcrumb switcher in the lineage slot owns the same
|
|
19
19
|
* navigation.
|
|
20
20
|
* @param props - Session standard props plus the catalog actions and translator.
|
|
@@ -17,8 +17,8 @@ export declare const zh: {
|
|
|
17
17
|
readonly 'tokens.thousand': "{value}K";
|
|
18
18
|
readonly 'tokens.million': "{value}M";
|
|
19
19
|
readonly 'tokens.total': "{value} tok";
|
|
20
|
-
readonly 'loading.label': "
|
|
21
|
-
readonly 'load.error': "
|
|
20
|
+
readonly 'loading.label': "正在加载子智能体…";
|
|
21
|
+
readonly 'load.error': "无法加载子智能体";
|
|
22
22
|
readonly retry: "重试";
|
|
23
23
|
readonly 'mode.oneShot': "一次性";
|
|
24
24
|
readonly 'mode.continuable': "可继续";
|
|
@@ -27,18 +27,19 @@ export declare const zh: {
|
|
|
27
27
|
readonly 'activity.running': "正在运行";
|
|
28
28
|
readonly 'activity.completed': "已完成";
|
|
29
29
|
readonly 'activity.inactive': "当前未运行";
|
|
30
|
-
readonly 'branch.collapse': "收起 {label}
|
|
31
|
-
readonly 'branch.expand': "展开 {label}
|
|
32
|
-
readonly 'count.total.one': "{count}
|
|
33
|
-
readonly 'count.total.other': "{count}
|
|
34
|
-
readonly 'count.running.one': "{count}
|
|
35
|
-
readonly 'count.running.other': "{count}
|
|
36
|
-
readonly 'switcher.aria': "
|
|
37
|
-
readonly 'tree.aria': "
|
|
38
|
-
readonly 'open.sidebar': "在侧边栏打开
|
|
30
|
+
readonly 'branch.collapse': "收起 {label} 的下级子智能体";
|
|
31
|
+
readonly 'branch.expand': "展开 {label} 的下级子智能体";
|
|
32
|
+
readonly 'count.total.one': "{count} 个子智能体";
|
|
33
|
+
readonly 'count.total.other': "{count} 个子智能体";
|
|
34
|
+
readonly 'count.running.one': "{count} 个子智能体,正在运行";
|
|
35
|
+
readonly 'count.running.other': "{count} 个子智能体,正在运行";
|
|
36
|
+
readonly 'switcher.aria': "切换子智能体:{title}";
|
|
37
|
+
readonly 'tree.aria': "子智能体会话";
|
|
38
|
+
readonly 'open.sidebar': "在侧边栏打开";
|
|
39
|
+
readonly 'open.sidebar.aria': "在侧边栏打开 {label}";
|
|
39
40
|
readonly 'sidebar.chat': "聊天";
|
|
40
|
-
readonly 'readonly.oneShot.title': "
|
|
41
|
-
readonly 'readonly.title': "
|
|
41
|
+
readonly 'readonly.oneShot.title': "一次性子智能体记录";
|
|
42
|
+
readonly 'readonly.title': "此子智能体暂时只读";
|
|
42
43
|
readonly 'readonly.oneShot.body': "一次性任务不支持后续消息,可在这里查看完整执行记录。";
|
|
43
44
|
readonly 'readonly.body': "父会话当前不在线,重新打开父会话后即可继续发送消息。";
|
|
44
45
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-client-ui-subagent",
|
|
3
3
|
"description": "Subagent conversation catalog, continuation routing UI, and '@' reference source",
|
|
4
|
-
"version": "0.1.7-
|
|
4
|
+
"version": "0.1.7-rc.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -50,24 +50,24 @@
|
|
|
50
50
|
"@types/react-dom": "~18.3.0",
|
|
51
51
|
"react": "^18.2.0",
|
|
52
52
|
"react-dom": "^18.2.0",
|
|
53
|
-
"@deepseek-ai/dsh-client-locale": "0.1.7-
|
|
54
|
-
"@deepseek-ai/dsh-client-resources": "0.1.7-
|
|
55
|
-
"@deepseek-ai/dsh-client-
|
|
56
|
-
"@deepseek-ai/dsh-client-ui-chat": "0.1.7-
|
|
57
|
-
"@deepseek-ai/dsh-client-ui-
|
|
58
|
-
"@deepseek-ai/dsh-client-
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-
|
|
60
|
-
"@deepseek-ai/dsh-
|
|
61
|
-
"@deepseek-ai/dsh-subagent": "0.1.7-
|
|
53
|
+
"@deepseek-ai/dsh-client-locale": "0.1.7-rc.2",
|
|
54
|
+
"@deepseek-ai/dsh-client-resources": "0.1.7-rc.2",
|
|
55
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.2",
|
|
56
|
+
"@deepseek-ai/dsh-client-ui-chat": "0.1.7-rc.2",
|
|
57
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.7-rc.2",
|
|
58
|
+
"@deepseek-ai/dsh-client-test-runtime": "0.1.7-rc.2",
|
|
59
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
|
|
60
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
|
|
61
|
+
"@deepseek-ai/dsh-subagent": "0.1.7-rc.2",
|
|
62
|
+
"@deepseek-ai/dsh-token-meter": "0.1.7-rc.2",
|
|
62
63
|
"@deepseek-ai/cordis": "~4.0.4",
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-client-connection": "0.1.7-
|
|
65
|
-
"@deepseek-ai/dsh-session": "0.1.7-
|
|
66
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.1.7-
|
|
67
|
-
"@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.7-
|
|
68
|
-
"@deepseek-ai/dsh-client-ui-session": "0.1.7-
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-workspace": "0.1.7-
|
|
70
|
-
"@deepseek-ai/dsh-api-session-controller": "0.1.7-alpha.2"
|
|
64
|
+
"@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.2",
|
|
65
|
+
"@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-session": "0.1.7-rc.2",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.7-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-session": "0.1.7-rc.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.1.7-rc.2"
|
|
71
71
|
},
|
|
72
72
|
"files": [
|
|
73
73
|
"lib/index.js",
|