agent-relay 2.2.23 → 2.2.24
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/index.cjs +199 -3
- package/package.json +18 -18
- package/packages/acp-bridge/package.json +2 -2
- package/packages/api-types/package.json +1 -1
- package/packages/benchmark/package.json +5 -5
- package/packages/bridge/package.json +7 -7
- package/packages/cli-tester/package.json +1 -1
- package/packages/config/package.json +2 -2
- package/packages/continuity/package.json +2 -2
- package/packages/daemon/dist/cloud-sync.d.ts +13 -1
- package/packages/daemon/dist/cloud-sync.d.ts.map +1 -1
- package/packages/daemon/dist/cloud-sync.js +169 -5
- package/packages/daemon/dist/cloud-sync.js.map +1 -1
- package/packages/daemon/dist/server.d.ts +5 -0
- package/packages/daemon/dist/server.d.ts.map +1 -1
- package/packages/daemon/dist/server.js +50 -0
- package/packages/daemon/dist/server.js.map +1 -1
- package/packages/daemon/package.json +12 -12
- package/packages/daemon/src/cloud-sync.ts +201 -5
- package/packages/daemon/src/server.ts +61 -0
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/package.json +5 -5
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/dist/client.d.ts +1 -1
- package/packages/sdk/dist/client.js +2 -2
- package/packages/sdk/package.json +3 -3
- package/packages/sdk/src/client.ts +2 -2
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +3 -3
- package/packages/wrapper/dist/client.js +1 -1
- package/packages/wrapper/package.json +6 -6
- package/packages/wrapper/src/client.test.ts +1 -1
- package/packages/wrapper/src/client.ts +1 -1
package/dist/index.cjs
CHANGED
|
@@ -33354,8 +33354,8 @@ var RelayClient = class _RelayClient {
|
|
|
33354
33354
|
const result = await this.requestResponse(
|
|
33355
33355
|
"SPAWN",
|
|
33356
33356
|
payload,
|
|
33357
|
-
|
|
33358
|
-
//
|
|
33357
|
+
6e4
|
|
33358
|
+
// 60 second timeout for spawn
|
|
33359
33359
|
);
|
|
33360
33360
|
return toSpawnResult(result);
|
|
33361
33361
|
} catch (e) {
|
|
@@ -58538,6 +58538,7 @@ var CloudSyncService = class extends import_events7.EventEmitter {
|
|
|
58538
58538
|
remoteAgents = [];
|
|
58539
58539
|
remoteUsers = [];
|
|
58540
58540
|
connected = false;
|
|
58541
|
+
useLegacyHeartbeat = false;
|
|
58541
58542
|
storage = null;
|
|
58542
58543
|
lastMessageSyncTs = 0;
|
|
58543
58544
|
messageSyncInProgress = false;
|
|
@@ -58674,9 +58675,157 @@ var CloudSyncService = class extends import_events7.EventEmitter {
|
|
|
58674
58675
|
}
|
|
58675
58676
|
}
|
|
58676
58677
|
/**
|
|
58677
|
-
* Send heartbeat to cloud
|
|
58678
|
+
* Send heartbeat to cloud using the batched poll endpoint.
|
|
58679
|
+
* Combines heartbeat, messages, agents, and message sync into a single request.
|
|
58680
|
+
* Falls back to legacy individual endpoints if poll endpoint is not available.
|
|
58678
58681
|
*/
|
|
58679
58682
|
async sendHeartbeat() {
|
|
58683
|
+
if (this.useLegacyHeartbeat) {
|
|
58684
|
+
return this.sendHeartbeatLegacy();
|
|
58685
|
+
}
|
|
58686
|
+
try {
|
|
58687
|
+
const agents = Array.from(this.localAgents.entries()).map(([name, info]) => ({
|
|
58688
|
+
name,
|
|
58689
|
+
status: info.status,
|
|
58690
|
+
isHuman: info.isHuman,
|
|
58691
|
+
avatarUrl: info.avatarUrl
|
|
58692
|
+
}));
|
|
58693
|
+
const syncMessages = await this.getSyncMessagesPayload();
|
|
58694
|
+
const controller = new AbortController();
|
|
58695
|
+
const timeoutId = setTimeout(() => controller.abort(), 15e3);
|
|
58696
|
+
const response = await fetch(`${this.config.cloudUrl}/api/daemons/poll`, {
|
|
58697
|
+
method: "POST",
|
|
58698
|
+
headers: {
|
|
58699
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
58700
|
+
"Content-Type": "application/json"
|
|
58701
|
+
},
|
|
58702
|
+
body: JSON.stringify({
|
|
58703
|
+
agents,
|
|
58704
|
+
metrics: {
|
|
58705
|
+
uptime: process.uptime(),
|
|
58706
|
+
memoryUsage: process.memoryUsage()
|
|
58707
|
+
},
|
|
58708
|
+
...syncMessages ? { syncMessages, repoFullName: this.repoFullName } : {}
|
|
58709
|
+
}),
|
|
58710
|
+
signal: controller.signal
|
|
58711
|
+
}).finally(() => clearTimeout(timeoutId));
|
|
58712
|
+
if (!response.ok) {
|
|
58713
|
+
if (response.status === 401) {
|
|
58714
|
+
log6.error("Invalid API key. Run `agent-relay cloud link` to re-authenticate.");
|
|
58715
|
+
this.stop();
|
|
58716
|
+
return;
|
|
58717
|
+
}
|
|
58718
|
+
if (response.status === 404) {
|
|
58719
|
+
log6.info("Poll endpoint not available, switching to legacy endpoints permanently");
|
|
58720
|
+
this.useLegacyHeartbeat = true;
|
|
58721
|
+
return this.sendHeartbeatLegacy();
|
|
58722
|
+
}
|
|
58723
|
+
throw new Error(`Poll failed: ${response.status}`);
|
|
58724
|
+
}
|
|
58725
|
+
const data = await response.json();
|
|
58726
|
+
if (data.commands && data.commands.length > 0) {
|
|
58727
|
+
for (const cmd of data.commands) {
|
|
58728
|
+
this.emit("command", cmd);
|
|
58729
|
+
}
|
|
58730
|
+
}
|
|
58731
|
+
if (data.messages) {
|
|
58732
|
+
for (const msg of data.messages) {
|
|
58733
|
+
this.emit("cross-machine-message", msg);
|
|
58734
|
+
}
|
|
58735
|
+
}
|
|
58736
|
+
if (data.allAgents) {
|
|
58737
|
+
this.remoteAgents = data.allAgents.filter((a) => !this.localAgents.has(a.name));
|
|
58738
|
+
if (this.remoteAgents.length > 0) {
|
|
58739
|
+
this.emit("remote-agents-updated", this.remoteAgents);
|
|
58740
|
+
}
|
|
58741
|
+
}
|
|
58742
|
+
if (data.allUsers) {
|
|
58743
|
+
this.remoteUsers = data.allUsers.filter((u) => !this.localAgents.has(u.name));
|
|
58744
|
+
if (this.remoteUsers.length > 0) {
|
|
58745
|
+
this.emit("remote-users-updated", this.remoteUsers);
|
|
58746
|
+
}
|
|
58747
|
+
}
|
|
58748
|
+
if (data.sync && data.sync.synced > 0) {
|
|
58749
|
+
log6.info(`Synced ${data.sync.synced} messages to cloud`, { duplicates: data.sync.duplicates });
|
|
58750
|
+
}
|
|
58751
|
+
if (syncMessages && syncMessages.length > 0 && data.sync && data.sync.synced >= 0) {
|
|
58752
|
+
this.lastMessageSyncTs = Math.max(...syncMessages.map((m) => m.ts));
|
|
58753
|
+
}
|
|
58754
|
+
if (data.pollIntervalMs && data.pollIntervalMs !== this.config.heartbeatInterval) {
|
|
58755
|
+
const newInterval = Math.max(5e3, data.pollIntervalMs);
|
|
58756
|
+
if (newInterval !== this.config.heartbeatInterval) {
|
|
58757
|
+
log6.info(`Adjusting poll interval from ${this.config.heartbeatInterval}ms to ${newInterval}ms (server hint)`);
|
|
58758
|
+
this.config.heartbeatInterval = newInterval;
|
|
58759
|
+
if (this.heartbeatTimer) {
|
|
58760
|
+
clearInterval(this.heartbeatTimer);
|
|
58761
|
+
this.heartbeatTimer = setInterval(() => this.sendHeartbeat().catch((err) => log6.error("Heartbeat failed", { error: String(err) })), this.config.heartbeatInterval);
|
|
58762
|
+
}
|
|
58763
|
+
}
|
|
58764
|
+
}
|
|
58765
|
+
await this.pushAgentMetrics();
|
|
58766
|
+
} catch (error) {
|
|
58767
|
+
const errorMessage = String(error);
|
|
58768
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
58769
|
+
log6.error("Poll timeout (15s)", { url: this.config.cloudUrl });
|
|
58770
|
+
} else if (errorMessage.includes("fetch failed") || errorMessage.includes("ECONNREFUSED")) {
|
|
58771
|
+
log6.error("Poll network error - cloud server unreachable", {
|
|
58772
|
+
url: this.config.cloudUrl,
|
|
58773
|
+
error: errorMessage
|
|
58774
|
+
});
|
|
58775
|
+
} else if (errorMessage.includes("ENOTFOUND") || errorMessage.includes("getaddrinfo")) {
|
|
58776
|
+
log6.error("Poll DNS error - cannot resolve cloud server", {
|
|
58777
|
+
url: this.config.cloudUrl
|
|
58778
|
+
});
|
|
58779
|
+
} else {
|
|
58780
|
+
log6.error("Poll error", { error: errorMessage });
|
|
58781
|
+
}
|
|
58782
|
+
this.emit("error", error);
|
|
58783
|
+
}
|
|
58784
|
+
}
|
|
58785
|
+
/**
|
|
58786
|
+
* Get messages ready for sync, or null if none available.
|
|
58787
|
+
*/
|
|
58788
|
+
async getSyncMessagesPayload() {
|
|
58789
|
+
if (!this.storage || this.messageSyncInProgress || this.config.messageSyncEnabled === false) {
|
|
58790
|
+
return null;
|
|
58791
|
+
}
|
|
58792
|
+
this.messageSyncInProgress = true;
|
|
58793
|
+
try {
|
|
58794
|
+
const batchSize = this.config.messageSyncBatchSize || 100;
|
|
58795
|
+
const messages = await this.storage.getMessages({
|
|
58796
|
+
sinceTs: this.lastMessageSyncTs > 0 ? this.lastMessageSyncTs : void 0,
|
|
58797
|
+
limit: batchSize,
|
|
58798
|
+
order: "asc"
|
|
58799
|
+
});
|
|
58800
|
+
if (messages.length === 0) {
|
|
58801
|
+
return null;
|
|
58802
|
+
}
|
|
58803
|
+
return messages.map((msg) => ({
|
|
58804
|
+
id: msg.id,
|
|
58805
|
+
ts: msg.ts,
|
|
58806
|
+
from: msg.from,
|
|
58807
|
+
to: msg.to,
|
|
58808
|
+
body: msg.body,
|
|
58809
|
+
kind: msg.kind,
|
|
58810
|
+
topic: msg.topic,
|
|
58811
|
+
thread: msg.thread,
|
|
58812
|
+
is_broadcast: msg.is_broadcast,
|
|
58813
|
+
is_urgent: msg.is_urgent,
|
|
58814
|
+
data: msg.data,
|
|
58815
|
+
payload_meta: msg.payloadMeta
|
|
58816
|
+
}));
|
|
58817
|
+
} catch (error) {
|
|
58818
|
+
log6.error("Failed to prepare sync messages", { error: String(error) });
|
|
58819
|
+
return null;
|
|
58820
|
+
} finally {
|
|
58821
|
+
this.messageSyncInProgress = false;
|
|
58822
|
+
}
|
|
58823
|
+
}
|
|
58824
|
+
/**
|
|
58825
|
+
* Legacy heartbeat: individual endpoint calls.
|
|
58826
|
+
* Used as fallback when the batched /api/daemons/poll endpoint is not available.
|
|
58827
|
+
*/
|
|
58828
|
+
async sendHeartbeatLegacy() {
|
|
58680
58829
|
try {
|
|
58681
58830
|
const agents = Array.from(this.localAgents.entries()).map(([name, info]) => ({
|
|
58682
58831
|
name,
|
|
@@ -60483,6 +60632,10 @@ var Daemon = class _Daemon {
|
|
|
60483
60632
|
from: `${msg.from.daemonName}:${msg.from.agent}`,
|
|
60484
60633
|
to: msg.to
|
|
60485
60634
|
});
|
|
60635
|
+
if (msg.to === "__spawner__" && msg.metadata?.type === "spawn_command") {
|
|
60636
|
+
this.handleCloudSpawnCommand(msg);
|
|
60637
|
+
return;
|
|
60638
|
+
}
|
|
60486
60639
|
const targetConnection = Array.from(this.connections).find((c) => c.agentName === msg.to);
|
|
60487
60640
|
if (!targetConnection) {
|
|
60488
60641
|
daemonLog.warn("Target agent not found locally", { agent: msg.to });
|
|
@@ -60508,6 +60661,49 @@ var Daemon = class _Daemon {
|
|
|
60508
60661
|
};
|
|
60509
60662
|
this.router.route(targetConnection, envelope);
|
|
60510
60663
|
}
|
|
60664
|
+
/**
|
|
60665
|
+
* Handle a spawn command received from the cloud (e.g., Slack orchestrator).
|
|
60666
|
+
* Parses the spawn_agent command and uses SpawnManager to spawn the agent locally.
|
|
60667
|
+
*/
|
|
60668
|
+
async handleCloudSpawnCommand(msg) {
|
|
60669
|
+
if (!this.spawnManager) {
|
|
60670
|
+
daemonLog.warn("Cannot handle cloud spawn command: SpawnManager not enabled");
|
|
60671
|
+
return;
|
|
60672
|
+
}
|
|
60673
|
+
try {
|
|
60674
|
+
const command = JSON.parse(msg.content);
|
|
60675
|
+
if (command.type !== "spawn_agent") {
|
|
60676
|
+
daemonLog.warn("Unknown cloud spawn command type", { type: command.type });
|
|
60677
|
+
return;
|
|
60678
|
+
}
|
|
60679
|
+
daemonLog.info("Spawning agent from cloud command", {
|
|
60680
|
+
name: command.agentName,
|
|
60681
|
+
cli: command.cli,
|
|
60682
|
+
source: msg.from.agent
|
|
60683
|
+
});
|
|
60684
|
+
const spawner = this.spawnManager.getSpawner();
|
|
60685
|
+
const result = await spawner.spawn({
|
|
60686
|
+
name: command.agentName,
|
|
60687
|
+
cli: command.cli,
|
|
60688
|
+
task: command.task || "You were spawned by the cloud orchestrator. Check your inbox for messages.",
|
|
60689
|
+
spawnerName: msg.from.agent
|
|
60690
|
+
});
|
|
60691
|
+
if (result.success) {
|
|
60692
|
+
daemonLog.info("Cloud-spawned agent started", {
|
|
60693
|
+
name: command.agentName,
|
|
60694
|
+
pid: result.pid
|
|
60695
|
+
});
|
|
60696
|
+
} else {
|
|
60697
|
+
daemonLog.error("Cloud spawn failed", {
|
|
60698
|
+
name: command.agentName,
|
|
60699
|
+
error: result.error
|
|
60700
|
+
});
|
|
60701
|
+
}
|
|
60702
|
+
} catch (err) {
|
|
60703
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
60704
|
+
daemonLog.error("Failed to parse cloud spawn command", { error });
|
|
60705
|
+
}
|
|
60706
|
+
}
|
|
60511
60707
|
/**
|
|
60512
60708
|
* Send message to agent on another machine via cloud.
|
|
60513
60709
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-relay",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.24",
|
|
4
4
|
"description": "Real-time agent-to-agent communication system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -134,23 +134,23 @@
|
|
|
134
134
|
},
|
|
135
135
|
"homepage": "https://github.com/AgentWorkforce/relay#readme",
|
|
136
136
|
"dependencies": {
|
|
137
|
-
"@agent-relay/bridge": "2.2.
|
|
138
|
-
"@agent-relay/config": "2.2.
|
|
139
|
-
"@agent-relay/continuity": "2.2.
|
|
140
|
-
"@agent-relay/daemon": "2.2.
|
|
141
|
-
"@agent-relay/hooks": "2.2.
|
|
142
|
-
"@agent-relay/mcp": "2.2.
|
|
143
|
-
"@agent-relay/protocol": "2.2.
|
|
144
|
-
"@agent-relay/resiliency": "2.2.
|
|
145
|
-
"@agent-relay/sdk": "2.2.
|
|
146
|
-
"@agent-relay/spawner": "2.2.
|
|
147
|
-
"@agent-relay/state": "2.2.
|
|
148
|
-
"@agent-relay/storage": "2.2.
|
|
149
|
-
"@agent-relay/telemetry": "2.2.
|
|
150
|
-
"@agent-relay/trajectory": "2.2.
|
|
151
|
-
"@agent-relay/user-directory": "2.2.
|
|
152
|
-
"@agent-relay/utils": "2.2.
|
|
153
|
-
"@agent-relay/wrapper": "2.2.
|
|
137
|
+
"@agent-relay/bridge": "2.2.24",
|
|
138
|
+
"@agent-relay/config": "2.2.24",
|
|
139
|
+
"@agent-relay/continuity": "2.2.24",
|
|
140
|
+
"@agent-relay/daemon": "2.2.24",
|
|
141
|
+
"@agent-relay/hooks": "2.2.24",
|
|
142
|
+
"@agent-relay/mcp": "2.2.24",
|
|
143
|
+
"@agent-relay/protocol": "2.2.24",
|
|
144
|
+
"@agent-relay/resiliency": "2.2.24",
|
|
145
|
+
"@agent-relay/sdk": "2.2.24",
|
|
146
|
+
"@agent-relay/spawner": "2.2.24",
|
|
147
|
+
"@agent-relay/state": "2.2.24",
|
|
148
|
+
"@agent-relay/storage": "2.2.24",
|
|
149
|
+
"@agent-relay/telemetry": "2.2.24",
|
|
150
|
+
"@agent-relay/trajectory": "2.2.24",
|
|
151
|
+
"@agent-relay/user-directory": "2.2.24",
|
|
152
|
+
"@agent-relay/utils": "2.2.24",
|
|
153
|
+
"@agent-relay/wrapper": "2.2.24",
|
|
154
154
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
155
155
|
"agent-trajectories": "^0.3.0",
|
|
156
156
|
"chokidar": "^5.0.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/acp-bridge",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.24",
|
|
4
4
|
"description": "ACP (Agent Client Protocol) bridge for Agent Relay - expose relay agents to ACP-compatible editors like Zed",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@agent-relay/sdk": "2.2.
|
|
49
|
+
"@agent-relay/sdk": "2.2.24",
|
|
50
50
|
"@agentclientprotocol/sdk": "^0.12.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/benchmark",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.24",
|
|
4
4
|
"description": "Performance benchmarking for agent swarms, sub-agents, and single agents using Harbor",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -54,14 +54,14 @@
|
|
|
54
54
|
"directory": "packages/benchmark"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@agent-relay/sdk": "2.2.
|
|
58
|
-
"@agent-relay/protocol": "2.2.
|
|
59
|
-
"@agent-relay/spawner": "2.2.
|
|
57
|
+
"@agent-relay/sdk": "2.2.24",
|
|
58
|
+
"@agent-relay/protocol": "2.2.24",
|
|
59
|
+
"@agent-relay/spawner": "2.2.24",
|
|
60
60
|
"commander": "^12.1.0",
|
|
61
61
|
"yaml": "^2.3.4"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@agent-relay/daemon": "2.2.
|
|
64
|
+
"@agent-relay/daemon": "2.2.24",
|
|
65
65
|
"@types/node": "^22.19.3",
|
|
66
66
|
"typescript": "^5.9.3",
|
|
67
67
|
"vitest": "^3.0.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/bridge",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.24",
|
|
4
4
|
"description": "Multi-project bridge client utilities for Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"test:watch": "vitest"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agent-relay/protocol": "2.2.
|
|
26
|
-
"@agent-relay/config": "2.2.
|
|
27
|
-
"@agent-relay/utils": "2.2.
|
|
28
|
-
"@agent-relay/policy": "2.2.
|
|
29
|
-
"@agent-relay/user-directory": "2.2.
|
|
30
|
-
"@agent-relay/wrapper": "2.2.
|
|
25
|
+
"@agent-relay/protocol": "2.2.24",
|
|
26
|
+
"@agent-relay/config": "2.2.24",
|
|
27
|
+
"@agent-relay/utils": "2.2.24",
|
|
28
|
+
"@agent-relay/policy": "2.2.24",
|
|
29
|
+
"@agent-relay/user-directory": "2.2.24",
|
|
30
|
+
"@agent-relay/wrapper": "2.2.24"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^22.19.3",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/config",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.24",
|
|
4
4
|
"description": "Shared configuration schemas and loaders for Agent Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"test:watch": "vitest"
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@agent-relay/protocol": "2.2.
|
|
86
|
+
"@agent-relay/protocol": "2.2.24",
|
|
87
87
|
"zod": "^3.23.8",
|
|
88
88
|
"zod-to-json-schema": "^3.23.1"
|
|
89
89
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/continuity",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.24",
|
|
4
4
|
"description": "Session continuity manager for Relay (ledgers, handoffs, resume)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"test:watch": "vitest"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agent-relay/memory": "2.2.
|
|
25
|
+
"@agent-relay/memory": "2.2.24"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^22.19.3",
|
|
@@ -79,6 +79,7 @@ export declare class CloudSyncService extends EventEmitter {
|
|
|
79
79
|
private remoteAgents;
|
|
80
80
|
private remoteUsers;
|
|
81
81
|
private connected;
|
|
82
|
+
private useLegacyHeartbeat;
|
|
82
83
|
private storage;
|
|
83
84
|
private lastMessageSyncTs;
|
|
84
85
|
private messageSyncInProgress;
|
|
@@ -117,9 +118,20 @@ export declare class CloudSyncService extends EventEmitter {
|
|
|
117
118
|
*/
|
|
118
119
|
sendCrossMachineMessage(targetDaemonId: string, targetAgent: string, fromAgent: string, content: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
119
120
|
/**
|
|
120
|
-
* Send heartbeat to cloud
|
|
121
|
+
* Send heartbeat to cloud using the batched poll endpoint.
|
|
122
|
+
* Combines heartbeat, messages, agents, and message sync into a single request.
|
|
123
|
+
* Falls back to legacy individual endpoints if poll endpoint is not available.
|
|
121
124
|
*/
|
|
122
125
|
private sendHeartbeat;
|
|
126
|
+
/**
|
|
127
|
+
* Get messages ready for sync, or null if none available.
|
|
128
|
+
*/
|
|
129
|
+
private getSyncMessagesPayload;
|
|
130
|
+
/**
|
|
131
|
+
* Legacy heartbeat: individual endpoint calls.
|
|
132
|
+
* Used as fallback when the batched /api/daemons/poll endpoint is not available.
|
|
133
|
+
*/
|
|
134
|
+
private sendHeartbeatLegacy;
|
|
123
135
|
/**
|
|
124
136
|
* Sync agents with cloud and get remote agents
|
|
125
137
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-sync.d.ts","sourceRoot":"","sources":["../src/cloud-sync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cloud-sync.d.ts","sourceRoot":"","sources":["../src/cloud-sync.ts"],"names":[],"mappings":"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"}
|