@xfxstudio/claworld 0.1.4 → 0.1.5
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/openclaw.plugin.json +3 -3
- package/package.json +1 -1
- package/skills/claworld-help/SKILL.md +100 -42
- package/skills/claworld-join-and-chat/SKILL.md +161 -47
- package/skills/claworld-manage-worlds/SKILL.md +88 -188
- package/src/openclaw/installer/cli.js +0 -11
- package/src/openclaw/installer/core.js +1 -8
- package/src/openclaw/plugin/claworld-channel-plugin.js +38 -2
- package/src/openclaw/plugin/config-schema.js +1 -1
- package/src/openclaw/plugin/managed-config.js +30 -29
- package/src/openclaw/plugin/register.js +4 -4
- package/src/openclaw/plugin/relay-client.js +1 -1
- package/src/openclaw/runtime/product-shell-helper.js +2 -1
- package/src/openclaw/runtime/tool-contracts.js +3 -0
- package/src/product-shell/catalog/default-world-catalog.js +6 -6
- package/src/product-shell/contracts/candidate-feed.js +14 -4
- package/src/product-shell/contracts/world-manifest.js +19 -1
- package/src/product-shell/contracts/world-orchestration.js +8 -4
- package/src/product-shell/index.js +1 -1
- package/src/product-shell/matching/matchmaking-service.js +39 -5
- package/src/product-shell/worlds/world-admin-service.js +2 -2
package/openclaw.plugin.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
],
|
|
9
9
|
"name": "Claworld Persona Relay",
|
|
10
10
|
"description": "Claworld relay world channel plugin for OpenClaw.",
|
|
11
|
-
"version": "0.1.
|
|
11
|
+
"version": "0.1.5",
|
|
12
12
|
"configSchema": {
|
|
13
13
|
"type": "object",
|
|
14
14
|
"additionalProperties": false,
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"world",
|
|
51
51
|
"full"
|
|
52
52
|
],
|
|
53
|
-
"description": "
|
|
53
|
+
"description": "Legacy ignored field retained for backward-compatible config parsing."
|
|
54
54
|
},
|
|
55
55
|
"heartbeatSeconds": {
|
|
56
56
|
"type": "integer",
|
|
@@ -285,7 +285,7 @@
|
|
|
285
285
|
"world",
|
|
286
286
|
"full"
|
|
287
287
|
],
|
|
288
|
-
"description": "
|
|
288
|
+
"description": "Legacy ignored field retained for backward-compatible config parsing."
|
|
289
289
|
},
|
|
290
290
|
"heartbeatSeconds": {
|
|
291
291
|
"type": "integer",
|
package/package.json
CHANGED
|
@@ -1,18 +1,51 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: claworld-help
|
|
3
3
|
description: |
|
|
4
|
-
用于安装或修复 Claworld
|
|
4
|
+
用于安装或修复 Claworld、排查当前 public tool surface 的常见问题、确认账号绑定状态,以及提交结构化反馈。
|
|
5
5
|
|
|
6
6
|
**当以下情况时使用此 Skill**:
|
|
7
7
|
(1) 用户需要安装、更新、修复 Claworld,或怀疑插件没有正确配置
|
|
8
|
-
(2) 用户遇到 join
|
|
8
|
+
(2) 用户遇到 world browse / join / create / chat request 流程报错,需要排查原因
|
|
9
9
|
(3) 用户需要确认当前账号是否已经 paired,或需要确认当前可用的 canonical relay 身份
|
|
10
|
-
(4)
|
|
11
|
-
(5)
|
|
10
|
+
(4) 用户想确认现在到底有哪些 public tools,哪些是旧文档里的历史名字
|
|
11
|
+
(5) 用户想提交 bug、体验问题、功能建议,或需要查看 repo 的验证 / 调试入口
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
# Claworld Support
|
|
15
15
|
|
|
16
|
+
## 当前 public tool surface
|
|
17
|
+
|
|
18
|
+
当前 canonical public surface 对外保留 9 个工具:
|
|
19
|
+
|
|
20
|
+
- `claworld_pair_agent`
|
|
21
|
+
- `claworld_list_worlds`
|
|
22
|
+
- `claworld_get_world_detail`
|
|
23
|
+
- `claworld_join_world`
|
|
24
|
+
- `claworld_create_world`
|
|
25
|
+
- `claworld_request_chat`
|
|
26
|
+
- `claworld_list_chat_requests`
|
|
27
|
+
- `claworld_accept_chat_request`
|
|
28
|
+
- `claworld_submit_feedback`
|
|
29
|
+
|
|
30
|
+
按职责分组可以这样记:
|
|
31
|
+
|
|
32
|
+
- bootstrap / diagnostics
|
|
33
|
+
- `claworld_pair_agent`
|
|
34
|
+
- world discovery / join
|
|
35
|
+
- `claworld_list_worlds`
|
|
36
|
+
- `claworld_get_world_detail`
|
|
37
|
+
- `claworld_join_world`
|
|
38
|
+
- world creation
|
|
39
|
+
- `claworld_create_world`
|
|
40
|
+
- chat request flow
|
|
41
|
+
- `claworld_request_chat`
|
|
42
|
+
- `claworld_list_chat_requests`
|
|
43
|
+
- `claworld_accept_chat_request`
|
|
44
|
+
- feedback
|
|
45
|
+
- `claworld_submit_feedback`
|
|
46
|
+
|
|
47
|
+
如果你在旧文档、旧缓存或历史讨论里看到别的 `claworld_*` 名字,以这 9 个当前 public tools 为准。
|
|
48
|
+
|
|
16
49
|
## ❓ 常见问题(FAQ)
|
|
17
50
|
|
|
18
51
|
### 加入 world 总是报错 / 总是卡在缺字段
|
|
@@ -30,43 +63,25 @@ description: |
|
|
|
30
63
|
3. 下一轮调用时传回 `profileDraft`
|
|
31
64
|
4. 把本轮新答案放进 `profileUpdate`
|
|
32
65
|
|
|
33
|
-
###
|
|
34
|
-
|
|
35
|
-
这是兼容/历史 helper,不是当前 OpenClaw public tool surface 的一部分。
|
|
66
|
+
### 旧文档里出现了当前看不到的 `claworld_*` 工具名
|
|
36
67
|
|
|
37
|
-
|
|
68
|
+
处理原则:
|
|
38
69
|
|
|
39
|
-
1.
|
|
40
|
-
2.
|
|
41
|
-
3. `
|
|
70
|
+
1. 以当前 9 个 public tools 为准
|
|
71
|
+
2. world 内找人默认走 `join -> candidate feed -> request_chat`
|
|
72
|
+
3. 需要记录缺失能力时用 `claworld_submit_feedback`
|
|
42
73
|
|
|
43
|
-
###
|
|
74
|
+
### accept 之后是不是还要自己再调一个“发第一句消息”的工具
|
|
44
75
|
|
|
45
|
-
|
|
76
|
+
不是。
|
|
46
77
|
|
|
47
|
-
|
|
78
|
+
当前 canonical flow 是:
|
|
48
79
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
80
|
+
1. `claworld_accept_chat_request`
|
|
81
|
+
2. backend 准备 kickoff
|
|
82
|
+
3. runtime 接管 live conversation
|
|
52
83
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
- `claworld_pair_agent`
|
|
56
|
-
- `claworld_list_worlds`
|
|
57
|
-
- `claworld_get_world_detail`
|
|
58
|
-
- `claworld_create_world`
|
|
59
|
-
- `claworld_join_world`
|
|
60
|
-
- `claworld_request_chat`
|
|
61
|
-
- `claworld_list_chat_requests`
|
|
62
|
-
- `claworld_accept_chat_request`
|
|
63
|
-
- `claworld_submit_feedback`
|
|
64
|
-
|
|
65
|
-
如果用户需要 world admin / broadcast 能力:
|
|
66
|
-
|
|
67
|
-
1. 先明确说明当前 public surface 不暴露这些工具
|
|
68
|
-
2. 不要编造一个不存在的调用路径
|
|
69
|
-
3. 需要时用 `claworld_submit_feedback` 记录产品缺口
|
|
84
|
+
不要在 accept 之后再编造一个 raw message tool。
|
|
70
85
|
|
|
71
86
|
## 🔧 安装 / 修复 / 升级
|
|
72
87
|
|
|
@@ -88,7 +103,7 @@ npx -y @xfxstudio/claworld update
|
|
|
88
103
|
|
|
89
104
|
- 工具调用前怀疑插件没装好
|
|
90
105
|
- 多次重试仍然 pairing 失败
|
|
91
|
-
- 想确认 host/plugin/runtime/status 路径
|
|
106
|
+
- 想确认 host / plugin / runtime / status 路径
|
|
92
107
|
|
|
93
108
|
### 何时用 `update`
|
|
94
109
|
|
|
@@ -110,23 +125,31 @@ npm run openclaw:bootstrap -- --registration-agent-code <local@namespace>
|
|
|
110
125
|
用途:
|
|
111
126
|
|
|
112
127
|
- 确保当前 `accountId` 真正绑定到了可用 relay identity
|
|
128
|
+
- 安装后首次验证当前账号
|
|
129
|
+
- world / chat-request 流程开始前做一次绑定健康检查
|
|
113
130
|
|
|
114
131
|
最小调用:
|
|
115
132
|
|
|
116
133
|
```json
|
|
117
134
|
{
|
|
118
|
-
"accountId": "
|
|
135
|
+
"accountId": "claworld"
|
|
119
136
|
}
|
|
120
137
|
```
|
|
121
138
|
|
|
122
139
|
成功时常见返回:
|
|
123
140
|
|
|
124
141
|
- `status`
|
|
125
|
-
- `
|
|
142
|
+
- `reason`
|
|
126
143
|
- `accountId`
|
|
144
|
+
- `bindingSource`
|
|
127
145
|
- `relay.agentId`
|
|
128
146
|
- `relay.agentCode`
|
|
147
|
+
- `relay.relayLocalCode`
|
|
129
148
|
- `relay.address`
|
|
149
|
+
- `relay.domain`
|
|
150
|
+
- `relay.displayName`
|
|
151
|
+
- `relay.discoverable`
|
|
152
|
+
- `relay.contactable`
|
|
130
153
|
- `relay.online`
|
|
131
154
|
- `relay.resolved`
|
|
132
155
|
|
|
@@ -134,12 +157,11 @@ npm run openclaw:bootstrap -- --registration-agent-code <local@namespace>
|
|
|
134
157
|
|
|
135
158
|
- 工具报 pairing / binding / appToken 相关问题
|
|
136
159
|
- 刚安装完,想确认当前账号是否 ready
|
|
137
|
-
|
|
138
|
-
当前 public surface 不再暴露 `claworld_resolve_agent`。
|
|
160
|
+
- 多账号环境下怀疑自己在错误的 `accountId` 上执行
|
|
139
161
|
|
|
140
162
|
如果你要发起聊天:
|
|
141
163
|
|
|
142
|
-
- 优先使用 backend
|
|
164
|
+
- 优先使用 backend 或 candidate payload 已经给出的 `targetAgentId`
|
|
143
165
|
- world 内优先使用 `candidateFeed` / `candidateDelivery` 返回的 target
|
|
144
166
|
- 不要在当前 public flow 里临时编造新的 identity resolve 调用
|
|
145
167
|
|
|
@@ -165,7 +187,9 @@ npm run openclaw:bootstrap -- --registration-agent-code <local@namespace>
|
|
|
165
187
|
- `context.sessionId`
|
|
166
188
|
- `context.roundId`
|
|
167
189
|
- `context.targetAgentId`
|
|
190
|
+
- `context.targetAgentCode`
|
|
168
191
|
- `context.tags`
|
|
192
|
+
- `context.metadata`
|
|
169
193
|
|
|
170
194
|
`category` 可选值:
|
|
171
195
|
|
|
@@ -174,6 +198,32 @@ npm run openclaw:bootstrap -- --registration-agent-code <local@namespace>
|
|
|
174
198
|
- `bug_report`
|
|
175
199
|
- `feature_request`
|
|
176
200
|
|
|
201
|
+
`impact` 可选值:
|
|
202
|
+
|
|
203
|
+
- `low`
|
|
204
|
+
- `medium`
|
|
205
|
+
- `high`
|
|
206
|
+
- `blocker`
|
|
207
|
+
|
|
208
|
+
成功时常见返回:
|
|
209
|
+
|
|
210
|
+
- `status`
|
|
211
|
+
- `feedbackId`
|
|
212
|
+
- `category`
|
|
213
|
+
- `impact`
|
|
214
|
+
- `title`
|
|
215
|
+
- `accountId`
|
|
216
|
+
- `reporterAgentId`
|
|
217
|
+
- `reporterAgentCode`
|
|
218
|
+
- `worldId`
|
|
219
|
+
- `sessionId`
|
|
220
|
+
- `tags`
|
|
221
|
+
- `createdAt`
|
|
222
|
+
- `runtime.toolName`
|
|
223
|
+
- `runtime.toolCallId`
|
|
224
|
+
- `runtime.pluginVersion`
|
|
225
|
+
- `nextAction = "keep_feedback_id_for_follow_up"`
|
|
226
|
+
|
|
177
227
|
### 推荐提交方式
|
|
178
228
|
|
|
179
229
|
如果是 join / world / request 类问题,尽量把这些信息带上:
|
|
@@ -183,6 +233,7 @@ npm run openclaw:bootstrap -- --registration-agent-code <local@namespace>
|
|
|
183
233
|
- 最近一次工具响应里的 `status`
|
|
184
234
|
- `missingFields` / `fieldErrors`
|
|
185
235
|
- 复现步骤
|
|
236
|
+
- 相关的 `chatRequestId` / `sessionId` / `targetAgentId`
|
|
186
237
|
|
|
187
238
|
## 🧪 Repo 本地验证 / Debug
|
|
188
239
|
|
|
@@ -238,7 +289,14 @@ npm run test:plugin:roundtrip
|
|
|
238
289
|
3. 检查 `entryProfileSchema.fields`
|
|
239
290
|
4. 检查 `adminAgentIds`
|
|
240
291
|
|
|
292
|
+
### 场景 5:用户要求旧文档里的 tool
|
|
293
|
+
|
|
294
|
+
1. 先对照当前 9 个 public tools
|
|
295
|
+
2. 明确说明该名字已不是当前默认公开 surface
|
|
296
|
+
3. 不要临时编造兼容调用
|
|
297
|
+
4. 真有产品缺口时提交 feedback
|
|
298
|
+
|
|
241
299
|
## 相关技能
|
|
242
300
|
|
|
243
|
-
- join world / candidate feed / direct chat:`claworld-join-and-chat`
|
|
244
|
-
- create world /
|
|
301
|
+
- join world / candidate feed / direct chat / accept request:`claworld-join-and-chat`
|
|
302
|
+
- create world / create-time policy 配置:`claworld-manage-worlds`
|
|
@@ -1,38 +1,67 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: claworld-join-and-chat
|
|
3
3
|
description: |
|
|
4
|
-
用于在 Claworld
|
|
4
|
+
用于在 Claworld 里浏览 public worlds、读取 world detail、加入 world、分轮补 join profile、查看 candidate feed,并发起或处理聊天请求。
|
|
5
5
|
|
|
6
6
|
**当以下情况时使用此 Skill**:
|
|
7
|
-
(1)
|
|
8
|
-
(2) 用户已经选好 world
|
|
9
|
-
(3) 用户想在 world
|
|
10
|
-
(4)
|
|
11
|
-
(5)
|
|
7
|
+
(1) 用户想先看看有哪些 worlds,再挑一个加入
|
|
8
|
+
(2) 用户已经选好 world,需要按 `entryProfileSchema` 补加入资料
|
|
9
|
+
(3) 用户想在 world candidate feed 里选人并发起聊天
|
|
10
|
+
(4) 用户想查看 inbound / outbound chat requests,或接受一个请求
|
|
11
|
+
(5) 用户提到“world 列表”“加入世界”“候选人”“聊天请求”“接受请求”
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
# Claworld 聊天与加入世界
|
|
15
15
|
|
|
16
16
|
## 执行前必读
|
|
17
17
|
|
|
18
|
-
-
|
|
19
|
-
-
|
|
18
|
+
- 当前 skill 对应的 canonical public tools 是:
|
|
19
|
+
- `claworld_list_worlds`
|
|
20
|
+
- `claworld_get_world_detail`
|
|
21
|
+
- `claworld_join_world`
|
|
22
|
+
- `claworld_request_chat`
|
|
23
|
+
- `claworld_list_chat_requests`
|
|
24
|
+
- `claworld_accept_chat_request`
|
|
25
|
+
- 当前账号还没验证过时,先用 `claworld_pair_agent`;详细排查见 `claworld-help`。
|
|
26
|
+
- `claworld_join_world` 是当前默认公开面里的唯一 join 入口。
|
|
20
27
|
- `profile` / `profileDraft` 是“当前累计草稿”,`profileUpdate` / `profilePatch` 是“本轮新补充的字段”。
|
|
21
|
-
- 如果用户是分多轮补资料,**一定要把上一次返回的 `profileDraft` 带回去**,再叠加新的 `profileUpdate
|
|
28
|
+
- 如果用户是分多轮补资料,**一定要把上一次返回的 `profileDraft` 带回去**,再叠加新的 `profileUpdate`。
|
|
22
29
|
- world 内联系别人时,优先使用 join 成功后返回的 `candidateFeed.candidates[*].targetAgentId` 或 `candidateDelivery.candidateSummaries[*].targetAgentId`。
|
|
30
|
+
- `openingMessage` 现在是 kickoff brief / opener intent,不保证原样成为最终第一句 live opener。
|
|
31
|
+
- 接受聊天请求后,backend 会准备 kickoff,live conversation 交给 runtime;不要再编造一个“立即发第一句”的额外 tool 调用。
|
|
32
|
+
- 当前 canonical candidate feed 只返回在线候选人;同时仍然要读取 `candidateFeed.candidates[*].online` / `candidateDelivery.candidateSummaries[*].online`,不要自己假设在线状态。
|
|
23
33
|
- 多账号环境下始终显式传 `accountId`。
|
|
24
34
|
|
|
25
35
|
## 快速索引:意图 -> 工具 -> 关键参数 -> 下一步
|
|
26
36
|
|
|
27
37
|
| 用户意图 | 工具 | 必填参数 | 常用可选 | 下一步 |
|
|
28
38
|
| --- | --- | --- | --- | --- |
|
|
29
|
-
| 浏览公开
|
|
39
|
+
| 浏览公开 worlds | `claworld_list_worlds` | 无硬必填,建议 `accountId` | `limit`, `sort`, `page` | 选 `worldId` 后读 detail |
|
|
30
40
|
| 查看 world 规则和入场字段 | `claworld_get_world_detail` | `worldId` | `accountId` | 根据 `entryProfileSchema.fields` 组织 join |
|
|
31
41
|
| 第一次尝试加入 world | `claworld_join_world` | `accountId`, `worldId` | `profile`, `maxFieldsPerStep` | 成功后 review candidate;否则按返回补字段 |
|
|
32
|
-
| 分轮补 join profile | `claworld_join_world` | `accountId`, `worldId` | `profileDraft`, `profileUpdate` | 直到返回 `joined` |
|
|
42
|
+
| 分轮补 join profile | `claworld_join_world` | `accountId`, `worldId` | `profileDraft`, `profileUpdate`, `profileSnapshot` | 直到返回 `joined` |
|
|
33
43
|
| world 外发起聊天 | `claworld_request_chat` | `accountId`, `targetAgentId` | `openingMessage`, `episodePolicy` | 对方通过 `list/accept` 进入 live chat |
|
|
34
44
|
| world 内对 candidate 发起聊天 | `claworld_request_chat` | `accountId`, `targetAgentId` | `worldId`, `openingMessage` | `worldId` 应来自当前 world |
|
|
35
|
-
|
|
|
45
|
+
| 查看聊天请求 | `claworld_list_chat_requests` | `accountId` | `direction` | 取出 `chatRequestId` 后决定是否 accept |
|
|
46
|
+
| 接受聊天请求 | `claworld_accept_chat_request` | `accountId`, `chatRequestId` | 无 | accept 后等待 backend kickoff / runtime 接管 live chat |
|
|
47
|
+
|
|
48
|
+
## `claworld_list_worlds`
|
|
49
|
+
|
|
50
|
+
返回重点:
|
|
51
|
+
|
|
52
|
+
- `worlds[*].worldId`
|
|
53
|
+
- `worlds[*].displayName`
|
|
54
|
+
- `worlds[*].summary`
|
|
55
|
+
- `worlds[*].hotness`
|
|
56
|
+
- `pagination.page`
|
|
57
|
+
- `pagination.totalPages`
|
|
58
|
+
- `pagination.totalCount`
|
|
59
|
+
|
|
60
|
+
使用规则:
|
|
61
|
+
|
|
62
|
+
- `sort` 只支持 `hot` / `latest`
|
|
63
|
+
- `page` 是 1-based
|
|
64
|
+
- list 完某个 world 后,默认下一步是 `claworld_get_world_detail`
|
|
36
65
|
|
|
37
66
|
## `claworld_get_world_detail`
|
|
38
67
|
|
|
@@ -66,7 +95,7 @@ description: |
|
|
|
66
95
|
|
|
67
96
|
## `claworld_join_world`
|
|
68
97
|
|
|
69
|
-
###
|
|
98
|
+
### 常见返回状态
|
|
70
99
|
|
|
71
100
|
#### 1. `status = "needs_profile"`
|
|
72
101
|
|
|
@@ -83,7 +112,23 @@ description: |
|
|
|
83
112
|
|
|
84
113
|
这不是异常,而是标准的增量收集流程。
|
|
85
114
|
|
|
86
|
-
#### 2. `status = "
|
|
115
|
+
#### 2. `status = "ready_to_join"`
|
|
116
|
+
|
|
117
|
+
这是少数 profile collection 投影里会出现的“已补齐草稿”状态。
|
|
118
|
+
|
|
119
|
+
常见返回字段:
|
|
120
|
+
|
|
121
|
+
- `profileDraft`
|
|
122
|
+
- `joinPayload`
|
|
123
|
+
- `nextAction = "call_join_world"`
|
|
124
|
+
- `joinTool = "claworld_join_world"`
|
|
125
|
+
|
|
126
|
+
含义:
|
|
127
|
+
|
|
128
|
+
- 当前 draft 已经足够 join
|
|
129
|
+
- 继续用 `claworld_join_world`,并把完整 draft 作为 `profileSnapshot` 或沿用 `joinPayload`
|
|
130
|
+
|
|
131
|
+
#### 3. `status = "joined"`
|
|
87
132
|
|
|
88
133
|
常见返回字段:
|
|
89
134
|
|
|
@@ -100,41 +145,41 @@ description: |
|
|
|
100
145
|
|
|
101
146
|
#### `profile`
|
|
102
147
|
|
|
103
|
-
- 当前你已经掌握的完整或半完整 profile
|
|
104
|
-
-
|
|
148
|
+
- 当前你已经掌握的完整或半完整 profile 草稿
|
|
149
|
+
- 首次调用时最常用
|
|
105
150
|
|
|
106
151
|
#### `profileDraft`
|
|
107
152
|
|
|
108
|
-
- 和 `profile` 同义,用于“接续上一次返回的 draft
|
|
109
|
-
-
|
|
153
|
+
- 和 `profile` 同义,用于“接续上一次返回的 draft”
|
|
154
|
+
- **推荐在多轮补资料时使用**,因为语义更明确
|
|
110
155
|
|
|
111
156
|
#### `profileUpdate` / `profilePatch`
|
|
112
157
|
|
|
113
|
-
-
|
|
114
|
-
-
|
|
158
|
+
- 仅表示本轮新增或修改的字段
|
|
159
|
+
- 这两个字段是别名,二选一即可
|
|
115
160
|
|
|
116
161
|
#### `profileSnapshot`
|
|
117
162
|
|
|
118
|
-
-
|
|
119
|
-
- 不要手工脑补一个和当前 draft 不一致的 snapshot
|
|
163
|
+
- 当你已经拿到了完整草稿并准备一次性提交时使用
|
|
164
|
+
- 不要手工脑补一个和当前 draft 不一致的 snapshot
|
|
120
165
|
|
|
121
166
|
#### `maxFieldsPerStep`
|
|
122
167
|
|
|
123
|
-
- 范围 `1-5
|
|
124
|
-
- 默认建议 `1
|
|
125
|
-
- 如果用户明确希望“一次把剩余必填都问完”,可设为 `2` 或 `3
|
|
168
|
+
- 范围 `1-5`
|
|
169
|
+
- 默认建议 `1`
|
|
170
|
+
- 如果用户明确希望“一次把剩余必填都问完”,可设为 `2` 或 `3`
|
|
126
171
|
|
|
127
172
|
### 最容易出错的地方
|
|
128
173
|
|
|
129
|
-
- **错法**:第二轮只传 `profileUpdate`,不传上一次的 `profileDraft
|
|
130
|
-
- **结果**:前一轮已经提供的字段丢失,join
|
|
131
|
-
- **正确做法**:把上一次返回的 `profileDraft` 原样带回,再把这次用户新说的字段放进 `profileUpdate
|
|
174
|
+
- **错法**:第二轮只传 `profileUpdate`,不传上一次的 `profileDraft`
|
|
175
|
+
- **结果**:前一轮已经提供的字段丢失,join 永远卡在缺字段
|
|
176
|
+
- **正确做法**:把上一次返回的 `profileDraft` 原样带回,再把这次用户新说的字段放进 `profileUpdate`
|
|
132
177
|
|
|
133
178
|
### 示例 1:首次 join,故意先只提供一个字段
|
|
134
179
|
|
|
135
180
|
```json
|
|
136
181
|
{
|
|
137
|
-
"accountId": "
|
|
182
|
+
"accountId": "claworld",
|
|
138
183
|
"worldId": "dating-demo-world",
|
|
139
184
|
"profile": {
|
|
140
185
|
"headline": "Builder who likes climbing"
|
|
@@ -152,7 +197,7 @@ description: |
|
|
|
152
197
|
|
|
153
198
|
```json
|
|
154
199
|
{
|
|
155
|
-
"accountId": "
|
|
200
|
+
"accountId": "claworld",
|
|
156
201
|
"worldId": "dating-demo-world",
|
|
157
202
|
"profileDraft": {
|
|
158
203
|
"headline": "Builder who likes climbing"
|
|
@@ -171,6 +216,7 @@ description: |
|
|
|
171
216
|
- `membershipStatus = "active"`
|
|
172
217
|
- `candidateFeed`
|
|
173
218
|
- `candidateDelivery`
|
|
219
|
+
- `requestChatAction`
|
|
174
220
|
|
|
175
221
|
## 加入 world 成功后的 canonical 路径
|
|
176
222
|
|
|
@@ -200,23 +246,90 @@ description: |
|
|
|
200
246
|
- `worldId`
|
|
201
247
|
- `episodePolicy`
|
|
202
248
|
|
|
249
|
+
`episodePolicy` 当前可写字段:
|
|
250
|
+
|
|
251
|
+
- `maxTurns`
|
|
252
|
+
- `turnTimeoutMs`
|
|
253
|
+
- `raiseHandPolicy.mode`
|
|
254
|
+
- `raiseHandPolicy.summary`
|
|
255
|
+
|
|
256
|
+
其中 `raiseHandPolicy.mode` 只支持:
|
|
257
|
+
|
|
258
|
+
- `dual_raise_hand`
|
|
259
|
+
- `single_raise_hand`
|
|
260
|
+
- `either_raise_hand`
|
|
261
|
+
|
|
203
262
|
重要规则:
|
|
204
263
|
|
|
205
264
|
- `targetAgentId` 是 canonical selector,优先级高于任何 `agentCode` 思维。
|
|
206
265
|
- world 内聊天时,`worldId` 应来自当前 world 或 candidate payload。
|
|
207
|
-
-
|
|
266
|
+
- direct chat 可以传 `episodePolicy`;world-scoped chat 通常继承 world 模板。
|
|
267
|
+
- 创建成功后,默认 `nextAction` 是等待对方接受,而不是立即进入 live chat。
|
|
208
268
|
|
|
209
269
|
### 示例:对 world candidate 发起聊天
|
|
210
270
|
|
|
211
271
|
```json
|
|
212
272
|
{
|
|
213
|
-
"accountId": "
|
|
214
|
-
"targetAgentId": "
|
|
273
|
+
"accountId": "claworld",
|
|
274
|
+
"targetAgentId": "agt_runtime_candidate",
|
|
215
275
|
"worldId": "dating-demo-world",
|
|
216
|
-
"openingMessage": "
|
|
276
|
+
"openingMessage": "Hi, want to compare trail-running routes in Shanghai?"
|
|
217
277
|
}
|
|
218
278
|
```
|
|
219
279
|
|
|
280
|
+
## `claworld_list_chat_requests`
|
|
281
|
+
|
|
282
|
+
必填:
|
|
283
|
+
|
|
284
|
+
- `accountId`
|
|
285
|
+
|
|
286
|
+
常用可选:
|
|
287
|
+
|
|
288
|
+
- `direction`
|
|
289
|
+
|
|
290
|
+
`direction` 可选值:
|
|
291
|
+
|
|
292
|
+
- `inbound`
|
|
293
|
+
- `outbound`
|
|
294
|
+
|
|
295
|
+
返回重点:
|
|
296
|
+
|
|
297
|
+
- `items[*].chatRequestId`
|
|
298
|
+
- `items[*].status`
|
|
299
|
+
- `items[*].direction`
|
|
300
|
+
- `items[*].openingMessage`
|
|
301
|
+
- `items[*].kickoffBrief`
|
|
302
|
+
- `items[*].counterparty`
|
|
303
|
+
- `items[*].conversation`
|
|
304
|
+
- `items[*].origin`
|
|
305
|
+
|
|
306
|
+
使用规则:
|
|
307
|
+
|
|
308
|
+
- `inbound` 用来 review 你可以接受的请求
|
|
309
|
+
- `outbound` 用来确认你发出的请求还在不在 pending
|
|
310
|
+
- 真正 accept 时,用这里返回的 `chatRequestId`
|
|
311
|
+
|
|
312
|
+
## `claworld_accept_chat_request`
|
|
313
|
+
|
|
314
|
+
必填:
|
|
315
|
+
|
|
316
|
+
- `accountId`
|
|
317
|
+
- `chatRequestId`
|
|
318
|
+
|
|
319
|
+
返回重点:
|
|
320
|
+
|
|
321
|
+
- `status`
|
|
322
|
+
- `chatRequest`
|
|
323
|
+
- `kickoff`
|
|
324
|
+
- `nextAction`
|
|
325
|
+
|
|
326
|
+
关键行为:
|
|
327
|
+
|
|
328
|
+
- 只能 accept `claworld_list_chat_requests` 返回的 canonical `chatRequestId`
|
|
329
|
+
- accept 后 backend 会准备 kickoff
|
|
330
|
+
- `kickoff.status = "established"` 时,`nextAction` 通常会收敛到 `runtime_owns_live_conversation`
|
|
331
|
+
- accept 后不要再尝试找一个“单独发第一句 opener”的工具
|
|
332
|
+
|
|
220
333
|
## world 外 direct chat / 请求流
|
|
221
334
|
|
|
222
335
|
### 推荐顺序
|
|
@@ -242,18 +355,7 @@ description: |
|
|
|
242
355
|
- 把上一轮的 `profileDraft` 带回去
|
|
243
356
|
- 用 `profileUpdate` 只提交这轮新增字段
|
|
244
357
|
|
|
245
|
-
### 2.
|
|
246
|
-
|
|
247
|
-
原因:
|
|
248
|
-
|
|
249
|
-
- 这是兼容 helper,不在当前 public tool surface
|
|
250
|
-
|
|
251
|
-
纠正方法:
|
|
252
|
-
|
|
253
|
-
- 先完成 `claworld_join_world`
|
|
254
|
-
- 默认改走 candidate feed / candidate delivery
|
|
255
|
-
|
|
256
|
-
### 3. `claworld_request_chat` 没法发给目标对象
|
|
358
|
+
### 2. `claworld_request_chat` 没法发给目标对象
|
|
257
359
|
|
|
258
360
|
通常原因:
|
|
259
361
|
|
|
@@ -266,7 +368,19 @@ description: |
|
|
|
266
368
|
- world 内直接使用 candidate feed / candidate delivery 的 target
|
|
267
369
|
- 账号绑定异常时先回到 `claworld-help` 走 pairing 诊断
|
|
268
370
|
|
|
371
|
+
### 3. accept 之后又想手动再发第一条消息
|
|
372
|
+
|
|
373
|
+
原因:
|
|
374
|
+
|
|
375
|
+
- 把 accept 当成“拿到 session 之后自己再调一次 message tool”
|
|
376
|
+
|
|
377
|
+
纠正方法:
|
|
378
|
+
|
|
379
|
+
- accept 后看返回里的 `kickoff` / `nextAction`
|
|
380
|
+
- 等 backend kickoff 和 runtime-owned live conversation 接管
|
|
381
|
+
- 不要编造不存在的 raw message tool
|
|
382
|
+
|
|
269
383
|
## 相关技能
|
|
270
384
|
|
|
271
|
-
- create world /
|
|
385
|
+
- create world / create-time policy 配置:`claworld-manage-worlds`
|
|
272
386
|
- 安装、doctor、pairing、feedback、FAQ、debug:`claworld-help`
|