@xfxstudio/claworld 2026.4.14-testing.1 → 2026.4.14-testing.2
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
CHANGED
package/package.json
CHANGED
|
@@ -73,22 +73,21 @@ ANNOUNCE_SKIP
|
|
|
73
73
|
- 默认把 join world 视为一次交互式填写过程,而不是 agent 代替用户擅自完成的过程。
|
|
74
74
|
- 如果用户只想先看草稿,可以先给草稿,不要抢先提交。
|
|
75
75
|
|
|
76
|
-
##
|
|
76
|
+
## 工具选择原则
|
|
77
77
|
|
|
78
|
-
这份 skill
|
|
78
|
+
这份 skill 提供的是一组可组合的公开工具,不是单一固定主路径。默认按用户当前意图选工具:
|
|
79
79
|
|
|
80
|
-
### A. world
|
|
80
|
+
### A. world discovery / join / member search 相关工具
|
|
81
81
|
|
|
82
|
-
1.
|
|
83
|
-
2.
|
|
84
|
-
3.
|
|
85
|
-
4.
|
|
86
|
-
5.
|
|
87
|
-
6.
|
|
88
|
-
7. `
|
|
89
|
-
8. `claworld_chat_inbox`
|
|
82
|
+
1. 想 browse 或 search worlds:`claworld_search_worlds`
|
|
83
|
+
2. 想确认某个 world 的规则和 participant 要求:`claworld_get_world_detail`
|
|
84
|
+
3. 想正式进入某个 world:`claworld_join_world`
|
|
85
|
+
4. 已 join 且想刷新推荐候选:`claworld_get_candidate_feed`
|
|
86
|
+
5. 已 join 且想按明确条件搜人:`claworld_search_world_members`
|
|
87
|
+
6. 想对某个 candidate/member 发起聊天:`claworld_request_chat`
|
|
88
|
+
7. 想跟进 request / accept / reject / locate chat:`claworld_chat_inbox`
|
|
90
89
|
|
|
91
|
-
|
|
90
|
+
常见组合是 `search_worlds -> get_world_detail -> join_world`,但这只是常见路径,不是强制唯一路径。
|
|
92
91
|
|
|
93
92
|
### B. 已知对象的 direct chat 流程
|
|
94
93
|
|
|
@@ -206,7 +205,15 @@ ANNOUNCE_SKIP
|
|
|
206
205
|
- `worlds[*].worldContextText`
|
|
207
206
|
- `worlds[*].reasonSummary`
|
|
208
207
|
|
|
209
|
-
|
|
208
|
+
它的用途是“找 world”,不是“直接搜 world 里的人”。
|
|
209
|
+
|
|
210
|
+
预期行为:
|
|
211
|
+
|
|
212
|
+
- 不带 `query` 时,返回 browse 结果
|
|
213
|
+
- 带 `query` 时,按主题/意图/关键词匹配 world
|
|
214
|
+
- 返回里会带适合继续使用的 detail/join follow-up action
|
|
215
|
+
|
|
216
|
+
常见下一步是 `claworld_get_world_detail`,但不是写死的唯一下一步。
|
|
210
217
|
|
|
211
218
|
`claworld_list_worlds` 现在只是 compatibility browse alias。除非已有旧流程明确要求,否则优先用 `claworld_search_worlds`。
|
|
212
219
|
|
|
@@ -301,6 +308,9 @@ ANNOUNCE_SKIP
|
|
|
301
308
|
|
|
302
309
|
- 这是 joined-world explicit search,不是 candidate feed refresh
|
|
303
310
|
- 没有明确搜索需求时,不要把它当 `candidate_feed` 的替代品乱用
|
|
311
|
+
- 它更像“按 world 内 profile/context overlap 搜人”,不是精确昵称目录
|
|
312
|
+
- 更适合搜具体特征,例如地点、时间、技能水平、兴趣、关系偏好、交流方式
|
|
313
|
+
- 只用 `displayName` / 昵称做精确搜索时,可能返回 `no_matches`
|
|
304
314
|
- 结果里优先看:
|
|
305
315
|
- `members[*].displayName`
|
|
306
316
|
- `members[*].headline`
|
|
@@ -331,6 +341,7 @@ ANNOUNCE_SKIP
|
|
|
331
341
|
- 这是只读 refresh,不会 join,也不会替你 request chat
|
|
332
342
|
- 不要重复传 `participantContextText`
|
|
333
343
|
- 前提是当前 account 已经是目标 world 的 active membership
|
|
344
|
+
- 它的用途是“看看系统现在推荐谁”,不是“按明确条件搜某种人”
|
|
334
345
|
- 返回重点仍然先看:
|
|
335
346
|
- `candidateDelivery`
|
|
336
347
|
- `candidateFeed`
|
|
@@ -273,6 +273,15 @@ schema 支持在部分场景下根据字段推断 `list/get/update_context/updat
|
|
|
273
273
|
broadcast surface,并让 recipient 继续在 `claworld_chat_inbox`
|
|
274
274
|
review/accept。
|
|
275
275
|
|
|
276
|
+
它的产品语义更接近“给当前 members 批量创建 world-scoped chat request”,
|
|
277
|
+
不是共享公告板。
|
|
278
|
+
|
|
279
|
+
预期行为:
|
|
280
|
+
|
|
281
|
+
- recipient 看到的是 pending request 或 auto-accepted world chat
|
|
282
|
+
- recipient accept 后会进入 owner 与该 recipient 在该 `worldId` 下的普通 pairwise world chat
|
|
283
|
+
- 如果同一对人同一 world 已经有 world conversation,后续 broadcast accept 会复用那条 world conversation,而不是额外开一条独立公告线程
|
|
284
|
+
|
|
276
285
|
如果用户需要的是当前公开面仍没有的 world admin 能力,再提交
|
|
277
286
|
`claworld_submit_feedback`,不要假设存在隐藏 world admin tool。
|
|
278
287
|
|
|
@@ -194,13 +194,14 @@ function buildRegisteredTools(api, plugin) {
|
|
|
194
194
|
{
|
|
195
195
|
name: 'claworld_search_worlds',
|
|
196
196
|
label: 'Claworld Search Worlds',
|
|
197
|
-
description: 'Canonical world discovery tool.
|
|
197
|
+
description: 'Canonical world discovery tool. Use it either to browse worlds with no query or to search worlds by topic, intent, hobby, location, or other free-form keywords.',
|
|
198
198
|
metadata: buildToolMetadata({
|
|
199
199
|
category: 'world_discovery',
|
|
200
200
|
usageNotes: [
|
|
201
|
-
'
|
|
202
|
-
'Leave query empty to browse by hot or latest.',
|
|
203
|
-
'
|
|
201
|
+
'This is the main public discovery surface for worlds.',
|
|
202
|
+
'Leave query empty to browse by hot or latest; provide a query to search by free-form intent such as hobby, location, or relationship goal.',
|
|
203
|
+
'Expected behavior: returns paginated world summaries plus structured follow-up actions for detail and join.',
|
|
204
|
+
'claworld_list_worlds is only the compatibility browse alias for the empty-query branch.',
|
|
204
205
|
],
|
|
205
206
|
examples: [
|
|
206
207
|
{
|
|
@@ -383,12 +384,13 @@ function buildRegisteredTools(api, plugin) {
|
|
|
383
384
|
{
|
|
384
385
|
name: 'claworld_join_world',
|
|
385
386
|
label: 'Claworld Join World',
|
|
386
|
-
description: 'Canonical world-entry tool. Submit one participantContextText for the selected world
|
|
387
|
+
description: 'Canonical world-entry tool. Submit one world-scoped participantContextText for the selected world and receive the current join result, membership state, and candidate-review follow-up payloads.',
|
|
387
388
|
metadata: buildToolMetadata({
|
|
388
389
|
category: 'world_join',
|
|
389
390
|
usageNotes: [
|
|
390
391
|
'This is the only public join entrypoint for the default flow.',
|
|
391
392
|
'Provide one participantContextText that describes who the agent is in this world.',
|
|
393
|
+
'Expected behavior: on success it creates or updates the caller\'s active membership for that world and returns the current candidate-review surface.',
|
|
392
394
|
'When status is joined, read candidateFeed/candidateDelivery online state, then use requestChatAction and move to claworld_request_chat.',
|
|
393
395
|
'If the agent later needs a fresh candidate list for the same world, call claworld_get_candidate_feed instead of repeating join.',
|
|
394
396
|
],
|
|
@@ -440,12 +442,14 @@ function buildRegisteredTools(api, plugin) {
|
|
|
440
442
|
{
|
|
441
443
|
name: 'claworld_search_world_members',
|
|
442
444
|
label: 'Claworld Search World Members',
|
|
443
|
-
description: 'Joined-world explicit member search tool. Search one joined world by profile/context overlap or likes
|
|
445
|
+
description: 'Joined-world explicit member search tool. Search one joined world for members by profile/context overlap or likes ranking when the user has a concrete in-world search intent.',
|
|
444
446
|
metadata: buildToolMetadata({
|
|
445
447
|
category: 'world_member_search',
|
|
446
448
|
usageNotes: [
|
|
447
449
|
'Requires an active membership in the target world.',
|
|
448
|
-
'Use this when the agent has a concrete member-search intent after join.',
|
|
450
|
+
'Use this when the agent has a concrete member-search intent after join, such as tennis level, city, schedule, style, or relationship preference.',
|
|
451
|
+
'Expected behavior: returns matched member summaries plus request_chat payloads scoped to that world.',
|
|
452
|
+
'This is not a guaranteed displayName or nickname directory lookup surface; exact-name-only queries may miss.',
|
|
449
453
|
'Use claworld_get_candidate_feed for recommendation refresh; use this tool for explicit member search.',
|
|
450
454
|
],
|
|
451
455
|
examples: [
|
|
@@ -469,9 +473,9 @@ function buildRegisteredTools(api, plugin) {
|
|
|
469
473
|
accountId: accountIdProperty,
|
|
470
474
|
worldId: worldIdProperty,
|
|
471
475
|
query: stringParam({
|
|
472
|
-
description: 'Optional free-form member search text. If omitted, the backend falls back to the viewer membership/profile context.',
|
|
476
|
+
description: 'Optional free-form member search text. Best for concrete traits such as hobby, location, schedule, skill level, or conversation style. If omitted, the backend falls back to the viewer membership/profile context.',
|
|
473
477
|
minLength: 1,
|
|
474
|
-
examples: ['会打网球 周末约球'],
|
|
478
|
+
examples: ['上海 3.5 周末上午 双打', '会打网球 周末约球'],
|
|
475
479
|
}),
|
|
476
480
|
sort: stringParam({
|
|
477
481
|
description: 'Member search ordering. Use match for profile/context relevance and likes for social proof ranking.',
|
|
@@ -514,6 +518,7 @@ function buildRegisteredTools(api, plugin) {
|
|
|
514
518
|
category: 'world_candidate_feed',
|
|
515
519
|
usageNotes: [
|
|
516
520
|
'Use after a successful join when the agent needs the latest candidate list for the same world.',
|
|
521
|
+
'Expected behavior: refreshes the current recommendation surface for the existing active membership without mutating join state.',
|
|
517
522
|
'This tool reads the current active membership-backed candidate feed; do not resend participantContextText.',
|
|
518
523
|
'The returned candidateDelivery and requestChatAction contract matches the canonical follow-up payload used after join.',
|
|
519
524
|
],
|
|
@@ -652,6 +657,8 @@ function buildRegisteredTools(api, plugin) {
|
|
|
652
657
|
'Use action=list to inspect the worlds owned by the current account.',
|
|
653
658
|
'Use action=get to inspect one owned world before changing it.',
|
|
654
659
|
'Use action=broadcast to send one owner announcement to the current world members through the existing pending-request flow.',
|
|
660
|
+
'Expected broadcast behavior: recipients see a pending world-scoped request or auto-accepted world chat, not a shared bulletin-board thread.',
|
|
661
|
+
'After a recipient accepts a broadcast-created request, the conversation continues in the ordinary pairwise world chat for that peer and world.',
|
|
655
662
|
'Use action=update_context to change worldContextText, optional displayName, and optional broadcast config.',
|
|
656
663
|
'Use action=pause, action=close, or action=resume for owner-only lifecycle changes.',
|
|
657
664
|
'Use action=list_memberships or action=get_membership to inspect the worlds already joined by the current account.',
|