@deepseek-ai/dsh-experimental-client-ui-agent-team 0.1.6-alpha.2 → 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 +127 -562
- 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 +31 -28
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,91 +4047,6 @@ 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
|
-
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_0$schema$value;
|
|
4050
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_0$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_0$schema$value ??= intersection(string(), unknown());
|
|
4051
|
-
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_1$schema$value;
|
|
4052
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_1$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_1$schema$value ??= object({
|
|
4053
|
-
"subject": string().readonly(),
|
|
4054
|
-
"description": string().readonly(),
|
|
4055
|
-
"blockedBy": array(intersection(string(), unknown())).readonly().optional(),
|
|
4056
|
-
"writeScopes": array(string()).readonly().optional()
|
|
4057
|
-
});
|
|
4058
|
-
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_result$schema$value;
|
|
4059
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_result$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_result$schema$value ??= union([object({
|
|
4060
|
-
"ok": literal(true).readonly(),
|
|
4061
|
-
"value": object({
|
|
4062
|
-
"id": intersection(string(), unknown()).readonly(),
|
|
4063
|
-
"revision": number().readonly(),
|
|
4064
|
-
"subject": string().readonly(),
|
|
4065
|
-
"description": string().readonly(),
|
|
4066
|
-
"status": union([
|
|
4067
|
-
literal("pending"),
|
|
4068
|
-
literal("in_progress"),
|
|
4069
|
-
literal("completed"),
|
|
4070
|
-
literal("deleted")
|
|
4071
|
-
]).readonly(),
|
|
4072
|
-
"blockedBy": array(intersection(string(), unknown())).readonly(),
|
|
4073
|
-
"writeScopes": array(string()).readonly(),
|
|
4074
|
-
"ownerName": string().readonly().optional(),
|
|
4075
|
-
"ready": boolean().readonly(),
|
|
4076
|
-
"writeScopeWarnings": array(string()).readonly()
|
|
4077
|
-
}).readonly()
|
|
4078
|
-
}), object({
|
|
4079
|
-
"ok": literal(false).readonly(),
|
|
4080
|
-
"error": object({
|
|
4081
|
-
"code": union([literal("team-task-conflict"), literal("team-rejected")]).readonly(),
|
|
4082
|
-
"message": string().readonly()
|
|
4083
|
-
}).readonly()
|
|
4084
|
-
})]);
|
|
4085
|
-
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_0$schema$value;
|
|
4086
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_0$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_0$schema$value ??= intersection(string(), unknown());
|
|
4087
|
-
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_1$schema$value;
|
|
4088
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_1$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_1$schema$value ??= object({
|
|
4089
|
-
"taskId": intersection(string(), unknown()).readonly(),
|
|
4090
|
-
"expectedRevision": number().readonly(),
|
|
4091
|
-
"action": union([
|
|
4092
|
-
literal("complete"),
|
|
4093
|
-
literal("edit"),
|
|
4094
|
-
literal("claim"),
|
|
4095
|
-
literal("release"),
|
|
4096
|
-
literal("set_dependencies"),
|
|
4097
|
-
literal("reopen"),
|
|
4098
|
-
literal("reassign"),
|
|
4099
|
-
literal("delete")
|
|
4100
|
-
]).readonly(),
|
|
4101
|
-
"subject": string().readonly().optional(),
|
|
4102
|
-
"description": string().readonly().optional(),
|
|
4103
|
-
"blockedBy": array(intersection(string(), unknown())).readonly().optional(),
|
|
4104
|
-
"writeScopes": array(string()).readonly().optional(),
|
|
4105
|
-
"owner": string().readonly().optional()
|
|
4106
|
-
});
|
|
4107
|
-
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_result$schema$value;
|
|
4108
|
-
const _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_result$schema = () => _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_result$schema$value ??= union([object({
|
|
4109
|
-
"ok": literal(true).readonly(),
|
|
4110
|
-
"value": object({
|
|
4111
|
-
"id": intersection(string(), unknown()).readonly(),
|
|
4112
|
-
"revision": number().readonly(),
|
|
4113
|
-
"subject": string().readonly(),
|
|
4114
|
-
"description": string().readonly(),
|
|
4115
|
-
"status": union([
|
|
4116
|
-
literal("pending"),
|
|
4117
|
-
literal("in_progress"),
|
|
4118
|
-
literal("completed"),
|
|
4119
|
-
literal("deleted")
|
|
4120
|
-
]).readonly(),
|
|
4121
|
-
"blockedBy": array(intersection(string(), unknown())).readonly(),
|
|
4122
|
-
"writeScopes": array(string()).readonly(),
|
|
4123
|
-
"ownerName": string().readonly().optional(),
|
|
4124
|
-
"ready": boolean().readonly(),
|
|
4125
|
-
"writeScopeWarnings": array(string()).readonly()
|
|
4126
|
-
}).readonly()
|
|
4127
|
-
}), object({
|
|
4128
|
-
"ok": literal(false).readonly(),
|
|
4129
|
-
"error": object({
|
|
4130
|
-
"code": union([literal("team-task-conflict"), literal("team-rejected")]).readonly(),
|
|
4131
|
-
"message": string().readonly()
|
|
4132
|
-
}).readonly()
|
|
4133
|
-
})]);
|
|
4134
4050
|
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema$value;
|
|
4135
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());
|
|
4136
4052
|
let _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema$value;
|
|
@@ -4140,9 +4056,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4140
4056
|
"name": string().readonly(),
|
|
4141
4057
|
"role": union([literal("lead"), literal("teammate")]).readonly(),
|
|
4142
4058
|
"status": union([
|
|
4143
|
-
literal("running"),
|
|
4144
4059
|
literal("failed"),
|
|
4145
|
-
literal("
|
|
4060
|
+
literal("running"),
|
|
4146
4061
|
literal("inactive"),
|
|
4147
4062
|
literal("provisioning")
|
|
4148
4063
|
]).readonly(),
|
|
@@ -4158,9 +4073,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4158
4073
|
"subject": string().readonly(),
|
|
4159
4074
|
"description": string().readonly(),
|
|
4160
4075
|
"status": union([
|
|
4076
|
+
literal("completed"),
|
|
4161
4077
|
literal("pending"),
|
|
4162
4078
|
literal("in_progress"),
|
|
4163
|
-
literal("completed"),
|
|
4164
4079
|
literal("deleted")
|
|
4165
4080
|
]).readonly(),
|
|
4166
4081
|
"blockedBy": array(intersection(string(), unknown())).readonly(),
|
|
@@ -4172,129 +4087,43 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4172
4087
|
});
|
|
4173
4088
|
const TYPERT_REMOTE = {
|
|
4174
4089
|
package: "@deepseek-ai/dsh-experimental-agent-team",
|
|
4175
|
-
descriptors: [
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4179
|
-
|
|
4180
|
-
|
|
4181
|
-
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
wire: "agentId"
|
|
4186
|
-
},
|
|
4187
|
-
parameters: [{
|
|
4188
|
-
name: "agent",
|
|
4189
|
-
wire: "agentId",
|
|
4190
|
-
source: "lookup",
|
|
4191
|
-
lookup: "agent",
|
|
4192
|
-
codec: {
|
|
4193
|
-
mode: "strict",
|
|
4194
|
-
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4195
|
-
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_0$schema
|
|
4196
|
-
}
|
|
4197
|
-
}, {
|
|
4198
|
-
name: "request",
|
|
4199
|
-
wire: "request",
|
|
4200
|
-
source: "json",
|
|
4201
|
-
codec: {
|
|
4202
|
-
mode: "strict",
|
|
4203
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#CreateTeamTaskRequest",
|
|
4204
|
-
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_parameter_1$schema
|
|
4205
|
-
}
|
|
4206
|
-
}],
|
|
4207
|
-
result: {
|
|
4208
|
-
mode: "strict",
|
|
4209
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#TeamTaskMutationResult",
|
|
4210
|
-
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_createTask_result$schema
|
|
4211
|
-
},
|
|
4212
|
-
sourceLocation: {
|
|
4213
|
-
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4214
|
-
"line": 257,
|
|
4215
|
-
"column": 3
|
|
4216
|
-
}
|
|
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"
|
|
4217
4100
|
},
|
|
4218
|
-
{
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
invocation: { kind: "direct" },
|
|
4225
|
-
scope: {
|
|
4226
|
-
context: "agent",
|
|
4227
|
-
wire: "agentId"
|
|
4228
|
-
},
|
|
4229
|
-
parameters: [{
|
|
4230
|
-
name: "agent",
|
|
4231
|
-
wire: "agentId",
|
|
4232
|
-
source: "lookup",
|
|
4233
|
-
lookup: "agent",
|
|
4234
|
-
codec: {
|
|
4235
|
-
mode: "strict",
|
|
4236
|
-
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4237
|
-
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_0$schema
|
|
4238
|
-
}
|
|
4239
|
-
}, {
|
|
4240
|
-
name: "request",
|
|
4241
|
-
wire: "request",
|
|
4242
|
-
source: "json",
|
|
4243
|
-
codec: {
|
|
4244
|
-
mode: "strict",
|
|
4245
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#UpdateTeamTaskRequest",
|
|
4246
|
-
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_updateTask_parameter_1$schema
|
|
4247
|
-
}
|
|
4248
|
-
}],
|
|
4249
|
-
result: {
|
|
4101
|
+
parameters: [{
|
|
4102
|
+
name: "agent",
|
|
4103
|
+
wire: "agentId",
|
|
4104
|
+
source: "lookup",
|
|
4105
|
+
lookup: "agent",
|
|
4106
|
+
codec: {
|
|
4250
4107
|
mode: "strict",
|
|
4251
|
-
typeSymbol: "@deepseek-ai/dsh-
|
|
4252
|
-
create:
|
|
4253
|
-
},
|
|
4254
|
-
sourceLocation: {
|
|
4255
|
-
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4256
|
-
"line": 268,
|
|
4257
|
-
"column": 3
|
|
4108
|
+
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4109
|
+
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema
|
|
4258
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
|
|
4259
4116
|
},
|
|
4260
|
-
{
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
method: "view",
|
|
4265
|
-
implementation: "remoteView",
|
|
4266
|
-
invocation: { kind: "direct" },
|
|
4267
|
-
scope: {
|
|
4268
|
-
context: "agent",
|
|
4269
|
-
wire: "agentId"
|
|
4270
|
-
},
|
|
4271
|
-
parameters: [{
|
|
4272
|
-
name: "agent",
|
|
4273
|
-
wire: "agentId",
|
|
4274
|
-
source: "lookup",
|
|
4275
|
-
lookup: "agent",
|
|
4276
|
-
codec: {
|
|
4277
|
-
mode: "strict",
|
|
4278
|
-
typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
|
|
4279
|
-
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_parameter_0$schema
|
|
4280
|
-
}
|
|
4281
|
-
}],
|
|
4282
|
-
result: {
|
|
4283
|
-
mode: "strict",
|
|
4284
|
-
typeSymbol: "@deepseek-ai/dsh-experimental-agent-team/client#TeamView",
|
|
4285
|
-
create: _deepseek_ai_dsh_experimental_agent_team_agentTeams_view_result$schema
|
|
4286
|
-
},
|
|
4287
|
-
sourceLocation: {
|
|
4288
|
-
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4289
|
-
"line": 243,
|
|
4290
|
-
"column": 3
|
|
4291
|
-
}
|
|
4117
|
+
sourceLocation: {
|
|
4118
|
+
"file": "packages/experimental/agent-team/src/index.ts",
|
|
4119
|
+
"line": 242,
|
|
4120
|
+
"column": 3
|
|
4292
4121
|
}
|
|
4293
|
-
]
|
|
4122
|
+
}]
|
|
4294
4123
|
};
|
|
4295
4124
|
//#endregion
|
|
4296
4125
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/experimental/client-ui-agent-team/src/client/TeamAction.module.css.mjs
|
|
4297
|
-
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}";
|
|
4298
4127
|
const tagId = "@deepseek-ai/dsh-experimental-client-ui-agent-team/TeamAction.module.css";
|
|
4299
4128
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
4300
4129
|
const tag = document.createElement("style");
|
|
@@ -4307,8 +4136,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4307
4136
|
"count": "VoX2oq_count",
|
|
4308
4137
|
"diagnostic": "VoX2oq_diagnostic",
|
|
4309
4138
|
"error": "VoX2oq_error",
|
|
4310
|
-
"form": "VoX2oq_form",
|
|
4311
|
-
"formActions": "VoX2oq_formActions",
|
|
4312
4139
|
"iconButton": "VoX2oq_iconButton",
|
|
4313
4140
|
"member": "VoX2oq_member",
|
|
4314
4141
|
"memberText": "VoX2oq_memberText",
|
|
@@ -4317,11 +4144,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4317
4144
|
"panel": "VoX2oq_panel",
|
|
4318
4145
|
"root": "VoX2oq_root",
|
|
4319
4146
|
"roster": "VoX2oq_roster",
|
|
4320
|
-
"sectionTitle": "VoX2oq_sectionTitle",
|
|
4321
|
-
"smallButton": "VoX2oq_smallButton",
|
|
4322
4147
|
"spacer": "VoX2oq_spacer",
|
|
4323
4148
|
"task": "VoX2oq_task",
|
|
4324
|
-
"
|
|
4149
|
+
"taskState": "VoX2oq_taskState",
|
|
4325
4150
|
"taskTitle": "VoX2oq_taskTitle",
|
|
4326
4151
|
"tasks": "VoX2oq_tasks",
|
|
4327
4152
|
"toolbar": "VoX2oq_toolbar",
|
|
@@ -4330,22 +4155,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4330
4155
|
};
|
|
4331
4156
|
//#endregion
|
|
4332
4157
|
//#region lib/types/client/TeamAction.js
|
|
4333
|
-
const EMPTY_DRAFT = {
|
|
4334
|
-
subject: "",
|
|
4335
|
-
description: "",
|
|
4336
|
-
blockers: "",
|
|
4337
|
-
scopes: ""
|
|
4338
|
-
};
|
|
4339
|
-
function items(value) {
|
|
4340
|
-
return [...new Set(value.split(",").map((item) => item.trim()).filter(Boolean))];
|
|
4341
|
-
}
|
|
4342
|
-
function taskIds(value) {
|
|
4343
|
-
return items(value);
|
|
4344
|
-
}
|
|
4345
|
-
/**
|
|
4346
|
-
* One failure line for either carrier: a Remote failure, or a Team business
|
|
4347
|
-
* rejection whose codes stay local to this seam and never ride the wire.
|
|
4348
|
-
*/
|
|
4349
4158
|
function failureText(error) {
|
|
4350
4159
|
return `${error.message} (${error.code})`;
|
|
4351
4160
|
}
|
|
@@ -4361,23 +4170,46 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4361
4170
|
function memberStatusKey(status) {
|
|
4362
4171
|
switch (status) {
|
|
4363
4172
|
case "running": return "memberStatus.running";
|
|
4364
|
-
case "idle": return "memberStatus.idle";
|
|
4365
4173
|
case "inactive": return "memberStatus.inactive";
|
|
4366
4174
|
case "provisioning": return "memberStatus.provisioning";
|
|
4367
4175
|
case "failed": return "memberStatus.failed";
|
|
4368
4176
|
}
|
|
4369
4177
|
}
|
|
4370
|
-
|
|
4371
|
-
|
|
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 }) {
|
|
4372
4197
|
const [open, setOpen] = (0, react.useState)(false);
|
|
4373
4198
|
const [loading, setLoading] = (0, react.useState)(false);
|
|
4374
4199
|
const [view, setView] = (0, react.useState)(null);
|
|
4375
4200
|
const [error, setError] = (0, react.useState)(null);
|
|
4376
|
-
const
|
|
4377
|
-
const
|
|
4378
|
-
const
|
|
4379
|
-
const
|
|
4380
|
-
|
|
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);
|
|
4381
4213
|
const sessionRef = (0, react.useRef)(sessionId);
|
|
4382
4214
|
const refreshGeneration = (0, react.useRef)(0);
|
|
4383
4215
|
sessionRef.current = sessionId;
|
|
@@ -4387,124 +4219,45 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4387
4219
|
setLoading(false);
|
|
4388
4220
|
setView(null);
|
|
4389
4221
|
setError(null);
|
|
4390
|
-
setCreating(false);
|
|
4391
|
-
setCreateDraft(EMPTY_DRAFT);
|
|
4392
|
-
setEditing(null);
|
|
4393
|
-
setEditDraft(EMPTY_DRAFT);
|
|
4394
|
-
setPendingTasks(/* @__PURE__ */ new Set());
|
|
4395
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
|
+
};
|
|
4396
4230
|
const refresh = (0, react.useCallback)(async () => {
|
|
4397
4231
|
const requestedSession = sessionId;
|
|
4398
4232
|
const generation = ++refreshGeneration.current;
|
|
4399
4233
|
setLoading(true);
|
|
4400
4234
|
const result = await load(requestedSession);
|
|
4401
|
-
if (sessionRef.current !== requestedSession || refreshGeneration.current !== generation) return
|
|
4235
|
+
if (sessionRef.current !== requestedSession || refreshGeneration.current !== generation) return;
|
|
4402
4236
|
setLoading(false);
|
|
4403
4237
|
if (result.ok) {
|
|
4404
4238
|
setView(result.value);
|
|
4405
4239
|
setError(null);
|
|
4406
|
-
|
|
4407
|
-
} else {
|
|
4408
|
-
setError(failureText(result.error));
|
|
4409
|
-
return false;
|
|
4410
|
-
}
|
|
4240
|
+
} else setError(failureText(result.error));
|
|
4411
4241
|
}, [load, sessionId]);
|
|
4412
|
-
const invalidateRefresh = (0, react.useCallback)(() => {
|
|
4413
|
-
refreshGeneration.current += 1;
|
|
4414
|
-
setLoading(false);
|
|
4415
|
-
}, []);
|
|
4416
|
-
const settleTask = (0, react.useCallback)(async (taskId, operation) => {
|
|
4417
|
-
const requestedSession = sessionId;
|
|
4418
|
-
invalidateRefresh();
|
|
4419
|
-
setPendingTasks((current) => new Set(current).add(taskId));
|
|
4420
|
-
try {
|
|
4421
|
-
const result = await operation();
|
|
4422
|
-
if (sessionRef.current !== requestedSession) return void 0;
|
|
4423
|
-
if (!result.ok) {
|
|
4424
|
-
setError(failureText(result.error));
|
|
4425
|
-
return;
|
|
4426
|
-
}
|
|
4427
|
-
if (!result.value.ok) {
|
|
4428
|
-
if (result.value.error.code === "team-task-conflict") {
|
|
4429
|
-
const reloaded = await refresh();
|
|
4430
|
-
if (sessionRef.current !== requestedSession) return void 0;
|
|
4431
|
-
if (reloaded) setError(t("conflict"));
|
|
4432
|
-
} else setError(failureText(result.value.error));
|
|
4433
|
-
return;
|
|
4434
|
-
}
|
|
4435
|
-
const task = result.value.value;
|
|
4436
|
-
setError(null);
|
|
4437
|
-
await refresh();
|
|
4438
|
-
if (sessionRef.current !== requestedSession) return void 0;
|
|
4439
|
-
return task;
|
|
4440
|
-
} finally {
|
|
4441
|
-
if (sessionRef.current === requestedSession) setPendingTasks((current) => {
|
|
4442
|
-
const next = new Set(current);
|
|
4443
|
-
next.delete(taskId);
|
|
4444
|
-
return next;
|
|
4445
|
-
});
|
|
4446
|
-
}
|
|
4447
|
-
}, [
|
|
4448
|
-
invalidateRefresh,
|
|
4449
|
-
refresh,
|
|
4450
|
-
sessionId,
|
|
4451
|
-
t
|
|
4452
|
-
]);
|
|
4453
|
-
const submitCreate = async () => {
|
|
4454
|
-
const subject = createDraft.subject.trim();
|
|
4455
|
-
const description = createDraft.description.trim();
|
|
4456
|
-
/* v8 ignore next -- TaskForm disables Save while either normalized field is empty. */
|
|
4457
|
-
if (subject === "" || description === "") return;
|
|
4458
|
-
if (await settleTask("create", () => createTask(sessionId, {
|
|
4459
|
-
subject,
|
|
4460
|
-
description,
|
|
4461
|
-
blockedBy: taskIds(createDraft.blockers),
|
|
4462
|
-
writeScopes: items(createDraft.scopes)
|
|
4463
|
-
})) === void 0) return;
|
|
4464
|
-
setCreateDraft(EMPTY_DRAFT);
|
|
4465
|
-
setCreating(false);
|
|
4466
|
-
};
|
|
4467
|
-
const startEdit = (task) => {
|
|
4468
|
-
setEditing(task.id);
|
|
4469
|
-
setEditDraft({
|
|
4470
|
-
subject: task.subject,
|
|
4471
|
-
description: task.description,
|
|
4472
|
-
blockers: task.blockedBy.join(", "),
|
|
4473
|
-
scopes: task.writeScopes.join(", ")
|
|
4474
|
-
});
|
|
4475
|
-
};
|
|
4476
|
-
const submitEdit = async (task) => {
|
|
4477
|
-
const requestedSession = sessionId;
|
|
4478
|
-
const edited = await settleTask(task.id, () => updateTask(requestedSession, {
|
|
4479
|
-
taskId: task.id,
|
|
4480
|
-
expectedRevision: task.revision,
|
|
4481
|
-
action: "edit",
|
|
4482
|
-
subject: editDraft.subject.trim(),
|
|
4483
|
-
description: editDraft.description.trim(),
|
|
4484
|
-
writeScopes: items(editDraft.scopes)
|
|
4485
|
-
}));
|
|
4486
|
-
if (edited === void 0) return;
|
|
4487
|
-
const blockedBy = taskIds(editDraft.blockers);
|
|
4488
|
-
if (blockedBy.length === edited.blockedBy.length && blockedBy.every((blocker, index) => blocker === edited.blockedBy[index])) {
|
|
4489
|
-
setEditing(null);
|
|
4490
|
-
return;
|
|
4491
|
-
}
|
|
4492
|
-
if (await settleTask(task.id, () => updateTask(requestedSession, {
|
|
4493
|
-
taskId: task.id,
|
|
4494
|
-
expectedRevision: edited.revision,
|
|
4495
|
-
action: "set_dependencies",
|
|
4496
|
-
blockedBy
|
|
4497
|
-
})) === void 0) return;
|
|
4498
|
-
setEditing(null);
|
|
4499
|
-
};
|
|
4500
4242
|
const teammates = view?.members.filter((member) => member.role === "teammate") ?? [];
|
|
4501
|
-
const assignable = view?.members.filter((member) => member.status !== "failed" && member.status !== "provisioning") ?? [];
|
|
4502
4243
|
return (0, react_jsx_runtime.jsxs)("div", {
|
|
4244
|
+
ref: rootRef,
|
|
4503
4245
|
className: TeamAction_module_css_default.root,
|
|
4504
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
|
+
},
|
|
4505
4256
|
children: [(0, react_jsx_runtime.jsxs)("button", {
|
|
4506
4257
|
type: "button",
|
|
4258
|
+
ref: triggerRef,
|
|
4507
4259
|
className: TeamAction_module_css_default.trigger,
|
|
4260
|
+
"aria-haspopup": "dialog",
|
|
4508
4261
|
"aria-expanded": open,
|
|
4509
4262
|
onClick: () => {
|
|
4510
4263
|
const next = !open;
|
|
@@ -4512,23 +4265,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4512
4265
|
if (next) refresh();
|
|
4513
4266
|
},
|
|
4514
4267
|
children: [
|
|
4515
|
-
(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 }),
|
|
4516
4269
|
(0, react_jsx_runtime.jsx)("span", { children: t("trigger") }),
|
|
4517
4270
|
teammates.length > 0 && (0, react_jsx_runtime.jsx)("span", {
|
|
4518
4271
|
className: TeamAction_module_css_default.count,
|
|
4519
4272
|
children: teammates.length
|
|
4520
4273
|
})
|
|
4521
4274
|
]
|
|
4522
|
-
}), open && (0, react_jsx_runtime.jsxs)("div", {
|
|
4275
|
+
}), open && (0, react_dom.createPortal)((0, react_jsx_runtime.jsxs)("div", {
|
|
4276
|
+
ref: panelRef,
|
|
4523
4277
|
className: TeamAction_module_css_default.panel,
|
|
4278
|
+
style: position ?? {
|
|
4279
|
+
visibility: "hidden",
|
|
4280
|
+
left: 0,
|
|
4281
|
+
top: 0
|
|
4282
|
+
},
|
|
4524
4283
|
role: "dialog",
|
|
4284
|
+
tabIndex: -1,
|
|
4525
4285
|
"aria-label": t("trigger"),
|
|
4286
|
+
"data-team-panel": true,
|
|
4526
4287
|
children: [
|
|
4527
4288
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
4528
4289
|
className: TeamAction_module_css_default.toolbar,
|
|
4529
4290
|
children: [
|
|
4530
4291
|
(0, react_jsx_runtime.jsx)("strong", { children: t("trigger") }),
|
|
4531
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
|
+
}),
|
|
4532
4298
|
(0, react_jsx_runtime.jsx)("button", {
|
|
4533
4299
|
type: "button",
|
|
4534
4300
|
className: TeamAction_module_css_default.iconButton,
|
|
@@ -4536,27 +4302,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4536
4302
|
onClick: () => {
|
|
4537
4303
|
refresh();
|
|
4538
4304
|
},
|
|
4539
|
-
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 })
|
|
4540
4306
|
}),
|
|
4541
4307
|
(0, react_jsx_runtime.jsx)("button", {
|
|
4542
4308
|
type: "button",
|
|
4543
4309
|
className: TeamAction_module_css_default.iconButton,
|
|
4544
4310
|
"aria-label": t("close"),
|
|
4545
|
-
onClick:
|
|
4546
|
-
|
|
4547
|
-
},
|
|
4548
|
-
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 })
|
|
4549
4313
|
})
|
|
4550
4314
|
]
|
|
4551
4315
|
}),
|
|
4552
|
-
error !== null && (0, react_jsx_runtime.
|
|
4316
|
+
error !== null && (0, react_jsx_runtime.jsxs)("div", {
|
|
4553
4317
|
className: TeamAction_module_css_default.error,
|
|
4554
4318
|
role: "alert",
|
|
4555
|
-
children: error
|
|
4319
|
+
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }), error]
|
|
4556
4320
|
}),
|
|
4557
|
-
loading && view === null && (0, react_jsx_runtime.
|
|
4321
|
+
loading && view === null && (0, react_jsx_runtime.jsxs)("div", {
|
|
4558
4322
|
className: TeamAction_module_css_default.notice,
|
|
4559
|
-
|
|
4323
|
+
role: "status",
|
|
4324
|
+
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }), t("loading")]
|
|
4560
4325
|
}),
|
|
4561
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", {
|
|
4562
4327
|
className: TeamAction_module_css_default.roster,
|
|
@@ -4566,11 +4331,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4566
4331
|
disabled: member.role === "lead" || member.status === "failed" || member.status === "provisioning",
|
|
4567
4332
|
title: member.role === "teammate" ? t("open") : void 0,
|
|
4568
4333
|
onClick: () => {
|
|
4569
|
-
|
|
4334
|
+
try {
|
|
4335
|
+
openTeammate(sessionId, member);
|
|
4336
|
+
} catch (reason) {
|
|
4570
4337
|
setError(String(reason));
|
|
4571
|
-
}
|
|
4338
|
+
}
|
|
4572
4339
|
},
|
|
4573
|
-
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", {
|
|
4574
4341
|
className: TeamAction_module_css_default.memberText,
|
|
4575
4342
|
children: [
|
|
4576
4343
|
(0, react_jsx_runtime.jsx)("span", { children: member.name }),
|
|
@@ -4583,62 +4350,33 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4583
4350
|
})]
|
|
4584
4351
|
}, member.id))
|
|
4585
4352
|
})] }), (0, react_jsx_runtime.jsxs)("section", { children: [
|
|
4586
|
-
(0, react_jsx_runtime.
|
|
4587
|
-
|
|
4588
|
-
children: [(0, react_jsx_runtime.jsx)("h3", { children: t("tasks") }), (0, react_jsx_runtime.jsxs)("button", {
|
|
4589
|
-
type: "button",
|
|
4590
|
-
className: TeamAction_module_css_default.smallButton,
|
|
4591
|
-
onClick: () => {
|
|
4592
|
-
setCreating(true);
|
|
4593
|
-
},
|
|
4594
|
-
children: [
|
|
4595
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 13 }),
|
|
4596
|
-
" ",
|
|
4597
|
-
t("create")
|
|
4598
|
-
]
|
|
4599
|
-
})]
|
|
4600
|
-
}),
|
|
4601
|
-
creating && (0, react_jsx_runtime.jsx)(TaskForm, {
|
|
4602
|
-
draft: createDraft,
|
|
4603
|
-
setDraft: setCreateDraft,
|
|
4604
|
-
pending: pendingTasks.has("create"),
|
|
4605
|
-
onSave: () => {
|
|
4606
|
-
submitCreate();
|
|
4607
|
-
},
|
|
4608
|
-
onCancel: () => {
|
|
4609
|
-
setCreating(false);
|
|
4610
|
-
},
|
|
4611
|
-
t
|
|
4612
|
-
}),
|
|
4613
|
-
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", {
|
|
4614
4355
|
className: TeamAction_module_css_default.notice,
|
|
4615
4356
|
children: t("empty")
|
|
4616
4357
|
}),
|
|
4617
4358
|
(0, react_jsx_runtime.jsx)("div", {
|
|
4618
4359
|
className: TeamAction_module_css_default.tasks,
|
|
4619
|
-
children: view.tasks.map((task) =>
|
|
4620
|
-
draft: editDraft,
|
|
4621
|
-
setDraft: setEditDraft,
|
|
4622
|
-
pending: pendingTasks.has(task.id),
|
|
4623
|
-
onSave: () => {
|
|
4624
|
-
submitEdit(task);
|
|
4625
|
-
},
|
|
4626
|
-
onCancel: () => {
|
|
4627
|
-
setEditing(null);
|
|
4628
|
-
},
|
|
4629
|
-
t
|
|
4630
|
-
}, task.id) : (0, react_jsx_runtime.jsxs)("article", {
|
|
4360
|
+
children: view.tasks.map((task) => (0, react_jsx_runtime.jsxs)("article", {
|
|
4631
4361
|
className: TeamAction_module_css_default.task,
|
|
4632
4362
|
children: [
|
|
4633
4363
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
4634
4364
|
className: TeamAction_module_css_default.taskTitle,
|
|
4635
|
-
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
|
+
})]
|
|
4636
4369
|
}),
|
|
4637
4370
|
(0, react_jsx_runtime.jsx)("p", { children: task.description }),
|
|
4638
4371
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
4639
4372
|
className: TeamAction_module_css_default.meta,
|
|
4640
4373
|
children: [
|
|
4641
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
|
+
] }),
|
|
4642
4380
|
task.status === "pending" && (0, react_jsx_runtime.jsx)("span", { children: task.ready ? t("ready") : t("blocked") }),
|
|
4643
4381
|
task.blockedBy.length > 0 && (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
4644
4382
|
t("blockedBy"),
|
|
@@ -4655,149 +4393,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4655
4393
|
children: warning
|
|
4656
4394
|
}, warning))
|
|
4657
4395
|
]
|
|
4658
|
-
}),
|
|
4659
|
-
(0, react_jsx_runtime.jsxs)("div", {
|
|
4660
|
-
className: TeamAction_module_css_default.taskActions,
|
|
4661
|
-
children: [
|
|
4662
|
-
(0, react_jsx_runtime.jsxs)("label", { children: [t("owner"), (0, react_jsx_runtime.jsxs)("select", {
|
|
4663
|
-
value: task.ownerName ?? "",
|
|
4664
|
-
disabled: pendingTasks.has(task.id) || task.status === "completed",
|
|
4665
|
-
onChange: (event) => {
|
|
4666
|
-
const owner = event.target.value;
|
|
4667
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4668
|
-
taskId: task.id,
|
|
4669
|
-
expectedRevision: task.revision,
|
|
4670
|
-
action: "reassign",
|
|
4671
|
-
...owner === "" ? {} : { owner }
|
|
4672
|
-
}));
|
|
4673
|
-
},
|
|
4674
|
-
children: [(0, react_jsx_runtime.jsx)("option", {
|
|
4675
|
-
value: "",
|
|
4676
|
-
children: t("unowned")
|
|
4677
|
-
}), assignable.map((member) => (0, react_jsx_runtime.jsx)("option", {
|
|
4678
|
-
value: member.name,
|
|
4679
|
-
children: member.name
|
|
4680
|
-
}, member.id))]
|
|
4681
|
-
})] }),
|
|
4682
|
-
(0, react_jsx_runtime.jsxs)("button", {
|
|
4683
|
-
type: "button",
|
|
4684
|
-
onClick: () => {
|
|
4685
|
-
startEdit(task);
|
|
4686
|
-
},
|
|
4687
|
-
disabled: pendingTasks.has(task.id),
|
|
4688
|
-
children: [
|
|
4689
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, { size: 13 }),
|
|
4690
|
-
" ",
|
|
4691
|
-
t("edit")
|
|
4692
|
-
]
|
|
4693
|
-
}),
|
|
4694
|
-
task.status === "in_progress" && (0, react_jsx_runtime.jsxs)("button", {
|
|
4695
|
-
type: "button",
|
|
4696
|
-
disabled: pendingTasks.has(task.id),
|
|
4697
|
-
onClick: () => {
|
|
4698
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4699
|
-
taskId: task.id,
|
|
4700
|
-
expectedRevision: task.revision,
|
|
4701
|
-
action: "complete"
|
|
4702
|
-
}));
|
|
4703
|
-
},
|
|
4704
|
-
children: [
|
|
4705
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline14, {}),
|
|
4706
|
-
" ",
|
|
4707
|
-
t("complete")
|
|
4708
|
-
]
|
|
4709
|
-
}),
|
|
4710
|
-
task.status === "completed" && (0, react_jsx_runtime.jsx)("button", {
|
|
4711
|
-
type: "button",
|
|
4712
|
-
disabled: pendingTasks.has(task.id),
|
|
4713
|
-
onClick: () => {
|
|
4714
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4715
|
-
taskId: task.id,
|
|
4716
|
-
expectedRevision: task.revision,
|
|
4717
|
-
action: "reopen"
|
|
4718
|
-
}));
|
|
4719
|
-
},
|
|
4720
|
-
children: t("reopen")
|
|
4721
|
-
}),
|
|
4722
|
-
(0, react_jsx_runtime.jsxs)("button", {
|
|
4723
|
-
type: "button",
|
|
4724
|
-
disabled: pendingTasks.has(task.id),
|
|
4725
|
-
onClick: () => {
|
|
4726
|
-
settleTask(task.id, () => updateTask(sessionId, {
|
|
4727
|
-
taskId: task.id,
|
|
4728
|
-
expectedRevision: task.revision,
|
|
4729
|
-
action: "delete"
|
|
4730
|
-
}));
|
|
4731
|
-
},
|
|
4732
|
-
children: [
|
|
4733
|
-
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutline16, { size: 13 }),
|
|
4734
|
-
" ",
|
|
4735
|
-
t("delete")
|
|
4736
|
-
]
|
|
4737
|
-
})
|
|
4738
|
-
]
|
|
4739
4396
|
})
|
|
4740
4397
|
]
|
|
4741
4398
|
}, task.id))
|
|
4742
4399
|
})
|
|
4743
4400
|
] })] })
|
|
4744
4401
|
]
|
|
4745
|
-
})]
|
|
4746
|
-
});
|
|
4747
|
-
}
|
|
4748
|
-
function TaskForm({ draft, setDraft, pending, onSave, onCancel, t }) {
|
|
4749
|
-
const field = (key, value) => {
|
|
4750
|
-
setDraft({
|
|
4751
|
-
...draft,
|
|
4752
|
-
[key]: value
|
|
4753
|
-
});
|
|
4754
|
-
};
|
|
4755
|
-
return (0, react_jsx_runtime.jsxs)("div", {
|
|
4756
|
-
className: TeamAction_module_css_default.form,
|
|
4757
|
-
children: [
|
|
4758
|
-
(0, react_jsx_runtime.jsx)("input", {
|
|
4759
|
-
value: draft.subject,
|
|
4760
|
-
placeholder: t("subject"),
|
|
4761
|
-
onChange: (event) => {
|
|
4762
|
-
field("subject", event.target.value);
|
|
4763
|
-
}
|
|
4764
|
-
}),
|
|
4765
|
-
(0, react_jsx_runtime.jsx)("textarea", {
|
|
4766
|
-
value: draft.description,
|
|
4767
|
-
placeholder: t("description"),
|
|
4768
|
-
onChange: (event) => {
|
|
4769
|
-
field("description", event.target.value);
|
|
4770
|
-
}
|
|
4771
|
-
}),
|
|
4772
|
-
(0, react_jsx_runtime.jsx)("input", {
|
|
4773
|
-
value: draft.blockers,
|
|
4774
|
-
placeholder: t("blockers"),
|
|
4775
|
-
onChange: (event) => {
|
|
4776
|
-
field("blockers", event.target.value);
|
|
4777
|
-
}
|
|
4778
|
-
}),
|
|
4779
|
-
(0, react_jsx_runtime.jsx)("input", {
|
|
4780
|
-
value: draft.scopes,
|
|
4781
|
-
placeholder: t("scopes"),
|
|
4782
|
-
onChange: (event) => {
|
|
4783
|
-
field("scopes", event.target.value);
|
|
4784
|
-
}
|
|
4785
|
-
}),
|
|
4786
|
-
(0, react_jsx_runtime.jsxs)("div", {
|
|
4787
|
-
className: TeamAction_module_css_default.formActions,
|
|
4788
|
-
children: [(0, react_jsx_runtime.jsx)("button", {
|
|
4789
|
-
type: "button",
|
|
4790
|
-
disabled: pending || draft.subject.trim() === "" || draft.description.trim() === "",
|
|
4791
|
-
onClick: onSave,
|
|
4792
|
-
children: t("save")
|
|
4793
|
-
}), (0, react_jsx_runtime.jsx)("button", {
|
|
4794
|
-
type: "button",
|
|
4795
|
-
disabled: pending,
|
|
4796
|
-
onClick: onCancel,
|
|
4797
|
-
children: t("cancel")
|
|
4798
|
-
})]
|
|
4799
|
-
})
|
|
4800
|
-
]
|
|
4402
|
+
}), document.body)]
|
|
4801
4403
|
});
|
|
4802
4404
|
}
|
|
4803
4405
|
//#endregion
|
|
@@ -4816,26 +4418,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4816
4418
|
tasks: "共享任务",
|
|
4817
4419
|
model: "模型",
|
|
4818
4420
|
open: "打开 teammate 会话",
|
|
4819
|
-
create: "新建任务",
|
|
4820
|
-
subject: "任务标题",
|
|
4821
|
-
description: "任务描述",
|
|
4822
|
-
blockers: "依赖任务 id(逗号分隔)",
|
|
4823
|
-
scopes: "写入范围(逗号分隔)",
|
|
4824
|
-
save: "保存",
|
|
4825
|
-
cancel: "取消",
|
|
4826
|
-
edit: "编辑",
|
|
4827
|
-
complete: "完成",
|
|
4828
|
-
reopen: "重开",
|
|
4829
|
-
delete: "删除",
|
|
4830
4421
|
owner: "Owner",
|
|
4831
4422
|
unowned: "未分配",
|
|
4832
4423
|
blockedBy: "依赖",
|
|
4833
4424
|
writeScopes: "写入范围",
|
|
4834
4425
|
ready: "可开始",
|
|
4835
4426
|
blocked: "被依赖阻塞",
|
|
4836
|
-
conflict: "任务状态已变化,已重新加载;请检查后重试。",
|
|
4837
4427
|
"memberStatus.running": "运行中",
|
|
4838
|
-
"memberStatus.idle": "空闲",
|
|
4839
4428
|
"memberStatus.inactive": "未运行",
|
|
4840
4429
|
"memberStatus.provisioning": "准备中",
|
|
4841
4430
|
"memberStatus.failed": "失败",
|
|
@@ -4854,26 +4443,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4854
4443
|
tasks: "Shared tasks",
|
|
4855
4444
|
model: "Model",
|
|
4856
4445
|
open: "Open teammate conversation",
|
|
4857
|
-
create: "New task",
|
|
4858
|
-
subject: "Task subject",
|
|
4859
|
-
description: "Task description",
|
|
4860
|
-
blockers: "Blocking task ids (comma separated)",
|
|
4861
|
-
scopes: "Write scopes (comma separated)",
|
|
4862
|
-
save: "Save",
|
|
4863
|
-
cancel: "Cancel",
|
|
4864
|
-
edit: "Edit",
|
|
4865
|
-
complete: "Complete",
|
|
4866
|
-
reopen: "Reopen",
|
|
4867
|
-
delete: "Delete",
|
|
4868
4446
|
owner: "Owner",
|
|
4869
4447
|
unowned: "Unowned",
|
|
4870
4448
|
blockedBy: "Blocked by",
|
|
4871
4449
|
writeScopes: "Write scopes",
|
|
4872
4450
|
ready: "Ready",
|
|
4873
4451
|
blocked: "Blocked by dependencies",
|
|
4874
|
-
conflict: "Task state changed and was reloaded. Review it before retrying.",
|
|
4875
4452
|
"memberStatus.running": "Running",
|
|
4876
|
-
"memberStatus.idle": "Idle",
|
|
4877
4453
|
"memberStatus.inactive": "Inactive",
|
|
4878
4454
|
"memberStatus.provisioning": "Provisioning",
|
|
4879
4455
|
"memberStatus.failed": "Failed",
|
|
@@ -4905,20 +4481,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4905
4481
|
async load(sessionId) {
|
|
4906
4482
|
return await ctx.remote.agentTeams.view(leadSessionId(sessionId));
|
|
4907
4483
|
},
|
|
4908
|
-
|
|
4909
|
-
return await ctx.remote.agentTeams.createTask(leadSessionId(sessionId), input);
|
|
4910
|
-
},
|
|
4911
|
-
async updateTask(sessionId, input) {
|
|
4912
|
-
const { owner, ...rest } = input;
|
|
4913
|
-
return await ctx.remote.agentTeams.updateTask(leadSessionId(sessionId), {
|
|
4914
|
-
...rest,
|
|
4915
|
-
...owner === void 0 ? {} : { owner }
|
|
4916
|
-
});
|
|
4917
|
-
},
|
|
4918
|
-
async openTeammate(sessionId, member) {
|
|
4484
|
+
openTeammate(sessionId, member) {
|
|
4919
4485
|
if (member.role !== "teammate") return;
|
|
4920
4486
|
const parentSessionId = leadSessionId(sessionId);
|
|
4921
|
-
await sessions.refreshSubagents(parentSessionId);
|
|
4922
4487
|
if ((sessions.retainInfo(sessionId).getSnapshot().retainedBy.mainView ?? 0) === 0) return;
|
|
4923
4488
|
ctx.uiWorkspace.openSession({
|
|
4924
4489
|
parentSessionId,
|
|
@@ -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
|
},
|
|
@@ -40,41 +41,43 @@
|
|
|
40
41
|
},
|
|
41
42
|
"license": "MIT",
|
|
42
43
|
"peerDependencies": {
|
|
43
|
-
"@deepseek-ai/dsh-api-
|
|
44
|
-
"@deepseek-ai/dsh-
|
|
45
|
-
"@deepseek-ai/dsh-
|
|
46
|
-
"@deepseek-ai/dsh-client-ui-
|
|
47
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.
|
|
48
|
-
"@deepseek-ai/dsh-client-ui-
|
|
49
|
-
"@deepseek-ai/dsh-client-ui-
|
|
50
|
-
"@deepseek-ai/dsh-client-ui-
|
|
51
|
-
"@deepseek-ai/dsh-
|
|
52
|
-
"@deepseek-ai/dsh-
|
|
53
|
-
"@deepseek-ai/dsh-
|
|
54
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.
|
|
55
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
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"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"@testing-library/react": "^16.1.0",
|
|
59
60
|
"@types/react": "~18.3.1",
|
|
61
|
+
"@types/react-dom": "~18.3.0",
|
|
60
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-session": "^0.1.
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-
|
|
70
|
-
"@deepseek-ai/dsh-client-ui-
|
|
71
|
-
"@deepseek-ai/dsh-
|
|
72
|
-
"@deepseek-ai/dsh-
|
|
73
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.
|
|
74
|
-
"@deepseek-ai/
|
|
75
|
-
"@deepseek-ai/
|
|
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"
|
|
76
78
|
},
|
|
77
79
|
"files": [
|
|
80
|
+
"locale/*.json",
|
|
78
81
|
"lib/index.js",
|
|
79
82
|
"lib/client.js",
|
|
80
83
|
"lib/types/**/*.d.ts"
|