@agentvault/agentvault 0.20.31 → 0.20.32

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 (66) hide show
  1. package/dist/cli.js +61 -3
  2. package/dist/cli.js.map +2 -2
  3. package/dist/index.js +61 -3
  4. package/dist/index.js.map +2 -2
  5. package/openclaw.plugin.json +1 -1
  6. package/package.json +1 -1
  7. package/dist/_cp.d.ts +0 -10
  8. package/dist/_cp.d.ts.map +0 -1
  9. package/dist/account-config.d.ts +0 -20
  10. package/dist/account-config.d.ts.map +0 -1
  11. package/dist/channel.d.ts +0 -418
  12. package/dist/channel.d.ts.map +0 -1
  13. package/dist/cli.d.ts +0 -2
  14. package/dist/cli.d.ts.map +0 -1
  15. package/dist/create-agent.d.ts +0 -28
  16. package/dist/create-agent.d.ts.map +0 -1
  17. package/dist/credential-store.d.ts +0 -62
  18. package/dist/credential-store.d.ts.map +0 -1
  19. package/dist/crypto-helpers.d.ts +0 -2
  20. package/dist/crypto-helpers.d.ts.map +0 -1
  21. package/dist/doctor.d.ts +0 -41
  22. package/dist/doctor.d.ts.map +0 -1
  23. package/dist/fetch-interceptor.d.ts +0 -32
  24. package/dist/fetch-interceptor.d.ts.map +0 -1
  25. package/dist/gateway-send.d.ts +0 -98
  26. package/dist/gateway-send.d.ts.map +0 -1
  27. package/dist/http-handlers.d.ts +0 -53
  28. package/dist/http-handlers.d.ts.map +0 -1
  29. package/dist/index.d.ts +0 -27
  30. package/dist/index.d.ts.map +0 -1
  31. package/dist/mcp-handlers.d.ts +0 -26
  32. package/dist/mcp-handlers.d.ts.map +0 -1
  33. package/dist/mcp-proxy-helpers.d.ts +0 -9
  34. package/dist/mcp-proxy-helpers.d.ts.map +0 -1
  35. package/dist/mcp-server.d.ts +0 -91
  36. package/dist/mcp-server.d.ts.map +0 -1
  37. package/dist/mls-state.d.ts +0 -54
  38. package/dist/mls-state.d.ts.map +0 -1
  39. package/dist/openclaw-compat.d.ts +0 -33
  40. package/dist/openclaw-compat.d.ts.map +0 -1
  41. package/dist/openclaw-entry.d.ts +0 -32
  42. package/dist/openclaw-entry.d.ts.map +0 -1
  43. package/dist/openclaw-plugin.d.ts +0 -102
  44. package/dist/openclaw-plugin.d.ts.map +0 -1
  45. package/dist/openclaw-types.d.ts +0 -186
  46. package/dist/openclaw-types.d.ts.map +0 -1
  47. package/dist/policy-enforcer.d.ts +0 -78
  48. package/dist/policy-enforcer.d.ts.map +0 -1
  49. package/dist/setup.d.ts +0 -27
  50. package/dist/setup.d.ts.map +0 -1
  51. package/dist/skill-invoker.d.ts +0 -30
  52. package/dist/skill-invoker.d.ts.map +0 -1
  53. package/dist/skill-manifest.d.ts +0 -30
  54. package/dist/skill-manifest.d.ts.map +0 -1
  55. package/dist/skill-telemetry.d.ts +0 -36
  56. package/dist/skill-telemetry.d.ts.map +0 -1
  57. package/dist/skills-publish.d.ts +0 -8
  58. package/dist/skills-publish.d.ts.map +0 -1
  59. package/dist/state.d.ts +0 -32
  60. package/dist/state.d.ts.map +0 -1
  61. package/dist/transport.d.ts +0 -24
  62. package/dist/transport.d.ts.map +0 -1
  63. package/dist/types.d.ts +0 -454
  64. package/dist/types.d.ts.map +0 -1
  65. package/dist/workspace-handlers.d.ts +0 -62
  66. package/dist/workspace-handlers.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -63720,6 +63720,8 @@ var init_channel = __esm({
63720
63720
  _mlsKeyPackage = null;
63721
63721
  /** Pending KeyPackage bundle from request-Welcome flow (used by _handleMlsWelcome). */
63722
63722
  _pendingMlsKpBundle;
63723
+ /** Buffer for MLS commits received before Welcome (keyed by groupId, sorted by epoch). */
63724
+ _pendingMlsCommits = /* @__PURE__ */ new Map();
63723
63725
  /** In-memory credential store for renter-provided credentials (never persisted). */
63724
63726
  _credentialStore = new CredentialStore();
63725
63727
  /** Dedup buffer for A2A message IDs (prevents double-delivery via direct + Redis) */
@@ -67029,6 +67031,11 @@ ${messageText}`;
67029
67031
  console.log(`[SecureChannel] MLS decrypt attempt room=${resolvedRoomId.slice(0, 8)} group=${groupId?.slice(0, 8)} loaded=${!!mlsGroup} init=${mlsGroup?.isInitialized} mlsGroupsKeys=[${Array.from(this._mlsGroups.keys()).join(",")}]`);
67030
67032
  if (!mlsGroup?.isInitialized) {
67031
67033
  console.warn(`[SecureChannel] MLS group not loaded for room ${resolvedRoomId.slice(0, 8)}, requesting Welcome`);
67034
+ const roomLockId = `room-kp-${groupId}`;
67035
+ if (!await acquireA2ASyncLock(this.config.dataDir, roomLockId)) {
67036
+ console.log(`[SecureChannel] Room KP publish locked for group ${groupId?.slice(0, 8)}, skipping`);
67037
+ return;
67038
+ }
67032
67039
  try {
67033
67040
  const { MLSGroupManager: MLS } = await init_dist().then(() => dist_exports);
67034
67041
  const mgr = new MLS();
@@ -67041,6 +67048,7 @@ ${messageText}`;
67041
67048
  body: JSON.stringify({ key_package: kpHex, device_id: this._deviceId })
67042
67049
  });
67043
67050
  this._pendingMlsKpBundle = kp;
67051
+ await savePendingKpBundle(this.config.dataDir, groupId, kp);
67044
67052
  await fetch(`${this.config.apiUrl}/api/v1/mls/groups/${groupId}/request-welcome`, {
67045
67053
  method: "POST",
67046
67054
  headers: { Authorization: `Bearer ${this._deviceJwt}`, "Content-Type": "application/json" },
@@ -67049,6 +67057,8 @@ ${messageText}`;
67049
67057
  console.log(`[SecureChannel] Welcome requested for room ${resolvedRoomId.slice(0, 8)} group ${groupId?.slice(0, 8)}`);
67050
67058
  } catch (reqErr) {
67051
67059
  console.warn(`[SecureChannel] Welcome request failed for room ${resolvedRoomId.slice(0, 8)}:`, reqErr);
67060
+ await releaseA2ASyncLock(this.config.dataDir, roomLockId).catch(() => {
67061
+ });
67052
67062
  }
67053
67063
  return;
67054
67064
  }
@@ -67181,6 +67191,7 @@ ${messageText}`;
67181
67191
  }
67182
67192
  async _handleMlsCommit(data) {
67183
67193
  const groupId = data.group_id;
67194
+ const epoch = typeof data.epoch === "number" ? data.epoch : 0;
67184
67195
  for (const [roomId, room] of Object.entries(this._persisted?.rooms ?? {})) {
67185
67196
  if (room.mlsGroupId === groupId) {
67186
67197
  const mlsGroup = this._mlsGroups.get(roomId);
@@ -67199,6 +67210,9 @@ ${messageText}`;
67199
67210
  throw err;
67200
67211
  }
67201
67212
  }
67213
+ } else {
67214
+ this._bufferMlsCommit(groupId, epoch, data);
67215
+ console.log(`[SecureChannel] Buffered MLS commit for room ${roomId.slice(0, 8)} (epoch=${epoch}, group not initialized)`);
67202
67216
  }
67203
67217
  return;
67204
67218
  }
@@ -67221,11 +67235,50 @@ ${messageText}`;
67221
67235
  throw err;
67222
67236
  }
67223
67237
  }
67238
+ } else {
67239
+ this._bufferMlsCommit(groupId, epoch, data);
67240
+ console.log(`[SecureChannel] Buffered MLS commit for A2A ${chId.slice(0, 8)} (epoch=${epoch}, group not initialized)`);
67224
67241
  }
67225
67242
  return;
67226
67243
  }
67227
67244
  }
67228
67245
  }
67246
+ /** Buffer an MLS commit for replay after Welcome join. Max 50 per group. */
67247
+ _bufferMlsCommit(groupId, epoch, data) {
67248
+ let buf = this._pendingMlsCommits.get(groupId);
67249
+ if (!buf) {
67250
+ buf = [];
67251
+ this._pendingMlsCommits.set(groupId, buf);
67252
+ }
67253
+ if (!buf.some((c2) => c2.epoch === epoch)) {
67254
+ buf.push({ epoch, data });
67255
+ buf.sort((a2, b2) => a2.epoch - b2.epoch);
67256
+ if (buf.length > 50) buf.splice(0, buf.length - 50);
67257
+ }
67258
+ }
67259
+ /** Apply buffered MLS commits after Welcome join. */
67260
+ async _applyBufferedMlsCommits(groupId, mgr) {
67261
+ const buf = this._pendingMlsCommits.get(groupId);
67262
+ if (!buf || buf.length === 0) return;
67263
+ console.log(`[SecureChannel] Applying ${buf.length} buffered MLS commits for group ${groupId.slice(0, 8)}`);
67264
+ let applied = 0;
67265
+ for (const entry of buf) {
67266
+ if (entry.epoch <= mgr.epoch) continue;
67267
+ try {
67268
+ const commitBytes = new Uint8Array(Buffer.from(entry.data.payload, "hex"));
67269
+ await mgr.processCommit(commitBytes);
67270
+ applied++;
67271
+ } catch (err) {
67272
+ console.warn(`[SecureChannel] Buffered commit epoch=${entry.epoch} failed: ${err?.message}`);
67273
+ break;
67274
+ }
67275
+ }
67276
+ this._pendingMlsCommits.delete(groupId);
67277
+ if (applied > 0) {
67278
+ await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67279
+ console.log(`[SecureChannel] Applied ${applied} buffered commits, now epoch=${mgr.epoch}`);
67280
+ }
67281
+ }
67229
67282
  async _handleMlsWelcome(data) {
67230
67283
  const groupId = data.group_id;
67231
67284
  const conversationId = data.conversation_id;
@@ -67246,8 +67299,8 @@ ${messageText}`;
67246
67299
  }
67247
67300
  }
67248
67301
  if (!kp) {
67249
- const identity = new TextEncoder().encode(this._deviceId);
67250
- kp = await mgr.generateKeyPackage(identity);
67302
+ console.error(`[SecureChannel] No matching KeyPackage found for Welcome \u2014 cannot join group ${groupId?.slice(0, 8)}. A fresh KP would fail because the Welcome is encrypted to the published KP's public key. The existing Welcome recovery mechanism will re-request.`);
67303
+ return;
67251
67304
  }
67252
67305
  console.log(`[SecureChannel] Welcome joinFromWelcome: group=${groupId?.slice(0, 8)} kpSource=${kpSource} welcomeLen=${welcomeBytes.length}`);
67253
67306
  await mgr.joinFromWelcome(welcomeBytes, kp);
@@ -67255,6 +67308,7 @@ ${messageText}`;
67255
67308
  const key = `conv:${conversationId}`;
67256
67309
  this._mlsGroups.set(key, mgr);
67257
67310
  await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67311
+ await this._applyBufferedMlsCommits(groupId, mgr);
67258
67312
  if (this._persisted) {
67259
67313
  if (!this._persisted.mlsConversations) this._persisted.mlsConversations = {};
67260
67314
  this._persisted.mlsConversations[conversationId] = { mlsGroupId: groupId };
@@ -67270,8 +67324,11 @@ ${messageText}`;
67270
67324
  this._mlsGroups.set(roomId, mgr);
67271
67325
  await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67272
67326
  await this._persistState();
67327
+ await this._applyBufferedMlsCommits(groupId, mgr);
67273
67328
  console.log(`[SecureChannel] Joined MLS group for room ${roomId.slice(0, 8)} via Welcome (epoch=${mgr.epoch})`);
67274
67329
  this._pendingMlsKpBundle = void 0;
67330
+ await releaseA2ASyncLock(this.config.dataDir, `room-kp-${groupId}`).catch(() => {
67331
+ });
67275
67332
  return;
67276
67333
  }
67277
67334
  }
@@ -67282,6 +67339,7 @@ ${messageText}`;
67282
67339
  this._mlsGroups.set(`a2a:${channelId}`, mgr);
67283
67340
  await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67284
67341
  await this._persistState();
67342
+ await this._applyBufferedMlsCommits(groupId, mgr);
67285
67343
  await clearPendingWelcome(this.config.dataDir, groupId).catch(() => {
67286
67344
  });
67287
67345
  await releaseA2ASyncLock(this.config.dataDir, channelId).catch(() => {
@@ -94962,7 +95020,7 @@ var init_index = __esm({
94962
95020
  init_skill_invoker();
94963
95021
  await init_skill_telemetry();
94964
95022
  await init_policy_enforcer();
94965
- VERSION = true ? "0.20.31" : "0.0.0-dev";
95023
+ VERSION = true ? "0.20.32" : "0.0.0-dev";
94966
95024
  }
94967
95025
  });
94968
95026
  await init_index();