crewly 1.4.2 → 1.4.4

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 (83) hide show
  1. package/config/skills/orchestrator/reply-gchat/execute.sh +4 -4
  2. package/config/templates/dev-fullstack/norms/docker-deploy-cleanup.md +28 -0
  3. package/dist/backend/backend/src/constants.d.ts +45 -14
  4. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  5. package/dist/backend/backend/src/constants.js +45 -14
  6. package/dist/backend/backend/src/constants.js.map +1 -1
  7. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  8. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +14 -3
  9. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  10. package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts +15 -3
  11. package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts.map +1 -1
  12. package/dist/backend/backend/src/controllers/cloud/relay.controller.js +46 -8
  13. package/dist/backend/backend/src/controllers/cloud/relay.controller.js.map +1 -1
  14. package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts.map +1 -1
  15. package/dist/backend/backend/src/controllers/cloud/relay.routes.js +2 -1
  16. package/dist/backend/backend/src/controllers/cloud/relay.routes.js.map +1 -1
  17. package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts.map +1 -1
  18. package/dist/backend/backend/src/controllers/messaging/messenger.routes.js +86 -3
  19. package/dist/backend/backend/src/controllers/messaging/messenger.routes.js.map +1 -1
  20. package/dist/backend/backend/src/index.d.ts +5 -0
  21. package/dist/backend/backend/src/index.d.ts.map +1 -1
  22. package/dist/backend/backend/src/index.js +33 -0
  23. package/dist/backend/backend/src/index.js.map +1 -1
  24. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +27 -0
  25. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/cloud/cloud-client.service.js +28 -0
  27. package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  28. package/dist/backend/backend/src/services/cloud/relay-client.service.d.ts +47 -44
  29. package/dist/backend/backend/src/services/cloud/relay-client.service.d.ts.map +1 -1
  30. package/dist/backend/backend/src/services/cloud/relay-client.service.js +185 -152
  31. package/dist/backend/backend/src/services/cloud/relay-client.service.js.map +1 -1
  32. package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts.map +1 -1
  33. package/dist/backend/backend/src/services/cloud/relay-server.service.js +3 -12
  34. package/dist/backend/backend/src/services/cloud/relay-server.service.js.map +1 -1
  35. package/dist/backend/backend/src/services/cloud/relay.types.d.ts +27 -4
  36. package/dist/backend/backend/src/services/cloud/relay.types.d.ts.map +1 -1
  37. package/dist/backend/backend/src/services/cloud/relay.types.js.map +1 -1
  38. package/dist/backend/backend/src/services/messaging/adapters/telegram-messenger.adapter.d.ts +16 -8
  39. package/dist/backend/backend/src/services/messaging/adapters/telegram-messenger.adapter.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/messaging/adapters/telegram-messenger.adapter.js +30 -35
  41. package/dist/backend/backend/src/services/messaging/adapters/telegram-messenger.adapter.js.map +1 -1
  42. package/dist/backend/backend/src/services/messaging/response-router.service.d.ts +8 -0
  43. package/dist/backend/backend/src/services/messaging/response-router.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/messaging/response-router.service.js +16 -0
  45. package/dist/backend/backend/src/services/messaging/response-router.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/telegram/index.d.ts +14 -0
  47. package/dist/backend/backend/src/services/telegram/index.d.ts.map +1 -0
  48. package/dist/backend/backend/src/services/telegram/index.js +11 -0
  49. package/dist/backend/backend/src/services/telegram/index.js.map +1 -0
  50. package/dist/backend/backend/src/services/telegram/telegram-credentials.service.d.ts +54 -0
  51. package/dist/backend/backend/src/services/telegram/telegram-credentials.service.d.ts.map +1 -0
  52. package/dist/backend/backend/src/services/telegram/telegram-credentials.service.js +98 -0
  53. package/dist/backend/backend/src/services/telegram/telegram-credentials.service.js.map +1 -0
  54. package/dist/backend/backend/src/services/telegram/telegram-initializer.d.ts +76 -0
  55. package/dist/backend/backend/src/services/telegram/telegram-initializer.d.ts.map +1 -0
  56. package/dist/backend/backend/src/services/telegram/telegram-initializer.js +131 -0
  57. package/dist/backend/backend/src/services/telegram/telegram-initializer.js.map +1 -0
  58. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts +73 -0
  59. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts.map +1 -0
  60. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js +172 -0
  61. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js.map +1 -0
  62. package/dist/backend/backend/src/services/telegram/telegram-thread-store.service.d.ts +86 -0
  63. package/dist/backend/backend/src/services/telegram/telegram-thread-store.service.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/telegram/telegram-thread-store.service.js +157 -0
  65. package/dist/backend/backend/src/services/telegram/telegram-thread-store.service.js.map +1 -0
  66. package/dist/backend/backend/src/services/telegram/telegram.service.d.ts +173 -0
  67. package/dist/backend/backend/src/services/telegram/telegram.service.d.ts.map +1 -0
  68. package/dist/backend/backend/src/services/telegram/telegram.service.js +304 -0
  69. package/dist/backend/backend/src/services/telegram/telegram.service.js.map +1 -0
  70. package/dist/cli/backend/src/constants.d.ts +45 -14
  71. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  72. package/dist/cli/backend/src/constants.js +45 -14
  73. package/dist/cli/backend/src/constants.js.map +1 -1
  74. package/dist/cli/cli/src/commands/migrate.d.ts +101 -0
  75. package/dist/cli/cli/src/commands/migrate.d.ts.map +1 -0
  76. package/dist/cli/cli/src/commands/migrate.js +335 -0
  77. package/dist/cli/cli/src/commands/migrate.js.map +1 -0
  78. package/dist/cli/cli/src/index.js +8 -0
  79. package/dist/cli/cli/src/index.js.map +1 -1
  80. package/frontend/dist/assets/{index-f1dc9f80.css → index-2b76b01d.css} +1 -1
  81. package/frontend/dist/assets/{index-c35cdbc5.js → index-83869ca7.js} +321 -321
  82. package/frontend/dist/index.html +2 -2
  83. package/package.json +1 -1
@@ -1,21 +1,21 @@
1
1
  /**
2
2
  * Relay Client Service
3
3
  *
4
- * WebSocket client that connects to a Relay Server for inter-node
5
- * communication when direct connections are unavailable (NAT/firewall).
4
+ * HTTP polling-based client that connects to a Cloud Message Queue for
5
+ * inter-node communication when direct connections are unavailable (NAT/firewall).
6
6
  *
7
- * Flow: Node A (Agent) <-> Cloud (Relay) <-> Node B (Orchestrator)
7
+ * Flow: Node A (Agent) <-> Cloud (Queue) <-> Node B (Orchestrator)
8
8
  *
9
9
  * Features:
10
- * - Automatic fallback from direct connection to relay mode
10
+ * - HTTP-based registration and message polling (replaces WebSocket)
11
11
  * - End-to-end encryption (E2EE) — relay never sees plaintext
12
- * - Heartbeat keep-alive with auto-reconnection
13
- * - Exponential backoff on reconnection failures
12
+ * - Exponential backoff on registration failures
13
+ * - Automatic message acknowledgement after processing
14
14
  *
15
15
  * @module services/cloud/relay-client.service
16
16
  */
17
17
  import { EventEmitter } from 'events';
18
- import { type RelayClientConfig, type RelayClientState, type RelaySessionId } from './relay.types.js';
18
+ import type { RelayClientConfig, RelayClientState, RelaySessionId } from './relay.types.js';
19
19
  export interface RelayClientEvents {
20
20
  /** Emitted when successfully paired with a peer */
21
21
  paired: (peerSessionId: RelaySessionId, peerRole: string) => void;
@@ -31,22 +31,22 @@ export interface RelayClientEvents {
31
31
  /**
32
32
  * RelayClientService singleton.
33
33
  *
34
- * Manages a WebSocket connection to a relay server, handles registration,
35
- * heartbeats, reconnection, and encrypts/decrypts messages for E2EE.
34
+ * Manages HTTP-based registration, polling, and message exchange with
35
+ * a Cloud Message Queue. Encrypts/decrypts messages for E2EE.
36
36
  */
37
37
  export declare class RelayClientService extends EventEmitter {
38
38
  private static instance;
39
39
  private readonly logger;
40
- /** Current WebSocket connection */
41
- private ws;
42
40
  /** Client configuration (set via connect()) */
43
41
  private config;
44
42
  /** Current connection state */
45
43
  private state;
46
- /** Assigned session ID after registration */
44
+ /** Assigned queue ID after registration (used as sessionId) */
47
45
  private sessionId;
48
- /** Heartbeat interval timer */
49
- private heartbeatInterval;
46
+ /** Peer's queue ID for sending messages */
47
+ private peerQueueId;
48
+ /** Polling interval timer */
49
+ private pollInterval;
50
50
  /** Reconnection attempt counter */
51
51
  private reconnectAttempts;
52
52
  /** Reconnection timer */
@@ -57,6 +57,8 @@ export declare class RelayClientService extends EventEmitter {
57
57
  private salt;
58
58
  /** Whether disconnect was intentional (skip reconnect) */
59
59
  private intentionalDisconnect;
60
+ /** Timestamp of last seen message for pagination */
61
+ private lastSeenTimestamp;
60
62
  private constructor();
61
63
  /**
62
64
  * Get the singleton instance.
@@ -69,10 +71,10 @@ export declare class RelayClientService extends EventEmitter {
69
71
  */
70
72
  static resetInstance(): void;
71
73
  /**
72
- * Connect to a relay server.
74
+ * Connect to the Cloud Message Queue.
73
75
  *
74
- * Establishes the WebSocket connection, sends a register message,
75
- * and derives the E2EE encryption key from the shared secret.
76
+ * Registers via HTTP POST, derives the E2EE encryption key,
77
+ * and starts polling for messages if not immediately paired.
76
78
  *
77
79
  * @param config - Relay client configuration
78
80
  *
@@ -80,7 +82,7 @@ export declare class RelayClientService extends EventEmitter {
80
82
  * ```ts
81
83
  * const client = RelayClientService.getInstance();
82
84
  * client.connect({
83
- * wsUrl: 'ws://cloud.crewly.dev:8787/relay',
85
+ * apiUrl: 'https://api.crewlyai.com',
84
86
  * pairingCode: 'abc-123',
85
87
  * role: 'agent',
86
88
  * token: 'sk-xxx',
@@ -91,13 +93,13 @@ export declare class RelayClientService extends EventEmitter {
91
93
  */
92
94
  connect(config: RelayClientConfig): void;
93
95
  /**
94
- * Disconnect from the relay server.
96
+ * Disconnect from the Cloud Message Queue.
95
97
  *
96
- * Closes the WebSocket cleanly and stops heartbeats and reconnection.
98
+ * Stops polling and cleans up all timers.
97
99
  */
98
100
  disconnect(): void;
99
101
  /**
100
- * Send an encrypted message to the paired peer via the relay.
102
+ * Send an encrypted message to the paired peer via the Cloud Queue.
101
103
  *
102
104
  * The message is encrypted locally before being sent — the relay
103
105
  * server only forwards the opaque ciphertext.
@@ -118,49 +120,50 @@ export declare class RelayClientService extends EventEmitter {
118
120
  */
119
121
  getState(): RelayClientState;
120
122
  /**
121
- * Get the assigned session ID (available after registration).
123
+ * Get the assigned session ID (queue ID, available after registration).
122
124
  *
123
125
  * @returns Session ID or null if not registered
124
126
  */
125
127
  getSessionId(): RelaySessionId | null;
126
128
  /**
127
- * Establish the WebSocket connection and set up handlers.
129
+ * Register with the Cloud Message Queue via HTTP POST.
128
130
  */
129
- private doConnect;
131
+ private doRegister;
130
132
  /**
131
- * Send the registration message to the relay server.
133
+ * Start the polling interval to fetch new messages from the queue.
132
134
  */
133
- private sendRegister;
135
+ private startPolling;
134
136
  /**
135
- * Handle an incoming WebSocket message.
136
- *
137
- * @param data - Raw message data
137
+ * Stop the polling interval.
138
+ */
139
+ private stopPolling;
140
+ /**
141
+ * Poll the queue for new messages and process them.
138
142
  */
139
- private handleMessage;
143
+ private poll;
140
144
  /**
141
- * Handle an incoming relay data message by decrypting the payload.
145
+ * Handle a single queue message payload by decrypting it.
142
146
  *
143
- * @param msg - Relay data message with encrypted payload
147
+ * @param payload - Encrypted payload string
144
148
  */
145
- private handleRelayData;
149
+ private handleQueueMessage;
146
150
  /**
147
- * Start the heartbeat interval to keep the connection alive.
151
+ * Acknowledge processed messages so they are not re-delivered.
152
+ *
153
+ * @param messageIds - Array of message IDs to acknowledge
148
154
  */
149
- private startHeartbeat;
155
+ private ackMessages;
150
156
  /**
151
- * Stop the heartbeat interval.
157
+ * Send an encrypted payload to the peer via HTTP POST.
158
+ *
159
+ * @param payload - Serialized encrypted envelope
152
160
  */
153
- private stopHeartbeat;
161
+ private sendViaHttp;
154
162
  /**
155
163
  * Schedule a reconnection attempt with exponential backoff.
164
+ * Applied to HTTP register failures.
156
165
  */
157
166
  private scheduleReconnect;
158
- /**
159
- * Send a raw relay message over the WebSocket.
160
- *
161
- * @param message - Relay message to send
162
- */
163
- private sendRaw;
164
167
  /**
165
168
  * Update the client state and emit a stateChange event.
166
169
  *
@@ -168,7 +171,7 @@ export declare class RelayClientService extends EventEmitter {
168
171
  */
169
172
  private setState;
170
173
  /**
171
- * Clean up timers and close the WebSocket connection.
174
+ * Clean up timers and reset connection state.
172
175
  */
173
176
  private cleanup;
174
177
  }
@@ -1 +1 @@
1
- {"version":3,"file":"relay-client.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/relay-client.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAKpB,MAAM,kBAAkB,CAAC;AAgB1B,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,iEAAiE;IACjE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,gBAAgB,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,4CAA4C;IAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,wBAAwB;IACxB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAMD;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAA0B;IACpC,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAkC;IAChD,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAoC;IACjD,6CAA6C;IAC7C,OAAO,CAAC,SAAS,CAA+B;IAChD,+BAA+B;IAC/B,OAAO,CAAC,iBAAiB,CAA+C;IACxE,mCAAmC;IACnC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,yBAAyB;IACzB,OAAO,CAAC,cAAc,CAA8C;IACpE,6BAA6B;IAC7B,OAAO,CAAC,aAAa,CAAuB;IAC5C,kEAAkE;IAClE,OAAO,CAAC,IAAI,CAAuB;IACnC,0DAA0D;IAC1D,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO;IAKP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAY5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAiBxC;;;;OAIG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAe7B;;;;OAIG;IACH,QAAQ,IAAI,gBAAgB;IAI5B;;;;OAIG;IACH,YAAY,IAAI,cAAc,GAAG,IAAI;IAQrC;;OAEG;IACH,OAAO,CAAC,SAAS;IA6CjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAyDrB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAMf;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,OAAO,CAAC,OAAO;CAkBhB"}
1
+ {"version":3,"file":"relay-client.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/cloud/relay-client.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAgB1B,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,iEAAiE;IACjE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,gBAAgB,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,4CAA4C;IAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,wBAAwB;IACxB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAMD;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAkC;IAChD,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAoC;IACjD,+DAA+D;IAC/D,OAAO,CAAC,SAAS,CAA+B;IAChD,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAAuB;IAC1C,6BAA6B;IAC7B,OAAO,CAAC,YAAY,CAA+C;IACnE,mCAAmC;IACnC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,yBAAyB;IACzB,OAAO,CAAC,cAAc,CAA8C;IACpE,6BAA6B;IAC7B,OAAO,CAAC,aAAa,CAAuB;IAC5C,kEAAkE;IAClE,OAAO,CAAC,IAAI,CAAuB;IACnC,0DAA0D;IAC1D,OAAO,CAAC,qBAAqB,CAAS;IACtC,oDAAoD;IACpD,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO;IAKP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAY5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAkBxC;;;;OAIG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAiB7B;;;;OAIG;IACH,QAAQ,IAAI,gBAAgB;IAI5B;;;;OAIG;IACH,YAAY,IAAI,cAAc,GAAG,IAAI;IAQrC;;OAEG;YACW,UAAU;IAyDxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;YACW,IAAI;IAkDlB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;;OAIG;YACW,WAAW;IA0BzB;;;;OAIG;YACW,WAAW;IA8BzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,OAAO,CAAC,OAAO;CAWhB"}