@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/cli.js CHANGED
@@ -63721,6 +63721,8 @@ var init_channel = __esm({
63721
63721
  _mlsKeyPackage = null;
63722
63722
  /** Pending KeyPackage bundle from request-Welcome flow (used by _handleMlsWelcome). */
63723
63723
  _pendingMlsKpBundle;
63724
+ /** Buffer for MLS commits received before Welcome (keyed by groupId, sorted by epoch). */
63725
+ _pendingMlsCommits = /* @__PURE__ */ new Map();
63724
63726
  /** In-memory credential store for renter-provided credentials (never persisted). */
63725
63727
  _credentialStore = new CredentialStore();
63726
63728
  /** Dedup buffer for A2A message IDs (prevents double-delivery via direct + Redis) */
@@ -67030,6 +67032,11 @@ ${messageText}`;
67030
67032
  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(",")}]`);
67031
67033
  if (!mlsGroup?.isInitialized) {
67032
67034
  console.warn(`[SecureChannel] MLS group not loaded for room ${resolvedRoomId.slice(0, 8)}, requesting Welcome`);
67035
+ const roomLockId = `room-kp-${groupId}`;
67036
+ if (!await acquireA2ASyncLock(this.config.dataDir, roomLockId)) {
67037
+ console.log(`[SecureChannel] Room KP publish locked for group ${groupId?.slice(0, 8)}, skipping`);
67038
+ return;
67039
+ }
67033
67040
  try {
67034
67041
  const { MLSGroupManager: MLS } = await init_dist().then(() => dist_exports);
67035
67042
  const mgr = new MLS();
@@ -67042,6 +67049,7 @@ ${messageText}`;
67042
67049
  body: JSON.stringify({ key_package: kpHex, device_id: this._deviceId })
67043
67050
  });
67044
67051
  this._pendingMlsKpBundle = kp;
67052
+ await savePendingKpBundle(this.config.dataDir, groupId, kp);
67045
67053
  await fetch(`${this.config.apiUrl}/api/v1/mls/groups/${groupId}/request-welcome`, {
67046
67054
  method: "POST",
67047
67055
  headers: { Authorization: `Bearer ${this._deviceJwt}`, "Content-Type": "application/json" },
@@ -67050,6 +67058,8 @@ ${messageText}`;
67050
67058
  console.log(`[SecureChannel] Welcome requested for room ${resolvedRoomId.slice(0, 8)} group ${groupId?.slice(0, 8)}`);
67051
67059
  } catch (reqErr) {
67052
67060
  console.warn(`[SecureChannel] Welcome request failed for room ${resolvedRoomId.slice(0, 8)}:`, reqErr);
67061
+ await releaseA2ASyncLock(this.config.dataDir, roomLockId).catch(() => {
67062
+ });
67053
67063
  }
67054
67064
  return;
67055
67065
  }
@@ -67182,6 +67192,7 @@ ${messageText}`;
67182
67192
  }
67183
67193
  async _handleMlsCommit(data) {
67184
67194
  const groupId = data.group_id;
67195
+ const epoch = typeof data.epoch === "number" ? data.epoch : 0;
67185
67196
  for (const [roomId, room] of Object.entries(this._persisted?.rooms ?? {})) {
67186
67197
  if (room.mlsGroupId === groupId) {
67187
67198
  const mlsGroup = this._mlsGroups.get(roomId);
@@ -67200,6 +67211,9 @@ ${messageText}`;
67200
67211
  throw err;
67201
67212
  }
67202
67213
  }
67214
+ } else {
67215
+ this._bufferMlsCommit(groupId, epoch, data);
67216
+ console.log(`[SecureChannel] Buffered MLS commit for room ${roomId.slice(0, 8)} (epoch=${epoch}, group not initialized)`);
67203
67217
  }
67204
67218
  return;
67205
67219
  }
@@ -67222,11 +67236,50 @@ ${messageText}`;
67222
67236
  throw err;
67223
67237
  }
67224
67238
  }
67239
+ } else {
67240
+ this._bufferMlsCommit(groupId, epoch, data);
67241
+ console.log(`[SecureChannel] Buffered MLS commit for A2A ${chId.slice(0, 8)} (epoch=${epoch}, group not initialized)`);
67225
67242
  }
67226
67243
  return;
67227
67244
  }
67228
67245
  }
67229
67246
  }
67247
+ /** Buffer an MLS commit for replay after Welcome join. Max 50 per group. */
67248
+ _bufferMlsCommit(groupId, epoch, data) {
67249
+ let buf = this._pendingMlsCommits.get(groupId);
67250
+ if (!buf) {
67251
+ buf = [];
67252
+ this._pendingMlsCommits.set(groupId, buf);
67253
+ }
67254
+ if (!buf.some((c2) => c2.epoch === epoch)) {
67255
+ buf.push({ epoch, data });
67256
+ buf.sort((a2, b2) => a2.epoch - b2.epoch);
67257
+ if (buf.length > 50) buf.splice(0, buf.length - 50);
67258
+ }
67259
+ }
67260
+ /** Apply buffered MLS commits after Welcome join. */
67261
+ async _applyBufferedMlsCommits(groupId, mgr) {
67262
+ const buf = this._pendingMlsCommits.get(groupId);
67263
+ if (!buf || buf.length === 0) return;
67264
+ console.log(`[SecureChannel] Applying ${buf.length} buffered MLS commits for group ${groupId.slice(0, 8)}`);
67265
+ let applied = 0;
67266
+ for (const entry of buf) {
67267
+ if (entry.epoch <= mgr.epoch) continue;
67268
+ try {
67269
+ const commitBytes = new Uint8Array(Buffer.from(entry.data.payload, "hex"));
67270
+ await mgr.processCommit(commitBytes);
67271
+ applied++;
67272
+ } catch (err) {
67273
+ console.warn(`[SecureChannel] Buffered commit epoch=${entry.epoch} failed: ${err?.message}`);
67274
+ break;
67275
+ }
67276
+ }
67277
+ this._pendingMlsCommits.delete(groupId);
67278
+ if (applied > 0) {
67279
+ await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67280
+ console.log(`[SecureChannel] Applied ${applied} buffered commits, now epoch=${mgr.epoch}`);
67281
+ }
67282
+ }
67230
67283
  async _handleMlsWelcome(data) {
67231
67284
  const groupId = data.group_id;
67232
67285
  const conversationId = data.conversation_id;
@@ -67247,8 +67300,8 @@ ${messageText}`;
67247
67300
  }
67248
67301
  }
67249
67302
  if (!kp) {
67250
- const identity = new TextEncoder().encode(this._deviceId);
67251
- kp = await mgr.generateKeyPackage(identity);
67303
+ 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.`);
67304
+ return;
67252
67305
  }
67253
67306
  console.log(`[SecureChannel] Welcome joinFromWelcome: group=${groupId?.slice(0, 8)} kpSource=${kpSource} welcomeLen=${welcomeBytes.length}`);
67254
67307
  await mgr.joinFromWelcome(welcomeBytes, kp);
@@ -67256,6 +67309,7 @@ ${messageText}`;
67256
67309
  const key = `conv:${conversationId}`;
67257
67310
  this._mlsGroups.set(key, mgr);
67258
67311
  await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67312
+ await this._applyBufferedMlsCommits(groupId, mgr);
67259
67313
  if (this._persisted) {
67260
67314
  if (!this._persisted.mlsConversations) this._persisted.mlsConversations = {};
67261
67315
  this._persisted.mlsConversations[conversationId] = { mlsGroupId: groupId };
@@ -67271,8 +67325,11 @@ ${messageText}`;
67271
67325
  this._mlsGroups.set(roomId, mgr);
67272
67326
  await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67273
67327
  await this._persistState();
67328
+ await this._applyBufferedMlsCommits(groupId, mgr);
67274
67329
  console.log(`[SecureChannel] Joined MLS group for room ${roomId.slice(0, 8)} via Welcome (epoch=${mgr.epoch})`);
67275
67330
  this._pendingMlsKpBundle = void 0;
67331
+ await releaseA2ASyncLock(this.config.dataDir, `room-kp-${groupId}`).catch(() => {
67332
+ });
67276
67333
  return;
67277
67334
  }
67278
67335
  }
@@ -67283,6 +67340,7 @@ ${messageText}`;
67283
67340
  this._mlsGroups.set(`a2a:${channelId}`, mgr);
67284
67341
  await saveMlsState(this.config.dataDir, groupId, JSON.stringify(mgr.exportState()));
67285
67342
  await this._persistState();
67343
+ await this._applyBufferedMlsCommits(groupId, mgr);
67286
67344
  await clearPendingWelcome(this.config.dataDir, groupId).catch(() => {
67287
67345
  });
67288
67346
  await releaseA2ASyncLock(this.config.dataDir, channelId).catch(() => {
@@ -89065,7 +89123,7 @@ var init_index = __esm({
89065
89123
  init_skill_invoker();
89066
89124
  await init_skill_telemetry();
89067
89125
  await init_policy_enforcer();
89068
- VERSION = true ? "0.20.31" : "0.0.0-dev";
89126
+ VERSION = true ? "0.20.32" : "0.0.0-dev";
89069
89127
  }
89070
89128
  });
89071
89129