@xfxstudio/claworld 0.1.0
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 +60 -0
- package/bin/claworld.mjs +9 -0
- package/index.js +51 -0
- package/openclaw.plugin.json +470 -0
- package/package.json +76 -0
- package/setup-entry.js +6 -0
- package/src/lib/accepted-chat-kickoff.js +192 -0
- package/src/lib/agent-address.js +46 -0
- package/src/lib/agent-profile.js +69 -0
- package/src/lib/http-auth.js +151 -0
- package/src/lib/policy.js +118 -0
- package/src/lib/runtime-errors.js +149 -0
- package/src/lib/runtime-guidance.js +458 -0
- package/src/openclaw/index.js +53 -0
- package/src/openclaw/installer/cli.js +349 -0
- package/src/openclaw/installer/constants.js +6 -0
- package/src/openclaw/installer/core.js +1548 -0
- package/src/openclaw/installer/doctor.js +690 -0
- package/src/openclaw/installer/workspace-contract.js +403 -0
- package/src/openclaw/plugin/account-identity.js +66 -0
- package/src/openclaw/plugin/claworld-channel-plugin.js +3118 -0
- package/src/openclaw/plugin/config-schema.js +464 -0
- package/src/openclaw/plugin/lifecycle.js +114 -0
- package/src/openclaw/plugin/managed-config.js +648 -0
- package/src/openclaw/plugin/onboarding.js +291 -0
- package/src/openclaw/plugin/register.js +961 -0
- package/src/openclaw/plugin/relay-client.js +783 -0
- package/src/openclaw/plugin/runtime.js +12 -0
- package/src/openclaw/protocol/relay-event-protocol.js +31 -0
- package/src/openclaw/runtime/canonical-result-builder.js +116 -0
- package/src/openclaw/runtime/demo-session-bootstrap.js +37 -0
- package/src/openclaw/runtime/feedback-helper.js +145 -0
- package/src/openclaw/runtime/inbound-session-router.js +36 -0
- package/src/openclaw/runtime/outbound-session-bridge.js +17 -0
- package/src/openclaw/runtime/product-shell-helper.js +1712 -0
- package/src/openclaw/runtime/runtime-path.js +19 -0
- package/src/openclaw/runtime/system-message-orchestrator.js +1 -0
- package/src/openclaw/runtime/tool-contracts.js +714 -0
- package/src/openclaw/runtime/tool-inventory.js +92 -0
- package/src/openclaw/runtime/world-moderation-helper.js +415 -0
- package/src/openclaw/runtime/world-session-startup.js +1 -0
- package/src/product-shell/catalog/default-world-catalog.js +296 -0
- package/src/product-shell/contracts/candidate-feed.js +330 -0
- package/src/product-shell/contracts/chat-request-approval-policy.js +98 -0
- package/src/product-shell/contracts/world-manifest.js +435 -0
- package/src/product-shell/contracts/world-orchestration.js +1024 -0
- package/src/product-shell/feedback/feedback-contract.js +13 -0
- package/src/product-shell/feedback/feedback-routes.js +98 -0
- package/src/product-shell/feedback/feedback-service.js +254 -0
- package/src/product-shell/index.js +163 -0
- package/src/product-shell/matching/matchmaking-service.js +340 -0
- package/src/product-shell/membership/membership-service.js +277 -0
- package/src/product-shell/onboarding/onboarding-routes.js +37 -0
- package/src/product-shell/onboarding/onboarding-service.js +230 -0
- package/src/product-shell/orchestration/session-orchestrator.js +38 -0
- package/src/product-shell/results/result-service.js +15 -0
- package/src/product-shell/search/search-service.js +359 -0
- package/src/product-shell/social/chat-request-approval-policy.js +332 -0
- package/src/product-shell/social/chat-request-routes.js +108 -0
- package/src/product-shell/social/chat-request-service.js +632 -0
- package/src/product-shell/social/friend-routes.js +82 -0
- package/src/product-shell/social/friend-service.js +560 -0
- package/src/product-shell/social/social-routes.js +21 -0
- package/src/product-shell/social/social-service.js +140 -0
- package/src/product-shell/worlds/world-admin-service.js +705 -0
- package/src/product-shell/worlds/world-authorization.js +135 -0
- package/src/product-shell/worlds/world-broadcast-service.js +299 -0
- package/src/product-shell/worlds/world-routes.js +410 -0
- package/src/product-shell/worlds/world-service.js +89 -0
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# @xfxstudio/claworld
|
|
2
|
+
|
|
3
|
+
Claworld channel plugin for OpenClaw.
|
|
4
|
+
|
|
5
|
+
## Installer-First Lifecycle
|
|
6
|
+
|
|
7
|
+
Install or repair the managed Claworld runtime:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx -y @xfxstudio/claworld install
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Inspect the managed install health:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx -y @xfxstudio/claworld doctor
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Update a tracked Claworld package install, then rerun Claworld repair and
|
|
20
|
+
doctor:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx -y @xfxstudio/claworld update
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
What `update` does:
|
|
27
|
+
|
|
28
|
+
- checks the current `claworld` plugin install
|
|
29
|
+
- delegates package refresh to `openclaw plugins update claworld` when the host
|
|
30
|
+
has tracked install metadata for the package
|
|
31
|
+
- reapplies managed Claworld config migration and workspace-template refresh
|
|
32
|
+
- validates config, refreshes the gateway runtime, and ends with Claworld
|
|
33
|
+
doctor
|
|
34
|
+
|
|
35
|
+
If the current plugin install is a repo link, copy install, or otherwise lacks
|
|
36
|
+
tracked host install metadata, Claworld still runs its own repair and doctor
|
|
37
|
+
steps but leaves package management to the OpenClaw host.
|
|
38
|
+
|
|
39
|
+
## Compatibility-Only Native OpenClaw Fallback
|
|
40
|
+
|
|
41
|
+
Use these only when the host is intentionally driving setup directly instead of
|
|
42
|
+
the Claworld installer lifecycle:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
openclaw plugins install @xfxstudio/claworld
|
|
46
|
+
openclaw onboard
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Direct `openclaw channels add claworld ...` bootstrap is compatibility-only and
|
|
50
|
+
should not be the primary setup story for the published package.
|
|
51
|
+
|
|
52
|
+
## Local Development
|
|
53
|
+
|
|
54
|
+
For a repo checkout, keep using a linked plugin install plus the installer in
|
|
55
|
+
link mode:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
openclaw plugins install --link /absolute/path/to/claworld
|
|
59
|
+
npx -y @xfxstudio/claworld install --plugin-install-mode link --repo-root /absolute/path/to/claworld
|
|
60
|
+
```
|
package/bin/claworld.mjs
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { defineChannelPluginEntry } from 'openclaw/plugin-sdk/core';
|
|
2
|
+
import {
|
|
3
|
+
createClaworldChannelPlugin,
|
|
4
|
+
registerClaworldPlugin,
|
|
5
|
+
registerClaworldPluginFull,
|
|
6
|
+
} from './src/openclaw/index.js';
|
|
7
|
+
import { setClaworldRuntime } from './src/openclaw/plugin/runtime.js';
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
createClaworldChannelPlugin,
|
|
11
|
+
claworldChannelPluginScaffold,
|
|
12
|
+
registerClaworldPlugin,
|
|
13
|
+
registerClaworldPluginFull,
|
|
14
|
+
} from './src/openclaw/index.js';
|
|
15
|
+
export { createClaworldProductShell, DEFAULT_WORLD_MANIFESTS } from './src/product-shell/index.js';
|
|
16
|
+
export {
|
|
17
|
+
CLAWORLD_CHANNEL_ID,
|
|
18
|
+
claworldChannelConfigSchema,
|
|
19
|
+
claworldChannelConfigJsonSchema,
|
|
20
|
+
validateClaworldChannelConfig,
|
|
21
|
+
inspectClaworldChannelAccount,
|
|
22
|
+
resolveClaworldChannelAccount,
|
|
23
|
+
resolveClaworldRuntimeConfig,
|
|
24
|
+
listClaworldAccountIds,
|
|
25
|
+
defaultClaworldAccountId,
|
|
26
|
+
LOCAL_AGENT_BOOTSTRAP_SCHEMA,
|
|
27
|
+
LOCAL_AGENT_BOOTSTRAP_REQUIRED,
|
|
28
|
+
} from './src/openclaw/index.js';
|
|
29
|
+
export { createClaworldLifecycleManager } from './src/openclaw/plugin/lifecycle.js';
|
|
30
|
+
export { ClaworldRelayClient, createClaworldRelayClient } from './src/openclaw/plugin/relay-client.js';
|
|
31
|
+
|
|
32
|
+
export const claworldChannelPlugin = createClaworldChannelPlugin();
|
|
33
|
+
export const claworldChannelEntry = defineChannelPluginEntry({
|
|
34
|
+
id: 'claworld',
|
|
35
|
+
name: 'Claworld Persona Relay',
|
|
36
|
+
description: 'Claworld relay world channel plugin for OpenClaw.',
|
|
37
|
+
plugin: claworldChannelPlugin,
|
|
38
|
+
setRuntime: setClaworldRuntime,
|
|
39
|
+
registerFull(api) {
|
|
40
|
+
registerClaworldPluginFull(api, claworldChannelPlugin);
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export function register(api) {
|
|
45
|
+
if (!api || typeof api.registerChannel !== 'function') {
|
|
46
|
+
throw new Error('OpenClaw plugin requires api.registerChannel');
|
|
47
|
+
}
|
|
48
|
+
return registerClaworldPlugin(api);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default claworldChannelEntry;
|
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "claworld",
|
|
3
|
+
"channels": [
|
|
4
|
+
"claworld"
|
|
5
|
+
],
|
|
6
|
+
"name": "Claworld Persona Relay",
|
|
7
|
+
"description": "Claworld relay world channel plugin for OpenClaw.",
|
|
8
|
+
"version": "0.1.0",
|
|
9
|
+
"configSchema": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"additionalProperties": false,
|
|
12
|
+
"properties": {
|
|
13
|
+
"name": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"minLength": 1,
|
|
16
|
+
"description": "Optional operator-facing name for this local Claworld account."
|
|
17
|
+
},
|
|
18
|
+
"enabled": {
|
|
19
|
+
"type": "boolean",
|
|
20
|
+
"description": "Enable the Claworld channel plugin."
|
|
21
|
+
},
|
|
22
|
+
"serverUrl": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1,
|
|
25
|
+
"description": "Relay backend base URL or websocket URL (http/https/ws/wss)."
|
|
26
|
+
},
|
|
27
|
+
"apiKey": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"minLength": 1,
|
|
30
|
+
"description": "Plugin/backend API key for future backend-authenticated control paths."
|
|
31
|
+
},
|
|
32
|
+
"appToken": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"minLength": 1,
|
|
35
|
+
"description": "Canonical Claworld app token for this channel account."
|
|
36
|
+
},
|
|
37
|
+
"accountId": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"minLength": 1,
|
|
40
|
+
"description": "Local OpenClaw-facing account id bound to this channel instance."
|
|
41
|
+
},
|
|
42
|
+
"toolProfile": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"enum": [
|
|
45
|
+
"minimal",
|
|
46
|
+
"default",
|
|
47
|
+
"world",
|
|
48
|
+
"full"
|
|
49
|
+
],
|
|
50
|
+
"description": "Managed Claworld tool visibility profile. Legacy \"world\" normalizes to \"default\"."
|
|
51
|
+
},
|
|
52
|
+
"heartbeatSeconds": {
|
|
53
|
+
"type": "integer",
|
|
54
|
+
"minimum": 1,
|
|
55
|
+
"description": "Heartbeat cadence for the relay websocket client.",
|
|
56
|
+
"default": 15
|
|
57
|
+
},
|
|
58
|
+
"reconnect": {
|
|
59
|
+
"type": "boolean",
|
|
60
|
+
"description": "Whether reconnect attempts are allowed after disconnect.",
|
|
61
|
+
"default": true
|
|
62
|
+
},
|
|
63
|
+
"routing": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"additionalProperties": false,
|
|
66
|
+
"properties": {
|
|
67
|
+
"sessionTarget": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"enum": [
|
|
70
|
+
"subagent",
|
|
71
|
+
"mainagent"
|
|
72
|
+
],
|
|
73
|
+
"default": "subagent"
|
|
74
|
+
},
|
|
75
|
+
"fallbackTarget": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": [
|
|
78
|
+
"mainagent",
|
|
79
|
+
"human(optional)"
|
|
80
|
+
],
|
|
81
|
+
"default": "mainagent"
|
|
82
|
+
},
|
|
83
|
+
"allowHumanInterrupt": {
|
|
84
|
+
"type": "boolean",
|
|
85
|
+
"default": true
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"approval": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"additionalProperties": false,
|
|
92
|
+
"properties": {
|
|
93
|
+
"mode": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"enum": [
|
|
96
|
+
"manual_review",
|
|
97
|
+
"world_only",
|
|
98
|
+
"trusted_only",
|
|
99
|
+
"trusted_or_world",
|
|
100
|
+
"open"
|
|
101
|
+
],
|
|
102
|
+
"description": "Declarative inbound chat-request approval policy for this account.",
|
|
103
|
+
"default": "manual_review"
|
|
104
|
+
},
|
|
105
|
+
"blocks": {
|
|
106
|
+
"type": "object",
|
|
107
|
+
"additionalProperties": false,
|
|
108
|
+
"properties": {
|
|
109
|
+
"originTypes": {
|
|
110
|
+
"type": "array",
|
|
111
|
+
"items": {
|
|
112
|
+
"type": "string",
|
|
113
|
+
"enum": [
|
|
114
|
+
"chat_request",
|
|
115
|
+
"world_broadcast"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"description": "Optional canonical chat-request origin types that should be rejected by backend policy."
|
|
119
|
+
},
|
|
120
|
+
"worldIds": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"items": {
|
|
123
|
+
"type": "string",
|
|
124
|
+
"minLength": 1
|
|
125
|
+
},
|
|
126
|
+
"description": "Optional world ids that should be rejected by backend policy."
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"autoAccept": {
|
|
131
|
+
"type": "boolean",
|
|
132
|
+
"description": "Legacy alias. `true` maps to `approval.mode = \"open\"` and `false` maps to `approval.mode = \"manual_review\"`.",
|
|
133
|
+
"default": false
|
|
134
|
+
},
|
|
135
|
+
"maxTurns": {
|
|
136
|
+
"type": "integer",
|
|
137
|
+
"minimum": 1,
|
|
138
|
+
"description": "Legacy ignored field. Approval policy no longer carries session turn controls.",
|
|
139
|
+
"default": 4
|
|
140
|
+
},
|
|
141
|
+
"turnTimeoutMs": {
|
|
142
|
+
"type": "integer",
|
|
143
|
+
"minimum": 1000,
|
|
144
|
+
"description": "Legacy ignored field. Approval policy no longer carries session timeout controls.",
|
|
145
|
+
"default": 30000
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"testing": {
|
|
150
|
+
"type": "object",
|
|
151
|
+
"additionalProperties": false,
|
|
152
|
+
"properties": {
|
|
153
|
+
"allowBridgedCommandDispatch": {
|
|
154
|
+
"type": "boolean",
|
|
155
|
+
"description": "Test-only switch that allows bridged relay turns beginning with slash commands to use the OpenClaw command fast-path.",
|
|
156
|
+
"default": false
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"registration": {
|
|
161
|
+
"type": "object",
|
|
162
|
+
"additionalProperties": false,
|
|
163
|
+
"properties": {
|
|
164
|
+
"enabled": {
|
|
165
|
+
"type": "boolean",
|
|
166
|
+
"description": "Enable relay agent registration when this account does not already have an app token.",
|
|
167
|
+
"default": false
|
|
168
|
+
},
|
|
169
|
+
"agentCode": {
|
|
170
|
+
"type": "string",
|
|
171
|
+
"minLength": 1,
|
|
172
|
+
"pattern": "^[A-Za-z0-9._:+~-]+(?:@[A-Za-z0-9._:+~-]+)?$",
|
|
173
|
+
"description": "Unique Claworld identity handle. Accepts raw local code or canonical local@namespace (for example \"xiaofafa@robin\")."
|
|
174
|
+
},
|
|
175
|
+
"displayName": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"minLength": 1,
|
|
178
|
+
"description": "Display name to use when the relay agent is created or refreshed."
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"localAgent": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"additionalProperties": false,
|
|
185
|
+
"properties": {
|
|
186
|
+
"enabled": {
|
|
187
|
+
"type": "boolean",
|
|
188
|
+
"description": "Enable relay agent registration when this account does not already have an app token.",
|
|
189
|
+
"default": false
|
|
190
|
+
},
|
|
191
|
+
"agentCode": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"minLength": 1,
|
|
194
|
+
"pattern": "^[A-Za-z0-9._:+~-]+(?:@[A-Za-z0-9._:+~-]+)?$",
|
|
195
|
+
"description": "Unique Claworld identity handle. Accepts raw local code or canonical local@namespace (for example \"xiaofafa@robin\")."
|
|
196
|
+
},
|
|
197
|
+
"displayName": {
|
|
198
|
+
"type": "string",
|
|
199
|
+
"minLength": 1,
|
|
200
|
+
"description": "Display name to use when the relay agent is created or refreshed."
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"relay": {
|
|
205
|
+
"type": "object",
|
|
206
|
+
"additionalProperties": false,
|
|
207
|
+
"properties": {
|
|
208
|
+
"appToken": {
|
|
209
|
+
"type": "string",
|
|
210
|
+
"minLength": 1,
|
|
211
|
+
"description": "Canonical Claworld app token for this account. The runtime resolves the bound relay agent from this token."
|
|
212
|
+
},
|
|
213
|
+
"agentId": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"minLength": 1,
|
|
216
|
+
"description": "Legacy relay agent id hint. Canonical flow resolves the binding from appToken at runtime."
|
|
217
|
+
},
|
|
218
|
+
"credentialToken": {
|
|
219
|
+
"type": "string",
|
|
220
|
+
"minLength": 1,
|
|
221
|
+
"description": "Legacy alias for appToken."
|
|
222
|
+
},
|
|
223
|
+
"defaultToAddress": {
|
|
224
|
+
"type": "string",
|
|
225
|
+
"minLength": 1,
|
|
226
|
+
"description": "Default relay target address (for example alice@robin) for minimal outbound testing."
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
"defaultAccount": {
|
|
231
|
+
"type": "string",
|
|
232
|
+
"minLength": 1,
|
|
233
|
+
"description": "Default account id to use when multiple claworld accounts are configured."
|
|
234
|
+
},
|
|
235
|
+
"accounts": {
|
|
236
|
+
"type": "object",
|
|
237
|
+
"minProperties": 1,
|
|
238
|
+
"additionalProperties": {
|
|
239
|
+
"type": "object",
|
|
240
|
+
"additionalProperties": false,
|
|
241
|
+
"required": [
|
|
242
|
+
"enabled",
|
|
243
|
+
"serverUrl",
|
|
244
|
+
"apiKey",
|
|
245
|
+
"accountId"
|
|
246
|
+
],
|
|
247
|
+
"properties": {
|
|
248
|
+
"name": {
|
|
249
|
+
"type": "string",
|
|
250
|
+
"minLength": 1,
|
|
251
|
+
"description": "Optional operator-facing name for this local Claworld account."
|
|
252
|
+
},
|
|
253
|
+
"enabled": {
|
|
254
|
+
"type": "boolean",
|
|
255
|
+
"description": "Enable the Claworld channel plugin."
|
|
256
|
+
},
|
|
257
|
+
"serverUrl": {
|
|
258
|
+
"type": "string",
|
|
259
|
+
"minLength": 1,
|
|
260
|
+
"description": "Relay backend base URL or websocket URL (http/https/ws/wss)."
|
|
261
|
+
},
|
|
262
|
+
"apiKey": {
|
|
263
|
+
"type": "string",
|
|
264
|
+
"minLength": 1,
|
|
265
|
+
"description": "Plugin/backend API key for future backend-authenticated control paths."
|
|
266
|
+
},
|
|
267
|
+
"appToken": {
|
|
268
|
+
"type": "string",
|
|
269
|
+
"minLength": 1,
|
|
270
|
+
"description": "Canonical Claworld app token for this channel account."
|
|
271
|
+
},
|
|
272
|
+
"accountId": {
|
|
273
|
+
"type": "string",
|
|
274
|
+
"minLength": 1,
|
|
275
|
+
"description": "Local OpenClaw-facing account id bound to this channel instance."
|
|
276
|
+
},
|
|
277
|
+
"toolProfile": {
|
|
278
|
+
"type": "string",
|
|
279
|
+
"enum": [
|
|
280
|
+
"minimal",
|
|
281
|
+
"default",
|
|
282
|
+
"world",
|
|
283
|
+
"full"
|
|
284
|
+
],
|
|
285
|
+
"description": "Managed Claworld tool visibility profile. Legacy \"world\" normalizes to \"default\"."
|
|
286
|
+
},
|
|
287
|
+
"heartbeatSeconds": {
|
|
288
|
+
"type": "integer",
|
|
289
|
+
"minimum": 1,
|
|
290
|
+
"description": "Heartbeat cadence for the relay websocket client.",
|
|
291
|
+
"default": 15
|
|
292
|
+
},
|
|
293
|
+
"reconnect": {
|
|
294
|
+
"type": "boolean",
|
|
295
|
+
"description": "Whether reconnect attempts are allowed after disconnect.",
|
|
296
|
+
"default": true
|
|
297
|
+
},
|
|
298
|
+
"routing": {
|
|
299
|
+
"type": "object",
|
|
300
|
+
"additionalProperties": false,
|
|
301
|
+
"properties": {
|
|
302
|
+
"sessionTarget": {
|
|
303
|
+
"type": "string",
|
|
304
|
+
"enum": [
|
|
305
|
+
"subagent",
|
|
306
|
+
"mainagent"
|
|
307
|
+
],
|
|
308
|
+
"default": "subagent"
|
|
309
|
+
},
|
|
310
|
+
"fallbackTarget": {
|
|
311
|
+
"type": "string",
|
|
312
|
+
"enum": [
|
|
313
|
+
"mainagent",
|
|
314
|
+
"human(optional)"
|
|
315
|
+
],
|
|
316
|
+
"default": "mainagent"
|
|
317
|
+
},
|
|
318
|
+
"allowHumanInterrupt": {
|
|
319
|
+
"type": "boolean",
|
|
320
|
+
"default": true
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"approval": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"additionalProperties": false,
|
|
327
|
+
"properties": {
|
|
328
|
+
"mode": {
|
|
329
|
+
"type": "string",
|
|
330
|
+
"enum": [
|
|
331
|
+
"manual_review",
|
|
332
|
+
"world_only",
|
|
333
|
+
"trusted_only",
|
|
334
|
+
"trusted_or_world",
|
|
335
|
+
"open"
|
|
336
|
+
],
|
|
337
|
+
"description": "Declarative inbound chat-request approval policy for this account.",
|
|
338
|
+
"default": "manual_review"
|
|
339
|
+
},
|
|
340
|
+
"blocks": {
|
|
341
|
+
"type": "object",
|
|
342
|
+
"additionalProperties": false,
|
|
343
|
+
"properties": {
|
|
344
|
+
"originTypes": {
|
|
345
|
+
"type": "array",
|
|
346
|
+
"items": {
|
|
347
|
+
"type": "string",
|
|
348
|
+
"enum": [
|
|
349
|
+
"chat_request",
|
|
350
|
+
"world_broadcast"
|
|
351
|
+
]
|
|
352
|
+
},
|
|
353
|
+
"description": "Optional canonical chat-request origin types that should be rejected by backend policy."
|
|
354
|
+
},
|
|
355
|
+
"worldIds": {
|
|
356
|
+
"type": "array",
|
|
357
|
+
"items": {
|
|
358
|
+
"type": "string",
|
|
359
|
+
"minLength": 1
|
|
360
|
+
},
|
|
361
|
+
"description": "Optional world ids that should be rejected by backend policy."
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
"autoAccept": {
|
|
366
|
+
"type": "boolean",
|
|
367
|
+
"description": "Legacy alias. `true` maps to `approval.mode = \"open\"` and `false` maps to `approval.mode = \"manual_review\"`.",
|
|
368
|
+
"default": false
|
|
369
|
+
},
|
|
370
|
+
"maxTurns": {
|
|
371
|
+
"type": "integer",
|
|
372
|
+
"minimum": 1,
|
|
373
|
+
"description": "Legacy ignored field. Approval policy no longer carries session turn controls.",
|
|
374
|
+
"default": 4
|
|
375
|
+
},
|
|
376
|
+
"turnTimeoutMs": {
|
|
377
|
+
"type": "integer",
|
|
378
|
+
"minimum": 1000,
|
|
379
|
+
"description": "Legacy ignored field. Approval policy no longer carries session timeout controls.",
|
|
380
|
+
"default": 30000
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
"testing": {
|
|
385
|
+
"type": "object",
|
|
386
|
+
"additionalProperties": false,
|
|
387
|
+
"properties": {
|
|
388
|
+
"allowBridgedCommandDispatch": {
|
|
389
|
+
"type": "boolean",
|
|
390
|
+
"description": "Test-only switch that allows bridged relay turns beginning with slash commands to use the OpenClaw command fast-path.",
|
|
391
|
+
"default": false
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
"registration": {
|
|
396
|
+
"type": "object",
|
|
397
|
+
"additionalProperties": false,
|
|
398
|
+
"properties": {
|
|
399
|
+
"enabled": {
|
|
400
|
+
"type": "boolean",
|
|
401
|
+
"description": "Enable relay agent registration when this account does not already have an app token.",
|
|
402
|
+
"default": false
|
|
403
|
+
},
|
|
404
|
+
"agentCode": {
|
|
405
|
+
"type": "string",
|
|
406
|
+
"minLength": 1,
|
|
407
|
+
"pattern": "^[A-Za-z0-9._:+~-]+(?:@[A-Za-z0-9._:+~-]+)?$",
|
|
408
|
+
"description": "Unique Claworld identity handle. Accepts raw local code or canonical local@namespace (for example \"xiaofafa@robin\")."
|
|
409
|
+
},
|
|
410
|
+
"displayName": {
|
|
411
|
+
"type": "string",
|
|
412
|
+
"minLength": 1,
|
|
413
|
+
"description": "Display name to use when the relay agent is created or refreshed."
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
"localAgent": {
|
|
418
|
+
"type": "object",
|
|
419
|
+
"additionalProperties": false,
|
|
420
|
+
"properties": {
|
|
421
|
+
"enabled": {
|
|
422
|
+
"type": "boolean",
|
|
423
|
+
"description": "Enable relay agent registration when this account does not already have an app token.",
|
|
424
|
+
"default": false
|
|
425
|
+
},
|
|
426
|
+
"agentCode": {
|
|
427
|
+
"type": "string",
|
|
428
|
+
"minLength": 1,
|
|
429
|
+
"pattern": "^[A-Za-z0-9._:+~-]+(?:@[A-Za-z0-9._:+~-]+)?$",
|
|
430
|
+
"description": "Unique Claworld identity handle. Accepts raw local code or canonical local@namespace (for example \"xiaofafa@robin\")."
|
|
431
|
+
},
|
|
432
|
+
"displayName": {
|
|
433
|
+
"type": "string",
|
|
434
|
+
"minLength": 1,
|
|
435
|
+
"description": "Display name to use when the relay agent is created or refreshed."
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
"relay": {
|
|
440
|
+
"type": "object",
|
|
441
|
+
"additionalProperties": false,
|
|
442
|
+
"properties": {
|
|
443
|
+
"appToken": {
|
|
444
|
+
"type": "string",
|
|
445
|
+
"minLength": 1,
|
|
446
|
+
"description": "Canonical Claworld app token for this account. The runtime resolves the bound relay agent from this token."
|
|
447
|
+
},
|
|
448
|
+
"agentId": {
|
|
449
|
+
"type": "string",
|
|
450
|
+
"minLength": 1,
|
|
451
|
+
"description": "Legacy relay agent id hint. Canonical flow resolves the binding from appToken at runtime."
|
|
452
|
+
},
|
|
453
|
+
"credentialToken": {
|
|
454
|
+
"type": "string",
|
|
455
|
+
"minLength": 1,
|
|
456
|
+
"description": "Legacy alias for appToken."
|
|
457
|
+
},
|
|
458
|
+
"defaultToAddress": {
|
|
459
|
+
"type": "string",
|
|
460
|
+
"minLength": 1,
|
|
461
|
+
"description": "Default relay target address (for example alice@robin) for minimal outbound testing."
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xfxstudio/claworld",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Claworld channel plugin for OpenClaw",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"claworld": "./bin/claworld.mjs"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./index.js",
|
|
12
|
+
"./setup-entry": "./setup-entry.js",
|
|
13
|
+
"./plugin": "./src/openclaw/index.js",
|
|
14
|
+
"./package.json": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"README.md",
|
|
18
|
+
"bin",
|
|
19
|
+
"index.js",
|
|
20
|
+
"setup-entry.js",
|
|
21
|
+
"openclaw.plugin.json",
|
|
22
|
+
"src/openclaw",
|
|
23
|
+
"src/product-shell",
|
|
24
|
+
"src/lib/accepted-chat-kickoff.js",
|
|
25
|
+
"src/lib/agent-address.js",
|
|
26
|
+
"src/lib/agent-profile.js",
|
|
27
|
+
"src/lib/http-auth.js",
|
|
28
|
+
"src/lib/policy.js",
|
|
29
|
+
"src/lib/runtime-guidance.js",
|
|
30
|
+
"src/lib/runtime-errors.js"
|
|
31
|
+
],
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/Lightningxxl/claworld.git"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/Lightningxxl/claworld",
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/Lightningxxl/claworld/issues"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"openclaw",
|
|
42
|
+
"plugin",
|
|
43
|
+
"channel",
|
|
44
|
+
"claworld"
|
|
45
|
+
],
|
|
46
|
+
"license": "ISC",
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"openclaw": ">=2026.3.14"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"ws": "^8.19.0"
|
|
55
|
+
},
|
|
56
|
+
"openclaw": {
|
|
57
|
+
"extensions": [
|
|
58
|
+
"./index.js"
|
|
59
|
+
],
|
|
60
|
+
"setupEntry": "./setup-entry.js",
|
|
61
|
+
"channel": {
|
|
62
|
+
"id": "claworld",
|
|
63
|
+
"label": "Claworld",
|
|
64
|
+
"selectionLabel": "Claworld Persona Relay",
|
|
65
|
+
"docsPath": "/channels/claworld",
|
|
66
|
+
"docsLabel": "claworld",
|
|
67
|
+
"blurb": "Claworld relay world channel backed by the Claworld backend.",
|
|
68
|
+
"order": 90
|
|
69
|
+
},
|
|
70
|
+
"install": {
|
|
71
|
+
"npmSpec": "@xfxstudio/claworld",
|
|
72
|
+
"defaultChoice": "npm",
|
|
73
|
+
"minHostVersion": ">=2026.3.14"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
package/setup-entry.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { defineSetupPluginEntry } from 'openclaw/plugin-sdk/core';
|
|
2
|
+
import { createClaworldChannelPlugin } from './src/openclaw/index.js';
|
|
3
|
+
|
|
4
|
+
export const claworldSetupPlugin = createClaworldChannelPlugin();
|
|
5
|
+
|
|
6
|
+
export default defineSetupPluginEntry(claworldSetupPlugin);
|