commanderclaw 1.1.5 → 1.1.6

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/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { handleGateway } from './gateway.js';
2
2
  import { handlePlugin } from './plugin.js';
3
3
  import { handleConfig } from './config.js';
4
- const VERSION = '1.1.5';
4
+ const VERSION = '1.1.6';
5
5
  function printUsage() {
6
6
  console.log('CommanderClaw - Multi-device Agent Coordination Framework');
7
7
  console.log();
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/plugin/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/plugin/client.ts"],"names":[],"mappings":"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"}
@@ -217,14 +217,25 @@ class CommanderClawClient {
217
217
  console.error(`[CommanderClawClient] send: WebSocket not connected, cannot send ${type}`);
218
218
  return;
219
219
  }
220
+ let to;
221
+ let actualPayload = payload;
222
+ if (payload && typeof payload === "object" && "to" in payload) {
223
+ const { to: toField, ...rest } = payload;
224
+ to = toField;
225
+ actualPayload = rest;
226
+ }
220
227
  const msg = {
221
228
  type,
222
229
  id: crypto.randomUUID(),
223
230
  from: this.nodeId || "unknown",
224
- payload,
231
+ to,
232
+ payload: actualPayload,
225
233
  timestamp: Date.now(),
226
234
  };
227
- console.log(`[CommanderClawClient] send: type=${type}, from=${msg.from}`, payload);
235
+ if (to) {
236
+ msg.msgType = "private";
237
+ }
238
+ console.log(`[CommanderClawClient] send: type=${type}, from=${msg.from}, to=${to || "broadcast"}`, actualPayload);
228
239
  this.ws.send(JSON.stringify(msg));
229
240
  }
230
241
  on(event, handler) {
@@ -4290,15 +4301,20 @@ async function handleChatMessage(msg) {
4290
4301
  to: msg.to,
4291
4302
  msgType: msg.msgType,
4292
4303
  });
4304
+ if (!client) {
4305
+ log.error("handleChatMessage: client not initialized");
4306
+ return;
4307
+ }
4308
+ const nodeId = client.getNodeId();
4309
+ if (msg.from === nodeId) {
4310
+ log.debug("handleChatMessage: ignoring own message", { from: msg.from });
4311
+ return;
4312
+ }
4293
4313
  const rt = getRuntime();
4294
4314
  if (!rt || !rt.channel) {
4295
4315
  log.error("handleChatMessage: runtime or channel not initialized");
4296
4316
  return;
4297
4317
  }
4298
- if (!client) {
4299
- log.error("handleChatMessage: client not initialized");
4300
- return;
4301
- }
4302
4318
  if (!pluginConfig) {
4303
4319
  log.error("handleChatMessage: pluginConfig not initialized");
4304
4320
  return;
@@ -4312,6 +4328,7 @@ async function handleChatMessage(msg) {
4312
4328
  from: msg.from,
4313
4329
  contentLength: content.length,
4314
4330
  });
4331
+ const senderId = msg.from;
4315
4332
  try {
4316
4333
  const nodeId = client.getNodeId() || "unknown";
4317
4334
  const route = rt.channel.routing.resolveAgentRoute({
@@ -4320,7 +4337,7 @@ async function handleChatMessage(msg) {
4320
4337
  accountId: "default",
4321
4338
  peer: {
4322
4339
  kind: "direct",
4323
- id: msg.from,
4340
+ id: senderId,
4324
4341
  },
4325
4342
  });
4326
4343
  const ctxPayload = rt.channel.reply.finalizeInboundContext({
@@ -4328,13 +4345,13 @@ async function handleChatMessage(msg) {
4328
4345
  RawBody: content,
4329
4346
  CommandBody: content,
4330
4347
  MessageSid: `cc-${Date.now()}`,
4331
- From: `${CHANNEL_ID}:${msg.from}`,
4348
+ From: `${CHANNEL_ID}:${senderId}`,
4332
4349
  To: `${CHANNEL_ID}:${nodeId}`,
4333
- SenderId: msg.from,
4350
+ SenderId: senderId,
4334
4351
  SessionKey: route.sessionKey,
4335
4352
  AccountId: "default",
4336
4353
  ChatType: "direct",
4337
- ConversationLabel: `user:${msg.from}`,
4354
+ ConversationLabel: `user:${senderId}`,
4338
4355
  Timestamp: Date.now(),
4339
4356
  Provider: CHANNEL_ID,
4340
4357
  Surface: CHANNEL_ID,
@@ -4352,10 +4369,12 @@ async function handleChatMessage(msg) {
4352
4369
  accumulatedText = payload.text;
4353
4370
  if (info.kind === "final") {
4354
4371
  log.info("handleChatMessage: sending response", {
4372
+ to: senderId,
4355
4373
  textLength: accumulatedText.length,
4356
4374
  });
4357
4375
  client?.send("CHAT", {
4358
4376
  content: accumulatedText,
4377
+ to: senderId,
4359
4378
  });
4360
4379
  }
4361
4380
  },