@nanmicoder/dsh-agent-teams 0.1.11 → 0.1.12
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 +3 -1
- package/README_ZH.md +3 -1
- package/lib/client/ActivityPanel.js +76 -61
- package/lib/client/AgentTeamsCard.js +2 -2
- package/lib/client/index.js +7 -3
- package/lib/client/locales.js +165 -0
- package/lib/client.js +304 -118
- package/lib/client.js.map +1 -1
- package/lib/types/client/ActivityPanel.d.ts +4 -2
- package/lib/types/client/AgentTeamsCard.d.ts +1 -1
- package/lib/types/client/index.d.ts +8 -1
- package/lib/types/client/locales.d.ts +169 -0
- package/package.json +1 -1
- package/release-notes/v0.1.12.md +54 -0
package/lib/client.js
CHANGED
|
@@ -414,7 +414,7 @@ window.__ModuleLoader__.load({
|
|
|
414
414
|
} }));
|
|
415
415
|
}
|
|
416
416
|
/** Render one durable team as a compact conversation card. */
|
|
417
|
-
function AgentTeamsCard({ node, openMember, sessionId }) {
|
|
417
|
+
function AgentTeamsCard({ node, openMember, sessionId, t }) {
|
|
418
418
|
const data = node.data;
|
|
419
419
|
const owner = data.captainSessionId || sessionId;
|
|
420
420
|
const { teams, archivedTeams } = (0, react.useSyncExternalStore)(subscribeActivitySnapshots, getActivitySnapshotsSnapshot);
|
|
@@ -454,9 +454,9 @@ window.__ModuleLoader__.load({
|
|
|
454
454
|
title: resolved.teamName,
|
|
455
455
|
children: resolved.teamName
|
|
456
456
|
}),
|
|
457
|
-
(0, react_jsx_runtime.
|
|
457
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
458
458
|
className: AgentTeamsCard_module_css_default.memberCount,
|
|
459
|
-
children:
|
|
459
|
+
children: t("card.memberCount", { count: resolved.members.length })
|
|
460
460
|
}),
|
|
461
461
|
(0, react_jsx_runtime.jsx)("button", {
|
|
462
462
|
type: "button",
|
|
@@ -464,9 +464,9 @@ window.__ModuleLoader__.load({
|
|
|
464
464
|
onClick: () => {
|
|
465
465
|
openActivityPanel(resolved);
|
|
466
466
|
},
|
|
467
|
-
"aria-label": "
|
|
468
|
-
title: "
|
|
469
|
-
children: "
|
|
467
|
+
"aria-label": t("action.openActivityPanel"),
|
|
468
|
+
title: t("action.openActivityPanel"),
|
|
469
|
+
children: t("activity.panelButton")
|
|
470
470
|
})
|
|
471
471
|
]
|
|
472
472
|
}), resolved.members.length > 0 && (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -650,7 +650,7 @@ window.__ModuleLoader__.load({
|
|
|
650
650
|
}
|
|
651
651
|
//#endregion
|
|
652
652
|
//#region \0dsh-css:/home/runner/work/dsh-agent-teams/dsh-agent-teams/src/client/ActivityPanel.module.css.mjs
|
|
653
|
-
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}}";
|
|
653
|
+
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_archiveLabel{color:var(--dsw-alias-label-tertiary);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}}";
|
|
654
654
|
const tagId = "@nanmicoder/dsh-agent-teams/ActivityPanel.module.css";
|
|
655
655
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
656
656
|
const tag = document.createElement("style");
|
|
@@ -667,7 +667,7 @@ window.__ModuleLoader__.load({
|
|
|
667
667
|
"agentTeamsPulse": "aYQbCq_agentTeamsPulse",
|
|
668
668
|
"agentTeamsThink": "aYQbCq_agentTeamsThink",
|
|
669
669
|
"agentTeamsUnreadPulse": "aYQbCq_agentTeamsUnreadPulse",
|
|
670
|
-
"
|
|
670
|
+
"archiveLabel": "aYQbCq_archiveLabel",
|
|
671
671
|
"assignmentChip": "aYQbCq_assignmentChip",
|
|
672
672
|
"assignmentLabel": "aYQbCq_assignmentLabel",
|
|
673
673
|
"assignmentLine": "aYQbCq_assignmentLine",
|
|
@@ -822,15 +822,19 @@ window.__ModuleLoader__.load({
|
|
|
822
822
|
/** Badge text follows the raw task status (finer than the 4 visual states):
|
|
823
823
|
* claimed/pending/failed/cancelled keep their own labels and colors. */
|
|
824
824
|
const TASK_STATUS_LABEL = {
|
|
825
|
-
pending: "
|
|
826
|
-
claimed: "
|
|
827
|
-
in_progress: "
|
|
828
|
-
completed: "
|
|
829
|
-
failed: "
|
|
830
|
-
cancelled: "
|
|
825
|
+
pending: "task.status.pending",
|
|
826
|
+
claimed: "task.status.claimed",
|
|
827
|
+
in_progress: "task.status.inProgress",
|
|
828
|
+
completed: "task.status.completed",
|
|
829
|
+
failed: "task.status.failed",
|
|
830
|
+
cancelled: "task.status.cancelled"
|
|
831
831
|
};
|
|
832
|
-
function taskStatusLabel(status) {
|
|
833
|
-
|
|
832
|
+
function taskStatusLabel(status, t) {
|
|
833
|
+
const key = TASK_STATUS_LABEL[status];
|
|
834
|
+
return key === void 0 ? status : t(key);
|
|
835
|
+
}
|
|
836
|
+
function formatTaskIds(ids, t) {
|
|
837
|
+
return ids.join(t("format.listSeparator"));
|
|
834
838
|
}
|
|
835
839
|
/** Badge/bar coloring key: visual state, widened for terminal statuses. */
|
|
836
840
|
function taskTone(state, status) {
|
|
@@ -880,14 +884,14 @@ window.__ModuleLoader__.load({
|
|
|
880
884
|
});
|
|
881
885
|
}
|
|
882
886
|
/** Collapsed badge: an always-visible corner pill while any team exists. */
|
|
883
|
-
function CollapsedBadge({ count, busy, onClick }) {
|
|
887
|
+
function CollapsedBadge({ count, busy, onClick, t }) {
|
|
884
888
|
return (0, react_jsx_runtime.jsxs)("button", {
|
|
885
889
|
type: "button",
|
|
886
890
|
className: ActivityPanel_module_css_default.badge,
|
|
887
891
|
"data-agent-teams-collapsed": true,
|
|
888
892
|
"data-busy": busy,
|
|
889
893
|
onClick,
|
|
890
|
-
"aria-label":
|
|
894
|
+
"aria-label": t("activity.badgeAria", { count }),
|
|
891
895
|
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
892
896
|
className: ActivityPanel_module_css_default.badgeDot,
|
|
893
897
|
"data-busy": busy,
|
|
@@ -898,62 +902,68 @@ window.__ModuleLoader__.load({
|
|
|
898
902
|
})]
|
|
899
903
|
});
|
|
900
904
|
}
|
|
901
|
-
function memberStateLabel(member, tasks, historic) {
|
|
905
|
+
function memberStateLabel(member, tasks, historic, t) {
|
|
902
906
|
const owned = tasks.filter((task) => task.assignee === member.name);
|
|
903
|
-
if (member.activity === "working") return "
|
|
904
|
-
if (owned.some((task) => task.status === "failed")) return "
|
|
905
|
-
if (owned.some((task) => task.state === "blocked")) return "
|
|
906
|
-
if (owned.length > 0 && owned.every((task) => task.status === "completed")) return "
|
|
907
|
-
if (member.status === "removed") return historic ? "
|
|
908
|
-
if (owned.length > 0) return "
|
|
909
|
-
return "
|
|
907
|
+
if (member.activity === "working") return t("member.state.working");
|
|
908
|
+
if (owned.some((task) => task.status === "failed")) return t("member.state.failed");
|
|
909
|
+
if (owned.some((task) => task.state === "blocked")) return t("member.state.waiting");
|
|
910
|
+
if (owned.length > 0 && owned.every((task) => task.status === "completed")) return t("member.state.delivered");
|
|
911
|
+
if (member.status === "removed") return t(historic ? "member.state.left" : "member.state.removed");
|
|
912
|
+
if (owned.length > 0) return t("member.state.pending");
|
|
913
|
+
return t("member.state.unassigned");
|
|
910
914
|
}
|
|
911
|
-
function memberStatusText(member, tasks) {
|
|
915
|
+
function memberStatusText(member, tasks, t) {
|
|
912
916
|
const owned = tasks.filter((task) => task.assignee === member.name);
|
|
913
917
|
const current = owned.find((task) => task.id === member.currentTask);
|
|
914
918
|
const blocked = owned.find((task) => task.state === "blocked");
|
|
915
|
-
if (member.activity === "working" && current !== void 0) return
|
|
916
|
-
if (member.activity === "working") return "
|
|
919
|
+
if (member.activity === "working" && current !== void 0) return t("member.status.executing", { taskId: current.id });
|
|
920
|
+
if (member.activity === "working") return t("member.status.working");
|
|
917
921
|
if (blocked !== void 0) {
|
|
918
922
|
const dependency = tasks.find((task) => blocked.dependencies.includes(task.id) && task.state !== "completed");
|
|
919
|
-
if (dependency !== void 0) return
|
|
920
|
-
|
|
923
|
+
if (dependency !== void 0) return t("member.status.waitingOn", {
|
|
924
|
+
taskId: dependency.id,
|
|
925
|
+
assignee: dependency.assignee || t("task.assignee.unclaimed")
|
|
926
|
+
});
|
|
927
|
+
return t("member.status.waitingPrerequisite");
|
|
921
928
|
}
|
|
922
|
-
if (member.total === 0) return "
|
|
923
|
-
if (member.done === member.total) return "
|
|
924
|
-
return member.activity === "idle" ? "
|
|
929
|
+
if (member.total === 0) return t("member.status.waitingAssignment");
|
|
930
|
+
if (member.done === member.total) return t("member.status.delivered");
|
|
931
|
+
return t(member.activity === "idle" ? "member.status.idle" : "member.status.unknown");
|
|
925
932
|
}
|
|
926
933
|
function compactTaskLabel(subject) {
|
|
927
934
|
const withoutVerb = subject.replace(/^开发\s*/u, "").replace(/^\d+[-_.、\s]*/u, "");
|
|
928
935
|
const head = withoutVerb.split(/[((·::]/u)[0]?.trim() ?? withoutVerb;
|
|
929
936
|
return head.length > 18 ? `${head.slice(0, 17)}…` : head;
|
|
930
937
|
}
|
|
931
|
-
function taskSummary(team) {
|
|
938
|
+
function taskSummary(team, t) {
|
|
932
939
|
const completed = team.tasks.filter((task) => task.status === "completed");
|
|
933
940
|
const running = team.tasks.filter((task) => task.state === "running");
|
|
934
941
|
const blocked = team.tasks.filter((task) => task.state === "blocked");
|
|
935
942
|
const ready = team.tasks.filter((task) => task.state === "open" && task.status !== "completed");
|
|
936
|
-
if (team.tasks.length === 0) return "
|
|
937
|
-
if (completed.length === team.tasks.length) return
|
|
938
|
-
if (blocked.length > 0 && running.length > 0) return
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
return "
|
|
943
|
+
if (team.tasks.length === 0) return t("task.summary.waitingBreakdown");
|
|
944
|
+
if (completed.length === team.tasks.length) return t("task.summary.allDelivered", { count: completed.length });
|
|
945
|
+
if (blocked.length > 0 && running.length > 0) return t("task.summary.blockedAndRunning", {
|
|
946
|
+
tasks: formatTaskIds(blocked.slice(0, 3).map((task) => task.id), t),
|
|
947
|
+
more: blocked.length > 3 ? t("task.summary.more", { count: blocked.length - 3 }) : ""
|
|
948
|
+
});
|
|
949
|
+
if (running.length > 0) return t("task.summary.running", { tasks: formatTaskIds(running.map((task) => task.id), t) });
|
|
950
|
+
if (ready.length > 0) return t("task.summary.ready", { tasks: formatTaskIds(ready.map((task) => task.id), t) });
|
|
951
|
+
if (blocked.length > 0) return t("task.summary.blocked", { tasks: formatTaskIds(blocked.map((task) => task.id), t) });
|
|
952
|
+
return t("task.summary.waitingSchedule");
|
|
943
953
|
}
|
|
944
|
-
function ProgressOverview({ team }) {
|
|
954
|
+
function ProgressOverview({ team, t }) {
|
|
945
955
|
const running = team.tasks.filter((task) => task.state === "running").length;
|
|
946
956
|
const blocked = team.tasks.filter((task) => task.state === "blocked").length;
|
|
947
957
|
const completed = team.tasks.filter((task) => task.status === "completed").length;
|
|
948
958
|
const summaryTone = blocked > 0 ? "warning" : completed === team.tasks.length && team.tasks.length > 0 ? "completed" : "running";
|
|
949
959
|
return (0, react_jsx_runtime.jsxs)("section", {
|
|
950
960
|
className: ActivityPanel_module_css_default.progressOverview,
|
|
951
|
-
"aria-label": "
|
|
961
|
+
"aria-label": t("progress.aria"),
|
|
952
962
|
"data-progress-summary": true,
|
|
953
963
|
children: [
|
|
954
964
|
(0, react_jsx_runtime.jsx)("span", {
|
|
955
965
|
className: ActivityPanel_module_css_default.progressTitle,
|
|
956
|
-
children: "
|
|
966
|
+
children: t("progress.title")
|
|
957
967
|
}),
|
|
958
968
|
team.tasks.length > 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
959
969
|
className: ActivityPanel_module_css_default.progressSegments,
|
|
@@ -963,29 +973,29 @@ window.__ModuleLoader__.load({
|
|
|
963
973
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
964
974
|
className: ActivityPanel_module_css_default.progressLegend,
|
|
965
975
|
children: [
|
|
966
|
-
(0, react_jsx_runtime.
|
|
976
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
967
977
|
"data-state": "running",
|
|
968
|
-
children:
|
|
978
|
+
children: t("progress.running", { count: running })
|
|
969
979
|
}),
|
|
970
|
-
(0, react_jsx_runtime.
|
|
980
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
971
981
|
"data-state": "blocked",
|
|
972
|
-
children:
|
|
982
|
+
children: t("progress.blocked", { count: blocked })
|
|
973
983
|
}),
|
|
974
|
-
(0, react_jsx_runtime.
|
|
984
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
975
985
|
"data-state": "completed",
|
|
976
|
-
children:
|
|
986
|
+
children: t("progress.delivered", { count: completed })
|
|
977
987
|
})
|
|
978
988
|
]
|
|
979
989
|
}),
|
|
980
990
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
981
991
|
className: ActivityPanel_module_css_default.progressSummary,
|
|
982
992
|
"data-state": summaryTone,
|
|
983
|
-
children: [(0, react_jsx_runtime.jsx)("span", { className: ActivityPanel_module_css_default.progressSummaryDot }), (0, react_jsx_runtime.jsx)("span", { children: taskSummary(team) })]
|
|
993
|
+
children: [(0, react_jsx_runtime.jsx)("span", { className: ActivityPanel_module_css_default.progressSummaryDot }), (0, react_jsx_runtime.jsx)("span", { children: taskSummary(team, t) })]
|
|
984
994
|
})
|
|
985
995
|
]
|
|
986
996
|
});
|
|
987
997
|
}
|
|
988
|
-
function DependencyMap({ tasks }) {
|
|
998
|
+
function DependencyMap({ tasks, t }) {
|
|
989
999
|
const [open, setOpen] = (0, react.useState)(true);
|
|
990
1000
|
const [hoverTaskId, setHoverTaskId] = (0, react.useState)(null);
|
|
991
1001
|
const [keyboardTaskId, setKeyboardTaskId] = (0, react.useState)(null);
|
|
@@ -1028,7 +1038,7 @@ window.__ModuleLoader__.load({
|
|
|
1028
1038
|
const dependents = tasks.filter((task) => task.dependencies.includes(detailTask.id));
|
|
1029
1039
|
return (0, react_jsx_runtime.jsxs)("section", {
|
|
1030
1040
|
className: ActivityPanel_module_css_default.dependencySection,
|
|
1031
|
-
"aria-label": "
|
|
1041
|
+
"aria-label": t("dependency.aria"),
|
|
1032
1042
|
"data-dependency-map": true,
|
|
1033
1043
|
children: [(0, react_jsx_runtime.jsxs)("header", {
|
|
1034
1044
|
className: ActivityPanel_module_css_default.sectionHead,
|
|
@@ -1043,11 +1053,11 @@ window.__ModuleLoader__.load({
|
|
|
1043
1053
|
(0, react_jsx_runtime.jsx)(Chevron, { open }),
|
|
1044
1054
|
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutline16, {}),
|
|
1045
1055
|
" ",
|
|
1046
|
-
parallel ? "
|
|
1056
|
+
t(parallel ? "dependency.parallel" : "dependency.title")
|
|
1047
1057
|
]
|
|
1048
1058
|
}), (0, react_jsx_runtime.jsx)("span", {
|
|
1049
1059
|
className: ActivityPanel_module_css_default.sectionHint,
|
|
1050
|
-
children: pinnedTaskId === null ? parallel ? "
|
|
1060
|
+
children: pinnedTaskId === null ? t(parallel ? "dependency.hint.parallel" : "dependency.hint.chain") : t("dependency.hint.pinned", { taskId: pinnedTaskId })
|
|
1051
1061
|
})]
|
|
1052
1062
|
}), open && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("div", {
|
|
1053
1063
|
className: ActivityPanel_module_css_default.dagViewport,
|
|
@@ -1112,7 +1122,7 @@ window.__ModuleLoader__.load({
|
|
|
1112
1122
|
}),
|
|
1113
1123
|
task.state === "running" && (0, react_jsx_runtime.jsx)("span", {
|
|
1114
1124
|
className: ActivityPanel_module_css_default.dagRunningState,
|
|
1115
|
-
"aria-label": "
|
|
1125
|
+
"aria-label": t("task.runningAria"),
|
|
1116
1126
|
children: (0, react_jsx_runtime.jsx)(WorkGlyph, { active: true })
|
|
1117
1127
|
})
|
|
1118
1128
|
]
|
|
@@ -1137,27 +1147,27 @@ window.__ModuleLoader__.load({
|
|
|
1137
1147
|
(0, react_jsx_runtime.jsx)("span", {
|
|
1138
1148
|
className: ActivityPanel_module_css_default.taskDetailBadge,
|
|
1139
1149
|
"data-state": taskTone(detailTask.state, detailTask.status),
|
|
1140
|
-
children: taskStatusLabel(detailTask.status)
|
|
1150
|
+
children: taskStatusLabel(detailTask.status, t)
|
|
1141
1151
|
})
|
|
1142
1152
|
]
|
|
1143
1153
|
}),
|
|
1144
1154
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
1145
1155
|
className: ActivityPanel_module_css_default.taskDetailLine,
|
|
1146
1156
|
children: [
|
|
1147
|
-
detailTask.assignee || "
|
|
1157
|
+
detailTask.assignee || t("task.assignee.unclaimed"),
|
|
1148
1158
|
" · ",
|
|
1149
|
-
detailTask.status === "completed" ? "
|
|
1159
|
+
detailTask.status === "completed" ? t("task.detail.completed") : detailTask.dependencies.length === 0 ? t("task.detail.noPrerequisite") : waitingOn.length === 0 ? t("task.detail.ready") : t("task.detail.waitingOn", { tasks: formatTaskIds(waitingOn, t) })
|
|
1150
1160
|
]
|
|
1151
1161
|
}),
|
|
1152
1162
|
(0, react_jsx_runtime.jsx)("span", {
|
|
1153
1163
|
className: ActivityPanel_module_css_default.taskDetailMeta,
|
|
1154
|
-
children: dependents.length === 0 ? "
|
|
1164
|
+
children: dependents.length === 0 ? t("task.detail.noDownstream") : t("task.detail.unlocks", { tasks: formatTaskIds(dependents.map((task) => task.id), t) })
|
|
1155
1165
|
})
|
|
1156
1166
|
]
|
|
1157
1167
|
})] })]
|
|
1158
1168
|
});
|
|
1159
1169
|
}
|
|
1160
|
-
function TeamSection({ team, onNavigate, historic = false }) {
|
|
1170
|
+
function TeamSection({ team, onNavigate, t, historic = false }) {
|
|
1161
1171
|
const [membersOpen, setMembersOpen] = (0, react.useState)(true);
|
|
1162
1172
|
const busyCount = team.members.filter((member) => member.activity === "working").length;
|
|
1163
1173
|
const assignedCount = team.tasks.filter((task) => task.assignee !== "").length;
|
|
@@ -1177,27 +1187,25 @@ window.__ModuleLoader__.load({
|
|
|
1177
1187
|
}),
|
|
1178
1188
|
historic && (0, react_jsx_runtime.jsx)("span", {
|
|
1179
1189
|
className: ActivityPanel_module_css_default.historicPill,
|
|
1180
|
-
children: "
|
|
1190
|
+
children: t("team.ended")
|
|
1181
1191
|
}),
|
|
1182
1192
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
1183
1193
|
className: ActivityPanel_module_css_default.teamStats,
|
|
1184
1194
|
children: [
|
|
1185
|
-
(0, react_jsx_runtime.
|
|
1195
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
1186
1196
|
"data-stat": "members",
|
|
1187
|
-
children:
|
|
1197
|
+
children: t("team.stats.members", { count: team.members.length })
|
|
1188
1198
|
}),
|
|
1189
|
-
(0, react_jsx_runtime.
|
|
1199
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
1190
1200
|
"data-stat": "tasks",
|
|
1191
|
-
children:
|
|
1192
|
-
completedCount,
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
" 完成"
|
|
1196
|
-
]
|
|
1201
|
+
children: t("team.stats.completed", {
|
|
1202
|
+
completed: completedCount,
|
|
1203
|
+
total: team.tasks.length
|
|
1204
|
+
})
|
|
1197
1205
|
}),
|
|
1198
|
-
(0, react_jsx_runtime.
|
|
1206
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
1199
1207
|
"data-stat": "messages",
|
|
1200
|
-
children:
|
|
1208
|
+
children: t("team.stats.messages", { count: team.messageCount })
|
|
1201
1209
|
})
|
|
1202
1210
|
]
|
|
1203
1211
|
})
|
|
@@ -1205,7 +1213,7 @@ window.__ModuleLoader__.load({
|
|
|
1205
1213
|
}),
|
|
1206
1214
|
(0, react_jsx_runtime.jsxs)("section", {
|
|
1207
1215
|
className: ActivityPanel_module_css_default.delegationSection,
|
|
1208
|
-
"aria-label": "
|
|
1216
|
+
"aria-label": t("delegation.aria"),
|
|
1209
1217
|
"data-delegation-map": true,
|
|
1210
1218
|
children: [
|
|
1211
1219
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -1226,30 +1234,30 @@ window.__ModuleLoader__.load({
|
|
|
1226
1234
|
className: ActivityPanel_module_css_default.captainLine,
|
|
1227
1235
|
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
1228
1236
|
className: ActivityPanel_module_css_default.captainName,
|
|
1229
|
-
children: "
|
|
1237
|
+
children: t("captain.name")
|
|
1230
1238
|
}), (0, react_jsx_runtime.jsx)("span", {
|
|
1231
1239
|
className: ActivityPanel_module_css_default.captainRole,
|
|
1232
|
-
children: "
|
|
1240
|
+
children: t("captain.role")
|
|
1233
1241
|
})]
|
|
1234
|
-
}), (0, react_jsx_runtime.
|
|
1242
|
+
}), (0, react_jsx_runtime.jsx)("span", {
|
|
1235
1243
|
className: ActivityPanel_module_css_default.captainSummary,
|
|
1236
|
-
children:
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
team.members.length,
|
|
1241
|
-
" 名成员"
|
|
1242
|
-
]
|
|
1244
|
+
children: t("captain.summary", {
|
|
1245
|
+
tasks: assignedCount,
|
|
1246
|
+
members: team.members.length
|
|
1247
|
+
})
|
|
1243
1248
|
})]
|
|
1244
1249
|
}),
|
|
1245
1250
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
1246
1251
|
className: ActivityPanel_module_css_default.captainState,
|
|
1247
1252
|
"data-busy": busyCount > 0,
|
|
1248
|
-
children: [(0, react_jsx_runtime.jsx)(WorkGlyph, { active: busyCount > 0 }), busyCount > 0 ?
|
|
1253
|
+
children: [(0, react_jsx_runtime.jsx)(WorkGlyph, { active: busyCount > 0 }), busyCount > 0 ? t("captain.state.working", { count: busyCount }) : t(allCompleted ? "captain.state.collected" : "captain.state.waiting")]
|
|
1249
1254
|
})
|
|
1250
1255
|
]
|
|
1251
1256
|
}),
|
|
1252
|
-
(0, react_jsx_runtime.jsx)(ProgressOverview, {
|
|
1257
|
+
(0, react_jsx_runtime.jsx)(ProgressOverview, {
|
|
1258
|
+
team,
|
|
1259
|
+
t
|
|
1260
|
+
}),
|
|
1253
1261
|
(0, react_jsx_runtime.jsxs)("button", {
|
|
1254
1262
|
type: "button",
|
|
1255
1263
|
className: ActivityPanel_module_css_default.membersToggle,
|
|
@@ -1258,17 +1266,13 @@ window.__ModuleLoader__.load({
|
|
|
1258
1266
|
},
|
|
1259
1267
|
"aria-expanded": membersOpen,
|
|
1260
1268
|
"data-members-toggle": true,
|
|
1261
|
-
children: [(0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1262
|
-
(0, react_jsx_runtime.jsx)(Chevron, { open: membersOpen }),
|
|
1263
|
-
"成员 ",
|
|
1264
|
-
team.members.length
|
|
1265
|
-
] }), (0, react_jsx_runtime.jsx)("span", { children: membersOpen ? "收起" : "展开" })]
|
|
1269
|
+
children: [(0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)(Chevron, { open: membersOpen }), t("members.toggle", { count: team.members.length })] }), (0, react_jsx_runtime.jsx)("span", { children: t(membersOpen ? "members.collapse" : "members.expand") })]
|
|
1266
1270
|
}),
|
|
1267
1271
|
membersOpen && (0, react_jsx_runtime.jsxs)("div", {
|
|
1268
1272
|
className: ActivityPanel_module_css_default.delegationTree,
|
|
1269
1273
|
children: [team.members.length === 0 && (0, react_jsx_runtime.jsx)("span", {
|
|
1270
1274
|
className: ActivityPanel_module_css_default.emptyHint,
|
|
1271
|
-
children: "
|
|
1275
|
+
children: t("members.empty")
|
|
1272
1276
|
}), team.members.map((member) => {
|
|
1273
1277
|
const owned = team.tasks.filter((task) => task.assignee === member.name);
|
|
1274
1278
|
return (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -1324,12 +1328,12 @@ window.__ModuleLoader__.load({
|
|
|
1324
1328
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
1325
1329
|
className: ActivityPanel_module_css_default.memberState,
|
|
1326
1330
|
"data-activity": member.activity,
|
|
1327
|
-
children: [(0, react_jsx_runtime.jsx)(WorkGlyph, { active: member.activity === "working" }), memberStateLabel(member, team.tasks, historic)]
|
|
1331
|
+
children: [(0, react_jsx_runtime.jsx)(WorkGlyph, { active: member.activity === "working" }), memberStateLabel(member, team.tasks, historic, t)]
|
|
1328
1332
|
})
|
|
1329
1333
|
]
|
|
1330
1334
|
}), (0, react_jsx_runtime.jsx)("span", {
|
|
1331
1335
|
className: ActivityPanel_module_css_default.memberStatusLine,
|
|
1332
|
-
children: memberStatusText(member, team.tasks)
|
|
1336
|
+
children: memberStatusText(member, team.tasks, t)
|
|
1333
1337
|
})]
|
|
1334
1338
|
}),
|
|
1335
1339
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
@@ -1346,12 +1350,12 @@ window.__ModuleLoader__.load({
|
|
|
1346
1350
|
className: ActivityPanel_module_css_default.assignmentLine,
|
|
1347
1351
|
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
1348
1352
|
className: ActivityPanel_module_css_default.assignmentLabel,
|
|
1349
|
-
children: "
|
|
1353
|
+
children: t("assignment.label")
|
|
1350
1354
|
}), (0, react_jsx_runtime.jsx)("span", {
|
|
1351
1355
|
className: ActivityPanel_module_css_default.assignmentTasks,
|
|
1352
1356
|
children: owned.length === 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
1353
1357
|
className: ActivityPanel_module_css_default.taskEmpty,
|
|
1354
|
-
children: "
|
|
1358
|
+
children: t("assignment.empty")
|
|
1355
1359
|
}) : owned.map((task) => (0, react_jsx_runtime.jsx)("span", {
|
|
1356
1360
|
className: ActivityPanel_module_css_default.assignmentChip,
|
|
1357
1361
|
"data-state": taskTone(task.state, task.status),
|
|
@@ -1366,7 +1370,10 @@ window.__ModuleLoader__.load({
|
|
|
1366
1370
|
})
|
|
1367
1371
|
]
|
|
1368
1372
|
}),
|
|
1369
|
-
(0, react_jsx_runtime.jsx)(DependencyMap, {
|
|
1373
|
+
(0, react_jsx_runtime.jsx)(DependencyMap, {
|
|
1374
|
+
tasks: team.tasks,
|
|
1375
|
+
t
|
|
1376
|
+
})
|
|
1370
1377
|
]
|
|
1371
1378
|
});
|
|
1372
1379
|
}
|
|
@@ -1393,10 +1400,7 @@ window.__ModuleLoader__.load({
|
|
|
1393
1400
|
captainInbox: []
|
|
1394
1401
|
};
|
|
1395
1402
|
}
|
|
1396
|
-
|
|
1397
|
-
* snapshots and historic card summaries are only shown while their captain
|
|
1398
|
-
* session is the one currently open. */
|
|
1399
|
-
function ActivityPanel({ sessionsList, openMember }) {
|
|
1403
|
+
function ActivityPanel({ sessionsList, openMember, t }) {
|
|
1400
1404
|
const navigateToSession = (parentId, childId) => {
|
|
1401
1405
|
setOpen(false);
|
|
1402
1406
|
setWasActive(false);
|
|
@@ -1675,6 +1679,7 @@ window.__ModuleLoader__.load({
|
|
|
1675
1679
|
return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [!expanded && (0, react_jsx_runtime.jsx)(CollapsedBadge, {
|
|
1676
1680
|
count: visibleCount,
|
|
1677
1681
|
busy,
|
|
1682
|
+
t,
|
|
1678
1683
|
onClick: () => {
|
|
1679
1684
|
if (current === void 0) return;
|
|
1680
1685
|
setOpenOwner(current);
|
|
@@ -1690,7 +1695,7 @@ window.__ModuleLoader__.load({
|
|
|
1690
1695
|
"data-compact": compact || void 0,
|
|
1691
1696
|
"data-dragging": interaction === "dragging" || void 0,
|
|
1692
1697
|
"data-resizing": interaction === "resizing" || void 0,
|
|
1693
|
-
"aria-label": "
|
|
1698
|
+
"aria-label": t("activity.panelAria"),
|
|
1694
1699
|
children: [
|
|
1695
1700
|
(0, react_jsx_runtime.jsxs)("header", {
|
|
1696
1701
|
className: ActivityPanel_module_css_default.panelHead,
|
|
@@ -1701,7 +1706,7 @@ window.__ModuleLoader__.load({
|
|
|
1701
1706
|
"data-drag-handle": !compact || void 0,
|
|
1702
1707
|
children: [(0, react_jsx_runtime.jsxs)("span", {
|
|
1703
1708
|
className: ActivityPanel_module_css_default.panelTitle,
|
|
1704
|
-
children: ["
|
|
1709
|
+
children: [t("activity.title"), (0, react_jsx_runtime.jsx)("span", {
|
|
1705
1710
|
className: ActivityPanel_module_css_default.panelDot,
|
|
1706
1711
|
"data-busy": busy,
|
|
1707
1712
|
"aria-hidden": true
|
|
@@ -1714,8 +1719,8 @@ window.__ModuleLoader__.load({
|
|
|
1714
1719
|
"data-control": "dock",
|
|
1715
1720
|
"data-mode": geometry.mode,
|
|
1716
1721
|
onClick: toggleDock,
|
|
1717
|
-
"aria-label": geometry.mode === "docked" ? "
|
|
1718
|
-
title: geometry.mode === "docked" ? "
|
|
1722
|
+
"aria-label": t(geometry.mode === "docked" ? "activity.float" : "activity.dockRight"),
|
|
1723
|
+
title: t(geometry.mode === "docked" ? "activity.float" : "activity.dockRight"),
|
|
1719
1724
|
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPanelLeftOutline16, {})
|
|
1720
1725
|
}), (0, react_jsx_runtime.jsx)("button", {
|
|
1721
1726
|
type: "button",
|
|
@@ -1725,8 +1730,8 @@ window.__ModuleLoader__.load({
|
|
|
1725
1730
|
setOpen(false);
|
|
1726
1731
|
setOpenOwner(void 0);
|
|
1727
1732
|
},
|
|
1728
|
-
"aria-label": "
|
|
1729
|
-
title: "
|
|
1733
|
+
"aria-label": t("activity.collapse"),
|
|
1734
|
+
title: t("activity.collapse"),
|
|
1730
1735
|
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {})
|
|
1731
1736
|
})]
|
|
1732
1737
|
})]
|
|
@@ -1735,27 +1740,33 @@ window.__ModuleLoader__.load({
|
|
|
1735
1740
|
className: ActivityPanel_module_css_default.teams,
|
|
1736
1741
|
children: visibleCount === 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
1737
1742
|
className: ActivityPanel_module_css_default.emptyHint,
|
|
1738
|
-
children: "
|
|
1743
|
+
children: t("activity.empty")
|
|
1739
1744
|
}) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1740
1745
|
visibleTeams.map((team) => (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1741
1746
|
team,
|
|
1742
|
-
onNavigate: navigateToSession
|
|
1747
|
+
onNavigate: navigateToSession,
|
|
1748
|
+
t
|
|
1743
1749
|
}, team.teamId)),
|
|
1744
|
-
visibleArchived.map((team) => (0, react_jsx_runtime.
|
|
1750
|
+
visibleArchived.map((team) => (0, react_jsx_runtime.jsxs)("div", {
|
|
1745
1751
|
"data-team-id": team.teamId,
|
|
1746
1752
|
"data-historic": true,
|
|
1747
1753
|
className: ActivityPanel_module_css_default.archivedWrap,
|
|
1748
|
-
children: (0, react_jsx_runtime.jsx)(
|
|
1754
|
+
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
1755
|
+
className: ActivityPanel_module_css_default.archiveLabel,
|
|
1756
|
+
children: t("archive.label")
|
|
1757
|
+
}), (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1749
1758
|
team,
|
|
1750
1759
|
onNavigate: navigateToSession,
|
|
1760
|
+
t,
|
|
1751
1761
|
historic: true
|
|
1752
|
-
})
|
|
1762
|
+
})]
|
|
1753
1763
|
}, `${team.captainSessionId}:${team.teamId}`)),
|
|
1754
1764
|
visibleHistoric.map(({ data: team, owner }) => {
|
|
1755
1765
|
const teamKey = `${owner}:${team.teamId}`;
|
|
1756
1766
|
return (0, react_jsx_runtime.jsx)(TeamSection, {
|
|
1757
1767
|
team: historicCardTeam(team, owner),
|
|
1758
1768
|
onNavigate: navigateToSession,
|
|
1769
|
+
t,
|
|
1759
1770
|
historic: true
|
|
1760
1771
|
}, teamKey);
|
|
1761
1772
|
})
|
|
@@ -1880,6 +1891,173 @@ window.__ModuleLoader__.load({
|
|
|
1880
1891
|
}
|
|
1881
1892
|
};
|
|
1882
1893
|
//#endregion
|
|
1894
|
+
//#region lib/client/locales.js
|
|
1895
|
+
/** `agentTeams` namespace dictionaries for every plugin-owned Web surface. */
|
|
1896
|
+
/** Dictionary namespace owned by the AgentTeams client plugin. */
|
|
1897
|
+
const AGENT_TEAMS_LOCALE_NAMESPACE = "agentTeams";
|
|
1898
|
+
/** Simplified Chinese dictionary (the key-set source of truth). */
|
|
1899
|
+
const zh = {
|
|
1900
|
+
"card.memberCount": "{count} 名成员",
|
|
1901
|
+
"action.openActivityPanel": "打开活动面板",
|
|
1902
|
+
"activity.panelButton": "活动面板",
|
|
1903
|
+
"activity.badgeAria": "AgentTeams 活动,{count} 个团队",
|
|
1904
|
+
"activity.panelAria": "AgentTeams 活动面板",
|
|
1905
|
+
"activity.title": "AgentTeams 活动",
|
|
1906
|
+
"activity.float": "切换为浮动面板",
|
|
1907
|
+
"activity.dockRight": "停靠到右侧",
|
|
1908
|
+
"activity.collapse": "收起活动面板",
|
|
1909
|
+
"activity.empty": "暂无团队活动",
|
|
1910
|
+
"format.listSeparator": "、",
|
|
1911
|
+
"task.status.pending": "待领取",
|
|
1912
|
+
"task.status.claimed": "已认领",
|
|
1913
|
+
"task.status.inProgress": "进行中",
|
|
1914
|
+
"task.status.completed": "已完成",
|
|
1915
|
+
"task.status.failed": "失败",
|
|
1916
|
+
"task.status.cancelled": "已取消",
|
|
1917
|
+
"member.state.working": "工作中",
|
|
1918
|
+
"member.state.failed": "有失败",
|
|
1919
|
+
"member.state.waiting": "等待",
|
|
1920
|
+
"member.state.delivered": "已交付",
|
|
1921
|
+
"member.state.left": "已离队",
|
|
1922
|
+
"member.state.removed": "已移除",
|
|
1923
|
+
"member.state.pending": "待执行",
|
|
1924
|
+
"member.state.unassigned": "待派工",
|
|
1925
|
+
"member.status.executing": "正在执行 {taskId}",
|
|
1926
|
+
"member.status.working": "正在处理已派任务",
|
|
1927
|
+
"member.status.waitingOn": "等待 {taskId} · {assignee}",
|
|
1928
|
+
"member.status.waitingPrerequisite": "等待前置任务",
|
|
1929
|
+
"member.status.waitingAssignment": "等待队长派工",
|
|
1930
|
+
"member.status.delivered": "任务已交付",
|
|
1931
|
+
"member.status.idle": "待继续执行",
|
|
1932
|
+
"member.status.unknown": "状态未知",
|
|
1933
|
+
"task.assignee.unclaimed": "待认领",
|
|
1934
|
+
"task.summary.waitingBreakdown": "等待队长拆解任务",
|
|
1935
|
+
"task.summary.allDelivered": "全部 {count} 项任务已交付",
|
|
1936
|
+
"task.summary.blockedAndRunning": "{tasks}{more} 等待前置,其余已开工",
|
|
1937
|
+
"task.summary.more": " 等 {count} 项",
|
|
1938
|
+
"task.summary.running": "{tasks} 正在执行",
|
|
1939
|
+
"task.summary.ready": "{tasks} 已就绪待开工",
|
|
1940
|
+
"task.summary.blocked": "{tasks} 等待前置",
|
|
1941
|
+
"task.summary.waitingSchedule": "等待下一轮调度",
|
|
1942
|
+
"progress.aria": "团队总进度",
|
|
1943
|
+
"progress.title": "总进度",
|
|
1944
|
+
"progress.running": "■ 进行中 {count}",
|
|
1945
|
+
"progress.blocked": "■ 等待依赖 {count}",
|
|
1946
|
+
"progress.delivered": "■ 已交付 {count}",
|
|
1947
|
+
"dependency.aria": "任务依赖链",
|
|
1948
|
+
"dependency.parallel": "并行任务",
|
|
1949
|
+
"dependency.title": "任务依赖",
|
|
1950
|
+
"dependency.hint.parallel": "无前后依赖 · 点击查看详情",
|
|
1951
|
+
"dependency.hint.chain": "悬停高亮依赖链 · 点击固定",
|
|
1952
|
+
"dependency.hint.pinned": "{taskId} 已固定 · Esc 取消",
|
|
1953
|
+
"task.runningAria": "运行中",
|
|
1954
|
+
"task.detail.completed": "已完成并交付",
|
|
1955
|
+
"task.detail.noPrerequisite": "无前置,可立即开工",
|
|
1956
|
+
"task.detail.ready": "前置已就绪,可开工",
|
|
1957
|
+
"task.detail.waitingOn": "等待 {tasks}",
|
|
1958
|
+
"task.detail.noDownstream": "无下游任务",
|
|
1959
|
+
"task.detail.unlocks": "完成后解锁 {tasks}",
|
|
1960
|
+
"team.ended": "已结束",
|
|
1961
|
+
"team.stats.members": "{count} 名成员",
|
|
1962
|
+
"team.stats.completed": "{completed}/{total} 完成",
|
|
1963
|
+
"team.stats.messages": "{count} 条消息",
|
|
1964
|
+
"delegation.aria": "队长派工关系",
|
|
1965
|
+
"captain.name": "队长",
|
|
1966
|
+
"captain.role": "拆解 · 派发 · 汇总",
|
|
1967
|
+
"captain.summary": "已派发 {tasks} 项任务给 {members} 名成员",
|
|
1968
|
+
"captain.state.working": "{count} 人执行中",
|
|
1969
|
+
"captain.state.collected": "已收齐",
|
|
1970
|
+
"captain.state.waiting": "等待回报",
|
|
1971
|
+
"members.toggle": "{count} 名成员",
|
|
1972
|
+
"members.collapse": "收起",
|
|
1973
|
+
"members.expand": "展开",
|
|
1974
|
+
"members.empty": "暂无成员,等待队长组建团队",
|
|
1975
|
+
"assignment.label": "队长派发",
|
|
1976
|
+
"assignment.empty": "暂无任务",
|
|
1977
|
+
"archive.label": "已结束 · 历史归档"
|
|
1978
|
+
};
|
|
1979
|
+
/** English dictionary, checked complete against the Chinese source key set. */
|
|
1980
|
+
const en = {
|
|
1981
|
+
"card.memberCount": "{count} members",
|
|
1982
|
+
"action.openActivityPanel": "Open activity panel",
|
|
1983
|
+
"activity.panelButton": "Activity panel",
|
|
1984
|
+
"activity.badgeAria": "AgentTeams activity, {count} teams",
|
|
1985
|
+
"activity.panelAria": "AgentTeams activity panel",
|
|
1986
|
+
"activity.title": "AgentTeams activity",
|
|
1987
|
+
"activity.float": "Switch to floating panel",
|
|
1988
|
+
"activity.dockRight": "Dock to the right",
|
|
1989
|
+
"activity.collapse": "Collapse activity panel",
|
|
1990
|
+
"activity.empty": "No team activity",
|
|
1991
|
+
"format.listSeparator": ", ",
|
|
1992
|
+
"task.status.pending": "Unclaimed",
|
|
1993
|
+
"task.status.claimed": "Claimed",
|
|
1994
|
+
"task.status.inProgress": "In progress",
|
|
1995
|
+
"task.status.completed": "Completed",
|
|
1996
|
+
"task.status.failed": "Failed",
|
|
1997
|
+
"task.status.cancelled": "Cancelled",
|
|
1998
|
+
"member.state.working": "Working",
|
|
1999
|
+
"member.state.failed": "Has failures",
|
|
2000
|
+
"member.state.waiting": "Waiting",
|
|
2001
|
+
"member.state.delivered": "Delivered",
|
|
2002
|
+
"member.state.left": "Left team",
|
|
2003
|
+
"member.state.removed": "Removed",
|
|
2004
|
+
"member.state.pending": "Pending",
|
|
2005
|
+
"member.state.unassigned": "Awaiting assignment",
|
|
2006
|
+
"member.status.executing": "Working on {taskId}",
|
|
2007
|
+
"member.status.working": "Working on assigned tasks",
|
|
2008
|
+
"member.status.waitingOn": "Waiting for {taskId} · {assignee}",
|
|
2009
|
+
"member.status.waitingPrerequisite": "Waiting for prerequisites",
|
|
2010
|
+
"member.status.waitingAssignment": "Waiting for the captain to assign work",
|
|
2011
|
+
"member.status.delivered": "Tasks delivered",
|
|
2012
|
+
"member.status.idle": "Ready to continue",
|
|
2013
|
+
"member.status.unknown": "Status unknown",
|
|
2014
|
+
"task.assignee.unclaimed": "Unclaimed",
|
|
2015
|
+
"task.summary.waitingBreakdown": "Waiting for the captain to break down the work",
|
|
2016
|
+
"task.summary.allDelivered": "All {count} tasks delivered",
|
|
2017
|
+
"task.summary.blockedAndRunning": "{tasks}{more} waiting on prerequisites; other work has started",
|
|
2018
|
+
"task.summary.more": " and {count} more",
|
|
2019
|
+
"task.summary.running": "{tasks} in progress",
|
|
2020
|
+
"task.summary.ready": "{tasks} ready to start",
|
|
2021
|
+
"task.summary.blocked": "{tasks} waiting on prerequisites",
|
|
2022
|
+
"task.summary.waitingSchedule": "Waiting for the next scheduling round",
|
|
2023
|
+
"progress.aria": "Overall team progress",
|
|
2024
|
+
"progress.title": "Overall progress",
|
|
2025
|
+
"progress.running": "■ In progress {count}",
|
|
2026
|
+
"progress.blocked": "■ Waiting {count}",
|
|
2027
|
+
"progress.delivered": "■ Delivered {count}",
|
|
2028
|
+
"dependency.aria": "Task dependency chain",
|
|
2029
|
+
"dependency.parallel": "Parallel tasks",
|
|
2030
|
+
"dependency.title": "Task dependencies",
|
|
2031
|
+
"dependency.hint.parallel": "No dependencies · Click for details",
|
|
2032
|
+
"dependency.hint.chain": "Hover to highlight dependencies · Click to pin",
|
|
2033
|
+
"dependency.hint.pinned": "{taskId} pinned · Esc to clear",
|
|
2034
|
+
"task.runningAria": "Running",
|
|
2035
|
+
"task.detail.completed": "Completed and delivered",
|
|
2036
|
+
"task.detail.noPrerequisite": "No prerequisites; ready to start",
|
|
2037
|
+
"task.detail.ready": "Prerequisites ready; can start",
|
|
2038
|
+
"task.detail.waitingOn": "Waiting for {tasks}",
|
|
2039
|
+
"task.detail.noDownstream": "No downstream tasks",
|
|
2040
|
+
"task.detail.unlocks": "Unlocks {tasks} when complete",
|
|
2041
|
+
"team.ended": "Ended",
|
|
2042
|
+
"team.stats.members": "{count} members",
|
|
2043
|
+
"team.stats.completed": "{completed}/{total} completed",
|
|
2044
|
+
"team.stats.messages": "{count} messages",
|
|
2045
|
+
"delegation.aria": "Captain delegation map",
|
|
2046
|
+
"captain.name": "Captain",
|
|
2047
|
+
"captain.role": "Break down · Delegate · Synthesize",
|
|
2048
|
+
"captain.summary": "Assigned {tasks} tasks to {members} members",
|
|
2049
|
+
"captain.state.working": "{count} active",
|
|
2050
|
+
"captain.state.collected": "All reports received",
|
|
2051
|
+
"captain.state.waiting": "Waiting for reports",
|
|
2052
|
+
"members.toggle": "Members {count}",
|
|
2053
|
+
"members.collapse": "Collapse",
|
|
2054
|
+
"members.expand": "Expand",
|
|
2055
|
+
"members.empty": "No members yet; waiting for the captain to assemble the team",
|
|
2056
|
+
"assignment.label": "Captain assigned",
|
|
2057
|
+
"assignment.empty": "No tasks",
|
|
2058
|
+
"archive.label": "Ended · Archived history"
|
|
2059
|
+
};
|
|
2060
|
+
//#endregion
|
|
1883
2061
|
//#region lib/client/session-navigation.js
|
|
1884
2062
|
/** Version-tolerant navigation into durable AgentTeams member transcripts. */
|
|
1885
2063
|
/**
|
|
@@ -1906,11 +2084,12 @@ window.__ModuleLoader__.load({
|
|
|
1906
2084
|
}
|
|
1907
2085
|
//#endregion
|
|
1908
2086
|
//#region lib/client/index.js
|
|
1909
|
-
/** Required services: conversation nodes, slots,
|
|
2087
|
+
/** Required services: conversation nodes, slots, sessions navigation, and locale. */
|
|
1910
2088
|
const inject = [
|
|
1911
2089
|
"conversationEvents",
|
|
1912
2090
|
"slots",
|
|
1913
|
-
"sessions"
|
|
2091
|
+
"sessions",
|
|
2092
|
+
"locale"
|
|
1914
2093
|
];
|
|
1915
2094
|
/** The replayed user message is the canonical transcript entry. */
|
|
1916
2095
|
function HiddenAgentTeamsCommand() {
|
|
@@ -1922,20 +2101,26 @@ window.__ModuleLoader__.load({
|
|
|
1922
2101
|
* monitor via a window event — the recovery path for an old session.
|
|
1923
2102
|
*/
|
|
1924
2103
|
function apply(ctx) {
|
|
2104
|
+
ctx.effect(() => ctx.locale.register(AGENT_TEAMS_LOCALE_NAMESPACE, {
|
|
2105
|
+
zh,
|
|
2106
|
+
en
|
|
2107
|
+
}), "agent-teams: dictionaries");
|
|
1925
2108
|
const openMember = (parentId, childId) => {
|
|
1926
2109
|
openAgentTeamMember(ctx.sessions, parentId, childId).catch((error) => {
|
|
1927
2110
|
console.warn(`agent-teams: failed to open member transcript ${childId}: ${String(error)}`);
|
|
1928
2111
|
});
|
|
1929
2112
|
};
|
|
1930
|
-
const Panel = () => (0, react_jsx_runtime.jsx)(ActivityPanel, {
|
|
2113
|
+
const Panel = ({ t }) => (0, react_jsx_runtime.jsx)(ActivityPanel, {
|
|
1931
2114
|
sessionsList: ctx.sessions.list,
|
|
1932
|
-
openMember
|
|
2115
|
+
openMember,
|
|
2116
|
+
t
|
|
1933
2117
|
});
|
|
1934
2118
|
ctx.slots.inject("shell.overlay", () => ctx.slots.register({
|
|
1935
2119
|
name: "shell.overlay",
|
|
1936
2120
|
id: "agent-teams-activity",
|
|
1937
2121
|
order: 80,
|
|
1938
|
-
label: "AgentTeams activity"
|
|
2122
|
+
label: "AgentTeams activity",
|
|
2123
|
+
locale: AGENT_TEAMS_LOCALE_NAMESPACE
|
|
1939
2124
|
}, Panel));
|
|
1940
2125
|
ctx.slots.inject("conversation.chat.commandview", () => ctx.slots.register({
|
|
1941
2126
|
name: "conversation.chat.commandview",
|
|
@@ -1945,6 +2130,7 @@ window.__ModuleLoader__.load({
|
|
|
1945
2130
|
ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({
|
|
1946
2131
|
name: "conversation.chat.node",
|
|
1947
2132
|
key: "agent-teams",
|
|
2133
|
+
locale: AGENT_TEAMS_LOCALE_NAMESPACE,
|
|
1948
2134
|
inject: () => ({ openMember })
|
|
1949
2135
|
}, AgentTeamsCard));
|
|
1950
2136
|
}
|