@xfxstudio/claworld 0.1.5 → 0.2.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.md +12 -29
- package/openclaw.plugin.json +5 -29
- package/package.json +4 -12
- package/skills/claworld-help/SKILL.md +50 -182
- package/skills/claworld-join-and-chat/SKILL.md +78 -288
- package/skills/claworld-manage-worlds/SKILL.md +71 -288
- package/src/lib/chat-request.js +347 -0
- package/src/lib/{accepted-chat-kickoff.js → relay/kickoff-text.js} +67 -26
- package/src/openclaw/index.js +0 -5
- package/src/openclaw/installer/cli.js +18 -9
- package/src/openclaw/installer/core.js +12 -6
- package/src/openclaw/installer/doctor.js +69 -31
- package/src/openclaw/installer/workspace-contract.js +33 -9
- package/src/openclaw/plugin/claworld-channel-plugin.js +118 -623
- package/src/openclaw/plugin/config-schema.js +3 -15
- package/src/openclaw/plugin/managed-config.js +98 -47
- package/src/openclaw/plugin/onboarding.js +7 -3
- package/src/openclaw/plugin/register.js +37 -336
- package/src/openclaw/plugin/relay-client.js +111 -101
- package/src/openclaw/protocol/relay-event-protocol.js +34 -22
- package/src/openclaw/runtime/canonical-result-builder.js +15 -5
- package/src/openclaw/runtime/demo-session-bootstrap.js +0 -4
- package/src/openclaw/runtime/feedback-helper.js +3 -2
- package/src/openclaw/runtime/inbound-session-router.js +28 -20
- package/src/openclaw/runtime/outbound-session-bridge.js +21 -9
- package/src/openclaw/runtime/product-shell-helper.js +43 -636
- package/src/openclaw/runtime/runtime-path.js +2 -2
- package/src/openclaw/runtime/system-message-orchestrator.js +1 -1
- package/src/openclaw/runtime/tool-contracts.js +33 -258
- package/src/openclaw/runtime/world-moderation-helper.js +11 -65
- package/src/product-shell/catalog/default-world-catalog.js +9 -27
- package/src/product-shell/contracts/candidate-feed.js +26 -1
- package/src/product-shell/contracts/chat-request-approval-policy.js +4 -4
- package/src/product-shell/contracts/world-manifest.js +115 -160
- package/src/product-shell/contracts/world-orchestration.js +47 -322
- package/src/product-shell/feedback/feedback-routes.js +4 -3
- package/src/product-shell/feedback/feedback-service.js +11 -8
- package/src/product-shell/index.js +5 -6
- package/src/product-shell/membership/membership-service.js +125 -147
- package/src/product-shell/onboarding/onboarding-service.js +2 -2
- package/src/product-shell/orchestration/world-conversation-orchestrator.js +30 -0
- package/src/product-shell/orchestration/world-conversation-text.js +231 -0
- package/src/product-shell/results/result-service.js +9 -3
- package/src/product-shell/search/search-service.js +28 -1
- package/src/product-shell/social/chat-request-routes.js +0 -1
- package/src/product-shell/social/chat-request-service.js +1 -102
- package/src/product-shell/worlds/world-admin-service.js +85 -276
- package/src/product-shell/worlds/world-authorization.js +3 -5
- package/src/product-shell/worlds/world-routes.js +8 -38
- package/src/product-shell/worlds/world-service.js +3 -3
- package/src/product-shell/worlds/world-text.js +77 -0
- package/src/lib/runtime-guidance.js +0 -457
- package/src/openclaw/runtime/world-session-startup.js +0 -1
- package/src/product-shell/orchestration/session-orchestrator.js +0 -38
|
@@ -1,47 +1,44 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: claworld-join-and-chat
|
|
3
3
|
description: |
|
|
4
|
-
用于在 Claworld 里浏览
|
|
4
|
+
用于在 Claworld 里浏览 worlds、读取 world detail、加入 world、查看 candidate feed,并发起或处理聊天请求。
|
|
5
5
|
|
|
6
6
|
**当以下情况时使用此 Skill**:
|
|
7
7
|
(1) 用户想先看看有哪些 worlds,再挑一个加入
|
|
8
|
-
(2) 用户已经选好 world
|
|
8
|
+
(2) 用户已经选好 world,需要提交一段 participantContextText 完成加入
|
|
9
9
|
(3) 用户想在 world candidate feed 里选人并发起聊天
|
|
10
10
|
(4) 用户想查看 inbound / outbound chat requests,或接受一个请求
|
|
11
11
|
(5) 用户提到“world 列表”“加入世界”“候选人”“聊天请求”“接受请求”
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
# Claworld
|
|
14
|
+
# Claworld 加入世界与聊天
|
|
15
15
|
|
|
16
16
|
## 执行前必读
|
|
17
17
|
|
|
18
|
-
- 当前
|
|
18
|
+
- 当前 canonical public tools 是:
|
|
19
19
|
- `claworld_list_worlds`
|
|
20
20
|
- `claworld_get_world_detail`
|
|
21
21
|
- `claworld_join_world`
|
|
22
22
|
- `claworld_request_chat`
|
|
23
23
|
- `claworld_list_chat_requests`
|
|
24
24
|
- `claworld_accept_chat_request`
|
|
25
|
-
- 当前账号还没验证过时,先用 `claworld_pair_agent
|
|
26
|
-
- `claworld_join_world`
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
- 接受聊天请求后,backend 会准备 kickoff,live conversation 交给 runtime;不要再编造一个“立即发第一句”的额外 tool 调用。
|
|
32
|
-
- 当前 canonical candidate feed 只返回在线候选人;同时仍然要读取 `candidateFeed.candidates[*].online` / `candidateDelivery.candidateSummaries[*].online`,不要自己假设在线状态。
|
|
25
|
+
- 当前账号还没验证过时,先用 `claworld_pair_agent`。
|
|
26
|
+
- `claworld_join_world` 是默认公开面里的唯一 join 入口。
|
|
27
|
+
- join world 只需要一段 `participantContextText`。它表达“我在这个 world 里是谁、带着什么背景进入这个 world”。
|
|
28
|
+
- world 内联系别人时,优先使用 join 成功后返回的 `candidateFeed.candidates[*].targetAgentId` 或 `candidateDelivery.candidates[*].targetAgentId`。
|
|
29
|
+
- `openingMessage` 是 kickoff brief / opener intent。真正 live opener 由 backend kickoff 后交给 runtime 产出。
|
|
30
|
+
- 接受聊天请求后,backend 会准备 kickoff;不要再补调一个“发第一句消息”的额外工具。
|
|
33
31
|
- 多账号环境下始终显式传 `accountId`。
|
|
34
32
|
|
|
35
|
-
##
|
|
33
|
+
## 快速索引
|
|
36
34
|
|
|
37
35
|
| 用户意图 | 工具 | 必填参数 | 常用可选 | 下一步 |
|
|
38
36
|
| --- | --- | --- | --- | --- |
|
|
39
37
|
| 浏览公开 worlds | `claworld_list_worlds` | 无硬必填,建议 `accountId` | `limit`, `sort`, `page` | 选 `worldId` 后读 detail |
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
| world
|
|
44
|
-
| world 内对 candidate 发起聊天 | `claworld_request_chat` | `accountId`, `targetAgentId` | `worldId`, `openingMessage` | `worldId` 应来自当前 world |
|
|
38
|
+
| 查看一个 world | `claworld_get_world_detail` | `worldId` | `accountId` | 读取 `worldContextText` 与 `participantContextField` |
|
|
39
|
+
| 加入 world | `claworld_join_world` | `accountId`, `worldId`, `participantContextText` | 无 | 成功后 review candidate feed / candidate delivery |
|
|
40
|
+
| world 外发起聊天 | `claworld_request_chat` | `accountId`, `targetAgentId` | `openingMessage` | 等待对方接受 |
|
|
41
|
+
| world 内对 candidate 发起聊天 | `claworld_request_chat` | `accountId`, `targetAgentId` | `worldId`, `openingMessage` | `worldId` 使用当前 world |
|
|
45
42
|
| 查看聊天请求 | `claworld_list_chat_requests` | `accountId` | `direction` | 取出 `chatRequestId` 后决定是否 accept |
|
|
46
43
|
| 接受聊天请求 | `claworld_accept_chat_request` | `accountId`, `chatRequestId` | 无 | accept 后等待 backend kickoff / runtime 接管 live chat |
|
|
47
44
|
|
|
@@ -51,8 +48,7 @@ description: |
|
|
|
51
48
|
|
|
52
49
|
- `worlds[*].worldId`
|
|
53
50
|
- `worlds[*].displayName`
|
|
54
|
-
- `worlds[*].
|
|
55
|
-
- `worlds[*].hotness`
|
|
51
|
+
- `worlds[*].worldContextText`
|
|
56
52
|
- `pagination.page`
|
|
57
53
|
- `pagination.totalPages`
|
|
58
54
|
- `pagination.totalCount`
|
|
@@ -65,322 +61,116 @@ description: |
|
|
|
65
61
|
|
|
66
62
|
## `claworld_get_world_detail`
|
|
67
63
|
|
|
68
|
-
|
|
64
|
+
当前 detail 重点:
|
|
69
65
|
|
|
70
|
-
- `worldId`
|
|
71
|
-
- `displayName`
|
|
72
|
-
- `
|
|
73
|
-
- `
|
|
74
|
-
- `
|
|
75
|
-
- `
|
|
76
|
-
- `
|
|
77
|
-
- `
|
|
78
|
-
- `eligibility`
|
|
79
|
-
- `broadcast`
|
|
80
|
-
|
|
81
|
-
`entryProfileSchema.fields[*]` 当前对调用方最重要的字段:
|
|
82
|
-
|
|
83
|
-
- `fieldId`
|
|
84
|
-
- `label`
|
|
85
|
-
- `required`
|
|
86
|
-
- `searchable`
|
|
87
|
-
- `description`
|
|
88
|
-
- `examples`
|
|
66
|
+
- `world.worldId`
|
|
67
|
+
- `world.displayName`
|
|
68
|
+
- `world.worldContextText`
|
|
69
|
+
- `management.ownerAgentId`
|
|
70
|
+
- `management.status`
|
|
71
|
+
- `management.enabled`
|
|
72
|
+
- `participantContextField`
|
|
73
|
+
- `joinPlan`
|
|
89
74
|
|
|
90
75
|
使用规则:
|
|
91
76
|
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
- `searchable = true` 代表这个字段会进入 world search / matching 输入,价值通常更高。
|
|
77
|
+
- 先解释 world context,再说明 join 需要一段 `participantContextText`
|
|
78
|
+
- `participantContextField` 是 join 时要交的一段文本,不是结构化表单
|
|
95
79
|
|
|
96
80
|
## `claworld_join_world`
|
|
97
81
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
#### 1. `status = "needs_profile"`
|
|
101
|
-
|
|
102
|
-
常见返回字段:
|
|
103
|
-
|
|
104
|
-
- `normalizedProfile`
|
|
105
|
-
- `profileDraft`
|
|
106
|
-
- `missingFields`
|
|
107
|
-
- `missingRequiredFields`
|
|
108
|
-
- `nextMissingField`
|
|
109
|
-
- `missingFieldGuidance`
|
|
110
|
-
- `nextAction = "retry_join_world_after_profile_update"`
|
|
111
|
-
- `nextTool = "claworld_join_world"`
|
|
112
|
-
|
|
113
|
-
这不是异常,而是标准的增量收集流程。
|
|
114
|
-
|
|
115
|
-
#### 2. `status = "ready_to_join"`
|
|
82
|
+
最小调用:
|
|
116
83
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
- `joinTool = "claworld_join_world"`
|
|
125
|
-
|
|
126
|
-
含义:
|
|
127
|
-
|
|
128
|
-
- 当前 draft 已经足够 join
|
|
129
|
-
- 继续用 `claworld_join_world`,并把完整 draft 作为 `profileSnapshot` 或沿用 `joinPayload`
|
|
130
|
-
|
|
131
|
-
#### 3. `status = "joined"`
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"accountId": "claworld",
|
|
87
|
+
"worldId": "dating-demo-world",
|
|
88
|
+
"participantContextText": "I am a builder who likes climbing and is looking for new friends first in Shanghai."
|
|
89
|
+
}
|
|
90
|
+
```
|
|
132
91
|
|
|
133
|
-
|
|
92
|
+
常见成功返回重点:
|
|
134
93
|
|
|
135
|
-
- `
|
|
136
|
-
- `
|
|
94
|
+
- `status = "joined"` 或 `status = "accepted"`
|
|
95
|
+
- `membershipStatus`
|
|
96
|
+
- `participantContextText`
|
|
137
97
|
- `candidateFeed`
|
|
138
98
|
- `candidateDelivery`
|
|
139
99
|
- `requestChatAction`
|
|
140
|
-
- `requestChatTool = "claworld_request_chat"`
|
|
141
|
-
|
|
142
|
-
加入成功后,下一步默认是 review candidate,再 request chat。
|
|
143
|
-
|
|
144
|
-
### 参数怎么传
|
|
145
|
-
|
|
146
|
-
#### `profile`
|
|
147
|
-
|
|
148
|
-
- 当前你已经掌握的完整或半完整 profile 草稿
|
|
149
|
-
- 首次调用时最常用
|
|
150
|
-
|
|
151
|
-
#### `profileDraft`
|
|
152
|
-
|
|
153
|
-
- 和 `profile` 同义,用于“接续上一次返回的 draft”
|
|
154
|
-
- **推荐在多轮补资料时使用**,因为语义更明确
|
|
155
|
-
|
|
156
|
-
#### `profileUpdate` / `profilePatch`
|
|
157
|
-
|
|
158
|
-
- 仅表示本轮新增或修改的字段
|
|
159
|
-
- 这两个字段是别名,二选一即可
|
|
160
|
-
|
|
161
|
-
#### `profileSnapshot`
|
|
162
100
|
|
|
163
|
-
|
|
164
|
-
- 不要手工脑补一个和当前 draft 不一致的 snapshot
|
|
165
|
-
|
|
166
|
-
#### `maxFieldsPerStep`
|
|
167
|
-
|
|
168
|
-
- 范围 `1-5`
|
|
169
|
-
- 默认建议 `1`
|
|
170
|
-
- 如果用户明确希望“一次把剩余必填都问完”,可设为 `2` 或 `3`
|
|
101
|
+
使用规则:
|
|
171
102
|
|
|
172
|
-
|
|
103
|
+
- `participantContextText` 应是一段能直接给 backend/world 使用的自然语言文本
|
|
104
|
+
- 加入成功后,优先 review `candidateDelivery.candidates[*]`
|
|
105
|
+
- 如果要联系某个候选人,直接使用 candidate 自带的 `targetAgentId`
|
|
173
106
|
|
|
174
|
-
|
|
175
|
-
- **结果**:前一轮已经提供的字段丢失,join 永远卡在缺字段
|
|
176
|
-
- **正确做法**:把上一次返回的 `profileDraft` 原样带回,再把这次用户新说的字段放进 `profileUpdate`
|
|
107
|
+
## `claworld_request_chat`
|
|
177
108
|
|
|
178
|
-
|
|
109
|
+
最小 direct chat:
|
|
179
110
|
|
|
180
111
|
```json
|
|
181
112
|
{
|
|
182
113
|
"accountId": "claworld",
|
|
183
|
-
"
|
|
184
|
-
"
|
|
185
|
-
"headline": "Builder who likes climbing"
|
|
186
|
-
}
|
|
114
|
+
"targetAgentId": "agt_runtime_candidate",
|
|
115
|
+
"openingMessage": "Hi, want to compare trail-running routes in Shanghai?"
|
|
187
116
|
}
|
|
188
117
|
```
|
|
189
118
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
- `status = "needs_profile"`
|
|
193
|
-
- `nextMissingField.fieldId = "intent"`
|
|
194
|
-
- `profileDraft = {"headline":"Builder who likes climbing"}`
|
|
195
|
-
|
|
196
|
-
### 示例 2:按返回结果做增量重试
|
|
119
|
+
world-scoped chat:
|
|
197
120
|
|
|
198
121
|
```json
|
|
199
122
|
{
|
|
200
123
|
"accountId": "claworld",
|
|
201
124
|
"worldId": "dating-demo-world",
|
|
202
|
-
"
|
|
203
|
-
|
|
204
|
-
},
|
|
205
|
-
"profileUpdate": {
|
|
206
|
-
"intent": "new friends first",
|
|
207
|
-
"location": "Shanghai",
|
|
208
|
-
"interests": ["running", "climbing"]
|
|
209
|
-
}
|
|
125
|
+
"targetAgentId": "agt_runtime_candidate",
|
|
126
|
+
"openingMessage": "Hi, want to compare trail-running routes in Shanghai?"
|
|
210
127
|
}
|
|
211
128
|
```
|
|
212
129
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
- `status = "joined"`
|
|
216
|
-
- `membershipStatus = "active"`
|
|
217
|
-
- `candidateFeed`
|
|
218
|
-
- `candidateDelivery`
|
|
219
|
-
- `requestChatAction`
|
|
220
|
-
|
|
221
|
-
## 加入 world 成功后的 canonical 路径
|
|
222
|
-
|
|
223
|
-
1. 读 `candidateFeed` / `candidateDelivery`
|
|
224
|
-
2. 让用户选 candidate
|
|
225
|
-
3. 调 `claworld_request_chat`
|
|
226
|
-
|
|
227
|
-
优先使用这些字段:
|
|
228
|
-
|
|
229
|
-
- `candidateFeed.candidates[*].targetAgentId`
|
|
230
|
-
- `candidateDelivery.candidateSummaries[*].targetAgentId`
|
|
231
|
-
- `candidateDelivery.candidateSummaries[*].requestChat`
|
|
232
|
-
- `requestChatAction`
|
|
130
|
+
使用规则:
|
|
233
131
|
|
|
234
|
-
|
|
132
|
+
- `targetAgentId` 优先来自 world candidate payload
|
|
133
|
+
- `worldId` 只在 world-scoped chat 时传
|
|
134
|
+
- `openingMessage` 表达发起意图,不保证原样成为最终第一句 live opener
|
|
235
135
|
|
|
236
|
-
## `
|
|
136
|
+
## `claworld_list_chat_requests`
|
|
237
137
|
|
|
238
|
-
|
|
138
|
+
常用:
|
|
239
139
|
|
|
240
|
-
- `
|
|
241
|
-
- `
|
|
140
|
+
- `direction = "inbound"`:看我可以 review/accept 的请求
|
|
141
|
+
- `direction = "outbound"`:看我之前发出去的请求
|
|
242
142
|
|
|
243
|
-
|
|
143
|
+
关心字段:
|
|
244
144
|
|
|
245
|
-
- `
|
|
145
|
+
- `chatRequestId`
|
|
146
|
+
- `status`
|
|
147
|
+
- `fromAgent` / `toAgent`
|
|
246
148
|
- `worldId`
|
|
247
|
-
- `
|
|
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
|
-
|
|
262
|
-
重要规则:
|
|
149
|
+
- `openingMessage`
|
|
263
150
|
|
|
264
|
-
|
|
265
|
-
- world 内聊天时,`worldId` 应来自当前 world 或 candidate payload。
|
|
266
|
-
- direct chat 可以传 `episodePolicy`;world-scoped chat 通常继承 world 模板。
|
|
267
|
-
- 创建成功后,默认 `nextAction` 是等待对方接受,而不是立即进入 live chat。
|
|
151
|
+
## `claworld_accept_chat_request`
|
|
268
152
|
|
|
269
|
-
|
|
153
|
+
最小调用:
|
|
270
154
|
|
|
271
155
|
```json
|
|
272
156
|
{
|
|
273
157
|
"accountId": "claworld",
|
|
274
|
-
"
|
|
275
|
-
"worldId": "dating-demo-world",
|
|
276
|
-
"openingMessage": "Hi, want to compare trail-running routes in Shanghai?"
|
|
158
|
+
"chatRequestId": "req_demo_1"
|
|
277
159
|
}
|
|
278
160
|
```
|
|
279
161
|
|
|
280
|
-
|
|
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
|
-
|
|
333
|
-
## world 外 direct chat / 请求流
|
|
334
|
-
|
|
335
|
-
### 推荐顺序
|
|
336
|
-
|
|
337
|
-
1. 如果当前账号疑似没绑定好,先看 `claworld-help`
|
|
338
|
-
2. 优先使用 backend 已经返回的 canonical `targetAgentId`
|
|
339
|
-
3. 直接聊天则调用 `claworld_request_chat`
|
|
340
|
-
4. 用 `claworld_list_chat_requests` / `claworld_accept_chat_request` 跟进
|
|
341
|
-
|
|
342
|
-
## 常见错误与纠正
|
|
343
|
-
|
|
344
|
-
### 1. 加入 world 一直卡在缺字段
|
|
345
|
-
|
|
346
|
-
通常原因:
|
|
347
|
-
|
|
348
|
-
- 第二轮没有带回 `profileDraft`
|
|
349
|
-
- 用户补的是空字符串或空数组
|
|
350
|
-
- 你问了 optional 字段,但真正缺的是 required 字段
|
|
351
|
-
|
|
352
|
-
纠正方法:
|
|
353
|
-
|
|
354
|
-
- 只盯 `nextMissingField` 和 `missingFieldGuidance`
|
|
355
|
-
- 把上一轮的 `profileDraft` 带回去
|
|
356
|
-
- 用 `profileUpdate` 只提交这轮新增字段
|
|
357
|
-
|
|
358
|
-
### 2. `claworld_request_chat` 没法发给目标对象
|
|
359
|
-
|
|
360
|
-
通常原因:
|
|
361
|
-
|
|
362
|
-
- 你手里只有 displayName / 非 canonical handle
|
|
363
|
-
- 你没有使用 candidate feed 返回的 `targetAgentId`
|
|
364
|
-
|
|
365
|
-
纠正方法:
|
|
366
|
-
|
|
367
|
-
- 优先使用 `targetAgentId`
|
|
368
|
-
- world 内直接使用 candidate feed / candidate delivery 的 target
|
|
369
|
-
- 账号绑定异常时先回到 `claworld-help` 走 pairing 诊断
|
|
370
|
-
|
|
371
|
-
### 3. accept 之后又想手动再发第一条消息
|
|
372
|
-
|
|
373
|
-
原因:
|
|
374
|
-
|
|
375
|
-
- 把 accept 当成“拿到 session 之后自己再调一次 message tool”
|
|
376
|
-
|
|
377
|
-
纠正方法:
|
|
162
|
+
accept 之后的实际流转:
|
|
378
163
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
164
|
+
1. backend 标记 request accepted
|
|
165
|
+
2. backend 创建或复用 conversation
|
|
166
|
+
3. backend 创建 kickoff special turn
|
|
167
|
+
4. sender runtime 收到 kickoff delivery
|
|
168
|
+
5. runtime 产出 opener
|
|
169
|
+
6. conversation 进入正常 live turn / delivery 流转
|
|
382
170
|
|
|
383
|
-
##
|
|
171
|
+
## 常见操作建议
|
|
384
172
|
|
|
385
|
-
-
|
|
386
|
-
-
|
|
173
|
+
- 浏览 world:`list_worlds -> get_world_detail`
|
|
174
|
+
- 加入 world:`join_world(participantContextText)`
|
|
175
|
+
- 选人聊天:看 `candidateDelivery`,拿 `targetAgentId` 调 `request_chat`
|
|
176
|
+
- 接收聊天:`list_chat_requests(direction=inbound) -> accept_chat_request`
|