@nanmicoder/dsh-agent-teams 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +9 -4
  2. package/README_ZH.md +5 -1
  3. package/assets/agent-teams/action-celebrating-v2.png +0 -0
  4. package/assets/agent-teams/action-reporting-v2.png +0 -0
  5. package/assets/agent-teams/action-sending-v2.png +0 -0
  6. package/assets/agent-teams/action-sleeping-v2.png +0 -0
  7. package/assets/agent-teams/action-thinking-v2.png +0 -0
  8. package/assets/agent-teams/action-working-v2.png +0 -0
  9. package/assets/agent-teams/member-data-v2.png +0 -0
  10. package/assets/agent-teams/member-designer-v2.png +0 -0
  11. package/assets/agent-teams/member-docs-v2.png +0 -0
  12. package/assets/agent-teams/member-engineer-v2.png +0 -0
  13. package/assets/agent-teams/member-operator-v2.png +0 -0
  14. package/assets/agent-teams/member-qa-v2.png +0 -0
  15. package/assets/agent-teams/member-researcher-v2.png +0 -0
  16. package/assets/agent-teams/member-security-v2.png +0 -0
  17. package/assets/agent-teams/team-lead-v2.png +0 -0
  18. package/assets/ui.png +0 -0
  19. package/lib/client/ActivityPanel.js +226 -23
  20. package/lib/client/activity-model.js +4 -4
  21. package/lib/client/artwork.js +15 -12
  22. package/lib/client/index.js +21 -14
  23. package/lib/client/panel-geometry.js +143 -0
  24. package/lib/client.js +505 -92
  25. package/lib/client.js.map +1 -1
  26. package/lib/command.js +14 -15
  27. package/lib/index.js +9 -6
  28. package/lib/types/client/ActivityPanel.d.ts +8 -6
  29. package/lib/types/client/activity-model.d.ts +4 -4
  30. package/lib/types/client/artwork.d.ts +1 -1
  31. package/lib/types/client/index.d.ts +3 -4
  32. package/lib/types/client/panel-geometry.d.ts +49 -0
  33. package/lib/types/command.d.ts +14 -15
  34. package/package.json +23 -23
  35. package/release-notes/v0.1.10.md +48 -0
  36. package/assets/agent-teams/action-celebrating.png +0 -0
  37. package/assets/agent-teams/action-reporting.png +0 -0
  38. package/assets/agent-teams/action-sending.png +0 -0
  39. package/assets/agent-teams/action-sleeping.png +0 -0
  40. package/assets/agent-teams/action-thinking.png +0 -0
  41. package/assets/agent-teams/action-working.png +0 -0
  42. package/assets/agent-teams/data-analyst.png +0 -0
  43. package/assets/agent-teams/designer.png +0 -0
  44. package/assets/agent-teams/docs-coordinator.png +0 -0
  45. package/assets/agent-teams/engineer.png +0 -0
  46. package/assets/agent-teams/qa-engineer.png +0 -0
  47. package/assets/agent-teams/researcher.png +0 -0
  48. package/assets/agent-teams/security-reviewer.png +0 -0
  49. package/assets/agent-teams/team-lead.png +0 -0
@@ -39,10 +39,10 @@ export declare function usesParallelTaskGrid<T extends RelationshipTask>(tasks:
39
39
  /**
40
40
  * Whether an expanded activity panel still belongs to the current session.
41
41
  *
42
- * The panel is mounted through a body portal, so React does not remount it
43
- * when the conversation route changes. Ownership keeps an expanded panel
44
- * from leaking onto the new-session screen (or another conversation) while
45
- * its local open state is being reset.
42
+ * The panel is mounted in the root-scoped shell overlay, so React does not
43
+ * remount it when the conversation route changes. Ownership keeps an expanded
44
+ * panel from leaking onto the new-session screen (or another conversation)
45
+ * while its local open state is being reset.
46
46
  */
47
47
  export declare function activityPanelExpandedForSession(open: boolean, owner: string | undefined, current: string | undefined): boolean;
48
48
  /**
@@ -7,7 +7,7 @@
7
7
  /** Artwork route prefix served by the plugin host half. */
8
8
  export declare const ART_BASE = "/plugins/dsh-agent-teams/assets/";
9
9
  /** Captain artwork (always the lead whale). */
10
- export declare const LEAD_ART = "/plugins/dsh-agent-teams/assets/team-lead.png";
10
+ export declare const LEAD_ART = "/plugins/dsh-agent-teams/assets/team-lead-v2.png";
11
11
  /** Status action artwork per member activity. */
12
12
  export declare const ACTION_ART: Record<'working' | 'idle' | 'unknown', string>;
13
13
  /**
@@ -3,9 +3,8 @@ import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
3
3
  /** Required services: conversation nodes, slots, and sessions navigation. */
4
4
  export declare const inject: string[];
5
5
  /**
6
- * Mount the floater through a body portal (the web shell has no top-right
7
- * slot) and register the in-conversation team card, whose "activity panel"
8
- * button re-activates the floater via a window event — the recovery path
9
- * for a closed floater or a re-opened session.
6
+ * Register the activity monitor in the shell's additive overlay and the
7
+ * in-conversation team card. The card's activity button re-opens a folded
8
+ * monitor via a window event — the recovery path for an old session.
10
9
  */
11
10
  export declare function apply(ctx: ClientContext): void;
@@ -0,0 +1,49 @@
1
+ /** Pure persisted geometry rules for the AgentTeams shell-overlay panel. */
2
+ export type PanelMode = 'docked' | 'floating';
3
+ export type PanelHeightMode = 'auto' | 'manual';
4
+ export type PanelResizeEdge = 'left' | 'bottom' | 'corner';
5
+ /** User-owned panel state persisted between browser sessions. */
6
+ export interface PanelLayout {
7
+ readonly mode: PanelMode;
8
+ readonly x: number;
9
+ readonly y: number;
10
+ readonly width: number;
11
+ readonly height: number;
12
+ readonly heightMode: PanelHeightMode;
13
+ }
14
+ /** The shell-overlay box and the right edge of its current conversation. */
15
+ export interface PanelBounds {
16
+ readonly width: number;
17
+ readonly height: number;
18
+ readonly anchorRight: number;
19
+ }
20
+ export declare const PANEL_LAYOUT_STORAGE_KEY = "dsh-agent-teams:activity-panel:v1";
21
+ export declare const PANEL_COMPACT_BREAKPOINT = 960;
22
+ export declare const PANEL_DEFAULT_WIDTH = 388;
23
+ export declare const PANEL_DEFAULT_HEIGHT = 640;
24
+ export declare const PANEL_MIN_WIDTH = 320;
25
+ export declare const PANEL_MAX_WIDTH = 640;
26
+ export declare const PANEL_MIN_HEIGHT = 360;
27
+ export declare const PANEL_DOCK_TOP = 64;
28
+ export declare const PANEL_DOCK_RIGHT = 18;
29
+ export declare const PANEL_DOCK_BOTTOM = 48;
30
+ export declare const PANEL_FLOAT_MARGIN = 12;
31
+ export declare const DEFAULT_PANEL_LAYOUT: PanelLayout;
32
+ /** Decode one versioned localStorage value, rejecting partial/corrupt state. */
33
+ export declare function parsePanelLayout(value: string | null): PanelLayout;
34
+ /** Whether the panel should become a simple inset overlay with no gestures. */
35
+ export declare function compactPanelForBounds(bounds: PanelBounds): boolean;
36
+ /** Docked and compact panels always fit content; floating panels may be user-sized. */
37
+ export declare function panelUsesAutoHeight(layout: PanelLayout, bounds: PanelBounds): boolean;
38
+ /** CSS max-height ceiling that keeps an auto-height panel inside its shell. */
39
+ export declare function panelMaximumHeight(layout: PanelLayout, bounds: PanelBounds): number;
40
+ /** Resolve persisted state into a visible rectangle inside the current shell. */
41
+ export declare function resolvePanelGeometry(layout: PanelLayout, bounds: PanelBounds): PanelLayout;
42
+ /** Undock without a visual jump by adopting the panel's resolved rectangle. */
43
+ export declare function floatPanelLayout(geometry: PanelLayout, bounds: PanelBounds): PanelLayout;
44
+ /** Return to the right dock, preserving width and restoring content-fit height. */
45
+ export declare function dockPanelLayout(layout: PanelLayout, bounds: PanelBounds): PanelLayout;
46
+ /** Translate a floating panel and clamp it back into the visible shell. */
47
+ export declare function movePanelLayout(start: PanelLayout, dx: number, dy: number, bounds: PanelBounds): PanelLayout;
48
+ /** Resize while keeping the edge opposite the active handle stationary. */
49
+ export declare function resizePanelLayout(start: PanelLayout, edge: PanelResizeEdge, dx: number, dy: number, bounds: PanelBounds): PanelLayout;
@@ -8,18 +8,16 @@
8
8
  * `/agent-teams` command. The web GUI's slash menu (the Harness
9
9
  * `ui-commands` client) lists it from the host catalog with the input
10
10
  * hint; the argued line is claimed client-side and executed through
11
- * `command.execute` WITHOUT ever reaching the model. The handler queues
12
- * one explicit activation message as an ordinary follow-up turn
13
- * (`agent.followup`), so the captain protocol starts deterministically
14
- * no "use AgentTeams" phrasing required.
11
+ * `command.execute`. The handler replays that exact line as an ordinary
12
+ * user follow-up (`agent.followup`) so it remains visible in the chat; the
13
+ * gesture boundary then adds the deterministic activation message.
15
14
  * 2. **Gesture boundary** — a `agent/pre-step` listener recognizes a leading
16
15
  * `/agent-teams` token in genuine user messages and injects the same
17
16
  * activation message. This covers surfaces with no command adjudication
18
- * (headless CLI, API, pasted text in plain composers) and is a no-op for
19
- * the command path, whose line is consumed before it can become a prompt.
20
- * Mid-sentence mentions stay ordinary prose; only `source.kind === 'user'`
21
- * messages are scanned, so injected or external text cannot forge the
22
- * gesture.
17
+ * (headless CLI, API, pasted text in plain composers) and also handles the
18
+ * exact user line replayed by the host command. Mid-sentence mentions stay
19
+ * ordinary prose; only `source.kind === 'user'` messages are scanned, so
20
+ * injected or external text cannot forge the gesture.
23
21
  *
24
22
  * @module dsh-agent-teams/command
25
23
  */
@@ -30,8 +28,8 @@ export declare const AGENT_TEAMS_COMMAND = "agent-teams";
30
28
  declare module '@deepseek-ai/dsh-llm' {
31
29
  interface MessageSourceMap {
32
30
  /**
33
- * A deterministic `/agent-teams` activation: the goal the user supplied,
34
- * delivered as an ordinary follow-up turn instead of the raw slash line.
31
+ * A deterministic `/agent-teams` activation injected after the visible
32
+ * user-authored slash line.
35
33
  */
36
34
  'agent-teams-command': {
37
35
  readonly kind: 'agent-teams-command';
@@ -55,10 +53,11 @@ export declare function buildActivationDirective(goal: string): string;
55
53
  export declare function invokedAgentTeamsGoal(messages: readonly UserMessage[]): string | undefined;
56
54
  /**
57
55
  * Register the closed-namespace `/agent-teams` host command. The handler
58
- * runs against the receiving agent without sending the slash line to the
59
- * model: it queues the activation message as an ordinary follow-up turn and
60
- * wakes the driver. The registration rides the calling context's fiber, so
61
- * a disposed scope (HMR, plugin removal) unregisters the command.
56
+ * preserves the exact submitted slash line as an ordinary user follow-up;
57
+ * the pre-step gesture boundary injects the activation directive and wakes
58
+ * the captain deterministically. The registration rides the calling
59
+ * context's fiber, so a disposed scope (HMR, plugin removal) unregisters the
60
+ * command.
62
61
  * @param ctx - host context providing the `commands` registry.
63
62
  */
64
63
  export declare function registerAgentTeamsCommand(ctx: Context): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanmicoder/dsh-agent-teams",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "AgentTeams for DeepSeek Harness: multi-agent team collaboration (captain, members, tasks with dependencies, messaging) driven by natural language, with a tree monitor in the web GUI",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -21,7 +21,9 @@
21
21
  "lib",
22
22
  "assets/agent-teams",
23
23
  "assets/readme",
24
+ "assets/ui.png",
24
25
  "cordis.patch.yml",
26
+ "release-notes",
25
27
  "README.md",
26
28
  "README_ZH.md"
27
29
  ],
@@ -64,19 +66,12 @@
64
66
  "inject": [
65
67
  "@deepseek-ai/dsh-client-locale",
66
68
  "@deepseek-ai/dsh-client-runtime",
67
- "@deepseek-ai/dsh-client-ui-conversation"
69
+ "@deepseek-ai/dsh-client-ui-conversation",
70
+ "@deepseek-ai/dsh-client-ui-layout"
68
71
  ],
69
72
  "platform": "web"
70
73
  }
71
74
  },
72
- "dshClient": {
73
- "inject": [
74
- "@deepseek-ai/dsh-client-locale",
75
- "@deepseek-ai/dsh-client-runtime",
76
- "@deepseek-ai/dsh-client-ui-conversation"
77
- ],
78
- "platform": "web"
79
- },
80
75
  "scripts": {
81
76
  "build": "tsc -p tsconfig.json && tsc -p tsconfig.client.json && tsdown",
82
77
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit",
@@ -91,6 +86,7 @@
91
86
  "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
92
87
  "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
93
88
  "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6",
89
+ "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.6",
94
90
  "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
95
91
  "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
96
92
  "@deepseek-ai/dsh-commands": "^0.1.0-rc.6",
@@ -118,6 +114,9 @@
118
114
  "@deepseek-ai/dsh-client-ui-conversation": {
119
115
  "optional": true
120
116
  },
117
+ "@deepseek-ai/dsh-client-ui-layout": {
118
+ "optional": true
119
+ },
121
120
  "@deepseek-ai/dsh-client-ui-primitives": {
122
121
  "optional": true
123
122
  },
@@ -151,19 +150,20 @@
151
150
  },
152
151
  "devDependencies": {
153
152
  "@deepseek-ai/cordis": "^4.0.1",
154
- "@deepseek-ai/dsh-agent": "0.1.0-rc.6",
155
- "@deepseek-ai/dsh-client-locale": "0.1.0-rc.6",
156
- "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.6",
157
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.6",
158
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.6",
159
- "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.6",
160
- "@deepseek-ai/dsh-commands": "0.1.0-rc.6",
161
- "@deepseek-ai/dsh-llm": "0.1.0-rc.6",
162
- "@deepseek-ai/dsh-session": "0.1.0-rc.6",
163
- "@deepseek-ai/dsh-subagent": "0.1.0-rc.6",
164
- "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
165
- "@deepseek-ai/dsh-tools": "0.1.0-rc.6",
166
- "@deepseek-ai/dsh-workspace": "0.1.0-rc.6",
153
+ "@deepseek-ai/dsh-agent": "0.1.0-rc.8",
154
+ "@deepseek-ai/dsh-client-locale": "0.1.0-rc.8",
155
+ "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.8",
156
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.8",
157
+ "@deepseek-ai/dsh-client-ui-layout": "0.1.0-rc.8",
158
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.8",
159
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.8",
160
+ "@deepseek-ai/dsh-commands": "0.1.0-rc.8",
161
+ "@deepseek-ai/dsh-llm": "0.1.0-rc.8",
162
+ "@deepseek-ai/dsh-session": "0.1.0-rc.8",
163
+ "@deepseek-ai/dsh-subagent": "0.1.0-rc.8",
164
+ "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8",
165
+ "@deepseek-ai/dsh-tools": "0.1.0-rc.8",
166
+ "@deepseek-ai/dsh-workspace": "0.1.0-rc.8",
167
167
  "@deepseek-ai/schemastery": "^3.18.1",
168
168
  "@types/node": "^24.13.3",
169
169
  "@types/react": "~18.3.1",
@@ -0,0 +1,48 @@
1
+ # AgentTeams v0.1.10
2
+
3
+ This release makes the AgentTeams activity panel easier to place and size, fixes the `/agent-teams` conversation history, and gives the whale roles a cleaner visual treatment. It is tested against DeepSeek Harness `0.1.0-rc.8`.
4
+
5
+ ## New & Improved
6
+
7
+ - **Movable and resizable activity panel**: switch between docked and floating layouts, drag the floating panel by its header, and resize it from the supported edges and corner. Position, size, and dock mode persist across refreshes.
8
+ - **Content-aware height**: the panel grows with its content and only introduces internal scrolling after reaching the viewport safety limit, avoiding a large empty area for smaller teams.
9
+ - **Cleaner role portraits**: captain and member artwork now uses transparent, uncropped character silhouettes with clearer sizing, lighter state stickers, and a compact unread indicator.
10
+
11
+ ## Fixes
12
+
13
+ - Preserved the exact `/agent-teams ...` input as the normal user message in the main conversation.
14
+ - Kept command context injections below the user message in chronological order.
15
+ - Removed the duplicate slash-command result row while retaining the durable command events.
16
+
17
+ ## Installation
18
+
19
+ ```sh
20
+ dsh plugin --profile web add @nanmicoder/dsh-agent-teams
21
+ ```
22
+
23
+ <details>
24
+ <summary><b>中文版本 / Chinese Version</b></summary>
25
+
26
+ # AgentTeams v0.1.10
27
+
28
+ 本次更新重点改善 AgentTeams 活动面板的摆放与尺寸体验,修复 `/agent-teams` 在主会话中的消息展示,并重新整理鲸鱼角色头像的视觉层级。已基于 DeepSeek Harness `0.1.0-rc.8` 完成验证。
29
+
30
+ ## 新增与改进
31
+
32
+ - **活动面板支持移动和缩放**:可在停靠与浮动布局之间切换;浮动态可以拖动标题栏,并从支持的边缘和右下角调整尺寸。面板位置、尺寸和停靠模式会在刷新后恢复。
33
+ - **高度跟随内容**:面板先根据团队内容自然增长,达到视口安全上限后才启用内部滚动,小团队不再出现大块空白。
34
+ - **角色头像更清晰**:队长和成员改为透明、无裁切的完整角色剪影,统一头像尺寸,减轻状态贴纸,并使用更轻量的未读提示。
35
+
36
+ ## 修复
37
+
38
+ - 将用户输入的完整 `/agent-teams ...` 原文保留为主会话中的普通用户消息。
39
+ - 上下文注入按时间顺序显示在用户消息下方。
40
+ - 移除重复的 slash command 结果行,同时保留持久化命令事件。
41
+
42
+ ## 安装
43
+
44
+ ```sh
45
+ dsh plugin --profile web add @nanmicoder/dsh-agent-teams
46
+ ```
47
+
48
+ </details>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file