@xfxstudio/claworld 0.2.9 → 0.2.10-beta.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.
Files changed (49) hide show
  1. package/README.md +1 -1
  2. package/openclaw.plugin.json +7 -63
  3. package/package.json +6 -2
  4. package/skills/claworld-help/SKILL.md +5 -1
  5. package/skills/claworld-join-and-chat/SKILL.md +21 -1
  6. package/skills/claworld-manage-worlds/SKILL.md +81 -10
  7. package/src/lib/agent-profile.js +8 -3
  8. package/src/lib/chat-request.js +0 -1
  9. package/src/lib/policy.js +2 -6
  10. package/src/lib/public-identity.js +175 -0
  11. package/src/lib/relay/kickoff-text.js +1 -0
  12. package/src/openclaw/installer/cli.js +48 -4
  13. package/src/openclaw/installer/constants.js +1 -0
  14. package/src/openclaw/installer/core.js +247 -71
  15. package/src/openclaw/installer/doctor.js +31 -17
  16. package/src/openclaw/plugin/account-identity.js +1 -2
  17. package/src/openclaw/plugin/claworld-channel-plugin.js +453 -263
  18. package/src/openclaw/plugin/config-schema.js +9 -23
  19. package/src/openclaw/plugin/managed-config.js +294 -84
  20. package/src/openclaw/plugin/onboarding.js +37 -45
  21. package/src/openclaw/plugin/register.js +124 -13
  22. package/src/openclaw/plugin/relay-client.js +233 -17
  23. package/src/openclaw/runtime/backend-error-context.js +91 -0
  24. package/src/openclaw/runtime/feedback-helper.js +1 -2
  25. package/src/openclaw/runtime/product-shell-helper.js +43 -9
  26. package/src/openclaw/runtime/tool-contracts.js +26 -3
  27. package/src/openclaw/runtime/tool-inventory.js +7 -0
  28. package/src/openclaw/runtime/world-moderation-helper.js +3 -19
  29. package/src/product-shell/contracts/candidate-feed.js +7 -0
  30. package/src/product-shell/contracts/world-manifest.js +0 -1
  31. package/src/product-shell/contracts/world-orchestration.js +10 -1
  32. package/src/product-shell/conversation-feedback/conversation-feedback-service.js +261 -0
  33. package/src/product-shell/feedback/feedback-routes.js +0 -1
  34. package/src/product-shell/feedback/feedback-service.js +4 -9
  35. package/src/product-shell/index.js +40 -7
  36. package/src/product-shell/matching/matchmaking-service.js +22 -1
  37. package/src/product-shell/membership/membership-service.js +5 -1
  38. package/src/product-shell/onboarding/onboarding-service.js +16 -26
  39. package/src/product-shell/profile/public-identity-routes.js +60 -0
  40. package/src/product-shell/profile/public-identity-service.js +190 -0
  41. package/src/product-shell/search/search-service.js +9 -2
  42. package/src/product-shell/social/chat-request-service.js +22 -7
  43. package/src/product-shell/social/friend-routes.js +1 -1
  44. package/src/product-shell/social/friend-service.js +16 -19
  45. package/src/product-shell/social/social-routes.js +2 -2
  46. package/src/product-shell/social/social-service.js +31 -35
  47. package/src/product-shell/worlds/world-admin-service.js +31 -10
  48. package/src/product-shell/worlds/world-broadcast-service.js +2 -2
  49. package/src/lib/agent-address.js +0 -46
@@ -8,6 +8,7 @@ import {
8
8
  CLAWORLD_INSTALLER_BIN_NAME,
9
9
  CLAWORLD_INSTALLER_COMMAND,
10
10
  CLAWORLD_INSTALLER_PACKAGE_NAME,
11
+ CLAWORLD_UNINSTALL_COMMAND,
11
12
  CLAWORLD_UPDATE_COMMAND,
12
13
  } from './constants.js';
13
14
  import { formatClaworldDoctorReport, runClaworldDoctor } from './doctor.js';
@@ -15,6 +16,7 @@ import {
15
16
  DEFAULT_OPENCLAW_BIN,
16
17
  DEFAULT_OPENCLAW_CONFIG_PATH,
17
18
  runClaworldInstallerInstall,
19
+ runClaworldInstallerUninstall,
18
20
  runClaworldInstallerUpdate,
19
21
  } from './core.js';
20
22
 
@@ -38,6 +40,7 @@ Commands:
38
40
  install Run the installer-first Claworld setup flow
39
41
  doctor Validate the managed Claworld install health
40
42
  update Update the tracked Claworld plugin, refresh managed state, and run doctor
43
+ uninstall Safely remove the managed Claworld runtime and uninstall the plugin
41
44
  upgrade Alias for update
42
45
  help Show this help
43
46
 
@@ -74,6 +77,12 @@ Doctor options:
74
77
  --account-id <id> Managed Claworld account id (default: claworld)
75
78
  --agent-id <id> Local OpenClaw agent id bound to claworld (default: main)
76
79
  --workspace <path> Optional dedicated workspace path override
80
+ Uninstall options:
81
+ --config <path> OpenClaw config path (default: ${DEFAULT_OPENCLAW_CONFIG_PATH})
82
+ --state-dir <path> Optional OPENCLAW_STATE_DIR for OpenClaw commands
83
+ --openclaw-bin <path> OpenClaw CLI binary (default: ${DEFAULT_OPENCLAW_BIN})
84
+ --account-id <id> Managed Claworld account id (default: claworld)
85
+ --agent-id <id> Local OpenClaw agent id bound to claworld (default: main)
77
86
  --json Print machine-readable result
78
87
  --help, -h Show this help
79
88
 
@@ -81,6 +90,7 @@ Canonical commands:
81
90
  ${CLAWORLD_INSTALLER_COMMAND}
82
91
  ${CLAWORLD_DOCTOR_COMMAND}
83
92
  ${CLAWORLD_UPDATE_COMMAND}
93
+ ${CLAWORLD_UNINSTALL_COMMAND}
84
94
  `);
85
95
  }
86
96
 
@@ -132,6 +142,13 @@ export function parseInstallerCliArgs(argv = process.argv.slice(2), env = proces
132
142
  agentId: 'main',
133
143
  workspace: null,
134
144
  },
145
+ uninstall: {
146
+ openclawBin: env.OPENCLAW_BIN || DEFAULT_OPENCLAW_BIN,
147
+ configPath: expandUserPath(env.OPENCLAW_CONFIG_PATH || DEFAULT_OPENCLAW_CONFIG_PATH, homeDir),
148
+ stateDir: env.OPENCLAW_STATE_DIR ? expandUserPath(env.OPENCLAW_STATE_DIR, homeDir) : null,
149
+ accountId: 'claworld',
150
+ agentId: 'main',
151
+ },
135
152
  };
136
153
 
137
154
  if (argv.length === 0) {
@@ -149,18 +166,21 @@ export function parseInstallerCliArgs(argv = process.argv.slice(2), env = proces
149
166
  options.install.configPath = expandUserPath(nextValue(remaining, index), homeDir);
150
167
  options.update.configPath = options.install.configPath;
151
168
  options.doctor.configPath = options.install.configPath;
169
+ options.uninstall.configPath = options.install.configPath;
152
170
  index += 1;
153
171
  break;
154
172
  case '--state-dir':
155
173
  options.install.stateDir = expandUserPath(nextValue(remaining, index), homeDir);
156
174
  options.update.stateDir = options.install.stateDir;
157
175
  options.doctor.stateDir = options.install.stateDir;
176
+ options.uninstall.stateDir = options.install.stateDir;
158
177
  index += 1;
159
178
  break;
160
179
  case '--openclaw-bin':
161
180
  options.install.openclawBin = nextValue(remaining, index);
162
181
  options.update.openclawBin = options.install.openclawBin;
163
182
  options.doctor.openclawBin = options.install.openclawBin;
183
+ options.uninstall.openclawBin = options.install.openclawBin;
164
184
  index += 1;
165
185
  break;
166
186
  case '--server-url':
@@ -178,12 +198,14 @@ export function parseInstallerCliArgs(argv = process.argv.slice(2), env = proces
178
198
  options.install.accountId = nextValue(remaining, index);
179
199
  options.update.accountId = options.install.accountId;
180
200
  options.doctor.accountId = options.install.accountId;
201
+ options.uninstall.accountId = options.install.accountId;
181
202
  index += 1;
182
203
  break;
183
204
  case '--agent-id':
184
205
  options.install.agentId = nextValue(remaining, index);
185
206
  options.update.agentId = options.install.agentId;
186
207
  options.doctor.agentId = options.install.agentId;
208
+ options.uninstall.agentId = options.install.agentId;
187
209
  index += 1;
188
210
  break;
189
211
  case '--workspace':
@@ -226,7 +248,7 @@ export function parseInstallerCliArgs(argv = process.argv.slice(2), env = proces
226
248
  }
227
249
  }
228
250
 
229
- if (!['install', 'update', 'doctor', 'help'].includes(options.command)) {
251
+ if (!['install', 'update', 'uninstall', 'doctor', 'help'].includes(options.command)) {
230
252
  throw new Error(`Unknown command: ${options.command}`);
231
253
  }
232
254
  if (options.command === 'install' && !['npm', 'link', 'copy', 'skip'].includes(options.install.pluginInstallMode)) {
@@ -274,10 +296,9 @@ function printInstallSummary(result) {
274
296
  console.log('Claworld installer complete');
275
297
  console.log('===========================');
276
298
  console.log(`Managed account: ${result.transformed?.config?.channels?.claworld?.defaultAccount || 'claworld'}`);
277
- console.log(`Canonical agentId: ${result.activation?.agentId || '(unknown)'}`);
278
299
  console.log(`OpenClaw version: ${result.host?.version || '(unknown)'}`);
279
300
  console.log(`Plugin action: ${result.plugin?.action || 'unknown'}`);
280
- console.log(`Activation mode: ${result.activationMode}`);
301
+ console.log(`Activation: ${result.activationStatus === 'ready' ? 'ready' : 'pending via claworld_update_public_identity'}`);
281
302
  console.log(`Runtime refresh: ${result.runtimeRefresh?.action || 'unknown'}`);
282
303
  console.log(`Config path: ${result.configPath}`);
283
304
  console.log(`Backup path: ${result.backupPath || '(unchanged or new file)'}`);
@@ -293,10 +314,10 @@ function printUpdateSummary(result, doctorResult) {
293
314
  console.log('Claworld update complete');
294
315
  console.log('========================');
295
316
  console.log(`Managed account: ${result.managedOptions?.accountId || 'claworld'}`);
296
- console.log(`Canonical agentId: ${result.activation?.agentId || '(unknown)'}`);
297
317
  console.log(`OpenClaw version: ${result.host?.version || '(unknown)'}`);
298
318
  console.log(`Plugin action: ${result.plugin?.action || 'unknown'}`);
299
319
  console.log(`Tracked install: ${trackedSummary}`);
320
+ console.log(`Activation: ${result.activationStatus === 'ready' ? 'ready' : 'pending via claworld_update_public_identity'}`);
300
321
  console.log(`Runtime refresh: ${result.runtimeRefresh?.action || 'unknown'}`);
301
322
  console.log(`Doctor status: ${doctorResult?.status || 'unknown'}`);
302
323
  console.log(`Config path: ${result.configPath}`);
@@ -304,6 +325,19 @@ function printUpdateSummary(result, doctorResult) {
304
325
  console.log('');
305
326
  }
306
327
 
328
+ function printUninstallSummary(result) {
329
+ console.log('');
330
+ console.log('Claworld uninstall complete');
331
+ console.log('===========================');
332
+ console.log(`Managed account: ${result.transformed?.backup?.accountId || 'claworld'}`);
333
+ console.log(`OpenClaw version: ${result.host?.version || '(unknown)'}`);
334
+ console.log(`Plugin action: ${result.plugin?.action || 'unknown'}`);
335
+ console.log(`Runtime refresh: ${result.runtimeRefresh?.action || 'unknown'}`);
336
+ console.log(`Config path: ${result.configPath}`);
337
+ console.log(`Backup path: ${result.backupPath || '(unchanged or new file)'}`);
338
+ console.log('');
339
+ }
340
+
307
341
  export async function runInstallerCli(argv = process.argv.slice(2), env = process.env) {
308
342
  const parsed = parseInstallerCliArgs(argv, env);
309
343
  if (parsed.command === 'help') {
@@ -347,6 +381,16 @@ export async function runInstallerCli(argv = process.argv.slice(2), env = proces
347
381
  };
348
382
  }
349
383
 
384
+ if (parsed.command === 'uninstall') {
385
+ const result = await runClaworldInstallerUninstall(parsed.uninstall);
386
+ if (parsed.json) {
387
+ console.log(JSON.stringify(result, null, 2));
388
+ } else {
389
+ printUninstallSummary(result);
390
+ }
391
+ return result;
392
+ }
393
+
350
394
  const result = await runClaworldDoctor(parsed.doctor);
351
395
  if (parsed.json) {
352
396
  console.log(JSON.stringify(result, null, 2));
@@ -3,4 +3,5 @@ export const CLAWORLD_INSTALLER_PACKAGE_NAME = '@xfxstudio/claworld';
3
3
  export const CLAWORLD_INSTALLER_COMMAND = 'npx -y @xfxstudio/claworld install';
4
4
  export const CLAWORLD_DOCTOR_COMMAND = 'npx -y @xfxstudio/claworld doctor';
5
5
  export const CLAWORLD_UPDATE_COMMAND = 'npx -y @xfxstudio/claworld update';
6
+ export const CLAWORLD_UNINSTALL_COMMAND = 'npx -y @xfxstudio/claworld uninstall';
6
7
  export const CLAWORLD_OPENCLAW_MIN_HOST_VERSION = '>=2026.3.22';