@teneo-protocol/sdk 1.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 (281) hide show
  1. package/.dockerignore +14 -0
  2. package/.env.test.example +14 -0
  3. package/.eslintrc.json +26 -0
  4. package/.github/workflows/claude-code-review.yml +78 -0
  5. package/.github/workflows/claude-reviewer.yml +64 -0
  6. package/.github/workflows/publish-npm.yml +38 -0
  7. package/.github/workflows/push-to-main.yml +23 -0
  8. package/.node-version +1 -0
  9. package/.prettierrc +11 -0
  10. package/Dockerfile +25 -0
  11. package/LICENCE +661 -0
  12. package/README.md +709 -0
  13. package/dist/constants.d.ts +42 -0
  14. package/dist/constants.d.ts.map +1 -0
  15. package/dist/constants.js +45 -0
  16. package/dist/constants.js.map +1 -0
  17. package/dist/core/websocket-client.d.ts +261 -0
  18. package/dist/core/websocket-client.d.ts.map +1 -0
  19. package/dist/core/websocket-client.js +875 -0
  20. package/dist/core/websocket-client.js.map +1 -0
  21. package/dist/formatters/response-formatter.d.ts +354 -0
  22. package/dist/formatters/response-formatter.d.ts.map +1 -0
  23. package/dist/formatters/response-formatter.js +575 -0
  24. package/dist/formatters/response-formatter.js.map +1 -0
  25. package/dist/handlers/message-handler-registry.d.ts +155 -0
  26. package/dist/handlers/message-handler-registry.d.ts.map +1 -0
  27. package/dist/handlers/message-handler-registry.js +216 -0
  28. package/dist/handlers/message-handler-registry.js.map +1 -0
  29. package/dist/handlers/message-handlers/agent-selected-handler.d.ts +112 -0
  30. package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -0
  31. package/dist/handlers/message-handlers/agent-selected-handler.js +40 -0
  32. package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -0
  33. package/dist/handlers/message-handlers/agents-list-handler.d.ts +14 -0
  34. package/dist/handlers/message-handlers/agents-list-handler.d.ts.map +1 -0
  35. package/dist/handlers/message-handlers/agents-list-handler.js +25 -0
  36. package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -0
  37. package/dist/handlers/message-handlers/auth-error-handler.d.ts +71 -0
  38. package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -0
  39. package/dist/handlers/message-handlers/auth-error-handler.js +30 -0
  40. package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -0
  41. package/dist/handlers/message-handlers/auth-message-handler.d.ts +18 -0
  42. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -0
  43. package/dist/handlers/message-handlers/auth-message-handler.js +60 -0
  44. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -0
  45. package/dist/handlers/message-handlers/auth-required-handler.d.ts +76 -0
  46. package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -0
  47. package/dist/handlers/message-handlers/auth-required-handler.js +23 -0
  48. package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -0
  49. package/dist/handlers/message-handlers/auth-success-handler.d.ts +18 -0
  50. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -0
  51. package/dist/handlers/message-handlers/auth-success-handler.js +51 -0
  52. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -0
  53. package/dist/handlers/message-handlers/base-handler.d.ts +55 -0
  54. package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -0
  55. package/dist/handlers/message-handlers/base-handler.js +83 -0
  56. package/dist/handlers/message-handlers/base-handler.js.map +1 -0
  57. package/dist/handlers/message-handlers/challenge-handler.d.ts +73 -0
  58. package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -0
  59. package/dist/handlers/message-handlers/challenge-handler.js +47 -0
  60. package/dist/handlers/message-handlers/challenge-handler.js.map +1 -0
  61. package/dist/handlers/message-handlers/error-message-handler.d.ts +76 -0
  62. package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -0
  63. package/dist/handlers/message-handlers/error-message-handler.js +29 -0
  64. package/dist/handlers/message-handlers/error-message-handler.js.map +1 -0
  65. package/dist/handlers/message-handlers/index.d.ts +28 -0
  66. package/dist/handlers/message-handlers/index.d.ts.map +1 -0
  67. package/dist/handlers/message-handlers/index.js +100 -0
  68. package/dist/handlers/message-handlers/index.js.map +1 -0
  69. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +122 -0
  70. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -0
  71. package/dist/handlers/message-handlers/list-rooms-response-handler.js +30 -0
  72. package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -0
  73. package/dist/handlers/message-handlers/ping-pong-handler.d.ts +104 -0
  74. package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -0
  75. package/dist/handlers/message-handlers/ping-pong-handler.js +36 -0
  76. package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -0
  77. package/dist/handlers/message-handlers/regular-message-handler.d.ts +56 -0
  78. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -0
  79. package/dist/handlers/message-handlers/regular-message-handler.js +59 -0
  80. package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -0
  81. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +81 -0
  82. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -0
  83. package/dist/handlers/message-handlers/subscribe-response-handler.js +48 -0
  84. package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -0
  85. package/dist/handlers/message-handlers/task-response-handler.d.ts +14 -0
  86. package/dist/handlers/message-handlers/task-response-handler.d.ts.map +1 -0
  87. package/dist/handlers/message-handlers/task-response-handler.js +44 -0
  88. package/dist/handlers/message-handlers/task-response-handler.js.map +1 -0
  89. package/dist/handlers/message-handlers/types.d.ts +51 -0
  90. package/dist/handlers/message-handlers/types.d.ts.map +1 -0
  91. package/dist/handlers/message-handlers/types.js +7 -0
  92. package/dist/handlers/message-handlers/types.js.map +1 -0
  93. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +81 -0
  94. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -0
  95. package/dist/handlers/message-handlers/unsubscribe-response-handler.js +48 -0
  96. package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -0
  97. package/dist/handlers/webhook-handler.d.ts +202 -0
  98. package/dist/handlers/webhook-handler.d.ts.map +1 -0
  99. package/dist/handlers/webhook-handler.js +511 -0
  100. package/dist/handlers/webhook-handler.js.map +1 -0
  101. package/dist/index.d.ts +71 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +217 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/managers/agent-registry.d.ts +173 -0
  106. package/dist/managers/agent-registry.d.ts.map +1 -0
  107. package/dist/managers/agent-registry.js +310 -0
  108. package/dist/managers/agent-registry.js.map +1 -0
  109. package/dist/managers/connection-manager.d.ts +134 -0
  110. package/dist/managers/connection-manager.d.ts.map +1 -0
  111. package/dist/managers/connection-manager.js +176 -0
  112. package/dist/managers/connection-manager.js.map +1 -0
  113. package/dist/managers/index.d.ts +9 -0
  114. package/dist/managers/index.d.ts.map +1 -0
  115. package/dist/managers/index.js +16 -0
  116. package/dist/managers/index.js.map +1 -0
  117. package/dist/managers/message-router.d.ts +112 -0
  118. package/dist/managers/message-router.d.ts.map +1 -0
  119. package/dist/managers/message-router.js +260 -0
  120. package/dist/managers/message-router.js.map +1 -0
  121. package/dist/managers/room-manager.d.ts +165 -0
  122. package/dist/managers/room-manager.d.ts.map +1 -0
  123. package/dist/managers/room-manager.js +227 -0
  124. package/dist/managers/room-manager.js.map +1 -0
  125. package/dist/teneo-sdk.d.ts +703 -0
  126. package/dist/teneo-sdk.d.ts.map +1 -0
  127. package/dist/teneo-sdk.js +907 -0
  128. package/dist/teneo-sdk.js.map +1 -0
  129. package/dist/types/config.d.ts +1047 -0
  130. package/dist/types/config.d.ts.map +1 -0
  131. package/dist/types/config.js +720 -0
  132. package/dist/types/config.js.map +1 -0
  133. package/dist/types/error-codes.d.ts +29 -0
  134. package/dist/types/error-codes.d.ts.map +1 -0
  135. package/dist/types/error-codes.js +41 -0
  136. package/dist/types/error-codes.js.map +1 -0
  137. package/dist/types/events.d.ts +616 -0
  138. package/dist/types/events.d.ts.map +1 -0
  139. package/dist/types/events.js +261 -0
  140. package/dist/types/events.js.map +1 -0
  141. package/dist/types/health.d.ts +40 -0
  142. package/dist/types/health.d.ts.map +1 -0
  143. package/dist/types/health.js +6 -0
  144. package/dist/types/health.js.map +1 -0
  145. package/dist/types/index.d.ts +10 -0
  146. package/dist/types/index.d.ts.map +1 -0
  147. package/dist/types/index.js +123 -0
  148. package/dist/types/index.js.map +1 -0
  149. package/dist/types/messages.d.ts +3734 -0
  150. package/dist/types/messages.d.ts.map +1 -0
  151. package/dist/types/messages.js +482 -0
  152. package/dist/types/messages.js.map +1 -0
  153. package/dist/types/validation.d.ts +81 -0
  154. package/dist/types/validation.d.ts.map +1 -0
  155. package/dist/types/validation.js +115 -0
  156. package/dist/types/validation.js.map +1 -0
  157. package/dist/utils/bounded-queue.d.ts +127 -0
  158. package/dist/utils/bounded-queue.d.ts.map +1 -0
  159. package/dist/utils/bounded-queue.js +181 -0
  160. package/dist/utils/bounded-queue.js.map +1 -0
  161. package/dist/utils/circuit-breaker.d.ts +141 -0
  162. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  163. package/dist/utils/circuit-breaker.js +215 -0
  164. package/dist/utils/circuit-breaker.js.map +1 -0
  165. package/dist/utils/deduplication-cache.d.ts +110 -0
  166. package/dist/utils/deduplication-cache.d.ts.map +1 -0
  167. package/dist/utils/deduplication-cache.js +177 -0
  168. package/dist/utils/deduplication-cache.js.map +1 -0
  169. package/dist/utils/event-waiter.d.ts +101 -0
  170. package/dist/utils/event-waiter.d.ts.map +1 -0
  171. package/dist/utils/event-waiter.js +118 -0
  172. package/dist/utils/event-waiter.js.map +1 -0
  173. package/dist/utils/index.d.ts +51 -0
  174. package/dist/utils/index.d.ts.map +1 -0
  175. package/dist/utils/index.js +72 -0
  176. package/dist/utils/index.js.map +1 -0
  177. package/dist/utils/logger.d.ts +22 -0
  178. package/dist/utils/logger.d.ts.map +1 -0
  179. package/dist/utils/logger.js +91 -0
  180. package/dist/utils/logger.js.map +1 -0
  181. package/dist/utils/rate-limiter.d.ts +122 -0
  182. package/dist/utils/rate-limiter.d.ts.map +1 -0
  183. package/dist/utils/rate-limiter.js +190 -0
  184. package/dist/utils/rate-limiter.js.map +1 -0
  185. package/dist/utils/retry-policy.d.ts +191 -0
  186. package/dist/utils/retry-policy.d.ts.map +1 -0
  187. package/dist/utils/retry-policy.js +225 -0
  188. package/dist/utils/retry-policy.js.map +1 -0
  189. package/dist/utils/secure-private-key.d.ts +113 -0
  190. package/dist/utils/secure-private-key.d.ts.map +1 -0
  191. package/dist/utils/secure-private-key.js +188 -0
  192. package/dist/utils/secure-private-key.js.map +1 -0
  193. package/dist/utils/signature-verifier.d.ts +143 -0
  194. package/dist/utils/signature-verifier.d.ts.map +1 -0
  195. package/dist/utils/signature-verifier.js +238 -0
  196. package/dist/utils/signature-verifier.js.map +1 -0
  197. package/dist/utils/ssrf-validator.d.ts +36 -0
  198. package/dist/utils/ssrf-validator.d.ts.map +1 -0
  199. package/dist/utils/ssrf-validator.js +195 -0
  200. package/dist/utils/ssrf-validator.js.map +1 -0
  201. package/examples/.env.example +17 -0
  202. package/examples/basic-usage.ts +211 -0
  203. package/examples/production-dashboard/.env.example +153 -0
  204. package/examples/production-dashboard/package.json +39 -0
  205. package/examples/production-dashboard/public/dashboard.html +642 -0
  206. package/examples/production-dashboard/server.ts +753 -0
  207. package/examples/webhook-integration.ts +239 -0
  208. package/examples/x-influencer-battle-redesign.html +1065 -0
  209. package/examples/x-influencer-battle-server.ts +217 -0
  210. package/examples/x-influencer-battle.html +787 -0
  211. package/package.json +65 -0
  212. package/src/constants.ts +43 -0
  213. package/src/core/websocket-client.test.ts +512 -0
  214. package/src/core/websocket-client.ts +1056 -0
  215. package/src/formatters/response-formatter.test.ts +571 -0
  216. package/src/formatters/response-formatter.ts +677 -0
  217. package/src/handlers/message-handler-registry.ts +239 -0
  218. package/src/handlers/message-handlers/agent-selected-handler.ts +40 -0
  219. package/src/handlers/message-handlers/agents-list-handler.ts +26 -0
  220. package/src/handlers/message-handlers/auth-error-handler.ts +31 -0
  221. package/src/handlers/message-handlers/auth-message-handler.ts +66 -0
  222. package/src/handlers/message-handlers/auth-required-handler.ts +23 -0
  223. package/src/handlers/message-handlers/auth-success-handler.ts +57 -0
  224. package/src/handlers/message-handlers/base-handler.ts +101 -0
  225. package/src/handlers/message-handlers/challenge-handler.ts +57 -0
  226. package/src/handlers/message-handlers/error-message-handler.ts +27 -0
  227. package/src/handlers/message-handlers/index.ts +77 -0
  228. package/src/handlers/message-handlers/list-rooms-response-handler.ts +28 -0
  229. package/src/handlers/message-handlers/ping-pong-handler.ts +30 -0
  230. package/src/handlers/message-handlers/regular-message-handler.ts +65 -0
  231. package/src/handlers/message-handlers/subscribe-response-handler.ts +47 -0
  232. package/src/handlers/message-handlers/task-response-handler.ts +45 -0
  233. package/src/handlers/message-handlers/types.ts +77 -0
  234. package/src/handlers/message-handlers/unsubscribe-response-handler.ts +47 -0
  235. package/src/handlers/webhook-handler.test.ts +789 -0
  236. package/src/handlers/webhook-handler.ts +576 -0
  237. package/src/index.ts +269 -0
  238. package/src/managers/agent-registry.test.ts +466 -0
  239. package/src/managers/agent-registry.ts +347 -0
  240. package/src/managers/connection-manager.ts +195 -0
  241. package/src/managers/index.ts +9 -0
  242. package/src/managers/message-router.ts +349 -0
  243. package/src/managers/room-manager.ts +248 -0
  244. package/src/teneo-sdk.ts +1022 -0
  245. package/src/types/config.test.ts +325 -0
  246. package/src/types/config.ts +799 -0
  247. package/src/types/error-codes.ts +44 -0
  248. package/src/types/events.test.ts +302 -0
  249. package/src/types/events.ts +382 -0
  250. package/src/types/health.ts +46 -0
  251. package/src/types/index.ts +199 -0
  252. package/src/types/messages.test.ts +660 -0
  253. package/src/types/messages.ts +570 -0
  254. package/src/types/validation.ts +123 -0
  255. package/src/utils/bounded-queue.test.ts +356 -0
  256. package/src/utils/bounded-queue.ts +205 -0
  257. package/src/utils/circuit-breaker.test.ts +394 -0
  258. package/src/utils/circuit-breaker.ts +262 -0
  259. package/src/utils/deduplication-cache.test.ts +380 -0
  260. package/src/utils/deduplication-cache.ts +198 -0
  261. package/src/utils/event-waiter.test.ts +381 -0
  262. package/src/utils/event-waiter.ts +172 -0
  263. package/src/utils/index.ts +74 -0
  264. package/src/utils/logger.ts +87 -0
  265. package/src/utils/rate-limiter.test.ts +341 -0
  266. package/src/utils/rate-limiter.ts +211 -0
  267. package/src/utils/retry-policy.test.ts +558 -0
  268. package/src/utils/retry-policy.ts +272 -0
  269. package/src/utils/secure-private-key.test.ts +356 -0
  270. package/src/utils/secure-private-key.ts +205 -0
  271. package/src/utils/signature-verifier.test.ts +464 -0
  272. package/src/utils/signature-verifier.ts +298 -0
  273. package/src/utils/ssrf-validator.test.ts +372 -0
  274. package/src/utils/ssrf-validator.ts +224 -0
  275. package/tests/integration/real-server.test.ts +740 -0
  276. package/tests/integration/websocket.test.ts +381 -0
  277. package/tests/integration-setup.ts +16 -0
  278. package/tests/setup.ts +34 -0
  279. package/tsconfig.json +32 -0
  280. package/vitest.config.ts +42 -0
  281. package/vitest.integration.config.ts +23 -0
@@ -0,0 +1,575 @@
1
+ "use strict";
2
+ /**
3
+ * Response formatter for Teneo Protocol SDK using Zod schemas
4
+ * Provides humanized and raw formatting for agent responses with validation
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ResponseFormatter = exports.FormattedResponseSchema = exports.ResponseMetadataSchema = exports.ResponseFormatOptionsSchema = exports.FormatOptionSchema = void 0;
8
+ const zod_1 = require("zod");
9
+ const types_1 = require("../types");
10
+ // Format option schema
11
+ exports.FormatOptionSchema = zod_1.z.enum(["raw", "humanized", "both"]);
12
+ // Response format options schema
13
+ exports.ResponseFormatOptionsSchema = zod_1.z.object({
14
+ format: exports.FormatOptionSchema.optional(),
15
+ includeMetadata: zod_1.z.boolean().optional(),
16
+ includeTimestamps: zod_1.z.boolean().optional(),
17
+ prettyPrint: zod_1.z.boolean().optional()
18
+ });
19
+ // Response metadata schema
20
+ exports.ResponseMetadataSchema = zod_1.z.object({
21
+ timestamp: zod_1.z.date(),
22
+ messageType: zod_1.z.string(),
23
+ agentId: zod_1.z.string().optional(),
24
+ agentName: zod_1.z.string().optional(),
25
+ taskId: zod_1.z.string().optional(),
26
+ success: zod_1.z.boolean().optional(),
27
+ contentType: types_1.ContentTypeSchema.optional(),
28
+ reasoning: zod_1.z.string().optional()
29
+ });
30
+ // Formatted response schema
31
+ exports.FormattedResponseSchema = zod_1.z.object({
32
+ raw: zod_1.z.any().optional(),
33
+ humanized: zod_1.z.string().optional(),
34
+ metadata: exports.ResponseMetadataSchema.optional()
35
+ });
36
+ class ResponseFormatter {
37
+ constructor(options = {}) {
38
+ const validatedOptions = exports.ResponseFormatOptionsSchema.parse(options);
39
+ this.formatOption = validatedOptions.format ?? "humanized";
40
+ this.includeMetadata = validatedOptions.includeMetadata ?? false;
41
+ this.includeTimestamps = validatedOptions.includeTimestamps ?? true;
42
+ this.prettyPrint = validatedOptions.prettyPrint ?? true;
43
+ }
44
+ /**
45
+ * Formats a message based on current configuration settings.
46
+ * Automatically determines the message type and applies appropriate formatting.
47
+ * Supports raw JSON, humanized text, or both formats simultaneously.
48
+ *
49
+ * @param message - The message to format
50
+ * @returns Formatted response with raw/humanized content and optional metadata
51
+ * @throws {ZodError} If message validation fails
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const formatter = new ResponseFormatter({ format: 'both', includeMetadata: true });
56
+ * const formatted = formatter.format(message);
57
+ * console.log(formatted.humanized); // Human-readable text
58
+ * console.log(formatted.raw); // Original JSON
59
+ * console.log(formatted.metadata); // Timestamp, agent info, etc.
60
+ * ```
61
+ */
62
+ format(message) {
63
+ const response = {};
64
+ // Add metadata if requested
65
+ if (this.includeMetadata) {
66
+ response.metadata = this.extractMetadata(message);
67
+ }
68
+ // Format based on option
69
+ if (this.formatOption === "raw" || this.formatOption === "both") {
70
+ response.raw = this.formatRaw(message);
71
+ }
72
+ if (this.formatOption === "humanized" || this.formatOption === "both") {
73
+ response.humanized = this.formatHumanized(message);
74
+ }
75
+ // Validate the response
76
+ return exports.FormattedResponseSchema.parse(response);
77
+ }
78
+ /**
79
+ * Formats a task response message from an agent.
80
+ * Handles different content types (JSON, Markdown, plain text, arrays)
81
+ * and formats them appropriately for human consumption.
82
+ * Includes agent name, success status, reasoning, and formatted content.
83
+ *
84
+ * @param message - The task response message to format
85
+ * @returns Formatted response with task-specific formatting
86
+ * @throws {ZodError} If message validation fails
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * const formatted = formatter.formatTaskResponse(taskMessage);
91
+ * // Example output:
92
+ * // [RESPONSE] From Weather Agent:
93
+ * // Temperature: 72°F
94
+ * // Conditions: Sunny
95
+ * // [REASONING] Used latest weather API data
96
+ * ```
97
+ */
98
+ formatTaskResponse(message) {
99
+ // Validate input
100
+ const validatedMessage = types_1.TaskResponseMessageSchema.parse(message);
101
+ const response = {};
102
+ if (this.includeMetadata) {
103
+ response.metadata = exports.ResponseMetadataSchema.parse({
104
+ timestamp: new Date(validatedMessage.timestamp ?? Date.now()),
105
+ messageType: "task_response",
106
+ agentId: validatedMessage.from,
107
+ agentName: validatedMessage.data?.agent_name,
108
+ taskId: validatedMessage.data?.task_id,
109
+ success: validatedMessage.data?.success !== false,
110
+ contentType: validatedMessage.content_type,
111
+ reasoning: validatedMessage.reasoning
112
+ });
113
+ }
114
+ if (this.formatOption === "raw" || this.formatOption === "both") {
115
+ response.raw = validatedMessage;
116
+ }
117
+ if (this.formatOption === "humanized" || this.formatOption === "both") {
118
+ response.humanized = this.formatTaskResponseHumanized(validatedMessage);
119
+ }
120
+ return exports.FormattedResponseSchema.parse(response);
121
+ }
122
+ /**
123
+ * Formats an agent selection message from the coordinator.
124
+ * Shows which agent was selected, the command being executed,
125
+ * the reasoning behind the selection, and agent capabilities.
126
+ *
127
+ * @param message - The agent selection message to format
128
+ * @returns Formatted response with agent selection details
129
+ * @throws {ZodError} If message validation fails
130
+ *
131
+ * @example
132
+ * ```typescript
133
+ * const formatted = formatter.formatAgentSelected(selectionMessage);
134
+ * // Example output:
135
+ * // [AGENT] Coordinator selected Weather Agent
136
+ * // [COMMAND] Get forecast for New York
137
+ * // [REASONING] Agent has weather-forecast capability
138
+ * // [CAPABILITIES]
139
+ * // - weather-forecast: Provides weather forecasts
140
+ * ```
141
+ */
142
+ formatAgentSelected(message) {
143
+ // Validate input
144
+ const validatedMessage = types_1.AgentSelectedMessageSchema.parse(message);
145
+ const response = {};
146
+ if (this.includeMetadata) {
147
+ response.metadata = exports.ResponseMetadataSchema.parse({
148
+ timestamp: new Date(validatedMessage.timestamp ?? Date.now()),
149
+ messageType: "agent_selected",
150
+ agentId: validatedMessage.data?.agent_id,
151
+ agentName: validatedMessage.data?.agent_name,
152
+ reasoning: validatedMessage.reasoning
153
+ });
154
+ }
155
+ if (this.formatOption === "raw" || this.formatOption === "both") {
156
+ response.raw = validatedMessage;
157
+ }
158
+ if (this.formatOption === "humanized" || this.formatOption === "both") {
159
+ response.humanized = this.formatAgentSelectedHumanized(validatedMessage);
160
+ }
161
+ return exports.FormattedResponseSchema.parse(response);
162
+ }
163
+ /**
164
+ * Formats an error message with error code and details.
165
+ * Displays error message, optional error code, and detailed information
166
+ * in a human-readable format.
167
+ *
168
+ * @param message - The error message to format
169
+ * @returns Formatted response with error information
170
+ * @throws {ZodError} If message validation fails
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * const formatted = formatter.formatError(errorMessage);
175
+ * // Example output:
176
+ * // [ERROR] Agent not found (Code: AGENT_NOT_FOUND)
177
+ * // Details: {
178
+ * // "requestedAgent": "unknown-agent",
179
+ * // "availableAgents": 5
180
+ * // }
181
+ * ```
182
+ */
183
+ formatError(message) {
184
+ // Validate input
185
+ const validatedMessage = types_1.ErrorMessageSchema.parse(message);
186
+ const response = {};
187
+ if (this.includeMetadata) {
188
+ response.metadata = exports.ResponseMetadataSchema.parse({
189
+ timestamp: new Date(validatedMessage.timestamp ?? Date.now()),
190
+ messageType: "error",
191
+ success: false
192
+ });
193
+ }
194
+ if (this.formatOption === "raw" || this.formatOption === "both") {
195
+ response.raw = validatedMessage;
196
+ }
197
+ if (this.formatOption === "humanized" || this.formatOption === "both") {
198
+ response.humanized = this.formatErrorHumanized(validatedMessage);
199
+ }
200
+ return exports.FormattedResponseSchema.parse(response);
201
+ }
202
+ /**
203
+ * Formats a list of agents with their details, capabilities, and commands.
204
+ * Displays each agent's name, status, description, room, capabilities, and available commands.
205
+ *
206
+ * @param agents - Array of agents to format
207
+ * @returns Formatted response with agent list
208
+ * @throws {ZodError} If agent validation fails
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * const formatted = formatter.formatAgentList(agents);
213
+ * // Example output:
214
+ * // [AGENTS] Available Agents (3):
215
+ * //
216
+ * // [AGENT] Weather Agent [ONLINE]
217
+ * // Provides weather forecasts and conditions
218
+ * // Room: general
219
+ * // Capabilities:
220
+ * // - weather-forecast
221
+ * // Commands:
222
+ * // - /weather <location>
223
+ * ```
224
+ */
225
+ formatAgentList(agents) {
226
+ // Validate input
227
+ const validatedAgents = zod_1.z.array(types_1.AgentSchema).parse(agents);
228
+ const response = {};
229
+ if (this.includeMetadata) {
230
+ response.metadata = exports.ResponseMetadataSchema.parse({
231
+ timestamp: new Date(),
232
+ messageType: "agents_list"
233
+ });
234
+ }
235
+ if (this.formatOption === "raw" || this.formatOption === "both") {
236
+ response.raw = validatedAgents;
237
+ }
238
+ if (this.formatOption === "humanized" || this.formatOption === "both") {
239
+ response.humanized = this.formatAgentListHumanized(validatedAgents);
240
+ }
241
+ return exports.FormattedResponseSchema.parse(response);
242
+ }
243
+ /**
244
+ * Format raw message (no transformation)
245
+ */
246
+ formatRaw(message) {
247
+ return message;
248
+ }
249
+ /**
250
+ * Format message as humanized text
251
+ */
252
+ formatHumanized(message) {
253
+ switch (message.type) {
254
+ case "task_response":
255
+ return this.formatTaskResponseHumanized(message);
256
+ case "agent_selected":
257
+ return this.formatAgentSelectedHumanized(message);
258
+ case "error":
259
+ return this.formatErrorHumanized(message);
260
+ case "message":
261
+ return this.formatMessageHumanized(message);
262
+ default:
263
+ return message.content || JSON.stringify(message.data || {});
264
+ }
265
+ }
266
+ /**
267
+ * Format task response as humanized text
268
+ */
269
+ formatTaskResponseHumanized(message) {
270
+ const agentName = message.data?.agent_name || message.from || "Agent";
271
+ const success = message.data?.success !== false;
272
+ let result = `[RESPONSE] From ${agentName}:\n`;
273
+ if (!success && message.data?.error) {
274
+ result += `[ERROR] ${message.data.error}\n`;
275
+ }
276
+ // Format content based on content type
277
+ if (message.content_type === "application/json" || message.content_type === "JSON") {
278
+ try {
279
+ const json = typeof message.content === "string" ? JSON.parse(message.content) : message.content;
280
+ result += this.formatJSON(json);
281
+ }
282
+ catch {
283
+ result += message.content;
284
+ }
285
+ }
286
+ else if (message.content_type === "text/markdown" || message.content_type === "MD") {
287
+ result += message.content;
288
+ }
289
+ else if (message.content_type === "ARRAY") {
290
+ try {
291
+ const array = typeof message.content === "string" ? JSON.parse(message.content) : message.content;
292
+ result += this.formatArray(array);
293
+ }
294
+ catch {
295
+ result += message.content;
296
+ }
297
+ }
298
+ else {
299
+ result += message.content;
300
+ }
301
+ if (message.reasoning) {
302
+ result += `\n[REASONING] ${message.reasoning}`;
303
+ }
304
+ return result;
305
+ }
306
+ /**
307
+ * Format agent selection as humanized text
308
+ */
309
+ formatAgentSelectedHumanized(message) {
310
+ let result = `[AGENT] Coordinator selected ${message.data?.agent_name}`;
311
+ if (message.data?.command) {
312
+ result += `\n[COMMAND] ${message.data.command}`;
313
+ }
314
+ if (message.reasoning) {
315
+ result += `\n[REASONING] ${message.reasoning}`;
316
+ }
317
+ if (message.data?.capabilities && message.data.capabilities.length > 0) {
318
+ result += "\n[CAPABILITIES]";
319
+ for (const cap of message.data.capabilities) {
320
+ result += `\n - ${cap.name}: ${cap.description}`;
321
+ }
322
+ }
323
+ return result;
324
+ }
325
+ /**
326
+ * Format error as humanized text
327
+ */
328
+ formatErrorHumanized(message) {
329
+ let result = `[ERROR] ${message.content || message.data?.message || "Unknown error"}`;
330
+ if (message.data?.code) {
331
+ result += ` (Code: ${message.data.code})`;
332
+ }
333
+ if (message.data?.details) {
334
+ result += `\nDetails: ${JSON.stringify(message.data.details, null, 2)}`;
335
+ }
336
+ return result;
337
+ }
338
+ /**
339
+ * Format regular message as humanized text
340
+ */
341
+ formatMessageHumanized(message) {
342
+ const from = message.from || "Unknown";
343
+ let result = `[MESSAGE] ${from}: ${message.content}`;
344
+ if (message.room) {
345
+ result = `[${message.room}] ${result}`;
346
+ }
347
+ return result;
348
+ }
349
+ /**
350
+ * Format agent list as humanized text
351
+ */
352
+ formatAgentListHumanized(agents) {
353
+ if (agents.length === 0) {
354
+ return "[AGENTS] No agents available";
355
+ }
356
+ let result = `[AGENTS] Available Agents (${agents.length}):\n`;
357
+ for (const agent of agents) {
358
+ result += `\n[AGENT] ${agent.name}`;
359
+ if (agent.status) {
360
+ const statusText = agent.status === "online" ? "ONLINE" : "OFFLINE";
361
+ result += ` [${statusText}]`;
362
+ }
363
+ if (agent.description) {
364
+ result += `\n ${agent.description}`;
365
+ }
366
+ if (agent.room) {
367
+ result += `\n Room: ${agent.room}`;
368
+ }
369
+ if (agent.capabilities && agent.capabilities.length > 0) {
370
+ result += "\n Capabilities:";
371
+ for (const cap of agent.capabilities) {
372
+ result += `\n - ${cap.name}`;
373
+ }
374
+ }
375
+ if (agent.commands && agent.commands.length > 0) {
376
+ result += "\n Commands:";
377
+ for (const cmd of agent.commands) {
378
+ result += `\n - ${cmd.trigger}${cmd.argument ? ` ${cmd.argument}` : ""}`;
379
+ }
380
+ }
381
+ }
382
+ return result;
383
+ }
384
+ /**
385
+ * Format JSON object for display
386
+ */
387
+ formatJSON(obj, indent = 0) {
388
+ if (obj === null || obj === undefined) {
389
+ return "null";
390
+ }
391
+ if (typeof obj !== "object") {
392
+ return String(obj);
393
+ }
394
+ if (Array.isArray(obj)) {
395
+ return this.formatArray(obj, indent);
396
+ }
397
+ const spaces = " ".repeat(indent);
398
+ let result = "";
399
+ for (const [key, value] of Object.entries(obj)) {
400
+ if (typeof value === "object" && value !== null) {
401
+ result += `${spaces}${key}:\n${this.formatJSON(value, indent + 1)}`;
402
+ }
403
+ else {
404
+ result += `${spaces}${key}: ${value}\n`;
405
+ }
406
+ }
407
+ return result;
408
+ }
409
+ /**
410
+ * Format array for display
411
+ */
412
+ formatArray(arr, indent = 0) {
413
+ if (arr.length === 0) {
414
+ return "[]";
415
+ }
416
+ const spaces = " ".repeat(indent);
417
+ let result = "";
418
+ for (let i = 0; i < arr.length; i++) {
419
+ const item = arr[i];
420
+ if (typeof item === "object" && item !== null) {
421
+ result += `${spaces}[${i}]:\n${this.formatJSON(item, indent + 1)}`;
422
+ }
423
+ else {
424
+ result += `${spaces}[${i}]: ${item}\n`;
425
+ }
426
+ }
427
+ return result;
428
+ }
429
+ /**
430
+ * Extract metadata from message with validation
431
+ */
432
+ extractMetadata(message) {
433
+ return exports.ResponseMetadataSchema.parse({
434
+ timestamp: new Date(message.timestamp ?? Date.now()),
435
+ messageType: message.type,
436
+ agentId: message.from,
437
+ agentName: message.data?.agent_name,
438
+ taskId: message.task_id ?? message.data?.task_id,
439
+ success: message.data?.success !== false,
440
+ contentType: message.content_type,
441
+ reasoning: message.reasoning
442
+ });
443
+ }
444
+ /**
445
+ * Updates the format option for future formatting operations.
446
+ * Validates the option with Zod schema before applying.
447
+ *
448
+ * @param option - Format option: 'raw', 'humanized', or 'both'
449
+ * @throws {ZodError} If option is invalid
450
+ *
451
+ * @example
452
+ * ```typescript
453
+ * formatter.setFormatOption('both');
454
+ * // Now all formatted responses include both raw and humanized formats
455
+ * ```
456
+ */
457
+ setFormatOption(option) {
458
+ this.formatOption = exports.FormatOptionSchema.parse(option);
459
+ }
460
+ /**
461
+ * Updates whether metadata should be included in formatted responses.
462
+ * Metadata includes timestamp, message type, agent info, task ID, success status, etc.
463
+ *
464
+ * @param include - Whether to include metadata in responses
465
+ * @throws {ZodError} If value is not a boolean
466
+ *
467
+ * @example
468
+ * ```typescript
469
+ * formatter.setIncludeMetadata(true);
470
+ * const formatted = formatter.format(message);
471
+ * console.log(formatted.metadata); // { timestamp, messageType, agentId, ... }
472
+ * ```
473
+ */
474
+ setIncludeMetadata(include) {
475
+ this.includeMetadata = zod_1.z.boolean().parse(include);
476
+ }
477
+ /**
478
+ * Updates multiple format options at once with validation.
479
+ * Allows configuring format type, metadata inclusion, timestamps, and pretty-printing.
480
+ *
481
+ * @param options - Response format configuration options
482
+ * @param options.format - Format type: 'raw', 'humanized', or 'both'
483
+ * @param options.includeMetadata - Whether to include metadata
484
+ * @param options.includeTimestamps - Whether to include timestamps
485
+ * @param options.prettyPrint - Whether to pretty-print JSON
486
+ * @throws {ZodError} If options fail validation
487
+ *
488
+ * @example
489
+ * ```typescript
490
+ * formatter.setFormatOptions({
491
+ * format: 'both',
492
+ * includeMetadata: true,
493
+ * prettyPrint: true
494
+ * });
495
+ * ```
496
+ */
497
+ setFormatOptions(options) {
498
+ const validatedOptions = exports.ResponseFormatOptionsSchema.parse(options);
499
+ if (validatedOptions.format !== undefined) {
500
+ this.formatOption = validatedOptions.format;
501
+ }
502
+ if (validatedOptions.includeMetadata !== undefined) {
503
+ this.includeMetadata = validatedOptions.includeMetadata;
504
+ }
505
+ if (validatedOptions.includeTimestamps !== undefined) {
506
+ this.includeTimestamps = validatedOptions.includeTimestamps;
507
+ }
508
+ if (validatedOptions.prettyPrint !== undefined) {
509
+ this.prettyPrint = validatedOptions.prettyPrint;
510
+ }
511
+ }
512
+ /**
513
+ * Gets the current format configuration settings.
514
+ * Returns all current options including format type, metadata, timestamps, and pretty-print.
515
+ *
516
+ * @returns Current format options
517
+ *
518
+ * @example
519
+ * ```typescript
520
+ * const options = formatter.getFormatOptions();
521
+ * console.log(options.format); // 'both'
522
+ * console.log(options.includeMetadata); // true
523
+ * ```
524
+ */
525
+ getFormatOptions() {
526
+ return {
527
+ format: this.formatOption,
528
+ includeMetadata: this.includeMetadata,
529
+ includeTimestamps: this.includeTimestamps,
530
+ prettyPrint: this.prettyPrint
531
+ };
532
+ }
533
+ /**
534
+ * Static utility method that validates and formats any message in one step.
535
+ * Automatically detects message type and applies appropriate formatting.
536
+ * Useful for formatting messages without creating a formatter instance.
537
+ *
538
+ * @param message - Unknown message object to validate and format
539
+ * @param options - Optional format configuration
540
+ * @returns Formatted response with validated and formatted content
541
+ *
542
+ * @example
543
+ * ```typescript
544
+ * // Format unknown message from API
545
+ * const formatted = ResponseFormatter.validateAndFormat(unknownMessage, {
546
+ * format: 'humanized',
547
+ * includeMetadata: true
548
+ * });
549
+ *
550
+ * if (formatted.humanized) {
551
+ * console.log(formatted.humanized);
552
+ * }
553
+ * ```
554
+ */
555
+ static validateAndFormat(message, options = {}) {
556
+ const formatter = new ResponseFormatter(options);
557
+ // Try to parse as different message types
558
+ const taskResponseResult = types_1.TaskResponseMessageSchema.safeParse(message);
559
+ if (taskResponseResult.success) {
560
+ return formatter.formatTaskResponse(taskResponseResult.data);
561
+ }
562
+ const agentSelectedResult = types_1.AgentSelectedMessageSchema.safeParse(message);
563
+ if (agentSelectedResult.success) {
564
+ return formatter.formatAgentSelected(agentSelectedResult.data);
565
+ }
566
+ const errorResult = types_1.ErrorMessageSchema.safeParse(message);
567
+ if (errorResult.success) {
568
+ return formatter.formatError(errorResult.data);
569
+ }
570
+ // Default to base message format
571
+ return formatter.format(message);
572
+ }
573
+ }
574
+ exports.ResponseFormatter = ResponseFormatter;
575
+ //# sourceMappingURL=response-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-formatter.js","sourceRoot":"","sources":["../../src/formatters/response-formatter.ts"],"names":[],"mappings":"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"}