@teneo-protocol/sdk 1.0.1 → 2.2.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 (352) hide show
  1. package/.eslintrc.json +11 -2
  2. package/.github/CODEOWNERS +2 -0
  3. package/.github/ISSUE_TEMPLATE/01-bug.yml +85 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  6. package/.github/workflows/claude-code-review.yml +8 -3
  7. package/.github/workflows/claude-reviewer.yml +6 -4
  8. package/.github/workflows/publish-npm.yml +9 -6
  9. package/.github/workflows/push-to-main.yml +1 -1
  10. package/.github/workflows/top-issue.yml +102 -0
  11. package/CHANGELOG.md +334 -0
  12. package/CONCEPTS.md +747 -0
  13. package/README.md +577 -54
  14. package/dist/constants.js +8 -8
  15. package/dist/constants.js.map +1 -1
  16. package/dist/core/websocket-client.d.ts +25 -1
  17. package/dist/core/websocket-client.d.ts.map +1 -1
  18. package/dist/core/websocket-client.js +74 -15
  19. package/dist/core/websocket-client.js.map +1 -1
  20. package/dist/formatters/response-formatter.js +4 -0
  21. package/dist/formatters/response-formatter.js.map +1 -1
  22. package/dist/handlers/message-handler-registry.js +2 -1
  23. package/dist/handlers/message-handler-registry.js.map +1 -1
  24. package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
  25. package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
  26. package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
  27. package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
  28. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts +76 -0
  29. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -0
  30. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +67 -0
  31. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -0
  32. package/dist/handlers/message-handlers/agent-selected-handler.d.ts +92 -38
  33. package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -1
  34. package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
  35. package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
  36. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +1687 -0
  37. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -0
  38. package/dist/handlers/message-handlers/agent-status-update-handler.js +48 -0
  39. package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -0
  40. package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
  41. package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
  42. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
  43. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
  44. package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
  45. package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
  46. package/dist/handlers/message-handlers/auth-error-handler.d.ts +45 -31
  47. package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -1
  48. package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
  49. package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
  50. package/dist/handlers/message-handlers/auth-message-handler.d.ts +6 -0
  51. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
  52. package/dist/handlers/message-handlers/auth-message-handler.js +71 -10
  53. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
  54. package/dist/handlers/message-handlers/auth-required-handler.d.ts +49 -31
  55. package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -1
  56. package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
  57. package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
  58. package/dist/handlers/message-handlers/auth-success-handler.d.ts +6 -0
  59. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
  60. package/dist/handlers/message-handlers/auth-success-handler.js +52 -9
  61. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
  62. package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
  63. package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
  64. package/dist/handlers/message-handlers/base-handler.js +3 -1
  65. package/dist/handlers/message-handlers/base-handler.js.map +1 -1
  66. package/dist/handlers/message-handlers/challenge-handler.d.ts +45 -31
  67. package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -1
  68. package/dist/handlers/message-handlers/challenge-handler.js +3 -2
  69. package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
  70. package/dist/handlers/message-handlers/error-message-handler.d.ts +49 -31
  71. package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -1
  72. package/dist/handlers/message-handlers/error-message-handler.js +2 -5
  73. package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
  74. package/dist/handlers/message-handlers/index.d.ts +11 -0
  75. package/dist/handlers/message-handlers/index.d.ts.map +1 -1
  76. package/dist/handlers/message-handlers/index.js +55 -1
  77. package/dist/handlers/message-handlers/index.js.map +1 -1
  78. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +1660 -0
  79. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -0
  80. package/dist/handlers/message-handlers/list-available-agents-handler.js +35 -0
  81. package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -0
  82. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +1669 -0
  83. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -0
  84. package/dist/handlers/message-handlers/list-room-agents-handler.js +48 -0
  85. package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -0
  86. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -110
  87. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
  88. package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
  89. package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
  90. package/dist/handlers/message-handlers/ping-pong-handler.d.ts +62 -58
  91. package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -1
  92. package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
  93. package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
  94. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
  95. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
  96. package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
  97. package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
  98. package/dist/handlers/message-handlers/regular-message-handler.d.ts +31 -29
  99. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
  100. package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
  101. package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
  102. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts +328 -0
  103. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -0
  104. package/dist/handlers/message-handlers/room-operation-response-handler.js +89 -0
  105. package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -0
  106. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +53 -31
  107. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
  108. package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
  109. package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
  110. package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
  111. package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
  112. package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
  113. package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
  114. package/dist/handlers/message-handlers/task-response-handler.js +2 -5
  115. package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
  116. package/dist/handlers/message-handlers/types.d.ts +21 -7
  117. package/dist/handlers/message-handlers/types.d.ts.map +1 -1
  118. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +53 -31
  119. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
  120. package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
  121. package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
  122. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
  123. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
  124. package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
  125. package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
  126. package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
  127. package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
  128. package/dist/handlers/message-handlers/user-count-handler.js +31 -0
  129. package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
  130. package/dist/handlers/webhook-handler.d.ts +1 -1
  131. package/dist/handlers/webhook-handler.d.ts.map +1 -1
  132. package/dist/handlers/webhook-handler.js +14 -5
  133. package/dist/handlers/webhook-handler.js.map +1 -1
  134. package/dist/index.d.ts +6 -1
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +19 -2
  137. package/dist/index.js.map +1 -1
  138. package/dist/managers/admin-manager.d.ts +116 -0
  139. package/dist/managers/admin-manager.d.ts.map +1 -0
  140. package/dist/managers/admin-manager.js +169 -0
  141. package/dist/managers/admin-manager.js.map +1 -0
  142. package/dist/managers/agent-registry.d.ts +52 -1
  143. package/dist/managers/agent-registry.d.ts.map +1 -1
  144. package/dist/managers/agent-registry.js +145 -6
  145. package/dist/managers/agent-registry.js.map +1 -1
  146. package/dist/managers/agent-room-manager.d.ts +216 -0
  147. package/dist/managers/agent-room-manager.d.ts.map +1 -0
  148. package/dist/managers/agent-room-manager.js +555 -0
  149. package/dist/managers/agent-room-manager.js.map +1 -0
  150. package/dist/managers/connection-manager.js +2 -0
  151. package/dist/managers/connection-manager.js.map +1 -1
  152. package/dist/managers/index.d.ts +4 -1
  153. package/dist/managers/index.d.ts.map +1 -1
  154. package/dist/managers/index.js +7 -1
  155. package/dist/managers/index.js.map +1 -1
  156. package/dist/managers/message-router.d.ts +56 -5
  157. package/dist/managers/message-router.d.ts.map +1 -1
  158. package/dist/managers/message-router.js +155 -8
  159. package/dist/managers/message-router.js.map +1 -1
  160. package/dist/managers/room-management-manager.d.ts +213 -0
  161. package/dist/managers/room-management-manager.d.ts.map +1 -0
  162. package/dist/managers/room-management-manager.js +442 -0
  163. package/dist/managers/room-management-manager.js.map +1 -0
  164. package/dist/managers/room-manager.d.ts +11 -9
  165. package/dist/managers/room-manager.d.ts.map +1 -1
  166. package/dist/managers/room-manager.js +14 -10
  167. package/dist/managers/room-manager.js.map +1 -1
  168. package/dist/payments/index.d.ts +5 -0
  169. package/dist/payments/index.d.ts.map +1 -0
  170. package/dist/payments/index.js +21 -0
  171. package/dist/payments/index.js.map +1 -0
  172. package/dist/payments/payment-client.d.ts +74 -0
  173. package/dist/payments/payment-client.d.ts.map +1 -0
  174. package/dist/payments/payment-client.js +207 -0
  175. package/dist/payments/payment-client.js.map +1 -0
  176. package/dist/teneo-sdk.d.ts +467 -33
  177. package/dist/teneo-sdk.d.ts.map +1 -1
  178. package/dist/teneo-sdk.js +735 -26
  179. package/dist/teneo-sdk.js.map +1 -1
  180. package/dist/types/categories.d.ts +22 -0
  181. package/dist/types/categories.d.ts.map +1 -0
  182. package/dist/types/categories.js +40 -0
  183. package/dist/types/categories.js.map +1 -0
  184. package/dist/types/config.d.ts +134 -54
  185. package/dist/types/config.d.ts.map +1 -1
  186. package/dist/types/config.js +70 -9
  187. package/dist/types/config.js.map +1 -1
  188. package/dist/types/error-codes.d.ts +10 -0
  189. package/dist/types/error-codes.d.ts.map +1 -1
  190. package/dist/types/error-codes.js +12 -0
  191. package/dist/types/error-codes.js.map +1 -1
  192. package/dist/types/events.d.ts +176 -68
  193. package/dist/types/events.d.ts.map +1 -1
  194. package/dist/types/events.js +19 -1
  195. package/dist/types/events.js.map +1 -1
  196. package/dist/types/index.d.ts +3 -2
  197. package/dist/types/index.d.ts.map +1 -1
  198. package/dist/types/index.js +57 -2
  199. package/dist/types/index.js.map +1 -1
  200. package/dist/types/messages.d.ts +22225 -2592
  201. package/dist/types/messages.d.ts.map +1 -1
  202. package/dist/types/messages.js +537 -28
  203. package/dist/types/messages.js.map +1 -1
  204. package/dist/utils/bounded-queue.d.ts.map +1 -1
  205. package/dist/utils/bounded-queue.js +5 -2
  206. package/dist/utils/bounded-queue.js.map +1 -1
  207. package/dist/utils/circuit-breaker.js +11 -4
  208. package/dist/utils/circuit-breaker.js.map +1 -1
  209. package/dist/utils/deduplication-cache.js +3 -1
  210. package/dist/utils/deduplication-cache.js.map +1 -1
  211. package/dist/utils/event-waiter.d.ts +3 -3
  212. package/dist/utils/event-waiter.d.ts.map +1 -1
  213. package/dist/utils/index.d.ts +1 -0
  214. package/dist/utils/index.d.ts.map +1 -1
  215. package/dist/utils/index.js +4 -1
  216. package/dist/utils/index.js.map +1 -1
  217. package/dist/utils/logger.js.map +1 -1
  218. package/dist/utils/pricing-resolver.d.ts +26 -0
  219. package/dist/utils/pricing-resolver.d.ts.map +1 -0
  220. package/dist/utils/pricing-resolver.js +85 -0
  221. package/dist/utils/pricing-resolver.js.map +1 -0
  222. package/dist/utils/rate-limiter.d.ts.map +1 -1
  223. package/dist/utils/rate-limiter.js +6 -0
  224. package/dist/utils/rate-limiter.js.map +1 -1
  225. package/dist/utils/retry-policy.js +1 -0
  226. package/dist/utils/retry-policy.js.map +1 -1
  227. package/dist/utils/secure-private-key.js +3 -1
  228. package/dist/utils/secure-private-key.js.map +1 -1
  229. package/dist/utils/signature-verifier.d.ts.map +1 -1
  230. package/dist/utils/signature-verifier.js +3 -1
  231. package/dist/utils/signature-verifier.js.map +1 -1
  232. package/examples/.env.example +2 -2
  233. package/examples/agent-room-management-example.ts +335 -0
  234. package/examples/basic-usage.ts +3 -4
  235. package/examples/claude-agent-x-follower/.env.example +3 -3
  236. package/examples/claude-agent-x-follower/QUICKSTART.md +3 -3
  237. package/examples/claude-agent-x-follower/README.md +3 -3
  238. package/examples/claude-agent-x-follower/index.ts +120 -96
  239. package/examples/n8n-teneo/.env.example +3 -3
  240. package/examples/n8n-teneo/README.md +2 -2
  241. package/examples/n8n-teneo/index.ts +54 -44
  242. package/examples/nestjs-dashboard/.env.example +11 -0
  243. package/examples/nestjs-dashboard/README.md +297 -0
  244. package/examples/nestjs-dashboard/nest-cli.json +10 -0
  245. package/examples/nestjs-dashboard/package.json +44 -0
  246. package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
  247. package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
  248. package/examples/nestjs-dashboard/src/app.module.ts +15 -0
  249. package/examples/nestjs-dashboard/src/main.ts +32 -0
  250. package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
  251. package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
  252. package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
  253. package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
  254. package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
  255. package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
  256. package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
  257. package/examples/nestjs-dashboard/tsconfig.json +22 -0
  258. package/examples/openai-teneo/.env.example +3 -3
  259. package/examples/openai-teneo/README.md +3 -3
  260. package/examples/openai-teneo/index.ts +82 -71
  261. package/examples/production-dashboard/.env.example +3 -3
  262. package/examples/production-dashboard/README.md +90 -13
  263. package/examples/production-dashboard/public/dashboard.html +1173 -601
  264. package/examples/production-dashboard/server.ts +349 -7
  265. package/examples/room-management-example.ts +282 -0
  266. package/examples/usage/.env.example +2 -2
  267. package/examples/usage/01-connect.ts +3 -4
  268. package/examples/usage/02-list-agents.ts +2 -3
  269. package/examples/usage/03-pick-agent.ts +2 -3
  270. package/examples/usage/04-find-by-capability.ts +2 -3
  271. package/examples/usage/05-webhook-example.ts +2 -3
  272. package/examples/usage/06-simple-api-server.ts +2 -3
  273. package/examples/usage/07-event-listener.ts +2 -3
  274. package/examples/usage/README.md +1 -1
  275. package/examples/webhook-integration.ts +1 -1
  276. package/examples/x-influencer-battle-server.ts +2 -2
  277. package/package.json +12 -1
  278. package/src/core/websocket-client.test.ts +8 -3
  279. package/src/core/websocket-client.ts +58 -4
  280. package/src/formatters/response-formatter.test.ts +2 -0
  281. package/src/formatters/response-formatter.ts +3 -3
  282. package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
  283. package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +77 -0
  284. package/src/handlers/message-handlers/agent-status-update-handler.ts +52 -0
  285. package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
  286. package/src/handlers/message-handlers/auth-message-handler.ts +78 -5
  287. package/src/handlers/message-handlers/auth-success-handler.ts +63 -6
  288. package/src/handlers/message-handlers/base-handler.ts +20 -7
  289. package/src/handlers/message-handlers/index.ts +53 -0
  290. package/src/handlers/message-handlers/list-available-agents-handler.ts +41 -0
  291. package/src/handlers/message-handlers/list-room-agents-handler.ts +58 -0
  292. package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
  293. package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
  294. package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
  295. package/src/handlers/message-handlers/room-operation-response-handler.ts +102 -0
  296. package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
  297. package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
  298. package/src/handlers/message-handlers/types.ts +41 -7
  299. package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
  300. package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
  301. package/src/handlers/message-handlers/user-count-handler.ts +34 -0
  302. package/src/handlers/webhook-handler.test.ts +3 -2
  303. package/src/handlers/webhook-handler.ts +13 -7
  304. package/src/index.ts +21 -0
  305. package/src/managers/admin-manager.ts +249 -0
  306. package/src/managers/agent-registry.test.ts +2 -1
  307. package/src/managers/agent-registry.ts +170 -2
  308. package/src/managers/agent-room-manager.ts +665 -0
  309. package/src/managers/index.ts +15 -1
  310. package/src/managers/message-router.ts +215 -17
  311. package/src/managers/room-management-manager.ts +520 -0
  312. package/src/managers/room-manager.ts +15 -20
  313. package/src/payments/index.ts +22 -0
  314. package/src/payments/payment-client.ts +240 -0
  315. package/src/teneo-sdk.ts +806 -30
  316. package/src/types/categories.ts +45 -0
  317. package/src/types/config.ts +80 -7
  318. package/src/types/error-codes.ts +14 -0
  319. package/src/types/events.test.ts +1 -0
  320. package/src/types/events.ts +67 -0
  321. package/src/types/index.ts +111 -0
  322. package/src/types/messages.test.ts +2 -1
  323. package/src/types/messages.ts +677 -42
  324. package/src/utils/bounded-queue.test.ts +1 -1
  325. package/src/utils/bounded-queue.ts +2 -1
  326. package/src/utils/circuit-breaker.test.ts +1 -1
  327. package/src/utils/deduplication-cache.test.ts +1 -1
  328. package/src/utils/event-waiter.test.ts +1 -1
  329. package/src/utils/event-waiter.ts +3 -3
  330. package/src/utils/index.ts +7 -0
  331. package/src/utils/logger.ts +8 -8
  332. package/src/utils/pricing-resolver.ts +128 -0
  333. package/src/utils/rate-limiter.test.ts +1 -1
  334. package/src/utils/rate-limiter.ts +1 -0
  335. package/src/utils/signature-verifier.test.ts +2 -2
  336. package/src/utils/signature-verifier.ts +3 -2
  337. package/tests/.env.example +7 -0
  338. package/tests/direct-agent-test.ts +151 -0
  339. package/tests/integration/real-server.test.ts +2 -0
  340. package/tests/integration/room-management.test.ts +516 -0
  341. package/tests/integration/websocket.test.ts +5 -2
  342. package/tests/payment-flow-test.ts +147 -0
  343. package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +382 -0
  344. package/tests/unit/handlers/agent-status-update-handler.test.ts +403 -0
  345. package/tests/unit/handlers/auth-success-handler-rooms.test.ts +697 -0
  346. package/tests/unit/handlers/list-available-agents-handler.test.ts +248 -0
  347. package/tests/unit/handlers/list-room-agents-handler.test.ts +290 -0
  348. package/tests/unit/handlers/room-operation-response-handler.test.ts +500 -0
  349. package/tests/unit/managers/agent-room-manager.test.ts +527 -0
  350. package/tests/unit/managers/room-management-manager.test.ts +420 -0
  351. package/tsconfig.json +2 -2
  352. package/vitest.config.ts +1 -0
package/.eslintrc.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "node": true,
14
14
  "jest": true
15
15
  },
16
- "ignorePatterns": ["dist", "node_modules"],
16
+ "ignorePatterns": ["dist", "node_modules", "examples"],
17
17
  "rules": {
18
18
  "@typescript-eslint/no-explicit-any": "warn",
19
19
  "@typescript-eslint/explicit-function-return-type": "off",
@@ -22,5 +22,14 @@
22
22
  { "argsIgnorePattern": "^_" }
23
23
  ],
24
24
  "prettier/prettier": ["error", { "trailingComma": "none" }]
25
- }
25
+ },
26
+ "overrides": [
27
+ {
28
+ "files": ["**/*.test.ts", "tests/**/*.ts"],
29
+ "rules": {
30
+ "@typescript-eslint/no-explicit-any": "off",
31
+ "@typescript-eslint/no-unused-vars": "off"
32
+ }
33
+ }
34
+ ]
26
35
  }
@@ -0,0 +1,2 @@
1
+ # Default code owners
2
+ * @KhalilSelyan @Gradonsky @pyagmyrov
@@ -0,0 +1,85 @@
1
+ name: Bug report
2
+ description: File a bug report for teneo-sdk
3
+ title: "<short description of the bug>"
4
+ labels:
5
+ - "bug"
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thank you for taking the time to report this issue and help improve teneo-sdk. We'll look into it! 🐛
11
+
12
+ - id: issue-type
13
+ type: dropdown
14
+ attributes:
15
+ label: Issue Type
16
+ description: What type of issue are you reporting?
17
+ options:
18
+ - Agent SDK Issue
19
+ - Network/Protocol Issue
20
+ - NFT Integration Issue
21
+ - Build/Dependency Issue
22
+ - Documentation Issue
23
+ - Other
24
+ validations:
25
+ required: true
26
+
27
+ - id: operating-system
28
+ type: dropdown
29
+ attributes:
30
+ label: Operating System
31
+ description: What operating system are you running?
32
+ options:
33
+ - macOS
34
+ - Windows
35
+ - Linux
36
+ validations:
37
+ required: true
38
+
39
+ - id: description
40
+ type: textarea
41
+ attributes:
42
+ label: Description of the bug
43
+ description: What happened and what did you expect?
44
+ placeholder: Describe what went wrong and what you expected to happen instead.
45
+ validations:
46
+ required: true
47
+
48
+ - id: reproduce
49
+ type: textarea
50
+ attributes:
51
+ label: Steps to Reproduce
52
+ placeholder: |
53
+ 1. Initialize agent with configuration...
54
+ 2. Call method/function...
55
+ 3. See error
56
+ validations:
57
+ required: true
58
+
59
+ - id: screenshots
60
+ type: textarea
61
+ attributes:
62
+ label: Screenshots / Videos
63
+ description: If applicable, add screenshots or videos to help explain your problem
64
+ placeholder: Drag and drop images/videos here or paste URLs
65
+
66
+ - id: sdk-version
67
+ type: input
68
+ attributes:
69
+ label: SDK Version
70
+ description: Which version of teneo-sdk are you using? (Check your package.json or run `npm list teneo-sdk`)
71
+ placeholder: e.g., v0.1.0 or commit hash
72
+
73
+ - id: go-version
74
+ type: input
75
+ attributes:
76
+ label: Go Version
77
+ description: Which version of Go are you using? (Run `go version`)
78
+ placeholder: e.g., go1.21.0
79
+
80
+ - id: additional-context
81
+ type: textarea
82
+ attributes:
83
+ label: Additional Context
84
+ description: Add any other context about the problem here (logs, error messages, etc.)
85
+ placeholder: Paste error messages, logs, or any other relevant information...
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 💬 Discord
4
+ url: https://discord.com/invite/teneoprotocol
5
+ about: Join our Discord for help and discussions!
6
+ - name: 📚 Documentation
7
+ url: https://teneo-protocol.ai/chat-room
8
+ about: Find setup guides and learn how to use Teneo SDK
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest a new feature or enhancement for teneo-sdk
4
+ title: '[Feature Request] '
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ What problem does this solve? (describe the problem you're experiencing)
10
+ *
11
+
12
+ How are you working around this today? (your current solution or workaround)
13
+ *
14
+
15
+ What's your proposed solution? (how should teneo-sdk address this?)
16
+ *
17
+
18
+ Additional context (optional - add screenshots, examples, or other helpful details)
19
+ *
20
+
21
+ ---
22
+ Thanks for sharing your idea! We love hearing how we can make teneo-sdk better. ✨
@@ -12,11 +12,16 @@ on:
12
12
 
13
13
  jobs:
14
14
  claude-review:
15
+ # Only run in Teneo-Protocol organization
16
+ if: github.repository_owner == 'Teneo-Protocol'
17
+
15
18
  # Optional: Filter by PR author
16
19
  # if: |
17
- # github.event.pull_request.user.login == 'external-contributor' ||
18
- # github.event.pull_request.user.login == 'new-developer' ||
19
- # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20
+ # github.repository_owner == 'Teneo-Protocol' && (
21
+ # github.event.pull_request.user.login == 'external-contributor' ||
22
+ # github.event.pull_request.user.login == 'new-developer' ||
23
+ # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
24
+ # )
20
25
 
21
26
  runs-on: ubuntu-latest
22
27
  permissions:
@@ -13,10 +13,12 @@ on:
13
13
  jobs:
14
14
  claude:
15
15
  if: |
16
- (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
- (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
- (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
- (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
16
+ github.repository_owner == 'Teneo-Protocol' && (
17
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
19
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
20
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
21
+ )
20
22
  runs-on: ubuntu-latest
21
23
  permissions:
22
24
  contents: read
@@ -1,7 +1,7 @@
1
1
  name: Publish Package
2
2
  on:
3
- push:
4
- branches: [main]
3
+ push:
4
+ branches: [main]
5
5
 
6
6
  permissions:
7
7
  id-token: write # Required for OIDC
@@ -9,6 +9,7 @@ permissions:
9
9
 
10
10
  jobs:
11
11
  publish:
12
+ if: github.repository_owner == 'TeneoProtocolAI'
12
13
  runs-on: ubuntu-latest
13
14
  steps:
14
15
  - uses: actions/checkout@v4
@@ -21,7 +22,10 @@ jobs:
21
22
  with:
22
23
  node-version: '20'
23
24
  registry-url: 'https://registry.npmjs.org'
24
- cache: 'pnpm'
25
+
26
+ # Ensure npm 11.5.1 or later is installed (required for trusted publishing)
27
+ - name: Update npm
28
+ run: npm install -g npm@latest
25
29
 
26
30
  - name: Install dependencies
27
31
  run: pnpm install --frozen-lockfile
@@ -32,7 +36,6 @@ jobs:
32
36
  - name: Test
33
37
  run: pnpm test
34
38
 
39
+ # Trusted publishing automatically adds provenance, no flags needed
35
40
  - name: Publish to npm
36
- run: pnpm publish --access public --no-git-checks
37
- env:
38
- NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
41
+ run: pnpm publish --access public --no-git-checks
@@ -5,7 +5,7 @@ on:
5
5
 
6
6
  jobs:
7
7
  mirror-to-test-repo:
8
- if: github.repository == 'Teneo-Protocol/teneo-sdk'
8
+ if: github.repository_owner == 'Teneo-Protocol'
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
11
  - name: Checkout Source Repo
@@ -0,0 +1,102 @@
1
+ name: Top Issues by Votes
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 */2 * * *" # Run every 2 hours
6
+ workflow_dispatch: # Allow manual triggering
7
+
8
+ permissions:
9
+ issues: write
10
+ contents: read
11
+
12
+ jobs:
13
+ update-top-issues:
14
+ # Only run if the repository is in the Teneo-Protocol organization
15
+ if: github.repository_owner == 'TeneoProtocolAI'
16
+ runs-on: ubuntu-latest
17
+
18
+ steps:
19
+ - name: Update top issues list for teneo-agent-sdk
20
+ env:
21
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
22
+ # Set this to the issue number where you want to track top issues
23
+ # Leave empty to skip updating (will only log)
24
+ ISSUE_NUMBER: "1"
25
+ run: |
26
+ #!/bin/bash
27
+ set -e
28
+
29
+ echo "Fetching all open issues for teneo-agent-sdk..."
30
+
31
+ # Extract owner and repo from GitHub context
32
+ REPO_OWNER="${{ github.repository_owner }}"
33
+ REPO_NAME="${{ github.event.repository.name }}"
34
+
35
+ echo "Repository: $REPO_OWNER/$REPO_NAME"
36
+
37
+ # Fetch all open issues with reaction data
38
+ issues=$(gh api graphql -f query='
39
+ query($owner: String!, $repo: String!) {
40
+ repository(owner: $owner, name: $repo) {
41
+ issues(first: 100, states: OPEN, orderBy: {field: CREATED_AT, direction: DESC}) {
42
+ nodes {
43
+ number
44
+ title
45
+ url
46
+ reactions(content: THUMBS_UP) {
47
+ totalCount
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ' -f owner="$REPO_OWNER" -f repo="$REPO_NAME")
54
+
55
+ # Parse and sort issues by thumbs up count
56
+ sorted_issues=$(echo "$issues" | jq -r --arg ISSUE_NUMBER "$ISSUE_NUMBER" '
57
+ .data.repository.issues.nodes
58
+ | map(select(.number != ($ISSUE_NUMBER | tonumber)))
59
+ | sort_by(-.reactions.totalCount)
60
+ | to_entries
61
+ | map("\(.key + 1). [\(.value.title)](\(.value.url)) - \(.value.reactions.totalCount) 👍")
62
+ | join("\n")
63
+ ')
64
+
65
+ # Create issue body
66
+ current_time=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
67
+
68
+ {
69
+ echo "# 👍 Top Issues by Community Votes"
70
+ echo ""
71
+ echo "This list shows the most requested features and reported bugs for **teneo-agent-sdk**,"
72
+ echo "automatically updated every 6 hours based on 👍 reactions."
73
+ echo ""
74
+ echo "**Last updated:** $current_time"
75
+ echo ""
76
+ echo "## Top Issues"
77
+ echo ""
78
+ if [ -n "$sorted_issues" ]; then
79
+ echo "$sorted_issues"
80
+ else
81
+ echo "No issues found or all issues have 0 votes."
82
+ fi
83
+ echo ""
84
+ echo "---"
85
+ echo "💡 *Vote on issues by adding a 👍 reaction to help prioritize development*"
86
+ echo ""
87
+ echo "🤖 *Automatically updated by [GitHub Actions](.github/workflows/top-issue.yml)*"
88
+ } > /tmp/issue_body.md
89
+
90
+ # Update the tracking issue if ISSUE_NUMBER is set
91
+ if [ -n "$ISSUE_NUMBER" ]; then
92
+ echo "Updating tracking issue #$ISSUE_NUMBER..."
93
+ gh issue edit "$ISSUE_NUMBER" \
94
+ --repo "$REPO_OWNER/$REPO_NAME" \
95
+ --body-file /tmp/issue_body.md
96
+ echo "✅ Successfully updated top issues list!"
97
+ else
98
+ echo "📋 Top issues list (ISSUE_NUMBER not set, skipping update):"
99
+ cat /tmp/issue_body.md
100
+ echo ""
101
+ echo "💡 To enable automatic tracking, create an issue and set ISSUE_NUMBER in the workflow."
102
+ fi
package/CHANGELOG.md ADDED
@@ -0,0 +1,334 @@
1
+ # Changelog
2
+
3
+ All notable changes to the Teneo Protocol SDK will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.2.0]
9
+
10
+ ### Quote-Approve Payment Flow
11
+
12
+ Payments now use a quote-approve model. Instead of attaching payments blindly, the SDK requests a quote from the server first, then confirms with payment.
13
+
14
+ ### ✨ Added
15
+
16
+ - **Quote-Approve Flow**
17
+ - `requestQuote(content, room)` - Request a quote without auto-approval
18
+ - `confirmQuote(taskId, options?)` - Confirm and pay for a quoted task
19
+ - `getPendingQuote(taskId)` - Get a pending quote by task ID
20
+ - New `QuoteResult` type with agent, pricing, and expiration info
21
+
22
+ - **New Message Types**
23
+ - `request_task` - Request a task quote from coordinator
24
+ - `task_quote` - Server response with pricing info
25
+ - `confirm_task` - Confirm and execute with payment
26
+
27
+ - **New Config Options**
28
+ - `autoApproveQuotes` - Auto-confirm quotes (default: `true`)
29
+ - `quoteTimeout` - Timeout for quote responses (default: `30000`ms)
30
+
31
+ - **New Schemas**
32
+ - `PricingInfoSchema` - Agent pricing metadata
33
+ - `RequestTaskMessageSchema`, `TaskQuoteMessageSchema`, `ConfirmTaskMessageSchema`
34
+
35
+ - **Factory Functions & Type Guards**
36
+ - `createRequestTask()`, `createConfirmTask()`
37
+ - `isTaskQuote()` type guard
38
+
39
+ ### 🔄 Changed
40
+
41
+ - `sendMessage()` and `sendDirectCommand()` now use quote-approve flow by default
42
+ - Payments are always enabled - removed `paymentsEnabled` config option
43
+ - Payment client is set up automatically when `privateKey` is provided
44
+ - `withPayments()` builder no longer has `enabled` option
45
+
46
+ ### 🗑️ Removed
47
+
48
+ - `paymentsEnabled` config option (payments always on)
49
+ - Legacy `validatePrice()` method (price check moved to `confirmQuote`)
50
+ - Legacy `attachPayment()` method (handled in `confirmQuote`)
51
+ - `setAgentRegistry()` method (no longer needed)
52
+
53
+ ### 📚 Documentation
54
+
55
+ - Updated Payment Integration section with quote-approve examples
56
+ - Added Manual Quote Flow documentation
57
+ - Updated Environment Variables section
58
+
59
+ ---
60
+
61
+ ## [2.1.0] - 2025-12-08
62
+
63
+ ### ✨ Added
64
+
65
+ #### Automatic X402 Payment Signing
66
+
67
+ - SDK now auto-signs x402 payment headers when confirming tasks
68
+ - Uses PEAQ chain with USDC stablecoin for micropayments
69
+ - No manual payment encoding needed - just call `confirmTask({ taskId })`
70
+
71
+ ### 📦 Dependencies
72
+
73
+ - Added `x402` library for payment signing support
74
+
75
+ ---
76
+
77
+ ## [2.0.0] - 2025-11-05
78
+
79
+ ### 🎉 Major Release: Multi-Room & Agent Customization
80
+
81
+ Version 2.0 introduces comprehensive room management and per-room agent customization capabilities, enabling developers to create context-specific agent experiences.
82
+
83
+ ### ✨ Added
84
+
85
+ #### Phase 1: Room Management System
86
+
87
+ - **Room CRUD Operations**
88
+ - `createRoom(name, description?)` - Create new private rooms with validation
89
+ - `updateRoom(roomId, updates)` - Update room name/description (owner only)
90
+ - `deleteRoom(roomId)` - Delete owned rooms
91
+
92
+ - **Room Query Methods**
93
+ - `getOwnedRooms()` - Get all rooms you created
94
+ - `getSharedRooms()` - Get rooms you were invited to
95
+ - `getAllRooms()` - Get all rooms (owned + shared) convenience method
96
+ - `getRoomById(roomId)` - Get specific room details
97
+ - `getRoomLimit()` - Check your room creation limit
98
+ - `canCreateRoom()` - Check if you can create more rooms
99
+ - `getOwnedRoomCount()` - Count your owned rooms
100
+
101
+ - **Room Management Events**
102
+ - `room:created` - Emitted when room is created
103
+ - `room:updated` - Emitted when room is updated
104
+ - `room:deleted` - Emitted when room is deleted
105
+ - `room:create_error` - Emitted on creation failure
106
+ - `room:update_error` - Emitted on update failure
107
+ - `room:delete_error` - Emitted on deletion failure
108
+
109
+ - **Room Management Manager**
110
+ - New `RoomManagementManager` class for room operations
111
+ - Ownership verification before CRUD operations
112
+ - Cached room state (owned vs shared)
113
+ - Room limit enforcement
114
+ - 6 new message handlers for room operations
115
+
116
+ #### Phase 2: Agent Room Management
117
+
118
+ - **Agent Room Operations**
119
+ - `addAgentToRoom(roomId, agentId)` - Add agent to your room (owner only)
120
+ - `removeAgentFromRoom(roomId, agentId)` - Remove agent from your room
121
+ - `listRoomAgents(roomId, useCache?)` - List agents in room with 5-min cache
122
+ - `listAvailableAgents(roomId, useCache?)` - List agents available to add
123
+
124
+ - **Agent Room Query Methods (Synchronous)**
125
+ - `getRoomAgents(roomId)` - Get cached room agents instantly
126
+ - `getAvailableAgents(roomId)` - Get cached available agents instantly
127
+ - `isAgentInRoom(roomId, agentId)` - Check if agent is in room (cached)
128
+ - `getRoomAgentCount(roomId)` - Get agent count from cache
129
+
130
+ - **Cache Management**
131
+ - `invalidateAgentRoomCache(roomId)` - Manually clear cache for specific room
132
+ - Intelligent 5-minute TTL caching for performance
133
+ - Automatic cache invalidation on agent add/remove
134
+ - Automatic cache invalidation on agent status updates
135
+
136
+ - **Agent Room Events**
137
+ - `agent_room:agent_added` - Emitted when agent added to room
138
+ - `agent_room:agent_removed` - Emitted when agent removed from room
139
+ - `agent_room:agents_listed` - Emitted when room agents listed
140
+ - `agent_room:available_agents_listed` - Emitted when available agents listed
141
+ - `agent_room:status_update` - Real-time agent status updates
142
+ - `agent_room:add_error` - Emitted on agent add failure
143
+ - `agent_room:remove_error` - Emitted on agent remove failure
144
+ - `agent_room:list_error` - Emitted on list failure
145
+ - `agent_room:list_available_error` - Emitted on available list failure
146
+
147
+ - **Agent Room Manager**
148
+ - New `AgentRoomManager` class for agent-room operations
149
+ - Ownership verification before operations
150
+ - Performance-optimized caching with TTL
151
+ - Real-time status update handling
152
+ - 5 new message handlers for agent room operations
153
+
154
+ #### Type System Updates
155
+
156
+ - Updated `RoomInfo` interface with `created_by` field (creator wallet address)
157
+ - Fixed `Capability` schema: `type` → `name`, description now optional
158
+ - Fixed `Command` schema: `command` → `trigger`, added `argument` field, description optional
159
+ - Updated `AuthenticationState` with room categorization:
160
+ - `privateRoomIds` - Array of owned room IDs
161
+ - `sharedRoomIds` - Array of shared room IDs
162
+ - `maxPrivateRooms` - Room creation limit
163
+ - New `AgentRoomInfo` interface for agent-room metadata
164
+ - 26 new message types and schemas for room/agent-room operations
165
+
166
+ ### 📊 Testing
167
+
168
+ - Added 102 new unit tests for Phase 1 and Phase 2
169
+ - Total test count: 671 tests passing (100% pass rate)
170
+ - Comprehensive coverage of room management
171
+ - Comprehensive coverage of agent room management
172
+ - All manager and handler tests passing
173
+
174
+ ### 🔄 Changed
175
+
176
+ - Message handlers now use `BaseMessageHandler` pattern
177
+ - Enhanced event system with 14 new event types
178
+ - WebSocketClient now manages room and agent-room managers
179
+
180
+ ### 🐛 Fixed
181
+
182
+ - Schema field names now match backend source of truth
183
+ - Proper defensive copying for cache immutability
184
+ - Validation for empty room/agent IDs
185
+ - Proper room ownership checks before operations
186
+ - Auth handler now correctly parses `private_rooms` array from cached authentication messages
187
+ - Room management events now properly forward from WebSocket handlers to SDK instance
188
+ - Room persistence: Private rooms now correctly persist after page refresh via proper initialization of RoomManagementManager from auth state
189
+
190
+ ### 📚 Documentation
191
+
192
+ - Comprehensive README updates with v2.0 features
193
+ - New "What's New in v2.0" section
194
+ - Complete Room Management API documentation
195
+ - Complete Agent Room Management API documentation
196
+ - Updated event system documentation with all new events
197
+ - Code examples for all new features
198
+ - Updated test count and status
199
+
200
+ ### 🔐 Security
201
+
202
+ - Ownership verification for all room CRUD operations
203
+ - Ownership verification for agent-room operations
204
+ - Validation of room and agent IDs before operations
205
+ - Room existence checks before operations
206
+
207
+ ### ⚡ Performance
208
+
209
+ - 5-minute cache TTL for agent room queries
210
+ - Automatic cache invalidation on updates
211
+ - Intelligent cache management per room
212
+ - Defensive copying to prevent cache mutation
213
+ - Synchronous query methods for instant cache access
214
+
215
+ ---
216
+
217
+ ## [1.0.2] - 2025-10-XX
218
+
219
+ ### Fixed
220
+
221
+ - Minor bug fixes and improvements
222
+
223
+ ---
224
+
225
+ ## [1.0.0] - 2025-10-XX
226
+
227
+ ### Initial Release
228
+
229
+ - WebSocket connection management
230
+ - Ethereum wallet authentication (challenge-response)
231
+ - Agent discovery and listing
232
+ - Message sending to agents
233
+ - Event-driven architecture
234
+ - Room subscription/unsubscription
235
+ - Webhook integration with circuit breaker
236
+ - Retry strategies (exponential, linear, constant)
237
+ - Message deduplication
238
+ - Signature verification
239
+ - Rate limiting
240
+ - Secure private key management (AES-256-GCM encryption)
241
+ - Comprehensive error handling
242
+ - TypeScript support
243
+ - 488 unit tests
244
+
245
+ ---
246
+
247
+ ## Migration Guide
248
+
249
+ ### Upgrading from v1.x to v2.0
250
+
251
+ Version 2.0 is **backward compatible** with v1.x for basic operations. However, to take advantage of new features:
252
+
253
+ #### 1. Update Package Version
254
+
255
+ ```bash
256
+ pnpm install @teneo-protocol/sdk@2.0.0
257
+ ```
258
+
259
+ #### 2. Room Management (New Features)
260
+
261
+ **Before (v1.x):** Single room subscription
262
+
263
+ ```typescript
264
+ await sdk.subscribeToRoom("room-id");
265
+ ```
266
+
267
+ **After (v2.0):** Create and manage multiple rooms
268
+
269
+ ```typescript
270
+ // Create your own rooms
271
+ const room = await sdk.createRoom("My Room", "Description");
272
+
273
+ // Get all your rooms
274
+ const ownedRooms = sdk.getOwnedRooms();
275
+ const sharedRooms = sdk.getSharedRooms();
276
+
277
+ // Update/delete rooms
278
+ await sdk.updateRoom(room.id, { name: "Updated Name" });
279
+ await sdk.deleteRoom(room.id);
280
+ ```
281
+
282
+ #### 3. Agent Customization (New Features)
283
+
284
+ **New in v2.0:** Customize which agents are in each room
285
+
286
+ ```typescript
287
+ // List available agents for a room
288
+ const available = await sdk.listAvailableAgents(room.id);
289
+
290
+ // Add specific agents
291
+ await sdk.addAgentToRoom(room.id, "agent-id");
292
+
293
+ // List agents in room
294
+ const roomAgents = await sdk.listRoomAgents(room.id);
295
+
296
+ // Remove agents
297
+ await sdk.removeAgentFromRoom(room.id, "agent-id");
298
+ ```
299
+
300
+ #### 4. Type Changes
301
+
302
+ If you're using TypeScript and accessing agent data directly:
303
+
304
+ **Capability field name changed:**
305
+
306
+ ```typescript
307
+ // Before: agent.capabilities[0].type
308
+ // After: agent.capabilities[0].name
309
+ ```
310
+
311
+ **Command field name changed:**
312
+
313
+ ```typescript
314
+ // Before: agent.commands[0].command
315
+ // After: agent.commands[0].trigger
316
+ ```
317
+
318
+ #### 5. No Breaking Changes
319
+
320
+ All v1.x APIs continue to work:
321
+
322
+ - ✅ `connect()`, `disconnect()`
323
+ - ✅ `sendMessage()`
324
+ - ✅ `subscribeToRoom()`, `unsubscribeFromRoom()`
325
+ - ✅ `getAgents()`, `getAgent()`
326
+ - ✅ All existing events
327
+
328
+ ---
329
+
330
+ ## Support
331
+
332
+ - 📖 [Documentation](https://github.com/TeneoProtocolAI/teneo-sdk)
333
+ - 🐛 [Issue Tracker](https://github.com/TeneoProtocolAI/teneo-sdk/issues)
334
+ - 💬 [Discussions](https://github.com/TeneoProtocolAI/teneo-sdk/discussions)