@deepseek-ai/dsh-experimental-client-ui-agent-team 0.1.6-alpha.1 → 0.1.7-alpha.1
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.i18n.yaml +2 -2
- package/README.md +11 -9
- package/README.zh.md +11 -9
- package/lib/client.js +135 -560
- package/lib/types/client/TeamAction.d.ts +4 -22
- package/lib/types/client/locales.d.ts +0 -26
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +34 -30
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write packages/experimental/client-ui-agent-team/README.md
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: 253c243a680a989988ea65e553c14eff9a699155
|
|
6
|
+
README.zh.md: 143c855b8b8a45a7d3777700aefa6a378401f20d
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
|
|
|
9
9
|
|
|
10
10
|
## Summary
|
|
11
11
|
|
|
12
|
-
This package adds an Agent Teams action to the Web conversation header, where a user can inspect the current roster,
|
|
12
|
+
This package adds an Agent Teams action to the Web conversation header, where a user can inspect the current roster, inspect the shared task board, and navigate into a teammate's conversation. It reads authoritative Team state through the generated `ctx.remote.agentTeams` contribution and keeps ordinary child-history navigation on the stable addressed-subagent path. Choose it through the published experimental Agent Teams bundle. The browser projection does not extend the stable API Proxy, store Team state, or register model-facing input.
|
|
13
13
|
|
|
14
14
|
## Table of Contents
|
|
15
15
|
|
|
@@ -25,15 +25,17 @@ This package adds an Agent Teams action to the Web conversation header, where a
|
|
|
25
25
|
<a id="use-this-package"></a>
|
|
26
26
|
## Use this package
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Enable this package through [`@deepseek-ai/dsh-experimental-agent-team-profile`](../agent-team-profile/README.md), which supplies the Team service, tools, and Web UI together. The Web Client loader mounts the `/client` export; the root Host export is inert, and the package has no user configuration fields.
|
|
29
29
|
|
|
30
30
|
### Inspect and navigate the roster
|
|
31
31
|
|
|
32
|
-
Opening the panel calls `agentTeams/view`. Roster rows show durable names,
|
|
32
|
+
Opening the panel calls `agentTeams/view`. Roster rows show durable names, turn availability, model, and diagnostics. Provisioning and running members use the shared ongoing loader, inactive members use idle, and failed members use error. Selecting a healthy teammate opens the ordinary `{ parentSessionId, childSessionId, mode: 'continuable' }` address from its Lead and roster identity without refreshing or checking the parent catalog. The Host validates the parent, child, and mode when history opens. History and later human prompts continue through the stable addressed-subagent conversation path; this package adds no Team-specific address field.
|
|
33
33
|
|
|
34
|
-
###
|
|
34
|
+
### Inspect the task board
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Ready pending tasks use idle, blocked pending tasks use warning, in-progress tasks use ongoing, and completed tasks use done.
|
|
37
|
+
|
|
38
|
+
The read-only task board shows task identity, owner, blockers, readiness, advisory write scopes, and overlap warnings. Team agents create and update tasks through their tools; the panel provides no task mutation controls.
|
|
37
39
|
|
|
38
40
|
-----
|
|
39
41
|
|
|
@@ -45,7 +47,7 @@ The task board shows task identity, owner, blockers, readiness, advisory write s
|
|
|
45
47
|
|
|
46
48
|
The Client export mounts the generated `ctx.remote.agentTeams` contribution from [`@deepseek-ai/dsh-experimental-agent-team/remote`](../agent-team/README.md), then registers its locale dictionaries and one conversation-header slot through Cordis effects. Disposing the plugin fiber removes both registrations.
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
The panel renders outside the conversation container and stays within the viewport. Opening moves focus into the panel; Escape or Close returns focus to its trigger. Clicking outside or moving focus outside the panel and trigger closes it without moving focus back. Opening or refreshing the panel reads the complete Team view. Overlapping refreshes keep the newest response, and responses for a previous conversation are ignored.
|
|
49
51
|
|
|
50
52
|
| File | Role |
|
|
51
53
|
|---|---|
|
|
@@ -61,7 +63,7 @@ Starting a create or update invalidates older refreshes. Success reloads the com
|
|
|
61
63
|
<a id="further-exploration"></a>
|
|
62
64
|
## Further Exploration
|
|
63
65
|
|
|
64
|
-
- [Agent Teams
|
|
66
|
+
- [Agent Teams bundle](../agent-team-profile/README.md) — the published opt-in bundle that mounts this Client plugin.
|
|
65
67
|
- [Agent Teams service](../agent-team/README.md) — authoritative roster, task, and Remote behavior.
|
|
66
68
|
- [Conversation UI](../../client/ui-conversation/README.md) — the stable header slot and addressed-subagent navigation surface.
|
|
67
69
|
- [Experimental packages](../README.md) — incubation status and publication policy.
|
|
@@ -71,7 +73,7 @@ Starting a create or update invalidates older refreshes. Success reloads the com
|
|
|
71
73
|
<a id="model-experience"></a>
|
|
72
74
|
## Model Experience
|
|
73
75
|
|
|
74
|
-
None, as this browser projection
|
|
76
|
+
None, as this browser projection registers no model-facing input.
|
|
75
77
|
|
|
76
78
|
#### KV Cache effect
|
|
77
79
|
|
|
@@ -81,7 +83,7 @@ No direct effect; the Team tools and ordinary conversation submission own any la
|
|
|
81
83
|
|
|
82
84
|
<a id="known-limitations-and-deferred-work"></a>
|
|
83
85
|
|
|
84
|
-
- **Snapshot refresh** — the panel refreshes on open
|
|
86
|
+
- **Snapshot refresh** — the panel refreshes on open and explicit refresh; it has no live event subscription or mailbox timeline.
|
|
85
87
|
- **Ordinary child continuation** — a human message sent after navigation uses the stable addressed-subagent prompt path, not the Team peer mailbox.
|
|
86
88
|
- **No lifecycle or workspace controls** — the panel cannot spawn, rename, delete, or interrupt teammates, and write scopes remain advisory metadata.
|
|
87
89
|
|
package/README.zh.md
CHANGED
|
@@ -9,7 +9,7 @@ kind: "package-reference"
|
|
|
9
9
|
|
|
10
10
|
## 概述
|
|
11
11
|
|
|
12
|
-
本包向 Web 会话页头添加 Agent Teams action,让用户检查当前 roster
|
|
12
|
+
本包向 Web 会话页头添加 Agent Teams action,让用户检查当前 roster、查看共享任务板并导航到 teammate 会话。它通过生成的 `ctx.remote.agentTeams` contribution 读取权威 Team 状态,并让普通 child history 导航继续使用稳定的 addressed-subagent 路径。通过公开发布的实验性 Agent Teams bundle 选择本包。这个浏览器 projection 不扩展稳定 API Proxy、不存储 Team 状态,也不注册面向模型的输入。
|
|
13
13
|
|
|
14
14
|
## 目录
|
|
15
15
|
|
|
@@ -25,15 +25,17 @@ kind: "package-reference"
|
|
|
25
25
|
<a id="use-this-package"></a>
|
|
26
26
|
## 使用本包
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
通过 [`@deepseek-ai/dsh-experimental-agent-team-profile`](../agent-team-profile/README.zh.md) 启用本包。这个组合包同时提供团队服务、工具与 Web 界面。Web Client loader 挂载 `/client` export;root Host export 不执行行为,本包也没有用户配置字段。
|
|
29
29
|
|
|
30
30
|
### 检查并导航 roster
|
|
31
31
|
|
|
32
|
-
打开 panel 会调用 `agentTeams/view`。Roster row 展示持久 name
|
|
32
|
+
打开 panel 会调用 `agentTeams/view`。Roster row 展示持久 name、轮次可用状态、model 与 diagnostics。provisioning 和 running 成员使用共享 ongoing loading,inactive 成员使用 idle 灰点,failed 成员使用 error 红点。选择健康 teammate 时,系统直接根据其 Lead 与 roster 身份打开普通的 `{ parentSessionId, childSessionId, mode: 'continuable' }` address,不刷新或检查 parent catalog。Host 在打开历史时校验 parent、child 与 mode。History 与后续人类提示词继续使用稳定 addressed-subagent 会话路径;本包不会添加 Team 专用 address 字段。
|
|
33
33
|
|
|
34
|
-
###
|
|
34
|
+
### 查看任务板
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
可开始的 pending 任务使用 idle 灰点,被依赖阻塞的 pending 任务使用 warning 橙点,in-progress 任务使用 ongoing loading,completed 任务使用 done 绿点。
|
|
37
|
+
|
|
38
|
+
只读任务板展示任务标识、负责人、依赖、就绪状态、提示性写入范围与重叠警告。Team agent 通过工具创建和更新任务;面板不提供任务修改控件。
|
|
37
39
|
|
|
38
40
|
-----
|
|
39
41
|
|
|
@@ -45,7 +47,7 @@ kind: "package-reference"
|
|
|
45
47
|
|
|
46
48
|
Client export 挂载来自 [`@deepseek-ai/dsh-experimental-agent-team/remote`](../agent-team/README.zh.md) 的生成的 `ctx.remote.agentTeams` contribution,然后通过 Cordis effect 注册 locale dictionary 与一个 conversation-header slot。Dispose plugin fiber 会移除这两项 registration。
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
面板渲染在会话容器外,并保持在视口范围内。打开时焦点移入面板;按 Escape 或选择关闭按钮时,焦点返回触发按钮。点击外部或将焦点移出面板与触发按钮时,面板关闭,但不会将焦点移回。打开或刷新面板会读取完整 Team view。并行刷新只保留最新响应,属于上一个会话的响应会被忽略。
|
|
49
51
|
|
|
50
52
|
| 文件 | 职责 |
|
|
51
53
|
|---|---|
|
|
@@ -61,7 +63,7 @@ Client export 挂载来自 [`@deepseek-ai/dsh-experimental-agent-team/remote`](.
|
|
|
61
63
|
<a id="further-exploration"></a>
|
|
62
64
|
## 进一步探索
|
|
63
65
|
|
|
64
|
-
- [Agent Teams
|
|
66
|
+
- [Agent Teams bundle](../agent-team-profile/README.zh.md)——挂载本 Client plugin 的公开 opt-in bundle。
|
|
65
67
|
- [Agent Teams service](../agent-team/README.zh.md)——权威 roster、task 与 Remote 行为。
|
|
66
68
|
- [会话 UI](../../client/ui-conversation/README.zh.md)——稳定 header slot 与 addressed-subagent 导航表层。
|
|
67
69
|
- [实验性包](../README.zh.md)——孵化状态与发布规则。
|
|
@@ -71,7 +73,7 @@ Client export 挂载来自 [`@deepseek-ai/dsh-experimental-agent-team/remote`](.
|
|
|
71
73
|
<a id="model-experience"></a>
|
|
72
74
|
## 模型体验
|
|
73
75
|
|
|
74
|
-
无直接影响,因为该浏览器 projection
|
|
76
|
+
无直接影响,因为该浏览器 projection 不注册面向模型的输入。
|
|
75
77
|
|
|
76
78
|
#### KV Cache 影响
|
|
77
79
|
|
|
@@ -81,7 +83,7 @@ Client export 挂载来自 [`@deepseek-ai/dsh-experimental-agent-team/remote`](.
|
|
|
81
83
|
|
|
82
84
|
<a id="known-limitations-and-deferred-work"></a>
|
|
83
85
|
|
|
84
|
-
- **Snapshot refresh**——panel
|
|
86
|
+
- **Snapshot refresh**——panel 会在打开和显式 refresh 时刷新;它没有实时事件订阅或 mailbox timeline。
|
|
85
87
|
- **普通 child continuation**——导航后发送的人类消息使用稳定 addressed-subagent 提示词路径,而不是 Team peer mailbox。
|
|
86
88
|
- **没有 lifecycle 或 workspace control**——panel 不能 spawn、rename、delete 或 interrupt teammate,write scope 仍只是提示性 metadata。
|
|
87
89
|
|
package/lib/client.js
CHANGED
|
@@ -6,6 +6,7 @@ window.__ModuleLoader__.load({
|
|
|
6
6
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
let react = require("react");
|
|
9
|
+
let react_dom = require("react-dom");
|
|
9
10
|
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
10
11
|
//#region ../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js
|
|
11
12
|
var _a$1;
|
|
@@ -4046,95 +4047,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4046
4047
|
}
|
|
4047
4048
|
//#endregion
|
|
4048
4049
|
//#region ../agent-team/lib/typert.remote-client.js
|
|
4049
|
-
|
|
4050
|
-
const
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
"blockedBy": array(intersection(string(), unknown())).readonly().optional(),
|
|
4054
|
-
"writeScopes": array(string()).readonly().optional()
|
|
4055
|
-
});
|
|
4056
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_result$schema = union([object({
|
|
4057
|
-
"ok": literal(true).readonly(),
|
|
4058
|
-
"value": object({
|
|
4059
|
-
"id": intersection(string(), unknown()).readonly(),
|
|
4060
|
-
"revision": number().readonly(),
|
|
4061
|
-
"subject": string().readonly(),
|
|
4062
|
-
"description": string().readonly(),
|
|
4063
|
-
"status": union([
|
|
4064
|
-
literal("pending"),
|
|
4065
|
-
literal("in_progress"),
|
|
4066
|
-
literal("completed"),
|
|
4067
|
-
literal("deleted")
|
|
4068
|
-
]).readonly(),
|
|
4069
|
-
"blockedBy": array(intersection(string(), unknown())).readonly(),
|
|
4070
|
-
"writeScopes": array(string()).readonly(),
|
|
4071
|
-
"ownerName": string().readonly().optional(),
|
|
4072
|
-
"ready": boolean().readonly(),
|
|
4073
|
-
"writeScopeWarnings": array(string()).readonly()
|
|
4074
|
-
}).readonly()
|
|
4075
|
-
}), object({
|
|
4076
|
-
"ok": literal(false).readonly(),
|
|
4077
|
-
"error": object({
|
|
4078
|
-
"code": union([literal("team-task-conflict"), literal("team-rejected")]).readonly(),
|
|
4079
|
-
"message": string().readonly()
|
|
4080
|
-
}).readonly()
|
|
4081
|
-
})]);
|
|
4082
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_0$schema = intersection(string(), unknown());
|
|
4083
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_1$schema = object({
|
|
4084
|
-
"taskId": intersection(string(), unknown()).readonly(),
|
|
4085
|
-
"expectedRevision": number().readonly(),
|
|
4086
|
-
"action": union([
|
|
4087
|
-
literal("complete"),
|
|
4088
|
-
literal("edit"),
|
|
4089
|
-
literal("claim"),
|
|
4090
|
-
literal("release"),
|
|
4091
|
-
literal("set_dependencies"),
|
|
4092
|
-
literal("reopen"),
|
|
4093
|
-
literal("reassign"),
|
|
4094
|
-
literal("delete")
|
|
4095
|
-
]).readonly(),
|
|
4096
|
-
"subject": string().readonly().optional(),
|
|
4097
|
-
"description": string().readonly().optional(),
|
|
4098
|
-
"blockedBy": array(intersection(string(), unknown())).readonly().optional(),
|
|
4099
|
-
"writeScopes": array(string()).readonly().optional(),
|
|
4100
|
-
"owner": string().readonly().optional()
|
|
4101
|
-
});
|
|
4102
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_result$schema = union([object({
|
|
4103
|
-
"ok": literal(true).readonly(),
|
|
4104
|
-
"value": object({
|
|
4105
|
-
"id": intersection(string(), unknown()).readonly(),
|
|
4106
|
-
"revision": number().readonly(),
|
|
4107
|
-
"subject": string().readonly(),
|
|
4108
|
-
"description": string().readonly(),
|
|
4109
|
-
"status": union([
|
|
4110
|
-
literal("pending"),
|
|
4111
|
-
literal("in_progress"),
|
|
4112
|
-
literal("completed"),
|
|
4113
|
-
literal("deleted")
|
|
4114
|
-
]).readonly(),
|
|
4115
|
-
"blockedBy": array(intersection(string(), unknown())).readonly(),
|
|
4116
|
-
"writeScopes": array(string()).readonly(),
|
|
4117
|
-
"ownerName": string().readonly().optional(),
|
|
4118
|
-
"ready": boolean().readonly(),
|
|
4119
|
-
"writeScopeWarnings": array(string()).readonly()
|
|
4120
|
-
}).readonly()
|
|
4121
|
-
}), object({
|
|
4122
|
-
"ok": literal(false).readonly(),
|
|
4123
|
-
"error": object({
|
|
4124
|
-
"code": union([literal("team-task-conflict"), literal("team-rejected")]).readonly(),
|
|
4125
|
-
"message": string().readonly()
|
|
4126
|
-
}).readonly()
|
|
4127
|
-
})]);
|
|
4128
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema = intersection(string(), unknown());
|
|
4129
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema = object({
|
|
4050
|
+
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema$value;
|
|
4051
|
+
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema$value ??= intersection(string(), unknown());
|
|
4052
|
+
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema$value;
|
|
4053
|
+
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema$value ??= object({
|
|
4130
4054
|
"members": array(object({
|
|
4131
4055
|
"id": intersection(string(), unknown()).readonly(),
|
|
4132
4056
|
"name": string().readonly(),
|
|
4133
4057
|
"role": union([literal("lead"), literal("teammate")]).readonly(),
|
|
4134
4058
|
"status": union([
|
|
4135
|
-
literal("running"),
|
|
4136
4059
|
literal("failed"),
|
|
4137
|
-
literal("
|
|
4060
|
+
literal("running"),
|
|
4138
4061
|
literal("inactive"),
|
|
4139
4062
|
literal("provisioning")
|
|
4140
4063
|
]).readonly(),
|
|
@@ -4150,9 +4073,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4150
4073
|
"subject": string().readonly(),
|
|
4151
4074
|
"description": string().readonly(),
|
|
4152
4075
|
"status": union([
|
|
4076
|
+
literal("completed"),
|
|
4153
4077
|
literal("pending"),
|
|
4154
4078
|
literal("in_progress"),
|
|
4155
|
-
literal("completed"),
|
|
4156
4079
|
literal("deleted")
|
|
4157
4080
|
]).readonly(),
|
|
4158
4081
|
"blockedBy": array(intersection(string(), unknown())).readonly(),
|
|
@@ -4164,129 +4087,43 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4164
4087
|
});
|
|
4165
4088
|
const TYPERT_REMOTE = {
|
|
4166
4089
|
package: "@deepseek-ai/dsh-experimental-agent-team",
|
|
4167
|
-
descriptors: [
|
|
4168
|
-
|
|
4169
|
-
|
|
4170
|
-
|
|
4171
|
-
|
|
4172
|
-
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
wire: "agentId"
|
|
4178
|
-
},
|
|
4179
|
-
parameters: [{
|
|
4180
|
-
name: "agent",
|
|
4181
|
-
wire: "agentId",
|
|
4182
|
-
source: "lookup",
|
|
4183
|
-
lookup: "agent",
|
|
4184
|
-
codec: {
|
|
4185
|
-
mode: "strict",
|
|
4186
|
-
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4187
|
-
schema: _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_0$schema
|
|
4188
|
-
}
|
|
4189
|
-
}, {
|
|
4190
|
-
name: "request",
|
|
4191
|
-
wire: "request",
|
|
4192
|
-
source: "json",
|
|
4193
|
-
codec: {
|
|
4194
|
-
mode: "strict",
|
|
4195
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#CreateTeamTaskRequest",
|
|
4196
|
-
schema: _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_1$schema
|
|
4197
|
-
}
|
|
4198
|
-
}],
|
|
4199
|
-
result: {
|
|
4200
|
-
mode: "strict",
|
|
4201
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#TeamTaskMutationResult",
|
|
4202
|
-
schema: _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_result$schema
|
|
4203
|
-
},
|
|
4204
|
-
sourceLocation: {
|
|
4205
|
-
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4206
|
-
"line": 257,
|
|
4207
|
-
"column": 3
|
|
4208
|
-
}
|
|
4090
|
+
descriptors: [{
|
|
4091
|
+
id: "@deepseek-ai/dsh-experimental-agent-team#agentTeams/view",
|
|
4092
|
+
service: "agentTeams",
|
|
4093
|
+
namespace: "agentTeams",
|
|
4094
|
+
method: "view",
|
|
4095
|
+
implementation: "remoteView",
|
|
4096
|
+
invocation: { kind: "direct" },
|
|
4097
|
+
scope: {
|
|
4098
|
+
context: "agent",
|
|
4099
|
+
wire: "agentId"
|
|
4209
4100
|
},
|
|
4210
|
-
{
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
|
|
4216
|
-
invocation: { kind: "direct" },
|
|
4217
|
-
scope: {
|
|
4218
|
-
context: "agent",
|
|
4219
|
-
wire: "agentId"
|
|
4220
|
-
},
|
|
4221
|
-
parameters: [{
|
|
4222
|
-
name: "agent",
|
|
4223
|
-
wire: "agentId",
|
|
4224
|
-
source: "lookup",
|
|
4225
|
-
lookup: "agent",
|
|
4226
|
-
codec: {
|
|
4227
|
-
mode: "strict",
|
|
4228
|
-
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4229
|
-
schema: _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_0$schema
|
|
4230
|
-
}
|
|
4231
|
-
}, {
|
|
4232
|
-
name: "request",
|
|
4233
|
-
wire: "request",
|
|
4234
|
-
source: "json",
|
|
4235
|
-
codec: {
|
|
4236
|
-
mode: "strict",
|
|
4237
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#UpdateTeamTaskRequest",
|
|
4238
|
-
schema: _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_1$schema
|
|
4239
|
-
}
|
|
4240
|
-
}],
|
|
4241
|
-
result: {
|
|
4101
|
+
parameters: [{
|
|
4102
|
+
name: "agent",
|
|
4103
|
+
wire: "agentId",
|
|
4104
|
+
source: "lookup",
|
|
4105
|
+
lookup: "agent",
|
|
4106
|
+
codec: {
|
|
4242
4107
|
mode: "strict",
|
|
4243
|
-
typeSymbol: "@deepseek-ai/dsh-
|
|
4244
|
-
|
|
4245
|
-
},
|
|
4246
|
-
sourceLocation: {
|
|
4247
|
-
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4248
|
-
"line": 268,
|
|
4249
|
-
"column": 3
|
|
4108
|
+
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4109
|
+
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema
|
|
4250
4110
|
}
|
|
4111
|
+
}],
|
|
4112
|
+
result: {
|
|
4113
|
+
mode: "strict",
|
|
4114
|
+
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#TeamView",
|
|
4115
|
+
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema
|
|
4251
4116
|
},
|
|
4252
|
-
{
|
|
4253
|
-
|
|
4254
|
-
|
|
4255
|
-
|
|
4256
|
-
method: "view",
|
|
4257
|
-
implementation: "remoteView",
|
|
4258
|
-
invocation: { kind: "direct" },
|
|
4259
|
-
scope: {
|
|
4260
|
-
context: "agent",
|
|
4261
|
-
wire: "agentId"
|
|
4262
|
-
},
|
|
4263
|
-
parameters: [{
|
|
4264
|
-
name: "agent",
|
|
4265
|
-
wire: "agentId",
|
|
4266
|
-
source: "lookup",
|
|
4267
|
-
lookup: "agent",
|
|
4268
|
-
codec: {
|
|
4269
|
-
mode: "strict",
|
|
4270
|
-
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4271
|
-
schema: _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema
|
|
4272
|
-
}
|
|
4273
|
-
}],
|
|
4274
|
-
result: {
|
|
4275
|
-
mode: "strict",
|
|
4276
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#TeamView",
|
|
4277
|
-
schema: _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema
|
|
4278
|
-
},
|
|
4279
|
-
sourceLocation: {
|
|
4280
|
-
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4281
|
-
"line": 243,
|
|
4282
|
-
"column": 3
|
|
4283
|
-
}
|
|
4117
|
+
sourceLocation: {
|
|
4118
|
+
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4119
|
+
"line": 242,
|
|
4120
|
+
"column": 3
|
|
4284
4121
|
}
|
|
4285
|
-
]
|
|
4122
|
+
}]
|
|
4286
4123
|
};
|
|
4287
4124
|
//#endregion
|
|
4288
4125
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/experimental/client-ui-agent-team/src/client/TeamAction.module.css.mjs
|
|
4289
|
-
const css = ".VoX2oq_root{position:relative}.VoX2oq_trigger,.VoX2oq_iconButton
|
|
4126
|
+
const css = ".VoX2oq_root{position:relative}.VoX2oq_trigger,.VoX2oq_iconButton{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px}.VoX2oq_trigger{align-items:center;gap:5px;min-height:28px;padding:3px 7px;font-size:12px;display:inline-flex}.VoX2oq_trigger:hover,.VoX2oq_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.VoX2oq_count{background:var(--dsw-alias-fill-l2);font-variant-numeric:tabular-nums;text-align:center;border-radius:8px;min-width:16px}.VoX2oq_panel{--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);z-index:110;box-sizing:border-box;background:var(--dsw-specific-menu);width:min(560px,100vw - 32px);max-height:min(680px,100vh - 32px);backdrop-filter:var(--dsw-menu-backdrop-filter);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);box-shadow:var(--dsw-elevation-prominent);border:0;border-radius:12px;padding:10px;position:fixed;overflow:auto}.VoX2oq_toolbar,.VoX2oq_taskTitle{align-items:center;gap:8px;display:flex}.VoX2oq_toolbar{min-height:28px}.VoX2oq_spacer{flex:1}.VoX2oq_iconButton{justify-content:center;align-items:center;width:26px;height:26px;display:inline-flex}.VoX2oq_panel h3{color:var(--dsw-alias-label-secondary);margin:12px 0 6px;font-size:12px;font-weight:500}.VoX2oq_roster{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.VoX2oq_member{border:.5px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border-radius:8px;align-items:flex-start;gap:8px;padding:8px;display:flex}.VoX2oq_member:disabled{cursor:default}.VoX2oq_memberText{flex-direction:column;min-width:0;display:flex}.VoX2oq_memberText small,.VoX2oq_meta{color:var(--dsw-alias-label-tertiary);font-size:11px}.VoX2oq_diagnostic,.VoX2oq_error,.VoX2oq_warning{color:var(--dsw-alias-state-error-primary)}.VoX2oq_tasks{flex-direction:column;gap:7px;display:flex}.VoX2oq_task{border:.5px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:9px;padding:9px}.VoX2oq_taskState{color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;margin-left:auto;font-size:11px;display:inline-flex}.VoX2oq_task p{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;margin:5px 0;font-size:12px}.VoX2oq_meta{flex-wrap:wrap;gap:4px 10px;display:flex}.VoX2oq_notice,.VoX2oq_error{align-items:center;gap:6px;padding:9px;font-size:12px;display:flex}";
|
|
4290
4127
|
const tagId = "@deepseek-ai/dsh-experimental-client-ui-agent-team/TeamAction.module.css";
|
|
4291
4128
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
4292
4129
|
const tag = document.createElement("style");
|
|
@@ -4299,8 +4136,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4299
4136
|
"count": "VoX2oq_count",
|
|
4300
4137
|
"diagnostic": "VoX2oq_diagnostic",
|
|
4301
4138
|
"error": "VoX2oq_error",
|
|
4302
|
-
"form": "VoX2oq_form",
|
|
4303
|
-
"formActions": "VoX2oq_formActions",
|
|
4304
4139
|
"iconButton": "VoX2oq_iconButton",
|
|
4305
4140
|
"member": "VoX2oq_member",
|
|
4306
4141
|
"memberText": "VoX2oq_memberText",
|
|
@@ -4309,11 +4144,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4309
4144
|
"panel": "VoX2oq_panel",
|
|
4310
4145
|
"root": "VoX2oq_root",
|
|
4311
4146
|
"roster": "VoX2oq_roster",
|
|
4312
|
-
"sectionTitle": "VoX2oq_sectionTitle",
|
|
4313
|
-
"smallButton": "VoX2oq_smallButton",
|
|
4314
4147
|
"spacer": "VoX2oq_spacer",
|
|
4315
4148
|
"task": "VoX2oq_task",
|
|
4316
|
-
"
|
|
4149
|
+
"taskState": "VoX2oq_taskState",
|
|
4317
4150
|
"taskTitle": "VoX2oq_taskTitle",
|
|
4318
4151
|
"tasks": "VoX2oq_tasks",
|
|
4319
4152
|
"toolbar": "VoX2oq_toolbar",
|
|
@@ -4322,22 +4155,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4322
4155
|
};
|
|
4323
4156
|
//#endregion
|
|
4324
4157
|
//#region lib/types/client/TeamAction.js
|
|
4325
|
-
const EMPTY_DRAFT = {
|
|
4326
|
-
subject: "",
|
|
4327
|
-
description: "",
|
|
4328
|
-
blockers: "",
|
|
4329
|
-
scopes: ""
|
|
4330
|
-
};
|
|
4331
|
-
function items(value) {
|
|
4332
|
-
return [...new Set(value.split(",").map((item) => item.trim()).filter(Boolean))];
|
|
4333
|
-
}
|
|
4334
|
-
function taskIds(value) {
|
|
4335
|
-
return items(value);
|
|
4336
|
-
}
|
|
4337
|
-
/**
|
|
4338
|
-
* One failure line for either carrier: a Remote failure, or a Team business
|
|
4339
|
-
* rejection whose codes stay local to this seam and never ride the wire.
|
|
4340
|
-
*/
|
|
4341
4158
|
function failureText(error) {
|
|
4342
4159
|
return `${error.message} (${error.code})`;
|
|
4343
4160
|
}
|
|
@@ -4353,23 +4170,46 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4353
4170
|
function memberStatusKey(status) {
|
|
4354
4171
|
switch (status) {
|
|
4355
4172
|
case "running": return "memberStatus.running";
|
|
4356
|
-
case "idle": return "memberStatus.idle";
|
|
4357
4173
|
case "inactive": return "memberStatus.inactive";
|
|
4358
4174
|
case "provisioning": return "memberStatus.provisioning";
|
|
4359
4175
|
case "failed": return "memberStatus.failed";
|
|
4360
4176
|
}
|
|
4361
4177
|
}
|
|
4362
|
-
|
|
4363
|
-
|
|
4178
|
+
function memberDotState(status) {
|
|
4179
|
+
switch (status) {
|
|
4180
|
+
case "running":
|
|
4181
|
+
case "provisioning": return "ongoing";
|
|
4182
|
+
case "inactive": return "idle";
|
|
4183
|
+
case "failed": return "error";
|
|
4184
|
+
}
|
|
4185
|
+
}
|
|
4186
|
+
function taskDotState(task) {
|
|
4187
|
+
switch (task.status) {
|
|
4188
|
+
case "pending": return task.ready ? "idle" : "warning";
|
|
4189
|
+
case "in_progress": return "ongoing";
|
|
4190
|
+
case "completed": return "done";
|
|
4191
|
+
/* v8 ignore next -- Team views omit deleted task tombstones. */
|
|
4192
|
+
case "deleted": return "idle";
|
|
4193
|
+
}
|
|
4194
|
+
}
|
|
4195
|
+
/** Render the Team roster and read-only task board. */
|
|
4196
|
+
function TeamAction({ sessionId, load, openTeammate, t }) {
|
|
4364
4197
|
const [open, setOpen] = (0, react.useState)(false);
|
|
4365
4198
|
const [loading, setLoading] = (0, react.useState)(false);
|
|
4366
4199
|
const [view, setView] = (0, react.useState)(null);
|
|
4367
4200
|
const [error, setError] = (0, react.useState)(null);
|
|
4368
|
-
const
|
|
4369
|
-
const
|
|
4370
|
-
const
|
|
4371
|
-
const
|
|
4372
|
-
|
|
4201
|
+
const rootRef = (0, react.useRef)(null);
|
|
4202
|
+
const triggerRef = (0, react.useRef)(null);
|
|
4203
|
+
const panelRef = (0, react.useRef)(null);
|
|
4204
|
+
const position = (0, _deepseek_ai_dsh_client_ui_primitives.useAnchoredPosition)({
|
|
4205
|
+
open,
|
|
4206
|
+
anchorRef: triggerRef,
|
|
4207
|
+
panelRef,
|
|
4208
|
+
gap: 5,
|
|
4209
|
+
margin: 16
|
|
4210
|
+
});
|
|
4211
|
+
const positioned = position !== null;
|
|
4212
|
+
(0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(rootRef, open, setOpen, panelRef);
|
|
4373
4213
|
const sessionRef = (0, react.useRef)(sessionId);
|
|
4374
4214
|
const refreshGeneration = (0, react.useRef)(0);
|
|
4375
4215
|
sessionRef.current = sessionId;
|
|
@@ -4379,124 +4219,45 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4379
4219
|
setLoading(false);
|
|
4380
4220
|
setView(null);
|
|
4381
4221
|
setError(null);
|
|
4382
|
-
setCreating(false);
|
|
4383
|
-
setCreateDraft(EMPTY_DRAFT);
|
|
4384
|
-
setEditing(null);
|
|
4385
|
-
setEditDraft(EMPTY_DRAFT);
|
|
4386
|
-
setPendingTasks(/* @__PURE__ */ new Set());
|
|
4387
4222
|
}, [sessionId]);
|
|
4223
|
+
(0, react.useLayoutEffect)(() => {
|
|
4224
|
+
if (open && positioned) panelRef.current?.focus();
|
|
4225
|
+
}, [open, positioned]);
|
|
4226
|
+
const close = () => {
|
|
4227
|
+
setOpen(false);
|
|
4228
|
+
triggerRef.current?.focus();
|
|
4229
|
+
};
|
|
4388
4230
|
const refresh = (0, react.useCallback)(async () => {
|
|
4389
4231
|
const requestedSession = sessionId;
|
|
4390
4232
|
const generation = ++refreshGeneration.current;
|
|
4391
4233
|
setLoading(true);
|
|
4392
4234
|
const result = await load(requestedSession);
|
|
4393
|
-
if (sessionRef.current !== requestedSession || refreshGeneration.current !== generation) return
|
|
4235
|
+
if (sessionRef.current !== requestedSession || refreshGeneration.current !== generation) return;
|
|
4394
4236
|
setLoading(false);
|
|
4395
4237
|
if (result.ok) {
|
|
4396
4238
|
setView(result.value);
|
|
4397
4239
|
setError(null);
|
|
4398
|
-
|
|
4399
|
-
} else {
|
|
4400
|
-
setError(failureText(result.error));
|
|
4401
|
-
return false;
|
|
4402
|
-
}
|
|
4240
|
+
} else setError(failureText(result.error));
|
|
4403
4241
|
}, [load, sessionId]);
|
|
4404
|
-
const invalidateRefresh = (0, react.useCallback)(() => {
|
|
4405
|
-
refreshGeneration.current += 1;
|
|
4406
|
-
setLoading(false);
|
|
4407
|
-
}, []);
|
|
4408
|
-
const settleTask = (0, react.useCallback)(async (taskId, operation) => {
|
|
4409
|
-
const requestedSession = sessionId;
|
|
4410
|
-
invalidateRefresh();
|
|
4411
|
-
setPendingTasks((current) => new Set(current).add(taskId));
|
|
4412
|
-
try {
|
|
4413
|
-
const result = await operation();
|
|
4414
|
-
if (sessionRef.current !== requestedSession) return void 0;
|
|
4415
|
-
if (!result.ok) {
|
|
4416
|
-
setError(failureText(result.error));
|
|
4417
|
-
return;
|
|
4418
|
-
}
|
|
4419
|
-
if (!result.value.ok) {
|
|
4420
|
-
if (result.value.error.code === "team-task-conflict") {
|
|
4421
|
-
const reloaded = await refresh();
|
|
4422
|
-
if (sessionRef.current !== requestedSession) return void 0;
|
|
4423
|
-
if (reloaded) setError(t("conflict"));
|
|
4424
|
-
} else setError(failureText(result.value.error));
|
|
4425
|
-
return;
|
|
4426
|
-
}
|
|
4427
|
-
const task = result.value.value;
|
|
4428
|
-
setError(null);
|
|
4429
|
-
await refresh();
|
|
4430
|
-
if (sessionRef.current !== requestedSession) return void 0;
|
|
4431
|
-
return task;
|
|
4432
|
-
} finally {
|
|
4433
|
-
if (sessionRef.current === requestedSession) setPendingTasks((current) => {
|
|
4434
|
-
const next = new Set(current);
|
|
4435
|
-
next.delete(taskId);
|
|
4436
|
-
return next;
|
|
4437
|
-
});
|
|
4438
|
-
}
|
|
4439
|
-
}, [
|
|
4440
|
-
invalidateRefresh,
|
|
4441
|
-
refresh,
|
|
4442
|
-
sessionId,
|
|
4443
|
-
t
|
|
4444
|
-
]);
|
|
4445
|
-
const submitCreate = async () => {
|
|
4446
|
-
const subject = createDraft.subject.trim();
|
|
4447
|
-
const description = createDraft.description.trim();
|
|
4448
|
-
/* v8 ignore next -- TaskForm disables Save while either normalized field is empty. */
|
|
4449
|
-
if (subject === "" || description === "") return;
|
|
4450
|
-
if (await settleTask("create", () => createTask(sessionId, {
|
|
4451
|
-
subject,
|
|
4452
|
-
description,
|
|
4453
|
-
blockedBy: taskIds(createDraft.blockers),
|
|
4454
|
-
writeScopes: items(createDraft.scopes)
|
|
4455
|
-
})) === void 0) return;
|
|
4456
|
-
setCreateDraft(EMPTY_DRAFT);
|
|
4457
|
-
setCreating(false);
|
|
4458
|
-
};
|
|
4459
|
-
const startEdit = (task) => {
|
|
4460
|
-
setEditing(task.id);
|
|
4461
|
-
setEditDraft({
|
|
4462
|
-
subject: task.subject,
|
|
4463
|
-
description: task.description,
|
|
4464
|
-
blockers: task.blockedBy.join(", "),
|
|
4465
|
-
scopes: task.writeScopes.join(", ")
|
|
4466
|
-
});
|
|
4467
|
-
};
|
|
4468
|
-
const submitEdit = async (task) => {
|
|
4469
|
-
const requestedSession = sessionId;
|
|
4470
|
-
const edited = await settleTask(task.id, () => updateTask(requestedSession, {
|
|
4471
|
-
taskId: task.id,
|
|
4472
|
-
expectedRevision: task.revision,
|
|
4473
|
-
action: "edit",
|
|
4474
|
-
subject: editDraft.subject.trim(),
|
|
4475
|
-
description: editDraft.description.trim(),
|
|
4476
|
-
writeScopes: items(editDraft.scopes)
|
|
4477
|
-
}));
|
|
4478
|
-
if (edited === void 0) return;
|
|
4479
|
-
const blockedBy = taskIds(editDraft.blockers);
|
|
4480
|
-
if (blockedBy.length === edited.blockedBy.length && blockedBy.every((blocker, index) => blocker === edited.blockedBy[index])) {
|
|
4481
|
-
setEditing(null);
|
|
4482
|
-
return;
|
|
4483
|
-
}
|
|
4484
|
-
if (await settleTask(task.id, () => updateTask(requestedSession, {
|
|
4485
|
-
taskId: task.id,
|
|
4486
|
-
expectedRevision: edited.revision,
|
|
4487
|
-
action: "set_dependencies",
|
|
4488
|
-
blockedBy
|
|
4489
|
-
})) === void 0) return;
|
|
4490
|
-
setEditing(null);
|
|
4491
|
-
};
|
|
4492
4242
|
const teammates = view?.members.filter((member) => member.role === "teammate") ?? [];
|
|
4493
|
-
const assignable = view?.members.filter((member) => member.status !== "failed" && member.status !== "provisioning") ?? [];
|
|
4494
4243
|
return (0, react_jsx_runtime.jsxs)("div", {
|
|
4244
|
+
ref: rootRef,
|
|
4495
4245
|
className: TeamAction_module_css_default.root,
|
|
4496
4246
|
"data-team-action": true,
|
|
4247
|
+
onKeyDown: (event) => {
|
|
4248
|
+
if (event.key !== "Escape" || !open) return;
|
|
4249
|
+
event.preventDefault();
|
|
4250
|
+
close();
|
|
4251
|
+
},
|
|
4252
|
+
onBlur: (event) => {
|
|
4253
|
+
const target = event.relatedTarget;
|
|
4254
|
+
if (target instanceof Node && !event.currentTarget.contains(target) && !panelRef.current?.contains(target)) setOpen(false);
|
|
4255
|
+
},
|
|
4497
4256
|
children: [(0, react_jsx_runtime.jsxs)("button", {
|
|
4498
4257
|
type: "button",
|
|
4258
|
+
ref: triggerRef,
|
|
4499
4259
|
className: TeamAction_module_css_default.trigger,
|
|
4260
|
+
"aria-haspopup": "dialog",
|
|
4500
4261
|
"aria-expanded": open,
|
|
4501
4262
|
onClick: () => {
|
|
4502
4263
|
const next = !open;
|
|
@@ -4504,23 +4265,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4504
4265
|
if (next) refresh();
|
|
4505
4266
|
},
|
|
4506
4267
|
children: [
|
|
4507
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
4268
|
+
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconUserOutlineRegular, { size: 14 }),
|
|
4508
4269
|
(0, react_jsx_runtime.jsx)("span", { children: t("trigger") }),
|
|
4509
4270
|
teammates.length > 0 && (0, react_jsx_runtime.jsx)("span", {
|
|
4510
4271
|
className: TeamAction_module_css_default.count,
|
|
4511
4272
|
children: teammates.length
|
|
4512
4273
|
})
|
|
4513
4274
|
]
|
|
4514
|
-
}), open && (0, react_jsx_runtime.jsxs)("div", {
|
|
4275
|
+
}), open && (0, react_dom.createPortal)((0, react_jsx_runtime.jsxs)("div", {
|
|
4276
|
+
ref: panelRef,
|
|
4515
4277
|
className: TeamAction_module_css_default.panel,
|
|
4278
|
+
style: position ?? {
|
|
4279
|
+
visibility: "hidden",
|
|
4280
|
+
left: 0,
|
|
4281
|
+
top: 0
|
|
4282
|
+
},
|
|
4516
4283
|
role: "dialog",
|
|
4284
|
+
tabIndex: -1,
|
|
4517
4285
|
"aria-label": t("trigger"),
|
|
4286
|
+
"data-team-panel": true,
|
|
4518
4287
|
children: [
|
|
4519
4288
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
4520
4289
|
className: TeamAction_module_css_default.toolbar,
|
|
4521
4290
|
children: [
|
|
4522
4291
|
(0, react_jsx_runtime.jsx)("strong", { children: t("trigger") }),
|
|
4523
4292
|
(0, react_jsx_runtime.jsx)("span", { className: TeamAction_module_css_default.spacer }),
|
|
4293
|
+
loading && view !== null && (0, react_jsx_runtime.jsx)("span", {
|
|
4294
|
+
role: "status",
|
|
4295
|
+
"aria-label": t("loading"),
|
|
4296
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" })
|
|
4297
|
+
}),
|
|
4524
4298
|
(0, react_jsx_runtime.jsx)("button", {
|
|
4525
4299
|
type: "button",
|
|
4526
4300
|
className: TeamAction_module_css_default.iconButton,
|
|
@@ -4528,27 +4302,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4528
4302
|
onClick: () => {
|
|
4529
4303
|
refresh();
|
|
4530
4304
|
},
|
|
4531
|
-
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.
|
|
4305
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 })
|
|
4532
4306
|
}),
|
|
4533
4307
|
(0, react_jsx_runtime.jsx)("button", {
|
|
4534
4308
|
type: "button",
|
|
4535
4309
|
className: TeamAction_module_css_default.iconButton,
|
|
4536
4310
|
"aria-label": t("close"),
|
|
4537
|
-
onClick:
|
|
4538
|
-
|
|
4539
|
-
},
|
|
4540
|
-
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutline16, { size: 14 })
|
|
4311
|
+
onClick: close,
|
|
4312
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, { size: 14 })
|
|
4541
4313
|
})
|
|
4542
4314
|
]
|
|
4543
4315
|
}),
|
|
4544
|
-
error !== null && (0, react_jsx_runtime.
|
|
4316
|
+
error !== null && (0, react_jsx_runtime.jsxs)("div", {
|
|
4545
4317
|
className: TeamAction_module_css_default.error,
|
|
4546
4318
|
role: "alert",
|
|
4547
|
-
children: error
|
|
4319
|
+
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }), error]
|
|
4548
4320
|
}),
|
|
4549
|
-
loading && view === null && (0, react_jsx_runtime.
|
|
4321
|
+
loading && view === null && (0, react_jsx_runtime.jsxs)("div", {
|
|
4550
4322
|
className: TeamAction_module_css_default.notice,
|
|
4551
|
-
|
|
4323
|
+
role: "status",
|
|
4324
|
+
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }), t("loading")]
|
|
4552
4325
|
}),
|
|
4553
4326
|
view !== null && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsxs)("section", { children: [(0, react_jsx_runtime.jsx)("h3", { children: t("roster") }), (0, react_jsx_runtime.jsx)("div", {
|
|
4554
4327
|
className: TeamAction_module_css_default.roster,
|
|
@@ -4558,11 +4331,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4558
4331
|
disabled: member.role === "lead" || member.status === "failed" || member.status === "provisioning",
|
|
4559
4332
|
title: member.role === "teammate" ? t("open") : void 0,
|
|
4560
4333
|
onClick: () => {
|
|
4561
|
-
|
|
4334
|
+
try {
|
|
4335
|
+
openTeammate(sessionId, member);
|
|
4336
|
+
} catch (reason) {
|
|
4562
4337
|
setError(String(reason));
|
|
4563
|
-
}
|
|
4338
|
+
}
|
|
4564
4339
|
},
|
|
4565
|
-
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: member.status
|
|
4340
|
+
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: memberDotState(member.status) }), (0, react_jsx_runtime.jsxs)("span", {
|
|
4566
4341
|
className: TeamAction_module_css_default.memberText,
|
|
4567
4342
|
children: [
|
|
4568
4343
|
(0, react_jsx_runtime.jsx)("span", { children: member.name }),
|
|
@@ -4575,62 +4350,33 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4575
4350
|
})]
|
|
4576
4351
|
}, member.id))
|
|
4577
4352
|
})] }), (0, react_jsx_runtime.jsxs)("section", { children: [
|
|
4578
|
-
(0, react_jsx_runtime.
|
|
4579
|
-
|
|
4580
|
-
children: [(0, react_jsx_runtime.jsx)("h3", { children: t("tasks") }), (0, react_jsx_runtime.jsxs)("button", {
|
|
4581
|
-
type: "button",
|
|
4582
|
-
className: TeamAction_module_css_default.smallButton,
|
|
4583
|
-
onClick: () => {
|
|
4584
|
-
setCreating(true);
|
|
4585
|
-
},
|
|
4586
|
-
children: [
|
|
4587
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 13 }),
|
|
4588
|
-
" ",
|
|
4589
|
-
t("create")
|
|
4590
|
-
]
|
|
4591
|
-
})]
|
|
4592
|
-
}),
|
|
4593
|
-
creating && (0, react_jsx_runtime.jsx)(TaskForm, {
|
|
4594
|
-
draft: createDraft,
|
|
4595
|
-
setDraft: setCreateDraft,
|
|
4596
|
-
pending: pendingTasks.has("create"),
|
|
4597
|
-
onSave: () => {
|
|
4598
|
-
submitCreate();
|
|
4599
|
-
},
|
|
4600
|
-
onCancel: () => {
|
|
4601
|
-
setCreating(false);
|
|
4602
|
-
},
|
|
4603
|
-
t
|
|
4604
|
-
}),
|
|
4605
|
-
view.tasks.length === 0 && !creating && (0, react_jsx_runtime.jsx)("div", {
|
|
4353
|
+
(0, react_jsx_runtime.jsx)("h3", { children: t("tasks") }),
|
|
4354
|
+
view.tasks.length === 0 && (0, react_jsx_runtime.jsx)("div", {
|
|
4606
4355
|
className: TeamAction_module_css_default.notice,
|
|
4607
4356
|
children: t("empty")
|
|
4608
4357
|
}),
|
|
4609
4358
|
(0, react_jsx_runtime.jsx)("div", {
|
|
4610
4359
|
className: TeamAction_module_css_default.tasks,
|
|
4611
|
-
children: view.tasks.map((task) =>
|
|
4612
|
-
draft: editDraft,
|
|
4613
|
-
setDraft: setEditDraft,
|
|
4614
|
-
pending: pendingTasks.has(task.id),
|
|
4615
|
-
onSave: () => {
|
|
4616
|
-
submitEdit(task);
|
|
4617
|
-
},
|
|
4618
|
-
onCancel: () => {
|
|
4619
|
-
setEditing(null);
|
|
4620
|
-
},
|
|
4621
|
-
t
|
|
4622
|
-
}, task.id) : (0, react_jsx_runtime.jsxs)("article", {
|
|
4360
|
+
children: view.tasks.map((task) => (0, react_jsx_runtime.jsxs)("article", {
|
|
4623
4361
|
className: TeamAction_module_css_default.task,
|
|
4624
4362
|
children: [
|
|
4625
4363
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
4626
4364
|
className: TeamAction_module_css_default.taskTitle,
|
|
4627
|
-
children: [(0, react_jsx_runtime.jsx)("strong", { children: task.subject }), (0, react_jsx_runtime.
|
|
4365
|
+
children: [(0, react_jsx_runtime.jsx)("strong", { children: task.subject }), (0, react_jsx_runtime.jsxs)("span", {
|
|
4366
|
+
className: TeamAction_module_css_default.taskState,
|
|
4367
|
+
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: taskDotState(task) }), (0, react_jsx_runtime.jsx)("span", { children: t(statusKey(task.status)) })]
|
|
4368
|
+
})]
|
|
4628
4369
|
}),
|
|
4629
4370
|
(0, react_jsx_runtime.jsx)("p", { children: task.description }),
|
|
4630
4371
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
4631
4372
|
className: TeamAction_module_css_default.meta,
|
|
4632
4373
|
children: [
|
|
4633
4374
|
(0, react_jsx_runtime.jsx)("span", { children: task.id }),
|
|
4375
|
+
(0, react_jsx_runtime.jsxs)("span", { children: [
|
|
4376
|
+
t("owner"),
|
|
4377
|
+
": ",
|
|
4378
|
+
task.ownerName ?? t("unowned")
|
|
4379
|
+
] }),
|
|
4634
4380
|
task.status === "pending" && (0, react_jsx_runtime.jsx)("span", { children: task.ready ? t("ready") : t("blocked") }),
|
|
4635
4381
|
task.blockedBy.length > 0 && (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
4636
4382
|
t("blockedBy"),
|
|
@@ -4647,149 +4393,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4647
4393
|
children: warning
|
|
4648
4394
|
}, warning))
|
|
4649
4395
|
]
|
|
4650
|
-
}),
|
|
4651
|
-
(0, react_jsx_runtime.jsxs)("div", {
|
|
4652
|
-
className: TeamAction_module_css_default.taskActions,
|
|
4653
|
-
children: [
|
|
4654
|
-
(0, react_jsx_runtime.jsxs)("label", { children: [t("owner"), (0, react_jsx_runtime.jsxs)("select", {
|
|
4655
|
-
value: task.ownerName ?? "",
|
|
4656
|
-
disabled: pendingTasks.has(task.id) || task.status === "completed",
|
|
4657
|
-
onChange: (event) => {
|
|
4658
|
-
const owner = event.target.value;
|
|
4659
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4660
|
-
taskId: task.id,
|
|
4661
|
-
expectedRevision: task.revision,
|
|
4662
|
-
action: "reassign",
|
|
4663
|
-
...owner === "" ? {} : { owner }
|
|
4664
|
-
}));
|
|
4665
|
-
},
|
|
4666
|
-
children: [(0, react_jsx_runtime.jsx)("option", {
|
|
4667
|
-
value: "",
|
|
4668
|
-
children: t("unowned")
|
|
4669
|
-
}), assignable.map((member) => (0, react_jsx_runtime.jsx)("option", {
|
|
4670
|
-
value: member.name,
|
|
4671
|
-
children: member.name
|
|
4672
|
-
}, member.id))]
|
|
4673
|
-
})] }),
|
|
4674
|
-
(0, react_jsx_runtime.jsxs)("button", {
|
|
4675
|
-
type: "button",
|
|
4676
|
-
onClick: () => {
|
|
4677
|
-
startEdit(task);
|
|
4678
|
-
},
|
|
4679
|
-
disabled: pendingTasks.has(task.id),
|
|
4680
|
-
children: [
|
|
4681
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, { size: 13 }),
|
|
4682
|
-
" ",
|
|
4683
|
-
t("edit")
|
|
4684
|
-
]
|
|
4685
|
-
}),
|
|
4686
|
-
task.status === "in_progress" && (0, react_jsx_runtime.jsxs)("button", {
|
|
4687
|
-
type: "button",
|
|
4688
|
-
disabled: pendingTasks.has(task.id),
|
|
4689
|
-
onClick: () => {
|
|
4690
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4691
|
-
taskId: task.id,
|
|
4692
|
-
expectedRevision: task.revision,
|
|
4693
|
-
action: "complete"
|
|
4694
|
-
}));
|
|
4695
|
-
},
|
|
4696
|
-
children: [
|
|
4697
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline14, {}),
|
|
4698
|
-
" ",
|
|
4699
|
-
t("complete")
|
|
4700
|
-
]
|
|
4701
|
-
}),
|
|
4702
|
-
task.status === "completed" && (0, react_jsx_runtime.jsx)("button", {
|
|
4703
|
-
type: "button",
|
|
4704
|
-
disabled: pendingTasks.has(task.id),
|
|
4705
|
-
onClick: () => {
|
|
4706
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4707
|
-
taskId: task.id,
|
|
4708
|
-
expectedRevision: task.revision,
|
|
4709
|
-
action: "reopen"
|
|
4710
|
-
}));
|
|
4711
|
-
},
|
|
4712
|
-
children: t("reopen")
|
|
4713
|
-
}),
|
|
4714
|
-
(0, react_jsx_runtime.jsxs)("button", {
|
|
4715
|
-
type: "button",
|
|
4716
|
-
disabled: pendingTasks.has(task.id),
|
|
4717
|
-
onClick: () => {
|
|
4718
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4719
|
-
taskId: task.id,
|
|
4720
|
-
expectedRevision: task.revision,
|
|
4721
|
-
action: "delete"
|
|
4722
|
-
}));
|
|
4723
|
-
},
|
|
4724
|
-
children: [
|
|
4725
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutline16, { size: 13 }),
|
|
4726
|
-
" ",
|
|
4727
|
-
t("delete")
|
|
4728
|
-
]
|
|
4729
|
-
})
|
|
4730
|
-
]
|
|
4731
4396
|
})
|
|
4732
4397
|
]
|
|
4733
4398
|
}, task.id))
|
|
4734
4399
|
})
|
|
4735
4400
|
] })] })
|
|
4736
4401
|
]
|
|
4737
|
-
})]
|
|
4738
|
-
});
|
|
4739
|
-
}
|
|
4740
|
-
function TaskForm({ draft, setDraft, pending, onSave, onCancel, t }) {
|
|
4741
|
-
const field = (key, value) => {
|
|
4742
|
-
setDraft({
|
|
4743
|
-
...draft,
|
|
4744
|
-
[key]: value
|
|
4745
|
-
});
|
|
4746
|
-
};
|
|
4747
|
-
return (0, react_jsx_runtime.jsxs)("div", {
|
|
4748
|
-
className: TeamAction_module_css_default.form,
|
|
4749
|
-
children: [
|
|
4750
|
-
(0, react_jsx_runtime.jsx)("input", {
|
|
4751
|
-
value: draft.subject,
|
|
4752
|
-
placeholder: t("subject"),
|
|
4753
|
-
onChange: (event) => {
|
|
4754
|
-
field("subject", event.target.value);
|
|
4755
|
-
}
|
|
4756
|
-
}),
|
|
4757
|
-
(0, react_jsx_runtime.jsx)("textarea", {
|
|
4758
|
-
value: draft.description,
|
|
4759
|
-
placeholder: t("description"),
|
|
4760
|
-
onChange: (event) => {
|
|
4761
|
-
field("description", event.target.value);
|
|
4762
|
-
}
|
|
4763
|
-
}),
|
|
4764
|
-
(0, react_jsx_runtime.jsx)("input", {
|
|
4765
|
-
value: draft.blockers,
|
|
4766
|
-
placeholder: t("blockers"),
|
|
4767
|
-
onChange: (event) => {
|
|
4768
|
-
field("blockers", event.target.value);
|
|
4769
|
-
}
|
|
4770
|
-
}),
|
|
4771
|
-
(0, react_jsx_runtime.jsx)("input", {
|
|
4772
|
-
value: draft.scopes,
|
|
4773
|
-
placeholder: t("scopes"),
|
|
4774
|
-
onChange: (event) => {
|
|
4775
|
-
field("scopes", event.target.value);
|
|
4776
|
-
}
|
|
4777
|
-
}),
|
|
4778
|
-
(0, react_jsx_runtime.jsxs)("div", {
|
|
4779
|
-
className: TeamAction_module_css_default.formActions,
|
|
4780
|
-
children: [(0, react_jsx_runtime.jsx)("button", {
|
|
4781
|
-
type: "button",
|
|
4782
|
-
disabled: pending || draft.subject.trim() === "" || draft.description.trim() === "",
|
|
4783
|
-
onClick: onSave,
|
|
4784
|
-
children: t("save")
|
|
4785
|
-
}), (0, react_jsx_runtime.jsx)("button", {
|
|
4786
|
-
type: "button",
|
|
4787
|
-
disabled: pending,
|
|
4788
|
-
onClick: onCancel,
|
|
4789
|
-
children: t("cancel")
|
|
4790
|
-
})]
|
|
4791
|
-
})
|
|
4792
|
-
]
|
|
4402
|
+
}), document.body)]
|
|
4793
4403
|
});
|
|
4794
4404
|
}
|
|
4795
4405
|
//#endregion
|
|
@@ -4808,26 +4418,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4808
4418
|
tasks: "共享任务",
|
|
4809
4419
|
model: "模型",
|
|
4810
4420
|
open: "打开 teammate 会话",
|
|
4811
|
-
create: "新建任务",
|
|
4812
|
-
subject: "任务标题",
|
|
4813
|
-
description: "任务描述",
|
|
4814
|
-
blockers: "依赖任务 id(逗号分隔)",
|
|
4815
|
-
scopes: "写入范围(逗号分隔)",
|
|
4816
|
-
save: "保存",
|
|
4817
|
-
cancel: "取消",
|
|
4818
|
-
edit: "编辑",
|
|
4819
|
-
complete: "完成",
|
|
4820
|
-
reopen: "重开",
|
|
4821
|
-
delete: "删除",
|
|
4822
4421
|
owner: "Owner",
|
|
4823
4422
|
unowned: "未分配",
|
|
4824
4423
|
blockedBy: "依赖",
|
|
4825
4424
|
writeScopes: "写入范围",
|
|
4826
4425
|
ready: "可开始",
|
|
4827
4426
|
blocked: "被依赖阻塞",
|
|
4828
|
-
conflict: "任务状态已变化,已重新加载;请检查后重试。",
|
|
4829
4427
|
"memberStatus.running": "运行中",
|
|
4830
|
-
"memberStatus.idle": "空闲",
|
|
4831
4428
|
"memberStatus.inactive": "未运行",
|
|
4832
4429
|
"memberStatus.provisioning": "准备中",
|
|
4833
4430
|
"memberStatus.failed": "失败",
|
|
@@ -4846,26 +4443,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4846
4443
|
tasks: "Shared tasks",
|
|
4847
4444
|
model: "Model",
|
|
4848
4445
|
open: "Open teammate conversation",
|
|
4849
|
-
create: "New task",
|
|
4850
|
-
subject: "Task subject",
|
|
4851
|
-
description: "Task description",
|
|
4852
|
-
blockers: "Blocking task ids (comma separated)",
|
|
4853
|
-
scopes: "Write scopes (comma separated)",
|
|
4854
|
-
save: "Save",
|
|
4855
|
-
cancel: "Cancel",
|
|
4856
|
-
edit: "Edit",
|
|
4857
|
-
complete: "Complete",
|
|
4858
|
-
reopen: "Reopen",
|
|
4859
|
-
delete: "Delete",
|
|
4860
4446
|
owner: "Owner",
|
|
4861
4447
|
unowned: "Unowned",
|
|
4862
4448
|
blockedBy: "Blocked by",
|
|
4863
4449
|
writeScopes: "Write scopes",
|
|
4864
4450
|
ready: "Ready",
|
|
4865
4451
|
blocked: "Blocked by dependencies",
|
|
4866
|
-
conflict: "Task state changed and was reloaded. Review it before retrying.",
|
|
4867
4452
|
"memberStatus.running": "Running",
|
|
4868
|
-
"memberStatus.idle": "Idle",
|
|
4869
4453
|
"memberStatus.inactive": "Inactive",
|
|
4870
4454
|
"memberStatus.provisioning": "Provisioning",
|
|
4871
4455
|
"memberStatus.failed": "Failed",
|
|
@@ -4879,6 +4463,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4879
4463
|
/** Required browser services for RPC, navigation, slots, and localized copy. */
|
|
4880
4464
|
const inject = [
|
|
4881
4465
|
"sessions",
|
|
4466
|
+
"uiWorkspace",
|
|
4882
4467
|
"remote",
|
|
4883
4468
|
"slots",
|
|
4884
4469
|
"locale"
|
|
@@ -4896,22 +4481,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4896
4481
|
async load(sessionId) {
|
|
4897
4482
|
return await ctx.remote.agentTeams.view(leadSessionId(sessionId));
|
|
4898
4483
|
},
|
|
4899
|
-
|
|
4900
|
-
return await ctx.remote.agentTeams.createTask(leadSessionId(sessionId), input);
|
|
4901
|
-
},
|
|
4902
|
-
async updateTask(sessionId, input) {
|
|
4903
|
-
const { owner, ...rest } = input;
|
|
4904
|
-
return await ctx.remote.agentTeams.updateTask(leadSessionId(sessionId), {
|
|
4905
|
-
...rest,
|
|
4906
|
-
...owner === void 0 ? {} : { owner }
|
|
4907
|
-
});
|
|
4908
|
-
},
|
|
4909
|
-
async openTeammate(sessionId, member) {
|
|
4484
|
+
openTeammate(sessionId, member) {
|
|
4910
4485
|
if (member.role !== "teammate") return;
|
|
4911
4486
|
const parentSessionId = leadSessionId(sessionId);
|
|
4912
|
-
|
|
4913
|
-
|
|
4914
|
-
sessions.openSubagent({
|
|
4487
|
+
if ((sessions.retainInfo(sessionId).getSnapshot().retainedBy.mainView ?? 0) === 0) return;
|
|
4488
|
+
ctx.uiWorkspace.openSession({
|
|
4915
4489
|
parentSessionId,
|
|
4916
4490
|
childSessionId: member.id,
|
|
4917
4491
|
mode: "continuable"
|
|
@@ -4936,6 +4510,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4936
4510
|
const disposeRemote = await ctx.remote.$mount(contribution);
|
|
4937
4511
|
const ui = ctx.inject([
|
|
4938
4512
|
"sessions",
|
|
4513
|
+
"uiWorkspace",
|
|
4939
4514
|
"remote.agentTeams",
|
|
4940
4515
|
"slots",
|
|
4941
4516
|
"locale"
|
|
@@ -1,35 +1,17 @@
|
|
|
1
1
|
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
2
|
-
import type { TeamMemberView as TeamRosterMember,
|
|
2
|
+
import type { TeamMemberView as TeamRosterMember, TeamView } from '@deepseek-ai/dsh-experimental-agent-team/client';
|
|
3
3
|
import type { RemoteResult } from '@deepseek-ai/dsh-api-remotes/client';
|
|
4
4
|
import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
5
5
|
import { NS } from './locales.ts';
|
|
6
6
|
/** Generated Remote result consumed directly by the Team UI. */
|
|
7
7
|
export type TeamActionResult<T> = RemoteResult<T>;
|
|
8
|
-
/** Generated Remote result whose business value preserves Team task rejections. */
|
|
9
|
-
export type TeamTaskActionResult = RemoteResult<TeamTaskMutationResult>;
|
|
10
8
|
/** Business actions injected by the browser plugin. */
|
|
11
9
|
export interface TeamActionInjected {
|
|
12
10
|
load: (sessionId: SessionId) => Promise<TeamActionResult<TeamView>>;
|
|
13
|
-
|
|
14
|
-
subject: string;
|
|
15
|
-
description: string;
|
|
16
|
-
blockedBy: TeamTaskId[];
|
|
17
|
-
writeScopes: string[];
|
|
18
|
-
}) => Promise<TeamTaskActionResult>;
|
|
19
|
-
updateTask: (sessionId: SessionId, input: {
|
|
20
|
-
taskId: TeamTaskId;
|
|
21
|
-
expectedRevision: number;
|
|
22
|
-
action: TeamTaskAction;
|
|
23
|
-
subject?: string;
|
|
24
|
-
description?: string;
|
|
25
|
-
blockedBy?: TeamTaskId[];
|
|
26
|
-
writeScopes?: string[];
|
|
27
|
-
owner?: string;
|
|
28
|
-
}) => Promise<TeamTaskActionResult>;
|
|
29
|
-
openTeammate: (sessionId: SessionId, member: TeamRosterMember) => Promise<void>;
|
|
11
|
+
openTeammate: (sessionId: SessionId, member: TeamRosterMember) => void;
|
|
30
12
|
}
|
|
31
13
|
/** Full props of the Team conversation-header action. */
|
|
32
14
|
export type TeamActionProps = PropsRuntime<'conversation.session.header.actions'> & TeamActionInjected & PropsLocale<typeof NS>;
|
|
33
|
-
/** Render the
|
|
34
|
-
export declare function TeamAction({ sessionId, load,
|
|
15
|
+
/** Render the Team roster and read-only task board. */
|
|
16
|
+
export declare function TeamAction({ sessionId, load, openTeammate, t, }: TeamActionProps): import("react").JSX.Element;
|
|
35
17
|
//# sourceMappingURL=TeamAction.d.ts.map
|
|
@@ -12,26 +12,13 @@ export declare const zh: {
|
|
|
12
12
|
tasks: string;
|
|
13
13
|
model: string;
|
|
14
14
|
open: string;
|
|
15
|
-
create: string;
|
|
16
|
-
subject: string;
|
|
17
|
-
description: string;
|
|
18
|
-
blockers: string;
|
|
19
|
-
scopes: string;
|
|
20
|
-
save: string;
|
|
21
|
-
cancel: string;
|
|
22
|
-
edit: string;
|
|
23
|
-
complete: string;
|
|
24
|
-
reopen: string;
|
|
25
|
-
delete: string;
|
|
26
15
|
owner: string;
|
|
27
16
|
unowned: string;
|
|
28
17
|
blockedBy: string;
|
|
29
18
|
writeScopes: string;
|
|
30
19
|
ready: string;
|
|
31
20
|
blocked: string;
|
|
32
|
-
conflict: string;
|
|
33
21
|
'memberStatus.running': string;
|
|
34
|
-
'memberStatus.idle': string;
|
|
35
22
|
'memberStatus.inactive': string;
|
|
36
23
|
'memberStatus.provisioning': string;
|
|
37
24
|
'memberStatus.failed': string;
|
|
@@ -52,26 +39,13 @@ export declare const en: {
|
|
|
52
39
|
tasks: string;
|
|
53
40
|
model: string;
|
|
54
41
|
open: string;
|
|
55
|
-
create: string;
|
|
56
|
-
subject: string;
|
|
57
|
-
description: string;
|
|
58
|
-
blockers: string;
|
|
59
|
-
scopes: string;
|
|
60
|
-
save: string;
|
|
61
|
-
cancel: string;
|
|
62
|
-
edit: string;
|
|
63
|
-
complete: string;
|
|
64
|
-
reopen: string;
|
|
65
|
-
delete: string;
|
|
66
42
|
owner: string;
|
|
67
43
|
unowned: string;
|
|
68
44
|
blockedBy: string;
|
|
69
45
|
writeScopes: string;
|
|
70
46
|
ready: string;
|
|
71
47
|
blocked: string;
|
|
72
|
-
conflict: string;
|
|
73
48
|
'memberStatus.running': string;
|
|
74
|
-
'memberStatus.idle': string;
|
|
75
49
|
'memberStatus.inactive': string;
|
|
76
50
|
'memberStatus.provisioning': string;
|
|
77
51
|
'memberStatus.failed': string;
|
package/locale/en.json
ADDED
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-experimental-client-ui-agent-team",
|
|
3
3
|
"description": "Web Agent Teams roster, task board, and teammate navigation",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7-alpha.1",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"types": "./lib/types/client/index.d.ts",
|
|
23
23
|
"default": "./lib/client.js"
|
|
24
24
|
},
|
|
25
|
+
"./locale/*.json": "./locale/*.json",
|
|
25
26
|
"./src/*": "./src/*",
|
|
26
27
|
"./package.json": "./package.json"
|
|
27
28
|
},
|
|
@@ -32,48 +33,51 @@
|
|
|
32
33
|
"@deepseek-ai/dsh-api-session-controller",
|
|
33
34
|
"@deepseek-ai/dsh-client-locale",
|
|
34
35
|
"@deepseek-ai/dsh-client-ui-conversation",
|
|
35
|
-
"@deepseek-ai/dsh-client-ui-primitives"
|
|
36
|
+
"@deepseek-ai/dsh-client-ui-primitives",
|
|
37
|
+
"@deepseek-ai/dsh-client-ui-workspace"
|
|
36
38
|
],
|
|
37
39
|
"platform": "web"
|
|
38
40
|
}
|
|
39
41
|
},
|
|
40
42
|
"license": "MIT",
|
|
41
|
-
"dependencies": {
|
|
42
|
-
"react": "^18.2.0"
|
|
43
|
-
},
|
|
44
43
|
"peerDependencies": {
|
|
45
|
-
"@deepseek-ai/dsh-api-remotes": "^0.1.
|
|
46
|
-
"@deepseek-ai/dsh-api-session-controller": "^0.1.
|
|
47
|
-
"@deepseek-ai/dsh-client-
|
|
48
|
-
"@deepseek-ai/dsh-client-
|
|
49
|
-
"@deepseek-ai/dsh-client-ui-
|
|
50
|
-
"@deepseek-ai/dsh-client-ui-
|
|
51
|
-
"@deepseek-ai/dsh-client-ui-session": "^0.1.
|
|
52
|
-
"@deepseek-ai/dsh-
|
|
53
|
-
"@deepseek-ai/dsh-client-ui-
|
|
54
|
-
"@deepseek-ai/dsh-
|
|
55
|
-
"@deepseek-ai/dsh-session": "^0.1.
|
|
56
|
-
"@deepseek-ai/
|
|
44
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.7-alpha.1",
|
|
45
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.7-alpha.1",
|
|
46
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.7-alpha.1",
|
|
47
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-alpha.1",
|
|
48
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.7-alpha.1",
|
|
49
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-alpha.1",
|
|
50
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.7-alpha.1",
|
|
51
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.7-alpha.1",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.7-alpha.1",
|
|
53
|
+
"@deepseek-ai/dsh-experimental-agent-team": "^0.1.7-alpha.1",
|
|
54
|
+
"@deepseek-ai/dsh-session": "^0.1.7-alpha.1",
|
|
55
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.7-alpha.1",
|
|
56
|
+
"@deepseek-ai/cordis": "^4.0.3"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@testing-library/react": "^16.1.0",
|
|
60
60
|
"@types/react": "~18.3.1",
|
|
61
|
+
"@types/react-dom": "~18.3.0",
|
|
62
|
+
"react": "^18.2.0",
|
|
61
63
|
"react-dom": "^18.2.0",
|
|
62
|
-
"@deepseek-ai/dsh-api-remotes": "^0.1.
|
|
63
|
-
"@deepseek-ai/dsh-api-session-controller": "^0.1.
|
|
64
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.
|
|
65
|
-
"@deepseek-ai/dsh-client-test-runtime": "^0.1.
|
|
66
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.
|
|
67
|
-
"@deepseek-ai/dsh-client-ui-
|
|
68
|
-
"@deepseek-ai/dsh-client-ui-
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-
|
|
70
|
-
"@deepseek-ai/dsh-client-ui-
|
|
71
|
-
"@deepseek-ai/dsh-experimental-agent-team": "^0.1.
|
|
72
|
-
"@deepseek-ai/dsh-session": "^0.1.
|
|
73
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.
|
|
74
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
64
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.7-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.7-alpha.1",
|
|
66
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.7-alpha.1",
|
|
67
|
+
"@deepseek-ai/dsh-client-test-runtime": "^0.1.7-alpha.1",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-alpha.1",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.7-alpha.1",
|
|
70
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.7-alpha.1",
|
|
71
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.7-alpha.1",
|
|
72
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.7-alpha.1",
|
|
73
|
+
"@deepseek-ai/dsh-experimental-agent-team": "^0.1.7-alpha.1",
|
|
74
|
+
"@deepseek-ai/dsh-session": "^0.1.7-alpha.1",
|
|
75
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.7-alpha.1",
|
|
76
|
+
"@deepseek-ai/cordis": "^4.0.3",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-alpha.1"
|
|
75
78
|
},
|
|
76
79
|
"files": [
|
|
80
|
+
"locale/*.json",
|
|
77
81
|
"lib/index.js",
|
|
78
82
|
"lib/client.js",
|
|
79
83
|
"lib/types/**/*.d.ts"
|