clawpad 0.4.1 → 0.4.2

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 (135) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +12 -12
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/api/ai/write/route_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/api/changes/[id]/route_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/api/changes/record/route_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/api/changes/revert/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/changes/run/route_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/api/chat/abort/route_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/api/files/pages/[...path]/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/files/recent/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/files/search/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/files/spaces/[space]/pages/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/files/spaces/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/files/watch/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/gateway/detect/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/gateway/events/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/gateway/features/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/gateway/history/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/gateway/resolve/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/gateway/status/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/openclaw/commands/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/settings/search-status/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/setup/bootstrap/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/setup/bootstrap-workspace/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/setup/status/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/setup/trigger-onboarding/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/index.html +1 -1
  53. package/.next/standalone/.next/server/app/index.rsc +1 -1
  54. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  55. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/settings/connection/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/settings/connection.html +1 -1
  62. package/.next/standalone/.next/server/app/settings/connection.rsc +1 -1
  63. package/.next/standalone/.next/server/app/settings/connection.segments/_full.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/settings/connection.segments/_head.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/settings/connection.segments/_index.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/settings/connection.segments/_tree.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/settings/connection.segments/settings/connection/__PAGE__.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/settings/connection.segments/settings/connection.segment.rsc +1 -1
  69. package/.next/standalone/.next/server/app/settings/connection.segments/settings.segment.rsc +1 -1
  70. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/settings/relay/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/settings/relay.html +1 -1
  73. package/.next/standalone/.next/server/app/settings/relay.rsc +1 -1
  74. package/.next/standalone/.next/server/app/settings/relay.segments/_full.segment.rsc +1 -1
  75. package/.next/standalone/.next/server/app/settings/relay.segments/_head.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/settings/relay.segments/_index.segment.rsc +1 -1
  77. package/.next/standalone/.next/server/app/settings/relay.segments/_tree.segment.rsc +1 -1
  78. package/.next/standalone/.next/server/app/settings/relay.segments/settings/relay/__PAGE__.segment.rsc +1 -1
  79. package/.next/standalone/.next/server/app/settings/relay.segments/settings/relay.segment.rsc +1 -1
  80. package/.next/standalone/.next/server/app/settings/relay.segments/settings.segment.rsc +1 -1
  81. package/.next/standalone/.next/server/app/settings.html +1 -1
  82. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  83. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  84. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  85. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  86. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  87. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  88. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  89. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/setup.html +1 -1
  91. package/.next/standalone/.next/server/app/setup.rsc +1 -1
  92. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +1 -1
  93. package/.next/standalone/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  94. package/.next/standalone/.next/server/app/setup.segments/_index.segment.rsc +1 -1
  95. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
  96. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
  97. package/.next/standalone/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  98. package/.next/standalone/.next/server/app/waitlist/page_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/waitlist.html +1 -1
  100. package/.next/standalone/.next/server/app/waitlist.rsc +1 -1
  101. package/.next/standalone/.next/server/app/waitlist.segments/_full.segment.rsc +1 -1
  102. package/.next/standalone/.next/server/app/waitlist.segments/_head.segment.rsc +1 -1
  103. package/.next/standalone/.next/server/app/waitlist.segments/_index.segment.rsc +1 -1
  104. package/.next/standalone/.next/server/app/waitlist.segments/_tree.segment.rsc +1 -1
  105. package/.next/standalone/.next/server/app/waitlist.segments/waitlist/__PAGE__.segment.rsc +1 -1
  106. package/.next/standalone/.next/server/app/waitlist.segments/waitlist.segment.rsc +1 -1
  107. package/.next/standalone/.next/server/app/workspace/[...path]/page_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/workspace/search/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/workspace/search.html +2 -2
  111. package/.next/standalone/.next/server/app/workspace/search.rsc +1 -1
  112. package/.next/standalone/.next/server/app/workspace/search.segments/_full.segment.rsc +1 -1
  113. package/.next/standalone/.next/server/app/workspace/search.segments/_head.segment.rsc +1 -1
  114. package/.next/standalone/.next/server/app/workspace/search.segments/_index.segment.rsc +1 -1
  115. package/.next/standalone/.next/server/app/workspace/search.segments/_tree.segment.rsc +1 -1
  116. package/.next/standalone/.next/server/app/workspace/search.segments/workspace/search/__PAGE__.segment.rsc +1 -1
  117. package/.next/standalone/.next/server/app/workspace/search.segments/workspace/search.segment.rsc +1 -1
  118. package/.next/standalone/.next/server/app/workspace/search.segments/workspace.segment.rsc +1 -1
  119. package/.next/standalone/.next/server/app/workspace.html +2 -2
  120. package/.next/standalone/.next/server/app/workspace.rsc +1 -1
  121. package/.next/standalone/.next/server/app/workspace.segments/_full.segment.rsc +1 -1
  122. package/.next/standalone/.next/server/app/workspace.segments/_head.segment.rsc +1 -1
  123. package/.next/standalone/.next/server/app/workspace.segments/_index.segment.rsc +1 -1
  124. package/.next/standalone/.next/server/app/workspace.segments/_tree.segment.rsc +1 -1
  125. package/.next/standalone/.next/server/app/workspace.segments/workspace/__PAGE__.segment.rsc +1 -1
  126. package/.next/standalone/.next/server/app/workspace.segments/workspace.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app-paths-manifest.json +12 -12
  128. package/.next/standalone/.next/server/pages/404.html +1 -1
  129. package/.next/standalone/.next/server/pages/500.html +2 -2
  130. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  131. package/.next/standalone/package.json +1 -1
  132. package/bin/clawpad.js +83 -25
  133. package/package.json +1 -1
  134. /package/.next/static/{6EwCvP9EKUvJxIMHYw3Dj → NMJhAYvDpFBwOVZ62c1WD}/_buildManifest.js +0 -0
  135. /package/.next/static/{6EwCvP9EKUvJxIMHYw3Dj → NMJhAYvDpFBwOVZ62c1WD}/_ssgManifest.js +0 -0
package/bin/clawpad.js CHANGED
@@ -354,15 +354,16 @@ 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
- function connectRelay(relayUrl, token, gatewayWsUrl, agentName = "unknown") {
360
+ function connectRelay(relayUrl, token, gatewayWsUrl, gatewayToken, agentName = "unknown") {
361
361
  console.log(` ☁️ Connecting to Relay...`);
362
362
 
363
363
  const tunnelUrl = `${relayUrl}?type=agent&token=${encodeURIComponent(token)}&name=${encodeURIComponent(agentName)}&version=${encodeURIComponent(CURRENT_VERSION)}&platform=${encodeURIComponent(process.platform)}`;
364
364
  const ws = new WebSocket(tunnelUrl);
365
365
  let gatewayWs = null;
366
+ let gatewayConnected = false;
366
367
  let reconnectTimer = null;
367
368
 
368
369
  const cleanup = () => {
@@ -370,29 +371,75 @@ function connectRelay(relayUrl, token, gatewayWsUrl, agentName = "unknown") {
370
371
  gatewayWs.terminate();
371
372
  gatewayWs = null;
372
373
  }
374
+ gatewayConnected = false;
373
375
  if (reconnectTimer) {
374
376
  clearTimeout(reconnectTimer);
375
377
  reconnectTimer = null;
376
378
  }
377
379
  };
378
380
 
379
- ws.on("open", () => {
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
381
+ const connectToGateway = () => {
384
382
  gatewayWs = new WebSocket(gatewayWsUrl);
385
383
 
386
384
  gatewayWs.on("open", () => {
387
- console.log(" 🔗 Connected to Local Gateway.");
385
+ // Gateway is open but we need to wait for connect.challenge
388
386
  });
389
387
 
390
388
  gatewayWs.on("message", (data) => {
391
- // Forward Gateway -> Relay
392
- // SECURITY: Here we could inspect 'data' if needed, but it's encrypted JSON-RPC usually.
393
- // We rely on 'tools.allow' policy for security.
394
- if (ws.readyState === WebSocket.OPEN) {
395
- ws.send(data);
389
+ try {
390
+ const msg = JSON.parse(data.toString());
391
+
392
+ // Handle gateway connect.challenge - authenticate before forwarding
393
+ if (msg.type === "event" && msg.event === "connect.challenge") {
394
+ const connectReq = {
395
+ type: "req",
396
+ id: `connect-${Date.now()}`,
397
+ method: "connect",
398
+ params: {
399
+ minProtocol: 3,
400
+ maxProtocol: 3,
401
+ client: {
402
+ id: "cli",
403
+ version: CURRENT_VERSION,
404
+ platform: process.platform,
405
+ mode: "cli"
406
+ },
407
+ role: "operator",
408
+ scopes: ["operator.read", "operator.write"],
409
+ caps: [],
410
+ commands: [],
411
+ permissions: {},
412
+ auth: gatewayToken ? { token: gatewayToken } : {},
413
+ locale: "en-US",
414
+ userAgent: `clawpad-relay/${CURRENT_VERSION}`
415
+ }
416
+ };
417
+ gatewayWs.send(JSON.stringify(connectReq));
418
+ return;
419
+ }
420
+
421
+ // Handle connect response
422
+ if (msg.type === "res" && msg.ok && msg.payload?.type === "hello-ok") {
423
+ console.log(" 🔗 Connected to Local Gateway.");
424
+ gatewayConnected = true;
425
+ return;
426
+ }
427
+
428
+ // Handle connect error
429
+ if (msg.type === "res" && !msg.ok) {
430
+ console.error(" ❌ Gateway auth failed:", msg.error?.message || "unknown error");
431
+ return;
432
+ }
433
+
434
+ // Forward other messages Gateway -> Relay
435
+ if (gatewayConnected && ws.readyState === WebSocket.OPEN) {
436
+ ws.send(data);
437
+ }
438
+ } catch {
439
+ // Non-JSON or parse error, forward anyway if connected
440
+ if (gatewayConnected && ws.readyState === WebSocket.OPEN) {
441
+ ws.send(data);
442
+ }
396
443
  }
397
444
  });
398
445
 
@@ -400,22 +447,33 @@ function connectRelay(relayUrl, token, gatewayWsUrl, agentName = "unknown") {
400
447
  console.error(" ⚠️ Local Gateway Error:", err.message);
401
448
  });
402
449
 
403
- gatewayWs.on("close", () => {
404
- console.log(" ⚠️ Local Gateway Disconnected. Reconnecting in 5s...");
405
- setTimeout(() => {
406
- if (ws.readyState === WebSocket.OPEN) {
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);
450
+ gatewayWs.on("close", (code, reason) => {
451
+ console.log(` ⚠️ Local Gateway Disconnected (${code}). Will reconnect on relay reconnect.`);
452
+ gatewayConnected = false;
453
+ // Don't reconnect gateway independently - let relay reconnect handle it
412
454
  });
455
+ };
456
+
457
+ ws.on("open", () => {
458
+ console.log(" ✅ Connected to Cloud Relay.");
459
+ console.log(" Your agent is now accessible via app.clawpad.io");
460
+ connectToGateway();
461
+
462
+ // Keep connection alive with pings every 25s
463
+ const pingInterval = setInterval(() => {
464
+ if (ws.readyState === WebSocket.OPEN) {
465
+ ws.ping();
466
+ } else {
467
+ clearInterval(pingInterval);
468
+ }
469
+ }, 25000);
470
+
471
+ ws.on("close", () => clearInterval(pingInterval));
413
472
  });
414
473
 
415
474
  ws.on("message", (data) => {
416
475
  // Forward Relay -> Gateway
417
- // SECURITY: Intercept dangerous calls here if we parse JSON-RPC
418
- if (gatewayWs && gatewayWs.readyState === WebSocket.OPEN) {
476
+ if (gatewayWs && gatewayWs.readyState === WebSocket.OPEN && gatewayConnected) {
419
477
  gatewayWs.send(data);
420
478
  }
421
479
  });
@@ -427,7 +485,7 @@ function connectRelay(relayUrl, token, gatewayWsUrl, agentName = "unknown") {
427
485
  ws.on("close", () => {
428
486
  console.log(" ❌ Disconnected from Relay. Reconnecting in 5s...");
429
487
  cleanup();
430
- reconnectTimer = setTimeout(() => connectRelay(relayUrl, token, gatewayWsUrl), 5000);
488
+ reconnectTimer = setTimeout(() => connectRelay(relayUrl, token, gatewayWsUrl, gatewayToken, agentName), 5000);
431
489
  });
432
490
  }
433
491
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawpad",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "A file-based, Notion-style document workspace for OpenClaw",
5
5
  "keywords": [
6
6
  "openclaw",