@suifei/dsh-ai-team 0.3.13 → 0.3.14
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/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/client.js +46 -0
- package/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.14 — 2026-11-10
|
|
4
|
+
|
|
5
|
+
- 主对话顶部增加「团队动态」:显示正在推进的 Task、owner 和运行中的成员;
|
|
6
|
+
- 点击团队动态里的 Task 直接打开 Thread;没有 Task 时显示“成员已唤醒,正在拆解”;
|
|
7
|
+
- 解决 Human 发消息后主对话没有反馈、只能去任务看板找 Task 的问题。
|
|
8
|
+
|
|
3
9
|
## 0.3.13 — 2026-11-10
|
|
4
10
|
|
|
5
11
|
- 点击成员名字进入成员视图:该成员负责/执行的任务列表 + 直接对话 + 资料入口;
|
package/README.md
CHANGED
|
@@ -84,7 +84,7 @@ dsh --profile ai-team --no-open --port 33271
|
|
|
84
84
|
└─────────────────┴────────────────────────────────────┴─────────────┘
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
-
- **主对话**:Human 的一句话进入 Main stream,Project owner 拆 Task
|
|
87
|
+
- **主对话**:Human 的一句话进入 Main stream,Project owner 拆 Task;顶部「团队动态」直接显示正在推进的 Task 和运行中的成员,点击 Task 可打开 Thread。
|
|
88
88
|
- **看板**:四列;进行中的卡片显示 accountable owner 与执行者;数量只统计 active Task。
|
|
89
89
|
- **态势**:四象限——需要你、团队在做、等待受阻、最近完成。点击条目打开对应 Task 的 Thread。
|
|
90
90
|
- **收件箱**:跨 Project 聚合;失败决策、需要你决定、关注 Task 的完成报告都在这里。
|
package/client.js
CHANGED
|
@@ -188,6 +188,11 @@ window.__ModuleLoader__.load({
|
|
|
188
188
|
memberNoTasksBody: '在项目里创建或指派 Task 后,会出现在这里。',
|
|
189
189
|
taskOwner: '负责人',
|
|
190
190
|
taskAssignee: '执行',
|
|
191
|
+
teamPulseTitle: '团队动态',
|
|
192
|
+
teamPulseCount: '{n} 个 Task 正在推进',
|
|
193
|
+
teamPulseWorking: '成员已接单',
|
|
194
|
+
teamPulseStarting: '成员已唤醒,正在拆解任务…',
|
|
195
|
+
teamPulseAgents: '运行中:{names}',
|
|
191
196
|
newProject: '新建项目',
|
|
192
197
|
addAgent: '添加成员',
|
|
193
198
|
newProjectMock: 'spike:新建项目属于 S-01 流程,M1 之后接入。',
|
|
@@ -483,6 +488,11 @@ window.__ModuleLoader__.load({
|
|
|
483
488
|
memberNoTasksBody: 'Create or assign a Task in the Project and it appears here.',
|
|
484
489
|
taskOwner: 'Owner',
|
|
485
490
|
taskAssignee: 'Assignee',
|
|
491
|
+
teamPulseTitle: 'Team activity',
|
|
492
|
+
teamPulseCount: '{n} Task(s) in motion',
|
|
493
|
+
teamPulseWorking: 'Members picked up the work',
|
|
494
|
+
teamPulseStarting: 'Members are awake and breaking the work down…',
|
|
495
|
+
teamPulseAgents: 'Running: {names}',
|
|
486
496
|
newProject: 'New project',
|
|
487
497
|
addAgent: 'Add member',
|
|
488
498
|
newProjectMock: 'spike: project creation belongs to S-01 and lands after M1.',
|
|
@@ -948,6 +958,18 @@ window.__ModuleLoader__.load({
|
|
|
948
958
|
.at-agentfail { flex: none; color: var(--dsw-alias-state-warn-primary); }
|
|
949
959
|
.at-agentmore { flex: 0 0 auto; width: 28px; height: 28px; border: 0; border-radius: var(--dsw-radius-sm); background: transparent; color: var(--dsw-alias-label-tertiary); font: inherit; font-size: 13px; cursor: pointer; }
|
|
950
960
|
.at-agentmore:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }
|
|
961
|
+
.at-teampulse { width: 100%; max-width: 760px; margin: 4px auto 10px; padding: 10px 12px; border: 1px solid var(--dsw-alias-state-business-primary); border-radius: var(--dsw-radius-md); background: var(--dsw-alias-bg-module-platform); }
|
|
962
|
+
.at-teampulsehead { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
|
|
963
|
+
.at-teampulsetitle { font-size: 12px; font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
964
|
+
.at-teampulsecount { font-size: 11px; color: var(--dsw-alias-state-business-primary); }
|
|
965
|
+
.at-teampulselist { display: flex; flex-direction: column; gap: 4px; }
|
|
966
|
+
.at-teampulsetask { display: flex; align-items: center; gap: 7px; width: 100%; padding: 4px 6px; border: 0; border-radius: var(--dsw-radius-sm); background: transparent; color: var(--dsw-alias-label-primary); font: inherit; text-align: left; cursor: pointer; }
|
|
967
|
+
.at-teampulsetask:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
968
|
+
.at-teampulseno { flex: 0 0 auto; color: var(--dsw-alias-label-tertiary); font-size: 11px; font-variant-numeric: tabular-nums; }
|
|
969
|
+
.at-teampulsetasktitle { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
|
|
970
|
+
.at-teampulseowner { flex: 0 0 auto; color: var(--dsw-alias-label-tertiary); font-size: 11px; }
|
|
971
|
+
.at-teampulsehint { color: var(--dsw-alias-label-tertiary); font-size: 11px; line-height: 16px; }
|
|
972
|
+
.at-teampulseagents { margin-top: 6px; color: var(--dsw-alias-label-tertiary); font-size: 11px; line-height: 16px; }
|
|
951
973
|
.at-memberview { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 18px; }
|
|
952
974
|
.at-memberviewhead { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding-bottom: 12px; border-bottom: 1px solid var(--dsw-alias-border-l1); }
|
|
953
975
|
.at-memberviewid { display: flex; flex-direction: column; min-width: 0; flex: 1 1 180px; }
|
|
@@ -1544,6 +1566,29 @@ window.__ModuleLoader__.load({
|
|
|
1544
1566
|
}, '⋯'));
|
|
1545
1567
|
}
|
|
1546
1568
|
|
|
1569
|
+
function TeamPulse({ t, agents, tasks, onOpen }) {
|
|
1570
|
+
const active = tasks.filter((task) => ['pending', 'in_progress', 'pending_acceptance'].includes(task.status)).slice(-5);
|
|
1571
|
+
const running = agents.filter((agent) => agent.status === 'running');
|
|
1572
|
+
if (active.length === 0 && running.length === 0) return null;
|
|
1573
|
+
return h('section', { className: 'at-teampulse', 'aria-label': t('teamPulseTitle') },
|
|
1574
|
+
h('div', { className: 'at-teampulsehead' },
|
|
1575
|
+
h('span', { className: 'at-teampulsetitle' }, t('teamPulseTitle')),
|
|
1576
|
+
h('span', { className: 'at-teampulsecount' }, active.length ? t('teamPulseCount').replace('{n}', String(active.length)) : t('teamPulseWorking'))),
|
|
1577
|
+
active.length
|
|
1578
|
+
? h('div', { className: 'at-teampulselist' }, active.map((task) => h('button', {
|
|
1579
|
+
key: task.id,
|
|
1580
|
+
className: 'at-teampulsetask',
|
|
1581
|
+
type: 'button',
|
|
1582
|
+
onClick: () => onOpen(task),
|
|
1583
|
+
},
|
|
1584
|
+
h('span', { className: 'at-teampulseno' }, '#' + taskNo(task)),
|
|
1585
|
+
h('span', { className: 'at-teampulsetasktitle' }, task.title),
|
|
1586
|
+
h(StatusPill, { t, status: task.status }),
|
|
1587
|
+
h('span', { className: 'at-teampulseowner' }, task.owner ?? ''))))
|
|
1588
|
+
: h('div', { className: 'at-teampulsehint' }, t('teamPulseStarting')),
|
|
1589
|
+
running.length ? h('div', { className: 'at-teampulseagents' }, t('teamPulseAgents').replace('{names}', running.map((agent) => agent.name).join('、'))) : null);
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1547
1592
|
function MemberView({ t, agent, tasks, onBack, onOpenTask, onOpenChat, onOpenProfile }) {
|
|
1548
1593
|
return h('div', { className: 'at-memberview' },
|
|
1549
1594
|
h('div', { className: 'at-memberviewhead' },
|
|
@@ -2921,6 +2966,7 @@ window.__ModuleLoader__.load({
|
|
|
2921
2966
|
? h(Situation, { t, quadrants, tasks, onItem: openQuadrantItem, onViewAll: viewQuadrant })
|
|
2922
2967
|
: h('div', { className: 'at-stream', role: 'tabpanel', id: 'at-panel-main', 'aria-labelledby': 'at-tab-main' },
|
|
2923
2968
|
h('div', { className: 'at-streaminner', role: 'log', 'aria-live': 'polite', 'aria-label': t('streamAria') },
|
|
2969
|
+
h(TeamPulse, { t, agents: data.agents, tasks, onOpen: openTask }),
|
|
2924
2970
|
data.stream.length
|
|
2925
2971
|
? data.stream.map((item) => h(StreamMessage, {
|
|
2926
2972
|
key: item.id,
|
package/index.js
CHANGED
|
@@ -33,7 +33,7 @@ export const name = 'ai-team';
|
|
|
33
33
|
/** The workbench only makes sense where the Web carrier exists. */
|
|
34
34
|
export const inject = ['webServer', 'permissionPresets', 'sandboxPolicy'];
|
|
35
35
|
|
|
36
|
-
const VERSION = '0.3.
|
|
36
|
+
const VERSION = '0.3.14';
|
|
37
37
|
const PROJECT_ID = 'prj_main';
|
|
38
38
|
const HUMAN_ID = 'mem_human';
|
|
39
39
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@suifei/dsh-ai-team",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "文渊阁 (Wenyuan Pavilion) — AI Team mode for DeepSeek Harness: concurrent projects, owned tasks, threads, inbox and an append-only team ledger",
|
|
6
6
|
"license": "MIT",
|