@agentvault/agentvault 0.19.60 → 0.19.61
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/channel.d.ts +5 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/cli.js +125 -1
- package/dist/cli.js.map +2 -2
- package/dist/index.js +125 -1
- package/dist/index.js.map +2 -2
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/channel.d.ts
CHANGED
|
@@ -344,6 +344,11 @@ export declare class SecureChannel extends EventEmitter {
|
|
|
344
344
|
/** Purge all credentials for a room (call on rental end). */
|
|
345
345
|
purgeRoomCredentials(roomId: string): void;
|
|
346
346
|
private _handleRoomMessageMLS;
|
|
347
|
+
/**
|
|
348
|
+
* Handle a history catch-up request from a device that just rejoined a room.
|
|
349
|
+
* Only the elected agent (smallest device_id among agents) responds.
|
|
350
|
+
*/
|
|
351
|
+
private _handleHistoryCatchupRequest;
|
|
347
352
|
private _handleMlsCommit;
|
|
348
353
|
private _handleMlsWelcome;
|
|
349
354
|
/**
|
package/dist/channel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C,OAAO,EAWL,iBAAiB,EAElB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EAKZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,QAAQ,EAER,UAAU,EAEV,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,UAAU,EAGX,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -63569,7 +63569,7 @@ function migratePersistedState(raw) {
|
|
|
63569
63569
|
messageHistory: []
|
|
63570
63570
|
};
|
|
63571
63571
|
}
|
|
63572
|
-
var ROOM_AGENT_TYPES, CREDENTIAL_MESSAGE_TYPES, POLL_INTERVAL_MS, RECONNECT_BASE_MS, RECONNECT_MAX_MS, PENDING_POLL_INTERVAL_MS, SecureChannel;
|
|
63572
|
+
var ROOM_AGENT_TYPES, CREDENTIAL_MESSAGE_TYPES, CATCHUP_MESSAGE_TYPES, POLL_INTERVAL_MS, RECONNECT_BASE_MS, RECONNECT_MAX_MS, PENDING_POLL_INTERVAL_MS, SecureChannel;
|
|
63573
63573
|
var init_channel = __esm({
|
|
63574
63574
|
async "src/channel.ts"() {
|
|
63575
63575
|
"use strict";
|
|
@@ -63592,6 +63592,10 @@ var init_channel = __esm({
|
|
|
63592
63592
|
"credential_revoke",
|
|
63593
63593
|
"credential_request"
|
|
63594
63594
|
]);
|
|
63595
|
+
CATCHUP_MESSAGE_TYPES = /* @__PURE__ */ new Set([
|
|
63596
|
+
"history_catchup_request",
|
|
63597
|
+
"history_catchup_response"
|
|
63598
|
+
]);
|
|
63595
63599
|
POLL_INTERVAL_MS = 6e3;
|
|
63596
63600
|
RECONNECT_BASE_MS = 1e3;
|
|
63597
63601
|
RECONNECT_MAX_MS = 3e4;
|
|
@@ -66577,6 +66581,12 @@ ${messageText}`;
|
|
|
66577
66581
|
await this._persistState();
|
|
66578
66582
|
return;
|
|
66579
66583
|
}
|
|
66584
|
+
if (CATCHUP_MESSAGE_TYPES.has(messageType)) {
|
|
66585
|
+
if (messageType === "history_catchup_request") {
|
|
66586
|
+
await this._handleHistoryCatchupRequest(resolvedRoomId, messageText, data.message_id);
|
|
66587
|
+
}
|
|
66588
|
+
return;
|
|
66589
|
+
}
|
|
66580
66590
|
if (!ROOM_AGENT_TYPES.has(messageType)) {
|
|
66581
66591
|
return;
|
|
66582
66592
|
}
|
|
@@ -66623,6 +66633,55 @@ ${messageText}`;
|
|
|
66623
66633
|
console.error(`[SecureChannel] MLS room decrypt failed for ${resolvedRoomId.slice(0, 8)}:`, err);
|
|
66624
66634
|
}
|
|
66625
66635
|
}
|
|
66636
|
+
/**
|
|
66637
|
+
* Handle a history catch-up request from a device that just rejoined a room.
|
|
66638
|
+
* Only the elected agent (smallest device_id among agents) responds.
|
|
66639
|
+
*/
|
|
66640
|
+
async _handleHistoryCatchupRequest(roomId, requestText, messageId) {
|
|
66641
|
+
let request;
|
|
66642
|
+
try {
|
|
66643
|
+
request = JSON.parse(requestText);
|
|
66644
|
+
} catch {
|
|
66645
|
+
return;
|
|
66646
|
+
}
|
|
66647
|
+
const roomMembers = this._persisted?.rooms?.[roomId]?.members ?? [];
|
|
66648
|
+
const agentDeviceIds = roomMembers.filter((m2) => m2.entityType !== "owner" && m2.entityType !== "human").map((m2) => m2.deviceId).sort();
|
|
66649
|
+
const isElected = agentDeviceIds.length > 0 && agentDeviceIds[0] === this._deviceId;
|
|
66650
|
+
if (!isElected && !request.retry) {
|
|
66651
|
+
console.log(
|
|
66652
|
+
`[SecureChannel] History catchup: not elected (elected=${agentDeviceIds[0]?.slice(0, 8)}), ignoring`
|
|
66653
|
+
);
|
|
66654
|
+
return;
|
|
66655
|
+
}
|
|
66656
|
+
const history = this.getRoomHistory(roomId, 100);
|
|
66657
|
+
let filtered = history;
|
|
66658
|
+
if (request.since_ts) {
|
|
66659
|
+
const sinceTime = new Date(request.since_ts).getTime();
|
|
66660
|
+
filtered = history.filter((e) => new Date(e.ts).getTime() > sinceTime);
|
|
66661
|
+
}
|
|
66662
|
+
console.log(
|
|
66663
|
+
`[SecureChannel] History catchup for room ${roomId.slice(0, 8)}: ${filtered.length} messages since ${request.since_ts || "beginning"} (total history: ${history.length})`
|
|
66664
|
+
);
|
|
66665
|
+
const responsePayload = JSON.stringify({
|
|
66666
|
+
type: "history_catchup_response",
|
|
66667
|
+
target_device_id: request.requesting_device_id,
|
|
66668
|
+
messages: filtered.map((e) => ({
|
|
66669
|
+
sender: e.sender,
|
|
66670
|
+
sender_name: e.sender === "agent" ? this.config.agentName ?? "Agent" : "Owner",
|
|
66671
|
+
text: e.text,
|
|
66672
|
+
ts: e.ts
|
|
66673
|
+
})),
|
|
66674
|
+
no_history: filtered.length === 0
|
|
66675
|
+
});
|
|
66676
|
+
try {
|
|
66677
|
+
await this.sendToRoom(roomId, responsePayload, { messageType: "history_catchup_response" });
|
|
66678
|
+
console.log(
|
|
66679
|
+
`[SecureChannel] Sent history catchup response: ${filtered.length} messages to ${request.requesting_device_id?.slice(0, 8)}`
|
|
66680
|
+
);
|
|
66681
|
+
} catch (sendErr) {
|
|
66682
|
+
console.warn(`[SecureChannel] Failed to send history catchup response:`, sendErr);
|
|
66683
|
+
}
|
|
66684
|
+
}
|
|
66626
66685
|
async _handleMlsCommit(data) {
|
|
66627
66686
|
const groupId = data.group_id;
|
|
66628
66687
|
for (const [roomId, room] of Object.entries(this._persisted?.rooms ?? {})) {
|
|
@@ -66837,6 +66896,71 @@ ${messageText}`;
|
|
|
66837
66896
|
console.warn("[SecureChannel] Delivery ack failed:", ackErr);
|
|
66838
66897
|
}
|
|
66839
66898
|
}
|
|
66899
|
+
for (const [roomId, mlsGroup] of this._mlsGroups) {
|
|
66900
|
+
if (!mlsGroup?.isInitialized) continue;
|
|
66901
|
+
if (roomId.includes(":")) continue;
|
|
66902
|
+
const roomState = this._persisted?.rooms?.[roomId];
|
|
66903
|
+
if (!roomState?.mlsGroupId) continue;
|
|
66904
|
+
try {
|
|
66905
|
+
const pendingRes = await fetch(
|
|
66906
|
+
`${this.config.apiUrl}/api/v1/mls/groups/${roomState.mlsGroupId}/pending-welcomes`,
|
|
66907
|
+
{ headers: { Authorization: `Bearer ${this._deviceJwt}` } }
|
|
66908
|
+
);
|
|
66909
|
+
if (!pendingRes.ok) continue;
|
|
66910
|
+
const pending = await pendingRes.json();
|
|
66911
|
+
if (pending.length === 0) continue;
|
|
66912
|
+
console.log(`[SecureChannel] ${pending.length} pending Welcome requests for room ${roomId.slice(0, 8)}`);
|
|
66913
|
+
for (const req of pending) {
|
|
66914
|
+
try {
|
|
66915
|
+
const kpRes = await fetch(
|
|
66916
|
+
`${this.config.apiUrl}/api/v1/mls/key-packages/batch?device_ids=${req.requesting_device_id}`,
|
|
66917
|
+
{ headers: { Authorization: `Bearer ${this._deviceJwt}` } }
|
|
66918
|
+
);
|
|
66919
|
+
if (!kpRes.ok) continue;
|
|
66920
|
+
const kpData = await kpRes.json();
|
|
66921
|
+
const kpHex = kpData[req.requesting_device_id];
|
|
66922
|
+
if (!kpHex) continue;
|
|
66923
|
+
const kpBytes = new Uint8Array(Buffer.from(kpHex, "hex"));
|
|
66924
|
+
const memberKp = MLSGroupManager.deserializeKeyPackage(kpBytes);
|
|
66925
|
+
const { commit, welcome } = await mlsGroup.addMembers([memberKp]);
|
|
66926
|
+
if (this._ws) {
|
|
66927
|
+
this._ws.send(JSON.stringify({
|
|
66928
|
+
event: "mls_commit",
|
|
66929
|
+
data: {
|
|
66930
|
+
group_id: roomState.mlsGroupId,
|
|
66931
|
+
epoch: Number(mlsGroup.epoch),
|
|
66932
|
+
payload: Buffer.from(commit).toString("hex")
|
|
66933
|
+
}
|
|
66934
|
+
}));
|
|
66935
|
+
}
|
|
66936
|
+
if (welcome && this._ws) {
|
|
66937
|
+
this._ws.send(JSON.stringify({
|
|
66938
|
+
event: "mls_welcome",
|
|
66939
|
+
data: {
|
|
66940
|
+
target_device_id: req.requesting_device_id,
|
|
66941
|
+
group_id: roomState.mlsGroupId,
|
|
66942
|
+
room_id: roomId,
|
|
66943
|
+
payload: Buffer.from(welcome).toString("hex")
|
|
66944
|
+
}
|
|
66945
|
+
}));
|
|
66946
|
+
}
|
|
66947
|
+
await fetch(
|
|
66948
|
+
`${this.config.apiUrl}/api/v1/mls/groups/${roomState.mlsGroupId}/fulfill-welcome`,
|
|
66949
|
+
{
|
|
66950
|
+
method: "POST",
|
|
66951
|
+
headers: { Authorization: `Bearer ${this._deviceJwt}`, "Content-Type": "application/json" },
|
|
66952
|
+
body: JSON.stringify({ request_id: req.id })
|
|
66953
|
+
}
|
|
66954
|
+
);
|
|
66955
|
+
await saveMlsState(this.config.dataDir, roomState.mlsGroupId, JSON.stringify(mlsGroup.exportState()));
|
|
66956
|
+
console.log(`[SecureChannel] Fulfilled Welcome for ${req.requesting_device_id.slice(0, 8)} in room ${roomId.slice(0, 8)}`);
|
|
66957
|
+
} catch (fulfillErr) {
|
|
66958
|
+
console.warn(`[SecureChannel] Welcome fulfill failed for ${req.requesting_device_id.slice(0, 8)}:`, fulfillErr);
|
|
66959
|
+
}
|
|
66960
|
+
}
|
|
66961
|
+
} catch {
|
|
66962
|
+
}
|
|
66963
|
+
}
|
|
66840
66964
|
} catch (err) {
|
|
66841
66965
|
console.warn("[SecureChannel] Delivery pull error:", err);
|
|
66842
66966
|
} finally {
|