clawpad 0.4.1 → 0.4.3
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +8 -8
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/ai/write/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/changes/[id]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/changes/record/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/changes/revert/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/changes/run/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/abort/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/files/pages/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/files/recent/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/files/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/files/spaces/[space]/pages/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/files/spaces/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/files/watch/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/gateway/detect/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/gateway/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/gateway/features/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/gateway/history/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/gateway/resolve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/gateway/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/openclaw/commands/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/settings/search-status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/setup/bootstrap/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/setup/bootstrap-workspace/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/setup/status/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/setup/trigger-onboarding/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/connection/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/connection.html +1 -1
- package/.next/standalone/.next/server/app/settings/connection.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connection.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connection.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connection.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connection.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connection.segments/settings/connection/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connection.segments/settings/connection.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/connection.segments/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/relay/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/relay.html +1 -1
- package/.next/standalone/.next/server/app/settings/relay.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/relay.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/relay.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/relay.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/relay.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/relay.segments/settings/relay/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/relay.segments/settings/relay.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings/relay.segments/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/setup.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/waitlist/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/waitlist.html +1 -1
- package/.next/standalone/.next/server/app/waitlist.rsc +1 -1
- package/.next/standalone/.next/server/app/waitlist.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/waitlist.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/waitlist.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/waitlist.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/waitlist.segments/waitlist/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/waitlist.segments/waitlist.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspace/search/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspace/search.html +2 -2
- package/.next/standalone/.next/server/app/workspace/search.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/search.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/search.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/search.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/search.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/search.segments/workspace/search/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/search.segments/workspace/search.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace/search.segments/workspace.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace.html +2 -2
- package/.next/standalone/.next/server/app/workspace.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace.segments/workspace/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/workspace.segments/workspace.segment.rsc +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +8 -8
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +2 -2
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/package.json +1 -1
- package/bin/clawpad.js +198 -28
- package/package.json +1 -1
- /package/.next/static/{6EwCvP9EKUvJxIMHYw3Dj → _I2Jr5gNqlCtio_q1S9ts}/_buildManifest.js +0 -0
- /package/.next/static/{6EwCvP9EKUvJxIMHYw3Dj → _I2Jr5gNqlCtio_q1S9ts}/_ssgManifest.js +0 -0
package/bin/clawpad.js
CHANGED
|
@@ -354,15 +354,110 @@ async function startShare(shareArgs) {
|
|
|
354
354
|
console.log(` 🔑 Token: ${token.slice(0, 8)}...`);
|
|
355
355
|
console.log();
|
|
356
356
|
|
|
357
|
-
connectRelay(relayUrl, token, gateway.url, agentName);
|
|
357
|
+
connectRelay(relayUrl, token, gateway.url, gateway.token, agentName);
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
|
|
360
|
+
// Handle local RPC methods for cloud UI
|
|
361
|
+
async function handleLocalRpc(msg) {
|
|
362
|
+
const { id, method, params } = msg;
|
|
363
|
+
|
|
364
|
+
try {
|
|
365
|
+
switch (method) {
|
|
366
|
+
case "files.list": {
|
|
367
|
+
const targetPath = resolvePath(params?.path || "~/.openclaw/pages");
|
|
368
|
+
const files = await listFilesRecursive(targetPath);
|
|
369
|
+
return { type: "res", id, ok: true, payload: { files } };
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
case "files.read": {
|
|
373
|
+
const targetPath = resolvePath(params?.path);
|
|
374
|
+
if (!targetPath) {
|
|
375
|
+
return { type: "res", id, ok: false, error: { code: "INVALID_PATH", message: "Path required" } };
|
|
376
|
+
}
|
|
377
|
+
const content = fs.readFileSync(targetPath, "utf-8");
|
|
378
|
+
return { type: "res", id, ok: true, payload: { content } };
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
case "files.write": {
|
|
382
|
+
const targetPath = resolvePath(params?.path);
|
|
383
|
+
if (!targetPath || !params?.content) {
|
|
384
|
+
return { type: "res", id, ok: false, error: { code: "INVALID_PARAMS", message: "Path and content required" } };
|
|
385
|
+
}
|
|
386
|
+
fs.writeFileSync(targetPath, params.content, "utf-8");
|
|
387
|
+
return { type: "res", id, ok: true, payload: { success: true } };
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
default:
|
|
391
|
+
// Not a local method, let gateway handle it
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
} catch (err) {
|
|
395
|
+
return {
|
|
396
|
+
type: "res",
|
|
397
|
+
id,
|
|
398
|
+
ok: false,
|
|
399
|
+
error: { code: "ERROR", message: err.message || "Unknown error" }
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
function resolvePath(p) {
|
|
405
|
+
if (!p) return null;
|
|
406
|
+
if (p.startsWith("~/")) {
|
|
407
|
+
return path.join(os.homedir(), p.slice(2));
|
|
408
|
+
}
|
|
409
|
+
return path.resolve(p);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
async function listFilesRecursive(dirPath, basePath = dirPath) {
|
|
413
|
+
const items = [];
|
|
414
|
+
|
|
415
|
+
try {
|
|
416
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
417
|
+
|
|
418
|
+
for (const entry of entries) {
|
|
419
|
+
// Skip hidden files and node_modules
|
|
420
|
+
if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
|
|
421
|
+
|
|
422
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
423
|
+
const relativePath = path.relative(basePath, fullPath);
|
|
424
|
+
|
|
425
|
+
if (entry.isDirectory()) {
|
|
426
|
+
const children = await listFilesRecursive(fullPath, basePath);
|
|
427
|
+
items.push({
|
|
428
|
+
name: entry.name,
|
|
429
|
+
path: relativePath,
|
|
430
|
+
type: "folder",
|
|
431
|
+
children,
|
|
432
|
+
});
|
|
433
|
+
} else if (entry.name.endsWith(".md") || entry.name.endsWith(".txt")) {
|
|
434
|
+
items.push({
|
|
435
|
+
name: entry.name,
|
|
436
|
+
path: relativePath,
|
|
437
|
+
type: "file",
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
} catch (err) {
|
|
442
|
+
console.error(` ⚠️ Error listing ${dirPath}:`, err.message);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// Sort: folders first, then files, alphabetically
|
|
446
|
+
items.sort((a, b) => {
|
|
447
|
+
if (a.type !== b.type) return a.type === "folder" ? -1 : 1;
|
|
448
|
+
return a.name.localeCompare(b.name);
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
return items;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
function connectRelay(relayUrl, token, gatewayWsUrl, gatewayToken, agentName = "unknown") {
|
|
361
455
|
console.log(` ☁️ Connecting to Relay...`);
|
|
362
456
|
|
|
363
457
|
const tunnelUrl = `${relayUrl}?type=agent&token=${encodeURIComponent(token)}&name=${encodeURIComponent(agentName)}&version=${encodeURIComponent(CURRENT_VERSION)}&platform=${encodeURIComponent(process.platform)}`;
|
|
364
458
|
const ws = new WebSocket(tunnelUrl);
|
|
365
459
|
let gatewayWs = null;
|
|
460
|
+
let gatewayConnected = false;
|
|
366
461
|
let reconnectTimer = null;
|
|
367
462
|
|
|
368
463
|
const cleanup = () => {
|
|
@@ -370,29 +465,75 @@ function connectRelay(relayUrl, token, gatewayWsUrl, agentName = "unknown") {
|
|
|
370
465
|
gatewayWs.terminate();
|
|
371
466
|
gatewayWs = null;
|
|
372
467
|
}
|
|
468
|
+
gatewayConnected = false;
|
|
373
469
|
if (reconnectTimer) {
|
|
374
470
|
clearTimeout(reconnectTimer);
|
|
375
471
|
reconnectTimer = null;
|
|
376
472
|
}
|
|
377
473
|
};
|
|
378
474
|
|
|
379
|
-
|
|
380
|
-
console.log(" ✅ Connected to Cloud Relay.");
|
|
381
|
-
console.log(" Your agent is now accessible via app.clawpad.io");
|
|
382
|
-
|
|
383
|
-
// Connect to Local Gateway
|
|
475
|
+
const connectToGateway = () => {
|
|
384
476
|
gatewayWs = new WebSocket(gatewayWsUrl);
|
|
385
477
|
|
|
386
478
|
gatewayWs.on("open", () => {
|
|
387
|
-
|
|
479
|
+
// Gateway is open but we need to wait for connect.challenge
|
|
388
480
|
});
|
|
389
481
|
|
|
390
482
|
gatewayWs.on("message", (data) => {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
483
|
+
try {
|
|
484
|
+
const msg = JSON.parse(data.toString());
|
|
485
|
+
|
|
486
|
+
// Handle gateway connect.challenge - authenticate before forwarding
|
|
487
|
+
if (msg.type === "event" && msg.event === "connect.challenge") {
|
|
488
|
+
const connectReq = {
|
|
489
|
+
type: "req",
|
|
490
|
+
id: `connect-${Date.now()}`,
|
|
491
|
+
method: "connect",
|
|
492
|
+
params: {
|
|
493
|
+
minProtocol: 3,
|
|
494
|
+
maxProtocol: 3,
|
|
495
|
+
client: {
|
|
496
|
+
id: "cli",
|
|
497
|
+
version: CURRENT_VERSION,
|
|
498
|
+
platform: process.platform,
|
|
499
|
+
mode: "cli"
|
|
500
|
+
},
|
|
501
|
+
role: "operator",
|
|
502
|
+
scopes: ["operator.read", "operator.write"],
|
|
503
|
+
caps: [],
|
|
504
|
+
commands: [],
|
|
505
|
+
permissions: {},
|
|
506
|
+
auth: gatewayToken ? { token: gatewayToken } : {},
|
|
507
|
+
locale: "en-US",
|
|
508
|
+
userAgent: `clawpad-relay/${CURRENT_VERSION}`
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
gatewayWs.send(JSON.stringify(connectReq));
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// Handle connect response
|
|
516
|
+
if (msg.type === "res" && msg.ok && msg.payload?.type === "hello-ok") {
|
|
517
|
+
console.log(" 🔗 Connected to Local Gateway.");
|
|
518
|
+
gatewayConnected = true;
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
// Handle connect error
|
|
523
|
+
if (msg.type === "res" && !msg.ok) {
|
|
524
|
+
console.error(" ❌ Gateway auth failed:", msg.error?.message || "unknown error");
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
// Forward other messages Gateway -> Relay
|
|
529
|
+
if (gatewayConnected && ws.readyState === WebSocket.OPEN) {
|
|
530
|
+
ws.send(data);
|
|
531
|
+
}
|
|
532
|
+
} catch {
|
|
533
|
+
// Non-JSON or parse error, forward anyway if connected
|
|
534
|
+
if (gatewayConnected && ws.readyState === WebSocket.OPEN) {
|
|
535
|
+
ws.send(data);
|
|
536
|
+
}
|
|
396
537
|
}
|
|
397
538
|
});
|
|
398
539
|
|
|
@@ -400,23 +541,52 @@ function connectRelay(relayUrl, token, gatewayWsUrl, agentName = "unknown") {
|
|
|
400
541
|
console.error(" ⚠️ Local Gateway Error:", err.message);
|
|
401
542
|
});
|
|
402
543
|
|
|
403
|
-
gatewayWs.on("close", () => {
|
|
404
|
-
console.log(
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
// Re-establish local connection logic could go here or just let it fail until next message
|
|
408
|
-
// Ideally we close the tunnel or try to reconnect local
|
|
409
|
-
ws.close(); // Force full reconnect cycle
|
|
410
|
-
}
|
|
411
|
-
}, 5000);
|
|
544
|
+
gatewayWs.on("close", (code, reason) => {
|
|
545
|
+
console.log(` ⚠️ Local Gateway Disconnected (${code}). Will reconnect on relay reconnect.`);
|
|
546
|
+
gatewayConnected = false;
|
|
547
|
+
// Don't reconnect gateway independently - let relay reconnect handle it
|
|
412
548
|
});
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
ws.on("open", () => {
|
|
552
|
+
console.log(" ✅ Connected to Cloud Relay.");
|
|
553
|
+
console.log(" Your agent is now accessible via app.clawpad.io");
|
|
554
|
+
connectToGateway();
|
|
555
|
+
|
|
556
|
+
// Keep connection alive with pings every 25s
|
|
557
|
+
const pingInterval = setInterval(() => {
|
|
558
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
559
|
+
ws.ping();
|
|
560
|
+
} else {
|
|
561
|
+
clearInterval(pingInterval);
|
|
562
|
+
}
|
|
563
|
+
}, 25000);
|
|
564
|
+
|
|
565
|
+
ws.on("close", () => clearInterval(pingInterval));
|
|
413
566
|
});
|
|
414
567
|
|
|
415
|
-
ws.on("message", (data) => {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
568
|
+
ws.on("message", async (data) => {
|
|
569
|
+
try {
|
|
570
|
+
const msg = JSON.parse(data.toString());
|
|
571
|
+
|
|
572
|
+
// Handle local RPC methods (files, etc.)
|
|
573
|
+
if (msg.type === "req" && msg.method) {
|
|
574
|
+
const response = await handleLocalRpc(msg);
|
|
575
|
+
if (response) {
|
|
576
|
+
ws.send(JSON.stringify(response));
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// Forward other messages Relay -> Gateway
|
|
582
|
+
if (gatewayWs && gatewayWs.readyState === WebSocket.OPEN && gatewayConnected) {
|
|
583
|
+
gatewayWs.send(data);
|
|
584
|
+
}
|
|
585
|
+
} catch {
|
|
586
|
+
// Non-JSON, forward to gateway
|
|
587
|
+
if (gatewayWs && gatewayWs.readyState === WebSocket.OPEN && gatewayConnected) {
|
|
588
|
+
gatewayWs.send(data);
|
|
589
|
+
}
|
|
420
590
|
}
|
|
421
591
|
});
|
|
422
592
|
|
|
@@ -427,7 +597,7 @@ function connectRelay(relayUrl, token, gatewayWsUrl, agentName = "unknown") {
|
|
|
427
597
|
ws.on("close", () => {
|
|
428
598
|
console.log(" ❌ Disconnected from Relay. Reconnecting in 5s...");
|
|
429
599
|
cleanup();
|
|
430
|
-
reconnectTimer = setTimeout(() => connectRelay(relayUrl, token, gatewayWsUrl), 5000);
|
|
600
|
+
reconnectTimer = setTimeout(() => connectRelay(relayUrl, token, gatewayWsUrl, gatewayToken, agentName), 5000);
|
|
431
601
|
});
|
|
432
602
|
}
|
|
433
603
|
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|