@teneo-protocol/sdk 1.0.0 → 2.0.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.
Files changed (211) hide show
  1. package/.github/workflows/publish-npm.yml +8 -6
  2. package/CHANGELOG.md +265 -0
  3. package/README.md +406 -53
  4. package/dist/core/websocket-client.d.ts +13 -0
  5. package/dist/core/websocket-client.d.ts.map +1 -1
  6. package/dist/core/websocket-client.js +34 -3
  7. package/dist/core/websocket-client.js.map +1 -1
  8. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts +76 -0
  9. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -0
  10. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +70 -0
  11. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -0
  12. package/dist/handlers/message-handlers/agent-selected-handler.d.ts +92 -38
  13. package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -1
  14. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +904 -0
  15. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -0
  16. package/dist/handlers/message-handlers/agent-status-update-handler.js +51 -0
  17. package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -0
  18. package/dist/handlers/message-handlers/auth-error-handler.d.ts +45 -31
  19. package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -1
  20. package/dist/handlers/message-handlers/auth-message-handler.d.ts +6 -0
  21. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
  22. package/dist/handlers/message-handlers/auth-message-handler.js +65 -5
  23. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
  24. package/dist/handlers/message-handlers/auth-required-handler.d.ts +49 -31
  25. package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -1
  26. package/dist/handlers/message-handlers/auth-success-handler.d.ts +6 -0
  27. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
  28. package/dist/handlers/message-handlers/auth-success-handler.js +46 -4
  29. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
  30. package/dist/handlers/message-handlers/challenge-handler.d.ts +45 -31
  31. package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -1
  32. package/dist/handlers/message-handlers/error-message-handler.d.ts +49 -31
  33. package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -1
  34. package/dist/handlers/message-handlers/index.d.ts +5 -0
  35. package/dist/handlers/message-handlers/index.d.ts.map +1 -1
  36. package/dist/handlers/message-handlers/index.js +23 -1
  37. package/dist/handlers/message-handlers/index.js.map +1 -1
  38. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +877 -0
  39. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -0
  40. package/dist/handlers/message-handlers/list-available-agents-handler.js +38 -0
  41. package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -0
  42. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +886 -0
  43. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -0
  44. package/dist/handlers/message-handlers/list-room-agents-handler.js +51 -0
  45. package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -0
  46. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +178 -89
  47. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
  48. package/dist/handlers/message-handlers/ping-pong-handler.d.ts +62 -58
  49. package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -1
  50. package/dist/handlers/message-handlers/regular-message-handler.d.ts +31 -29
  51. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
  52. package/dist/handlers/message-handlers/regular-message-handler.js +1 -0
  53. package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
  54. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts +328 -0
  55. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -0
  56. package/dist/handlers/message-handlers/room-operation-response-handler.js +92 -0
  57. package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -0
  58. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +53 -31
  59. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
  60. package/dist/handlers/message-handlers/types.d.ts +2 -0
  61. package/dist/handlers/message-handlers/types.d.ts.map +1 -1
  62. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +53 -31
  63. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
  64. package/dist/managers/agent-room-manager.d.ts +222 -0
  65. package/dist/managers/agent-room-manager.d.ts.map +1 -0
  66. package/dist/managers/agent-room-manager.js +508 -0
  67. package/dist/managers/agent-room-manager.js.map +1 -0
  68. package/dist/managers/index.d.ts +2 -0
  69. package/dist/managers/index.d.ts.map +1 -1
  70. package/dist/managers/index.js +5 -1
  71. package/dist/managers/index.js.map +1 -1
  72. package/dist/managers/message-router.d.ts +1 -1
  73. package/dist/managers/message-router.d.ts.map +1 -1
  74. package/dist/managers/message-router.js +41 -4
  75. package/dist/managers/message-router.js.map +1 -1
  76. package/dist/managers/room-management-manager.d.ts +213 -0
  77. package/dist/managers/room-management-manager.d.ts.map +1 -0
  78. package/dist/managers/room-management-manager.js +440 -0
  79. package/dist/managers/room-management-manager.js.map +1 -0
  80. package/dist/managers/room-manager.d.ts +4 -4
  81. package/dist/managers/room-manager.d.ts.map +1 -1
  82. package/dist/managers/room-manager.js +1 -1
  83. package/dist/managers/room-manager.js.map +1 -1
  84. package/dist/teneo-sdk.d.ts +362 -14
  85. package/dist/teneo-sdk.d.ts.map +1 -1
  86. package/dist/teneo-sdk.js +497 -7
  87. package/dist/teneo-sdk.js.map +1 -1
  88. package/dist/types/config.d.ts +63 -54
  89. package/dist/types/config.d.ts.map +1 -1
  90. package/dist/types/config.js +9 -5
  91. package/dist/types/config.js.map +1 -1
  92. package/dist/types/error-codes.d.ts +2 -0
  93. package/dist/types/error-codes.d.ts.map +1 -1
  94. package/dist/types/error-codes.js +3 -0
  95. package/dist/types/error-codes.js.map +1 -1
  96. package/dist/types/events.d.ts +132 -68
  97. package/dist/types/events.d.ts.map +1 -1
  98. package/dist/types/events.js.map +1 -1
  99. package/dist/types/index.d.ts +1 -1
  100. package/dist/types/index.d.ts.map +1 -1
  101. package/dist/types/index.js +27 -2
  102. package/dist/types/index.js.map +1 -1
  103. package/dist/types/messages.d.ts +11396 -2559
  104. package/dist/types/messages.d.ts.map +1 -1
  105. package/dist/types/messages.js +294 -27
  106. package/dist/types/messages.js.map +1 -1
  107. package/dist/types/validation.d.ts.map +1 -1
  108. package/dist/types/validation.js +1 -1
  109. package/dist/types/validation.js.map +1 -1
  110. package/dist/utils/bounded-queue.d.ts +1 -1
  111. package/dist/utils/bounded-queue.js +6 -6
  112. package/dist/utils/circuit-breaker.d.ts.map +1 -1
  113. package/dist/utils/circuit-breaker.js.map +1 -1
  114. package/dist/utils/event-waiter.d.ts.map +1 -1
  115. package/dist/utils/event-waiter.js +2 -1
  116. package/dist/utils/event-waiter.js.map +1 -1
  117. package/dist/utils/rate-limiter.d.ts.map +1 -1
  118. package/dist/utils/rate-limiter.js +4 -6
  119. package/dist/utils/rate-limiter.js.map +1 -1
  120. package/dist/utils/secure-private-key.d.ts.map +1 -1
  121. package/dist/utils/secure-private-key.js +9 -15
  122. package/dist/utils/secure-private-key.js.map +1 -1
  123. package/dist/utils/signature-verifier.d.ts +2 -2
  124. package/dist/utils/signature-verifier.d.ts.map +1 -1
  125. package/dist/utils/signature-verifier.js +5 -5
  126. package/dist/utils/signature-verifier.js.map +1 -1
  127. package/examples/.env.example +1 -1
  128. package/examples/agent-room-management-example.ts +334 -0
  129. package/examples/claude-agent-x-follower/.env.example +117 -0
  130. package/examples/claude-agent-x-follower/QUICKSTART.md +243 -0
  131. package/examples/claude-agent-x-follower/README.md +540 -0
  132. package/examples/claude-agent-x-follower/index.ts +248 -0
  133. package/examples/claude-agent-x-follower/package.json +37 -0
  134. package/examples/claude-agent-x-follower/tsconfig.json +20 -0
  135. package/examples/n8n-teneo/.env.example +127 -0
  136. package/examples/n8n-teneo/Dockerfile +42 -0
  137. package/examples/n8n-teneo/README.md +564 -0
  138. package/examples/n8n-teneo/docker-compose.yml +71 -0
  139. package/examples/n8n-teneo/index.ts +177 -0
  140. package/examples/n8n-teneo/package.json +22 -0
  141. package/examples/n8n-teneo/tsconfig.json +12 -0
  142. package/examples/n8n-teneo/workflows/x-timeline.json +66 -0
  143. package/examples/openai-teneo/.env.example +130 -0
  144. package/examples/openai-teneo/README.md +635 -0
  145. package/examples/openai-teneo/index.ts +280 -0
  146. package/examples/openai-teneo/package.json +24 -0
  147. package/examples/openai-teneo/tsconfig.json +16 -0
  148. package/examples/production-dashboard/.env.example +5 -3
  149. package/examples/production-dashboard/README.md +839 -0
  150. package/examples/production-dashboard/pnpm-lock.yaml +92 -0
  151. package/examples/production-dashboard/public/dashboard.html +1150 -504
  152. package/examples/production-dashboard/server.ts +428 -12
  153. package/examples/room-management-example.ts +285 -0
  154. package/examples/usage/.env.example +17 -0
  155. package/examples/usage/01-connect.ts +116 -0
  156. package/examples/usage/02-list-agents.ts +153 -0
  157. package/examples/usage/03-pick-agent.ts +201 -0
  158. package/examples/usage/04-find-by-capability.ts +237 -0
  159. package/examples/usage/05-webhook-example.ts +319 -0
  160. package/examples/usage/06-simple-api-server.ts +396 -0
  161. package/examples/usage/07-event-listener.ts +402 -0
  162. package/examples/usage/README.md +383 -0
  163. package/examples/usage/package.json +42 -0
  164. package/package.json +13 -3
  165. package/src/core/websocket-client.ts +43 -9
  166. package/src/formatters/response-formatter.test.ts +8 -2
  167. package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +83 -0
  168. package/src/handlers/message-handlers/agent-status-update-handler.ts +58 -0
  169. package/src/handlers/message-handlers/auth-message-handler.ts +73 -5
  170. package/src/handlers/message-handlers/auth-success-handler.ts +58 -6
  171. package/src/handlers/message-handlers/index.ts +19 -0
  172. package/src/handlers/message-handlers/list-available-agents-handler.ts +41 -0
  173. package/src/handlers/message-handlers/list-room-agents-handler.ts +61 -0
  174. package/src/handlers/message-handlers/regular-message-handler.ts +1 -0
  175. package/src/handlers/message-handlers/room-operation-response-handler.ts +105 -0
  176. package/src/handlers/message-handlers/types.ts +6 -0
  177. package/src/handlers/webhook-handler.test.ts +13 -10
  178. package/src/managers/agent-room-manager.ts +609 -0
  179. package/src/managers/index.ts +2 -0
  180. package/src/managers/message-router.ts +48 -6
  181. package/src/managers/room-management-manager.ts +523 -0
  182. package/src/managers/room-manager.ts +12 -6
  183. package/src/teneo-sdk.ts +543 -10
  184. package/src/types/config.ts +13 -6
  185. package/src/types/error-codes.ts +4 -0
  186. package/src/types/events.ts +24 -0
  187. package/src/types/index.ts +55 -0
  188. package/src/types/messages.ts +374 -41
  189. package/src/types/validation.ts +4 -1
  190. package/src/utils/bounded-queue.ts +9 -9
  191. package/src/utils/circuit-breaker.ts +4 -1
  192. package/src/utils/deduplication-cache.test.ts +2 -6
  193. package/src/utils/event-waiter.test.ts +4 -1
  194. package/src/utils/event-waiter.ts +5 -7
  195. package/src/utils/rate-limiter.test.ts +5 -17
  196. package/src/utils/rate-limiter.ts +6 -9
  197. package/src/utils/secure-private-key.test.ts +66 -59
  198. package/src/utils/secure-private-key.ts +10 -16
  199. package/src/utils/signature-verifier.test.ts +75 -70
  200. package/src/utils/signature-verifier.ts +7 -8
  201. package/src/utils/ssrf-validator.test.ts +3 -3
  202. package/tests/integration/room-management.test.ts +514 -0
  203. package/tests/integration/websocket.test.ts +1 -1
  204. package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +394 -0
  205. package/tests/unit/handlers/agent-status-update-handler.test.ts +407 -0
  206. package/tests/unit/handlers/auth-success-handler-rooms.test.ts +699 -0
  207. package/tests/unit/handlers/list-available-agents-handler.test.ts +256 -0
  208. package/tests/unit/handlers/list-room-agents-handler.test.ts +294 -0
  209. package/tests/unit/handlers/room-operation-response-handler.test.ts +527 -0
  210. package/tests/unit/managers/agent-room-manager.test.ts +534 -0
  211. package/tests/unit/managers/room-management-manager.test.ts +438 -0
@@ -0,0 +1,508 @@
1
+ "use strict";
2
+ /**
3
+ * AgentRoomManager - Manages agent-room associations (v2.0.0)
4
+ * Allows room owners to control which agents are available in their rooms
5
+ * Implements caching with 5-minute TTL for performance
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.AgentRoomManager = void 0;
9
+ const eventemitter3_1 = require("eventemitter3");
10
+ const events_1 = require("../types/events");
11
+ const error_codes_1 = require("../types/error-codes");
12
+ // Cache TTL: 5 minutes
13
+ const CACHE_TTL_MS = 5 * 60 * 1000;
14
+ class AgentRoomManager extends eventemitter3_1.EventEmitter {
15
+ constructor(wsClient, logger, roomManagementManager) {
16
+ super();
17
+ // Caches with TTL
18
+ this.roomAgentsCache = new Map();
19
+ this.availableAgentsCache = new Map();
20
+ this.roomAgentsCacheTime = new Map();
21
+ this.availableAgentsCacheTime = new Map();
22
+ this.wsClient = wsClient;
23
+ this.logger = logger;
24
+ this.roomManagementManager = roomManagementManager;
25
+ }
26
+ // ============================================================================
27
+ // AGENT ROOM OPERATIONS
28
+ // ============================================================================
29
+ /**
30
+ * Adds an agent to a room, making it available for interactions in that room.
31
+ * User must own the room to perform this operation.
32
+ *
33
+ * @param roomId - ID of the room to add agent to
34
+ * @param agentId - ID of the agent to add
35
+ * @returns Promise that resolves when agent is added
36
+ * @throws {SDKError} If not connected, not room owner, or operation fails
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * await sdk.addAgentToRoom('room-123', 'agent-456');
41
+ * console.log('Agent added to room');
42
+ * ```
43
+ */
44
+ async addAgentToRoom(roomId, agentId) {
45
+ if (!this.wsClient.isConnected) {
46
+ throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
47
+ }
48
+ // Validate inputs
49
+ this.validateRoomId(roomId);
50
+ this.validateAgentId(agentId);
51
+ // Verify room exists
52
+ if (!this.roomExists(roomId)) {
53
+ throw new events_1.SDKError("Room not found", error_codes_1.ErrorCode.VALIDATION_ERROR);
54
+ }
55
+ // Verify user owns room
56
+ if (!this.verifyOwnership(roomId)) {
57
+ throw new events_1.SDKError("Cannot add agent to room: You don't own this room", error_codes_1.ErrorCode.PERMISSION_DENIED);
58
+ }
59
+ this.logger.debug("AgentRoomManager: Adding agent to room", { roomId, agentId });
60
+ const message = {
61
+ type: "add_agent_to_room",
62
+ data: {
63
+ room_id: roomId,
64
+ agent_id: agentId
65
+ }
66
+ };
67
+ return new Promise((resolve, reject) => {
68
+ const timeout = setTimeout(() => {
69
+ cleanup();
70
+ reject(new events_1.SDKError("Add agent to room timeout", error_codes_1.ErrorCode.TIMEOUT));
71
+ }, 30000);
72
+ const onSuccess = (responseRoomId, responseAgentId) => {
73
+ if (responseRoomId === roomId && responseAgentId === agentId) {
74
+ cleanup();
75
+ // Invalidate caches for this room
76
+ this.invalidateRoomCaches(roomId);
77
+ resolve();
78
+ }
79
+ };
80
+ const onError = (error, responseRoomId) => {
81
+ if (!responseRoomId || responseRoomId === roomId) {
82
+ cleanup();
83
+ reject(error);
84
+ }
85
+ };
86
+ const cleanup = () => {
87
+ clearTimeout(timeout);
88
+ this.off("agent_room:agent_added", onSuccess);
89
+ this.off("agent_room:add_error", onError);
90
+ };
91
+ this.once("agent_room:agent_added", onSuccess);
92
+ this.once("agent_room:add_error", onError);
93
+ this.wsClient.sendMessage(message);
94
+ });
95
+ }
96
+ /**
97
+ * Removes an agent from a room.
98
+ * User must own the room to perform this operation.
99
+ *
100
+ * @param roomId - ID of the room to remove agent from
101
+ * @param agentId - ID of the agent to remove
102
+ * @returns Promise that resolves when agent is removed
103
+ * @throws {SDKError} If not connected, not room owner, or operation fails
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * await sdk.removeAgentFromRoom('room-123', 'agent-456');
108
+ * console.log('Agent removed from room');
109
+ * ```
110
+ */
111
+ async removeAgentFromRoom(roomId, agentId) {
112
+ if (!this.wsClient.isConnected) {
113
+ throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
114
+ }
115
+ // Validate inputs
116
+ this.validateRoomId(roomId);
117
+ this.validateAgentId(agentId);
118
+ // Verify user owns room
119
+ if (!this.verifyOwnership(roomId)) {
120
+ throw new events_1.SDKError("Cannot remove agent from room: You don't own this room", error_codes_1.ErrorCode.PERMISSION_DENIED);
121
+ }
122
+ this.logger.debug("AgentRoomManager: Removing agent from room", { roomId, agentId });
123
+ const message = {
124
+ type: "remove_agent_from_room",
125
+ data: {
126
+ room_id: roomId,
127
+ agent_id: agentId
128
+ }
129
+ };
130
+ return new Promise((resolve, reject) => {
131
+ const timeout = setTimeout(() => {
132
+ cleanup();
133
+ reject(new events_1.SDKError("Remove agent from room timeout", error_codes_1.ErrorCode.TIMEOUT));
134
+ }, 30000);
135
+ const onSuccess = (responseRoomId, responseAgentId) => {
136
+ if (responseRoomId === roomId && responseAgentId === agentId) {
137
+ cleanup();
138
+ // Invalidate caches for this room
139
+ this.invalidateRoomCaches(roomId);
140
+ resolve();
141
+ }
142
+ };
143
+ const onError = (error, responseRoomId) => {
144
+ if (!responseRoomId || responseRoomId === roomId) {
145
+ cleanup();
146
+ reject(error);
147
+ }
148
+ };
149
+ const cleanup = () => {
150
+ clearTimeout(timeout);
151
+ this.off("agent_room:agent_removed", onSuccess);
152
+ this.off("agent_room:remove_error", onError);
153
+ };
154
+ this.once("agent_room:agent_removed", onSuccess);
155
+ this.once("agent_room:remove_error", onError);
156
+ this.wsClient.sendMessage(message);
157
+ });
158
+ }
159
+ /**
160
+ * Lists all agents currently in a room.
161
+ * Results are cached for 5 minutes for performance.
162
+ *
163
+ * @param roomId - ID of the room to list agents for
164
+ * @param useCache - Whether to use cached data (default: true)
165
+ * @returns Promise that resolves with array of agents
166
+ * @throws {SDKError} If not connected or operation fails
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const agents = await sdk.listRoomAgents('room-123');
171
+ * console.log(`Room has ${agents.length} agents`);
172
+ *
173
+ * // Force fresh data
174
+ * const freshAgents = await sdk.listRoomAgents('room-123', false);
175
+ * ```
176
+ */
177
+ async listRoomAgents(roomId, useCache = true) {
178
+ if (!this.wsClient.isConnected) {
179
+ throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
180
+ }
181
+ // Validate input
182
+ this.validateRoomId(roomId);
183
+ // Check cache if enabled
184
+ if (useCache && this.isCacheValid(this.roomAgentsCacheTime, roomId)) {
185
+ const cached = this.roomAgentsCache.get(roomId);
186
+ if (cached) {
187
+ this.logger.debug("AgentRoomManager: Returning cached room agents", {
188
+ roomId,
189
+ count: cached.length
190
+ });
191
+ return cached.map((agent) => ({ ...agent })); // Return deep copy
192
+ }
193
+ }
194
+ this.logger.debug("AgentRoomManager: Listing room agents", { roomId });
195
+ const message = {
196
+ type: "list_room_agents",
197
+ data: {
198
+ room_id: roomId
199
+ }
200
+ };
201
+ return new Promise((resolve, reject) => {
202
+ const timeout = setTimeout(() => {
203
+ cleanup();
204
+ reject(new events_1.SDKError("List room agents timeout", error_codes_1.ErrorCode.TIMEOUT));
205
+ }, 30000);
206
+ const onSuccess = (responseRoomId, agents) => {
207
+ if (responseRoomId === roomId) {
208
+ cleanup();
209
+ resolve(agents);
210
+ }
211
+ };
212
+ const onError = (error, responseRoomId) => {
213
+ if (!responseRoomId || responseRoomId === roomId) {
214
+ cleanup();
215
+ reject(error);
216
+ }
217
+ };
218
+ const cleanup = () => {
219
+ clearTimeout(timeout);
220
+ this.off("agent_room:agents_listed", onSuccess);
221
+ this.off("agent_room:list_error", onError);
222
+ };
223
+ this.once("agent_room:agents_listed", onSuccess);
224
+ this.once("agent_room:list_error", onError);
225
+ this.wsClient.sendMessage(message);
226
+ });
227
+ }
228
+ /**
229
+ * Lists all agents available to add to a room (not yet in the room).
230
+ * Results are cached for 5 minutes for performance.
231
+ *
232
+ * @param roomId - ID of the room to check available agents for
233
+ * @param useCache - Whether to use cached data (default: true)
234
+ * @returns Promise that resolves with array of available agents
235
+ * @throws {SDKError} If not connected or operation fails
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * const availableAgents = await sdk.listAvailableAgents('room-123');
240
+ * console.log(`${availableAgents.length} agents can be added`);
241
+ * ```
242
+ */
243
+ async listAvailableAgents(roomId, useCache = true) {
244
+ if (!this.wsClient.isConnected) {
245
+ throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
246
+ }
247
+ // Validate input
248
+ this.validateRoomId(roomId);
249
+ // Check cache if enabled
250
+ if (useCache && this.isCacheValid(this.availableAgentsCacheTime, roomId)) {
251
+ const cached = this.availableAgentsCache.get(roomId);
252
+ if (cached) {
253
+ this.logger.debug("AgentRoomManager: Returning cached available agents", {
254
+ roomId,
255
+ count: cached.length
256
+ });
257
+ return cached.map((agent) => ({ ...agent })); // Return deep copy
258
+ }
259
+ }
260
+ this.logger.debug("AgentRoomManager: Listing available agents", { roomId });
261
+ const message = {
262
+ type: "list_available_agents",
263
+ data: {
264
+ room_id: roomId
265
+ }
266
+ };
267
+ return new Promise((resolve, reject) => {
268
+ const timeout = setTimeout(() => {
269
+ cleanup();
270
+ reject(new events_1.SDKError("List available agents timeout", error_codes_1.ErrorCode.TIMEOUT));
271
+ }, 30000);
272
+ const onSuccess = (agents) => {
273
+ cleanup();
274
+ resolve(agents);
275
+ };
276
+ const onError = (error) => {
277
+ cleanup();
278
+ reject(error);
279
+ };
280
+ const cleanup = () => {
281
+ clearTimeout(timeout);
282
+ this.off("agent_room:available_agents_listed", onSuccess);
283
+ this.off("agent_room:list_available_error", onError);
284
+ };
285
+ this.once("agent_room:available_agents_listed", onSuccess);
286
+ this.once("agent_room:list_available_error", onError);
287
+ this.wsClient.sendMessage(message);
288
+ });
289
+ }
290
+ // ============================================================================
291
+ // QUERY METHODS (Synchronous, from cache)
292
+ // ============================================================================
293
+ /**
294
+ * Gets agents currently in a room from cache (synchronous).
295
+ * Returns undefined if not cached or cache expired.
296
+ *
297
+ * @param roomId - Room ID to query
298
+ * @returns Array of agents or undefined if not cached
299
+ *
300
+ * @example
301
+ * ```typescript
302
+ * const agents = sdk.getRoomAgents('room-123');
303
+ * if (agents) {
304
+ * console.log(`Found ${agents.length} agents in cache`);
305
+ * }
306
+ * ```
307
+ */
308
+ getRoomAgents(roomId) {
309
+ if (!this.isCacheValid(this.roomAgentsCacheTime, roomId)) {
310
+ return undefined;
311
+ }
312
+ const cached = this.roomAgentsCache.get(roomId);
313
+ return cached ? cached.map((agent) => ({ ...agent })) : undefined;
314
+ }
315
+ /**
316
+ * Gets available agents for a room from cache (synchronous).
317
+ * Returns undefined if not cached or cache expired.
318
+ *
319
+ * @param roomId - Room ID to query
320
+ * @returns Array of available agents or undefined if not cached
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * const available = sdk.getAvailableAgents('room-123');
325
+ * if (available) {
326
+ * console.log(`${available.length} agents can be added`);
327
+ * }
328
+ * ```
329
+ */
330
+ getAvailableAgents(roomId) {
331
+ if (!this.isCacheValid(this.availableAgentsCacheTime, roomId)) {
332
+ return undefined;
333
+ }
334
+ const cached = this.availableAgentsCache.get(roomId);
335
+ return cached ? cached.map((agent) => ({ ...agent })) : undefined;
336
+ }
337
+ /**
338
+ * Checks if an agent is currently in a room (from cache).
339
+ * Returns undefined if cache is invalid.
340
+ *
341
+ * @param roomId - Room ID to check
342
+ * @param agentId - Agent ID to check
343
+ * @returns True if agent in room, false if not, undefined if cache invalid
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * const isInRoom = sdk.isAgentInRoom('room-123', 'agent-456');
348
+ * if (isInRoom === true) {
349
+ * console.log('Agent is in this room');
350
+ * }
351
+ * ```
352
+ */
353
+ isAgentInRoom(roomId, agentId) {
354
+ const agents = this.getRoomAgents(roomId);
355
+ if (!agents)
356
+ return undefined;
357
+ return agents.some((agent) => agent.agent_id === agentId);
358
+ }
359
+ /**
360
+ * Gets the count of agents in a room (from cache).
361
+ * Returns undefined if cache is invalid.
362
+ *
363
+ * @param roomId - Room ID to count agents for
364
+ * @returns Number of agents or undefined if cache invalid
365
+ *
366
+ * @example
367
+ * ```typescript
368
+ * const count = sdk.getRoomAgentCount('room-123');
369
+ * if (count !== undefined) {
370
+ * console.log(`Room has ${count} agents`);
371
+ * }
372
+ * ```
373
+ */
374
+ getRoomAgentCount(roomId) {
375
+ const agents = this.getRoomAgents(roomId);
376
+ return agents ? agents.length : undefined;
377
+ }
378
+ // ============================================================================
379
+ // CACHE MANAGEMENT (Public methods)
380
+ // ============================================================================
381
+ /**
382
+ * Manually invalidates all caches for a specific room.
383
+ * Useful after operations that might have changed agent assignments.
384
+ *
385
+ * @param roomId - Room ID to invalidate cache for
386
+ *
387
+ * @example
388
+ * ```typescript
389
+ * // After bulk operations
390
+ * sdk.invalidateCache('room-123');
391
+ * const freshAgents = await sdk.listRoomAgents('room-123', false);
392
+ * ```
393
+ */
394
+ invalidateCache(roomId) {
395
+ this.invalidateRoomCaches(roomId);
396
+ this.logger.debug("AgentRoomManager: Cache invalidated", { roomId });
397
+ }
398
+ /**
399
+ * Clears all caches for all rooms.
400
+ * Called automatically on disconnect.
401
+ * @internal
402
+ */
403
+ clearAllCaches() {
404
+ this.roomAgentsCache.clear();
405
+ this.availableAgentsCache.clear();
406
+ this.roomAgentsCacheTime.clear();
407
+ this.availableAgentsCacheTime.clear();
408
+ this.logger.debug("AgentRoomManager: All caches cleared");
409
+ }
410
+ // ============================================================================
411
+ // INTERNAL METHODS
412
+ // ============================================================================
413
+ /**
414
+ * Handles agent status updates from server.
415
+ * Invalidates cache when agent status changes.
416
+ * @internal
417
+ */
418
+ handleStatusUpdate(roomId, agentId, status) {
419
+ this.logger.debug("AgentRoomManager: Agent status update", {
420
+ roomId,
421
+ agentId,
422
+ status
423
+ });
424
+ // Invalidate cache for this room as agent list may have changed
425
+ this.invalidateRoomCaches(roomId);
426
+ }
427
+ /**
428
+ * Called by handlers to cache room agents.
429
+ * @internal
430
+ */
431
+ cacheRoomAgents(roomId, agents) {
432
+ this.roomAgentsCache.set(roomId, agents);
433
+ this.roomAgentsCacheTime.set(roomId, Date.now());
434
+ this.logger.debug("AgentRoomManager: Cached room agents", {
435
+ roomId,
436
+ count: agents.length
437
+ });
438
+ }
439
+ /**
440
+ * Called by handlers to cache available agents.
441
+ * @internal
442
+ */
443
+ cacheAvailableAgents(roomId, agents) {
444
+ this.availableAgentsCache.set(roomId, agents);
445
+ this.availableAgentsCacheTime.set(roomId, Date.now());
446
+ this.logger.debug("AgentRoomManager: Cached available agents", {
447
+ roomId,
448
+ count: agents.length
449
+ });
450
+ }
451
+ // ============================================================================
452
+ // PRIVATE HELPERS
453
+ // ============================================================================
454
+ /**
455
+ * Checks if cache is still valid (within TTL)
456
+ */
457
+ isCacheValid(cacheTimeMap, roomId) {
458
+ const cacheTime = cacheTimeMap.get(roomId);
459
+ if (!cacheTime)
460
+ return false;
461
+ const age = Date.now() - cacheTime;
462
+ return age < CACHE_TTL_MS;
463
+ }
464
+ /**
465
+ * Invalidates all caches for a specific room
466
+ */
467
+ invalidateRoomCaches(roomId) {
468
+ this.roomAgentsCache.delete(roomId);
469
+ this.availableAgentsCache.delete(roomId);
470
+ this.roomAgentsCacheTime.delete(roomId);
471
+ this.availableAgentsCacheTime.delete(roomId);
472
+ }
473
+ /**
474
+ * Verifies user owns the room
475
+ */
476
+ validateRoomId(roomId) {
477
+ if (!roomId || roomId.trim() === "") {
478
+ throw new events_1.SDKError("Room ID cannot be empty", error_codes_1.ErrorCode.VALIDATION_ERROR);
479
+ }
480
+ }
481
+ validateAgentId(agentId) {
482
+ if (!agentId || agentId.trim() === "") {
483
+ throw new events_1.SDKError("Agent ID cannot be empty", error_codes_1.ErrorCode.VALIDATION_ERROR);
484
+ }
485
+ }
486
+ roomExists(roomId) {
487
+ if (!this.roomManagementManager)
488
+ return true; // Skip check if manager not available
489
+ // If getRoomById method doesn't exist, skip check
490
+ if (typeof this.roomManagementManager.getRoomById !== "function") {
491
+ return true;
492
+ }
493
+ // Check if room exists (in owned or shared rooms)
494
+ const room = this.roomManagementManager.getRoomById(roomId);
495
+ return room !== undefined;
496
+ }
497
+ verifyOwnership(roomId) {
498
+ if (!this.roomManagementManager)
499
+ return true; // Skip check if manager not available
500
+ // Check if room is in owned rooms
501
+ const ownedRooms = this.roomManagementManager.getOwnedRooms?.();
502
+ if (!ownedRooms)
503
+ return true; // Skip check if method not available
504
+ return ownedRooms.some((room) => room.id === roomId);
505
+ }
506
+ }
507
+ exports.AgentRoomManager = AgentRoomManager;
508
+ //# sourceMappingURL=agent-room-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-room-manager.js","sourceRoot":"","sources":["../../src/managers/agent-room-manager.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@
4
4
  */
5
5
  export { ConnectionManager } from "./connection-manager";
6
6
  export { RoomManager } from "./room-manager";
7
+ export { RoomManagementManager } from "./room-management-manager";
8
+ export { AgentRoomManager, type AgentRoomInfo } from "./agent-room-manager";
7
9
  export { AgentRegistry } from "./agent-registry";
8
10
  export { MessageRouter, type SendMessageOptions, type AgentCommand } from "./message-router";
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
@@ -4,11 +4,15 @@
4
4
  * Provides focused classes for different SDK responsibilities
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.MessageRouter = exports.AgentRegistry = exports.RoomManager = exports.ConnectionManager = void 0;
7
+ exports.MessageRouter = exports.AgentRegistry = exports.AgentRoomManager = exports.RoomManagementManager = exports.RoomManager = exports.ConnectionManager = void 0;
8
8
  var connection_manager_1 = require("./connection-manager");
9
9
  Object.defineProperty(exports, "ConnectionManager", { enumerable: true, get: function () { return connection_manager_1.ConnectionManager; } });
10
10
  var room_manager_1 = require("./room-manager");
11
11
  Object.defineProperty(exports, "RoomManager", { enumerable: true, get: function () { return room_manager_1.RoomManager; } });
12
+ var room_management_manager_1 = require("./room-management-manager");
13
+ Object.defineProperty(exports, "RoomManagementManager", { enumerable: true, get: function () { return room_management_manager_1.RoomManagementManager; } });
14
+ var agent_room_manager_1 = require("./agent-room-manager");
15
+ Object.defineProperty(exports, "AgentRoomManager", { enumerable: true, get: function () { return agent_room_manager_1.AgentRoomManager; } });
12
16
  var agent_registry_1 = require("./agent-registry");
13
17
  Object.defineProperty(exports, "AgentRegistry", { enumerable: true, get: function () { return agent_registry_1.AgentRegistry; } });
14
18
  var message_router_1 = require("./message-router");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,mDAA6F;AAApF,+GAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,2DAA4E;AAAnE,sHAAA,gBAAgB,OAAA;AACzB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,mDAA6F;AAApF,+GAAA,aAAa,OAAA"}
@@ -84,7 +84,7 @@ export declare class MessageRouter extends EventEmitter<SDKEvents> {
84
84
  * });
85
85
  * ```
86
86
  */
87
- sendDirectCommand(command: AgentCommand): Promise<FormattedResponse | void>;
87
+ sendDirectCommand(command: AgentCommand, waitForResponse?: boolean): Promise<FormattedResponse | void>;
88
88
  /**
89
89
  * Send message and wait for agent response
90
90
  * Uses event-waiter utility for clean Promise-based waiting with automatic cleanup
@@ -1 +1 @@
1
- {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/managers/message-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAGL,MAAM,EACN,cAAc,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAA4C,MAAM,iBAAiB,CAAC;AAUtF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,GAAG,KAAK,GAAG,WAAW,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,aAAc,SAAQ,YAAY,CAAC,SAAS,CAAC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAG9C,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QACN,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,cAAc,CAAC;KACjC;IAaH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACU,WAAW,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAiCpC;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAmCxF;;;OAGG;YACW,6BAA6B;IA8C3C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkF5B;;;;;;;;;;;;OAYG;IACI,OAAO,IAAI,IAAI;CAOvB"}
1
+ {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/managers/message-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAGL,MAAM,EACN,cAAc,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAA4C,MAAM,iBAAiB,CAAC;AAUtF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,GAAG,KAAK,GAAG,WAAW,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,aAAc,SAAQ,YAAY,CAAC,SAAS,CAAC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAG9C,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QACN,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,cAAc,CAAC;KACjC;IAaH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACU,WAAW,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAiCpC;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,iBAAiB,CAC5B,OAAO,EAAE,YAAY,EACrB,eAAe,GAAE,OAAe,GAC/B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IA6CpC;;;OAGG;YACW,6BAA6B;IA2E3C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkF5B;;;;;;;;;;;;OAYG;IACI,OAAO,IAAI,IAAI;CAOvB"}
@@ -103,7 +103,7 @@ class MessageRouter extends eventemitter3_1.EventEmitter {
103
103
  * });
104
104
  * ```
105
105
  */
106
- async sendDirectCommand(command) {
106
+ async sendDirectCommand(command, waitForResponse = false) {
107
107
  if (!this.wsClient.isConnected) {
108
108
  throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
109
109
  }
@@ -126,8 +126,20 @@ class MessageRouter extends eventemitter3_1.EventEmitter {
126
126
  room,
127
127
  from: walletAddress
128
128
  });
129
- await this.wsClient.sendMessage(message);
130
- await this.webhookHandler.sendMessageWebhook(message);
129
+ const options = {
130
+ room,
131
+ from: walletAddress,
132
+ waitForResponse,
133
+ timeout: this.messageTimeout,
134
+ format: this.responseFormat
135
+ };
136
+ if (waitForResponse) {
137
+ return await this.sendMessageAndWaitForResponse(message, options);
138
+ }
139
+ else {
140
+ await this.wsClient.sendMessage(message);
141
+ await this.webhookHandler.sendMessageWebhook(message);
142
+ }
131
143
  }
132
144
  /**
133
145
  * Send message and wait for agent response
@@ -151,14 +163,39 @@ class MessageRouter extends eventemitter3_1.EventEmitter {
151
163
  await this.wsClient.sendMessage(messageWithId);
152
164
  // Wait for agent response with automatic timeout and cleanup
153
165
  // The filter ensures we only match responses for THIS specific request
166
+ const requestTimestamp = Date.now();
167
+ let responseMatched = false;
154
168
  const response = await (0, event_waiter_1.waitForEvent)(this.wsClient, "agent:response", {
155
169
  timeout,
156
170
  filter: (r) => {
171
+ // Prevent double-matching
172
+ if (responseMatched)
173
+ return false;
157
174
  // Try to match by client_request_id if server echoes it back
158
175
  const responseRequestId = r.raw?.data && "client_request_id" in r.raw.data
159
176
  ? r.raw.data.client_request_id
160
177
  : undefined;
161
- return responseRequestId === requestId;
178
+ if (responseRequestId === requestId) {
179
+ responseMatched = true;
180
+ return true;
181
+ }
182
+ // Fallback: If server doesn't support client_request_id,
183
+ // match the first response from the expected room within 60 seconds
184
+ // This handles servers that don't echo back client_request_id
185
+ const timeSinceRequest = Date.now() - requestTimestamp;
186
+ const responseRoom = r.raw?.room;
187
+ const isFromExpectedRoom = responseRoom === message.room;
188
+ const isWithinTimeWindow = timeSinceRequest < 60000; // 60 second window
189
+ if (isFromExpectedRoom && isWithinTimeWindow && !responseRequestId) {
190
+ this.logger.debug("Matching response without client_request_id (server fallback)", {
191
+ responseRoom,
192
+ expectedRoom: message.room,
193
+ timeSinceRequest
194
+ });
195
+ responseMatched = true;
196
+ return true;
197
+ }
198
+ return false;
162
199
  },
163
200
  timeoutMessage: `Message timeout - no response received after ${timeout}ms (requestId: ${requestId})`
164
201
  });