@nanmicoder/dsh-agent-teams 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,20 +37,24 @@ Ask in natural language. The plugin provides the team protocol, nine coordinatio
37
37
  > [!NOTE]
38
38
  > Requires an existing [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) installation.
39
39
 
40
- Choose either plugin source.
41
-
42
40
  ### npm
43
41
 
44
42
  ```sh
45
43
  dsh plugin --profile web add @nanmicoder/dsh-agent-teams
46
44
  ```
47
45
 
48
- ### GitHub `main`
46
+ ### Build from source
49
47
 
50
48
  ```sh
51
- dsh plugin --profile web add 'git+https://github.com/NanmiCoder/dsh-agent-teams.git#main'
49
+ git clone https://github.com/NanmiCoder/dsh-agent-teams.git
50
+ cd dsh-agent-teams
51
+ pnpm install
52
+ pnpm build
53
+ dsh plugin --profile web add .
52
54
  ```
53
55
 
56
+ Run `pnpm build` again after changing the source. The local plugin install remains linked to this checkout.
57
+
54
58
  Validate the composed profile, restart DSH, and refresh the Web UI:
55
59
 
56
60
  ```sh
package/README_ZH.md CHANGED
@@ -37,20 +37,24 @@
37
37
  > [!NOTE]
38
38
  > 使用前请确保已安装 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)。
39
39
 
40
- 任选一种插件来源。
41
-
42
40
  ### npm
43
41
 
44
42
  ```sh
45
43
  dsh plugin --profile web add @nanmicoder/dsh-agent-teams
46
44
  ```
47
45
 
48
- ### GitHub `main`
46
+ ### 从源码构建
49
47
 
50
48
  ```sh
51
- dsh plugin --profile web add 'git+https://github.com/NanmiCoder/dsh-agent-teams.git#main'
49
+ git clone https://github.com/NanmiCoder/dsh-agent-teams.git
50
+ cd dsh-agent-teams
51
+ pnpm install
52
+ pnpm build
53
+ dsh plugin --profile web add .
52
54
  ```
53
55
 
56
+ 修改源码后请重新执行 `pnpm build`。本地安装会继续链接到当前源码目录。
57
+
54
58
  检查组合配置、重启 DSH,然后刷新 Web UI:
55
59
 
56
60
  ```sh
@@ -17,7 +17,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
17
17
  */
18
18
  import { useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
19
19
  import { IconBranchOutline16, IconChevronRightOutline14, IconCloseOutline16, StateDot, } from '@deepseek-ai/dsh-client-ui-primitives';
20
- import { activityPanelExpandedForSession, relatedTaskIds, taskStages } from "./activity-model.js";
20
+ import { activityPanelExpandedForSession, dependencyFocusTaskId, relatedTaskIds, taskStages, } from "./activity-model.js";
21
21
  import { ACTION_ART, LEAD_ART, memberArtUrl } from "./artwork.js";
22
22
  import { OPEN_PANEL_EVENT } from "./AgentTeamsCard.js";
23
23
  import css from './ActivityPanel.module.css';
@@ -131,18 +131,38 @@ function dependencyLabel(task, tasks) {
131
131
  return dependency?.assignee ? `${id}·${dependency.assignee}` : id;
132
132
  }).join('、');
133
133
  }
134
- function TaskNode({ task, tasks, focused, dimmed, pinned, onPin, onPreview }) {
134
+ function TaskNode({ task, tasks, focused, dimmed, pinned, onPin, onHover, onFocusChange }) {
135
135
  const tone = taskTone(task.state, task.status);
136
- return (_jsxs("button", { type: "button", className: css.taskNode, "data-task-id": task.id, "data-state": tone, "data-focused": focused, "data-dimmed": dimmed, "aria-pressed": pinned, title: `${task.id} · ${task.subject}(点击固定依赖链)`, onClick: () => { onPin(task.id); }, onMouseEnter: () => { onPreview(task.id); }, onMouseLeave: () => { onPreview(null); }, onFocus: () => { onPreview(task.id); }, onBlur: () => { onPreview(null); }, children: [_jsxs("span", { className: css.taskNodeHead, children: [_jsx("span", { className: css.taskId, children: task.id }), _jsx("span", { className: css.taskBadge, "data-state": tone, children: taskStatusLabel(task.status) })] }), _jsx("span", { className: css.taskSubject, children: task.subject }), _jsxs("span", { className: css.taskRoute, children: [_jsx("span", { className: css.taskOwner, children: task.assignee || '待认领' }), task.dependencies.length === 0
136
+ return (_jsxs("button", { type: "button", className: css.taskNode, "data-task-id": task.id, "data-state": tone, "data-focused": focused, "data-dimmed": dimmed, "aria-pressed": pinned, title: `${task.id} · ${task.subject}(悬停高亮依赖链 · 点击固定)`, onClick: () => { onPin(task.id); }, onMouseEnter: () => { onHover(task.id); }, onMouseLeave: () => { onHover(null); }, onFocus: () => { onFocusChange(task.id); }, onBlur: () => { onFocusChange(null); }, children: [_jsxs("span", { className: css.taskNodeHead, children: [_jsx("span", { className: css.taskId, children: task.id }), _jsx("span", { className: css.taskBadge, "data-state": tone, children: taskStatusLabel(task.status) })] }), _jsx("span", { className: css.taskSubject, children: task.subject }), _jsxs("span", { className: css.taskRoute, children: [_jsx("span", { className: css.taskOwner, children: task.assignee || '待认领' }), task.dependencies.length === 0
137
137
  ? _jsx("span", { className: css.taskStart, children: "\u8D77\u70B9" })
138
138
  : _jsxs("span", { className: css.taskDeps, children: ["\u4F9D\u8D56 ", dependencyLabel(task, tasks)] })] })] }));
139
139
  }
140
140
  function DependencyMap({ tasks }) {
141
- const [previewTaskId, setPreviewTaskId] = useState(null);
141
+ const [hoverTaskId, setHoverTaskId] = useState(null);
142
+ const [keyboardTaskId, setKeyboardTaskId] = useState(null);
142
143
  const [pinnedTaskId, setPinnedTaskId] = useState(null);
143
- const focusedTaskId = pinnedTaskId ?? previewTaskId;
144
+ const hoverTimer = useRef(null);
145
+ const focusedTaskId = dependencyFocusTaskId(pinnedTaskId, keyboardTaskId, hoverTaskId);
144
146
  const stages = useMemo(() => taskStages(tasks), [tasks]);
145
147
  const related = useMemo(() => focusedTaskId === null ? null : relatedTaskIds(focusedTaskId, tasks), [focusedTaskId, tasks]);
148
+ const scheduleHover = (id) => {
149
+ if (hoverTimer.current !== null) {
150
+ clearTimeout(hoverTimer.current);
151
+ hoverTimer.current = null;
152
+ }
153
+ if (id === null) {
154
+ setHoverTaskId(null);
155
+ return;
156
+ }
157
+ hoverTimer.current = setTimeout(() => {
158
+ hoverTimer.current = null;
159
+ setHoverTaskId(id);
160
+ }, 180);
161
+ };
162
+ useEffect(() => () => {
163
+ if (hoverTimer.current !== null)
164
+ clearTimeout(hoverTimer.current);
165
+ }, []);
146
166
  useEffect(() => {
147
167
  const onKeyDown = (event) => {
148
168
  if (event.key === 'Escape')
@@ -153,7 +173,7 @@ function DependencyMap({ tasks }) {
153
173
  }, []);
154
174
  if (tasks.length === 0)
155
175
  return null;
156
- return (_jsxs("section", { className: css.dependencySection, "aria-label": "\u4EFB\u52A1\u4F9D\u8D56\u94FE", "data-dependency-map": true, children: [_jsxs("header", { className: css.sectionHead, children: [_jsxs("span", { className: css.sectionTitle, children: [_jsx(IconBranchOutline16, {}), " \u4EFB\u52A1\u4F9D\u8D56"] }), _jsx("span", { className: css.sectionHint, children: pinnedTaskId === null ? '悬停预览 · 点击固定' : `${pinnedTaskId} 已固定 · Esc 取消` })] }), _jsx("div", { className: css.stageFlow, children: stages.map((stage, index) => (_jsxs("div", { className: css.stageGroup, "data-depth": stage.depth, children: [index > 0 && (_jsxs("span", { className: css.stageConnector, "aria-hidden": true, children: [_jsx("span", { className: css.stageLine }), _jsx(IconChevronRightOutline14, {})] })), _jsxs("div", { className: css.stageColumn, children: [_jsxs("span", { className: css.stageLabel, children: [stage.depth === 0 ? '起点' : `依赖层 ${stage.depth}`, _jsx("span", { children: stage.tasks.length })] }), _jsx("div", { className: css.stageTasks, children: stage.tasks.map((task) => (_jsx(TaskNode, { task: task, tasks: tasks, focused: related?.has(task.id) ?? false, dimmed: related !== null && !related.has(task.id), pinned: pinnedTaskId === task.id, onPin: (id) => { setPinnedTaskId((current) => current === id ? null : id); }, onPreview: setPreviewTaskId }, task.id))) })] })] }, stage.depth))) })] }));
176
+ return (_jsxs("section", { className: css.dependencySection, "aria-label": "\u4EFB\u52A1\u4F9D\u8D56\u94FE", "data-dependency-map": true, children: [_jsxs("header", { className: css.sectionHead, children: [_jsxs("span", { className: css.sectionTitle, children: [_jsx(IconBranchOutline16, {}), " \u4EFB\u52A1\u4F9D\u8D56"] }), _jsx("span", { className: css.sectionHint, children: pinnedTaskId === null ? '悬停高亮依赖链 · 点击固定' : `${pinnedTaskId} 已固定 · Esc 取消` })] }), _jsx("div", { className: css.stageFlow, children: stages.map((stage, index) => (_jsxs("div", { className: css.stageGroup, "data-depth": stage.depth, children: [index > 0 && (_jsxs("span", { className: css.stageConnector, "aria-hidden": true, children: [_jsx("span", { className: css.stageLine }), _jsx(IconChevronRightOutline14, {})] })), _jsxs("div", { className: css.stageColumn, children: [_jsxs("span", { className: css.stageLabel, children: [stage.depth === 0 ? '起点' : `依赖层 ${stage.depth}`, _jsx("span", { children: stage.tasks.length })] }), _jsx("div", { className: css.stageTasks, children: stage.tasks.map((task) => (_jsx(TaskNode, { task: task, tasks: tasks, focused: related?.has(task.id) ?? false, dimmed: related !== null && !related.has(task.id), pinned: pinnedTaskId === task.id, onPin: (id) => { setPinnedTaskId((current) => current === id ? null : id); }, onHover: scheduleHover, onFocusChange: setKeyboardTaskId }, task.id))) })] })] }, stage.depth))) })] }));
157
177
  }
158
178
  function TeamSection({ team, onNavigate, historic = false }) {
159
179
  const busyCount = team.members.filter((member) => member.activity === 'working').length;
@@ -10,6 +10,16 @@
10
10
  export function activityPanelExpandedForSession(open, owner, current) {
11
11
  return open && owner !== undefined && owner === current;
12
12
  }
13
+ /**
14
+ * Resolve the task whose dependency chain should be highlighted.
15
+ *
16
+ * A pinned task is an explicit user choice. Keyboard focus takes precedence
17
+ * over delayed pointer intent so an older hover timer cannot steal the active
18
+ * chain from someone navigating the task map with the keyboard.
19
+ */
20
+ export function dependencyFocusTaskId(pinnedTaskId, keyboardTaskId, hoverTaskId) {
21
+ return pinnedTaskId ?? keyboardTaskId ?? hoverTaskId;
22
+ }
13
23
  /** Group tasks by their precomputed dependency depth. */
14
24
  export function taskStages(tasks) {
15
25
  const byDepth = new Map();
package/lib/client.js CHANGED
@@ -21,6 +21,16 @@ window.__ModuleLoader__.load({
21
21
  function activityPanelExpandedForSession(open, owner, current) {
22
22
  return open && owner !== void 0 && owner === current;
23
23
  }
24
+ /**
25
+ * Resolve the task whose dependency chain should be highlighted.
26
+ *
27
+ * A pinned task is an explicit user choice. Keyboard focus takes precedence
28
+ * over delayed pointer intent so an older hover timer cannot steal the active
29
+ * chain from someone navigating the task map with the keyboard.
30
+ */
31
+ function dependencyFocusTaskId(pinnedTaskId, keyboardTaskId, hoverTaskId) {
32
+ return pinnedTaskId ?? keyboardTaskId ?? hoverTaskId;
33
+ }
24
34
  /** Group tasks by their precomputed dependency depth. */
25
35
  function taskStages(tasks) {
26
36
  const byDepth = /* @__PURE__ */ new Map();
@@ -110,8 +120,8 @@ window.__ModuleLoader__.load({
110
120
  return null;
111
121
  }
112
122
  //#endregion
113
- //#region \0dsh-css:/Users/nanmi/workspace/myself_code/dsh-agent-teams/src/client/AgentTeamsCard.module.css.mjs
114
- const css$1 = "._6Ci0pW_root{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module-platform);border-radius:10px;flex-direction:column;gap:8px;width:100%;min-width:0;padding:10px 12px;display:flex}._6Ci0pW_head{align-items:center;gap:8px;min-width:0;display:flex}._6Ci0pW_leadAvatar{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;flex:none;width:24px;height:24px}._6Ci0pW_teamName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}._6Ci0pW_memberCount{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;margin-left:auto;font-size:11px;line-height:16px}._6Ci0pW_panelButton{border:1px solid var(--dsw-alias-line-strong);background:var(--dsw-alias-bg-module);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;flex:none;padding:2px 8px;font-size:10.5px;font-weight:600;line-height:16px;transition:border-color .12s,color .12s}._6Ci0pW_panelButton:hover{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary)}._6Ci0pW_panelButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}._6Ci0pW_members{flex-wrap:wrap;gap:6px;min-width:0;display:flex}._6Ci0pW_member{border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);max-width:160px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:5px;padding:3px 8px 3px 3px;font-size:11px;font-weight:500;line-height:16px;transition:border-color .12s,background-color .12s;display:inline-flex}._6Ci0pW_member:hover{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-fill-neutral)}._6Ci0pW_member:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}._6Ci0pW_memberArt{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:20px;height:20px}._6Ci0pW_memberInitial{background:var(--dsw-alias-bg-fill-business);width:20px;height:20px;color:var(--dsw-alias-label-on-fill);border-radius:50%;justify-content:center;align-items:center;font-size:10px;font-weight:600;line-height:20px;display:inline-flex}._6Ci0pW_memberName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}";
123
+ //#region \0dsh-css:/home/runner/work/dsh-agent-teams/dsh-agent-teams/src/client/AgentTeamsCard.module.css.mjs
124
+ const css$1 = ".kPAopq_root{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module-platform);border-radius:10px;flex-direction:column;gap:8px;width:100%;min-width:0;padding:10px 12px;display:flex}.kPAopq_head{align-items:center;gap:8px;min-width:0;display:flex}.kPAopq_leadAvatar{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;flex:none;width:24px;height:24px}.kPAopq_teamName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.kPAopq_memberCount{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;margin-left:auto;font-size:11px;line-height:16px}.kPAopq_panelButton{border:1px solid var(--dsw-alias-line-strong);background:var(--dsw-alias-bg-module);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;flex:none;padding:2px 8px;font-size:10.5px;font-weight:600;line-height:16px;transition:border-color .12s,color .12s}.kPAopq_panelButton:hover{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary)}.kPAopq_panelButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.kPAopq_members{flex-wrap:wrap;gap:6px;min-width:0;display:flex}.kPAopq_member{border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);max-width:160px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:5px;padding:3px 8px 3px 3px;font-size:11px;font-weight:500;line-height:16px;transition:border-color .12s,background-color .12s;display:inline-flex}.kPAopq_member:hover{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-fill-neutral)}.kPAopq_member:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.kPAopq_memberArt{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:20px;height:20px}.kPAopq_memberInitial{background:var(--dsw-alias-bg-fill-business);width:20px;height:20px;color:var(--dsw-alias-label-on-fill);border-radius:50%;justify-content:center;align-items:center;font-size:10px;font-weight:600;line-height:20px;display:inline-flex}.kPAopq_memberName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}";
115
125
  const tagId$1 = "@nanmicoder/dsh-agent-teams/AgentTeamsCard.module.css";
116
126
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
117
127
  const tag = document.createElement("style");
@@ -121,17 +131,17 @@ window.__ModuleLoader__.load({
121
131
  document.head.appendChild(tag);
122
132
  }
123
133
  var AgentTeamsCard_module_css_default = {
124
- "head": "_6Ci0pW_head",
125
- "leadAvatar": "_6Ci0pW_leadAvatar",
126
- "member": "_6Ci0pW_member",
127
- "memberArt": "_6Ci0pW_memberArt",
128
- "memberCount": "_6Ci0pW_memberCount",
129
- "memberInitial": "_6Ci0pW_memberInitial",
130
- "memberName": "_6Ci0pW_memberName",
131
- "members": "_6Ci0pW_members",
132
- "panelButton": "_6Ci0pW_panelButton",
133
- "root": "_6Ci0pW_root",
134
- "teamName": "_6Ci0pW_teamName"
134
+ "head": "kPAopq_head",
135
+ "leadAvatar": "kPAopq_leadAvatar",
136
+ "member": "kPAopq_member",
137
+ "memberArt": "kPAopq_memberArt",
138
+ "memberCount": "kPAopq_memberCount",
139
+ "memberInitial": "kPAopq_memberInitial",
140
+ "memberName": "kPAopq_memberName",
141
+ "members": "kPAopq_members",
142
+ "panelButton": "kPAopq_panelButton",
143
+ "root": "kPAopq_root",
144
+ "teamName": "kPAopq_teamName"
135
145
  };
136
146
  //#endregion
137
147
  //#region lib/client/AgentTeamsCard.js
@@ -260,8 +270,8 @@ window.__ModuleLoader__.load({
260
270
  });
261
271
  }
262
272
  //#endregion
263
- //#region \0dsh-css:/Users/nanmi/workspace/myself_code/dsh-agent-teams/src/client/ActivityPanel.module.css.mjs
264
- const css = "html{--agent-teams-panel-width:388px;--agent-teams-panel-right:calc(18px + var(--dsh-sidebar-width,0px));--agent-teams-panel-gap:14px;--agent-teams-panel-shift:calc(var(--agent-teams-panel-width) + 18px + var(--agent-teams-panel-gap))}html[data-agent-teams-panel-open] [data-phase=active]{box-sizing:border-box;padding-right:var(--agent-teams-panel-shift)}[data-phase=active]{will-change:padding-right;transition:padding-right .36s cubic-bezier(.22,1,.36,1)}.qZToFW_badge{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 92%, transparent);backdrop-filter:blur(16px);height:34px;box-shadow:0 8px 28px color-mix(in srgb, var(--dsw-alias-label-primary) 14%, transparent);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:7px;padding:0 12px;font-size:12px;font-weight:600;line-height:20px;transition:border-color .15s,transform .12s;display:inline-flex;position:fixed}.qZToFW_badge:hover{border-color:var(--dsw-alias-line-strong);transform:translateY(-1px)}.qZToFW_badge:active{transform:translateY(0)scale(.98)}.qZToFW_badge:focus-visible,.qZToFW_closeButton:focus-visible,.qZToFW_memberRow:focus-visible,.qZToFW_taskNode:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.qZToFW_badgeDot,.qZToFW_panelDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px}.qZToFW_badgeDot[data-busy=true],.qZToFW_panelDot[data-busy=true]{background:var(--dsw-alias-state-business-primary);animation:1.25s ease-in-out infinite qZToFW_agentTeamsPulse}.qZToFW_badgeCount,.qZToFW_memberCount,.qZToFW_teamStats,.qZToFW_stageLabel,.qZToFW_taskId{font-variant-numeric:tabular-nums}.qZToFW_panel{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;width:min(var(--agent-teams-panel-width), calc(100vw - 24px));box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-line-strong) 58%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 95%, transparent);backdrop-filter:blur(20px)saturate(1.08);max-height:70dvh;box-shadow:0 12px 32px color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent), 0 32px 72px color-mix(in srgb, var(--dsw-alias-label-primary) 16%, transparent);border-radius:16px;flex-direction:column;animation:.18s ease-out qZToFW_agentTeamsPanelIn;display:flex;position:fixed;overflow:hidden}@keyframes qZToFW_agentTeamsPanelIn{0%{opacity:0;transform:translateY(-6px)scale(.99)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes qZToFW_agentTeamsPulse{0%,to{opacity:.42}50%{opacity:1}}.qZToFW_panelHead{border-bottom:1px solid var(--dsw-alias-line-normal);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:0 14px 0 16px;display:flex}.qZToFW_panelTitle{color:var(--dsw-alias-label-primary);align-items:center;gap:8px;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.qZToFW_closeButton{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,transform .12s;display:inline-flex}.qZToFW_closeButton:hover{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-primary)}.qZToFW_closeButton:active{transform:scale(.94)}.qZToFW_teams{overscroll-behavior:contain;flex-direction:column;min-height:0;display:flex;overflow-y:auto}.qZToFW_team{border-bottom:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:12px;padding:12px 14px 16px;display:flex}.qZToFW_team:last-child{border-bottom:0}.qZToFW_teamHead{align-items:center;gap:10px;min-width:0;display:flex}.qZToFW_teamName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.qZToFW_teamStats{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;gap:8px;font-size:10.5px;line-height:16px;display:inline-flex}.qZToFW_sectionHead{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}.qZToFW_sectionTitle{color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;font-size:11px;font-weight:600;line-height:16px;display:inline-flex}.qZToFW_sectionHint{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.qZToFW_delegationSection{min-width:0}.qZToFW_captainNode{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-state-business-primary) 32%, var(--dsw-alias-line-normal));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-module));border-radius:10px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:48px;padding:8px 10px;display:grid}.qZToFW_captainAvatar,.qZToFW_memberAvatar{flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.qZToFW_captainAvatar{width:36px;height:36px}.qZToFW_leadAvatar,.qZToFW_memberArt,.qZToFW_memberInitial{box-sizing:border-box;border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:34px;height:34px}.qZToFW_captainInfo,.qZToFW_memberInfo{flex-direction:column;min-width:0;display:flex}.qZToFW_captainInfo{gap:2px}.qZToFW_captainLine,.qZToFW_memberLine{align-items:center;gap:6px;min-width:0;display:flex}.qZToFW_captainName,.qZToFW_memberName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;line-height:18px;overflow:hidden}.qZToFW_captainRole,.qZToFW_memberRole{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.qZToFW_captainSummary,.qZToFW_memberStatusLine{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;line-height:15px;overflow:hidden}.qZToFW_captainState,.qZToFW_memberState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;align-items:center;gap:5px;font-size:10px;font-weight:500;line-height:15px;display:inline-flex}.qZToFW_captainState[data-busy=true],.qZToFW_memberState[data-activity=working]{color:var(--dsw-alias-state-business-primary)}.qZToFW_delegationTree{flex-direction:column;gap:2px;margin-left:18px;padding:9px 0 0 20px;display:flex;position:relative}.qZToFW_delegationTree:before{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));content:\"\";width:1px;position:absolute;top:0;bottom:22px;left:0}.qZToFW_memberBlock{flex-direction:column;min-width:0;padding:3px 0 7px;display:flex;position:relative}.qZToFW_memberBranch{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));width:20px;height:1px;display:block;position:absolute;top:23px;right:100%}.qZToFW_memberBranch:before{background:var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;width:5px;height:5px;position:absolute;top:-2px;right:-1px}.qZToFW_memberRow{box-sizing:border-box;width:100%;min-width:0;min-height:44px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:8px;padding:4px 6px;transition:background-color .12s,transform .12s;display:grid}.qZToFW_memberRow:hover,.qZToFW_memberRow[data-activity=working]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module))}.qZToFW_memberRow:active{transform:scale(.995)}.qZToFW_memberAvatar{width:34px;height:34px}.qZToFW_memberAvatar[data-unread=true]:after{border:1px solid var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;animation:1.5s ease-out infinite qZToFW_agentTeamsRing;position:absolute;inset:-3px}@keyframes qZToFW_agentTeamsRing{0%{opacity:.82;transform:scale(.94)}75%,to{opacity:0;transform:scale(1.18)}}.qZToFW_memberInitial{color:var(--dsw-alias-label-on-fill);justify-content:center;align-items:center;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.qZToFW_stateArt{box-sizing:border-box;border:2px solid var(--dsw-alias-bg-module-platform);object-fit:cover;background:#0b1d33;border-radius:50%;width:19px;height:19px;position:absolute;bottom:-4px;right:-4px}.qZToFW_stateArt[data-activity=working]{animation:2.4s ease-in-out infinite qZToFW_agentTeamsFloat}.qZToFW_stateArt[data-activity=idle]{animation:4.2s ease-in-out infinite qZToFW_agentTeamsBreathe}.qZToFW_stateArt[data-activity=unknown]{animation:2.8s ease-in-out infinite qZToFW_agentTeamsThink}@keyframes qZToFW_agentTeamsFloat{0%,to{transform:translateY(0)rotate(-4deg)}50%{transform:translateY(-2px)rotate(4deg)}}@keyframes qZToFW_agentTeamsBreathe{0%,to{opacity:.82;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes qZToFW_agentTeamsThink{0%,to{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.qZToFW_memberState{margin-left:auto}.qZToFW_memberCount{color:var(--dsw-alias-label-tertiary);font-size:10.5px;line-height:16px}.qZToFW_assignmentLine{align-items:center;gap:7px;min-width:0;padding:0 6px 0 52px;display:flex}.qZToFW_assignmentLabel{color:var(--dsw-alias-label-tertiary);flex:none;font-size:9.5px;line-height:14px}.qZToFW_assignmentTasks{flex-wrap:wrap;flex:1;gap:4px;min-width:0;display:flex}.qZToFW_assignmentChip{background:var(--dsw-alias-bg-fill-neutral);min-height:16px;color:var(--dsw-alias-label-secondary);border-radius:4px;align-items:center;padding:0 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px;font-weight:600;line-height:14px;display:inline-flex}.qZToFW_assignmentChip[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.qZToFW_unreadPill{color:var(--dsw-alias-state-business-primary);white-space:nowrap;flex:none;font-size:9.5px;font-weight:600;line-height:14px}.qZToFW_taskEmpty{color:var(--dsw-alias-label-tertiary);font-size:9.5px;line-height:14px}.qZToFW_dependencySection{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:7px;min-width:0;padding-top:10px;display:flex}.qZToFW_stageFlow{scrollbar-width:thin;align-items:stretch;gap:0;min-width:0;padding:1px 1px 5px;display:flex;overflow-x:auto}.qZToFW_stageGroup{flex:1 0 126px;min-width:126px;display:flex;position:relative}.qZToFW_stageConnector{width:22px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;margin-top:0;display:flex}.qZToFW_stageLine{background:var(--dsw-alias-line-strong);flex:1;height:1px;display:block}.qZToFW_stageColumn{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.qZToFW_stageLabel{color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:6px;padding:0 2px;font-size:9.5px;font-weight:600;line-height:14px;display:flex}.qZToFW_stageLabel span{background:var(--dsw-alias-bg-fill-neutral);border-radius:4px;justify-content:center;align-items:center;min-width:14px;height:14px;font-size:8.5px;display:inline-flex}.qZToFW_stageTasks{flex-direction:column;gap:5px;display:flex}.qZToFW_taskNode{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);min-width:0;min-height:72px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;border-radius:8px;flex-direction:column;gap:4px;padding:7px 8px;transition:border-color .14s,opacity .14s,transform .12s,background-color .14s;display:flex}.qZToFW_taskNode:hover,.qZToFW_taskNode[data-focused=true]{border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module));transform:translateY(-1px)}.qZToFW_taskNode[data-dimmed=true]{opacity:.34}.qZToFW_taskNode[data-state=completed]{border-color:color-mix(in srgb, var(--dsw-alias-state-success) 48%, var(--dsw-alias-line-normal))}.qZToFW_taskNode[data-state=blocked]{border-color:color-mix(in srgb, var(--dsw-alias-state-warning) 52%, var(--dsw-alias-line-normal))}.qZToFW_taskNode[data-state=failed]{border-color:color-mix(in srgb, var(--dsw-alias-state-danger) 56%, var(--dsw-alias-line-normal))}.qZToFW_taskNodeHead,.qZToFW_taskRoute{justify-content:space-between;align-items:center;gap:5px;min-width:0;display:flex}.qZToFW_taskId{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:700}.qZToFW_taskBadge{background:var(--dsw-alias-bg-fill-neutral);min-height:14px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;align-items:center;padding:0 4px;font-size:8.5px;font-weight:600;line-height:13px;display:inline-flex}.qZToFW_taskBadge[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.qZToFW_taskSubject{min-height:30px;color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:10.5px;font-weight:500;line-height:15px;display:-webkit-box;overflow:hidden}.qZToFW_taskRoute{color:var(--dsw-alias-label-tertiary);margin-top:auto;font-size:8.5px;line-height:13px}.qZToFW_taskOwner,.qZToFW_taskDeps{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.qZToFW_taskOwner{max-width:48%;color:var(--dsw-alias-label-secondary);font-weight:600}.qZToFW_taskDeps{text-align:right;flex:1}.qZToFW_taskStart{color:var(--dsw-alias-label-tertiary)}.qZToFW_unclaimed,.qZToFW_inbox{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:5px;min-width:0;padding-top:10px;display:flex}.qZToFW_unclaimedTitle{color:var(--dsw-alias-label-secondary);font-size:10.5px;font-weight:600;line-height:15px}.qZToFW_inboxRow{border-radius:6px;grid-template-columns:112px minmax(0,1fr);align-items:center;gap:8px;min-width:0;min-height:24px;padding:2px 5px;display:grid}.qZToFW_inboxRow:hover{background:var(--dsw-alias-bg-module)}.qZToFW_inboxRoute{min-width:0;color:var(--dsw-alias-state-business-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:3px;font-size:9.5px;font-weight:600;line-height:14px;display:inline-flex;overflow:hidden}.qZToFW_inboxContent{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.qZToFW_emptyHint{color:var(--dsw-alias-label-tertiary);padding:10px 12px;font-size:11px;line-height:16px}.qZToFW_team[data-historic],.qZToFW_archivedWrap{opacity:.82}.qZToFW_historicPill{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-tertiary);border-radius:4px;flex:none;margin-left:auto;padding:1px 7px;font-size:9.5px;font-weight:600;line-height:15px}.qZToFW_members{flex-direction:column;gap:3px;display:flex}.qZToFW_archivedWrap:before{color:var(--dsw-alias-label-tertiary);content:\"已结束 · 历史归档\";padding:5px 14px 0;font-size:9.5px;font-weight:600;line-height:14px;display:block}@media (prefers-reduced-motion:reduce){[data-phase=active],.qZToFW_panel,.qZToFW_badge,.qZToFW_badgeDot,.qZToFW_panelDot,.qZToFW_stateArt,.qZToFW_memberAvatar[data-unread=true]:after{transition:none;animation:none}}@media (width<=960px){html{--agent-teams-main-shift:0px}html[data-agent-teams-panel-open] [data-phase=active]{padding-right:0}}@media (width<=640px){html{--agent-teams-panel-right:calc(10px + var(--dsh-sidebar-width,0px))}.qZToFW_panel{width:auto;max-height:calc(100dvh - 68px);top:56px;left:10px}.qZToFW_badge{top:56px}.qZToFW_teamStats span[data-stat=messages]{display:none}.qZToFW_captainNode{grid-template-columns:38px minmax(0,1fr)}.qZToFW_captainState{display:none}.qZToFW_delegationTree{margin-left:12px;padding-left:15px}.qZToFW_memberBranch{width:15px}.qZToFW_assignmentLine{padding-left:45px}}";
273
+ //#region \0dsh-css:/home/runner/work/dsh-agent-teams/dsh-agent-teams/src/client/ActivityPanel.module.css.mjs
274
+ const css = "html{--agent-teams-panel-width:388px;--agent-teams-panel-right:calc(18px + var(--dsh-sidebar-width,0px));--agent-teams-panel-gap:14px;--agent-teams-panel-shift:calc(var(--agent-teams-panel-width) + 18px + var(--agent-teams-panel-gap))}html[data-agent-teams-panel-open] [data-phase=active]{box-sizing:border-box;padding-right:var(--agent-teams-panel-shift)}[data-phase=active]{will-change:padding-right;transition:padding-right .36s cubic-bezier(.22,1,.36,1)}.aYQbCq_badge{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 92%, transparent);backdrop-filter:blur(16px);height:34px;box-shadow:0 8px 28px color-mix(in srgb, var(--dsw-alias-label-primary) 14%, transparent);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:7px;padding:0 12px;font-size:12px;font-weight:600;line-height:20px;transition:border-color .15s,transform .12s;display:inline-flex;position:fixed}.aYQbCq_badge:hover{border-color:var(--dsw-alias-line-strong);transform:translateY(-1px)}.aYQbCq_badge:active{transform:translateY(0)scale(.98)}.aYQbCq_badge:focus-visible,.aYQbCq_closeButton:focus-visible,.aYQbCq_memberRow:focus-visible,.aYQbCq_taskNode:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.aYQbCq_badgeDot,.aYQbCq_panelDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px}.aYQbCq_badgeDot[data-busy=true],.aYQbCq_panelDot[data-busy=true]{background:var(--dsw-alias-state-business-primary);animation:1.25s ease-in-out infinite aYQbCq_agentTeamsPulse}.aYQbCq_badgeCount,.aYQbCq_memberCount,.aYQbCq_teamStats,.aYQbCq_stageLabel,.aYQbCq_taskId{font-variant-numeric:tabular-nums}.aYQbCq_panel{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;width:min(var(--agent-teams-panel-width), calc(100vw - 24px));box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-line-strong) 58%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 95%, transparent);backdrop-filter:blur(20px)saturate(1.08);max-height:70dvh;box-shadow:0 12px 32px color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent), 0 32px 72px color-mix(in srgb, var(--dsw-alias-label-primary) 16%, transparent);border-radius:16px;flex-direction:column;animation:.18s ease-out aYQbCq_agentTeamsPanelIn;display:flex;position:fixed;overflow:hidden}@keyframes aYQbCq_agentTeamsPanelIn{0%{opacity:0;transform:translateY(-6px)scale(.99)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes aYQbCq_agentTeamsPulse{0%,to{opacity:.42}50%{opacity:1}}.aYQbCq_panelHead{border-bottom:1px solid var(--dsw-alias-line-normal);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:0 14px 0 16px;display:flex}.aYQbCq_panelTitle{color:var(--dsw-alias-label-primary);align-items:center;gap:8px;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.aYQbCq_closeButton{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,transform .12s;display:inline-flex}.aYQbCq_closeButton:hover{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-primary)}.aYQbCq_closeButton:active{transform:scale(.94)}.aYQbCq_teams{overscroll-behavior:contain;flex-direction:column;min-height:0;display:flex;overflow-y:auto}.aYQbCq_team{border-bottom:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:12px;padding:12px 14px 16px;display:flex}.aYQbCq_team:last-child{border-bottom:0}.aYQbCq_teamHead{align-items:center;gap:10px;min-width:0;display:flex}.aYQbCq_teamName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.aYQbCq_teamStats{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;gap:8px;font-size:10.5px;line-height:16px;display:inline-flex}.aYQbCq_sectionHead{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}.aYQbCq_sectionTitle{color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;font-size:11px;font-weight:600;line-height:16px;display:inline-flex}.aYQbCq_sectionHint{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.aYQbCq_delegationSection{min-width:0}.aYQbCq_captainNode{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-state-business-primary) 32%, var(--dsw-alias-line-normal));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-module));border-radius:10px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:48px;padding:8px 10px;display:grid}.aYQbCq_captainAvatar,.aYQbCq_memberAvatar{flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.aYQbCq_captainAvatar{width:36px;height:36px}.aYQbCq_leadAvatar,.aYQbCq_memberArt,.aYQbCq_memberInitial{box-sizing:border-box;border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:34px;height:34px}.aYQbCq_captainInfo,.aYQbCq_memberInfo{flex-direction:column;min-width:0;display:flex}.aYQbCq_captainInfo{gap:2px}.aYQbCq_captainLine,.aYQbCq_memberLine{align-items:center;gap:6px;min-width:0;display:flex}.aYQbCq_captainName,.aYQbCq_memberName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;line-height:18px;overflow:hidden}.aYQbCq_captainRole,.aYQbCq_memberRole{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.aYQbCq_captainSummary,.aYQbCq_memberStatusLine{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;line-height:15px;overflow:hidden}.aYQbCq_captainState,.aYQbCq_memberState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;align-items:center;gap:5px;font-size:10px;font-weight:500;line-height:15px;display:inline-flex}.aYQbCq_captainState[data-busy=true],.aYQbCq_memberState[data-activity=working]{color:var(--dsw-alias-state-business-primary)}.aYQbCq_delegationTree{flex-direction:column;gap:2px;margin-left:18px;padding:9px 0 0 20px;display:flex;position:relative}.aYQbCq_delegationTree:before{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));content:\"\";width:1px;position:absolute;top:0;bottom:22px;left:0}.aYQbCq_memberBlock{flex-direction:column;min-width:0;padding:3px 0 7px;display:flex;position:relative}.aYQbCq_memberBranch{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));width:20px;height:1px;display:block;position:absolute;top:23px;right:100%}.aYQbCq_memberBranch:before{background:var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;width:5px;height:5px;position:absolute;top:-2px;right:-1px}.aYQbCq_memberRow{box-sizing:border-box;width:100%;min-width:0;min-height:44px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:8px;padding:4px 6px;transition:background-color .12s,transform .12s;display:grid}.aYQbCq_memberRow:hover,.aYQbCq_memberRow[data-activity=working]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module))}.aYQbCq_memberRow:active{transform:scale(.995)}.aYQbCq_memberAvatar{width:34px;height:34px}.aYQbCq_memberAvatar[data-unread=true]:after{border:1px solid var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;animation:1.5s ease-out infinite aYQbCq_agentTeamsRing;position:absolute;inset:-3px}@keyframes aYQbCq_agentTeamsRing{0%{opacity:.82;transform:scale(.94)}75%,to{opacity:0;transform:scale(1.18)}}.aYQbCq_memberInitial{color:var(--dsw-alias-label-on-fill);justify-content:center;align-items:center;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.aYQbCq_stateArt{box-sizing:border-box;border:2px solid var(--dsw-alias-bg-module-platform);object-fit:cover;background:#0b1d33;border-radius:50%;width:19px;height:19px;position:absolute;bottom:-4px;right:-4px}.aYQbCq_stateArt[data-activity=working]{animation:2.4s ease-in-out infinite aYQbCq_agentTeamsFloat}.aYQbCq_stateArt[data-activity=idle]{animation:4.2s ease-in-out infinite aYQbCq_agentTeamsBreathe}.aYQbCq_stateArt[data-activity=unknown]{animation:2.8s ease-in-out infinite aYQbCq_agentTeamsThink}@keyframes aYQbCq_agentTeamsFloat{0%,to{transform:translateY(0)rotate(-4deg)}50%{transform:translateY(-2px)rotate(4deg)}}@keyframes aYQbCq_agentTeamsBreathe{0%,to{opacity:.82;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes aYQbCq_agentTeamsThink{0%,to{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.aYQbCq_memberState{margin-left:auto}.aYQbCq_memberCount{color:var(--dsw-alias-label-tertiary);font-size:10.5px;line-height:16px}.aYQbCq_assignmentLine{align-items:center;gap:7px;min-width:0;padding:0 6px 0 52px;display:flex}.aYQbCq_assignmentLabel{color:var(--dsw-alias-label-tertiary);flex:none;font-size:9.5px;line-height:14px}.aYQbCq_assignmentTasks{flex-wrap:wrap;flex:1;gap:4px;min-width:0;display:flex}.aYQbCq_assignmentChip{background:var(--dsw-alias-bg-fill-neutral);min-height:16px;color:var(--dsw-alias-label-secondary);border-radius:4px;align-items:center;padding:0 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px;font-weight:600;line-height:14px;display:inline-flex}.aYQbCq_assignmentChip[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.aYQbCq_unreadPill{color:var(--dsw-alias-state-business-primary);white-space:nowrap;flex:none;font-size:9.5px;font-weight:600;line-height:14px}.aYQbCq_taskEmpty{color:var(--dsw-alias-label-tertiary);font-size:9.5px;line-height:14px}.aYQbCq_dependencySection{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:7px;min-width:0;padding-top:10px;display:flex}.aYQbCq_stageFlow{scrollbar-width:thin;align-items:stretch;gap:0;min-width:0;padding:1px 1px 5px;display:flex;overflow-x:auto}.aYQbCq_stageGroup{flex:1 0 126px;min-width:126px;display:flex;position:relative}.aYQbCq_stageConnector{width:22px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;margin-top:0;display:flex}.aYQbCq_stageLine{background:var(--dsw-alias-line-strong);flex:1;height:1px;display:block}.aYQbCq_stageColumn{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.aYQbCq_stageLabel{color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:6px;padding:0 2px;font-size:9.5px;font-weight:600;line-height:14px;display:flex}.aYQbCq_stageLabel span{background:var(--dsw-alias-bg-fill-neutral);border-radius:4px;justify-content:center;align-items:center;min-width:14px;height:14px;font-size:8.5px;display:inline-flex}.aYQbCq_stageTasks{flex-direction:column;gap:5px;display:flex}.aYQbCq_taskNode{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);min-width:0;min-height:72px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;border-radius:8px;flex-direction:column;gap:4px;padding:7px 8px;transition:border-color .14s,opacity .14s,transform .12s,background-color .14s;display:flex}.aYQbCq_taskNode:hover,.aYQbCq_taskNode[data-focused=true]{border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module));transform:translateY(-1px)}.aYQbCq_taskNode[data-dimmed=true]{opacity:.34}.aYQbCq_taskNode[data-state=completed]{border-color:color-mix(in srgb, var(--dsw-alias-state-success) 48%, var(--dsw-alias-line-normal))}.aYQbCq_taskNode[data-state=blocked]{border-color:color-mix(in srgb, var(--dsw-alias-state-warning) 52%, var(--dsw-alias-line-normal))}.aYQbCq_taskNode[data-state=failed]{border-color:color-mix(in srgb, var(--dsw-alias-state-danger) 56%, var(--dsw-alias-line-normal))}.aYQbCq_taskNodeHead,.aYQbCq_taskRoute{justify-content:space-between;align-items:center;gap:5px;min-width:0;display:flex}.aYQbCq_taskId{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:700}.aYQbCq_taskBadge{background:var(--dsw-alias-bg-fill-neutral);min-height:14px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;align-items:center;padding:0 4px;font-size:8.5px;font-weight:600;line-height:13px;display:inline-flex}.aYQbCq_taskBadge[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.aYQbCq_taskSubject{min-height:30px;color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:10.5px;font-weight:500;line-height:15px;display:-webkit-box;overflow:hidden}.aYQbCq_taskRoute{color:var(--dsw-alias-label-tertiary);margin-top:auto;font-size:8.5px;line-height:13px}.aYQbCq_taskOwner,.aYQbCq_taskDeps{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.aYQbCq_taskOwner{max-width:48%;color:var(--dsw-alias-label-secondary);font-weight:600}.aYQbCq_taskDeps{text-align:right;flex:1}.aYQbCq_taskStart{color:var(--dsw-alias-label-tertiary)}.aYQbCq_unclaimed,.aYQbCq_inbox{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:5px;min-width:0;padding-top:10px;display:flex}.aYQbCq_unclaimedTitle{color:var(--dsw-alias-label-secondary);font-size:10.5px;font-weight:600;line-height:15px}.aYQbCq_inboxRow{border-radius:6px;grid-template-columns:112px minmax(0,1fr);align-items:center;gap:8px;min-width:0;min-height:24px;padding:2px 5px;display:grid}.aYQbCq_inboxRow:hover{background:var(--dsw-alias-bg-module)}.aYQbCq_inboxRoute{min-width:0;color:var(--dsw-alias-state-business-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:3px;font-size:9.5px;font-weight:600;line-height:14px;display:inline-flex;overflow:hidden}.aYQbCq_inboxContent{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.aYQbCq_emptyHint{color:var(--dsw-alias-label-tertiary);padding:10px 12px;font-size:11px;line-height:16px}.aYQbCq_team[data-historic],.aYQbCq_archivedWrap{opacity:.82}.aYQbCq_historicPill{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-tertiary);border-radius:4px;flex:none;margin-left:auto;padding:1px 7px;font-size:9.5px;font-weight:600;line-height:15px}.aYQbCq_members{flex-direction:column;gap:3px;display:flex}.aYQbCq_archivedWrap:before{color:var(--dsw-alias-label-tertiary);content:\"已结束 · 历史归档\";padding:5px 14px 0;font-size:9.5px;font-weight:600;line-height:14px;display:block}@media (prefers-reduced-motion:reduce){[data-phase=active],.aYQbCq_panel,.aYQbCq_badge,.aYQbCq_badgeDot,.aYQbCq_panelDot,.aYQbCq_stateArt,.aYQbCq_memberAvatar[data-unread=true]:after{transition:none;animation:none}}@media (width<=960px){html{--agent-teams-main-shift:0px}html[data-agent-teams-panel-open] [data-phase=active]{padding-right:0}}@media (width<=640px){html{--agent-teams-panel-right:calc(10px + var(--dsh-sidebar-width,0px))}.aYQbCq_panel{width:auto;max-height:calc(100dvh - 68px);top:56px;left:10px}.aYQbCq_badge{top:56px}.aYQbCq_teamStats span[data-stat=messages]{display:none}.aYQbCq_captainNode{grid-template-columns:38px minmax(0,1fr)}.aYQbCq_captainState{display:none}.aYQbCq_delegationTree{margin-left:12px;padding-left:15px}.aYQbCq_memberBranch{width:15px}.aYQbCq_assignmentLine{padding-left:45px}}";
265
275
  const tagId = "@nanmicoder/dsh-agent-teams/ActivityPanel.module.css";
266
276
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
267
277
  const tag = document.createElement("style");
@@ -271,86 +281,86 @@ window.__ModuleLoader__.load({
271
281
  document.head.appendChild(tag);
272
282
  }
273
283
  var ActivityPanel_module_css_default = {
274
- "agentTeamsBreathe": "qZToFW_agentTeamsBreathe",
275
- "agentTeamsFloat": "qZToFW_agentTeamsFloat",
276
- "agentTeamsPanelIn": "qZToFW_agentTeamsPanelIn",
277
- "agentTeamsPulse": "qZToFW_agentTeamsPulse",
278
- "agentTeamsRing": "qZToFW_agentTeamsRing",
279
- "agentTeamsThink": "qZToFW_agentTeamsThink",
280
- "archivedWrap": "qZToFW_archivedWrap",
281
- "assignmentChip": "qZToFW_assignmentChip",
282
- "assignmentLabel": "qZToFW_assignmentLabel",
283
- "assignmentLine": "qZToFW_assignmentLine",
284
- "assignmentTasks": "qZToFW_assignmentTasks",
285
- "badge": "qZToFW_badge",
286
- "badgeCount": "qZToFW_badgeCount",
287
- "badgeDot": "qZToFW_badgeDot",
288
- "captainAvatar": "qZToFW_captainAvatar",
289
- "captainInfo": "qZToFW_captainInfo",
290
- "captainLine": "qZToFW_captainLine",
291
- "captainName": "qZToFW_captainName",
292
- "captainNode": "qZToFW_captainNode",
293
- "captainRole": "qZToFW_captainRole",
294
- "captainState": "qZToFW_captainState",
295
- "captainSummary": "qZToFW_captainSummary",
296
- "closeButton": "qZToFW_closeButton",
297
- "delegationSection": "qZToFW_delegationSection",
298
- "delegationTree": "qZToFW_delegationTree",
299
- "dependencySection": "qZToFW_dependencySection",
300
- "emptyHint": "qZToFW_emptyHint",
301
- "historicPill": "qZToFW_historicPill",
302
- "inbox": "qZToFW_inbox",
303
- "inboxContent": "qZToFW_inboxContent",
304
- "inboxRoute": "qZToFW_inboxRoute",
305
- "inboxRow": "qZToFW_inboxRow",
306
- "leadAvatar": "qZToFW_leadAvatar",
307
- "memberArt": "qZToFW_memberArt",
308
- "memberAvatar": "qZToFW_memberAvatar",
309
- "memberBlock": "qZToFW_memberBlock",
310
- "memberBranch": "qZToFW_memberBranch",
311
- "memberCount": "qZToFW_memberCount",
312
- "memberInfo": "qZToFW_memberInfo",
313
- "memberInitial": "qZToFW_memberInitial",
314
- "memberLine": "qZToFW_memberLine",
315
- "memberName": "qZToFW_memberName",
316
- "memberRole": "qZToFW_memberRole",
317
- "memberRow": "qZToFW_memberRow",
318
- "memberState": "qZToFW_memberState",
319
- "memberStatusLine": "qZToFW_memberStatusLine",
320
- "members": "qZToFW_members",
321
- "panel": "qZToFW_panel",
322
- "panelDot": "qZToFW_panelDot",
323
- "panelHead": "qZToFW_panelHead",
324
- "panelTitle": "qZToFW_panelTitle",
325
- "sectionHead": "qZToFW_sectionHead",
326
- "sectionHint": "qZToFW_sectionHint",
327
- "sectionTitle": "qZToFW_sectionTitle",
328
- "stageColumn": "qZToFW_stageColumn",
329
- "stageConnector": "qZToFW_stageConnector",
330
- "stageFlow": "qZToFW_stageFlow",
331
- "stageGroup": "qZToFW_stageGroup",
332
- "stageLabel": "qZToFW_stageLabel",
333
- "stageLine": "qZToFW_stageLine",
334
- "stageTasks": "qZToFW_stageTasks",
335
- "stateArt": "qZToFW_stateArt",
336
- "taskBadge": "qZToFW_taskBadge",
337
- "taskDeps": "qZToFW_taskDeps",
338
- "taskEmpty": "qZToFW_taskEmpty",
339
- "taskId": "qZToFW_taskId",
340
- "taskNode": "qZToFW_taskNode",
341
- "taskNodeHead": "qZToFW_taskNodeHead",
342
- "taskOwner": "qZToFW_taskOwner",
343
- "taskRoute": "qZToFW_taskRoute",
344
- "taskStart": "qZToFW_taskStart",
345
- "taskSubject": "qZToFW_taskSubject",
346
- "team": "qZToFW_team",
347
- "teamHead": "qZToFW_teamHead",
348
- "teamName": "qZToFW_teamName",
349
- "teamStats": "qZToFW_teamStats",
350
- "teams": "qZToFW_teams",
351
- "unclaimed": "qZToFW_unclaimed",
352
- "unclaimedTitle": "qZToFW_unclaimedTitle",
353
- "unreadPill": "qZToFW_unreadPill"
284
+ "agentTeamsBreathe": "aYQbCq_agentTeamsBreathe",
285
+ "agentTeamsFloat": "aYQbCq_agentTeamsFloat",
286
+ "agentTeamsPanelIn": "aYQbCq_agentTeamsPanelIn",
287
+ "agentTeamsPulse": "aYQbCq_agentTeamsPulse",
288
+ "agentTeamsRing": "aYQbCq_agentTeamsRing",
289
+ "agentTeamsThink": "aYQbCq_agentTeamsThink",
290
+ "archivedWrap": "aYQbCq_archivedWrap",
291
+ "assignmentChip": "aYQbCq_assignmentChip",
292
+ "assignmentLabel": "aYQbCq_assignmentLabel",
293
+ "assignmentLine": "aYQbCq_assignmentLine",
294
+ "assignmentTasks": "aYQbCq_assignmentTasks",
295
+ "badge": "aYQbCq_badge",
296
+ "badgeCount": "aYQbCq_badgeCount",
297
+ "badgeDot": "aYQbCq_badgeDot",
298
+ "captainAvatar": "aYQbCq_captainAvatar",
299
+ "captainInfo": "aYQbCq_captainInfo",
300
+ "captainLine": "aYQbCq_captainLine",
301
+ "captainName": "aYQbCq_captainName",
302
+ "captainNode": "aYQbCq_captainNode",
303
+ "captainRole": "aYQbCq_captainRole",
304
+ "captainState": "aYQbCq_captainState",
305
+ "captainSummary": "aYQbCq_captainSummary",
306
+ "closeButton": "aYQbCq_closeButton",
307
+ "delegationSection": "aYQbCq_delegationSection",
308
+ "delegationTree": "aYQbCq_delegationTree",
309
+ "dependencySection": "aYQbCq_dependencySection",
310
+ "emptyHint": "aYQbCq_emptyHint",
311
+ "historicPill": "aYQbCq_historicPill",
312
+ "inbox": "aYQbCq_inbox",
313
+ "inboxContent": "aYQbCq_inboxContent",
314
+ "inboxRoute": "aYQbCq_inboxRoute",
315
+ "inboxRow": "aYQbCq_inboxRow",
316
+ "leadAvatar": "aYQbCq_leadAvatar",
317
+ "memberArt": "aYQbCq_memberArt",
318
+ "memberAvatar": "aYQbCq_memberAvatar",
319
+ "memberBlock": "aYQbCq_memberBlock",
320
+ "memberBranch": "aYQbCq_memberBranch",
321
+ "memberCount": "aYQbCq_memberCount",
322
+ "memberInfo": "aYQbCq_memberInfo",
323
+ "memberInitial": "aYQbCq_memberInitial",
324
+ "memberLine": "aYQbCq_memberLine",
325
+ "memberName": "aYQbCq_memberName",
326
+ "memberRole": "aYQbCq_memberRole",
327
+ "memberRow": "aYQbCq_memberRow",
328
+ "memberState": "aYQbCq_memberState",
329
+ "memberStatusLine": "aYQbCq_memberStatusLine",
330
+ "members": "aYQbCq_members",
331
+ "panel": "aYQbCq_panel",
332
+ "panelDot": "aYQbCq_panelDot",
333
+ "panelHead": "aYQbCq_panelHead",
334
+ "panelTitle": "aYQbCq_panelTitle",
335
+ "sectionHead": "aYQbCq_sectionHead",
336
+ "sectionHint": "aYQbCq_sectionHint",
337
+ "sectionTitle": "aYQbCq_sectionTitle",
338
+ "stageColumn": "aYQbCq_stageColumn",
339
+ "stageConnector": "aYQbCq_stageConnector",
340
+ "stageFlow": "aYQbCq_stageFlow",
341
+ "stageGroup": "aYQbCq_stageGroup",
342
+ "stageLabel": "aYQbCq_stageLabel",
343
+ "stageLine": "aYQbCq_stageLine",
344
+ "stageTasks": "aYQbCq_stageTasks",
345
+ "stateArt": "aYQbCq_stateArt",
346
+ "taskBadge": "aYQbCq_taskBadge",
347
+ "taskDeps": "aYQbCq_taskDeps",
348
+ "taskEmpty": "aYQbCq_taskEmpty",
349
+ "taskId": "aYQbCq_taskId",
350
+ "taskNode": "aYQbCq_taskNode",
351
+ "taskNodeHead": "aYQbCq_taskNodeHead",
352
+ "taskOwner": "aYQbCq_taskOwner",
353
+ "taskRoute": "aYQbCq_taskRoute",
354
+ "taskStart": "aYQbCq_taskStart",
355
+ "taskSubject": "aYQbCq_taskSubject",
356
+ "team": "aYQbCq_team",
357
+ "teamHead": "aYQbCq_teamHead",
358
+ "teamName": "aYQbCq_teamName",
359
+ "teamStats": "aYQbCq_teamStats",
360
+ "teams": "aYQbCq_teams",
361
+ "unclaimed": "aYQbCq_unclaimed",
362
+ "unclaimedTitle": "aYQbCq_unclaimedTitle",
363
+ "unreadPill": "aYQbCq_unreadPill"
354
364
  };
355
365
  //#endregion
356
366
  //#region lib/client/ActivityPanel.js
@@ -477,7 +487,7 @@ window.__ModuleLoader__.load({
477
487
  return dependency?.assignee ? `${id}·${dependency.assignee}` : id;
478
488
  }).join("、");
479
489
  }
480
- function TaskNode({ task, tasks, focused, dimmed, pinned, onPin, onPreview }) {
490
+ function TaskNode({ task, tasks, focused, dimmed, pinned, onPin, onHover, onFocusChange }) {
481
491
  const tone = taskTone(task.state, task.status);
482
492
  return (0, react_jsx_runtime.jsxs)("button", {
483
493
  type: "button",
@@ -487,21 +497,21 @@ window.__ModuleLoader__.load({
487
497
  "data-focused": focused,
488
498
  "data-dimmed": dimmed,
489
499
  "aria-pressed": pinned,
490
- title: `${task.id} · ${task.subject}(点击固定依赖链)`,
500
+ title: `${task.id} · ${task.subject}(悬停高亮依赖链 · 点击固定)`,
491
501
  onClick: () => {
492
502
  onPin(task.id);
493
503
  },
494
504
  onMouseEnter: () => {
495
- onPreview(task.id);
505
+ onHover(task.id);
496
506
  },
497
507
  onMouseLeave: () => {
498
- onPreview(null);
508
+ onHover(null);
499
509
  },
500
510
  onFocus: () => {
501
- onPreview(task.id);
511
+ onFocusChange(task.id);
502
512
  },
503
513
  onBlur: () => {
504
- onPreview(null);
514
+ onFocusChange(null);
505
515
  },
506
516
  children: [
507
517
  (0, react_jsx_runtime.jsxs)("span", {
@@ -536,11 +546,30 @@ window.__ModuleLoader__.load({
536
546
  });
537
547
  }
538
548
  function DependencyMap({ tasks }) {
539
- const [previewTaskId, setPreviewTaskId] = (0, react.useState)(null);
549
+ const [hoverTaskId, setHoverTaskId] = (0, react.useState)(null);
550
+ const [keyboardTaskId, setKeyboardTaskId] = (0, react.useState)(null);
540
551
  const [pinnedTaskId, setPinnedTaskId] = (0, react.useState)(null);
541
- const focusedTaskId = pinnedTaskId ?? previewTaskId;
552
+ const hoverTimer = (0, react.useRef)(null);
553
+ const focusedTaskId = dependencyFocusTaskId(pinnedTaskId, keyboardTaskId, hoverTaskId);
542
554
  const stages = (0, react.useMemo)(() => taskStages(tasks), [tasks]);
543
555
  const related = (0, react.useMemo)(() => focusedTaskId === null ? null : relatedTaskIds(focusedTaskId, tasks), [focusedTaskId, tasks]);
556
+ const scheduleHover = (id) => {
557
+ if (hoverTimer.current !== null) {
558
+ clearTimeout(hoverTimer.current);
559
+ hoverTimer.current = null;
560
+ }
561
+ if (id === null) {
562
+ setHoverTaskId(null);
563
+ return;
564
+ }
565
+ hoverTimer.current = setTimeout(() => {
566
+ hoverTimer.current = null;
567
+ setHoverTaskId(id);
568
+ }, 180);
569
+ };
570
+ (0, react.useEffect)(() => () => {
571
+ if (hoverTimer.current !== null) clearTimeout(hoverTimer.current);
572
+ }, []);
544
573
  (0, react.useEffect)(() => {
545
574
  const onKeyDown = (event) => {
546
575
  if (event.key === "Escape") setPinnedTaskId(null);
@@ -562,7 +591,7 @@ window.__ModuleLoader__.load({
562
591
  children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutline16, {}), " 任务依赖"]
563
592
  }), (0, react_jsx_runtime.jsx)("span", {
564
593
  className: ActivityPanel_module_css_default.sectionHint,
565
- children: pinnedTaskId === null ? "悬停预览 · 点击固定" : `${pinnedTaskId} 已固定 · Esc 取消`
594
+ children: pinnedTaskId === null ? "悬停高亮依赖链 · 点击固定" : `${pinnedTaskId} 已固定 · Esc 取消`
566
595
  })]
567
596
  }), (0, react_jsx_runtime.jsx)("div", {
568
597
  className: ActivityPanel_module_css_default.stageFlow,
@@ -589,7 +618,8 @@ window.__ModuleLoader__.load({
589
618
  onPin: (id) => {
590
619
  setPinnedTaskId((current) => current === id ? null : id);
591
620
  },
592
- onPreview: setPreviewTaskId
621
+ onHover: scheduleHover,
622
+ onFocusChange: setKeyboardTaskId
593
623
  }, task.id))
594
624
  })]
595
625
  })]
@@ -1232,4 +1262,4 @@ window.__ModuleLoader__.load({
1232
1262
  }
1233
1263
  });
1234
1264
 
1235
- //# sourceMappingURL=client.js.map
1265
+ //# sourceMappingURL=client.js.map
package/lib/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["css","css","IconBranchOutline16","IconChevronRightOutline14","StateDot","_Fragment","IconCloseOutline16"],"sources":["client/activity-model.js","client/artwork.js","client/AgentTeamsCard.js","client/ActivityPanel.js","client/agent-teams-card-definition.js","client/index.js"],"sourcesContent":["/** Pure relationship projections used by the AgentTeams activity panel. */\n/**\n * Whether an expanded activity panel still belongs to the current session.\n *\n * The panel is mounted through a body portal, so React does not remount it\n * when the conversation route changes. Ownership keeps an expanded panel\n * from leaking onto the new-session screen (or another conversation) while\n * its local open state is being reset.\n */\nexport function activityPanelExpandedForSession(open, owner, current) {\n return open && owner !== undefined && owner === current;\n}\n/** Group tasks by their precomputed dependency depth. */\nexport function taskStages(tasks) {\n const byDepth = new Map();\n for (const task of tasks) {\n const depth = Number.isFinite(task.depth) ? Math.max(0, Math.floor(task.depth)) : 0;\n const stage = byDepth.get(depth) ?? [];\n stage.push(task);\n byDepth.set(depth, stage);\n }\n return [...byDepth.entries()]\n .sort(([left], [right]) => left - right)\n .map(([depth, stageTasks]) => ({\n depth,\n tasks: stageTasks.slice().sort((left, right) => left.id.localeCompare(right.id, 'en', { numeric: true })),\n }));\n}\n/**\n * Return the complete upstream/downstream chain around one task.\n *\n * Traversal uses both dependency directions and remains cycle-safe, so the UI\n * can highlight every handoff related to the focused task even if malformed\n * durable data contains a cycle.\n */\nexport function relatedTaskIds(taskId, tasks) {\n const byId = new Map(tasks.map((task) => [task.id, task]));\n if (!byId.has(taskId))\n return new Set();\n const dependents = new Map();\n for (const task of tasks) {\n for (const dependency of task.dependencies) {\n const targets = dependents.get(dependency) ?? [];\n targets.push(task.id);\n dependents.set(dependency, targets);\n }\n }\n const related = new Set();\n const upstreamSeen = new Set();\n const downstreamSeen = new Set();\n const visitUpstream = (id) => {\n if (upstreamSeen.has(id))\n return;\n upstreamSeen.add(id);\n related.add(id);\n for (const dependency of byId.get(id)?.dependencies ?? [])\n visitUpstream(dependency);\n };\n const visitDownstream = (id) => {\n if (downstreamSeen.has(id))\n return;\n downstreamSeen.add(id);\n related.add(id);\n for (const dependent of dependents.get(id) ?? [])\n visitDownstream(dependent);\n };\n visitUpstream(taskId);\n visitDownstream(taskId);\n return related;\n}\n","/**\n * Shared whale artwork lookup for the activity panel and the conversation\n * card: role keywords map to the packaged role images; the captain always\n * uses the lead whale.\n * @module dsh-agent-teams/client/artwork\n */\n/** Artwork route prefix served by the plugin host half. */\nexport const ART_BASE = '/plugins/dsh-agent-teams/assets/';\n/** Whale role artwork per role keyword. */\nconst ROLE_ART = [\n [/resear|analys|investig|explor|data|study|研究|分析|数据|调查|探索|调研/, 'researcher.png'],\n [/engineer|dev\\b|server|backend|\\bapi\\b|runtime|watcher|contract|工程|后端|服务|接口|开发|代码|编程/, 'engineer.png'],\n [/\\bqa\\b|test|verif|quality|测试|质量/, 'qa-engineer.png'],\n [/design|\\bui\\b|\\bux\\b|front|theme|accessib|设计|前端|主题/, 'designer.png'],\n [/secur|audit|risk|threat|review|安全|审计|审查|风险/, 'security-reviewer.png'],\n [/docs|writer|product|spec|coordin|撰写|文案|写作|文档|协调/, 'docs-coordinator.png'],\n [/release|\\bbuild\\b|deploy|\\bops\\b|\\bci\\b|ship|发布|构建|部署/, 'engineer.png'],\n];\n/** Captain artwork (always the lead whale). */\nexport const LEAD_ART = `${ART_BASE}team-lead.png`;\n/** Status action artwork per member activity. */\nexport const ACTION_ART = {\n working: `${ART_BASE}action-working.png`,\n idle: `${ART_BASE}action-sleeping.png`,\n unknown: `${ART_BASE}action-thinking.png`,\n};\n/**\n * Member artwork URL, or null when no role matches (initial-letter fallback).\n * @param name - the member's display name.\n * @param role - the member's role text.\n * @returns the artwork URL, or null when unmatched.\n */\nexport function memberArtUrl(name, role) {\n const identity = `${name} ${role}`.toLowerCase();\n for (const [pattern, art] of ROLE_ART) {\n if (pattern.test(identity))\n return `${ART_BASE}${art}`;\n }\n return null;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * AgentTeams conversation card: the lightweight in-conversation summary for\n * one team — the captain's whale avatar and name, the member roster as\n * clickable whale avatars (opening the member's subagent transcript), and\n * an \"activity panel\" button that re-activates the top-right floater.\n *\n * The floater and this card share the `agent-teams:open-panel` window event\n * so the card can summon the panel even after it was closed (or when an old\n * session is re-opened for review).\n * @module dsh-agent-teams/client/card\n */\nimport { useEffect, useMemo, useState } from 'react';\nimport { LEAD_ART, memberArtUrl } from \"./artwork.js\";\nimport css from './AgentTeamsCard.module.css';\n/** Window event name the floater listens for to open itself. */\nexport const OPEN_PANEL_EVENT = 'agent-teams:open-panel';\n/** Re-activate the top-right activity panel, carrying this team's summary\n * so the panel can show it even when the team no longer exists on disk\n * (historical session review). */\nfunction openActivityPanel(data) {\n window.dispatchEvent(new CustomEvent(OPEN_PANEL_EVENT, {\n detail: {\n teamId: data.teamId,\n captainSessionId: data.captainSessionId,\n teamName: data.teamName,\n members: data.members,\n },\n }));\n}\n/** Render one durable team as a compact conversation card. */\nexport function AgentTeamsCard({ node, openSession, currentSessionId }) {\n const data = node.data;\n const owner = data.captainSessionId || currentSessionId() || '';\n const [snapshot, setSnapshot] = useState();\n useEffect(() => {\n let cancelled = false;\n const tick = async () => {\n for (const url of ['/plugins/dsh-agent-teams/state', '/plugins/dsh-agent-teams/state?archived=1']) {\n try {\n const response = await fetch(url, { cache: 'no-store' });\n if (!response.ok)\n continue;\n const body = (await response.json());\n const found = Array.isArray(body.teams)\n ? body.teams.find((team) => team.teamId === data.teamId && (owner === '' || team.captainSessionId === owner))\n : undefined;\n if (found !== undefined) {\n if (!cancelled)\n setSnapshot(found);\n return;\n }\n }\n catch {\n // Host restarting; retry on the next poll.\n }\n }\n };\n void tick();\n const timer = setInterval(() => { void tick(); }, 1500);\n return () => {\n cancelled = true;\n clearInterval(timer);\n };\n }, [data.teamId, owner]);\n const resolved = useMemo(() => ({\n ...data,\n captainSessionId: snapshot?.captainSessionId ?? owner,\n teamName: snapshot?.name ?? data.teamName,\n members: snapshot?.members.map((member) => ({ id: member.id, name: member.name, role: member.role })) ?? data.members,\n }), [data, owner, snapshot]);\n return (_jsxs(\"section\", { className: css.root, \"data-agent-teams-card\": true, \"data-team-id\": resolved.teamId, children: [_jsxs(\"header\", { className: css.head, children: [_jsx(\"img\", { className: css.leadAvatar, src: LEAD_ART, alt: \"\", \"aria-hidden\": true }), _jsx(\"span\", { className: css.teamName, title: resolved.teamName, children: resolved.teamName }), _jsxs(\"span\", { className: css.memberCount, children: [resolved.members.length, \" \\u540D\\u6210\\u5458\"] }), _jsx(\"button\", { type: \"button\", className: css.panelButton, onClick: () => { openActivityPanel(resolved); }, \"aria-label\": \"\\u6253\\u5F00\\u6D3B\\u52A8\\u9762\\u677F\", title: \"\\u6253\\u5F00\\u6D3B\\u52A8\\u9762\\u677F\", children: \"\\u6D3B\\u52A8\\u9762\\u677F\" })] }), resolved.members.length > 0 && (_jsx(\"div\", { className: css.members, children: resolved.members.map((member) => (_jsxs(\"button\", { type: \"button\", className: css.member, onClick: () => { if (member.id !== '')\n openSession(member.id); }, title: member.role === '' ? member.name : `${member.name} · ${member.role}`, children: [memberArtUrl(member.name, member.role) !== null ? (_jsx(\"img\", { className: css.memberArt, src: memberArtUrl(member.name, member.role) ?? '', alt: \"\", \"aria-hidden\": true })) : (_jsx(\"span\", { className: css.memberInitial, children: member.name.trim().slice(0, 1).toUpperCase() || '?' })), _jsx(\"span\", { className: css.memberName, children: member.name })] }, member.id))) }))] }));\n}\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * AgentTeams activity panel: the top-right floater monitoring every team.\n *\n * Modeled on the Claude Code desktop SessionActivityPanel: a fixed glass\n * panel at the top-right corner. On wide viewports it cooperatively makes the\n * conversation column yield space; narrow viewports keep overlay mode. It\n * polls the host `/plugins/dsh-agent-teams/state` route for\n * server-side snapshots (durable files + live subagent activity), with a\n * collapsed badge that auto-expands once when activity appears. Archived\n * teams stay available for the owning conversation after live work ends.\n *\n * The floater mounts through a body portal (no top-right slot exists in the\n * web shell); it is not a conversation node — the in-conversation panel was\n * removed in favor of this always-available monitor.\n * @module dsh-agent-teams/client/activity\n */\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { IconBranchOutline16, IconChevronRightOutline14, IconCloseOutline16, StateDot, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { activityPanelExpandedForSession, relatedTaskIds, taskStages } from \"./activity-model.js\";\nimport { ACTION_ART, LEAD_ART, memberArtUrl } from \"./artwork.js\";\nimport { OPEN_PANEL_EVENT } from \"./AgentTeamsCard.js\";\nimport css from './ActivityPanel.module.css';\n/** Poll cadence for the host snapshot route. */\nconst POLL_MS = 1000;\n/** Grace before the panel collapses once no team remains. */\nconst AUTOCLOSE_GRACE_MS = 2000;\n/**\n * Page-settle window after mount: activity restored on page load only shows\n * the collapsed badge, so the panel never yanks the conversation column\n * right after load. New activity after this window auto-expands as usual.\n */\nconst AUTO_OPEN_SETTLE_MS = 4000;\n/** Host route serving team snapshots. */\nconst STATE_URL = '/plugins/dsh-agent-teams/state';\n/** Root marker shared with the panel CSS while the portal is expanded. */\nconst PANEL_OPEN_ATTRIBUTE = 'data-agent-teams-panel-open';\n/** Initial-letter fallback for unmatched roles. */\nfunction memberInitial(name) {\n return name.trim().slice(0, 1).toUpperCase() || '?';\n}\nfunction stableHash(value) {\n let hash = 0;\n for (let index = 0; index < value.length; index += 1) {\n hash = ((hash << 5) - hash + value.charCodeAt(index)) | 0;\n }\n return Math.abs(hash);\n}\nconst ACCENTS = [\n 'var(--dsw-alias-state-business-primary)',\n 'var(--dsw-alias-state-success)',\n 'var(--dsw-alias-state-danger)',\n 'var(--dsw-alias-state-warning)',\n 'var(--dsw-alias-label-tertiary)',\n];\nfunction accentOf(id) {\n return ACCENTS[stableHash(id) % ACCENTS.length] ?? ACCENTS[0];\n}\n/** Badge text follows the raw task status (finer than the 4 visual states):\n * claimed/pending/failed/cancelled keep their own labels and colors. */\nconst TASK_STATUS_LABEL = {\n pending: '待领取',\n claimed: '已认领',\n in_progress: '进行中',\n completed: '已完成',\n failed: '失败',\n cancelled: '已取消',\n};\nfunction taskStatusLabel(status) {\n return TASK_STATUS_LABEL[status] ?? status;\n}\n/** Badge/bar coloring key: visual state, widened for terminal statuses. */\nfunction taskTone(state, status) {\n if (status === 'failed')\n return 'failed';\n if (status === 'cancelled')\n return 'cancelled';\n return state;\n}\n/** Collapsed badge: an always-visible corner pill while any team exists. */\nfunction CollapsedBadge({ count, busy, onClick }) {\n return (_jsxs(\"button\", { type: \"button\", className: css.badge, \"data-busy\": busy, onClick: onClick, \"aria-label\": `AgentTeams 活动,${count} 个团队`, children: [_jsx(\"span\", { className: css.badgeDot, \"data-busy\": busy, \"aria-hidden\": true }), _jsx(\"span\", { className: css.badgeCount, children: count })] }));\n}\nfunction memberDotState(member, tasks) {\n const owned = tasks.filter((task) => task.assignee === member.name);\n if (member.activity === 'working')\n return 'ongoing';\n if (owned.some((task) => task.status === 'failed'))\n return 'error';\n if (owned.length > 0 && owned.every((task) => task.status === 'completed'))\n return 'done';\n return 'warning';\n}\nfunction memberStateLabel(member, tasks) {\n const owned = tasks.filter((task) => task.assignee === member.name);\n if (member.activity === 'working')\n return '工作中';\n if (owned.some((task) => task.status === 'failed'))\n return '有失败';\n if (owned.some((task) => task.state === 'blocked'))\n return '等待';\n if (owned.length > 0 && owned.every((task) => task.status === 'completed'))\n return '已交付';\n if (owned.length > 0)\n return '待执行';\n return '待派工';\n}\nfunction memberStatusText(member, tasks) {\n const owned = tasks.filter((task) => task.assignee === member.name);\n const current = owned.find((task) => task.id === member.currentTask);\n const blocked = owned.find((task) => task.state === 'blocked');\n if (member.activity === 'working' && current !== undefined)\n return `正在执行 ${current.id}`;\n if (member.activity === 'working')\n return '正在处理已派任务';\n if (blocked !== undefined) {\n const dependency = tasks.find((task) => blocked.dependencies.includes(task.id) && task.state !== 'completed');\n if (dependency !== undefined)\n return `等待 ${dependency.id} · ${dependency.assignee || '待认领'}`;\n return '等待前置任务';\n }\n if (member.total === 0)\n return '等待队长派工';\n if (member.done === member.total)\n return '任务已交付';\n return member.activity === 'idle' ? '待继续执行' : '状态未知';\n}\nfunction dependencyLabel(task, tasks) {\n return task.dependencies.map((id) => {\n const dependency = tasks.find((candidate) => candidate.id === id);\n return dependency?.assignee ? `${id}·${dependency.assignee}` : id;\n }).join('、');\n}\nfunction TaskNode({ task, tasks, focused, dimmed, pinned, onPin, onPreview }) {\n const tone = taskTone(task.state, task.status);\n return (_jsxs(\"button\", { type: \"button\", className: css.taskNode, \"data-task-id\": task.id, \"data-state\": tone, \"data-focused\": focused, \"data-dimmed\": dimmed, \"aria-pressed\": pinned, title: `${task.id} · ${task.subject}(点击固定依赖链)`, onClick: () => { onPin(task.id); }, onMouseEnter: () => { onPreview(task.id); }, onMouseLeave: () => { onPreview(null); }, onFocus: () => { onPreview(task.id); }, onBlur: () => { onPreview(null); }, children: [_jsxs(\"span\", { className: css.taskNodeHead, children: [_jsx(\"span\", { className: css.taskId, children: task.id }), _jsx(\"span\", { className: css.taskBadge, \"data-state\": tone, children: taskStatusLabel(task.status) })] }), _jsx(\"span\", { className: css.taskSubject, children: task.subject }), _jsxs(\"span\", { className: css.taskRoute, children: [_jsx(\"span\", { className: css.taskOwner, children: task.assignee || '待认领' }), task.dependencies.length === 0\n ? _jsx(\"span\", { className: css.taskStart, children: \"\\u8D77\\u70B9\" })\n : _jsxs(\"span\", { className: css.taskDeps, children: [\"\\u4F9D\\u8D56 \", dependencyLabel(task, tasks)] })] })] }));\n}\nfunction DependencyMap({ tasks }) {\n const [previewTaskId, setPreviewTaskId] = useState(null);\n const [pinnedTaskId, setPinnedTaskId] = useState(null);\n const focusedTaskId = pinnedTaskId ?? previewTaskId;\n const stages = useMemo(() => taskStages(tasks), [tasks]);\n const related = useMemo(() => focusedTaskId === null ? null : relatedTaskIds(focusedTaskId, tasks), [focusedTaskId, tasks]);\n useEffect(() => {\n const onKeyDown = (event) => {\n if (event.key === 'Escape')\n setPinnedTaskId(null);\n };\n window.addEventListener('keydown', onKeyDown);\n return () => { window.removeEventListener('keydown', onKeyDown); };\n }, []);\n if (tasks.length === 0)\n return null;\n return (_jsxs(\"section\", { className: css.dependencySection, \"aria-label\": \"\\u4EFB\\u52A1\\u4F9D\\u8D56\\u94FE\", \"data-dependency-map\": true, children: [_jsxs(\"header\", { className: css.sectionHead, children: [_jsxs(\"span\", { className: css.sectionTitle, children: [_jsx(IconBranchOutline16, {}), \" \\u4EFB\\u52A1\\u4F9D\\u8D56\"] }), _jsx(\"span\", { className: css.sectionHint, children: pinnedTaskId === null ? '悬停预览 · 点击固定' : `${pinnedTaskId} 已固定 · Esc 取消` })] }), _jsx(\"div\", { className: css.stageFlow, children: stages.map((stage, index) => (_jsxs(\"div\", { className: css.stageGroup, \"data-depth\": stage.depth, children: [index > 0 && (_jsxs(\"span\", { className: css.stageConnector, \"aria-hidden\": true, children: [_jsx(\"span\", { className: css.stageLine }), _jsx(IconChevronRightOutline14, {})] })), _jsxs(\"div\", { className: css.stageColumn, children: [_jsxs(\"span\", { className: css.stageLabel, children: [stage.depth === 0 ? '起点' : `依赖层 ${stage.depth}`, _jsx(\"span\", { children: stage.tasks.length })] }), _jsx(\"div\", { className: css.stageTasks, children: stage.tasks.map((task) => (_jsx(TaskNode, { task: task, tasks: tasks, focused: related?.has(task.id) ?? false, dimmed: related !== null && !related.has(task.id), pinned: pinnedTaskId === task.id, onPin: (id) => { setPinnedTaskId((current) => current === id ? null : id); }, onPreview: setPreviewTaskId }, task.id))) })] })] }, stage.depth))) })] }));\n}\nfunction TeamSection({ team, onNavigate, historic = false }) {\n const busyCount = team.members.filter((member) => member.activity === 'working').length;\n const assignedCount = team.tasks.filter((task) => task.assignee !== '').length;\n const completedCount = team.tasks.filter((task) => task.status === 'completed').length;\n const allCompleted = team.tasks.length > 0 && completedCount === team.tasks.length;\n const unclaimed = team.tasks.filter((task) => {\n if (task.status === 'completed' || task.status === 'failed' || task.status === 'cancelled')\n return false;\n if (task.assignee === '')\n return true;\n return !team.members.some((member) => member.name === task.assignee);\n });\n return (_jsxs(\"section\", { className: css.team, \"data-team-id\": team.teamId, children: [_jsxs(\"header\", { className: css.teamHead, children: [_jsx(\"span\", { className: css.teamName, title: team.name, children: team.name }), historic && _jsx(\"span\", { className: css.historicPill, children: \"\\u5DF2\\u7ED3\\u675F\" }), _jsxs(\"span\", { className: css.teamStats, children: [_jsxs(\"span\", { \"data-stat\": \"members\", children: [team.members.length, \" \\u6210\\u5458\"] }), _jsxs(\"span\", { \"data-stat\": \"tasks\", children: [completedCount, \"/\", team.tasks.length, \" \\u5B8C\\u6210\"] }), _jsxs(\"span\", { \"data-stat\": \"messages\", children: [team.messageCount, \" \\u6D88\\u606F\"] })] })] }), _jsxs(\"section\", { className: css.delegationSection, \"aria-label\": \"\\u961F\\u957F\\u6D3E\\u5DE5\\u5173\\u7CFB\", \"data-delegation-map\": true, children: [_jsxs(\"div\", { className: css.captainNode, children: [_jsx(\"span\", { className: css.captainAvatar, children: _jsx(\"img\", { className: css.leadAvatar, src: LEAD_ART, alt: \"\", \"aria-hidden\": true }) }), _jsxs(\"span\", { className: css.captainInfo, children: [_jsxs(\"span\", { className: css.captainLine, children: [_jsx(\"span\", { className: css.captainName, children: \"\\u961F\\u957F\" }), _jsx(\"span\", { className: css.captainRole, children: \"\\u62C6\\u89E3 \\u00B7 \\u6D3E\\u53D1 \\u00B7 \\u6C47\\u603B\" })] }), _jsxs(\"span\", { className: css.captainSummary, children: [\"\\u5DF2\\u6D3E\\u53D1 \", assignedCount, \" \\u9879\\u4EFB\\u52A1\\u7ED9 \", team.members.length, \" \\u540D\\u6210\\u5458\"] })] }), _jsxs(\"span\", { className: css.captainState, \"data-busy\": busyCount > 0, children: [_jsx(StateDot, { state: busyCount > 0 ? 'ongoing' : allCompleted ? 'done' : 'warning' }), busyCount > 0 ? `${busyCount} 人执行中` : allCompleted ? '已收齐' : '等待回报'] })] }), _jsxs(\"div\", { className: css.delegationTree, children: [team.members.length === 0 && _jsx(\"span\", { className: css.emptyHint, children: \"\\u6682\\u65E0\\u6210\\u5458\\uFF0C\\u7B49\\u5F85\\u961F\\u957F\\u7EC4\\u5EFA\\u56E2\\u961F\" }), team.members.map((member) => {\n const owned = team.tasks.filter((task) => task.assignee === member.name);\n return (_jsxs(\"div\", { className: css.memberBlock, \"data-activity\": member.activity, children: [_jsx(\"span\", { className: css.memberBranch, \"aria-hidden\": true, children: _jsx(\"span\", {}) }), _jsxs(\"button\", { type: \"button\", className: css.memberRow, \"data-activity\": member.activity, onClick: () => { if (member.id !== '')\n onNavigate(member.id); }, children: [_jsxs(\"span\", { className: css.memberAvatar, \"data-unread\": member.unread > 0, children: [memberArtUrl(member.name, member.role) !== null ? (_jsx(\"img\", { className: css.memberArt, src: memberArtUrl(member.name, member.role) ?? '', alt: \"\", \"aria-hidden\": true })) : (_jsx(\"span\", { className: css.memberInitial, style: { background: accentOf(member.id) }, children: memberInitial(member.name) })), _jsx(\"img\", { className: css.stateArt, \"data-activity\": member.activity, src: ACTION_ART[member.activity], alt: \"\", \"aria-hidden\": true })] }), _jsxs(\"span\", { className: css.memberInfo, children: [_jsxs(\"span\", { className: css.memberLine, children: [_jsx(\"span\", { className: css.memberName, children: member.name }), member.role !== '' && _jsx(\"span\", { className: css.memberRole, children: member.role }), _jsxs(\"span\", { className: css.memberState, \"data-activity\": member.activity, children: [_jsx(StateDot, { state: memberDotState(member, team.tasks) }), memberStateLabel(member, team.tasks)] })] }), _jsx(\"span\", { className: css.memberStatusLine, children: memberStatusText(member, team.tasks) })] }), _jsxs(\"span\", { className: css.memberCount, children: [member.done, \"/\", member.total] })] }), _jsxs(\"div\", { className: css.assignmentLine, children: [_jsx(\"span\", { className: css.assignmentLabel, children: \"\\u961F\\u957F\\u6D3E\\u53D1\" }), _jsx(\"span\", { className: css.assignmentTasks, children: owned.length === 0\n ? _jsx(\"span\", { className: css.taskEmpty, children: \"\\u6682\\u65E0\\u4EFB\\u52A1\" })\n : owned.map((task) => (_jsx(\"span\", { className: css.assignmentChip, \"data-state\": taskTone(task.state, task.status), title: task.subject, children: task.id }, task.id))) }), member.unread > 0 && _jsxs(\"span\", { className: css.unreadPill, children: [member.unread, \" \\u6761\\u6D88\\u606F\"] })] })] }, member.id));\n })] })] }), _jsx(DependencyMap, { tasks: team.tasks }), unclaimed.length > 0 && (_jsxs(\"section\", { className: css.unclaimed, \"aria-label\": \"\\u5F85\\u8BA4\\u9886\\u4EFB\\u52A1\", children: [_jsx(\"span\", { className: css.unclaimedTitle, children: \"\\u5F85\\u961F\\u957F\\u8BA4\\u9886\\u6216\\u6539\\u6D3E\" }), _jsx(\"span\", { className: css.assignmentTasks, children: unclaimed.map((task) => (_jsxs(\"span\", { className: css.assignmentChip, \"data-state\": taskTone(task.state, task.status), title: task.subject, children: [task.id, \" \\u00B7 \", task.assignee || '未分配'] }, task.id))) })] })), team.captainInbox.length > 0 && (_jsxs(\"section\", { className: css.inbox, \"aria-label\": \"\\u6210\\u5458\\u56DE\\u62A5\\u961F\\u957F\", children: [_jsxs(\"header\", { className: css.sectionHead, children: [_jsx(\"span\", { className: css.sectionTitle, children: \"\\u6210\\u5458\\u56DE\\u62A5\" }), _jsx(\"span\", { className: css.sectionHint, children: \"\\u6D41\\u5411\\u961F\\u957F\" })] }), team.captainInbox.slice(-2).map((message, index) => (_jsxs(\"div\", { className: css.inboxRow, children: [_jsxs(\"span\", { className: css.inboxRoute, children: [message.from, _jsx(IconChevronRightOutline14, {}), \"\\u961F\\u957F\"] }), _jsx(\"span\", { className: css.inboxContent, title: message.content, children: message.content })] }, index)))] }))] }));\n}\n/** The top-right activity floater. Teams follow the current session: live\n * snapshots and historic card summaries are only shown while their captain\n * session is the one currently open. */\nexport function ActivityPanel({ sessionsList, openSession }) {\n // Navigating to a member's subagent transcript is an explicit departure:\n // hide the floater immediately instead of waiting out the autocollapse\n // grace, so the panel never lingers over the member session.\n const navigateToSession = (id) => {\n setOpen(false);\n setWasActive(false);\n openSession(id);\n };\n const [teams, setTeams] = useState([]);\n const [archivedTeams, setArchivedTeams] = useState([]);\n const [open, setOpen] = useState(false);\n const [openOwner, setOpenOwner] = useState();\n const [autoOpened, setAutoOpened] = useState(false);\n const [wasActive, setWasActive] = useState(false);\n const [historic, setHistoric] = useState(new Map());\n const current = useSyncExternalStore(sessionsList.subscribe, sessionsList.getSnapshot).current;\n const currentRef = useRef(current);\n useEffect(() => { currentRef.current = current; }, [current]);\n const mountedAtRef = useRef(performance.now());\n const expanded = activityPanelExpandedForSession(open, openOwner, current);\n // This portal survives conversation route changes. Gate expansion by its\n // owning session during render, then clear stale state before paint. This\n // removes the old panel immediately instead of waiting for the no-team\n // autoclose grace period on the destination page.\n useLayoutEffect(() => {\n if (openOwner === undefined || openOwner === current)\n return;\n setOpen(false);\n setOpenOwner(undefined);\n setWasActive(false);\n setAutoOpened(false);\n }, [current, openOwner]);\n // The activity panel is a body portal, so announce its open state on body.\n // CSS can then make the conversation column yield space without knowing the\n // host shell's hashed module class names. Narrow viewports keep overlay mode.\n useLayoutEffect(() => {\n const root = document.documentElement;\n if (expanded)\n root.setAttribute(PANEL_OPEN_ATTRIBUTE, '');\n else\n root.removeAttribute(PANEL_OPEN_ATTRIBUTE);\n return () => { root.removeAttribute(PANEL_OPEN_ATTRIBUTE); };\n }, [expanded]);\n useEffect(() => {\n let cancelled = false;\n let inFlight = false;\n const tick = async () => {\n if (inFlight || cancelled)\n return;\n inFlight = true;\n try {\n const [liveResponse, archivedResponse] = await Promise.all([\n fetch(STATE_URL, { cache: 'no-store' }),\n fetch(`${STATE_URL}?archived=1`, { cache: 'no-store' }),\n ]);\n if (liveResponse.ok) {\n const body = (await liveResponse.json());\n if (!cancelled && Array.isArray(body.teams))\n setTeams(body.teams);\n }\n if (archivedResponse.ok) {\n const body = (await archivedResponse.json());\n if (!cancelled && Array.isArray(body.teams))\n setArchivedTeams(body.teams);\n }\n }\n catch {\n // Host restarting; keep the last snapshot.\n }\n finally {\n inFlight = false;\n }\n };\n void tick();\n const timer = setInterval(() => { void tick(); }, POLL_MS);\n return () => {\n cancelled = true;\n clearInterval(timer);\n };\n }, []);\n useEffect(() => {\n const onOpenPanel = (event) => {\n const activeSession = currentRef.current;\n if (activeSession === undefined)\n return;\n setOpenOwner(activeSession);\n setOpen(true);\n const detail = event.detail;\n if (detail?.teamId !== undefined) {\n // A card from a log that predates captainSessionId belongs to the\n // session that activated it (the current one at injection time).\n const owner = detail.captainSessionId !== '' ? detail.captainSessionId : currentRef.current ?? '';\n const teamKey = `${owner}:${detail.teamId}`;\n setHistoric((previous) => {\n const next = new Map(previous);\n next.set(teamKey, { data: detail, owner });\n return next;\n });\n }\n };\n window.addEventListener(OPEN_PANEL_EVENT, onOpenPanel);\n return () => {\n window.removeEventListener(OPEN_PANEL_EVENT, onOpenPanel);\n };\n }, []);\n // Teams follow the current session: live snapshots and historic card\n // summaries are visible only while their captain session is current.\n const visibleTeams = useMemo(\n // No current session (initial load): show nothing until one is picked,\n // so cross-session teams never leak into the floater.\n () => (current === undefined ? [] : teams.filter((team) => team.captainSessionId === current)), [teams, current]);\n const visibleHistoric = useMemo(() => (current === undefined ? [] : [...historic.values()].filter(({ data, owner }) => owner === current && !teams.some((live) => live.captainSessionId === current && live.teamId === data.teamId) && !archivedTeams.some((archived) => archived.captainSessionId === current && archived.teamId === data.teamId))), [historic, current, teams, archivedTeams]);\n const visibleArchived = useMemo(() => (current === undefined ? [] : archivedTeams.filter((team) => team.captainSessionId === current && !teams.some((live) => live.captainSessionId === current && live.teamId === team.teamId))), [archivedTeams, current, teams]);\n const visibleCount = visibleTeams.length + visibleArchived.length + visibleHistoric.length;\n useEffect(() => {\n if (visibleCount > 0) {\n setWasActive(true);\n // Auto-expand only after the page-settle window: opening (and its\n // main-column yield) right after load reads as a whole-page flicker.\n const settled = performance.now() - mountedAtRef.current >= AUTO_OPEN_SETTLE_MS;\n if (!autoOpened && settled) {\n setOpenOwner(current);\n setOpen(true);\n setAutoOpened(true);\n }\n return;\n }\n if (!wasActive)\n return;\n const timer = setTimeout(() => {\n setOpen(false);\n setOpenOwner(undefined);\n setWasActive(false);\n // Re-arm auto-expand: a later activity (new team, new session) may\n // open the panel on its own again.\n setAutoOpened(false);\n }, AUTOCLOSE_GRACE_MS);\n return () => { clearTimeout(timer); };\n }, [visibleCount, autoOpened, wasActive]);\n const busy = useMemo(() => visibleTeams.some((team) => team.members.some((member) => member.activity === 'working')), [visibleTeams]);\n const hasTeams = visibleCount > 0;\n if (!hasTeams && !expanded)\n return null;\n return (_jsxs(_Fragment, { children: [!expanded && (_jsx(CollapsedBadge, { count: visibleCount, busy: busy, onClick: () => {\n if (current === undefined)\n return;\n setOpenOwner(current);\n setOpen(true);\n } })), expanded && (_jsxs(\"aside\", { className: css.panel, \"data-agent-teams-activity\": true, children: [_jsxs(\"header\", { className: css.panelHead, children: [_jsxs(\"span\", { className: css.panelTitle, children: [\"AgentTeams \\u6D3B\\u52A8\", _jsx(\"span\", { className: css.panelDot, \"data-busy\": busy, \"aria-hidden\": true })] }), _jsx(\"button\", { type: \"button\", className: css.closeButton, onClick: () => {\n setOpen(false);\n setOpenOwner(undefined);\n }, \"aria-label\": \"\\u5173\\u95ED\", children: _jsx(IconCloseOutline16, {}) })] }), _jsx(\"div\", { className: css.teams, children: visibleCount === 0\n ? _jsx(\"span\", { className: css.emptyHint, children: \"\\u6682\\u65E0\\u56E2\\u961F\\u6D3B\\u52A8\" })\n : (_jsxs(_Fragment, { children: [visibleTeams.map((team) => (_jsx(TeamSection, { team: team, onNavigate: navigateToSession }, team.teamId))), visibleArchived.map((team) => (_jsx(\"div\", { \"data-team-id\": team.teamId, \"data-historic\": true, className: css.archivedWrap, children: _jsx(TeamSection, { team: team, onNavigate: navigateToSession, historic: true }) }, `${team.captainSessionId}:${team.teamId}`))), visibleHistoric.map(({ data: team, owner }) => {\n const teamKey = `${owner}:${team.teamId}`;\n return (_jsxs(\"section\", { className: css.team, \"data-team-id\": team.teamId, \"data-historic\": true, children: [_jsxs(\"header\", { className: css.teamHead, children: [_jsxs(\"span\", { className: css.teamName, title: team.teamName, children: [_jsx(\"img\", { className: css.leadAvatar, src: LEAD_ART, alt: \"\", \"aria-hidden\": true }), \" \", team.teamName] }), _jsx(\"span\", { className: css.historicPill, children: \"\\u5DF2\\u7ED3\\u675F\" })] }), _jsx(\"div\", { className: css.members, children: team.members.map((member) => (_jsxs(\"button\", { type: \"button\", className: css.memberRow, \"data-activity\": \"idle\", onClick: () => { if (member.id !== '')\n navigateToSession(member.id); }, children: [_jsx(\"span\", { className: css.memberAvatar, children: memberArtUrl(member.name, member.role) !== null ? (_jsx(\"img\", { className: css.memberArt, src: memberArtUrl(member.name, member.role) ?? '', alt: \"\", \"aria-hidden\": true })) : (_jsx(\"span\", { className: css.memberInitial, style: { background: accentOf(member.id) }, children: memberInitial(member.name) })) }), _jsx(\"span\", { className: css.memberInfo, children: _jsxs(\"span\", { className: css.memberLine, children: [_jsx(\"span\", { className: css.memberName, children: member.name }), member.role !== '' && _jsx(\"span\", { className: css.memberRole, children: member.role })] }) })] }, member.id))) })] }, teamKey));\n })] })) })] }))] }));\n}\n","/**\n * AgentTeams conversation card: a lightweight in-conversation summary shown\n * when a team is created — the captain's name, the member roster with whale\n * avatars, and an entry point that re-activates the top-right activity\n * panel (useful after the floater was closed, or when re-opening an old\n * session for review).\n *\n * The fold anchors to the Harness's durable `tool/call` + `tool/result`\n * records for `agent_teams_create`. Those are first-party session events, so\n * the card survives restarts without writing an out-of-repo event type.\n * @module dsh-agent-teams/client/card\n */\n/** Parse the only create-call fields the historic card owns. */\nexport function parseAgentTeamsCreateArgs(value) {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed !== 'object' || parsed === null || !('name' in parsed) || typeof parsed.name !== 'string') {\n return undefined;\n }\n const name = parsed.name.trim();\n if (name === '')\n return undefined;\n const cleaned = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n return { teamId: cleaned === '' ? 'team' : cleaned, name };\n }\n catch {\n return undefined;\n }\n}\n/** Durable first-party tool events folded into one keyed Chat node. */\nexport const agentTeamsCardDefinition = {\n kind: 'agent-teams',\n target: 'chat',\n match: (event) => {\n if (event.type === 'tool/call' && event.data.name === 'agent_teams_create') {\n return parseAgentTeamsCreateArgs(event.data.arguments) === undefined\n ? null\n : { id: String(event.data.callId), role: 'start' };\n }\n if (event.type === 'tool/result' && event.data.message.source.kind === 'tool') {\n return { id: String(event.data.message.source.callId), role: 'update' };\n }\n return null;\n },\n start: (_context, match) => {\n if (match.event.type !== 'tool/call') {\n throw new Error('agent-teams card start requires agent_teams_create tool/call');\n }\n const parsed = parseAgentTeamsCreateArgs(match.event.data.arguments);\n if (parsed === undefined)\n throw new Error('agent-teams card start requires valid create arguments');\n return { ...parsed, accepted: false };\n },\n update: (context, match) => {\n if (match.event.type !== 'tool/result')\n return context.state;\n const failed = match.event.data.error !== undefined\n || match.event.data.message.content.some((block) => block.type === 'tool-result' && block.isError === true);\n if (failed)\n return context.state;\n return { ...context.state, accepted: true };\n },\n buildViewNode: (context) => {\n if (context.start === undefined)\n return null;\n const state = context.state;\n if (!state.accepted)\n return null;\n return {\n key: context.key,\n kind: 'agent-teams',\n id: context.id,\n target: 'chat',\n anchorSeq: context.start.event.seq,\n location: context.start.location,\n visibility: 'visible',\n data: {\n teamId: state.teamId,\n captainSessionId: '',\n teamName: state.name,\n members: [],\n },\n };\n },\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createRoot } from 'react-dom/client';\nimport { ActivityPanel } from \"./ActivityPanel.js\";\nimport { AgentTeamsCard } from \"./AgentTeamsCard.js\";\nimport { agentTeamsCardDefinition } from \"./agent-teams-card-definition.js\";\n/** Required services: conversation nodes, slots, and sessions navigation. */\nexport const inject = ['conversationEvents', 'slots', 'sessions'];\n/**\n * Mount the floater through a body portal (the web shell has no top-right\n * slot) and register the in-conversation team card, whose \"activity panel\"\n * button re-activates the floater via a window event — the recovery path\n * for a closed floater or a re-opened session.\n */\nexport function apply(ctx) {\n const host = document.createElement('div');\n host.dataset.agentTeamsHost = '';\n document.body.appendChild(host);\n const root = createRoot(host);\n root.render(_jsx(ActivityPanel, { sessionsList: ctx.sessions.list, openSession: (id) => { ctx.sessions.open(id); } }));\n ctx.effect(() => () => {\n root.unmount();\n host.remove();\n }, 'agent-teams: activity panel');\n ctx.conversationEvents.register(agentTeamsCardDefinition);\n ctx.slots.inject('conversation.chat.node', () => ctx.slots.register({\n name: 'conversation.chat.node',\n key: 'agent-teams',\n inject: () => ({\n openSession: (id) => { ctx.sessions.open(id); },\n currentSessionId: () => ctx.sessions.list.getSnapshot().current,\n }),\n }, AgentTeamsCard));\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["css","css","IconBranchOutline16","IconChevronRightOutline14","StateDot","_Fragment","IconCloseOutline16"],"sources":["client/activity-model.js","client/artwork.js","client/AgentTeamsCard.js","client/ActivityPanel.js","client/agent-teams-card-definition.js","client/index.js"],"sourcesContent":["/** Pure relationship projections used by the AgentTeams activity panel. */\n/**\n * Whether an expanded activity panel still belongs to the current session.\n *\n * The panel is mounted through a body portal, so React does not remount it\n * when the conversation route changes. Ownership keeps an expanded panel\n * from leaking onto the new-session screen (or another conversation) while\n * its local open state is being reset.\n */\nexport function activityPanelExpandedForSession(open, owner, current) {\n return open && owner !== undefined && owner === current;\n}\n/**\n * Resolve the task whose dependency chain should be highlighted.\n *\n * A pinned task is an explicit user choice. Keyboard focus takes precedence\n * over delayed pointer intent so an older hover timer cannot steal the active\n * chain from someone navigating the task map with the keyboard.\n */\nexport function dependencyFocusTaskId(pinnedTaskId, keyboardTaskId, hoverTaskId) {\n return pinnedTaskId ?? keyboardTaskId ?? hoverTaskId;\n}\n/** Group tasks by their precomputed dependency depth. */\nexport function taskStages(tasks) {\n const byDepth = new Map();\n for (const task of tasks) {\n const depth = Number.isFinite(task.depth) ? Math.max(0, Math.floor(task.depth)) : 0;\n const stage = byDepth.get(depth) ?? [];\n stage.push(task);\n byDepth.set(depth, stage);\n }\n return [...byDepth.entries()]\n .sort(([left], [right]) => left - right)\n .map(([depth, stageTasks]) => ({\n depth,\n tasks: stageTasks.slice().sort((left, right) => left.id.localeCompare(right.id, 'en', { numeric: true })),\n }));\n}\n/**\n * Return the complete upstream/downstream chain around one task.\n *\n * Traversal uses both dependency directions and remains cycle-safe, so the UI\n * can highlight every handoff related to the focused task even if malformed\n * durable data contains a cycle.\n */\nexport function relatedTaskIds(taskId, tasks) {\n const byId = new Map(tasks.map((task) => [task.id, task]));\n if (!byId.has(taskId))\n return new Set();\n const dependents = new Map();\n for (const task of tasks) {\n for (const dependency of task.dependencies) {\n const targets = dependents.get(dependency) ?? [];\n targets.push(task.id);\n dependents.set(dependency, targets);\n }\n }\n const related = new Set();\n const upstreamSeen = new Set();\n const downstreamSeen = new Set();\n const visitUpstream = (id) => {\n if (upstreamSeen.has(id))\n return;\n upstreamSeen.add(id);\n related.add(id);\n for (const dependency of byId.get(id)?.dependencies ?? [])\n visitUpstream(dependency);\n };\n const visitDownstream = (id) => {\n if (downstreamSeen.has(id))\n return;\n downstreamSeen.add(id);\n related.add(id);\n for (const dependent of dependents.get(id) ?? [])\n visitDownstream(dependent);\n };\n visitUpstream(taskId);\n visitDownstream(taskId);\n return related;\n}\n","/**\n * Shared whale artwork lookup for the activity panel and the conversation\n * card: role keywords map to the packaged role images; the captain always\n * uses the lead whale.\n * @module dsh-agent-teams/client/artwork\n */\n/** Artwork route prefix served by the plugin host half. */\nexport const ART_BASE = '/plugins/dsh-agent-teams/assets/';\n/** Whale role artwork per role keyword. */\nconst ROLE_ART = [\n [/resear|analys|investig|explor|data|study|研究|分析|数据|调查|探索|调研/, 'researcher.png'],\n [/engineer|dev\\b|server|backend|\\bapi\\b|runtime|watcher|contract|工程|后端|服务|接口|开发|代码|编程/, 'engineer.png'],\n [/\\bqa\\b|test|verif|quality|测试|质量/, 'qa-engineer.png'],\n [/design|\\bui\\b|\\bux\\b|front|theme|accessib|设计|前端|主题/, 'designer.png'],\n [/secur|audit|risk|threat|review|安全|审计|审查|风险/, 'security-reviewer.png'],\n [/docs|writer|product|spec|coordin|撰写|文案|写作|文档|协调/, 'docs-coordinator.png'],\n [/release|\\bbuild\\b|deploy|\\bops\\b|\\bci\\b|ship|发布|构建|部署/, 'engineer.png'],\n];\n/** Captain artwork (always the lead whale). */\nexport const LEAD_ART = `${ART_BASE}team-lead.png`;\n/** Status action artwork per member activity. */\nexport const ACTION_ART = {\n working: `${ART_BASE}action-working.png`,\n idle: `${ART_BASE}action-sleeping.png`,\n unknown: `${ART_BASE}action-thinking.png`,\n};\n/**\n * Member artwork URL, or null when no role matches (initial-letter fallback).\n * @param name - the member's display name.\n * @param role - the member's role text.\n * @returns the artwork URL, or null when unmatched.\n */\nexport function memberArtUrl(name, role) {\n const identity = `${name} ${role}`.toLowerCase();\n for (const [pattern, art] of ROLE_ART) {\n if (pattern.test(identity))\n return `${ART_BASE}${art}`;\n }\n return null;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * AgentTeams conversation card: the lightweight in-conversation summary for\n * one team — the captain's whale avatar and name, the member roster as\n * clickable whale avatars (opening the member's subagent transcript), and\n * an \"activity panel\" button that re-activates the top-right floater.\n *\n * The floater and this card share the `agent-teams:open-panel` window event\n * so the card can summon the panel even after it was closed (or when an old\n * session is re-opened for review).\n * @module dsh-agent-teams/client/card\n */\nimport { useEffect, useMemo, useState } from 'react';\nimport { LEAD_ART, memberArtUrl } from \"./artwork.js\";\nimport css from './AgentTeamsCard.module.css';\n/** Window event name the floater listens for to open itself. */\nexport const OPEN_PANEL_EVENT = 'agent-teams:open-panel';\n/** Re-activate the top-right activity panel, carrying this team's summary\n * so the panel can show it even when the team no longer exists on disk\n * (historical session review). */\nfunction openActivityPanel(data) {\n window.dispatchEvent(new CustomEvent(OPEN_PANEL_EVENT, {\n detail: {\n teamId: data.teamId,\n captainSessionId: data.captainSessionId,\n teamName: data.teamName,\n members: data.members,\n },\n }));\n}\n/** Render one durable team as a compact conversation card. */\nexport function AgentTeamsCard({ node, openSession, currentSessionId }) {\n const data = node.data;\n const owner = data.captainSessionId || currentSessionId() || '';\n const [snapshot, setSnapshot] = useState();\n useEffect(() => {\n let cancelled = false;\n const tick = async () => {\n for (const url of ['/plugins/dsh-agent-teams/state', '/plugins/dsh-agent-teams/state?archived=1']) {\n try {\n const response = await fetch(url, { cache: 'no-store' });\n if (!response.ok)\n continue;\n const body = (await response.json());\n const found = Array.isArray(body.teams)\n ? body.teams.find((team) => team.teamId === data.teamId && (owner === '' || team.captainSessionId === owner))\n : undefined;\n if (found !== undefined) {\n if (!cancelled)\n setSnapshot(found);\n return;\n }\n }\n catch {\n // Host restarting; retry on the next poll.\n }\n }\n };\n void tick();\n const timer = setInterval(() => { void tick(); }, 1500);\n return () => {\n cancelled = true;\n clearInterval(timer);\n };\n }, [data.teamId, owner]);\n const resolved = useMemo(() => ({\n ...data,\n captainSessionId: snapshot?.captainSessionId ?? owner,\n teamName: snapshot?.name ?? data.teamName,\n members: snapshot?.members.map((member) => ({ id: member.id, name: member.name, role: member.role })) ?? data.members,\n }), [data, owner, snapshot]);\n return (_jsxs(\"section\", { className: css.root, \"data-agent-teams-card\": true, \"data-team-id\": resolved.teamId, children: [_jsxs(\"header\", { className: css.head, children: [_jsx(\"img\", { className: css.leadAvatar, src: LEAD_ART, alt: \"\", \"aria-hidden\": true }), _jsx(\"span\", { className: css.teamName, title: resolved.teamName, children: resolved.teamName }), _jsxs(\"span\", { className: css.memberCount, children: [resolved.members.length, \" \\u540D\\u6210\\u5458\"] }), _jsx(\"button\", { type: \"button\", className: css.panelButton, onClick: () => { openActivityPanel(resolved); }, \"aria-label\": \"\\u6253\\u5F00\\u6D3B\\u52A8\\u9762\\u677F\", title: \"\\u6253\\u5F00\\u6D3B\\u52A8\\u9762\\u677F\", children: \"\\u6D3B\\u52A8\\u9762\\u677F\" })] }), resolved.members.length > 0 && (_jsx(\"div\", { className: css.members, children: resolved.members.map((member) => (_jsxs(\"button\", { type: \"button\", className: css.member, onClick: () => { if (member.id !== '')\n openSession(member.id); }, title: member.role === '' ? member.name : `${member.name} · ${member.role}`, children: [memberArtUrl(member.name, member.role) !== null ? (_jsx(\"img\", { className: css.memberArt, src: memberArtUrl(member.name, member.role) ?? '', alt: \"\", \"aria-hidden\": true })) : (_jsx(\"span\", { className: css.memberInitial, children: member.name.trim().slice(0, 1).toUpperCase() || '?' })), _jsx(\"span\", { className: css.memberName, children: member.name })] }, member.id))) }))] }));\n}\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * AgentTeams activity panel: the top-right floater monitoring every team.\n *\n * Modeled on the Claude Code desktop SessionActivityPanel: a fixed glass\n * panel at the top-right corner. On wide viewports it cooperatively makes the\n * conversation column yield space; narrow viewports keep overlay mode. It\n * polls the host `/plugins/dsh-agent-teams/state` route for\n * server-side snapshots (durable files + live subagent activity), with a\n * collapsed badge that auto-expands once when activity appears. Archived\n * teams stay available for the owning conversation after live work ends.\n *\n * The floater mounts through a body portal (no top-right slot exists in the\n * web shell); it is not a conversation node — the in-conversation panel was\n * removed in favor of this always-available monitor.\n * @module dsh-agent-teams/client/activity\n */\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { IconBranchOutline16, IconChevronRightOutline14, IconCloseOutline16, StateDot, } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { activityPanelExpandedForSession, dependencyFocusTaskId, relatedTaskIds, taskStages, } from \"./activity-model.js\";\nimport { ACTION_ART, LEAD_ART, memberArtUrl } from \"./artwork.js\";\nimport { OPEN_PANEL_EVENT } from \"./AgentTeamsCard.js\";\nimport css from './ActivityPanel.module.css';\n/** Poll cadence for the host snapshot route. */\nconst POLL_MS = 1000;\n/** Grace before the panel collapses once no team remains. */\nconst AUTOCLOSE_GRACE_MS = 2000;\n/**\n * Page-settle window after mount: activity restored on page load only shows\n * the collapsed badge, so the panel never yanks the conversation column\n * right after load. New activity after this window auto-expands as usual.\n */\nconst AUTO_OPEN_SETTLE_MS = 4000;\n/** Host route serving team snapshots. */\nconst STATE_URL = '/plugins/dsh-agent-teams/state';\n/** Root marker shared with the panel CSS while the portal is expanded. */\nconst PANEL_OPEN_ATTRIBUTE = 'data-agent-teams-panel-open';\n/** Initial-letter fallback for unmatched roles. */\nfunction memberInitial(name) {\n return name.trim().slice(0, 1).toUpperCase() || '?';\n}\nfunction stableHash(value) {\n let hash = 0;\n for (let index = 0; index < value.length; index += 1) {\n hash = ((hash << 5) - hash + value.charCodeAt(index)) | 0;\n }\n return Math.abs(hash);\n}\nconst ACCENTS = [\n 'var(--dsw-alias-state-business-primary)',\n 'var(--dsw-alias-state-success)',\n 'var(--dsw-alias-state-danger)',\n 'var(--dsw-alias-state-warning)',\n 'var(--dsw-alias-label-tertiary)',\n];\nfunction accentOf(id) {\n return ACCENTS[stableHash(id) % ACCENTS.length] ?? ACCENTS[0];\n}\n/** Badge text follows the raw task status (finer than the 4 visual states):\n * claimed/pending/failed/cancelled keep their own labels and colors. */\nconst TASK_STATUS_LABEL = {\n pending: '待领取',\n claimed: '已认领',\n in_progress: '进行中',\n completed: '已完成',\n failed: '失败',\n cancelled: '已取消',\n};\nfunction taskStatusLabel(status) {\n return TASK_STATUS_LABEL[status] ?? status;\n}\n/** Badge/bar coloring key: visual state, widened for terminal statuses. */\nfunction taskTone(state, status) {\n if (status === 'failed')\n return 'failed';\n if (status === 'cancelled')\n return 'cancelled';\n return state;\n}\n/** Collapsed badge: an always-visible corner pill while any team exists. */\nfunction CollapsedBadge({ count, busy, onClick }) {\n return (_jsxs(\"button\", { type: \"button\", className: css.badge, \"data-busy\": busy, onClick: onClick, \"aria-label\": `AgentTeams 活动,${count} 个团队`, children: [_jsx(\"span\", { className: css.badgeDot, \"data-busy\": busy, \"aria-hidden\": true }), _jsx(\"span\", { className: css.badgeCount, children: count })] }));\n}\nfunction memberDotState(member, tasks) {\n const owned = tasks.filter((task) => task.assignee === member.name);\n if (member.activity === 'working')\n return 'ongoing';\n if (owned.some((task) => task.status === 'failed'))\n return 'error';\n if (owned.length > 0 && owned.every((task) => task.status === 'completed'))\n return 'done';\n return 'warning';\n}\nfunction memberStateLabel(member, tasks) {\n const owned = tasks.filter((task) => task.assignee === member.name);\n if (member.activity === 'working')\n return '工作中';\n if (owned.some((task) => task.status === 'failed'))\n return '有失败';\n if (owned.some((task) => task.state === 'blocked'))\n return '等待';\n if (owned.length > 0 && owned.every((task) => task.status === 'completed'))\n return '已交付';\n if (owned.length > 0)\n return '待执行';\n return '待派工';\n}\nfunction memberStatusText(member, tasks) {\n const owned = tasks.filter((task) => task.assignee === member.name);\n const current = owned.find((task) => task.id === member.currentTask);\n const blocked = owned.find((task) => task.state === 'blocked');\n if (member.activity === 'working' && current !== undefined)\n return `正在执行 ${current.id}`;\n if (member.activity === 'working')\n return '正在处理已派任务';\n if (blocked !== undefined) {\n const dependency = tasks.find((task) => blocked.dependencies.includes(task.id) && task.state !== 'completed');\n if (dependency !== undefined)\n return `等待 ${dependency.id} · ${dependency.assignee || '待认领'}`;\n return '等待前置任务';\n }\n if (member.total === 0)\n return '等待队长派工';\n if (member.done === member.total)\n return '任务已交付';\n return member.activity === 'idle' ? '待继续执行' : '状态未知';\n}\nfunction dependencyLabel(task, tasks) {\n return task.dependencies.map((id) => {\n const dependency = tasks.find((candidate) => candidate.id === id);\n return dependency?.assignee ? `${id}·${dependency.assignee}` : id;\n }).join('、');\n}\nfunction TaskNode({ task, tasks, focused, dimmed, pinned, onPin, onHover, onFocusChange }) {\n const tone = taskTone(task.state, task.status);\n return (_jsxs(\"button\", { type: \"button\", className: css.taskNode, \"data-task-id\": task.id, \"data-state\": tone, \"data-focused\": focused, \"data-dimmed\": dimmed, \"aria-pressed\": pinned, title: `${task.id} · ${task.subject}(悬停高亮依赖链 · 点击固定)`, onClick: () => { onPin(task.id); }, onMouseEnter: () => { onHover(task.id); }, onMouseLeave: () => { onHover(null); }, onFocus: () => { onFocusChange(task.id); }, onBlur: () => { onFocusChange(null); }, children: [_jsxs(\"span\", { className: css.taskNodeHead, children: [_jsx(\"span\", { className: css.taskId, children: task.id }), _jsx(\"span\", { className: css.taskBadge, \"data-state\": tone, children: taskStatusLabel(task.status) })] }), _jsx(\"span\", { className: css.taskSubject, children: task.subject }), _jsxs(\"span\", { className: css.taskRoute, children: [_jsx(\"span\", { className: css.taskOwner, children: task.assignee || '待认领' }), task.dependencies.length === 0\n ? _jsx(\"span\", { className: css.taskStart, children: \"\\u8D77\\u70B9\" })\n : _jsxs(\"span\", { className: css.taskDeps, children: [\"\\u4F9D\\u8D56 \", dependencyLabel(task, tasks)] })] })] }));\n}\nfunction DependencyMap({ tasks }) {\n const [hoverTaskId, setHoverTaskId] = useState(null);\n const [keyboardTaskId, setKeyboardTaskId] = useState(null);\n const [pinnedTaskId, setPinnedTaskId] = useState(null);\n const hoverTimer = useRef(null);\n const focusedTaskId = dependencyFocusTaskId(pinnedTaskId, keyboardTaskId, hoverTaskId);\n const stages = useMemo(() => taskStages(tasks), [tasks]);\n const related = useMemo(() => focusedTaskId === null ? null : relatedTaskIds(focusedTaskId, tasks), [focusedTaskId, tasks]);\n const scheduleHover = (id) => {\n if (hoverTimer.current !== null) {\n clearTimeout(hoverTimer.current);\n hoverTimer.current = null;\n }\n if (id === null) {\n setHoverTaskId(null);\n return;\n }\n hoverTimer.current = setTimeout(() => {\n hoverTimer.current = null;\n setHoverTaskId(id);\n }, 180);\n };\n useEffect(() => () => {\n if (hoverTimer.current !== null)\n clearTimeout(hoverTimer.current);\n }, []);\n useEffect(() => {\n const onKeyDown = (event) => {\n if (event.key === 'Escape')\n setPinnedTaskId(null);\n };\n window.addEventListener('keydown', onKeyDown);\n return () => { window.removeEventListener('keydown', onKeyDown); };\n }, []);\n if (tasks.length === 0)\n return null;\n return (_jsxs(\"section\", { className: css.dependencySection, \"aria-label\": \"\\u4EFB\\u52A1\\u4F9D\\u8D56\\u94FE\", \"data-dependency-map\": true, children: [_jsxs(\"header\", { className: css.sectionHead, children: [_jsxs(\"span\", { className: css.sectionTitle, children: [_jsx(IconBranchOutline16, {}), \" \\u4EFB\\u52A1\\u4F9D\\u8D56\"] }), _jsx(\"span\", { className: css.sectionHint, children: pinnedTaskId === null ? '悬停高亮依赖链 · 点击固定' : `${pinnedTaskId} 已固定 · Esc 取消` })] }), _jsx(\"div\", { className: css.stageFlow, children: stages.map((stage, index) => (_jsxs(\"div\", { className: css.stageGroup, \"data-depth\": stage.depth, children: [index > 0 && (_jsxs(\"span\", { className: css.stageConnector, \"aria-hidden\": true, children: [_jsx(\"span\", { className: css.stageLine }), _jsx(IconChevronRightOutline14, {})] })), _jsxs(\"div\", { className: css.stageColumn, children: [_jsxs(\"span\", { className: css.stageLabel, children: [stage.depth === 0 ? '起点' : `依赖层 ${stage.depth}`, _jsx(\"span\", { children: stage.tasks.length })] }), _jsx(\"div\", { className: css.stageTasks, children: stage.tasks.map((task) => (_jsx(TaskNode, { task: task, tasks: tasks, focused: related?.has(task.id) ?? false, dimmed: related !== null && !related.has(task.id), pinned: pinnedTaskId === task.id, onPin: (id) => { setPinnedTaskId((current) => current === id ? null : id); }, onHover: scheduleHover, onFocusChange: setKeyboardTaskId }, task.id))) })] })] }, stage.depth))) })] }));\n}\nfunction TeamSection({ team, onNavigate, historic = false }) {\n const busyCount = team.members.filter((member) => member.activity === 'working').length;\n const assignedCount = team.tasks.filter((task) => task.assignee !== '').length;\n const completedCount = team.tasks.filter((task) => task.status === 'completed').length;\n const allCompleted = team.tasks.length > 0 && completedCount === team.tasks.length;\n const unclaimed = team.tasks.filter((task) => {\n if (task.status === 'completed' || task.status === 'failed' || task.status === 'cancelled')\n return false;\n if (task.assignee === '')\n return true;\n return !team.members.some((member) => member.name === task.assignee);\n });\n return (_jsxs(\"section\", { className: css.team, \"data-team-id\": team.teamId, children: [_jsxs(\"header\", { className: css.teamHead, children: [_jsx(\"span\", { className: css.teamName, title: team.name, children: team.name }), historic && _jsx(\"span\", { className: css.historicPill, children: \"\\u5DF2\\u7ED3\\u675F\" }), _jsxs(\"span\", { className: css.teamStats, children: [_jsxs(\"span\", { \"data-stat\": \"members\", children: [team.members.length, \" \\u6210\\u5458\"] }), _jsxs(\"span\", { \"data-stat\": \"tasks\", children: [completedCount, \"/\", team.tasks.length, \" \\u5B8C\\u6210\"] }), _jsxs(\"span\", { \"data-stat\": \"messages\", children: [team.messageCount, \" \\u6D88\\u606F\"] })] })] }), _jsxs(\"section\", { className: css.delegationSection, \"aria-label\": \"\\u961F\\u957F\\u6D3E\\u5DE5\\u5173\\u7CFB\", \"data-delegation-map\": true, children: [_jsxs(\"div\", { className: css.captainNode, children: [_jsx(\"span\", { className: css.captainAvatar, children: _jsx(\"img\", { className: css.leadAvatar, src: LEAD_ART, alt: \"\", \"aria-hidden\": true }) }), _jsxs(\"span\", { className: css.captainInfo, children: [_jsxs(\"span\", { className: css.captainLine, children: [_jsx(\"span\", { className: css.captainName, children: \"\\u961F\\u957F\" }), _jsx(\"span\", { className: css.captainRole, children: \"\\u62C6\\u89E3 \\u00B7 \\u6D3E\\u53D1 \\u00B7 \\u6C47\\u603B\" })] }), _jsxs(\"span\", { className: css.captainSummary, children: [\"\\u5DF2\\u6D3E\\u53D1 \", assignedCount, \" \\u9879\\u4EFB\\u52A1\\u7ED9 \", team.members.length, \" \\u540D\\u6210\\u5458\"] })] }), _jsxs(\"span\", { className: css.captainState, \"data-busy\": busyCount > 0, children: [_jsx(StateDot, { state: busyCount > 0 ? 'ongoing' : allCompleted ? 'done' : 'warning' }), busyCount > 0 ? `${busyCount} 人执行中` : allCompleted ? '已收齐' : '等待回报'] })] }), _jsxs(\"div\", { className: css.delegationTree, children: [team.members.length === 0 && _jsx(\"span\", { className: css.emptyHint, children: \"\\u6682\\u65E0\\u6210\\u5458\\uFF0C\\u7B49\\u5F85\\u961F\\u957F\\u7EC4\\u5EFA\\u56E2\\u961F\" }), team.members.map((member) => {\n const owned = team.tasks.filter((task) => task.assignee === member.name);\n return (_jsxs(\"div\", { className: css.memberBlock, \"data-activity\": member.activity, children: [_jsx(\"span\", { className: css.memberBranch, \"aria-hidden\": true, children: _jsx(\"span\", {}) }), _jsxs(\"button\", { type: \"button\", className: css.memberRow, \"data-activity\": member.activity, onClick: () => { if (member.id !== '')\n onNavigate(member.id); }, children: [_jsxs(\"span\", { className: css.memberAvatar, \"data-unread\": member.unread > 0, children: [memberArtUrl(member.name, member.role) !== null ? (_jsx(\"img\", { className: css.memberArt, src: memberArtUrl(member.name, member.role) ?? '', alt: \"\", \"aria-hidden\": true })) : (_jsx(\"span\", { className: css.memberInitial, style: { background: accentOf(member.id) }, children: memberInitial(member.name) })), _jsx(\"img\", { className: css.stateArt, \"data-activity\": member.activity, src: ACTION_ART[member.activity], alt: \"\", \"aria-hidden\": true })] }), _jsxs(\"span\", { className: css.memberInfo, children: [_jsxs(\"span\", { className: css.memberLine, children: [_jsx(\"span\", { className: css.memberName, children: member.name }), member.role !== '' && _jsx(\"span\", { className: css.memberRole, children: member.role }), _jsxs(\"span\", { className: css.memberState, \"data-activity\": member.activity, children: [_jsx(StateDot, { state: memberDotState(member, team.tasks) }), memberStateLabel(member, team.tasks)] })] }), _jsx(\"span\", { className: css.memberStatusLine, children: memberStatusText(member, team.tasks) })] }), _jsxs(\"span\", { className: css.memberCount, children: [member.done, \"/\", member.total] })] }), _jsxs(\"div\", { className: css.assignmentLine, children: [_jsx(\"span\", { className: css.assignmentLabel, children: \"\\u961F\\u957F\\u6D3E\\u53D1\" }), _jsx(\"span\", { className: css.assignmentTasks, children: owned.length === 0\n ? _jsx(\"span\", { className: css.taskEmpty, children: \"\\u6682\\u65E0\\u4EFB\\u52A1\" })\n : owned.map((task) => (_jsx(\"span\", { className: css.assignmentChip, \"data-state\": taskTone(task.state, task.status), title: task.subject, children: task.id }, task.id))) }), member.unread > 0 && _jsxs(\"span\", { className: css.unreadPill, children: [member.unread, \" \\u6761\\u6D88\\u606F\"] })] })] }, member.id));\n })] })] }), _jsx(DependencyMap, { tasks: team.tasks }), unclaimed.length > 0 && (_jsxs(\"section\", { className: css.unclaimed, \"aria-label\": \"\\u5F85\\u8BA4\\u9886\\u4EFB\\u52A1\", children: [_jsx(\"span\", { className: css.unclaimedTitle, children: \"\\u5F85\\u961F\\u957F\\u8BA4\\u9886\\u6216\\u6539\\u6D3E\" }), _jsx(\"span\", { className: css.assignmentTasks, children: unclaimed.map((task) => (_jsxs(\"span\", { className: css.assignmentChip, \"data-state\": taskTone(task.state, task.status), title: task.subject, children: [task.id, \" \\u00B7 \", task.assignee || '未分配'] }, task.id))) })] })), team.captainInbox.length > 0 && (_jsxs(\"section\", { className: css.inbox, \"aria-label\": \"\\u6210\\u5458\\u56DE\\u62A5\\u961F\\u957F\", children: [_jsxs(\"header\", { className: css.sectionHead, children: [_jsx(\"span\", { className: css.sectionTitle, children: \"\\u6210\\u5458\\u56DE\\u62A5\" }), _jsx(\"span\", { className: css.sectionHint, children: \"\\u6D41\\u5411\\u961F\\u957F\" })] }), team.captainInbox.slice(-2).map((message, index) => (_jsxs(\"div\", { className: css.inboxRow, children: [_jsxs(\"span\", { className: css.inboxRoute, children: [message.from, _jsx(IconChevronRightOutline14, {}), \"\\u961F\\u957F\"] }), _jsx(\"span\", { className: css.inboxContent, title: message.content, children: message.content })] }, index)))] }))] }));\n}\n/** The top-right activity floater. Teams follow the current session: live\n * snapshots and historic card summaries are only shown while their captain\n * session is the one currently open. */\nexport function ActivityPanel({ sessionsList, openSession }) {\n // Navigating to a member's subagent transcript is an explicit departure:\n // hide the floater immediately instead of waiting out the autocollapse\n // grace, so the panel never lingers over the member session.\n const navigateToSession = (id) => {\n setOpen(false);\n setWasActive(false);\n openSession(id);\n };\n const [teams, setTeams] = useState([]);\n const [archivedTeams, setArchivedTeams] = useState([]);\n const [open, setOpen] = useState(false);\n const [openOwner, setOpenOwner] = useState();\n const [autoOpened, setAutoOpened] = useState(false);\n const [wasActive, setWasActive] = useState(false);\n const [historic, setHistoric] = useState(new Map());\n const current = useSyncExternalStore(sessionsList.subscribe, sessionsList.getSnapshot).current;\n const currentRef = useRef(current);\n useEffect(() => { currentRef.current = current; }, [current]);\n const mountedAtRef = useRef(performance.now());\n const expanded = activityPanelExpandedForSession(open, openOwner, current);\n // This portal survives conversation route changes. Gate expansion by its\n // owning session during render, then clear stale state before paint. This\n // removes the old panel immediately instead of waiting for the no-team\n // autoclose grace period on the destination page.\n useLayoutEffect(() => {\n if (openOwner === undefined || openOwner === current)\n return;\n setOpen(false);\n setOpenOwner(undefined);\n setWasActive(false);\n setAutoOpened(false);\n }, [current, openOwner]);\n // The activity panel is a body portal, so announce its open state on body.\n // CSS can then make the conversation column yield space without knowing the\n // host shell's hashed module class names. Narrow viewports keep overlay mode.\n useLayoutEffect(() => {\n const root = document.documentElement;\n if (expanded)\n root.setAttribute(PANEL_OPEN_ATTRIBUTE, '');\n else\n root.removeAttribute(PANEL_OPEN_ATTRIBUTE);\n return () => { root.removeAttribute(PANEL_OPEN_ATTRIBUTE); };\n }, [expanded]);\n useEffect(() => {\n let cancelled = false;\n let inFlight = false;\n const tick = async () => {\n if (inFlight || cancelled)\n return;\n inFlight = true;\n try {\n const [liveResponse, archivedResponse] = await Promise.all([\n fetch(STATE_URL, { cache: 'no-store' }),\n fetch(`${STATE_URL}?archived=1`, { cache: 'no-store' }),\n ]);\n if (liveResponse.ok) {\n const body = (await liveResponse.json());\n if (!cancelled && Array.isArray(body.teams))\n setTeams(body.teams);\n }\n if (archivedResponse.ok) {\n const body = (await archivedResponse.json());\n if (!cancelled && Array.isArray(body.teams))\n setArchivedTeams(body.teams);\n }\n }\n catch {\n // Host restarting; keep the last snapshot.\n }\n finally {\n inFlight = false;\n }\n };\n void tick();\n const timer = setInterval(() => { void tick(); }, POLL_MS);\n return () => {\n cancelled = true;\n clearInterval(timer);\n };\n }, []);\n useEffect(() => {\n const onOpenPanel = (event) => {\n const activeSession = currentRef.current;\n if (activeSession === undefined)\n return;\n setOpenOwner(activeSession);\n setOpen(true);\n const detail = event.detail;\n if (detail?.teamId !== undefined) {\n // A card from a log that predates captainSessionId belongs to the\n // session that activated it (the current one at injection time).\n const owner = detail.captainSessionId !== '' ? detail.captainSessionId : currentRef.current ?? '';\n const teamKey = `${owner}:${detail.teamId}`;\n setHistoric((previous) => {\n const next = new Map(previous);\n next.set(teamKey, { data: detail, owner });\n return next;\n });\n }\n };\n window.addEventListener(OPEN_PANEL_EVENT, onOpenPanel);\n return () => {\n window.removeEventListener(OPEN_PANEL_EVENT, onOpenPanel);\n };\n }, []);\n // Teams follow the current session: live snapshots and historic card\n // summaries are visible only while their captain session is current.\n const visibleTeams = useMemo(\n // No current session (initial load): show nothing until one is picked,\n // so cross-session teams never leak into the floater.\n () => (current === undefined ? [] : teams.filter((team) => team.captainSessionId === current)), [teams, current]);\n const visibleHistoric = useMemo(() => (current === undefined ? [] : [...historic.values()].filter(({ data, owner }) => owner === current && !teams.some((live) => live.captainSessionId === current && live.teamId === data.teamId) && !archivedTeams.some((archived) => archived.captainSessionId === current && archived.teamId === data.teamId))), [historic, current, teams, archivedTeams]);\n const visibleArchived = useMemo(() => (current === undefined ? [] : archivedTeams.filter((team) => team.captainSessionId === current && !teams.some((live) => live.captainSessionId === current && live.teamId === team.teamId))), [archivedTeams, current, teams]);\n const visibleCount = visibleTeams.length + visibleArchived.length + visibleHistoric.length;\n useEffect(() => {\n if (visibleCount > 0) {\n setWasActive(true);\n // Auto-expand only after the page-settle window: opening (and its\n // main-column yield) right after load reads as a whole-page flicker.\n const settled = performance.now() - mountedAtRef.current >= AUTO_OPEN_SETTLE_MS;\n if (!autoOpened && settled) {\n setOpenOwner(current);\n setOpen(true);\n setAutoOpened(true);\n }\n return;\n }\n if (!wasActive)\n return;\n const timer = setTimeout(() => {\n setOpen(false);\n setOpenOwner(undefined);\n setWasActive(false);\n // Re-arm auto-expand: a later activity (new team, new session) may\n // open the panel on its own again.\n setAutoOpened(false);\n }, AUTOCLOSE_GRACE_MS);\n return () => { clearTimeout(timer); };\n }, [visibleCount, autoOpened, wasActive]);\n const busy = useMemo(() => visibleTeams.some((team) => team.members.some((member) => member.activity === 'working')), [visibleTeams]);\n const hasTeams = visibleCount > 0;\n if (!hasTeams && !expanded)\n return null;\n return (_jsxs(_Fragment, { children: [!expanded && (_jsx(CollapsedBadge, { count: visibleCount, busy: busy, onClick: () => {\n if (current === undefined)\n return;\n setOpenOwner(current);\n setOpen(true);\n } })), expanded && (_jsxs(\"aside\", { className: css.panel, \"data-agent-teams-activity\": true, children: [_jsxs(\"header\", { className: css.panelHead, children: [_jsxs(\"span\", { className: css.panelTitle, children: [\"AgentTeams \\u6D3B\\u52A8\", _jsx(\"span\", { className: css.panelDot, \"data-busy\": busy, \"aria-hidden\": true })] }), _jsx(\"button\", { type: \"button\", className: css.closeButton, onClick: () => {\n setOpen(false);\n setOpenOwner(undefined);\n }, \"aria-label\": \"\\u5173\\u95ED\", children: _jsx(IconCloseOutline16, {}) })] }), _jsx(\"div\", { className: css.teams, children: visibleCount === 0\n ? _jsx(\"span\", { className: css.emptyHint, children: \"\\u6682\\u65E0\\u56E2\\u961F\\u6D3B\\u52A8\" })\n : (_jsxs(_Fragment, { children: [visibleTeams.map((team) => (_jsx(TeamSection, { team: team, onNavigate: navigateToSession }, team.teamId))), visibleArchived.map((team) => (_jsx(\"div\", { \"data-team-id\": team.teamId, \"data-historic\": true, className: css.archivedWrap, children: _jsx(TeamSection, { team: team, onNavigate: navigateToSession, historic: true }) }, `${team.captainSessionId}:${team.teamId}`))), visibleHistoric.map(({ data: team, owner }) => {\n const teamKey = `${owner}:${team.teamId}`;\n return (_jsxs(\"section\", { className: css.team, \"data-team-id\": team.teamId, \"data-historic\": true, children: [_jsxs(\"header\", { className: css.teamHead, children: [_jsxs(\"span\", { className: css.teamName, title: team.teamName, children: [_jsx(\"img\", { className: css.leadAvatar, src: LEAD_ART, alt: \"\", \"aria-hidden\": true }), \" \", team.teamName] }), _jsx(\"span\", { className: css.historicPill, children: \"\\u5DF2\\u7ED3\\u675F\" })] }), _jsx(\"div\", { className: css.members, children: team.members.map((member) => (_jsxs(\"button\", { type: \"button\", className: css.memberRow, \"data-activity\": \"idle\", onClick: () => { if (member.id !== '')\n navigateToSession(member.id); }, children: [_jsx(\"span\", { className: css.memberAvatar, children: memberArtUrl(member.name, member.role) !== null ? (_jsx(\"img\", { className: css.memberArt, src: memberArtUrl(member.name, member.role) ?? '', alt: \"\", \"aria-hidden\": true })) : (_jsx(\"span\", { className: css.memberInitial, style: { background: accentOf(member.id) }, children: memberInitial(member.name) })) }), _jsx(\"span\", { className: css.memberInfo, children: _jsxs(\"span\", { className: css.memberLine, children: [_jsx(\"span\", { className: css.memberName, children: member.name }), member.role !== '' && _jsx(\"span\", { className: css.memberRole, children: member.role })] }) })] }, member.id))) })] }, teamKey));\n })] })) })] }))] }));\n}\n","/**\n * AgentTeams conversation card: a lightweight in-conversation summary shown\n * when a team is created — the captain's name, the member roster with whale\n * avatars, and an entry point that re-activates the top-right activity\n * panel (useful after the floater was closed, or when re-opening an old\n * session for review).\n *\n * The fold anchors to the Harness's durable `tool/call` + `tool/result`\n * records for `agent_teams_create`. Those are first-party session events, so\n * the card survives restarts without writing an out-of-repo event type.\n * @module dsh-agent-teams/client/card\n */\n/** Parse the only create-call fields the historic card owns. */\nexport function parseAgentTeamsCreateArgs(value) {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed !== 'object' || parsed === null || !('name' in parsed) || typeof parsed.name !== 'string') {\n return undefined;\n }\n const name = parsed.name.trim();\n if (name === '')\n return undefined;\n const cleaned = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n return { teamId: cleaned === '' ? 'team' : cleaned, name };\n }\n catch {\n return undefined;\n }\n}\n/** Durable first-party tool events folded into one keyed Chat node. */\nexport const agentTeamsCardDefinition = {\n kind: 'agent-teams',\n target: 'chat',\n match: (event) => {\n if (event.type === 'tool/call' && event.data.name === 'agent_teams_create') {\n return parseAgentTeamsCreateArgs(event.data.arguments) === undefined\n ? null\n : { id: String(event.data.callId), role: 'start' };\n }\n if (event.type === 'tool/result' && event.data.message.source.kind === 'tool') {\n return { id: String(event.data.message.source.callId), role: 'update' };\n }\n return null;\n },\n start: (_context, match) => {\n if (match.event.type !== 'tool/call') {\n throw new Error('agent-teams card start requires agent_teams_create tool/call');\n }\n const parsed = parseAgentTeamsCreateArgs(match.event.data.arguments);\n if (parsed === undefined)\n throw new Error('agent-teams card start requires valid create arguments');\n return { ...parsed, accepted: false };\n },\n update: (context, match) => {\n if (match.event.type !== 'tool/result')\n return context.state;\n const failed = match.event.data.error !== undefined\n || match.event.data.message.content.some((block) => block.type === 'tool-result' && block.isError === true);\n if (failed)\n return context.state;\n return { ...context.state, accepted: true };\n },\n buildViewNode: (context) => {\n if (context.start === undefined)\n return null;\n const state = context.state;\n if (!state.accepted)\n return null;\n return {\n key: context.key,\n kind: 'agent-teams',\n id: context.id,\n target: 'chat',\n anchorSeq: context.start.event.seq,\n location: context.start.location,\n visibility: 'visible',\n data: {\n teamId: state.teamId,\n captainSessionId: '',\n teamName: state.name,\n members: [],\n },\n };\n },\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createRoot } from 'react-dom/client';\nimport { ActivityPanel } from \"./ActivityPanel.js\";\nimport { AgentTeamsCard } from \"./AgentTeamsCard.js\";\nimport { agentTeamsCardDefinition } from \"./agent-teams-card-definition.js\";\n/** Required services: conversation nodes, slots, and sessions navigation. */\nexport const inject = ['conversationEvents', 'slots', 'sessions'];\n/**\n * Mount the floater through a body portal (the web shell has no top-right\n * slot) and register the in-conversation team card, whose \"activity panel\"\n * button re-activates the floater via a window event — the recovery path\n * for a closed floater or a re-opened session.\n */\nexport function apply(ctx) {\n const host = document.createElement('div');\n host.dataset.agentTeamsHost = '';\n document.body.appendChild(host);\n const root = createRoot(host);\n root.render(_jsx(ActivityPanel, { sessionsList: ctx.sessions.list, openSession: (id) => { ctx.sessions.open(id); } }));\n ctx.effect(() => () => {\n root.unmount();\n host.remove();\n }, 'agent-teams: activity panel');\n ctx.conversationEvents.register(agentTeamsCardDefinition);\n ctx.slots.inject('conversation.chat.node', () => ctx.slots.register({\n name: 'conversation.chat.node',\n key: 'agent-teams',\n inject: () => ({\n openSession: (id) => { ctx.sessions.open(id); },\n currentSessionId: () => ctx.sessions.list.getSnapshot().current,\n }),\n }, AgentTeamsCard));\n}\n"],"mappings":"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"}
@@ -19,6 +19,14 @@ export interface RelationshipStage<T extends RelationshipTask> {
19
19
  * its local open state is being reset.
20
20
  */
21
21
  export declare function activityPanelExpandedForSession(open: boolean, owner: string | undefined, current: string | undefined): boolean;
22
+ /**
23
+ * Resolve the task whose dependency chain should be highlighted.
24
+ *
25
+ * A pinned task is an explicit user choice. Keyboard focus takes precedence
26
+ * over delayed pointer intent so an older hover timer cannot steal the active
27
+ * chain from someone navigating the task map with the keyboard.
28
+ */
29
+ export declare function dependencyFocusTaskId(pinnedTaskId: string | null, keyboardTaskId: string | null, hoverTaskId: string | null): string | null;
22
30
  /** Group tasks by their precomputed dependency depth. */
23
31
  export declare function taskStages<T extends RelationshipTask>(tasks: readonly T[]): readonly RelationshipStage<T>[];
24
32
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanmicoder/dsh-agent-teams",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "AgentTeams for DeepSeek Harness: multi-agent team collaboration (captain, members, tasks with dependencies, messaging) driven by natural language, with a tree monitor in the web GUI",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -85,30 +85,88 @@
85
85
  "verify": "node scripts/verify.mjs && pnpm verify:skill",
86
86
  "prepublishOnly": "pnpm build && pnpm verify"
87
87
  },
88
- "dependencies": {},
89
88
  "peerDependencies": {
90
89
  "@deepseek-ai/cordis": "^4.0.1-rc.1",
91
- "@deepseek-ai/dsh-agent": "^0.0.1-rc.1",
92
- "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.1",
93
- "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.1",
94
- "@deepseek-ai/dsh-client-ui-conversation": "^0.0.1-rc.1",
95
- "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.1",
96
- "@deepseek-ai/dsh-client-ui-slots": "^0.0.1-rc.1",
97
- "@deepseek-ai/dsh-llm": "^0.0.1-rc.1",
98
- "@deepseek-ai/dsh-session": "^0.0.1-rc.1",
99
- "@deepseek-ai/dsh-subagent": "^0.0.1-rc.1",
100
- "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.1",
101
- "@deepseek-ai/dsh-tools": "^0.0.1-rc.1",
102
- "react": "^18.2.0",
103
- "@deepseek-ai/schemastery": "^3.18.1-rc.1"
90
+ "@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
91
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
92
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
93
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6",
94
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
95
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
96
+ "@deepseek-ai/dsh-llm": "^0.1.0-rc.6",
97
+ "@deepseek-ai/dsh-session": "^0.1.0-rc.6",
98
+ "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6",
99
+ "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6",
100
+ "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
101
+ "@deepseek-ai/schemastery": "^3.18.1-rc.1",
102
+ "react": "^18.2.0"
103
+ },
104
+ "peerDependenciesMeta": {
105
+ "@deepseek-ai/cordis": {
106
+ "optional": true
107
+ },
108
+ "@deepseek-ai/dsh-agent": {
109
+ "optional": true
110
+ },
111
+ "@deepseek-ai/dsh-client-locale": {
112
+ "optional": true
113
+ },
114
+ "@deepseek-ai/dsh-client-runtime": {
115
+ "optional": true
116
+ },
117
+ "@deepseek-ai/dsh-client-ui-conversation": {
118
+ "optional": true
119
+ },
120
+ "@deepseek-ai/dsh-client-ui-primitives": {
121
+ "optional": true
122
+ },
123
+ "@deepseek-ai/dsh-client-ui-slots": {
124
+ "optional": true
125
+ },
126
+ "@deepseek-ai/dsh-llm": {
127
+ "optional": true
128
+ },
129
+ "@deepseek-ai/dsh-session": {
130
+ "optional": true
131
+ },
132
+ "@deepseek-ai/dsh-subagent": {
133
+ "optional": true
134
+ },
135
+ "@deepseek-ai/dsh-system-prompt": {
136
+ "optional": true
137
+ },
138
+ "@deepseek-ai/dsh-tools": {
139
+ "optional": true
140
+ },
141
+ "@deepseek-ai/schemastery": {
142
+ "optional": true
143
+ },
144
+ "react": {
145
+ "optional": true
146
+ }
104
147
  },
105
148
  "devDependencies": {
149
+ "@deepseek-ai/cordis": "^4.0.1",
150
+ "@deepseek-ai/dsh-agent": "0.1.0-rc.6",
151
+ "@deepseek-ai/dsh-client-locale": "0.1.0-rc.6",
152
+ "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.6",
153
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.6",
154
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.6",
155
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.6",
156
+ "@deepseek-ai/dsh-llm": "0.1.0-rc.6",
157
+ "@deepseek-ai/dsh-session": "0.1.0-rc.6",
158
+ "@deepseek-ai/dsh-subagent": "0.1.0-rc.6",
159
+ "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
160
+ "@deepseek-ai/dsh-tools": "0.1.0-rc.6",
161
+ "@deepseek-ai/dsh-workspace": "0.1.0-rc.6",
162
+ "@deepseek-ai/schemastery": "^3.18.1",
163
+ "@types/node": "^24.13.3",
106
164
  "@types/react": "~18.3.1",
107
- "@types/react-dom": "^19.2.4",
165
+ "@types/react-dom": "^18.3.7",
108
166
  "lightningcss": "^1.33.0",
109
- "tsdown": "0.22.2",
110
- "typescript": "^5.9.3",
111
167
  "react": "^18.2.0",
112
- "react-dom": "^18.2.0"
168
+ "react-dom": "^18.2.0",
169
+ "tsdown": "0.22.2",
170
+ "typescript": "^5.9.3"
113
171
  }
114
172
  }