@nanmicoder/dsh-agent-teams 0.1.2 → 0.1.4

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/lib/client.js CHANGED
@@ -110,8 +110,8 @@ window.__ModuleLoader__.load({
110
110
  return null;
111
111
  }
112
112
  //#endregion
113
- //#region \0dsh-css:/Users/nanmi/workspace/myself_code/dsh-agent-teams/src/client/AgentTeamsCard.module.css.mjs
114
- const css$1 = "._6Ci0pW_root{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module-platform);border-radius:10px;flex-direction:column;gap:8px;width:100%;min-width:0;padding:10px 12px;display:flex}._6Ci0pW_head{align-items:center;gap:8px;min-width:0;display:flex}._6Ci0pW_leadAvatar{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;flex:none;width:24px;height:24px}._6Ci0pW_teamName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}._6Ci0pW_memberCount{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;margin-left:auto;font-size:11px;line-height:16px}._6Ci0pW_panelButton{border:1px solid var(--dsw-alias-line-strong);background:var(--dsw-alias-bg-module);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;flex:none;padding:2px 8px;font-size:10.5px;font-weight:600;line-height:16px;transition:border-color .12s,color .12s}._6Ci0pW_panelButton:hover{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary)}._6Ci0pW_panelButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}._6Ci0pW_members{flex-wrap:wrap;gap:6px;min-width:0;display:flex}._6Ci0pW_member{border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);max-width:160px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:5px;padding:3px 8px 3px 3px;font-size:11px;font-weight:500;line-height:16px;transition:border-color .12s,background-color .12s;display:inline-flex}._6Ci0pW_member:hover{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-fill-neutral)}._6Ci0pW_member:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}._6Ci0pW_memberArt{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:20px;height:20px}._6Ci0pW_memberInitial{background:var(--dsw-alias-bg-fill-business);width:20px;height:20px;color:var(--dsw-alias-label-on-fill);border-radius:50%;justify-content:center;align-items:center;font-size:10px;font-weight:600;line-height:20px;display:inline-flex}._6Ci0pW_memberName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}";
113
+ //#region \0dsh-css:/home/runner/work/dsh-agent-teams/dsh-agent-teams/src/client/AgentTeamsCard.module.css.mjs
114
+ const css$1 = ".kPAopq_root{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module-platform);border-radius:10px;flex-direction:column;gap:8px;width:100%;min-width:0;padding:10px 12px;display:flex}.kPAopq_head{align-items:center;gap:8px;min-width:0;display:flex}.kPAopq_leadAvatar{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;flex:none;width:24px;height:24px}.kPAopq_teamName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.kPAopq_memberCount{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;margin-left:auto;font-size:11px;line-height:16px}.kPAopq_panelButton{border:1px solid var(--dsw-alias-line-strong);background:var(--dsw-alias-bg-module);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;flex:none;padding:2px 8px;font-size:10.5px;font-weight:600;line-height:16px;transition:border-color .12s,color .12s}.kPAopq_panelButton:hover{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary)}.kPAopq_panelButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.kPAopq_members{flex-wrap:wrap;gap:6px;min-width:0;display:flex}.kPAopq_member{border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);max-width:160px;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:5px;padding:3px 8px 3px 3px;font-size:11px;font-weight:500;line-height:16px;transition:border-color .12s,background-color .12s;display:inline-flex}.kPAopq_member:hover{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-fill-neutral)}.kPAopq_member:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.kPAopq_memberArt{border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:20px;height:20px}.kPAopq_memberInitial{background:var(--dsw-alias-bg-fill-business);width:20px;height:20px;color:var(--dsw-alias-label-on-fill);border-radius:50%;justify-content:center;align-items:center;font-size:10px;font-weight:600;line-height:20px;display:inline-flex}.kPAopq_memberName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}";
115
115
  const tagId$1 = "@nanmicoder/dsh-agent-teams/AgentTeamsCard.module.css";
116
116
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
117
117
  const tag = document.createElement("style");
@@ -121,17 +121,17 @@ window.__ModuleLoader__.load({
121
121
  document.head.appendChild(tag);
122
122
  }
123
123
  var AgentTeamsCard_module_css_default = {
124
- "head": "_6Ci0pW_head",
125
- "leadAvatar": "_6Ci0pW_leadAvatar",
126
- "member": "_6Ci0pW_member",
127
- "memberArt": "_6Ci0pW_memberArt",
128
- "memberCount": "_6Ci0pW_memberCount",
129
- "memberInitial": "_6Ci0pW_memberInitial",
130
- "memberName": "_6Ci0pW_memberName",
131
- "members": "_6Ci0pW_members",
132
- "panelButton": "_6Ci0pW_panelButton",
133
- "root": "_6Ci0pW_root",
134
- "teamName": "_6Ci0pW_teamName"
124
+ "head": "kPAopq_head",
125
+ "leadAvatar": "kPAopq_leadAvatar",
126
+ "member": "kPAopq_member",
127
+ "memberArt": "kPAopq_memberArt",
128
+ "memberCount": "kPAopq_memberCount",
129
+ "memberInitial": "kPAopq_memberInitial",
130
+ "memberName": "kPAopq_memberName",
131
+ "members": "kPAopq_members",
132
+ "panelButton": "kPAopq_panelButton",
133
+ "root": "kPAopq_root",
134
+ "teamName": "kPAopq_teamName"
135
135
  };
136
136
  //#endregion
137
137
  //#region lib/client/AgentTeamsCard.js
@@ -260,8 +260,8 @@ window.__ModuleLoader__.load({
260
260
  });
261
261
  }
262
262
  //#endregion
263
- //#region \0dsh-css:/Users/nanmi/workspace/myself_code/dsh-agent-teams/src/client/ActivityPanel.module.css.mjs
264
- const css = "html{--agent-teams-panel-width:388px;--agent-teams-panel-right:calc(18px + var(--dsh-sidebar-width,0px));--agent-teams-panel-gap:14px;--agent-teams-panel-shift:calc(var(--agent-teams-panel-width) + 18px + var(--agent-teams-panel-gap))}html[data-agent-teams-panel-open] [data-phase=active]{box-sizing:border-box;padding-right:var(--agent-teams-panel-shift)}[data-phase=active]{will-change:padding-right;transition:padding-right .36s cubic-bezier(.22,1,.36,1)}.qZToFW_badge{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 92%, transparent);backdrop-filter:blur(16px);height:34px;box-shadow:0 8px 28px color-mix(in srgb, var(--dsw-alias-label-primary) 14%, transparent);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:7px;padding:0 12px;font-size:12px;font-weight:600;line-height:20px;transition:border-color .15s,transform .12s;display:inline-flex;position:fixed}.qZToFW_badge:hover{border-color:var(--dsw-alias-line-strong);transform:translateY(-1px)}.qZToFW_badge:active{transform:translateY(0)scale(.98)}.qZToFW_badge:focus-visible,.qZToFW_closeButton:focus-visible,.qZToFW_memberRow:focus-visible,.qZToFW_taskNode:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.qZToFW_badgeDot,.qZToFW_panelDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px}.qZToFW_badgeDot[data-busy=true],.qZToFW_panelDot[data-busy=true]{background:var(--dsw-alias-state-business-primary);animation:1.25s ease-in-out infinite qZToFW_agentTeamsPulse}.qZToFW_badgeCount,.qZToFW_memberCount,.qZToFW_teamStats,.qZToFW_stageLabel,.qZToFW_taskId{font-variant-numeric:tabular-nums}.qZToFW_panel{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;width:min(var(--agent-teams-panel-width), calc(100vw - 24px));box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-line-strong) 58%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 95%, transparent);backdrop-filter:blur(20px)saturate(1.08);max-height:70dvh;box-shadow:0 12px 32px color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent), 0 32px 72px color-mix(in srgb, var(--dsw-alias-label-primary) 16%, transparent);border-radius:16px;flex-direction:column;animation:.18s ease-out qZToFW_agentTeamsPanelIn;display:flex;position:fixed;overflow:hidden}@keyframes qZToFW_agentTeamsPanelIn{0%{opacity:0;transform:translateY(-6px)scale(.99)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes qZToFW_agentTeamsPulse{0%,to{opacity:.42}50%{opacity:1}}.qZToFW_panelHead{border-bottom:1px solid var(--dsw-alias-line-normal);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:0 14px 0 16px;display:flex}.qZToFW_panelTitle{color:var(--dsw-alias-label-primary);align-items:center;gap:8px;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.qZToFW_closeButton{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,transform .12s;display:inline-flex}.qZToFW_closeButton:hover{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-primary)}.qZToFW_closeButton:active{transform:scale(.94)}.qZToFW_teams{overscroll-behavior:contain;flex-direction:column;min-height:0;display:flex;overflow-y:auto}.qZToFW_team{border-bottom:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:12px;padding:12px 14px 16px;display:flex}.qZToFW_team:last-child{border-bottom:0}.qZToFW_teamHead{align-items:center;gap:10px;min-width:0;display:flex}.qZToFW_teamName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.qZToFW_teamStats{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;gap:8px;font-size:10.5px;line-height:16px;display:inline-flex}.qZToFW_sectionHead{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}.qZToFW_sectionTitle{color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;font-size:11px;font-weight:600;line-height:16px;display:inline-flex}.qZToFW_sectionHint{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.qZToFW_delegationSection{min-width:0}.qZToFW_captainNode{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-state-business-primary) 32%, var(--dsw-alias-line-normal));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-module));border-radius:10px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:48px;padding:8px 10px;display:grid}.qZToFW_captainAvatar,.qZToFW_memberAvatar{flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.qZToFW_captainAvatar{width:36px;height:36px}.qZToFW_leadAvatar,.qZToFW_memberArt,.qZToFW_memberInitial{box-sizing:border-box;border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:34px;height:34px}.qZToFW_captainInfo,.qZToFW_memberInfo{flex-direction:column;min-width:0;display:flex}.qZToFW_captainInfo{gap:2px}.qZToFW_captainLine,.qZToFW_memberLine{align-items:center;gap:6px;min-width:0;display:flex}.qZToFW_captainName,.qZToFW_memberName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;line-height:18px;overflow:hidden}.qZToFW_captainRole,.qZToFW_memberRole{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.qZToFW_captainSummary,.qZToFW_memberStatusLine{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;line-height:15px;overflow:hidden}.qZToFW_captainState,.qZToFW_memberState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;align-items:center;gap:5px;font-size:10px;font-weight:500;line-height:15px;display:inline-flex}.qZToFW_captainState[data-busy=true],.qZToFW_memberState[data-activity=working]{color:var(--dsw-alias-state-business-primary)}.qZToFW_delegationTree{flex-direction:column;gap:2px;margin-left:18px;padding:9px 0 0 20px;display:flex;position:relative}.qZToFW_delegationTree:before{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));content:\"\";width:1px;position:absolute;top:0;bottom:22px;left:0}.qZToFW_memberBlock{flex-direction:column;min-width:0;padding:3px 0 7px;display:flex;position:relative}.qZToFW_memberBranch{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));width:20px;height:1px;display:block;position:absolute;top:23px;right:100%}.qZToFW_memberBranch:before{background:var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;width:5px;height:5px;position:absolute;top:-2px;right:-1px}.qZToFW_memberRow{box-sizing:border-box;width:100%;min-width:0;min-height:44px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:8px;padding:4px 6px;transition:background-color .12s,transform .12s;display:grid}.qZToFW_memberRow:hover,.qZToFW_memberRow[data-activity=working]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module))}.qZToFW_memberRow:active{transform:scale(.995)}.qZToFW_memberAvatar{width:34px;height:34px}.qZToFW_memberAvatar[data-unread=true]:after{border:1px solid var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;animation:1.5s ease-out infinite qZToFW_agentTeamsRing;position:absolute;inset:-3px}@keyframes qZToFW_agentTeamsRing{0%{opacity:.82;transform:scale(.94)}75%,to{opacity:0;transform:scale(1.18)}}.qZToFW_memberInitial{color:var(--dsw-alias-label-on-fill);justify-content:center;align-items:center;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.qZToFW_stateArt{box-sizing:border-box;border:2px solid var(--dsw-alias-bg-module-platform);object-fit:cover;background:#0b1d33;border-radius:50%;width:19px;height:19px;position:absolute;bottom:-4px;right:-4px}.qZToFW_stateArt[data-activity=working]{animation:2.4s ease-in-out infinite qZToFW_agentTeamsFloat}.qZToFW_stateArt[data-activity=idle]{animation:4.2s ease-in-out infinite qZToFW_agentTeamsBreathe}.qZToFW_stateArt[data-activity=unknown]{animation:2.8s ease-in-out infinite qZToFW_agentTeamsThink}@keyframes qZToFW_agentTeamsFloat{0%,to{transform:translateY(0)rotate(-4deg)}50%{transform:translateY(-2px)rotate(4deg)}}@keyframes qZToFW_agentTeamsBreathe{0%,to{opacity:.82;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes qZToFW_agentTeamsThink{0%,to{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.qZToFW_memberState{margin-left:auto}.qZToFW_memberCount{color:var(--dsw-alias-label-tertiary);font-size:10.5px;line-height:16px}.qZToFW_assignmentLine{align-items:center;gap:7px;min-width:0;padding:0 6px 0 52px;display:flex}.qZToFW_assignmentLabel{color:var(--dsw-alias-label-tertiary);flex:none;font-size:9.5px;line-height:14px}.qZToFW_assignmentTasks{flex-wrap:wrap;flex:1;gap:4px;min-width:0;display:flex}.qZToFW_assignmentChip{background:var(--dsw-alias-bg-fill-neutral);min-height:16px;color:var(--dsw-alias-label-secondary);border-radius:4px;align-items:center;padding:0 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px;font-weight:600;line-height:14px;display:inline-flex}.qZToFW_assignmentChip[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.qZToFW_assignmentChip[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.qZToFW_unreadPill{color:var(--dsw-alias-state-business-primary);white-space:nowrap;flex:none;font-size:9.5px;font-weight:600;line-height:14px}.qZToFW_taskEmpty{color:var(--dsw-alias-label-tertiary);font-size:9.5px;line-height:14px}.qZToFW_dependencySection{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:7px;min-width:0;padding-top:10px;display:flex}.qZToFW_stageFlow{scrollbar-width:thin;align-items:stretch;gap:0;min-width:0;padding:1px 1px 5px;display:flex;overflow-x:auto}.qZToFW_stageGroup{flex:1 0 126px;min-width:126px;display:flex;position:relative}.qZToFW_stageConnector{width:22px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;margin-top:0;display:flex}.qZToFW_stageLine{background:var(--dsw-alias-line-strong);flex:1;height:1px;display:block}.qZToFW_stageColumn{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.qZToFW_stageLabel{color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:6px;padding:0 2px;font-size:9.5px;font-weight:600;line-height:14px;display:flex}.qZToFW_stageLabel span{background:var(--dsw-alias-bg-fill-neutral);border-radius:4px;justify-content:center;align-items:center;min-width:14px;height:14px;font-size:8.5px;display:inline-flex}.qZToFW_stageTasks{flex-direction:column;gap:5px;display:flex}.qZToFW_taskNode{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);min-width:0;min-height:72px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;border-radius:8px;flex-direction:column;gap:4px;padding:7px 8px;transition:border-color .14s,opacity .14s,transform .12s,background-color .14s;display:flex}.qZToFW_taskNode:hover,.qZToFW_taskNode[data-focused=true]{border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module));transform:translateY(-1px)}.qZToFW_taskNode[data-dimmed=true]{opacity:.34}.qZToFW_taskNode[data-state=completed]{border-color:color-mix(in srgb, var(--dsw-alias-state-success) 48%, var(--dsw-alias-line-normal))}.qZToFW_taskNode[data-state=blocked]{border-color:color-mix(in srgb, var(--dsw-alias-state-warning) 52%, var(--dsw-alias-line-normal))}.qZToFW_taskNode[data-state=failed]{border-color:color-mix(in srgb, var(--dsw-alias-state-danger) 56%, var(--dsw-alias-line-normal))}.qZToFW_taskNodeHead,.qZToFW_taskRoute{justify-content:space-between;align-items:center;gap:5px;min-width:0;display:flex}.qZToFW_taskId{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:700}.qZToFW_taskBadge{background:var(--dsw-alias-bg-fill-neutral);min-height:14px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;align-items:center;padding:0 4px;font-size:8.5px;font-weight:600;line-height:13px;display:inline-flex}.qZToFW_taskBadge[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.qZToFW_taskBadge[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.qZToFW_taskSubject{min-height:30px;color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:10.5px;font-weight:500;line-height:15px;display:-webkit-box;overflow:hidden}.qZToFW_taskRoute{color:var(--dsw-alias-label-tertiary);margin-top:auto;font-size:8.5px;line-height:13px}.qZToFW_taskOwner,.qZToFW_taskDeps{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.qZToFW_taskOwner{max-width:48%;color:var(--dsw-alias-label-secondary);font-weight:600}.qZToFW_taskDeps{text-align:right;flex:1}.qZToFW_taskStart{color:var(--dsw-alias-label-tertiary)}.qZToFW_unclaimed,.qZToFW_inbox{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:5px;min-width:0;padding-top:10px;display:flex}.qZToFW_unclaimedTitle{color:var(--dsw-alias-label-secondary);font-size:10.5px;font-weight:600;line-height:15px}.qZToFW_inboxRow{border-radius:6px;grid-template-columns:112px minmax(0,1fr);align-items:center;gap:8px;min-width:0;min-height:24px;padding:2px 5px;display:grid}.qZToFW_inboxRow:hover{background:var(--dsw-alias-bg-module)}.qZToFW_inboxRoute{min-width:0;color:var(--dsw-alias-state-business-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:3px;font-size:9.5px;font-weight:600;line-height:14px;display:inline-flex;overflow:hidden}.qZToFW_inboxContent{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.qZToFW_emptyHint{color:var(--dsw-alias-label-tertiary);padding:10px 12px;font-size:11px;line-height:16px}.qZToFW_team[data-historic],.qZToFW_archivedWrap{opacity:.82}.qZToFW_historicPill{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-tertiary);border-radius:4px;flex:none;margin-left:auto;padding:1px 7px;font-size:9.5px;font-weight:600;line-height:15px}.qZToFW_members{flex-direction:column;gap:3px;display:flex}.qZToFW_archivedWrap:before{color:var(--dsw-alias-label-tertiary);content:\"已结束 · 历史归档\";padding:5px 14px 0;font-size:9.5px;font-weight:600;line-height:14px;display:block}@media (prefers-reduced-motion:reduce){[data-phase=active],.qZToFW_panel,.qZToFW_badge,.qZToFW_badgeDot,.qZToFW_panelDot,.qZToFW_stateArt,.qZToFW_memberAvatar[data-unread=true]:after{transition:none;animation:none}}@media (width<=960px){html{--agent-teams-main-shift:0px}html[data-agent-teams-panel-open] [data-phase=active]{padding-right:0}}@media (width<=640px){html{--agent-teams-panel-right:calc(10px + var(--dsh-sidebar-width,0px))}.qZToFW_panel{width:auto;max-height:calc(100dvh - 68px);top:56px;left:10px}.qZToFW_badge{top:56px}.qZToFW_teamStats span[data-stat=messages]{display:none}.qZToFW_captainNode{grid-template-columns:38px minmax(0,1fr)}.qZToFW_captainState{display:none}.qZToFW_delegationTree{margin-left:12px;padding-left:15px}.qZToFW_memberBranch{width:15px}.qZToFW_assignmentLine{padding-left:45px}}";
263
+ //#region \0dsh-css:/home/runner/work/dsh-agent-teams/dsh-agent-teams/src/client/ActivityPanel.module.css.mjs
264
+ const css = "html{--agent-teams-panel-width:388px;--agent-teams-panel-right:calc(18px + var(--dsh-sidebar-width,0px));--agent-teams-panel-gap:14px;--agent-teams-panel-shift:calc(var(--agent-teams-panel-width) + 18px + var(--agent-teams-panel-gap))}html[data-agent-teams-panel-open] [data-phase=active]{box-sizing:border-box;padding-right:var(--agent-teams-panel-shift)}[data-phase=active]{will-change:padding-right;transition:padding-right .36s cubic-bezier(.22,1,.36,1)}.aYQbCq_badge{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 92%, transparent);backdrop-filter:blur(16px);height:34px;box-shadow:0 8px 28px color-mix(in srgb, var(--dsw-alias-label-primary) 14%, transparent);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:7px;padding:0 12px;font-size:12px;font-weight:600;line-height:20px;transition:border-color .15s,transform .12s;display:inline-flex;position:fixed}.aYQbCq_badge:hover{border-color:var(--dsw-alias-line-strong);transform:translateY(-1px)}.aYQbCq_badge:active{transform:translateY(0)scale(.98)}.aYQbCq_badge:focus-visible,.aYQbCq_closeButton:focus-visible,.aYQbCq_memberRow:focus-visible,.aYQbCq_taskNode:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.aYQbCq_badgeDot,.aYQbCq_panelDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:7px;height:7px}.aYQbCq_badgeDot[data-busy=true],.aYQbCq_panelDot[data-busy=true]{background:var(--dsw-alias-state-business-primary);animation:1.25s ease-in-out infinite aYQbCq_agentTeamsPulse}.aYQbCq_badgeCount,.aYQbCq_memberCount,.aYQbCq_teamStats,.aYQbCq_stageLabel,.aYQbCq_taskId{font-variant-numeric:tabular-nums}.aYQbCq_panel{top:64px;right:var(--agent-teams-panel-right);z-index:2147483000;width:min(var(--agent-teams-panel-width), calc(100vw - 24px));box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-line-strong) 58%, transparent);background:color-mix(in srgb, var(--dsw-alias-bg-module-platform) 95%, transparent);backdrop-filter:blur(20px)saturate(1.08);max-height:70dvh;box-shadow:0 12px 32px color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent), 0 32px 72px color-mix(in srgb, var(--dsw-alias-label-primary) 16%, transparent);border-radius:16px;flex-direction:column;animation:.18s ease-out aYQbCq_agentTeamsPanelIn;display:flex;position:fixed;overflow:hidden}@keyframes aYQbCq_agentTeamsPanelIn{0%{opacity:0;transform:translateY(-6px)scale(.99)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes aYQbCq_agentTeamsPulse{0%,to{opacity:.42}50%{opacity:1}}.aYQbCq_panelHead{border-bottom:1px solid var(--dsw-alias-line-normal);flex:none;justify-content:space-between;align-items:center;min-height:44px;padding:0 14px 0 16px;display:flex}.aYQbCq_panelTitle{color:var(--dsw-alias-label-primary);align-items:center;gap:8px;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.aYQbCq_closeButton{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s,transform .12s;display:inline-flex}.aYQbCq_closeButton:hover{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-primary)}.aYQbCq_closeButton:active{transform:scale(.94)}.aYQbCq_teams{overscroll-behavior:contain;flex-direction:column;min-height:0;display:flex;overflow-y:auto}.aYQbCq_team{border-bottom:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:12px;padding:12px 14px 16px;display:flex}.aYQbCq_team:last-child{border-bottom:0}.aYQbCq_teamHead{align-items:center;gap:10px;min-width:0;display:flex}.aYQbCq_teamName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}.aYQbCq_teamStats{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;gap:8px;font-size:10.5px;line-height:16px;display:inline-flex}.aYQbCq_sectionHead{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}.aYQbCq_sectionTitle{color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;font-size:11px;font-weight:600;line-height:16px;display:inline-flex}.aYQbCq_sectionHint{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.aYQbCq_delegationSection{min-width:0}.aYQbCq_captainNode{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--dsw-alias-state-business-primary) 32%, var(--dsw-alias-line-normal));background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 7%, var(--dsw-alias-bg-module));border-radius:10px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:48px;padding:8px 10px;display:grid}.aYQbCq_captainAvatar,.aYQbCq_memberAvatar{flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.aYQbCq_captainAvatar{width:36px;height:36px}.aYQbCq_leadAvatar,.aYQbCq_memberArt,.aYQbCq_memberInitial{box-sizing:border-box;border:1px solid var(--dsw-alias-line-strong);object-fit:cover;background:#0b1d33;border-radius:50%;width:34px;height:34px}.aYQbCq_captainInfo,.aYQbCq_memberInfo{flex-direction:column;min-width:0;display:flex}.aYQbCq_captainInfo{gap:2px}.aYQbCq_captainLine,.aYQbCq_memberLine{align-items:center;gap:6px;min-width:0;display:flex}.aYQbCq_captainName,.aYQbCq_memberName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;line-height:18px;overflow:hidden}.aYQbCq_captainRole,.aYQbCq_memberRole{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.aYQbCq_captainSummary,.aYQbCq_memberStatusLine{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;line-height:15px;overflow:hidden}.aYQbCq_captainState,.aYQbCq_memberState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;align-items:center;gap:5px;font-size:10px;font-weight:500;line-height:15px;display:inline-flex}.aYQbCq_captainState[data-busy=true],.aYQbCq_memberState[data-activity=working]{color:var(--dsw-alias-state-business-primary)}.aYQbCq_delegationTree{flex-direction:column;gap:2px;margin-left:18px;padding:9px 0 0 20px;display:flex;position:relative}.aYQbCq_delegationTree:before{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));content:\"\";width:1px;position:absolute;top:0;bottom:22px;left:0}.aYQbCq_memberBlock{flex-direction:column;min-width:0;padding:3px 0 7px;display:flex;position:relative}.aYQbCq_memberBranch{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 48%, var(--dsw-alias-line-normal));width:20px;height:1px;display:block;position:absolute;top:23px;right:100%}.aYQbCq_memberBranch:before{background:var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;width:5px;height:5px;position:absolute;top:-2px;right:-1px}.aYQbCq_memberRow{box-sizing:border-box;width:100%;min-width:0;min-height:44px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:8px;padding:4px 6px;transition:background-color .12s,transform .12s;display:grid}.aYQbCq_memberRow:hover,.aYQbCq_memberRow[data-activity=working]{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module))}.aYQbCq_memberRow:active{transform:scale(.995)}.aYQbCq_memberAvatar{width:34px;height:34px}.aYQbCq_memberAvatar[data-unread=true]:after{border:1px solid var(--dsw-alias-state-business-primary);content:\"\";border-radius:50%;animation:1.5s ease-out infinite aYQbCq_agentTeamsRing;position:absolute;inset:-3px}@keyframes aYQbCq_agentTeamsRing{0%{opacity:.82;transform:scale(.94)}75%,to{opacity:0;transform:scale(1.18)}}.aYQbCq_memberInitial{color:var(--dsw-alias-label-on-fill);justify-content:center;align-items:center;font-size:14px;font-weight:600;line-height:20px;display:inline-flex}.aYQbCq_stateArt{box-sizing:border-box;border:2px solid var(--dsw-alias-bg-module-platform);object-fit:cover;background:#0b1d33;border-radius:50%;width:19px;height:19px;position:absolute;bottom:-4px;right:-4px}.aYQbCq_stateArt[data-activity=working]{animation:2.4s ease-in-out infinite aYQbCq_agentTeamsFloat}.aYQbCq_stateArt[data-activity=idle]{animation:4.2s ease-in-out infinite aYQbCq_agentTeamsBreathe}.aYQbCq_stateArt[data-activity=unknown]{animation:2.8s ease-in-out infinite aYQbCq_agentTeamsThink}@keyframes aYQbCq_agentTeamsFloat{0%,to{transform:translateY(0)rotate(-4deg)}50%{transform:translateY(-2px)rotate(4deg)}}@keyframes aYQbCq_agentTeamsBreathe{0%,to{opacity:.82;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes aYQbCq_agentTeamsThink{0%,to{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.aYQbCq_memberState{margin-left:auto}.aYQbCq_memberCount{color:var(--dsw-alias-label-tertiary);font-size:10.5px;line-height:16px}.aYQbCq_assignmentLine{align-items:center;gap:7px;min-width:0;padding:0 6px 0 52px;display:flex}.aYQbCq_assignmentLabel{color:var(--dsw-alias-label-tertiary);flex:none;font-size:9.5px;line-height:14px}.aYQbCq_assignmentTasks{flex-wrap:wrap;flex:1;gap:4px;min-width:0;display:flex}.aYQbCq_assignmentChip{background:var(--dsw-alias-bg-fill-neutral);min-height:16px;color:var(--dsw-alias-label-secondary);border-radius:4px;align-items:center;padding:0 5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px;font-weight:600;line-height:14px;display:inline-flex}.aYQbCq_assignmentChip[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.aYQbCq_assignmentChip[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.aYQbCq_unreadPill{color:var(--dsw-alias-state-business-primary);white-space:nowrap;flex:none;font-size:9.5px;font-weight:600;line-height:14px}.aYQbCq_taskEmpty{color:var(--dsw-alias-label-tertiary);font-size:9.5px;line-height:14px}.aYQbCq_dependencySection{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:7px;min-width:0;padding-top:10px;display:flex}.aYQbCq_stageFlow{scrollbar-width:thin;align-items:stretch;gap:0;min-width:0;padding:1px 1px 5px;display:flex;overflow-x:auto}.aYQbCq_stageGroup{flex:1 0 126px;min-width:126px;display:flex;position:relative}.aYQbCq_stageConnector{width:22px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;margin-top:0;display:flex}.aYQbCq_stageLine{background:var(--dsw-alias-line-strong);flex:1;height:1px;display:block}.aYQbCq_stageColumn{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.aYQbCq_stageLabel{color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:6px;padding:0 2px;font-size:9.5px;font-weight:600;line-height:14px;display:flex}.aYQbCq_stageLabel span{background:var(--dsw-alias-bg-fill-neutral);border-radius:4px;justify-content:center;align-items:center;min-width:14px;height:14px;font-size:8.5px;display:inline-flex}.aYQbCq_stageTasks{flex-direction:column;gap:5px;display:flex}.aYQbCq_taskNode{box-sizing:border-box;border:1px solid var(--dsw-alias-line-normal);background:var(--dsw-alias-bg-module);min-width:0;min-height:72px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;border-radius:8px;flex-direction:column;gap:4px;padding:7px 8px;transition:border-color .14s,opacity .14s,transform .12s,background-color .14s;display:flex}.aYQbCq_taskNode:hover,.aYQbCq_taskNode[data-focused=true]{border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 6%, var(--dsw-alias-bg-module));transform:translateY(-1px)}.aYQbCq_taskNode[data-dimmed=true]{opacity:.34}.aYQbCq_taskNode[data-state=completed]{border-color:color-mix(in srgb, var(--dsw-alias-state-success) 48%, var(--dsw-alias-line-normal))}.aYQbCq_taskNode[data-state=blocked]{border-color:color-mix(in srgb, var(--dsw-alias-state-warning) 52%, var(--dsw-alias-line-normal))}.aYQbCq_taskNode[data-state=failed]{border-color:color-mix(in srgb, var(--dsw-alias-state-danger) 56%, var(--dsw-alias-line-normal))}.aYQbCq_taskNodeHead,.aYQbCq_taskRoute{justify-content:space-between;align-items:center;gap:5px;min-width:0;display:flex}.aYQbCq_taskId{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:700}.aYQbCq_taskBadge{background:var(--dsw-alias-bg-fill-neutral);min-height:14px;color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;align-items:center;padding:0 4px;font-size:8.5px;font-weight:600;line-height:13px;display:inline-flex}.aYQbCq_taskBadge[data-state=running]{background:var(--dsw-alias-bg-fill-business);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=completed]{background:var(--dsw-alias-bg-fill-success);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=blocked]{background:var(--dsw-alias-bg-fill-warning);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=failed]{background:var(--dsw-alias-bg-fill-danger);color:var(--dsw-alias-label-on-fill)}.aYQbCq_taskBadge[data-state=cancelled]{color:var(--dsw-alias-label-tertiary);text-decoration:line-through}.aYQbCq_taskSubject{min-height:30px;color:var(--dsw-alias-label-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:10.5px;font-weight:500;line-height:15px;display:-webkit-box;overflow:hidden}.aYQbCq_taskRoute{color:var(--dsw-alias-label-tertiary);margin-top:auto;font-size:8.5px;line-height:13px}.aYQbCq_taskOwner,.aYQbCq_taskDeps{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.aYQbCq_taskOwner{max-width:48%;color:var(--dsw-alias-label-secondary);font-weight:600}.aYQbCq_taskDeps{text-align:right;flex:1}.aYQbCq_taskStart{color:var(--dsw-alias-label-tertiary)}.aYQbCq_unclaimed,.aYQbCq_inbox{border-top:1px solid var(--dsw-alias-line-normal);flex-direction:column;gap:5px;min-width:0;padding-top:10px;display:flex}.aYQbCq_unclaimedTitle{color:var(--dsw-alias-label-secondary);font-size:10.5px;font-weight:600;line-height:15px}.aYQbCq_inboxRow{border-radius:6px;grid-template-columns:112px minmax(0,1fr);align-items:center;gap:8px;min-width:0;min-height:24px;padding:2px 5px;display:grid}.aYQbCq_inboxRow:hover{background:var(--dsw-alias-bg-module)}.aYQbCq_inboxRoute{min-width:0;color:var(--dsw-alias-state-business-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:3px;font-size:9.5px;font-weight:600;line-height:14px;display:inline-flex;overflow:hidden}.aYQbCq_inboxContent{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:14px;overflow:hidden}.aYQbCq_emptyHint{color:var(--dsw-alias-label-tertiary);padding:10px 12px;font-size:11px;line-height:16px}.aYQbCq_team[data-historic],.aYQbCq_archivedWrap{opacity:.82}.aYQbCq_historicPill{background:var(--dsw-alias-bg-fill-neutral);color:var(--dsw-alias-label-tertiary);border-radius:4px;flex:none;margin-left:auto;padding:1px 7px;font-size:9.5px;font-weight:600;line-height:15px}.aYQbCq_members{flex-direction:column;gap:3px;display:flex}.aYQbCq_archivedWrap:before{color:var(--dsw-alias-label-tertiary);content:\"已结束 · 历史归档\";padding:5px 14px 0;font-size:9.5px;font-weight:600;line-height:14px;display:block}@media (prefers-reduced-motion:reduce){[data-phase=active],.aYQbCq_panel,.aYQbCq_badge,.aYQbCq_badgeDot,.aYQbCq_panelDot,.aYQbCq_stateArt,.aYQbCq_memberAvatar[data-unread=true]:after{transition:none;animation:none}}@media (width<=960px){html{--agent-teams-main-shift:0px}html[data-agent-teams-panel-open] [data-phase=active]{padding-right:0}}@media (width<=640px){html{--agent-teams-panel-right:calc(10px + var(--dsh-sidebar-width,0px))}.aYQbCq_panel{width:auto;max-height:calc(100dvh - 68px);top:56px;left:10px}.aYQbCq_badge{top:56px}.aYQbCq_teamStats span[data-stat=messages]{display:none}.aYQbCq_captainNode{grid-template-columns:38px minmax(0,1fr)}.aYQbCq_captainState{display:none}.aYQbCq_delegationTree{margin-left:12px;padding-left:15px}.aYQbCq_memberBranch{width:15px}.aYQbCq_assignmentLine{padding-left:45px}}";
265
265
  const tagId = "@nanmicoder/dsh-agent-teams/ActivityPanel.module.css";
266
266
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
267
267
  const tag = document.createElement("style");
@@ -271,86 +271,86 @@ window.__ModuleLoader__.load({
271
271
  document.head.appendChild(tag);
272
272
  }
273
273
  var ActivityPanel_module_css_default = {
274
- "agentTeamsBreathe": "qZToFW_agentTeamsBreathe",
275
- "agentTeamsFloat": "qZToFW_agentTeamsFloat",
276
- "agentTeamsPanelIn": "qZToFW_agentTeamsPanelIn",
277
- "agentTeamsPulse": "qZToFW_agentTeamsPulse",
278
- "agentTeamsRing": "qZToFW_agentTeamsRing",
279
- "agentTeamsThink": "qZToFW_agentTeamsThink",
280
- "archivedWrap": "qZToFW_archivedWrap",
281
- "assignmentChip": "qZToFW_assignmentChip",
282
- "assignmentLabel": "qZToFW_assignmentLabel",
283
- "assignmentLine": "qZToFW_assignmentLine",
284
- "assignmentTasks": "qZToFW_assignmentTasks",
285
- "badge": "qZToFW_badge",
286
- "badgeCount": "qZToFW_badgeCount",
287
- "badgeDot": "qZToFW_badgeDot",
288
- "captainAvatar": "qZToFW_captainAvatar",
289
- "captainInfo": "qZToFW_captainInfo",
290
- "captainLine": "qZToFW_captainLine",
291
- "captainName": "qZToFW_captainName",
292
- "captainNode": "qZToFW_captainNode",
293
- "captainRole": "qZToFW_captainRole",
294
- "captainState": "qZToFW_captainState",
295
- "captainSummary": "qZToFW_captainSummary",
296
- "closeButton": "qZToFW_closeButton",
297
- "delegationSection": "qZToFW_delegationSection",
298
- "delegationTree": "qZToFW_delegationTree",
299
- "dependencySection": "qZToFW_dependencySection",
300
- "emptyHint": "qZToFW_emptyHint",
301
- "historicPill": "qZToFW_historicPill",
302
- "inbox": "qZToFW_inbox",
303
- "inboxContent": "qZToFW_inboxContent",
304
- "inboxRoute": "qZToFW_inboxRoute",
305
- "inboxRow": "qZToFW_inboxRow",
306
- "leadAvatar": "qZToFW_leadAvatar",
307
- "memberArt": "qZToFW_memberArt",
308
- "memberAvatar": "qZToFW_memberAvatar",
309
- "memberBlock": "qZToFW_memberBlock",
310
- "memberBranch": "qZToFW_memberBranch",
311
- "memberCount": "qZToFW_memberCount",
312
- "memberInfo": "qZToFW_memberInfo",
313
- "memberInitial": "qZToFW_memberInitial",
314
- "memberLine": "qZToFW_memberLine",
315
- "memberName": "qZToFW_memberName",
316
- "memberRole": "qZToFW_memberRole",
317
- "memberRow": "qZToFW_memberRow",
318
- "memberState": "qZToFW_memberState",
319
- "memberStatusLine": "qZToFW_memberStatusLine",
320
- "members": "qZToFW_members",
321
- "panel": "qZToFW_panel",
322
- "panelDot": "qZToFW_panelDot",
323
- "panelHead": "qZToFW_panelHead",
324
- "panelTitle": "qZToFW_panelTitle",
325
- "sectionHead": "qZToFW_sectionHead",
326
- "sectionHint": "qZToFW_sectionHint",
327
- "sectionTitle": "qZToFW_sectionTitle",
328
- "stageColumn": "qZToFW_stageColumn",
329
- "stageConnector": "qZToFW_stageConnector",
330
- "stageFlow": "qZToFW_stageFlow",
331
- "stageGroup": "qZToFW_stageGroup",
332
- "stageLabel": "qZToFW_stageLabel",
333
- "stageLine": "qZToFW_stageLine",
334
- "stageTasks": "qZToFW_stageTasks",
335
- "stateArt": "qZToFW_stateArt",
336
- "taskBadge": "qZToFW_taskBadge",
337
- "taskDeps": "qZToFW_taskDeps",
338
- "taskEmpty": "qZToFW_taskEmpty",
339
- "taskId": "qZToFW_taskId",
340
- "taskNode": "qZToFW_taskNode",
341
- "taskNodeHead": "qZToFW_taskNodeHead",
342
- "taskOwner": "qZToFW_taskOwner",
343
- "taskRoute": "qZToFW_taskRoute",
344
- "taskStart": "qZToFW_taskStart",
345
- "taskSubject": "qZToFW_taskSubject",
346
- "team": "qZToFW_team",
347
- "teamHead": "qZToFW_teamHead",
348
- "teamName": "qZToFW_teamName",
349
- "teamStats": "qZToFW_teamStats",
350
- "teams": "qZToFW_teams",
351
- "unclaimed": "qZToFW_unclaimed",
352
- "unclaimedTitle": "qZToFW_unclaimedTitle",
353
- "unreadPill": "qZToFW_unreadPill"
274
+ "agentTeamsBreathe": "aYQbCq_agentTeamsBreathe",
275
+ "agentTeamsFloat": "aYQbCq_agentTeamsFloat",
276
+ "agentTeamsPanelIn": "aYQbCq_agentTeamsPanelIn",
277
+ "agentTeamsPulse": "aYQbCq_agentTeamsPulse",
278
+ "agentTeamsRing": "aYQbCq_agentTeamsRing",
279
+ "agentTeamsThink": "aYQbCq_agentTeamsThink",
280
+ "archivedWrap": "aYQbCq_archivedWrap",
281
+ "assignmentChip": "aYQbCq_assignmentChip",
282
+ "assignmentLabel": "aYQbCq_assignmentLabel",
283
+ "assignmentLine": "aYQbCq_assignmentLine",
284
+ "assignmentTasks": "aYQbCq_assignmentTasks",
285
+ "badge": "aYQbCq_badge",
286
+ "badgeCount": "aYQbCq_badgeCount",
287
+ "badgeDot": "aYQbCq_badgeDot",
288
+ "captainAvatar": "aYQbCq_captainAvatar",
289
+ "captainInfo": "aYQbCq_captainInfo",
290
+ "captainLine": "aYQbCq_captainLine",
291
+ "captainName": "aYQbCq_captainName",
292
+ "captainNode": "aYQbCq_captainNode",
293
+ "captainRole": "aYQbCq_captainRole",
294
+ "captainState": "aYQbCq_captainState",
295
+ "captainSummary": "aYQbCq_captainSummary",
296
+ "closeButton": "aYQbCq_closeButton",
297
+ "delegationSection": "aYQbCq_delegationSection",
298
+ "delegationTree": "aYQbCq_delegationTree",
299
+ "dependencySection": "aYQbCq_dependencySection",
300
+ "emptyHint": "aYQbCq_emptyHint",
301
+ "historicPill": "aYQbCq_historicPill",
302
+ "inbox": "aYQbCq_inbox",
303
+ "inboxContent": "aYQbCq_inboxContent",
304
+ "inboxRoute": "aYQbCq_inboxRoute",
305
+ "inboxRow": "aYQbCq_inboxRow",
306
+ "leadAvatar": "aYQbCq_leadAvatar",
307
+ "memberArt": "aYQbCq_memberArt",
308
+ "memberAvatar": "aYQbCq_memberAvatar",
309
+ "memberBlock": "aYQbCq_memberBlock",
310
+ "memberBranch": "aYQbCq_memberBranch",
311
+ "memberCount": "aYQbCq_memberCount",
312
+ "memberInfo": "aYQbCq_memberInfo",
313
+ "memberInitial": "aYQbCq_memberInitial",
314
+ "memberLine": "aYQbCq_memberLine",
315
+ "memberName": "aYQbCq_memberName",
316
+ "memberRole": "aYQbCq_memberRole",
317
+ "memberRow": "aYQbCq_memberRow",
318
+ "memberState": "aYQbCq_memberState",
319
+ "memberStatusLine": "aYQbCq_memberStatusLine",
320
+ "members": "aYQbCq_members",
321
+ "panel": "aYQbCq_panel",
322
+ "panelDot": "aYQbCq_panelDot",
323
+ "panelHead": "aYQbCq_panelHead",
324
+ "panelTitle": "aYQbCq_panelTitle",
325
+ "sectionHead": "aYQbCq_sectionHead",
326
+ "sectionHint": "aYQbCq_sectionHint",
327
+ "sectionTitle": "aYQbCq_sectionTitle",
328
+ "stageColumn": "aYQbCq_stageColumn",
329
+ "stageConnector": "aYQbCq_stageConnector",
330
+ "stageFlow": "aYQbCq_stageFlow",
331
+ "stageGroup": "aYQbCq_stageGroup",
332
+ "stageLabel": "aYQbCq_stageLabel",
333
+ "stageLine": "aYQbCq_stageLine",
334
+ "stageTasks": "aYQbCq_stageTasks",
335
+ "stateArt": "aYQbCq_stateArt",
336
+ "taskBadge": "aYQbCq_taskBadge",
337
+ "taskDeps": "aYQbCq_taskDeps",
338
+ "taskEmpty": "aYQbCq_taskEmpty",
339
+ "taskId": "aYQbCq_taskId",
340
+ "taskNode": "aYQbCq_taskNode",
341
+ "taskNodeHead": "aYQbCq_taskNodeHead",
342
+ "taskOwner": "aYQbCq_taskOwner",
343
+ "taskRoute": "aYQbCq_taskRoute",
344
+ "taskStart": "aYQbCq_taskStart",
345
+ "taskSubject": "aYQbCq_taskSubject",
346
+ "team": "aYQbCq_team",
347
+ "teamHead": "aYQbCq_teamHead",
348
+ "teamName": "aYQbCq_teamName",
349
+ "teamStats": "aYQbCq_teamStats",
350
+ "teams": "aYQbCq_teams",
351
+ "unclaimed": "aYQbCq_unclaimed",
352
+ "unclaimedTitle": "aYQbCq_unclaimedTitle",
353
+ "unreadPill": "aYQbCq_unreadPill"
354
354
  };
355
355
  //#endregion
356
356
  //#region lib/client/ActivityPanel.js
package/lib/index.js CHANGED
@@ -27,7 +27,7 @@ const WEB_SERVER_KEYS = ['webServer', 'httpServer'];
27
27
  /** Workspace registry service key candidates, newest first. */
28
28
  const WORKSPACE_KEYS = ['workspaceRegistry', 'workspace'];
29
29
  export const name = 'agent-teams';
30
- export const inject = ['tools', 'subagents', 'systemPrompt', 'agents'];
30
+ export const inject = ['tools', 'llm', 'subagents', 'systemPrompt', 'agents'];
31
31
  export const Config = z.object({
32
32
  stateDir: z.string().default('.agent-teams'),
33
33
  memberProvider: z.string().default('spawn'),
@@ -40,7 +40,7 @@ export const Config = z.object({
40
40
  function usageSectionText(toolNames) {
41
41
  return `When the user asks to run something with AgentTeams (e.g. "use AgentTeams to do X"), you are the captain of a multi-agent team. Follow this protocol:
42
42
  1. Call agent_teams_create with a team name and the goal as description. You become the captain and may lead one team at a time.
43
- 2. Call agent_teams_add_member once per role the goal needs (researcher, engineer, reviewer, ...). Members are durable subagents: they wait for your messages, then work a full turn.
43
+ 2. Call agent_teams_add_member once per role the goal needs (researcher, engineer, reviewer, ...). Members are durable subagents: they wait for your messages, then work a full turn. By default each member snapshots your current provider, model, and reasoning effort. Never ask the user to choose these per member; only pass provider/model when the user explicitly requests a different route for that role.
44
44
  3. Break the goal into tasks with agent_teams_create_task; wire dependencies between tasks (a task is claimable only when its dependencies are completed). Assign each task to a member when it fits a role.
45
45
  4. Dispatch work: claim each assigned task (agent_teams_claim_task with assignee) and wake the member with agent_teams_send_message naming its task id and instructions. One task per message keeps turns focused.
46
46
  5. Poll agent_teams_status until members are idle; relay member-to-member messages (agent_teams_send_message with from=<sender>) and collect completed tasks' outputs. If a member reports a blocker, reassign the task or adjust the plan.
package/lib/members.js CHANGED
@@ -11,6 +11,12 @@
11
11
  * which the captain reads through `agent_teams_status`.
12
12
  * @module dsh-agent-teams/members
13
13
  */
14
+ import { installModelSelection } from '@deepseek-ai/dsh-agent';
15
+ // Declaration merge only: makes ctx.subagents visible.
16
+ import { foldSubagentDescriptor } from '@deepseek-ai/dsh-subagent';
17
+ import { ReasoningEffortId } from '@deepseek-ai/dsh-llm';
18
+ import { join } from 'node:path';
19
+ import { readTeamSync } from "./state.js";
14
20
  /** Captain-only AgentTeams tools hidden from newly spawned members. */
15
21
  const MEMBER_DENIED_TOOLS = [
16
22
  'agent_teams_create',
@@ -28,6 +34,141 @@ const MEMBER_DENIED_TOOLS = [
28
34
  function brandedSessionId(value) {
29
35
  return value;
30
36
  }
37
+ const MEMBER_LABEL_PREFIX = 'agent-teams:';
38
+ function pendingSelectionKey(parentSessionId, label) {
39
+ return `${parentSessionId}\u0000${label}`;
40
+ }
41
+ function selectionFromMember(member) {
42
+ if (member?.provider === undefined || member.model === undefined)
43
+ return undefined;
44
+ const provider = member.provider.trim();
45
+ const model = member.model.trim();
46
+ if (provider === '' || model === '')
47
+ return undefined;
48
+ const reasoningEffort = member.reasoningEffort?.trim();
49
+ return {
50
+ provider,
51
+ model,
52
+ ...reasoningEffort === undefined || reasoningEffort === '' ? {} : { reasoningEffort },
53
+ };
54
+ }
55
+ function modelSelection(selection) {
56
+ return {
57
+ provider: selection.provider,
58
+ model: selection.model,
59
+ ...selection.reasoningEffort === undefined
60
+ ? {}
61
+ : { reasoningEffort: ReasoningEffortId(selection.reasoningEffort) },
62
+ };
63
+ }
64
+ /**
65
+ * Resolve one member's complete model selection. Ordinary members snapshot the
66
+ * captain's current request route and reasoning effort. An explicit member
67
+ * provider/model or plugin-level model replaces only that route; the current
68
+ * captain effort remains the inherited policy and is validated against the
69
+ * target model before a child is created.
70
+ */
71
+ export async function resolveMemberLlmSelection(ctx, captain, request, signal) {
72
+ const explicitProvider = request.provider?.trim();
73
+ const explicitModel = request.model?.trim();
74
+ const defaultModel = request.defaultModel?.trim();
75
+ if (request.provider !== undefined && explicitProvider === '') {
76
+ throw new Error('member LLM provider must not be empty');
77
+ }
78
+ if (request.model !== undefined && explicitModel === '') {
79
+ throw new Error('member model must not be empty');
80
+ }
81
+ if (request.defaultModel !== undefined && defaultModel === '') {
82
+ throw new Error('configured memberModel must not be empty');
83
+ }
84
+ if (explicitProvider !== undefined && explicitModel === undefined) {
85
+ throw new Error('an explicit member LLM provider requires an explicit member model');
86
+ }
87
+ const current = captain.session.requestHeader()?.config;
88
+ const provider = explicitProvider ?? current?.provider ?? captain.options.provider;
89
+ const model = explicitModel ?? defaultModel ?? current?.model ?? captain.options.model;
90
+ if (provider === undefined || model === undefined) {
91
+ throw new Error('cannot resolve the member LLM route from the current captain session');
92
+ }
93
+ const resolved = await ctx.llm.resolveCallConfig({
94
+ provider,
95
+ model,
96
+ ...current?.reasoningEffort === undefined
97
+ ? {}
98
+ : { reasoningEffort: current.reasoningEffort },
99
+ }, signal);
100
+ return {
101
+ provider: resolved.provider,
102
+ model: resolved.model,
103
+ ...resolved.reasoningEffort === undefined
104
+ ? {}
105
+ : { reasoningEffort: String(resolved.reasoningEffort) },
106
+ };
107
+ }
108
+ /**
109
+ * Install the member selection bridge for every fresh or cold-resumed
110
+ * continuable child. Fresh creation reads the pending in-memory selection;
111
+ * cold resume restores the same selection from the owning team's durable
112
+ * record. Legacy members without a complete saved route retain Harness's
113
+ * descriptor provider/model behavior.
114
+ */
115
+ export function installMemberSelectionRuntime(ctx, stateDir) {
116
+ const pending = new Map();
117
+ ctx.subagents.registerContinuableSetup((childCtx) => {
118
+ const child = childCtx.agent;
119
+ if (child === undefined)
120
+ return () => undefined;
121
+ const suffix = child.session.events.slice(child.session.header.seedLength ?? 0);
122
+ const descriptor = foldSubagentDescriptor(suffix);
123
+ if (descriptor?.mode !== 'continuable' || !descriptor.label.startsWith(MEMBER_LABEL_PREFIX)) {
124
+ return () => undefined;
125
+ }
126
+ const parentSessionId = child.session.header.parentSession;
127
+ if (parentSessionId === undefined)
128
+ return () => undefined;
129
+ const key = pendingSelectionKey(parentSessionId, descriptor.label);
130
+ let selection = pending.get(key);
131
+ if (selection === undefined) {
132
+ const identity = descriptor.label.slice(MEMBER_LABEL_PREFIX.length);
133
+ const separator = identity.indexOf(':');
134
+ if (separator < 1 || separator === identity.length - 1)
135
+ return () => undefined;
136
+ const teamId = identity.slice(0, separator);
137
+ const memberName = identity.slice(separator + 1);
138
+ const workspace = child.session.header.cwd ?? process.cwd();
139
+ const team = readTeamSync(join(workspace, stateDir), teamId);
140
+ if (team?.captainSessionId !== parentSessionId)
141
+ return () => undefined;
142
+ selection = selectionFromMember(team.members.find(member => member.name === memberName));
143
+ // An old team record has no provider/reasoning snapshot. Its durable
144
+ // Harness descriptor still restores provider/model, so leave it alone.
145
+ if (selection === undefined)
146
+ return () => undefined;
147
+ if (descriptor.agentProvider !== selection.provider || descriptor.agentModel !== selection.model) {
148
+ throw new Error(`agent-teams: saved model route for member "${memberName}" does not match its subagent descriptor`);
149
+ }
150
+ }
151
+ return installModelSelection(childCtx, {
152
+ current: modelSelection(selection),
153
+ assembled: undefined,
154
+ });
155
+ });
156
+ return {
157
+ async withPending(parentSessionId, label, selection, operation) {
158
+ const key = pendingSelectionKey(parentSessionId, label);
159
+ if (pending.has(key)) {
160
+ throw new Error(`member model selection is already pending for "${label}"`);
161
+ }
162
+ pending.set(key, selection);
163
+ try {
164
+ return await operation();
165
+ }
166
+ finally {
167
+ pending.delete(key);
168
+ }
169
+ },
170
+ };
171
+ }
31
172
  /**
32
173
  * The member's system prompt (persona), shadowing the deployment persona for
33
174
  * that child. Self-contained: it replaces the whole persona section.
@@ -65,13 +206,15 @@ export function memberWelcome(team) {
65
206
  * `member.id` with its child session id. On failure nothing is persisted.
66
207
  * @param ctx - the plugin context (injects `subagents`).
67
208
  * @param config - member runtime knobs.
209
+ * @param selections - fresh/cold child model-selection bridge.
210
+ * @param llmSelection - resolved provider/model/reasoning snapshot.
68
211
  * @param captain - the exact live captain agent (the calling agent).
69
212
  * @param team - the team record (read-only here).
70
213
  * @param member - the member draft whose `id` is filled on success.
71
214
  * @param stateDir - configured state directory (for the persona).
72
215
  * @param signal - caller cancellation, forwarded to the start.
73
216
  */
74
- export async function spawnMember(ctx, config, captain, team, member, stateDir, signal) {
217
+ export async function spawnMember(ctx, config, selections, llmSelection, captain, team, member, stateDir, signal) {
75
218
  // Fail loud at the first use: provider registration is a sibling plugin's
76
219
  // effect and may settle after this plugin mounts. Capability checks here
77
220
  // mirror what startContinuable would reject, with an actionable error.
@@ -89,19 +232,23 @@ export async function spawnMember(ctx, config, captain, team, member, stateDir,
89
232
  if (!provider.capabilities.toolFilter) {
90
233
  throw new Error(`agent-teams: provider "${config.provider}" cannot restrict captain-only tools for members`);
91
234
  }
92
- const start = await ctx.subagents.startContinuable({
235
+ const label = `${MEMBER_LABEL_PREFIX}${team.id}:${member.name}`;
236
+ const start = await selections.withPending(captain.id, label, llmSelection, () => (ctx.subagents.startContinuable({
93
237
  provider: config.provider,
94
- label: `agent-teams:${team.id}:${member.name}`,
238
+ label,
95
239
  request: {
96
240
  prompt: [{ type: 'text', text: memberWelcome(team) }],
97
241
  parent: captain,
98
242
  persona: memberPersona(team, member, stateDir),
99
243
  toolFilter: { deny: [...MEMBER_DENIED_TOOLS] },
100
- ...config.model !== undefined ? { agentOptions: { model: config.model } } : {},
244
+ agentOptions: {
245
+ provider: llmSelection.provider,
246
+ model: llmSelection.model,
247
+ },
101
248
  ...config.maxDepth !== undefined ? { maxDepth: config.maxDepth } : {},
102
249
  },
103
250
  signal,
104
- });
251
+ })));
105
252
  member.id = start.childId;
106
253
  }
107
254
  /**
package/lib/state.js CHANGED
@@ -13,6 +13,7 @@
13
13
  * @module dsh-agent-teams/state
14
14
  */
15
15
  import { createHash, randomUUID } from 'node:crypto';
16
+ import { readFileSync } from 'node:fs';
16
17
  import { mkdir, readFile, readdir, rename, rm, writeFile } from 'node:fs/promises';
17
18
  import { join } from 'node:path';
18
19
  /** Mailbox key of the captain. */
@@ -142,6 +143,31 @@ export async function readTeam(stateRoot, teamId) {
142
143
  throw error;
143
144
  }
144
145
  }
146
+ /**
147
+ * Synchronously read one team record while a continuable child is being
148
+ * composed. Harness requires child setup contributions to be synchronous;
149
+ * this narrow boundary lets a cold-resumed member restore its durable model
150
+ * selection before its first request can be published.
151
+ * @param stateRoot - resolved absolute state root directory.
152
+ * @param teamId - the team's sanitized id.
153
+ * @returns the team record, or `undefined` when absent.
154
+ */
155
+ export function readTeamSync(stateRoot, teamId) {
156
+ try {
157
+ const raw = readFileSync(join(stateRoot, teamId, 'team.json'), 'utf8');
158
+ const value = JSON.parse(stripLeadingBom(raw));
159
+ if (!isTeamState(value, teamId)) {
160
+ throw new Error(`invalid AgentTeams state in team "${teamId}"`);
161
+ }
162
+ return value;
163
+ }
164
+ catch (error) {
165
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
166
+ return undefined;
167
+ }
168
+ throw error;
169
+ }
170
+ }
145
171
  /**
146
172
  * Persist one team record (inside the caller's lock).
147
173
  * @param stateRoot - resolved absolute state root directory.
@@ -319,7 +345,9 @@ function isTeamMember(value) {
319
345
  && typeof value['name'] === 'string'
320
346
  && value['name'].trim() !== ''
321
347
  && isOptionalString(value['role'])
348
+ && isOptionalString(value['provider'])
322
349
  && isOptionalString(value['model'])
350
+ && isOptionalString(value['reasoningEffort'])
323
351
  && isFiniteNumber(value['joinedAt'])
324
352
  && (value['status'] === 'idle' || value['status'] === 'working' || value['status'] === 'removed');
325
353
  }