@agent-relay/daemon 0.1.0
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/agent-manager.d.ts +134 -0
- package/dist/agent-manager.d.ts.map +1 -0
- package/dist/agent-manager.js +578 -0
- package/dist/agent-manager.js.map +1 -0
- package/dist/agent-registry.d.ts +99 -0
- package/dist/agent-registry.d.ts.map +1 -0
- package/dist/agent-registry.js +213 -0
- package/dist/agent-registry.js.map +1 -0
- package/dist/agent-signing.d.ts +158 -0
- package/dist/agent-signing.d.ts.map +1 -0
- package/dist/agent-signing.js +523 -0
- package/dist/agent-signing.js.map +1 -0
- package/dist/api.d.ts +106 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +876 -0
- package/dist/api.js.map +1 -0
- package/dist/auth.d.ts +94 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +197 -0
- package/dist/auth.js.map +1 -0
- package/dist/channel-membership-store.d.ts +55 -0
- package/dist/channel-membership-store.d.ts.map +1 -0
- package/dist/channel-membership-store.js +176 -0
- package/dist/channel-membership-store.js.map +1 -0
- package/dist/cli-auth.d.ts +89 -0
- package/dist/cli-auth.d.ts.map +1 -0
- package/dist/cli-auth.js +792 -0
- package/dist/cli-auth.js.map +1 -0
- package/dist/cloud-sync.d.ts +150 -0
- package/dist/cloud-sync.d.ts.map +1 -0
- package/dist/cloud-sync.js +446 -0
- package/dist/cloud-sync.js.map +1 -0
- package/dist/connection.d.ts +130 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +438 -0
- package/dist/connection.js.map +1 -0
- package/dist/consensus-integration.d.ts +167 -0
- package/dist/consensus-integration.d.ts.map +1 -0
- package/dist/consensus-integration.js +371 -0
- package/dist/consensus-integration.js.map +1 -0
- package/dist/consensus.d.ts +271 -0
- package/dist/consensus.d.ts.map +1 -0
- package/dist/consensus.js +632 -0
- package/dist/consensus.js.map +1 -0
- package/dist/delivery-tracker.d.ts +34 -0
- package/dist/delivery-tracker.d.ts.map +1 -0
- package/dist/delivery-tracker.js +104 -0
- package/dist/delivery-tracker.js.map +1 -0
- package/dist/enhanced-features.d.ts +118 -0
- package/dist/enhanced-features.d.ts.map +1 -0
- package/dist/enhanced-features.js +176 -0
- package/dist/enhanced-features.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/index.d.ts +73 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +241 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/orchestrator.d.ts +217 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +1143 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/rate-limiter.d.ts +68 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +130 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/registry.d.ts +9 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +9 -0
- package/dist/registry.js.map +1 -0
- package/dist/relay-ledger.d.ts +261 -0
- package/dist/relay-ledger.d.ts.map +1 -0
- package/dist/relay-ledger.js +532 -0
- package/dist/relay-ledger.js.map +1 -0
- package/dist/relay-watchdog.d.ts +125 -0
- package/dist/relay-watchdog.d.ts.map +1 -0
- package/dist/relay-watchdog.js +611 -0
- package/dist/relay-watchdog.js.map +1 -0
- package/dist/repo-manager.d.ts +116 -0
- package/dist/repo-manager.d.ts.map +1 -0
- package/dist/repo-manager.js +384 -0
- package/dist/repo-manager.js.map +1 -0
- package/dist/router.d.ts +370 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +1437 -0
- package/dist/router.js.map +1 -0
- package/dist/server.d.ts +174 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1001 -0
- package/dist/server.js.map +1 -0
- package/dist/spawn-manager.d.ts +78 -0
- package/dist/spawn-manager.d.ts.map +1 -0
- package/dist/spawn-manager.js +165 -0
- package/dist/spawn-manager.js.map +1 -0
- package/dist/sync-queue.d.ts +116 -0
- package/dist/sync-queue.d.ts.map +1 -0
- package/dist/sync-queue.js +361 -0
- package/dist/sync-queue.js.map +1 -0
- package/dist/types.d.ts +133 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace-manager.d.ts +80 -0
- package/dist/workspace-manager.d.ts.map +1 -0
- package/dist/workspace-manager.js +314 -0
- package/dist/workspace-manager.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-auth.js","sourceRoot":"","sources":["../src/cli-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Sync Service
|
|
3
|
+
*
|
|
4
|
+
* Handles automatic bridging between local daemons via the cloud:
|
|
5
|
+
* - Heartbeat to report status
|
|
6
|
+
* - Agent discovery across machines
|
|
7
|
+
* - Cross-machine message relay
|
|
8
|
+
* - Credential sync from cloud
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
import type { StorageAdapter, StoredMessage } from '@agent-relay/storage/adapter';
|
|
12
|
+
import { type SyncQueueConfig, type SyncQueueStats } from './sync-queue.js';
|
|
13
|
+
export interface CloudSyncConfig {
|
|
14
|
+
apiKey?: string;
|
|
15
|
+
cloudUrl: string;
|
|
16
|
+
heartbeatInterval: number;
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
/** Enable message sync to cloud (default: true if connected) */
|
|
19
|
+
messageSyncEnabled?: boolean;
|
|
20
|
+
/** Batch size for message sync (default: 100) */
|
|
21
|
+
messageSyncBatchSize?: number;
|
|
22
|
+
/** Use optimized sync queue with compression and spillover (default: true) */
|
|
23
|
+
useOptimizedSync?: boolean;
|
|
24
|
+
/** Sync queue configuration */
|
|
25
|
+
syncQueue?: Partial<SyncQueueConfig>;
|
|
26
|
+
/** Project directory for git remote detection (defaults to cwd) */
|
|
27
|
+
projectDirectory?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface RemoteAgent {
|
|
30
|
+
name: string;
|
|
31
|
+
status: string;
|
|
32
|
+
daemonId: string;
|
|
33
|
+
daemonName: string;
|
|
34
|
+
machineId: string;
|
|
35
|
+
}
|
|
36
|
+
export interface CrossMachineMessage {
|
|
37
|
+
from: {
|
|
38
|
+
daemonId: string;
|
|
39
|
+
daemonName: string;
|
|
40
|
+
agent: string;
|
|
41
|
+
};
|
|
42
|
+
to: string;
|
|
43
|
+
content: string;
|
|
44
|
+
metadata?: Record<string, unknown>;
|
|
45
|
+
timestamp: string;
|
|
46
|
+
}
|
|
47
|
+
export declare class CloudSyncService extends EventEmitter {
|
|
48
|
+
private config;
|
|
49
|
+
private heartbeatTimer?;
|
|
50
|
+
private machineId;
|
|
51
|
+
private localAgents;
|
|
52
|
+
private remoteAgents;
|
|
53
|
+
private remoteUsers;
|
|
54
|
+
private connected;
|
|
55
|
+
private storage;
|
|
56
|
+
private lastMessageSyncTs;
|
|
57
|
+
private messageSyncInProgress;
|
|
58
|
+
private projectDirectory;
|
|
59
|
+
private repoFullName;
|
|
60
|
+
private syncQueue;
|
|
61
|
+
constructor(config?: Partial<CloudSyncConfig>);
|
|
62
|
+
/**
|
|
63
|
+
* Get or create a persistent machine ID
|
|
64
|
+
*/
|
|
65
|
+
private getMachineId;
|
|
66
|
+
/**
|
|
67
|
+
* Start the cloud sync service
|
|
68
|
+
*/
|
|
69
|
+
start(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Stop the cloud sync service
|
|
72
|
+
*/
|
|
73
|
+
stop(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Update local agent list (called by daemon when agents change)
|
|
76
|
+
*/
|
|
77
|
+
updateAgents(agents: Array<{
|
|
78
|
+
name: string;
|
|
79
|
+
status: string;
|
|
80
|
+
isHuman?: boolean;
|
|
81
|
+
avatarUrl?: string;
|
|
82
|
+
}>): void;
|
|
83
|
+
/**
|
|
84
|
+
* Get all remote agents (from other machines)
|
|
85
|
+
*/
|
|
86
|
+
getRemoteAgents(): RemoteAgent[];
|
|
87
|
+
/**
|
|
88
|
+
* Send a message to an agent on another machine
|
|
89
|
+
*/
|
|
90
|
+
sendCrossMachineMessage(targetDaemonId: string, targetAgent: string, fromAgent: string, content: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Send heartbeat to cloud
|
|
93
|
+
*/
|
|
94
|
+
private sendHeartbeat;
|
|
95
|
+
/**
|
|
96
|
+
* Sync agents with cloud and get remote agents
|
|
97
|
+
*/
|
|
98
|
+
private syncAgents;
|
|
99
|
+
/**
|
|
100
|
+
* Fetch queued messages from cloud
|
|
101
|
+
*/
|
|
102
|
+
private fetchMessages;
|
|
103
|
+
/**
|
|
104
|
+
* Sync credentials from cloud (pull latest tokens)
|
|
105
|
+
*/
|
|
106
|
+
syncCredentials(): Promise<Array<{
|
|
107
|
+
provider: string;
|
|
108
|
+
accessToken: string;
|
|
109
|
+
tokenType?: string;
|
|
110
|
+
expiresAt?: string;
|
|
111
|
+
}>>;
|
|
112
|
+
/**
|
|
113
|
+
* Check if connected to cloud
|
|
114
|
+
*/
|
|
115
|
+
isConnected(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Get machine ID
|
|
118
|
+
*/
|
|
119
|
+
getMachineIdentifier(): string;
|
|
120
|
+
/**
|
|
121
|
+
* Set the storage adapter for message sync
|
|
122
|
+
*/
|
|
123
|
+
setStorage(storage: StorageAdapter): void;
|
|
124
|
+
/**
|
|
125
|
+
* Queue a single message for sync to cloud.
|
|
126
|
+
* Use this for real-time sync as messages are created.
|
|
127
|
+
* Falls back to batch sync if optimized queue is not enabled.
|
|
128
|
+
*/
|
|
129
|
+
queueMessageForSync(message: StoredMessage): Promise<void>;
|
|
130
|
+
/**
|
|
131
|
+
* Get sync queue statistics (if optimized sync is enabled).
|
|
132
|
+
*/
|
|
133
|
+
getSyncQueueStats(): SyncQueueStats | null;
|
|
134
|
+
/**
|
|
135
|
+
* Force flush the sync queue.
|
|
136
|
+
*/
|
|
137
|
+
flushSyncQueue(): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Sync local messages to cloud storage
|
|
140
|
+
*
|
|
141
|
+
* Reads messages from local SQLite since last sync and posts them
|
|
142
|
+
* to the cloud API for centralized storage and search.
|
|
143
|
+
*/
|
|
144
|
+
syncMessagesToCloud(): Promise<{
|
|
145
|
+
synced: number;
|
|
146
|
+
duplicates: number;
|
|
147
|
+
}>;
|
|
148
|
+
}
|
|
149
|
+
export declare function getCloudSync(config?: Partial<CloudSyncConfig>): CloudSyncService;
|
|
150
|
+
//# sourceMappingURL=cloud-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-sync.d.ts","sourceRoot":"","sources":["../src/cloud-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Sync Service
|
|
3
|
+
*
|
|
4
|
+
* Handles automatic bridging between local daemons via the cloud:
|
|
5
|
+
* - Heartbeat to report status
|
|
6
|
+
* - Agent discovery across machines
|
|
7
|
+
* - Cross-machine message relay
|
|
8
|
+
* - Credential sync from cloud
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import * as os from 'os';
|
|
14
|
+
import { randomBytes } from 'crypto';
|
|
15
|
+
import { createLogger } from '@agent-relay/utils/logger';
|
|
16
|
+
import { SyncQueue } from './sync-queue.js';
|
|
17
|
+
import { getRepoFullNameFromPath } from '@agent-relay/utils/git-remote';
|
|
18
|
+
const log = createLogger('cloud-sync');
|
|
19
|
+
export class CloudSyncService extends EventEmitter {
|
|
20
|
+
config;
|
|
21
|
+
heartbeatTimer;
|
|
22
|
+
machineId;
|
|
23
|
+
localAgents = new Map();
|
|
24
|
+
remoteAgents = [];
|
|
25
|
+
remoteUsers = [];
|
|
26
|
+
connected = false;
|
|
27
|
+
storage = null;
|
|
28
|
+
lastMessageSyncTs = 0;
|
|
29
|
+
messageSyncInProgress = false;
|
|
30
|
+
// Project context for workspace resolution
|
|
31
|
+
projectDirectory;
|
|
32
|
+
repoFullName = null;
|
|
33
|
+
// Optimized sync queue
|
|
34
|
+
syncQueue = null;
|
|
35
|
+
constructor(config = {}) {
|
|
36
|
+
super();
|
|
37
|
+
this.config = {
|
|
38
|
+
apiKey: config.apiKey || process.env.AGENT_RELAY_API_KEY,
|
|
39
|
+
cloudUrl: config.cloudUrl || process.env.AGENT_RELAY_CLOUD_URL || 'https://agent-relay.com',
|
|
40
|
+
heartbeatInterval: config.heartbeatInterval || 30000, // 30 seconds
|
|
41
|
+
enabled: config.enabled ?? true,
|
|
42
|
+
useOptimizedSync: config.useOptimizedSync ?? true,
|
|
43
|
+
syncQueue: config.syncQueue,
|
|
44
|
+
projectDirectory: config.projectDirectory,
|
|
45
|
+
};
|
|
46
|
+
// Generate or load machine ID for consistent identification
|
|
47
|
+
this.machineId = this.getMachineId();
|
|
48
|
+
// Initialize project context for workspace resolution
|
|
49
|
+
this.projectDirectory = this.config.projectDirectory || process.cwd();
|
|
50
|
+
this.repoFullName = getRepoFullNameFromPath(this.projectDirectory);
|
|
51
|
+
if (this.repoFullName) {
|
|
52
|
+
log.info('Detected git repository', { repoFullName: this.repoFullName });
|
|
53
|
+
}
|
|
54
|
+
// Initialize optimized sync queue if enabled and API key is available
|
|
55
|
+
if (this.config.useOptimizedSync && this.config.apiKey) {
|
|
56
|
+
this.syncQueue = new SyncQueue({
|
|
57
|
+
cloudUrl: this.config.cloudUrl,
|
|
58
|
+
apiKey: this.config.apiKey,
|
|
59
|
+
...this.config.syncQueue,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get or create a persistent machine ID
|
|
65
|
+
*/
|
|
66
|
+
getMachineId() {
|
|
67
|
+
const dataDir = process.env.AGENT_RELAY_DATA_DIR ||
|
|
68
|
+
path.join(os.homedir(), '.local', 'share', 'agent-relay');
|
|
69
|
+
const machineIdPath = path.join(dataDir, 'machine-id');
|
|
70
|
+
try {
|
|
71
|
+
if (fs.existsSync(machineIdPath)) {
|
|
72
|
+
return fs.readFileSync(machineIdPath, 'utf-8').trim();
|
|
73
|
+
}
|
|
74
|
+
// Generate new machine ID
|
|
75
|
+
const machineId = `${os.hostname()}-${randomBytes(8).toString('hex')}`;
|
|
76
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
77
|
+
fs.writeFileSync(machineIdPath, machineId);
|
|
78
|
+
return machineId;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Fallback: generate ephemeral ID
|
|
82
|
+
return `${os.hostname()}-${Date.now().toString(36)}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Start the cloud sync service
|
|
87
|
+
*/
|
|
88
|
+
async start() {
|
|
89
|
+
if (!this.config.enabled || !this.config.apiKey) {
|
|
90
|
+
log.info('Disabled (no API key configured)');
|
|
91
|
+
log.info('Run `agent-relay cloud link` to connect to cloud');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
log.info('Starting cloud sync', { url: this.config.cloudUrl });
|
|
95
|
+
// Recover any spilled messages from previous runs
|
|
96
|
+
if (this.syncQueue) {
|
|
97
|
+
const { recovered, failed } = await this.syncQueue.recoverSpilledMessages();
|
|
98
|
+
if (recovered > 0 || failed > 0) {
|
|
99
|
+
log.info('Recovered spilled messages', { recovered, failed });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Initial heartbeat
|
|
103
|
+
await this.sendHeartbeat();
|
|
104
|
+
// Start periodic heartbeat
|
|
105
|
+
this.heartbeatTimer = setInterval(() => this.sendHeartbeat().catch((err) => log.error('Heartbeat failed', { error: String(err) })), this.config.heartbeatInterval);
|
|
106
|
+
this.connected = true;
|
|
107
|
+
this.emit('connected');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Stop the cloud sync service
|
|
111
|
+
*/
|
|
112
|
+
async stop() {
|
|
113
|
+
if (this.heartbeatTimer) {
|
|
114
|
+
clearInterval(this.heartbeatTimer);
|
|
115
|
+
this.heartbeatTimer = undefined;
|
|
116
|
+
}
|
|
117
|
+
// Gracefully close sync queue (flushes pending messages)
|
|
118
|
+
if (this.syncQueue) {
|
|
119
|
+
await this.syncQueue.close();
|
|
120
|
+
}
|
|
121
|
+
this.connected = false;
|
|
122
|
+
this.emit('disconnected');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Update local agent list (called by daemon when agents change)
|
|
126
|
+
*/
|
|
127
|
+
updateAgents(agents) {
|
|
128
|
+
this.localAgents.clear();
|
|
129
|
+
for (const agent of agents) {
|
|
130
|
+
this.localAgents.set(agent.name, agent);
|
|
131
|
+
}
|
|
132
|
+
// Trigger immediate sync if connected
|
|
133
|
+
if (this.connected) {
|
|
134
|
+
this.syncAgents().catch((err) => log.error('Agent sync failed', { error: String(err) }));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get all remote agents (from other machines)
|
|
139
|
+
*/
|
|
140
|
+
getRemoteAgents() {
|
|
141
|
+
return this.remoteAgents;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Send a message to an agent on another machine
|
|
145
|
+
*/
|
|
146
|
+
async sendCrossMachineMessage(targetDaemonId, targetAgent, fromAgent, content, metadata) {
|
|
147
|
+
if (!this.connected) {
|
|
148
|
+
throw new Error('Not connected to cloud');
|
|
149
|
+
}
|
|
150
|
+
const response = await fetch(`${this.config.cloudUrl}/api/daemons/message`, {
|
|
151
|
+
method: 'POST',
|
|
152
|
+
headers: {
|
|
153
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
154
|
+
'Content-Type': 'application/json',
|
|
155
|
+
},
|
|
156
|
+
body: JSON.stringify({
|
|
157
|
+
targetDaemonId,
|
|
158
|
+
targetAgent,
|
|
159
|
+
message: {
|
|
160
|
+
from: fromAgent,
|
|
161
|
+
content,
|
|
162
|
+
metadata,
|
|
163
|
+
},
|
|
164
|
+
}),
|
|
165
|
+
});
|
|
166
|
+
if (!response.ok) {
|
|
167
|
+
const error = await response.text();
|
|
168
|
+
throw new Error(`Failed to send cross-machine message: ${error}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Send heartbeat to cloud
|
|
173
|
+
*/
|
|
174
|
+
async sendHeartbeat() {
|
|
175
|
+
try {
|
|
176
|
+
const agents = Array.from(this.localAgents.entries()).map(([name, info]) => ({
|
|
177
|
+
name,
|
|
178
|
+
status: info.status,
|
|
179
|
+
isHuman: info.isHuman,
|
|
180
|
+
avatarUrl: info.avatarUrl,
|
|
181
|
+
}));
|
|
182
|
+
// Use AbortController for timeout (10 second timeout for heartbeat)
|
|
183
|
+
const controller = new AbortController();
|
|
184
|
+
const timeoutId = setTimeout(() => controller.abort(), 10000);
|
|
185
|
+
const response = await fetch(`${this.config.cloudUrl}/api/daemons/heartbeat`, {
|
|
186
|
+
method: 'POST',
|
|
187
|
+
headers: {
|
|
188
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
189
|
+
'Content-Type': 'application/json',
|
|
190
|
+
},
|
|
191
|
+
body: JSON.stringify({
|
|
192
|
+
agents,
|
|
193
|
+
metrics: {
|
|
194
|
+
uptime: process.uptime(),
|
|
195
|
+
memoryUsage: process.memoryUsage(),
|
|
196
|
+
},
|
|
197
|
+
}),
|
|
198
|
+
signal: controller.signal,
|
|
199
|
+
}).finally(() => clearTimeout(timeoutId));
|
|
200
|
+
if (!response.ok) {
|
|
201
|
+
if (response.status === 401) {
|
|
202
|
+
log.error('Invalid API key. Run `agent-relay cloud link` to re-authenticate.');
|
|
203
|
+
this.stop();
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
throw new Error(`Heartbeat failed: ${response.status}`);
|
|
207
|
+
}
|
|
208
|
+
const data = await response.json();
|
|
209
|
+
// Process any pending commands from cloud
|
|
210
|
+
if (data.commands && data.commands.length > 0) {
|
|
211
|
+
for (const cmd of data.commands) {
|
|
212
|
+
this.emit('command', cmd);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Fetch messages, sync agents, and sync local messages to cloud
|
|
216
|
+
await Promise.all([
|
|
217
|
+
this.fetchMessages(),
|
|
218
|
+
this.syncAgents(),
|
|
219
|
+
this.syncMessagesToCloud(),
|
|
220
|
+
]);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
// Provide more specific error messages for common issues
|
|
224
|
+
const errorMessage = String(error);
|
|
225
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
226
|
+
log.error('Heartbeat timeout (10s)', { url: this.config.cloudUrl });
|
|
227
|
+
}
|
|
228
|
+
else if (errorMessage.includes('fetch failed') || errorMessage.includes('ECONNREFUSED')) {
|
|
229
|
+
log.error('Heartbeat network error - cloud server unreachable', {
|
|
230
|
+
url: this.config.cloudUrl,
|
|
231
|
+
error: errorMessage,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
else if (errorMessage.includes('ENOTFOUND') || errorMessage.includes('getaddrinfo')) {
|
|
235
|
+
log.error('Heartbeat DNS error - cannot resolve cloud server', {
|
|
236
|
+
url: this.config.cloudUrl,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
log.error('Heartbeat error', { error: errorMessage });
|
|
241
|
+
}
|
|
242
|
+
this.emit('error', error);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Sync agents with cloud and get remote agents
|
|
247
|
+
*/
|
|
248
|
+
async syncAgents() {
|
|
249
|
+
const agents = Array.from(this.localAgents.entries()).map(([name, info]) => ({
|
|
250
|
+
name,
|
|
251
|
+
status: info.status,
|
|
252
|
+
isHuman: info.isHuman,
|
|
253
|
+
avatarUrl: info.avatarUrl,
|
|
254
|
+
}));
|
|
255
|
+
const response = await fetch(`${this.config.cloudUrl}/api/daemons/agents`, {
|
|
256
|
+
method: 'POST',
|
|
257
|
+
headers: {
|
|
258
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
259
|
+
'Content-Type': 'application/json',
|
|
260
|
+
},
|
|
261
|
+
body: JSON.stringify({ agents }),
|
|
262
|
+
});
|
|
263
|
+
if (!response.ok) {
|
|
264
|
+
throw new Error(`Agent sync failed: ${response.status}`);
|
|
265
|
+
}
|
|
266
|
+
const data = await response.json();
|
|
267
|
+
// Filter out our own agents
|
|
268
|
+
this.remoteAgents = data.allAgents.filter((a) => !this.localAgents.has(a.name));
|
|
269
|
+
if (this.remoteAgents.length > 0) {
|
|
270
|
+
this.emit('remote-agents-updated', this.remoteAgents);
|
|
271
|
+
}
|
|
272
|
+
// Handle remote users (humans connected via cloud dashboard)
|
|
273
|
+
if (data.allUsers) {
|
|
274
|
+
this.remoteUsers = data.allUsers.filter((u) => !this.localAgents.has(u.name));
|
|
275
|
+
if (this.remoteUsers.length > 0) {
|
|
276
|
+
this.emit('remote-users-updated', this.remoteUsers);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Fetch queued messages from cloud
|
|
282
|
+
*/
|
|
283
|
+
async fetchMessages() {
|
|
284
|
+
const response = await fetch(`${this.config.cloudUrl}/api/daemons/messages`, {
|
|
285
|
+
headers: {
|
|
286
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
287
|
+
},
|
|
288
|
+
});
|
|
289
|
+
if (!response.ok) {
|
|
290
|
+
throw new Error(`Message fetch failed: ${response.status}`);
|
|
291
|
+
}
|
|
292
|
+
const data = await response.json();
|
|
293
|
+
for (const msg of data.messages) {
|
|
294
|
+
this.emit('cross-machine-message', msg);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Sync credentials from cloud (pull latest tokens)
|
|
299
|
+
*/
|
|
300
|
+
async syncCredentials() {
|
|
301
|
+
if (!this.connected) {
|
|
302
|
+
throw new Error('Not connected to cloud');
|
|
303
|
+
}
|
|
304
|
+
const response = await fetch(`${this.config.cloudUrl}/api/daemons/credentials`, {
|
|
305
|
+
headers: {
|
|
306
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
if (!response.ok) {
|
|
310
|
+
throw new Error(`Credential sync failed: ${response.status}`);
|
|
311
|
+
}
|
|
312
|
+
const data = await response.json();
|
|
313
|
+
return data.credentials;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Check if connected to cloud
|
|
317
|
+
*/
|
|
318
|
+
isConnected() {
|
|
319
|
+
return this.connected;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Get machine ID
|
|
323
|
+
*/
|
|
324
|
+
getMachineIdentifier() {
|
|
325
|
+
return this.machineId;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Set the storage adapter for message sync
|
|
329
|
+
*/
|
|
330
|
+
setStorage(storage) {
|
|
331
|
+
this.storage = storage;
|
|
332
|
+
log.info('Storage adapter configured for message sync');
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Queue a single message for sync to cloud.
|
|
336
|
+
* Use this for real-time sync as messages are created.
|
|
337
|
+
* Falls back to batch sync if optimized queue is not enabled.
|
|
338
|
+
*/
|
|
339
|
+
async queueMessageForSync(message) {
|
|
340
|
+
if (!this.connected || this.config.messageSyncEnabled === false) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (this.syncQueue) {
|
|
344
|
+
await this.syncQueue.enqueue(message);
|
|
345
|
+
}
|
|
346
|
+
// If no sync queue, messages will be synced on next heartbeat via syncMessagesToCloud
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Get sync queue statistics (if optimized sync is enabled).
|
|
350
|
+
*/
|
|
351
|
+
getSyncQueueStats() {
|
|
352
|
+
return this.syncQueue?.getStats() ?? null;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Force flush the sync queue.
|
|
356
|
+
*/
|
|
357
|
+
async flushSyncQueue() {
|
|
358
|
+
if (this.syncQueue) {
|
|
359
|
+
await this.syncQueue.flush();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Sync local messages to cloud storage
|
|
364
|
+
*
|
|
365
|
+
* Reads messages from local SQLite since last sync and posts them
|
|
366
|
+
* to the cloud API for centralized storage and search.
|
|
367
|
+
*/
|
|
368
|
+
async syncMessagesToCloud() {
|
|
369
|
+
// Skip if disabled, not connected, no storage, or sync in progress
|
|
370
|
+
if (!this.connected || !this.storage || this.messageSyncInProgress) {
|
|
371
|
+
return { synced: 0, duplicates: 0 };
|
|
372
|
+
}
|
|
373
|
+
if (this.config.messageSyncEnabled === false) {
|
|
374
|
+
return { synced: 0, duplicates: 0 };
|
|
375
|
+
}
|
|
376
|
+
this.messageSyncInProgress = true;
|
|
377
|
+
try {
|
|
378
|
+
const batchSize = this.config.messageSyncBatchSize || 100;
|
|
379
|
+
// Get messages since last sync
|
|
380
|
+
const messages = await this.storage.getMessages({
|
|
381
|
+
sinceTs: this.lastMessageSyncTs > 0 ? this.lastMessageSyncTs : undefined,
|
|
382
|
+
limit: batchSize,
|
|
383
|
+
order: 'asc',
|
|
384
|
+
});
|
|
385
|
+
if (messages.length === 0) {
|
|
386
|
+
return { synced: 0, duplicates: 0 };
|
|
387
|
+
}
|
|
388
|
+
// Transform to API format
|
|
389
|
+
const syncPayload = messages.map((msg) => ({
|
|
390
|
+
id: msg.id,
|
|
391
|
+
ts: msg.ts,
|
|
392
|
+
from: msg.from,
|
|
393
|
+
to: msg.to,
|
|
394
|
+
body: msg.body,
|
|
395
|
+
kind: msg.kind,
|
|
396
|
+
topic: msg.topic,
|
|
397
|
+
thread: msg.thread,
|
|
398
|
+
is_broadcast: msg.is_broadcast,
|
|
399
|
+
is_urgent: msg.is_urgent,
|
|
400
|
+
data: msg.data,
|
|
401
|
+
payload_meta: msg.payloadMeta,
|
|
402
|
+
}));
|
|
403
|
+
// Post to cloud with repo context for workspace resolution
|
|
404
|
+
const response = await fetch(`${this.config.cloudUrl}/api/daemons/messages/sync`, {
|
|
405
|
+
method: 'POST',
|
|
406
|
+
headers: {
|
|
407
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
408
|
+
'Content-Type': 'application/json',
|
|
409
|
+
},
|
|
410
|
+
body: JSON.stringify({
|
|
411
|
+
messages: syncPayload,
|
|
412
|
+
repoFullName: this.repoFullName,
|
|
413
|
+
}),
|
|
414
|
+
});
|
|
415
|
+
if (!response.ok) {
|
|
416
|
+
const errorText = await response.text();
|
|
417
|
+
throw new Error(`Message sync failed: ${response.status} - ${errorText}`);
|
|
418
|
+
}
|
|
419
|
+
const result = await response.json();
|
|
420
|
+
// Update last sync timestamp to the newest message we synced
|
|
421
|
+
if (messages.length > 0) {
|
|
422
|
+
this.lastMessageSyncTs = Math.max(...messages.map((m) => m.ts));
|
|
423
|
+
}
|
|
424
|
+
if (result.synced > 0) {
|
|
425
|
+
log.info(`Synced ${result.synced} messages to cloud`, { duplicates: result.duplicates });
|
|
426
|
+
}
|
|
427
|
+
return result;
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
log.error('Message sync error', { error: String(error) });
|
|
431
|
+
return { synced: 0, duplicates: 0 };
|
|
432
|
+
}
|
|
433
|
+
finally {
|
|
434
|
+
this.messageSyncInProgress = false;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// Singleton instance
|
|
439
|
+
let _cloudSync = null;
|
|
440
|
+
export function getCloudSync(config) {
|
|
441
|
+
if (!_cloudSync) {
|
|
442
|
+
_cloudSync = new CloudSyncService(config);
|
|
443
|
+
}
|
|
444
|
+
return _cloudSync;
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=cloud-sync.js.map
|