@openclawcity/openclawcity 1.0.3 → 1.0.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/dist/adapter.d.ts CHANGED
@@ -25,6 +25,8 @@ export declare class OpenClawCityAdapter {
25
25
  private pingInterval;
26
26
  private reconnectTimer;
27
27
  private pendingReject;
28
+ private doneResolve;
29
+ readonly done: Promise<void>;
28
30
  private readonly gatewayUrl;
29
31
  private readonly botId;
30
32
  private readonly token;
package/dist/index.js CHANGED
@@ -3753,6 +3753,9 @@ var OpenClawCityAdapter = class {
3753
3753
  reconnectTimer = null;
3754
3754
  // Used to reject the openSocket promise on pre-welcome errors
3755
3755
  pendingReject = null;
3756
+ // Resolves when stop() is called — keeps startAccount promise pending
3757
+ doneResolve = null;
3758
+ done;
3756
3759
  gatewayUrl;
3757
3760
  botId;
3758
3761
  token;
@@ -3776,6 +3779,9 @@ var OpenClawCityAdapter = class {
3776
3779
  this.onError = opts.onError;
3777
3780
  this.onStateChange = opts.onStateChange;
3778
3781
  this.logger = opts.logger ?? {};
3782
+ this.done = new Promise((resolve) => {
3783
+ this.doneResolve = resolve;
3784
+ });
3779
3785
  if (opts.signal) {
3780
3786
  opts.signal.addEventListener("abort", () => this.stop(), { once: true });
3781
3787
  }
@@ -3808,6 +3814,7 @@ var OpenClawCityAdapter = class {
3808
3814
  }
3809
3815
  this.closeSocket();
3810
3816
  this.setState(ConnectionState.DISCONNECTED);
3817
+ this.doneResolve?.();
3811
3818
  }
3812
3819
  sendReply(reply) {
3813
3820
  this.send(reply);
@@ -4114,7 +4121,9 @@ var occPlugin = {
4114
4121
  startAccount: async (ctx) => {
4115
4122
  const rt = getRuntime();
4116
4123
  const { cfg, accountId, account, abortSignal, log } = ctx;
4124
+ log?.info?.(`[OCC] startAccount called for ${accountId}, abortSignal.aborted=${abortSignal.aborted}`);
4117
4125
  ctx.setStatus({ accountId, running: true, connected: false, lastStartAt: Date.now() });
4126
+ log?.info?.(`[OCC] setStatus: running=true, connected=false`);
4118
4127
  const adapter = new OpenClawCityAdapter({
4119
4128
  config: account,
4120
4129
  logger: log,
@@ -4218,7 +4227,7 @@ var occPlugin = {
4218
4227
  },
4219
4228
  onWelcome: (welcome) => {
4220
4229
  const nearby = welcome.nearby_bots ?? welcome.nearby ?? [];
4221
- log?.info?.(`Connected to OpenClawCity. Location: ${welcome.location?.zoneName ?? "unknown"}, Nearby: ${nearby.length} bots`);
4230
+ log?.info?.(`[OCC] Connected to OpenClawCity. Location: ${welcome.location?.zoneName ?? welcome.location?.zone_name ?? "unknown"}, Nearby: ${nearby.length} bots`);
4222
4231
  ctx.setStatus({
4223
4232
  accountId,
4224
4233
  running: true,
@@ -4226,28 +4235,24 @@ var occPlugin = {
4226
4235
  lastConnectedAt: Date.now(),
4227
4236
  lastError: null
4228
4237
  });
4238
+ log?.info?.(`[OCC] setStatus: running=true, connected=true`);
4229
4239
  },
4230
4240
  onError: (error) => {
4231
- log?.error?.(`Server error: ${error.reason}`);
4241
+ log?.error?.(`[OCC] Server error: ${error.reason} \u2014 ${error.message ?? ""}`);
4232
4242
  ctx.setStatus({
4233
4243
  ...ctx.getStatus(),
4234
4244
  lastError: `${error.reason}: ${error.message ?? ""}`
4235
4245
  });
4236
4246
  },
4237
4247
  onStateChange: (state) => {
4238
- log?.debug?.(`Connection state: ${state}`);
4239
- if (state === "DISCONNECTED") {
4240
- ctx.setStatus({
4241
- ...ctx.getStatus(),
4242
- connected: false,
4243
- lastDisconnect: { at: Date.now() }
4244
- });
4245
- } else if (state === "CONNECTED") {
4248
+ log?.info?.(`[OCC] Connection state changed: ${state}`);
4249
+ if (state === "CONNECTED") {
4246
4250
  ctx.setStatus({
4247
4251
  ...ctx.getStatus(),
4248
4252
  connected: true,
4249
4253
  lastConnectedAt: Date.now()
4250
4254
  });
4255
+ log?.info?.(`[OCC] setStatus: connected=true`);
4251
4256
  }
4252
4257
  }
4253
4258
  });
@@ -4256,9 +4261,13 @@ var occPlugin = {
4256
4261
  existing.stop();
4257
4262
  }
4258
4263
  adapters.set(accountId, adapter);
4264
+ log?.info?.(`[OCC] adapter.connect() starting...`);
4259
4265
  await adapter.connect();
4260
- return {
4261
- stop: () => {
4266
+ log?.info?.(`[OCC] adapter.connect() resolved \u2014 connection established`);
4267
+ log?.info?.(`[OCC] Entering keep-alive promise (abortSignal.aborted=${abortSignal.aborted})`);
4268
+ return new Promise((resolve) => {
4269
+ const onAbort = () => {
4270
+ log?.info?.(`[OCC] Abort signal received \u2014 shutting down account ${accountId}`);
4262
4271
  adapter.stop();
4263
4272
  adapters.delete(accountId);
4264
4273
  ctx.setStatus({
@@ -4267,8 +4276,17 @@ var occPlugin = {
4267
4276
  connected: false,
4268
4277
  lastStopAt: Date.now()
4269
4278
  });
4279
+ log?.info?.(`[OCC] setStatus: running=false, connected=false \u2014 resolving keep-alive promise`);
4280
+ resolve();
4281
+ };
4282
+ if (abortSignal.aborted) {
4283
+ log?.warn?.(`[OCC] Abort signal was ALREADY aborted before keep-alive \u2014 resolving immediately`);
4284
+ onAbort();
4285
+ } else {
4286
+ log?.info?.(`[OCC] Keep-alive promise active \u2014 waiting for abort signal`);
4287
+ abortSignal.addEventListener("abort", onAbort, { once: true });
4270
4288
  }
4271
- };
4289
+ });
4272
4290
  }
4273
4291
  }
4274
4292
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclawcity/openclawcity",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "OpenClawCity channel plugin for OpenClaw — live city events for AI agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",