@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.
- package/.dockerignore +14 -0
- package/.env.test.example +14 -0
- package/.eslintrc.json +26 -0
- package/.github/workflows/claude-code-review.yml +78 -0
- package/.github/workflows/claude-reviewer.yml +64 -0
- package/.github/workflows/publish-npm.yml +38 -0
- package/.github/workflows/push-to-main.yml +23 -0
- package/.node-version +1 -0
- package/.prettierrc +11 -0
- package/Dockerfile +25 -0
- package/LICENCE +661 -0
- package/README.md +709 -0
- package/dist/constants.d.ts +42 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +45 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/websocket-client.d.ts +261 -0
- package/dist/core/websocket-client.d.ts.map +1 -0
- package/dist/core/websocket-client.js +875 -0
- package/dist/core/websocket-client.js.map +1 -0
- package/dist/formatters/response-formatter.d.ts +354 -0
- package/dist/formatters/response-formatter.d.ts.map +1 -0
- package/dist/formatters/response-formatter.js +575 -0
- package/dist/formatters/response-formatter.js.map +1 -0
- package/dist/handlers/message-handler-registry.d.ts +155 -0
- package/dist/handlers/message-handler-registry.d.ts.map +1 -0
- package/dist/handlers/message-handler-registry.js +216 -0
- package/dist/handlers/message-handler-registry.js.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts +112 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.js +40 -0
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agents-list-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/agents-list-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agents-list-handler.js +25 -0
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts +71 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.js +30 -0
- package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts +18 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-message-handler.js +60 -0
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts +76 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-required-handler.js +23 -0
- package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts +18 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-success-handler.js +51 -0
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -0
- package/dist/handlers/message-handlers/base-handler.d.ts +55 -0
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/base-handler.js +83 -0
- package/dist/handlers/message-handlers/base-handler.js.map +1 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts +73 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/challenge-handler.js +47 -0
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts +76 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/error-message-handler.js +29 -0
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/index.d.ts +28 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -0
- package/dist/handlers/message-handlers/index.js +100 -0
- package/dist/handlers/message-handlers/index.js.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +122 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +30 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts +104 -0
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/ping-pong-handler.js +36 -0
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts +56 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.js +59 -0
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +81 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.js +48 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +44 -0
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/types.d.ts +51 -0
- package/dist/handlers/message-handlers/types.d.ts.map +1 -0
- package/dist/handlers/message-handlers/types.js +7 -0
- package/dist/handlers/message-handlers/types.js.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +81 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +48 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +202 -0
- package/dist/handlers/webhook-handler.d.ts.map +1 -0
- package/dist/handlers/webhook-handler.js +511 -0
- package/dist/handlers/webhook-handler.js.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +217 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/agent-registry.d.ts +173 -0
- package/dist/managers/agent-registry.d.ts.map +1 -0
- package/dist/managers/agent-registry.js +310 -0
- package/dist/managers/agent-registry.js.map +1 -0
- package/dist/managers/connection-manager.d.ts +134 -0
- package/dist/managers/connection-manager.d.ts.map +1 -0
- package/dist/managers/connection-manager.js +176 -0
- package/dist/managers/connection-manager.js.map +1 -0
- package/dist/managers/index.d.ts +9 -0
- package/dist/managers/index.d.ts.map +1 -0
- package/dist/managers/index.js +16 -0
- package/dist/managers/index.js.map +1 -0
- package/dist/managers/message-router.d.ts +112 -0
- package/dist/managers/message-router.d.ts.map +1 -0
- package/dist/managers/message-router.js +260 -0
- package/dist/managers/message-router.js.map +1 -0
- package/dist/managers/room-manager.d.ts +165 -0
- package/dist/managers/room-manager.d.ts.map +1 -0
- package/dist/managers/room-manager.js +227 -0
- package/dist/managers/room-manager.js.map +1 -0
- package/dist/teneo-sdk.d.ts +703 -0
- package/dist/teneo-sdk.d.ts.map +1 -0
- package/dist/teneo-sdk.js +907 -0
- package/dist/teneo-sdk.js.map +1 -0
- package/dist/types/config.d.ts +1047 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +720 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/error-codes.d.ts +29 -0
- package/dist/types/error-codes.d.ts.map +1 -0
- package/dist/types/error-codes.js +41 -0
- package/dist/types/error-codes.js.map +1 -0
- package/dist/types/events.d.ts +616 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +261 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/health.d.ts +40 -0
- package/dist/types/health.d.ts.map +1 -0
- package/dist/types/health.js +6 -0
- package/dist/types/health.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +123 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messages.d.ts +3734 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +482 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/validation.d.ts +81 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +115 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/utils/bounded-queue.d.ts +127 -0
- package/dist/utils/bounded-queue.d.ts.map +1 -0
- package/dist/utils/bounded-queue.js +181 -0
- package/dist/utils/bounded-queue.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +141 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +215 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/deduplication-cache.d.ts +110 -0
- package/dist/utils/deduplication-cache.d.ts.map +1 -0
- package/dist/utils/deduplication-cache.js +177 -0
- package/dist/utils/deduplication-cache.js.map +1 -0
- package/dist/utils/event-waiter.d.ts +101 -0
- package/dist/utils/event-waiter.d.ts.map +1 -0
- package/dist/utils/event-waiter.js +118 -0
- package/dist/utils/event-waiter.js.map +1 -0
- package/dist/utils/index.d.ts +51 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +72 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +122 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +190 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/retry-policy.d.ts +191 -0
- package/dist/utils/retry-policy.d.ts.map +1 -0
- package/dist/utils/retry-policy.js +225 -0
- package/dist/utils/retry-policy.js.map +1 -0
- package/dist/utils/secure-private-key.d.ts +113 -0
- package/dist/utils/secure-private-key.d.ts.map +1 -0
- package/dist/utils/secure-private-key.js +188 -0
- package/dist/utils/secure-private-key.js.map +1 -0
- package/dist/utils/signature-verifier.d.ts +143 -0
- package/dist/utils/signature-verifier.d.ts.map +1 -0
- package/dist/utils/signature-verifier.js +238 -0
- package/dist/utils/signature-verifier.js.map +1 -0
- package/dist/utils/ssrf-validator.d.ts +36 -0
- package/dist/utils/ssrf-validator.d.ts.map +1 -0
- package/dist/utils/ssrf-validator.js +195 -0
- package/dist/utils/ssrf-validator.js.map +1 -0
- package/examples/.env.example +17 -0
- package/examples/basic-usage.ts +211 -0
- package/examples/production-dashboard/.env.example +153 -0
- package/examples/production-dashboard/package.json +39 -0
- package/examples/production-dashboard/public/dashboard.html +642 -0
- package/examples/production-dashboard/server.ts +753 -0
- package/examples/webhook-integration.ts +239 -0
- package/examples/x-influencer-battle-redesign.html +1065 -0
- package/examples/x-influencer-battle-server.ts +217 -0
- package/examples/x-influencer-battle.html +787 -0
- package/package.json +65 -0
- package/src/constants.ts +43 -0
- package/src/core/websocket-client.test.ts +512 -0
- package/src/core/websocket-client.ts +1056 -0
- package/src/formatters/response-formatter.test.ts +571 -0
- package/src/formatters/response-formatter.ts +677 -0
- package/src/handlers/message-handler-registry.ts +239 -0
- package/src/handlers/message-handlers/agent-selected-handler.ts +40 -0
- package/src/handlers/message-handlers/agents-list-handler.ts +26 -0
- package/src/handlers/message-handlers/auth-error-handler.ts +31 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +66 -0
- package/src/handlers/message-handlers/auth-required-handler.ts +23 -0
- package/src/handlers/message-handlers/auth-success-handler.ts +57 -0
- package/src/handlers/message-handlers/base-handler.ts +101 -0
- package/src/handlers/message-handlers/challenge-handler.ts +57 -0
- package/src/handlers/message-handlers/error-message-handler.ts +27 -0
- package/src/handlers/message-handlers/index.ts +77 -0
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +28 -0
- package/src/handlers/message-handlers/ping-pong-handler.ts +30 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +65 -0
- package/src/handlers/message-handlers/subscribe-response-handler.ts +47 -0
- package/src/handlers/message-handlers/task-response-handler.ts +45 -0
- package/src/handlers/message-handlers/types.ts +77 -0
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +47 -0
- package/src/handlers/webhook-handler.test.ts +789 -0
- package/src/handlers/webhook-handler.ts +576 -0
- package/src/index.ts +269 -0
- package/src/managers/agent-registry.test.ts +466 -0
- package/src/managers/agent-registry.ts +347 -0
- package/src/managers/connection-manager.ts +195 -0
- package/src/managers/index.ts +9 -0
- package/src/managers/message-router.ts +349 -0
- package/src/managers/room-manager.ts +248 -0
- package/src/teneo-sdk.ts +1022 -0
- package/src/types/config.test.ts +325 -0
- package/src/types/config.ts +799 -0
- package/src/types/error-codes.ts +44 -0
- package/src/types/events.test.ts +302 -0
- package/src/types/events.ts +382 -0
- package/src/types/health.ts +46 -0
- package/src/types/index.ts +199 -0
- package/src/types/messages.test.ts +660 -0
- package/src/types/messages.ts +570 -0
- package/src/types/validation.ts +123 -0
- package/src/utils/bounded-queue.test.ts +356 -0
- package/src/utils/bounded-queue.ts +205 -0
- package/src/utils/circuit-breaker.test.ts +394 -0
- package/src/utils/circuit-breaker.ts +262 -0
- package/src/utils/deduplication-cache.test.ts +380 -0
- package/src/utils/deduplication-cache.ts +198 -0
- package/src/utils/event-waiter.test.ts +381 -0
- package/src/utils/event-waiter.ts +172 -0
- package/src/utils/index.ts +74 -0
- package/src/utils/logger.ts +87 -0
- package/src/utils/rate-limiter.test.ts +341 -0
- package/src/utils/rate-limiter.ts +211 -0
- package/src/utils/retry-policy.test.ts +558 -0
- package/src/utils/retry-policy.ts +272 -0
- package/src/utils/secure-private-key.test.ts +356 -0
- package/src/utils/secure-private-key.ts +205 -0
- package/src/utils/signature-verifier.test.ts +464 -0
- package/src/utils/signature-verifier.ts +298 -0
- package/src/utils/ssrf-validator.test.ts +372 -0
- package/src/utils/ssrf-validator.ts +224 -0
- package/tests/integration/real-server.test.ts +740 -0
- package/tests/integration/websocket.test.ts +381 -0
- package/tests/integration-setup.ts +16 -0
- package/tests/setup.ts +34 -0
- package/tsconfig.json +32 -0
- package/vitest.config.ts +42 -0
- 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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"}
|