@nanmicoder/dsh-agent-teams 0.1.8 → 0.1.10
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 +9 -4
- package/README_ZH.md +5 -1
- package/assets/agent-teams/action-celebrating-v2.png +0 -0
- package/assets/agent-teams/action-reporting-v2.png +0 -0
- package/assets/agent-teams/action-sending-v2.png +0 -0
- package/assets/agent-teams/action-sleeping-v2.png +0 -0
- package/assets/agent-teams/action-thinking-v2.png +0 -0
- package/assets/agent-teams/action-working-v2.png +0 -0
- package/assets/agent-teams/member-data-v2.png +0 -0
- package/assets/agent-teams/member-designer-v2.png +0 -0
- package/assets/agent-teams/member-docs-v2.png +0 -0
- package/assets/agent-teams/member-engineer-v2.png +0 -0
- package/assets/agent-teams/member-operator-v2.png +0 -0
- package/assets/agent-teams/member-qa-v2.png +0 -0
- package/assets/agent-teams/member-researcher-v2.png +0 -0
- package/assets/agent-teams/member-security-v2.png +0 -0
- package/assets/agent-teams/team-lead-v2.png +0 -0
- package/assets/ui.png +0 -0
- package/lib/client/ActivityPanel.js +226 -23
- package/lib/client/activity-model.js +4 -4
- package/lib/client/artwork.js +15 -12
- package/lib/client/index.js +21 -14
- package/lib/client/panel-geometry.js +143 -0
- package/lib/client.js +505 -92
- package/lib/client.js.map +1 -1
- package/lib/command.js +14 -15
- package/lib/index.js +9 -6
- package/lib/types/client/ActivityPanel.d.ts +8 -6
- package/lib/types/client/activity-model.d.ts +4 -4
- package/lib/types/client/artwork.d.ts +1 -1
- package/lib/types/client/index.d.ts +3 -4
- package/lib/types/client/panel-geometry.d.ts +49 -0
- package/lib/types/command.d.ts +14 -15
- package/package.json +23 -23
- package/release-notes/v0.1.10.md +48 -0
- package/assets/agent-teams/action-celebrating.png +0 -0
- package/assets/agent-teams/action-reporting.png +0 -0
- package/assets/agent-teams/action-sending.png +0 -0
- package/assets/agent-teams/action-sleeping.png +0 -0
- package/assets/agent-teams/action-thinking.png +0 -0
- package/assets/agent-teams/action-working.png +0 -0
- package/assets/agent-teams/data-analyst.png +0 -0
- package/assets/agent-teams/designer.png +0 -0
- package/assets/agent-teams/docs-coordinator.png +0 -0
- package/assets/agent-teams/engineer.png +0 -0
- package/assets/agent-teams/qa-engineer.png +0 -0
- package/assets/agent-teams/researcher.png +0 -0
- package/assets/agent-teams/security-reviewer.png +0 -0
- package/assets/agent-teams/team-lead.png +0 -0
package/lib/client.js
CHANGED
|
@@ -5,7 +5,6 @@ window.__ModuleLoader__.load({
|
|
|
5
5
|
var exports = module.exports;
|
|
6
6
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
-
let react_dom_client = require("react-dom/client");
|
|
9
8
|
let react = require("react");
|
|
10
9
|
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
11
10
|
/** Use a fill-width grid when the task graph has no real dependency edges. */
|
|
@@ -17,10 +16,10 @@ window.__ModuleLoader__.load({
|
|
|
17
16
|
/**
|
|
18
17
|
* Whether an expanded activity panel still belongs to the current session.
|
|
19
18
|
*
|
|
20
|
-
* The panel is mounted
|
|
21
|
-
* when the conversation route changes. Ownership keeps an expanded
|
|
22
|
-
* from leaking onto the new-session screen (or another conversation)
|
|
23
|
-
* its local open state is being reset.
|
|
19
|
+
* The panel is mounted in the root-scoped shell overlay, so React does not
|
|
20
|
+
* remount it when the conversation route changes. Ownership keeps an expanded
|
|
21
|
+
* panel from leaking onto the new-session screen (or another conversation)
|
|
22
|
+
* while its local open state is being reset.
|
|
24
23
|
*/
|
|
25
24
|
function activityPanelExpandedForSession(open, owner, current) {
|
|
26
25
|
return open && owner !== void 0 && owner === current;
|
|
@@ -321,23 +320,24 @@ window.__ModuleLoader__.load({
|
|
|
321
320
|
*/
|
|
322
321
|
/** Artwork route prefix served by the plugin host half. */
|
|
323
322
|
const ART_BASE = "/plugins/dsh-agent-teams/assets/";
|
|
324
|
-
/**
|
|
323
|
+
/** V2 whale role artwork per role keyword. */
|
|
325
324
|
const ROLE_ART = [
|
|
326
|
-
[/
|
|
327
|
-
[/
|
|
328
|
-
[/\bqa\b|test|verif|quality
|
|
329
|
-
[/
|
|
330
|
-
[/
|
|
331
|
-
[/
|
|
332
|
-
[/
|
|
325
|
+
[/data|analys|metric|performance|数据|分析|指标|性能/, "member-data-v2.png"],
|
|
326
|
+
[/resear|investig|explor|study|研究|调查|探索|调研/, "member-researcher-v2.png"],
|
|
327
|
+
[/\bqa\b|test|verif|quality|测试|质量|验证/, "member-qa-v2.png"],
|
|
328
|
+
[/engineer|dev\b|server|backend|\bapi\b|runtime|watcher|contract|工程|后端|服务|接口|开发|代码|编程/, "member-engineer-v2.png"],
|
|
329
|
+
[/design|\bui\b|\bux\b|front|theme|accessib|设计|前端|主题|无障碍/, "member-designer-v2.png"],
|
|
330
|
+
[/secur|audit|risk|threat|review|安全|审计|审查|风险/, "member-security-v2.png"],
|
|
331
|
+
[/docs|writer|product|spec|撰写|文案|写作|文档|规范/, "member-docs-v2.png"],
|
|
332
|
+
[/release|\bbuild\b|deploy|\bops\b|\bci\b|ship|coordin|发布|构建|部署|运维|协调/, "member-operator-v2.png"]
|
|
333
333
|
];
|
|
334
334
|
/** Captain artwork (always the lead whale). */
|
|
335
|
-
const LEAD_ART = `${ART_BASE}team-lead.png`;
|
|
335
|
+
const LEAD_ART = `${ART_BASE}team-lead-v2.png`;
|
|
336
336
|
/** Status action artwork per member activity. */
|
|
337
337
|
const ACTION_ART = {
|
|
338
|
-
working: `${ART_BASE}action-working.png`,
|
|
339
|
-
idle: `${ART_BASE}action-sleeping.png`,
|
|
340
|
-
unknown: `${ART_BASE}action-thinking.png`
|
|
338
|
+
working: `${ART_BASE}action-working-v2.png`,
|
|
339
|
+
idle: `${ART_BASE}action-sleeping-v2.png`,
|
|
340
|
+
unknown: `${ART_BASE}action-thinking-v2.png`
|
|
341
341
|
};
|
|
342
342
|
/**
|
|
343
343
|
* Member artwork URL, or null when no role matches (initial-letter fallback).
|
|
@@ -352,7 +352,7 @@ window.__ModuleLoader__.load({
|
|
|
352
352
|
}
|
|
353
353
|
//#endregion
|
|
354
354
|
//#region \0dsh-css:/home/runner/work/dsh-agent-teams/dsh-agent-teams/src/client/AgentTeamsCard.module.css.mjs
|
|
355
|
-
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{
|
|
355
|
+
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{object-fit:contain;filter:drop-shadow(0 1px 1px #122d4833);background:0 0;border:0;border-radius:0;flex:none;width:30px;height:30px}.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{object-fit:contain;filter:drop-shadow(0 1px 1px #122d482e);background:0 0;border:0;border-radius:0;width:24px;height:24px}.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}";
|
|
356
356
|
const tagId$1 = "@nanmicoder/dsh-agent-teams/AgentTeamsCard.module.css";
|
|
357
357
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
358
358
|
const tag = document.createElement("style");
|
|
@@ -482,8 +482,162 @@ window.__ModuleLoader__.load({
|
|
|
482
482
|
});
|
|
483
483
|
}
|
|
484
484
|
//#endregion
|
|
485
|
+
//#region lib/client/panel-geometry.js
|
|
486
|
+
/** Pure persisted geometry rules for the AgentTeams shell-overlay panel. */
|
|
487
|
+
const PANEL_LAYOUT_STORAGE_KEY = "dsh-agent-teams:activity-panel:v1";
|
|
488
|
+
const DEFAULT_PANEL_LAYOUT = Object.freeze({
|
|
489
|
+
mode: "docked",
|
|
490
|
+
x: 0,
|
|
491
|
+
y: 64,
|
|
492
|
+
width: 388,
|
|
493
|
+
height: 640,
|
|
494
|
+
heightMode: "auto"
|
|
495
|
+
});
|
|
496
|
+
function clamp(value, minimum, maximum) {
|
|
497
|
+
return Math.min(Math.max(value, minimum), maximum);
|
|
498
|
+
}
|
|
499
|
+
function finite(value) {
|
|
500
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
501
|
+
}
|
|
502
|
+
/** Decode one versioned localStorage value, rejecting partial/corrupt state. */
|
|
503
|
+
function parsePanelLayout(value) {
|
|
504
|
+
if (value === null) return DEFAULT_PANEL_LAYOUT;
|
|
505
|
+
try {
|
|
506
|
+
const parsed = JSON.parse(value);
|
|
507
|
+
if (typeof parsed !== "object" || parsed === null) return DEFAULT_PANEL_LAYOUT;
|
|
508
|
+
const record = parsed;
|
|
509
|
+
if (record.mode !== "docked" && record.mode !== "floating" || !finite(record.x) || !finite(record.y) || !finite(record.width) || !finite(record.height)) return DEFAULT_PANEL_LAYOUT;
|
|
510
|
+
return {
|
|
511
|
+
mode: record.mode,
|
|
512
|
+
x: record.x,
|
|
513
|
+
y: record.y,
|
|
514
|
+
width: record.width,
|
|
515
|
+
height: record.height,
|
|
516
|
+
heightMode: record.mode === "floating" && record.heightMode === "manual" ? "manual" : "auto"
|
|
517
|
+
};
|
|
518
|
+
} catch {
|
|
519
|
+
return DEFAULT_PANEL_LAYOUT;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
/** Whether the panel should become a simple inset overlay with no gestures. */
|
|
523
|
+
function compactPanelForBounds(bounds) {
|
|
524
|
+
return bounds.width <= 960;
|
|
525
|
+
}
|
|
526
|
+
/** Docked and compact panels always fit content; floating panels may be user-sized. */
|
|
527
|
+
function panelUsesAutoHeight(layout, bounds) {
|
|
528
|
+
return compactPanelForBounds(bounds) || layout.mode === "docked" || layout.heightMode === "auto";
|
|
529
|
+
}
|
|
530
|
+
/** CSS max-height ceiling that keeps an auto-height panel inside its shell. */
|
|
531
|
+
function panelMaximumHeight(layout, bounds) {
|
|
532
|
+
const bottomInset = compactPanelForBounds(bounds) || layout.mode === "floating" ? 12 : 48;
|
|
533
|
+
return Math.max(1, bounds.height - layout.y - bottomInset);
|
|
534
|
+
}
|
|
535
|
+
/** Resolve persisted state into a visible rectangle inside the current shell. */
|
|
536
|
+
function resolvePanelGeometry(layout, bounds) {
|
|
537
|
+
const boundsWidth = Math.max(1, bounds.width);
|
|
538
|
+
const boundsHeight = Math.max(1, bounds.height);
|
|
539
|
+
if (compactPanelForBounds(bounds)) return {
|
|
540
|
+
...layout,
|
|
541
|
+
x: 12,
|
|
542
|
+
y: 12,
|
|
543
|
+
width: Math.max(1, boundsWidth - 24),
|
|
544
|
+
height: Math.max(1, boundsHeight - 24)
|
|
545
|
+
};
|
|
546
|
+
const maximumWidth = Math.max(1, Math.min(640, boundsWidth - 24));
|
|
547
|
+
const minimumWidth = Math.min(320, maximumWidth);
|
|
548
|
+
const width = clamp(layout.width, minimumWidth, maximumWidth);
|
|
549
|
+
const maximumHeight = Math.max(1, boundsHeight - 24);
|
|
550
|
+
const minimumHeight = Math.min(360, maximumHeight);
|
|
551
|
+
if (layout.mode === "docked") {
|
|
552
|
+
const y = clamp(64, 12, Math.max(12, boundsHeight - minimumHeight - 12));
|
|
553
|
+
const availableHeight = Math.max(1, boundsHeight - y - 48);
|
|
554
|
+
const height = clamp(availableHeight, Math.min(minimumHeight, availableHeight), maximumHeight);
|
|
555
|
+
const anchorRight = clamp(bounds.anchorRight, 0, boundsWidth);
|
|
556
|
+
const maximumX = Math.max(12, boundsWidth - width - 12);
|
|
557
|
+
return {
|
|
558
|
+
mode: "docked",
|
|
559
|
+
x: clamp(anchorRight - 18 - width, 12, maximumX),
|
|
560
|
+
y,
|
|
561
|
+
width,
|
|
562
|
+
height,
|
|
563
|
+
heightMode: layout.heightMode
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
const height = clamp(layout.height, minimumHeight, maximumHeight);
|
|
567
|
+
return {
|
|
568
|
+
mode: "floating",
|
|
569
|
+
x: clamp(layout.x, 12, Math.max(12, boundsWidth - width - 12)),
|
|
570
|
+
y: clamp(layout.y, 12, Math.max(12, boundsHeight - height - 12)),
|
|
571
|
+
width,
|
|
572
|
+
height,
|
|
573
|
+
heightMode: layout.heightMode
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
/** Undock without a visual jump by adopting the panel's resolved rectangle. */
|
|
577
|
+
function floatPanelLayout(geometry, bounds) {
|
|
578
|
+
return resolvePanelGeometry({
|
|
579
|
+
...geometry,
|
|
580
|
+
mode: "floating"
|
|
581
|
+
}, bounds);
|
|
582
|
+
}
|
|
583
|
+
/** Return to the right dock, preserving width and restoring content-fit height. */
|
|
584
|
+
function dockPanelLayout(layout, bounds) {
|
|
585
|
+
return resolvePanelGeometry({
|
|
586
|
+
...layout,
|
|
587
|
+
mode: "docked",
|
|
588
|
+
heightMode: "auto"
|
|
589
|
+
}, bounds);
|
|
590
|
+
}
|
|
591
|
+
/** Translate a floating panel and clamp it back into the visible shell. */
|
|
592
|
+
function movePanelLayout(start, dx, dy, bounds) {
|
|
593
|
+
return resolvePanelGeometry({
|
|
594
|
+
...start,
|
|
595
|
+
mode: "floating",
|
|
596
|
+
x: start.x + dx,
|
|
597
|
+
y: start.y + dy
|
|
598
|
+
}, bounds);
|
|
599
|
+
}
|
|
600
|
+
/** Resize while keeping the edge opposite the active handle stationary. */
|
|
601
|
+
function resizePanelLayout(start, edge, dx, dy, bounds) {
|
|
602
|
+
if (start.mode === "docked") {
|
|
603
|
+
if (edge !== "left") return resolvePanelGeometry(start, bounds);
|
|
604
|
+
return resolvePanelGeometry({
|
|
605
|
+
...start,
|
|
606
|
+
width: start.width - dx
|
|
607
|
+
}, bounds);
|
|
608
|
+
}
|
|
609
|
+
const resolved = resolvePanelGeometry(start, bounds);
|
|
610
|
+
const minimumWidth = Math.min(320, resolved.x + resolved.width - 12);
|
|
611
|
+
const minimumHeight = Math.min(360, bounds.height - resolved.y - 12);
|
|
612
|
+
if (edge === "left") {
|
|
613
|
+
const right = resolved.x + resolved.width;
|
|
614
|
+
const maximumWidth = Math.max(1, Math.min(640, right - 12));
|
|
615
|
+
const width = clamp(resolved.width - dx, Math.min(minimumWidth, maximumWidth), maximumWidth);
|
|
616
|
+
return {
|
|
617
|
+
...resolved,
|
|
618
|
+
x: right - width,
|
|
619
|
+
width
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
const maximumHeight = Math.max(1, bounds.height - resolved.y - 12);
|
|
623
|
+
const height = clamp(resolved.height + dy, Math.min(minimumHeight, maximumHeight), maximumHeight);
|
|
624
|
+
if (edge === "bottom") return {
|
|
625
|
+
...resolved,
|
|
626
|
+
height,
|
|
627
|
+
heightMode: "manual"
|
|
628
|
+
};
|
|
629
|
+
const maximumWidth = Math.max(1, Math.min(640, bounds.width - resolved.x - 12));
|
|
630
|
+
const width = clamp(resolved.width + dx, Math.min(minimumWidth, maximumWidth), maximumWidth);
|
|
631
|
+
return {
|
|
632
|
+
...resolved,
|
|
633
|
+
width,
|
|
634
|
+
height,
|
|
635
|
+
heightMode: "manual"
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
//#endregion
|
|
485
639
|
//#region \0dsh-css:/home/runner/work/dsh-agent-teams/dsh-agent-teams/src/client/ActivityPanel.module.css.mjs
|
|
486
|
-
const css = "html{--agent-teams-panel-width:388px;--agent-teams-panel-top:64px;--agent-teams-panel-bottom-gap:64px;--agent-teams-panel-min-height:560px;--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,.aYQbCq_panel{--dsw-alias-line-normal:var(--dsw-static-neutral-bluish-150,#e7e9ee);--dsw-alias-line-strong:color-mix(in srgb, var(--dsw-static-neutral-bluish-200,#e1e5ee) 50%, var(--dsw-static-neutral-bluish-300,#cfd3d6));--dsw-alias-bg-module:var(--dsw-alias-bg-layer-1,#fff);--dsw-alias-bg-fill-neutral:var(--dsw-static-neutral-bluish-100,#eef0f4);--dsw-alias-bg-fill-business:var(--dsw-alias-state-business-primary,#4d6bfe);--dsw-alias-bg-fill-success:var(--dsw-alias-state-success-primary,#12a150);--dsw-alias-bg-fill-warning:var(--dsw-alias-state-warn-primary,#e08700);--dsw-alias-bg-fill-danger:var(--dsw-alias-state-error-primary,#e5484d);--dsw-alias-state-success:var(--dsw-alias-state-success-primary,#12a150);--dsw-alias-state-warning:var(--dsw-alias-state-warn-primary,#e08700);--dsw-alias-state-danger:var(--dsw-alias-state-error-primary,#e5484d);--dsw-alias-label-on-fill:var(--dsw-alias-label-primary-inverted,#fff)}.aYQbCq_badge{top:var(--agent-teams-panel-top);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_membersToggle:focus-visible,.aYQbCq_sectionToggleTitle:focus-visible,.aYQbCq_dagNode: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:var(--agent-teams-panel-top);right:var(--agent-teams-panel-right);z-index:2147483000;width:min(var(--agent-teams-panel-width), calc(100vw - 24px));min-height:min(var(--agent-teams-panel-min-height), calc(100dvh - var(--agent-teams-panel-top) - var(--agent-teams-panel-bottom-gap)));max-height:calc(100dvh - var(--agent-teams-panel-top) - var(--agent-teams-panel-bottom-gap));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) 95%, transparent);backdrop-filter:blur(20px)saturate(1.08);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;scrollbar-width:none;flex-direction:column;min-height:0;display:flex;overflow-y:auto}.aYQbCq_teams::-webkit-scrollbar{display:none}.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_workGlyph rect{opacity:.5}.aYQbCq_workGlyph[data-active=true] rect{animation:1.1s ease-in-out infinite aYQbCq_agentTeamsDot}@keyframes aYQbCq_agentTeamsDot{0%,to{opacity:.25}50%{opacity:1}}.aYQbCq_progressOverview{flex-direction:column;gap:7px;display:flex}.aYQbCq_progressTitle{color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:600;line-height:16px}.aYQbCq_progressSegments{gap:3px;display:flex}.aYQbCq_progressSegments>span,.aYQbCq_progressEmpty{background:var(--dsw-alias-line-strong);border-radius:2px;flex:1;height:5px}.aYQbCq_progressEmpty{width:100%;display:block}.aYQbCq_progressSegments>span[data-state=running]{background:var(--dsw-alias-state-business-primary)}.aYQbCq_progressSegments>span[data-state=blocked]{background:var(--dsw-alias-state-warning)}.aYQbCq_progressSegments>span[data-state=completed]{background:var(--dsw-alias-state-success)}.aYQbCq_progressSegments>span[data-state=failed]{background:var(--dsw-alias-state-danger)}.aYQbCq_progressSegments>span[data-state=cancelled]{opacity:.55}.aYQbCq_progressLegend{color:var(--dsw-alias-label-tertiary);gap:10px;font-size:9.5px;line-height:14px;display:flex}.aYQbCq_progressLegend>span[data-state=running]{color:var(--dsw-alias-state-business-primary)}.aYQbCq_progressLegend>span[data-state=blocked]{color:var(--dsw-alias-state-warning)}.aYQbCq_progressLegend>span[data-state=completed]{color:var(--dsw-alias-state-success)}.aYQbCq_progressSummary{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-module));min-width:0;color:var(--dsw-alias-label-secondary);border-radius:8px;align-items:center;gap:6px;padding:5px 8px;font-size:10px;font-weight:600;line-height:15px;display:flex}.aYQbCq_progressSummary[data-state=warning]{background:color-mix(in srgb, var(--dsw-alias-state-warning) 8%, var(--dsw-alias-bg-module))}.aYQbCq_progressSummary[data-state=completed]{background:color-mix(in srgb, var(--dsw-alias-state-success) 8%, var(--dsw-alias-bg-module))}.aYQbCq_progressSummary>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.aYQbCq_progressSummaryDot{background:var(--dsw-alias-state-business-primary);border-radius:50%;flex:none;width:5px;height:5px}.aYQbCq_progressSummary[data-state=warning] .aYQbCq_progressSummaryDot{background:var(--dsw-alias-state-warning)}.aYQbCq_progressSummary[data-state=completed] .aYQbCq_progressSummaryDot{background:var(--dsw-alias-state-success)}.aYQbCq_membersToggle{background:var(--dsw-alias-bg-module-platform);width:100%;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border:0;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;font-size:10.5px;font-weight:600;line-height:15px;display:flex}.aYQbCq_membersToggle:hover{background:var(--dsw-alias-bg-fill-neutral)}.aYQbCq_membersToggle>span{align-items:center;gap:5px;display:inline-flex}.aYQbCq_membersToggle>span:last-child{color:var(--dsw-alias-state-business-primary)}.aYQbCq_chevron{flex:none;transition:transform .14s}.aYQbCq_chevron[data-open=true]{transform:rotate(90deg)}.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);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_sectionToggleTitle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0;font-size:11px;font-weight:600;line-height:16px;display:inline-flex}.aYQbCq_dagViewport{scrollbar-width:thin;min-width:0;padding:2px 0 4px;overflow-x:auto}.aYQbCq_dagCanvas{min-width:100%;position:relative}.aYQbCq_dagCanvas[data-layout=parallel]{flex-wrap:wrap;gap:8px;display:flex}.aYQbCq_dagCanvas[data-layout=parallel] .aYQbCq_dagNode{flex:92px;min-width:92px;position:relative}.aYQbCq_dagEdges{pointer-events:none;position:absolute;inset:0;overflow:visible}.aYQbCq_dagEdges path{fill:none;stroke:var(--dsw-alias-line-strong);stroke-width:1px;transition:opacity .14s,stroke .14s,stroke-width .14s}.aYQbCq_dagEdges path[data-active=true]{stroke:var(--dsw-alias-state-business-primary);stroke-width:1.6px}.aYQbCq_dagEdges path[data-dimmed=true]{opacity:.24}.aYQbCq_dagNode{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;border-radius:6px;flex-direction:column;justify-content:center;gap:1px;padding:0 6px;transition:border-color .14s,background-color .14s,opacity .14s;display:flex;position:absolute}.aYQbCq_dagNode:hover,.aYQbCq_dagNode[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))}.aYQbCq_dagNode[data-dimmed=true]{opacity:.3}.aYQbCq_dagNode[data-state=running][data-dimmed=true]{opacity:.58}.aYQbCq_dagNode[data-state=completed]{border-color:color-mix(in srgb, var(--dsw-alias-state-success) 48%, var(--dsw-alias-line-normal))}.aYQbCq_dagNode[data-state=blocked]{border-color:color-mix(in srgb, var(--dsw-alias-state-warning) 52%, var(--dsw-alias-line-normal))}.aYQbCq_dagNode[data-state=failed]{border-color:color-mix(in srgb, var(--dsw-alias-state-danger) 56%, var(--dsw-alias-line-normal))}.aYQbCq_dagNodeHead{color:var(--dsw-alias-label-primary);align-items:center;gap:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:700;display:flex}.aYQbCq_dagNodeDot{background:var(--dsw-alias-line-strong);border-radius:1.5px;flex:none;width:5px;height:5px}.aYQbCq_dagNode[data-state=running] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-business-primary)}.aYQbCq_dagNode[data-state=running] .aYQbCq_dagNodeHead{padding-right:12px}.aYQbCq_dagRunningState{width:9px;height:9px;color:var(--dsw-alias-state-business-primary);pointer-events:none;justify-content:center;align-items:center;display:inline-flex;position:absolute;top:4px;right:5px}.aYQbCq_dagRunningState .aYQbCq_workGlyph{width:9px;height:9px}.aYQbCq_dagNode[data-state=blocked] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-warning)}.aYQbCq_dagNode[data-state=completed] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-success)}.aYQbCq_dagNode[data-state=failed] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-danger)}.aYQbCq_dagNodeLabel{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:8.5px;line-height:11px;overflow:hidden}.aYQbCq_taskDetail{border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module-platform);border-radius:9px;flex-direction:column;gap:3px;min-width:0;padding:7px 9px;display:flex}.aYQbCq_taskDetailHead{align-items:center;gap:6px;min-width:0;display:flex}.aYQbCq_taskDetailId{color:var(--dsw-alias-state-business-primary);flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:700}.aYQbCq_taskDetailSubject{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;line-height:16px;overflow:hidden}.aYQbCq_taskDetailBadge{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 5px;font-size:8.5px;font-weight:600;line-height:14px}.aYQbCq_taskDetailBadge[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailBadge[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailBadge[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailBadge[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailLine,.aYQbCq_taskDetailMeta{color:var(--dsw-alias-label-secondary);font-size:9.5px;line-height:14px}.aYQbCq_taskDetailMeta{color:var(--dsw-alias-label-tertiary)}.aYQbCq_emptyHint{color:var(--dsw-alias-label-tertiary);padding:10px 12px;font-size:11px;line-height:16px}.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_workGlyph rect,.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));--agent-teams-panel-top:56px;--agent-teams-panel-bottom-gap:56px}.aYQbCq_panel{width:auto;left:10px}.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}}";
|
|
640
|
+
const css = "html{--agent-teams-panel-shift:420px}html[data-agent-teams-panel-open] [data-phase=active]{box-sizing:border-box;padding-right:var(--agent-teams-panel-shift)}.aYQbCq_badge,.aYQbCq_panel{--dsw-alias-line-normal:var(--dsw-static-neutral-bluish-150,#e7e9ee);--dsw-alias-line-strong:color-mix(in srgb, var(--dsw-static-neutral-bluish-200,#e1e5ee) 50%, var(--dsw-static-neutral-bluish-300,#cfd3d6));--dsw-alias-bg-module:var(--dsw-alias-bg-layer-1,#fff);--dsw-alias-bg-fill-neutral:var(--dsw-static-neutral-bluish-100,#eef0f4);--dsw-alias-bg-fill-business:var(--dsw-alias-state-business-primary,#4d6bfe);--dsw-alias-bg-fill-success:var(--dsw-alias-state-success-primary,#12a150);--dsw-alias-bg-fill-warning:var(--dsw-alias-state-warn-primary,#e08700);--dsw-alias-bg-fill-danger:var(--dsw-alias-state-error-primary,#e5484d);--dsw-alias-state-success:var(--dsw-alias-state-success-primary,#12a150);--dsw-alias-state-warning:var(--dsw-alias-state-warn-primary,#e08700);--dsw-alias-state-danger:var(--dsw-alias-state-error-primary,#e5484d);--dsw-alias-label-on-fill:var(--dsw-alias-label-primary-inverted,#fff)}.aYQbCq_badge{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:absolute;top:64px;right:18px}.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_iconButton:focus-visible,.aYQbCq_memberRow:focus-visible,.aYQbCq_membersToggle:focus-visible,.aYQbCq_sectionToggleTitle:focus-visible,.aYQbCq_dagNode: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{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) 95%, transparent);backdrop-filter:blur(20px)saturate(1.08);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);will-change:transform;border-radius:16px;flex-direction:column;animation:.16s ease-out aYQbCq_agentTeamsPanelIn;display:flex;position:absolute;top:0;left:0;overflow:hidden}.aYQbCq_panel[data-dragging],.aYQbCq_panel[data-resizing]{user-select:none;box-shadow:0 16px 38px color-mix(in srgb, var(--dsw-alias-label-primary) 14%, transparent), 0 36px 78px color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent)}@keyframes aYQbCq_agentTeamsPanelIn{0%{opacity:0}to{opacity:1}}@keyframes aYQbCq_agentTeamsPulse{0%,to{opacity:.42}50%{opacity:1}}.aYQbCq_panelHead{border-bottom:1px solid var(--dsw-alias-line-normal);cursor:grab;touch-action:none;flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:0 14px 0 16px;display:flex}.aYQbCq_panelHead:active,.aYQbCq_panel[data-dragging] .aYQbCq_panelHead{cursor:grabbing}.aYQbCq_panel[data-compact] .aYQbCq_panelHead{cursor:default;touch-action:auto}.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_panelControls{flex:none;align-items:center;gap:2px;display:inline-flex}.aYQbCq_iconButton{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_iconButton:hover{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-primary)}.aYQbCq_iconButton:active{transform:scale(.94)}.aYQbCq_iconButton[data-control=dock][data-mode=docked] svg{transform:scaleX(-1)}.aYQbCq_resizeHandle{z-index:1;touch-action:none;position:absolute}.aYQbCq_resizeHandle[data-resize-edge=left]{cursor:ew-resize;width:8px;top:44px;bottom:8px;left:0}.aYQbCq_resizeHandle[data-resize-edge=bottom]{cursor:ns-resize;height:8px;bottom:0;left:12px;right:12px}.aYQbCq_resizeHandle[data-resize-edge=corner]{cursor:nwse-resize;width:18px;height:18px;bottom:0;right:0}.aYQbCq_resizeHandle[data-resize-edge=corner]:after{border-right:1px solid var(--dsw-alias-label-tertiary);border-bottom:1px solid var(--dsw-alias-label-tertiary);content:\"\";opacity:.52;width:7px;height:7px;position:absolute;bottom:4px;right:4px}.aYQbCq_teams{overscroll-behavior:contain;scrollbar-color:color-mix(in srgb, var(--dsw-alias-label-tertiary) 28%, transparent) transparent;scrollbar-width:thin;flex-direction:column;min-height:0;display:flex;overflow-y:auto}.aYQbCq_teams::-webkit-scrollbar{width:6px}.aYQbCq_teams::-webkit-scrollbar-track{background:0 0}.aYQbCq_teams::-webkit-scrollbar-thumb{background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 28%, transparent);background-clip:padding-box;border:2px solid #0000;border-radius:999px}.aYQbCq_teams:hover::-webkit-scrollbar-thumb{background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 44%, transparent);background-clip:padding-box}.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:48px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:56px;padding:6px 10px;display:grid}.aYQbCq_captainAvatar,.aYQbCq_memberAvatar{flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.aYQbCq_captainAvatar{width:46px;height:46px}.aYQbCq_leadAvatar,.aYQbCq_memberArt{object-fit:contain;filter:drop-shadow(0 1px 1px #122d4833);background:0 0;border:0;border-radius:0}.aYQbCq_leadAvatar{width:44px;height:44px}.aYQbCq_memberArt{width:40px;height:40px}.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_workGlyph rect{opacity:.5}.aYQbCq_workGlyph[data-active=true] rect{animation:1.1s ease-in-out infinite aYQbCq_agentTeamsDot}@keyframes aYQbCq_agentTeamsDot{0%,to{opacity:.25}50%{opacity:1}}.aYQbCq_progressOverview{flex-direction:column;gap:7px;display:flex}.aYQbCq_progressTitle{color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:600;line-height:16px}.aYQbCq_progressSegments{gap:3px;display:flex}.aYQbCq_progressSegments>span,.aYQbCq_progressEmpty{background:var(--dsw-alias-line-strong);border-radius:2px;flex:1;height:5px}.aYQbCq_progressEmpty{width:100%;display:block}.aYQbCq_progressSegments>span[data-state=running]{background:var(--dsw-alias-state-business-primary)}.aYQbCq_progressSegments>span[data-state=blocked]{background:var(--dsw-alias-state-warning)}.aYQbCq_progressSegments>span[data-state=completed]{background:var(--dsw-alias-state-success)}.aYQbCq_progressSegments>span[data-state=failed]{background:var(--dsw-alias-state-danger)}.aYQbCq_progressSegments>span[data-state=cancelled]{opacity:.55}.aYQbCq_progressLegend{color:var(--dsw-alias-label-tertiary);gap:10px;font-size:9.5px;line-height:14px;display:flex}.aYQbCq_progressLegend>span[data-state=running]{color:var(--dsw-alias-state-business-primary)}.aYQbCq_progressLegend>span[data-state=blocked]{color:var(--dsw-alias-state-warning)}.aYQbCq_progressLegend>span[data-state=completed]{color:var(--dsw-alias-state-success)}.aYQbCq_progressSummary{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-module));min-width:0;color:var(--dsw-alias-label-secondary);border-radius:8px;align-items:center;gap:6px;padding:5px 8px;font-size:10px;font-weight:600;line-height:15px;display:flex}.aYQbCq_progressSummary[data-state=warning]{background:color-mix(in srgb, var(--dsw-alias-state-warning) 8%, var(--dsw-alias-bg-module))}.aYQbCq_progressSummary[data-state=completed]{background:color-mix(in srgb, var(--dsw-alias-state-success) 8%, var(--dsw-alias-bg-module))}.aYQbCq_progressSummary>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.aYQbCq_progressSummaryDot{background:var(--dsw-alias-state-business-primary);border-radius:50%;flex:none;width:5px;height:5px}.aYQbCq_progressSummary[data-state=warning] .aYQbCq_progressSummaryDot{background:var(--dsw-alias-state-warning)}.aYQbCq_progressSummary[data-state=completed] .aYQbCq_progressSummaryDot{background:var(--dsw-alias-state-success)}.aYQbCq_membersToggle{background:var(--dsw-alias-bg-module-platform);width:100%;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border:0;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;font-size:10.5px;font-weight:600;line-height:15px;display:flex}.aYQbCq_membersToggle:hover{background:var(--dsw-alias-bg-fill-neutral)}.aYQbCq_membersToggle>span{align-items:center;gap:5px;display:inline-flex}.aYQbCq_membersToggle>span:last-child{color:var(--dsw-alias-state-business-primary)}.aYQbCq_chevron{flex:none;transition:transform .14s}.aYQbCq_chevron[data-open=true]{transform:rotate(90deg)}.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:27px;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:48px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;grid-template-columns:46px 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:42px;height:42px}.aYQbCq_memberAvatar[data-unread=true]:after{box-sizing:border-box;border:1px solid var(--dsw-alias-bg-module);background:var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;width:6px;height:6px;animation:1.8s ease-in-out infinite aYQbCq_agentTeamsUnreadPulse;position:absolute;top:0;right:-1px}@keyframes aYQbCq_agentTeamsUnreadPulse{0%,to{opacity:.78;transform:scale(.92)}50%{opacity:1;transform:scale(1.16)}}.aYQbCq_memberInitial{background:var(--dsw-alias-bg-fill-business);width:34px;height:34px;color:var(--dsw-alias-label-on-fill);border-radius:50%;justify-content:center;align-items:center;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.aYQbCq_stateArt{box-sizing:border-box;object-fit:contain;width:22px;height:22px;filter:drop-shadow(0 0 1px var(--dsw-alias-bg-module)) drop-shadow(0 1px 1px #122d483d);background:0 0;border:0;border-radius:0;position:absolute;bottom:-3px;right:-5px}.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 60px;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_sectionToggleTitle{color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0;font-size:11px;font-weight:600;line-height:16px;display:inline-flex}.aYQbCq_dagViewport{scrollbar-width:thin;min-width:0;padding:2px 0 4px;overflow-x:auto}.aYQbCq_dagCanvas{min-width:100%;position:relative}.aYQbCq_dagCanvas[data-layout=parallel]{flex-wrap:wrap;gap:8px;display:flex}.aYQbCq_dagCanvas[data-layout=parallel] .aYQbCq_dagNode{flex:92px;min-width:92px;position:relative}.aYQbCq_dagEdges{pointer-events:none;position:absolute;inset:0;overflow:visible}.aYQbCq_dagEdges path{fill:none;stroke:var(--dsw-alias-line-strong);stroke-width:1px;transition:opacity .14s,stroke .14s,stroke-width .14s}.aYQbCq_dagEdges path[data-active=true]{stroke:var(--dsw-alias-state-business-primary);stroke-width:1.6px}.aYQbCq_dagEdges path[data-dimmed=true]{opacity:.24}.aYQbCq_dagNode{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;border-radius:6px;flex-direction:column;justify-content:center;gap:1px;padding:0 6px;transition:border-color .14s,background-color .14s,opacity .14s;display:flex;position:absolute}.aYQbCq_dagNode:hover,.aYQbCq_dagNode[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))}.aYQbCq_dagNode[data-dimmed=true]{opacity:.3}.aYQbCq_dagNode[data-state=running][data-dimmed=true]{opacity:.58}.aYQbCq_dagNode[data-state=completed]{border-color:color-mix(in srgb, var(--dsw-alias-state-success) 48%, var(--dsw-alias-line-normal))}.aYQbCq_dagNode[data-state=blocked]{border-color:color-mix(in srgb, var(--dsw-alias-state-warning) 52%, var(--dsw-alias-line-normal))}.aYQbCq_dagNode[data-state=failed]{border-color:color-mix(in srgb, var(--dsw-alias-state-danger) 56%, var(--dsw-alias-line-normal))}.aYQbCq_dagNodeHead{color:var(--dsw-alias-label-primary);align-items:center;gap:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:700;display:flex}.aYQbCq_dagNodeDot{background:var(--dsw-alias-line-strong);border-radius:1.5px;flex:none;width:5px;height:5px}.aYQbCq_dagNode[data-state=running] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-business-primary)}.aYQbCq_dagNode[data-state=running] .aYQbCq_dagNodeHead{padding-right:12px}.aYQbCq_dagRunningState{width:9px;height:9px;color:var(--dsw-alias-state-business-primary);pointer-events:none;justify-content:center;align-items:center;display:inline-flex;position:absolute;top:4px;right:5px}.aYQbCq_dagRunningState .aYQbCq_workGlyph{width:9px;height:9px}.aYQbCq_dagNode[data-state=blocked] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-warning)}.aYQbCq_dagNode[data-state=completed] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-success)}.aYQbCq_dagNode[data-state=failed] .aYQbCq_dagNodeDot{background:var(--dsw-alias-state-danger)}.aYQbCq_dagNodeLabel{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:8.5px;line-height:11px;overflow:hidden}.aYQbCq_taskDetail{border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module-platform);border-radius:9px;flex-direction:column;gap:3px;min-width:0;padding:7px 9px;display:flex}.aYQbCq_taskDetailHead{align-items:center;gap:6px;min-width:0;display:flex}.aYQbCq_taskDetailId{color:var(--dsw-alias-state-business-primary);flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:700}.aYQbCq_taskDetailSubject{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;line-height:16px;overflow:hidden}.aYQbCq_taskDetailBadge{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:0 5px;font-size:8.5px;font-weight:600;line-height:14px}.aYQbCq_taskDetailBadge[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailBadge[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailBadge[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailBadge[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskDetailLine,.aYQbCq_taskDetailMeta{color:var(--dsw-alias-label-secondary);font-size:9.5px;line-height:14px}.aYQbCq_taskDetailMeta{color:var(--dsw-alias-label-tertiary)}.aYQbCq_emptyHint{color:var(--dsw-alias-label-tertiary);padding:10px 12px;font-size:11px;line-height:16px}.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){.aYQbCq_panel,.aYQbCq_badge,.aYQbCq_badgeDot,.aYQbCq_panelDot,.aYQbCq_workGlyph rect,.aYQbCq_stateArt,.aYQbCq_memberAvatar[data-unread=true]:after{transition:none;animation:none}}@media (width<=960px){html[data-agent-teams-panel-open] [data-phase=active]{padding-right:0}}@media (width<=640px){.aYQbCq_badge{top:56px;right:10px}.aYQbCq_teamStats span[data-stat=messages]{display:none}.aYQbCq_captainNode{grid-template-columns:48px minmax(0,1fr)}.aYQbCq_captainState{display:none}.aYQbCq_delegationTree{margin-left:12px;padding-left:15px}.aYQbCq_memberBranch{width:15px}.aYQbCq_assignmentLine{padding-left:53px}}";
|
|
487
641
|
const tagId = "@nanmicoder/dsh-agent-teams/ActivityPanel.module.css";
|
|
488
642
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
489
643
|
const tag = document.createElement("style");
|
|
@@ -498,8 +652,8 @@ window.__ModuleLoader__.load({
|
|
|
498
652
|
"agentTeamsFloat": "aYQbCq_agentTeamsFloat",
|
|
499
653
|
"agentTeamsPanelIn": "aYQbCq_agentTeamsPanelIn",
|
|
500
654
|
"agentTeamsPulse": "aYQbCq_agentTeamsPulse",
|
|
501
|
-
"agentTeamsRing": "aYQbCq_agentTeamsRing",
|
|
502
655
|
"agentTeamsThink": "aYQbCq_agentTeamsThink",
|
|
656
|
+
"agentTeamsUnreadPulse": "aYQbCq_agentTeamsUnreadPulse",
|
|
503
657
|
"archivedWrap": "aYQbCq_archivedWrap",
|
|
504
658
|
"assignmentChip": "aYQbCq_assignmentChip",
|
|
505
659
|
"assignmentLabel": "aYQbCq_assignmentLabel",
|
|
@@ -517,7 +671,6 @@ window.__ModuleLoader__.load({
|
|
|
517
671
|
"captainState": "aYQbCq_captainState",
|
|
518
672
|
"captainSummary": "aYQbCq_captainSummary",
|
|
519
673
|
"chevron": "aYQbCq_chevron",
|
|
520
|
-
"closeButton": "aYQbCq_closeButton",
|
|
521
674
|
"dagCanvas": "aYQbCq_dagCanvas",
|
|
522
675
|
"dagEdges": "aYQbCq_dagEdges",
|
|
523
676
|
"dagNode": "aYQbCq_dagNode",
|
|
@@ -531,6 +684,7 @@ window.__ModuleLoader__.load({
|
|
|
531
684
|
"dependencySection": "aYQbCq_dependencySection",
|
|
532
685
|
"emptyHint": "aYQbCq_emptyHint",
|
|
533
686
|
"historicPill": "aYQbCq_historicPill",
|
|
687
|
+
"iconButton": "aYQbCq_iconButton",
|
|
534
688
|
"leadAvatar": "aYQbCq_leadAvatar",
|
|
535
689
|
"memberArt": "aYQbCq_memberArt",
|
|
536
690
|
"memberAvatar": "aYQbCq_memberAvatar",
|
|
@@ -548,6 +702,7 @@ window.__ModuleLoader__.load({
|
|
|
548
702
|
"members": "aYQbCq_members",
|
|
549
703
|
"membersToggle": "aYQbCq_membersToggle",
|
|
550
704
|
"panel": "aYQbCq_panel",
|
|
705
|
+
"panelControls": "aYQbCq_panelControls",
|
|
551
706
|
"panelDot": "aYQbCq_panelDot",
|
|
552
707
|
"panelHead": "aYQbCq_panelHead",
|
|
553
708
|
"panelTitle": "aYQbCq_panelTitle",
|
|
@@ -558,6 +713,7 @@ window.__ModuleLoader__.load({
|
|
|
558
713
|
"progressSummary": "aYQbCq_progressSummary",
|
|
559
714
|
"progressSummaryDot": "aYQbCq_progressSummaryDot",
|
|
560
715
|
"progressTitle": "aYQbCq_progressTitle",
|
|
716
|
+
"resizeHandle": "aYQbCq_resizeHandle",
|
|
561
717
|
"sectionHead": "aYQbCq_sectionHead",
|
|
562
718
|
"sectionHint": "aYQbCq_sectionHint",
|
|
563
719
|
"sectionTitle": "aYQbCq_sectionTitle",
|
|
@@ -586,17 +742,19 @@ window.__ModuleLoader__.load({
|
|
|
586
742
|
/**
|
|
587
743
|
* AgentTeams activity panel: the top-right floater monitoring every team.
|
|
588
744
|
*
|
|
589
|
-
* Modeled on the Claude Code desktop SessionActivityPanel: a
|
|
590
|
-
* panel at the top-right
|
|
591
|
-
*
|
|
745
|
+
* Modeled on the Claude Code desktop SessionActivityPanel: a shell-overlay
|
|
746
|
+
* panel that docks at the conversation's top-right edge by default, can be
|
|
747
|
+
* dragged into a floating window, resized, and folded into an activity badge.
|
|
748
|
+
* On wide viewports the docked panel makes the conversation column yield
|
|
749
|
+
* space; narrow viewports keep a simple inset overlay. It
|
|
592
750
|
* polls the host `/plugins/dsh-agent-teams/state` route for
|
|
593
751
|
* server-side snapshots (durable files + live subagent activity), with a
|
|
594
752
|
* collapsed badge that auto-expands once when activity appears. Archived
|
|
595
753
|
* teams stay available for the owning conversation after live work ends.
|
|
596
754
|
*
|
|
597
|
-
* The floater mounts
|
|
598
|
-
*
|
|
599
|
-
*
|
|
755
|
+
* The floater mounts in ui-layout's additive `shell.overlay`; it is not a
|
|
756
|
+
* conversation node — the in-conversation panel was removed in favor of this
|
|
757
|
+
* always-available monitor.
|
|
600
758
|
* @module dsh-agent-teams/client/activity
|
|
601
759
|
*/
|
|
602
760
|
/** Grace before the panel collapses once no team remains. */
|
|
@@ -607,8 +765,28 @@ window.__ModuleLoader__.load({
|
|
|
607
765
|
* right after load. New activity after this window auto-expands as usual.
|
|
608
766
|
*/
|
|
609
767
|
const AUTO_OPEN_SETTLE_MS = 4e3;
|
|
610
|
-
/** Root marker shared with the panel CSS while the
|
|
768
|
+
/** Root marker shared with the panel CSS while the shell overlay is expanded. */
|
|
611
769
|
const PANEL_OPEN_ATTRIBUTE = "data-agent-teams-panel-open";
|
|
770
|
+
/** Shared width concession consumed by the conversation root CSS. */
|
|
771
|
+
const PANEL_SHIFT_PROPERTY = "--agent-teams-panel-shift";
|
|
772
|
+
const PANEL_CONVERSATION_GAP = 14;
|
|
773
|
+
const MOVE_THRESHOLD = 4;
|
|
774
|
+
function initialPanelLayout() {
|
|
775
|
+
if (typeof window === "undefined") return DEFAULT_PANEL_LAYOUT;
|
|
776
|
+
return parsePanelLayout(window.localStorage.getItem(PANEL_LAYOUT_STORAGE_KEY));
|
|
777
|
+
}
|
|
778
|
+
function initialPanelBounds() {
|
|
779
|
+
if (typeof window === "undefined") return {
|
|
780
|
+
width: 1440,
|
|
781
|
+
height: 900,
|
|
782
|
+
anchorRight: 1440
|
|
783
|
+
};
|
|
784
|
+
return {
|
|
785
|
+
width: window.innerWidth,
|
|
786
|
+
height: window.innerHeight,
|
|
787
|
+
anchorRight: window.innerWidth
|
|
788
|
+
};
|
|
789
|
+
}
|
|
612
790
|
/** Initial-letter fallback for unmatched roles. */
|
|
613
791
|
function memberInitial(name) {
|
|
614
792
|
return name.trim().slice(0, 1).toUpperCase() || "?";
|
|
@@ -693,6 +871,7 @@ window.__ModuleLoader__.load({
|
|
|
693
871
|
return (0, react_jsx_runtime.jsxs)("button", {
|
|
694
872
|
type: "button",
|
|
695
873
|
className: ActivityPanel_module_css_default.badge,
|
|
874
|
+
"data-agent-teams-collapsed": true,
|
|
696
875
|
"data-busy": busy,
|
|
697
876
|
onClick,
|
|
698
877
|
"aria-label": `AgentTeams 活动,${count} 个团队`,
|
|
@@ -1215,6 +1394,14 @@ window.__ModuleLoader__.load({
|
|
|
1215
1394
|
const [autoOpened, setAutoOpened] = (0, react.useState)(false);
|
|
1216
1395
|
const [wasActive, setWasActive] = (0, react.useState)(false);
|
|
1217
1396
|
const [historic, setHistoric] = (0, react.useState)(/* @__PURE__ */ new Map());
|
|
1397
|
+
const [layout, setLayout] = (0, react.useState)(initialPanelLayout);
|
|
1398
|
+
const [bounds, setBounds] = (0, react.useState)(initialPanelBounds);
|
|
1399
|
+
const [interaction, setInteraction] = (0, react.useState)(null);
|
|
1400
|
+
const panelRef = (0, react.useRef)(null);
|
|
1401
|
+
const boundsRef = (0, react.useRef)(bounds);
|
|
1402
|
+
const gestureRef = (0, react.useRef)(null);
|
|
1403
|
+
const frameRef = (0, react.useRef)(null);
|
|
1404
|
+
const pendingLayoutRef = (0, react.useRef)(null);
|
|
1218
1405
|
const current = (0, react.useSyncExternalStore)(sessionsList.subscribe, sessionsList.getSnapshot).current;
|
|
1219
1406
|
const monitorTargets = (0, react.useSyncExternalStore)(subscribeActivityMonitorTargets, getActivityMonitorTargetsSnapshot);
|
|
1220
1407
|
const { teams, archivedTeams } = (0, react.useSyncExternalStore)(subscribeActivitySnapshots, getActivitySnapshotsSnapshot);
|
|
@@ -1225,6 +1412,47 @@ window.__ModuleLoader__.load({
|
|
|
1225
1412
|
}, [current]);
|
|
1226
1413
|
const mountedAtRef = (0, react.useRef)(performance.now());
|
|
1227
1414
|
const expanded = activityPanelExpandedForSession(open, openOwner, current);
|
|
1415
|
+
const geometry = (0, react.useMemo)(() => resolvePanelGeometry(layout, bounds), [layout, bounds]);
|
|
1416
|
+
const compact = compactPanelForBounds(bounds);
|
|
1417
|
+
const commitLayout = (0, react.useCallback)((next) => {
|
|
1418
|
+
setLayout(next);
|
|
1419
|
+
}, []);
|
|
1420
|
+
(0, react.useEffect)(() => {
|
|
1421
|
+
window.localStorage.setItem(PANEL_LAYOUT_STORAGE_KEY, JSON.stringify(layout));
|
|
1422
|
+
}, [layout]);
|
|
1423
|
+
(0, react.useLayoutEffect)(() => {
|
|
1424
|
+
const overlay = document.querySelector("[data-shell-overlay]");
|
|
1425
|
+
if (overlay === null) return;
|
|
1426
|
+
const conversation = document.querySelector("[data-phase='active']");
|
|
1427
|
+
let frame = null;
|
|
1428
|
+
const measure = () => {
|
|
1429
|
+
frame = null;
|
|
1430
|
+
const overlayRect = overlay.getBoundingClientRect();
|
|
1431
|
+
const conversationRect = conversation?.getBoundingClientRect();
|
|
1432
|
+
const next = {
|
|
1433
|
+
width: overlayRect.width,
|
|
1434
|
+
height: overlayRect.height,
|
|
1435
|
+
anchorRight: conversationRect === void 0 ? overlayRect.width : Math.min(Math.max(conversationRect.right - overlayRect.left, 0), overlayRect.width)
|
|
1436
|
+
};
|
|
1437
|
+
const previous = boundsRef.current;
|
|
1438
|
+
if (previous.width === next.width && previous.height === next.height && previous.anchorRight === next.anchorRight) return;
|
|
1439
|
+
boundsRef.current = next;
|
|
1440
|
+
setBounds(next);
|
|
1441
|
+
};
|
|
1442
|
+
const scheduleMeasure = () => {
|
|
1443
|
+
frame ??= requestAnimationFrame(measure);
|
|
1444
|
+
};
|
|
1445
|
+
measure();
|
|
1446
|
+
const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(scheduleMeasure);
|
|
1447
|
+
observer?.observe(overlay);
|
|
1448
|
+
if (conversation !== null) observer?.observe(conversation);
|
|
1449
|
+
window.addEventListener("resize", scheduleMeasure);
|
|
1450
|
+
return () => {
|
|
1451
|
+
if (frame !== null) cancelAnimationFrame(frame);
|
|
1452
|
+
observer?.disconnect();
|
|
1453
|
+
window.removeEventListener("resize", scheduleMeasure);
|
|
1454
|
+
};
|
|
1455
|
+
}, [current]);
|
|
1228
1456
|
(0, react.useLayoutEffect)(() => {
|
|
1229
1457
|
if (openOwner === void 0 || openOwner === current) return;
|
|
1230
1458
|
setOpen(false);
|
|
@@ -1234,12 +1462,23 @@ window.__ModuleLoader__.load({
|
|
|
1234
1462
|
}, [current, openOwner]);
|
|
1235
1463
|
(0, react.useLayoutEffect)(() => {
|
|
1236
1464
|
const root = document.documentElement;
|
|
1237
|
-
if (expanded
|
|
1238
|
-
|
|
1465
|
+
if (expanded && geometry.mode === "docked" && !compact) {
|
|
1466
|
+
root.setAttribute(PANEL_OPEN_ATTRIBUTE, "");
|
|
1467
|
+
root.style.setProperty(PANEL_SHIFT_PROPERTY, `${geometry.width + PANEL_CONVERSATION_GAP + 18}px`);
|
|
1468
|
+
} else {
|
|
1469
|
+
root.removeAttribute(PANEL_OPEN_ATTRIBUTE);
|
|
1470
|
+
root.style.removeProperty(PANEL_SHIFT_PROPERTY);
|
|
1471
|
+
}
|
|
1239
1472
|
return () => {
|
|
1240
1473
|
root.removeAttribute(PANEL_OPEN_ATTRIBUTE);
|
|
1474
|
+
root.style.removeProperty(PANEL_SHIFT_PROPERTY);
|
|
1241
1475
|
};
|
|
1242
|
-
}, [
|
|
1476
|
+
}, [
|
|
1477
|
+
compact,
|
|
1478
|
+
expanded,
|
|
1479
|
+
geometry.mode,
|
|
1480
|
+
geometry.width
|
|
1481
|
+
]);
|
|
1243
1482
|
(0, react.useEffect)(() => {
|
|
1244
1483
|
if (currentTargets.length === 0) return;
|
|
1245
1484
|
const controller = startActivityPolling(currentTargets);
|
|
@@ -1312,7 +1551,114 @@ window.__ModuleLoader__.load({
|
|
|
1312
1551
|
wasActive
|
|
1313
1552
|
]);
|
|
1314
1553
|
const busy = (0, react.useMemo)(() => visibleTeams.some((team) => team.members.some((member) => member.activity === "working")), [visibleTeams]);
|
|
1315
|
-
|
|
1554
|
+
const hasTeams = visibleCount > 0;
|
|
1555
|
+
const panelGeometryForGesture = (0, react.useCallback)(() => {
|
|
1556
|
+
const measuredHeight = panelRef.current?.getBoundingClientRect().height;
|
|
1557
|
+
if (measuredHeight === void 0 || measuredHeight <= 0) return geometry;
|
|
1558
|
+
return {
|
|
1559
|
+
...geometry,
|
|
1560
|
+
height: measuredHeight
|
|
1561
|
+
};
|
|
1562
|
+
}, [geometry]);
|
|
1563
|
+
const flushScheduledLayout = (0, react.useCallback)(() => {
|
|
1564
|
+
if (frameRef.current !== null) {
|
|
1565
|
+
cancelAnimationFrame(frameRef.current);
|
|
1566
|
+
frameRef.current = null;
|
|
1567
|
+
}
|
|
1568
|
+
const pending = pendingLayoutRef.current;
|
|
1569
|
+
pendingLayoutRef.current = null;
|
|
1570
|
+
if (pending !== null) commitLayout(pending);
|
|
1571
|
+
}, [commitLayout]);
|
|
1572
|
+
const scheduleLayout = (0, react.useCallback)((next) => {
|
|
1573
|
+
pendingLayoutRef.current = next;
|
|
1574
|
+
frameRef.current ??= requestAnimationFrame(() => {
|
|
1575
|
+
frameRef.current = null;
|
|
1576
|
+
const pending = pendingLayoutRef.current;
|
|
1577
|
+
pendingLayoutRef.current = null;
|
|
1578
|
+
if (pending !== null) commitLayout(pending);
|
|
1579
|
+
});
|
|
1580
|
+
}, [commitLayout]);
|
|
1581
|
+
(0, react.useEffect)(() => () => {
|
|
1582
|
+
if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
|
|
1583
|
+
}, []);
|
|
1584
|
+
const beginMove = (0, react.useCallback)((event) => {
|
|
1585
|
+
if (compact || event.button !== 0 || event.target.closest("button") !== null) return;
|
|
1586
|
+
event.preventDefault();
|
|
1587
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
1588
|
+
gestureRef.current = {
|
|
1589
|
+
kind: "move",
|
|
1590
|
+
pointerId: event.pointerId,
|
|
1591
|
+
originX: event.clientX,
|
|
1592
|
+
originY: event.clientY,
|
|
1593
|
+
start: panelGeometryForGesture(),
|
|
1594
|
+
activated: false
|
|
1595
|
+
};
|
|
1596
|
+
}, [compact, panelGeometryForGesture]);
|
|
1597
|
+
const beginResize = (0, react.useCallback)((edge, event) => {
|
|
1598
|
+
if (compact || event.button !== 0 || geometry.mode === "docked" && edge !== "left") return;
|
|
1599
|
+
event.preventDefault();
|
|
1600
|
+
event.stopPropagation();
|
|
1601
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
1602
|
+
gestureRef.current = {
|
|
1603
|
+
kind: "resize",
|
|
1604
|
+
edge,
|
|
1605
|
+
pointerId: event.pointerId,
|
|
1606
|
+
originX: event.clientX,
|
|
1607
|
+
originY: event.clientY,
|
|
1608
|
+
start: panelGeometryForGesture(),
|
|
1609
|
+
activated: true
|
|
1610
|
+
};
|
|
1611
|
+
setInteraction("resizing");
|
|
1612
|
+
}, [
|
|
1613
|
+
compact,
|
|
1614
|
+
geometry.mode,
|
|
1615
|
+
panelGeometryForGesture
|
|
1616
|
+
]);
|
|
1617
|
+
const updateGesture = (0, react.useCallback)((event) => {
|
|
1618
|
+
const gesture = gestureRef.current;
|
|
1619
|
+
if (gesture === null || gesture.pointerId !== event.pointerId || !event.currentTarget.hasPointerCapture(event.pointerId)) return;
|
|
1620
|
+
const dx = event.clientX - gesture.originX;
|
|
1621
|
+
const dy = event.clientY - gesture.originY;
|
|
1622
|
+
const activeBounds = boundsRef.current;
|
|
1623
|
+
if (gesture.kind === "move") {
|
|
1624
|
+
if (!gesture.activated && Math.hypot(dx, dy) < MOVE_THRESHOLD) return;
|
|
1625
|
+
if (!gesture.activated) {
|
|
1626
|
+
gesture.activated = true;
|
|
1627
|
+
setInteraction("dragging");
|
|
1628
|
+
}
|
|
1629
|
+
scheduleLayout(movePanelLayout(floatPanelLayout(gesture.start, activeBounds), dx, dy, activeBounds));
|
|
1630
|
+
return;
|
|
1631
|
+
}
|
|
1632
|
+
scheduleLayout(resizePanelLayout(gesture.start, gesture.edge ?? "left", dx, dy, activeBounds));
|
|
1633
|
+
}, [scheduleLayout]);
|
|
1634
|
+
const endGesture = (0, react.useCallback)((event) => {
|
|
1635
|
+
const gesture = gestureRef.current;
|
|
1636
|
+
if (gesture === null || gesture.pointerId !== event.pointerId) return;
|
|
1637
|
+
updateGesture(event);
|
|
1638
|
+
flushScheduledLayout();
|
|
1639
|
+
if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);
|
|
1640
|
+
gestureRef.current = null;
|
|
1641
|
+
setInteraction(null);
|
|
1642
|
+
}, [flushScheduledLayout, updateGesture]);
|
|
1643
|
+
const cancelGesture = (0, react.useCallback)((event) => {
|
|
1644
|
+
const gesture = gestureRef.current;
|
|
1645
|
+
if (gesture === null || gesture.pointerId !== event.pointerId) return;
|
|
1646
|
+
flushScheduledLayout();
|
|
1647
|
+
gestureRef.current = null;
|
|
1648
|
+
setInteraction(null);
|
|
1649
|
+
}, [flushScheduledLayout]);
|
|
1650
|
+
const toggleDock = (0, react.useCallback)(() => {
|
|
1651
|
+
const liveGeometry = panelGeometryForGesture();
|
|
1652
|
+
commitLayout(liveGeometry.mode === "docked" ? floatPanelLayout(liveGeometry, boundsRef.current) : dockPanelLayout(liveGeometry, boundsRef.current));
|
|
1653
|
+
}, [commitLayout, panelGeometryForGesture]);
|
|
1654
|
+
const autoHeight = panelUsesAutoHeight(geometry, bounds);
|
|
1655
|
+
const panelStyle = {
|
|
1656
|
+
width: geometry.width,
|
|
1657
|
+
height: autoHeight ? "auto" : geometry.height,
|
|
1658
|
+
maxHeight: panelMaximumHeight(geometry, bounds),
|
|
1659
|
+
transform: `translate3d(${geometry.x}px, ${geometry.y}px, 0)`
|
|
1660
|
+
};
|
|
1661
|
+
if (!hasTeams && !expanded) return null;
|
|
1316
1662
|
return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [!expanded && (0, react_jsx_runtime.jsx)(CollapsedBadge, {
|
|
1317
1663
|
count: visibleCount,
|
|
1318
1664
|
busy,
|
|
@@ -1322,57 +1668,119 @@ window.__ModuleLoader__.load({
|
|
|
1322
1668
|
setOpen(true);
|
|
1323
1669
|
}
|
|
1324
1670
|
}), expanded && (0, react_jsx_runtime.jsxs)("aside", {
|
|
1671
|
+
ref: panelRef,
|
|
1325
1672
|
className: ActivityPanel_module_css_default.panel,
|
|
1673
|
+
style: panelStyle,
|
|
1326
1674
|
"data-agent-teams-activity": true,
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1675
|
+
"data-panel-mode": geometry.mode,
|
|
1676
|
+
"data-height-mode": autoHeight ? "auto" : "manual",
|
|
1677
|
+
"data-compact": compact || void 0,
|
|
1678
|
+
"data-dragging": interaction === "dragging" || void 0,
|
|
1679
|
+
"data-resizing": interaction === "resizing" || void 0,
|
|
1680
|
+
"aria-label": "AgentTeams 活动面板",
|
|
1681
|
+
children: [
|
|
1682
|
+
(0, react_jsx_runtime.jsxs)("header", {
|
|
1683
|
+
className: ActivityPanel_module_css_default.panelHead,
|
|
1684
|
+
onPointerDown: beginMove,
|
|
1685
|
+
onPointerMove: updateGesture,
|
|
1686
|
+
onPointerUp: endGesture,
|
|
1687
|
+
onPointerCancel: cancelGesture,
|
|
1688
|
+
"data-drag-handle": !compact || void 0,
|
|
1689
|
+
children: [(0, react_jsx_runtime.jsxs)("span", {
|
|
1690
|
+
className: ActivityPanel_module_css_default.panelTitle,
|
|
1691
|
+
children: ["AgentTeams 活动", (0, react_jsx_runtime.jsx)("span", {
|
|
1692
|
+
className: ActivityPanel_module_css_default.panelDot,
|
|
1693
|
+
"data-busy": busy,
|
|
1694
|
+
"aria-hidden": true
|
|
1695
|
+
})]
|
|
1696
|
+
}), (0, react_jsx_runtime.jsxs)("span", {
|
|
1697
|
+
className: ActivityPanel_module_css_default.panelControls,
|
|
1698
|
+
children: [!compact && (0, react_jsx_runtime.jsx)("button", {
|
|
1699
|
+
type: "button",
|
|
1700
|
+
className: ActivityPanel_module_css_default.iconButton,
|
|
1701
|
+
"data-control": "dock",
|
|
1702
|
+
"data-mode": geometry.mode,
|
|
1703
|
+
onClick: toggleDock,
|
|
1704
|
+
"aria-label": geometry.mode === "docked" ? "切换为浮动面板" : "停靠到右侧",
|
|
1705
|
+
title: geometry.mode === "docked" ? "切换为浮动面板" : "停靠到右侧",
|
|
1706
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPanelLeftOutline16, {})
|
|
1707
|
+
}), (0, react_jsx_runtime.jsx)("button", {
|
|
1708
|
+
type: "button",
|
|
1709
|
+
className: ActivityPanel_module_css_default.iconButton,
|
|
1710
|
+
"data-control": "collapse",
|
|
1711
|
+
onClick: () => {
|
|
1712
|
+
setOpen(false);
|
|
1713
|
+
setOpenOwner(void 0);
|
|
1714
|
+
},
|
|
1715
|
+
"aria-label": "收起活动面板",
|
|
1716
|
+
title: "收起活动面板",
|
|
1717
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {})
|
|
1718
|
+
})]
|
|
1335
1719
|
})]
|
|
1336
|
-
}),
|
|
1337
|
-
|
|
1338
|
-
className: ActivityPanel_module_css_default.
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
},
|
|
1343
|
-
|
|
1344
|
-
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutline16, {})
|
|
1345
|
-
})]
|
|
1346
|
-
}), (0, react_jsx_runtime.jsx)("div", {
|
|
1347
|
-
className: ActivityPanel_module_css_default.teams,
|
|
1348
|
-
children: visibleCount === 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
1349
|
-
className: ActivityPanel_module_css_default.emptyHint,
|
|
1350
|
-
children: "暂无团队活动"
|
|
1351
|
-
}) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1352
|
-
visibleTeams.map((team) => (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1353
|
-
team,
|
|
1354
|
-
onNavigate: navigateToSession
|
|
1355
|
-
}, team.teamId)),
|
|
1356
|
-
visibleArchived.map((team) => (0, react_jsx_runtime.jsx)("div", {
|
|
1357
|
-
"data-team-id": team.teamId,
|
|
1358
|
-
"data-historic": true,
|
|
1359
|
-
className: ActivityPanel_module_css_default.archivedWrap,
|
|
1360
|
-
children: (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1720
|
+
}),
|
|
1721
|
+
(0, react_jsx_runtime.jsx)("div", {
|
|
1722
|
+
className: ActivityPanel_module_css_default.teams,
|
|
1723
|
+
children: visibleCount === 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
1724
|
+
className: ActivityPanel_module_css_default.emptyHint,
|
|
1725
|
+
children: "暂无团队活动"
|
|
1726
|
+
}) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1727
|
+
visibleTeams.map((team) => (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1361
1728
|
team,
|
|
1362
|
-
onNavigate: navigateToSession
|
|
1363
|
-
|
|
1729
|
+
onNavigate: navigateToSession
|
|
1730
|
+
}, team.teamId)),
|
|
1731
|
+
visibleArchived.map((team) => (0, react_jsx_runtime.jsx)("div", {
|
|
1732
|
+
"data-team-id": team.teamId,
|
|
1733
|
+
"data-historic": true,
|
|
1734
|
+
className: ActivityPanel_module_css_default.archivedWrap,
|
|
1735
|
+
children: (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1736
|
+
team,
|
|
1737
|
+
onNavigate: navigateToSession,
|
|
1738
|
+
historic: true
|
|
1739
|
+
})
|
|
1740
|
+
}, `${team.captainSessionId}:${team.teamId}`)),
|
|
1741
|
+
visibleHistoric.map(({ data: team, owner }) => {
|
|
1742
|
+
const teamKey = `${owner}:${team.teamId}`;
|
|
1743
|
+
return (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1744
|
+
team: historicCardTeam(team, owner),
|
|
1745
|
+
onNavigate: navigateToSession,
|
|
1746
|
+
historic: true
|
|
1747
|
+
}, teamKey);
|
|
1364
1748
|
})
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1749
|
+
] })
|
|
1750
|
+
}),
|
|
1751
|
+
!compact && (0, react_jsx_runtime.jsx)("div", {
|
|
1752
|
+
className: ActivityPanel_module_css_default.resizeHandle,
|
|
1753
|
+
"data-resize-edge": "left",
|
|
1754
|
+
onPointerDown: (event) => {
|
|
1755
|
+
beginResize("left", event);
|
|
1756
|
+
},
|
|
1757
|
+
onPointerMove: updateGesture,
|
|
1758
|
+
onPointerUp: endGesture,
|
|
1759
|
+
onPointerCancel: cancelGesture,
|
|
1760
|
+
"aria-hidden": true
|
|
1761
|
+
}),
|
|
1762
|
+
!compact && geometry.mode === "floating" && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("div", {
|
|
1763
|
+
className: ActivityPanel_module_css_default.resizeHandle,
|
|
1764
|
+
"data-resize-edge": "bottom",
|
|
1765
|
+
onPointerDown: (event) => {
|
|
1766
|
+
beginResize("bottom", event);
|
|
1767
|
+
},
|
|
1768
|
+
onPointerMove: updateGesture,
|
|
1769
|
+
onPointerUp: endGesture,
|
|
1770
|
+
onPointerCancel: cancelGesture,
|
|
1771
|
+
"aria-hidden": true
|
|
1772
|
+
}), (0, react_jsx_runtime.jsx)("div", {
|
|
1773
|
+
className: ActivityPanel_module_css_default.resizeHandle,
|
|
1774
|
+
"data-resize-edge": "corner",
|
|
1775
|
+
onPointerDown: (event) => {
|
|
1776
|
+
beginResize("corner", event);
|
|
1777
|
+
},
|
|
1778
|
+
onPointerMove: updateGesture,
|
|
1779
|
+
onPointerUp: endGesture,
|
|
1780
|
+
onPointerCancel: cancelGesture,
|
|
1781
|
+
"aria-hidden": true
|
|
1782
|
+
})] })
|
|
1783
|
+
]
|
|
1376
1784
|
})] });
|
|
1377
1785
|
}
|
|
1378
1786
|
//#endregion
|
|
@@ -1466,27 +1874,32 @@ window.__ModuleLoader__.load({
|
|
|
1466
1874
|
"slots",
|
|
1467
1875
|
"sessions"
|
|
1468
1876
|
];
|
|
1877
|
+
/** The replayed user message is the canonical transcript entry. */
|
|
1878
|
+
function HiddenAgentTeamsCommand() {
|
|
1879
|
+
return null;
|
|
1880
|
+
}
|
|
1469
1881
|
/**
|
|
1470
|
-
*
|
|
1471
|
-
*
|
|
1472
|
-
*
|
|
1473
|
-
* for a closed floater or a re-opened session.
|
|
1882
|
+
* Register the activity monitor in the shell's additive overlay and the
|
|
1883
|
+
* in-conversation team card. The card's activity button re-opens a folded
|
|
1884
|
+
* monitor via a window event — the recovery path for an old session.
|
|
1474
1885
|
*/
|
|
1475
1886
|
function apply(ctx) {
|
|
1476
|
-
const
|
|
1477
|
-
host.dataset.agentTeamsHost = "";
|
|
1478
|
-
document.body.appendChild(host);
|
|
1479
|
-
const root = (0, react_dom_client.createRoot)(host);
|
|
1480
|
-
root.render((0, react_jsx_runtime.jsx)(ActivityPanel, {
|
|
1887
|
+
const Panel = () => (0, react_jsx_runtime.jsx)(ActivityPanel, {
|
|
1481
1888
|
sessionsList: ctx.sessions.list,
|
|
1482
1889
|
openSession: (id) => {
|
|
1483
1890
|
ctx.sessions.open(id);
|
|
1484
1891
|
}
|
|
1485
|
-
})
|
|
1486
|
-
ctx.
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1892
|
+
});
|
|
1893
|
+
ctx.slots.inject("shell.overlay", () => ctx.slots.register({
|
|
1894
|
+
name: "shell.overlay",
|
|
1895
|
+
id: "agent-teams-activity",
|
|
1896
|
+
order: 80,
|
|
1897
|
+
label: "AgentTeams activity"
|
|
1898
|
+
}, Panel));
|
|
1899
|
+
ctx.slots.inject("conversation.chat.commandview", () => ctx.slots.register({
|
|
1900
|
+
name: "conversation.chat.commandview",
|
|
1901
|
+
key: "agent-teams"
|
|
1902
|
+
}, HiddenAgentTeamsCommand));
|
|
1490
1903
|
ctx.conversationEvents.register(agentTeamsCardDefinition);
|
|
1491
1904
|
ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({
|
|
1492
1905
|
name: "conversation.chat.node",
|