@teneo-protocol/sdk 2.0.0 → 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.
- package/.eslintrc.json +11 -2
- package/.github/CODEOWNERS +2 -0
- package/.github/ISSUE_TEMPLATE/01-bug.yml +85 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/workflows/claude-code-review.yml +8 -3
- package/.github/workflows/claude-reviewer.yml +6 -4
- package/.github/workflows/publish-npm.yml +1 -0
- package/.github/workflows/push-to-main.yml +1 -1
- package/.github/workflows/top-issue.yml +102 -0
- package/CHANGELOG.md +69 -0
- package/CONCEPTS.md +747 -0
- package/README.md +178 -8
- package/dist/constants.js +8 -8
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts +15 -3
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +52 -13
- package/dist/core/websocket-client.js.map +1 -1
- package/dist/formatters/response-formatter.js +4 -0
- package/dist/formatters/response-formatter.js.map +1 -1
- package/dist/handlers/message-handler-registry.js +2 -1
- package/dist/handlers/message-handler-registry.js.map +1 -1
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.js +6 -5
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.js +6 -5
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
- package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/base-handler.js +3 -1
- package/dist/handlers/message-handlers/base-handler.js.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.js +3 -2
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.js +2 -5
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/index.d.ts +6 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +33 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.js +2 -5
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.js +2 -5
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -199
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
- package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +2 -5
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/types.d.ts +21 -9
- package/dist/handlers/message-handlers/types.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.js +31 -0
- package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +1 -1
- package/dist/handlers/webhook-handler.d.ts.map +1 -1
- package/dist/handlers/webhook-handler.js +14 -5
- package/dist/handlers/webhook-handler.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/managers/admin-manager.d.ts +116 -0
- package/dist/managers/admin-manager.d.ts.map +1 -0
- package/dist/managers/admin-manager.js +169 -0
- package/dist/managers/admin-manager.js.map +1 -0
- package/dist/managers/agent-registry.d.ts +52 -1
- package/dist/managers/agent-registry.d.ts.map +1 -1
- package/dist/managers/agent-registry.js +145 -6
- package/dist/managers/agent-registry.js.map +1 -1
- package/dist/managers/agent-room-manager.d.ts +1 -7
- package/dist/managers/agent-room-manager.d.ts.map +1 -1
- package/dist/managers/agent-room-manager.js +83 -36
- package/dist/managers/agent-room-manager.js.map +1 -1
- package/dist/managers/connection-manager.js +2 -0
- package/dist/managers/connection-manager.js.map +1 -1
- package/dist/managers/index.d.ts +2 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js +3 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +56 -5
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +155 -8
- package/dist/managers/message-router.js.map +1 -1
- package/dist/managers/room-management-manager.d.ts.map +1 -1
- package/dist/managers/room-management-manager.js +9 -7
- package/dist/managers/room-management-manager.js.map +1 -1
- package/dist/managers/room-manager.d.ts +7 -5
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +14 -10
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/payments/index.d.ts +5 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +21 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/payment-client.d.ts +74 -0
- package/dist/payments/payment-client.d.ts.map +1 -0
- package/dist/payments/payment-client.js +207 -0
- package/dist/payments/payment-client.js.map +1 -0
- package/dist/teneo-sdk.d.ts +135 -21
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +268 -26
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/categories.d.ts +22 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +40 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/config.d.ts +79 -8
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +62 -5
- package/dist/types/config.js.map +1 -1
- package/dist/types/error-codes.d.ts +8 -0
- package/dist/types/error-codes.d.ts.map +1 -1
- package/dist/types/error-codes.js +9 -0
- package/dist/types/error-codes.js.map +1 -1
- package/dist/types/events.d.ts +44 -0
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +19 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +33 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +11219 -423
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +249 -7
- package/dist/types/messages.js.map +1 -1
- package/dist/utils/bounded-queue.d.ts.map +1 -1
- package/dist/utils/bounded-queue.js +5 -2
- package/dist/utils/bounded-queue.js.map +1 -1
- package/dist/utils/circuit-breaker.js +11 -4
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/deduplication-cache.js +3 -1
- package/dist/utils/deduplication-cache.js.map +1 -1
- package/dist/utils/event-waiter.d.ts +3 -3
- package/dist/utils/event-waiter.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pricing-resolver.d.ts +26 -0
- package/dist/utils/pricing-resolver.d.ts.map +1 -0
- package/dist/utils/pricing-resolver.js +85 -0
- package/dist/utils/pricing-resolver.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +6 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/retry-policy.js +1 -0
- package/dist/utils/retry-policy.js.map +1 -1
- package/dist/utils/secure-private-key.js +3 -1
- package/dist/utils/secure-private-key.js.map +1 -1
- package/dist/utils/signature-verifier.d.ts.map +1 -1
- package/dist/utils/signature-verifier.js +3 -1
- package/dist/utils/signature-verifier.js.map +1 -1
- package/examples/.env.example +1 -1
- package/examples/agent-room-management-example.ts +10 -9
- package/examples/basic-usage.ts +3 -4
- package/examples/claude-agent-x-follower/.env.example +1 -1
- package/examples/claude-agent-x-follower/QUICKSTART.md +2 -2
- package/examples/claude-agent-x-follower/README.md +2 -2
- package/examples/claude-agent-x-follower/index.ts +120 -96
- package/examples/n8n-teneo/.env.example +1 -1
- package/examples/n8n-teneo/README.md +1 -1
- package/examples/n8n-teneo/index.ts +54 -44
- package/examples/nestjs-dashboard/.env.example +11 -0
- package/examples/nestjs-dashboard/README.md +297 -0
- package/examples/nestjs-dashboard/nest-cli.json +10 -0
- package/examples/nestjs-dashboard/package.json +44 -0
- package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
- package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
- package/examples/nestjs-dashboard/src/app.module.ts +15 -0
- package/examples/nestjs-dashboard/src/main.ts +32 -0
- package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
- package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
- package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
- package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
- package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
- package/examples/nestjs-dashboard/tsconfig.json +22 -0
- package/examples/openai-teneo/.env.example +1 -1
- package/examples/openai-teneo/README.md +2 -2
- package/examples/openai-teneo/index.ts +82 -71
- package/examples/production-dashboard/.env.example +1 -1
- package/examples/production-dashboard/README.md +1 -1
- package/examples/production-dashboard/server.ts +2 -2
- package/examples/room-management-example.ts +5 -8
- package/examples/usage/.env.example +1 -1
- package/examples/usage/01-connect.ts +3 -4
- package/examples/usage/02-list-agents.ts +2 -3
- package/examples/usage/03-pick-agent.ts +2 -3
- package/examples/usage/04-find-by-capability.ts +2 -3
- package/examples/usage/05-webhook-example.ts +2 -3
- package/examples/usage/06-simple-api-server.ts +2 -3
- package/examples/usage/07-event-listener.ts +2 -3
- package/examples/webhook-integration.ts +1 -1
- package/examples/x-influencer-battle-server.ts +2 -2
- package/package.json +4 -1
- package/src/core/websocket-client.test.ts +8 -3
- package/src/core/websocket-client.ts +36 -6
- package/src/formatters/response-formatter.test.ts +2 -0
- package/src/formatters/response-formatter.ts +3 -3
- package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
- package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +2 -8
- package/src/handlers/message-handlers/agent-status-update-handler.ts +3 -9
- package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +5 -0
- package/src/handlers/message-handlers/auth-success-handler.ts +6 -1
- package/src/handlers/message-handlers/base-handler.ts +20 -7
- package/src/handlers/message-handlers/index.ts +34 -0
- package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -5
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
- package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
- package/src/handlers/message-handlers/room-operation-response-handler.ts +3 -6
- package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
- package/src/handlers/message-handlers/types.ts +37 -9
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
- package/src/handlers/message-handlers/user-count-handler.ts +34 -0
- package/src/handlers/webhook-handler.test.ts +3 -2
- package/src/handlers/webhook-handler.ts +13 -7
- package/src/index.ts +21 -0
- package/src/managers/admin-manager.ts +249 -0
- package/src/managers/agent-registry.test.ts +2 -1
- package/src/managers/agent-registry.ts +170 -2
- package/src/managers/agent-room-manager.ts +98 -42
- package/src/managers/index.ts +13 -1
- package/src/managers/message-router.ts +215 -17
- package/src/managers/room-management-manager.ts +4 -7
- package/src/managers/room-manager.ts +11 -15
- package/src/payments/index.ts +22 -0
- package/src/payments/payment-client.ts +240 -0
- package/src/teneo-sdk.ts +302 -27
- package/src/types/categories.ts +45 -0
- package/src/types/config.ts +70 -2
- package/src/types/error-codes.ts +10 -0
- package/src/types/events.test.ts +1 -0
- package/src/types/events.ts +43 -0
- package/src/types/index.ts +56 -0
- package/src/types/messages.test.ts +2 -1
- package/src/types/messages.ts +307 -5
- package/src/utils/bounded-queue.test.ts +1 -1
- package/src/utils/bounded-queue.ts +2 -1
- package/src/utils/circuit-breaker.test.ts +1 -1
- package/src/utils/deduplication-cache.test.ts +1 -1
- package/src/utils/event-waiter.test.ts +1 -1
- package/src/utils/event-waiter.ts +3 -3
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +8 -8
- package/src/utils/pricing-resolver.ts +128 -0
- package/src/utils/rate-limiter.test.ts +1 -1
- package/src/utils/rate-limiter.ts +1 -0
- package/src/utils/signature-verifier.test.ts +2 -2
- package/src/utils/signature-verifier.ts +3 -2
- package/tests/.env.example +7 -0
- package/tests/direct-agent-test.ts +151 -0
- package/tests/integration/real-server.test.ts +2 -0
- package/tests/integration/room-management.test.ts +10 -8
- package/tests/integration/websocket.test.ts +4 -1
- package/tests/payment-flow-test.ts +147 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +17 -29
- package/tests/unit/handlers/agent-status-update-handler.test.ts +2 -6
- package/tests/unit/handlers/auth-success-handler-rooms.test.ts +1 -3
- package/tests/unit/handlers/list-available-agents-handler.test.ts +4 -12
- package/tests/unit/handlers/list-room-agents-handler.test.ts +2 -6
- package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -36
- package/tests/unit/managers/agent-room-manager.test.ts +9 -16
- package/tests/unit/managers/room-management-manager.test.ts +21 -39
- package/tsconfig.json +2 -2
- package/vitest.config.ts +1 -0
|
@@ -5,31 +5,38 @@
|
|
|
5
5
|
* Uses the OpenAI Codex SDK for thread-based conversations.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
import express, { Request, Response } from
|
|
10
|
-
import { Codex } from
|
|
11
|
-
import { SDKConfigBuilder, TeneoSDK } from
|
|
8
|
+
import "dotenv/config";
|
|
9
|
+
import express, { Request, Response } from "express";
|
|
10
|
+
import { Codex } from "@openai/codex-sdk";
|
|
11
|
+
import { SDKConfigBuilder, TeneoSDK } from "../../dist/index.js";
|
|
12
12
|
|
|
13
13
|
// Load environment variables
|
|
14
|
-
const WS_URL = process.env.WS_URL ||
|
|
15
|
-
const PRIVATE_KEY = process.env.PRIVATE_KEY ||
|
|
16
|
-
const WALLET_ADDRESS = process.env.WALLET_ADDRESS ||
|
|
17
|
-
const DEFAULT_ROOM = process.env.DEFAULT_ROOM ||
|
|
18
|
-
const LOG_LEVEL = (process.env.LOG_LEVEL ||
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
14
|
+
const WS_URL = process.env.WS_URL || "";
|
|
15
|
+
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
16
|
+
const WALLET_ADDRESS = process.env.WALLET_ADDRESS || "";
|
|
17
|
+
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
18
|
+
const LOG_LEVEL = (process.env.LOG_LEVEL || "info") as
|
|
19
|
+
| "debug"
|
|
20
|
+
| "info"
|
|
21
|
+
| "warn"
|
|
22
|
+
| "error"
|
|
23
|
+
| "silent";
|
|
24
|
+
const ENABLE_SIG_VERIFICATION = process.env.ENABLE_SIGNATURE_VERIFICATION === "true";
|
|
25
|
+
const TRUSTED_ADDRESSES = process.env.TRUSTED_ADDRESSES?.split(",").filter(Boolean) || [];
|
|
26
|
+
const ENABLE_CACHE = process.env.ENABLE_CACHE !== "false";
|
|
27
|
+
const CACHE_TIMEOUT = parseInt(process.env.CACHE_TIMEOUT || "300000");
|
|
28
|
+
const MAX_CACHE_SIZE = parseInt(process.env.MAX_CACHE_SIZE || "100");
|
|
29
|
+
const ENABLE_RECONNECTION = process.env.ENABLE_RECONNECTION !== "false";
|
|
30
|
+
const RECONNECT_DELAY = parseInt(process.env.RECONNECT_DELAY || "5000");
|
|
31
|
+
const MAX_RECONNECT_ATTEMPTS = parseInt(process.env.MAX_RECONNECT_ATTEMPTS || "10");
|
|
32
|
+
const OPENAI_API_KEY = process.env.OPENAI_API_KEY || "";
|
|
28
33
|
|
|
29
34
|
// Validate required environment variables
|
|
30
35
|
if (!WS_URL || !PRIVATE_KEY) {
|
|
31
|
-
console.error(
|
|
32
|
-
console.error(
|
|
36
|
+
console.error("Missing required environment variables: WS_URL, PRIVATE_KEY");
|
|
37
|
+
console.error(
|
|
38
|
+
"Note: OPENAI_API_KEY is optional - Codex SDK will use default auth if not provided"
|
|
39
|
+
);
|
|
33
40
|
process.exit(1);
|
|
34
41
|
}
|
|
35
42
|
|
|
@@ -39,20 +46,20 @@ app.use(express.json());
|
|
|
39
46
|
// Initialize Teneo SDK using SDKConfigBuilder pattern
|
|
40
47
|
const config = new SDKConfigBuilder()
|
|
41
48
|
.withWebSocketUrl(WS_URL)
|
|
42
|
-
.withAuthentication(PRIVATE_KEY, WALLET_ADDRESS)
|
|
49
|
+
.withAuthentication(PRIVATE_KEY, WALLET_ADDRESS) // Wallet auto-derived if not provided
|
|
43
50
|
.withAutoJoinRooms([DEFAULT_ROOM])
|
|
44
51
|
.withReconnection({
|
|
45
52
|
enabled: ENABLE_RECONNECTION,
|
|
46
53
|
delay: RECONNECT_DELAY,
|
|
47
54
|
maxAttempts: MAX_RECONNECT_ATTEMPTS
|
|
48
55
|
})
|
|
49
|
-
.withResponseFormat({ format:
|
|
56
|
+
.withResponseFormat({ format: "both", includeMetadata: true })
|
|
50
57
|
.withLogging(LOG_LEVEL)
|
|
51
58
|
.withCache(ENABLE_CACHE, CACHE_TIMEOUT, MAX_CACHE_SIZE)
|
|
52
59
|
.withSignatureVerification({
|
|
53
60
|
enabled: ENABLE_SIG_VERIFICATION,
|
|
54
61
|
trustedAddresses: TRUSTED_ADDRESSES,
|
|
55
|
-
requireFor: [
|
|
62
|
+
requireFor: ["task_response", "agent_selected"],
|
|
56
63
|
strictMode: false
|
|
57
64
|
})
|
|
58
65
|
.build();
|
|
@@ -66,17 +73,17 @@ const codex = new Codex({
|
|
|
66
73
|
});
|
|
67
74
|
|
|
68
75
|
// Connect to Teneo
|
|
69
|
-
console.log(
|
|
76
|
+
console.log("📡 Connecting to Teneo Protocol...");
|
|
70
77
|
await teneoSDK.connect();
|
|
71
|
-
console.log(
|
|
78
|
+
console.log("✅ Connected to Teneo\n");
|
|
72
79
|
|
|
73
80
|
// Health endpoint
|
|
74
|
-
app.get(
|
|
81
|
+
app.get("/health", (_req: Request, res: Response) => {
|
|
75
82
|
const teneoHealth = teneoSDK.getHealth();
|
|
76
83
|
res.json({
|
|
77
|
-
status:
|
|
84
|
+
status: "ok",
|
|
78
85
|
teneo: {
|
|
79
|
-
connected: teneoHealth.connection.status ===
|
|
86
|
+
connected: teneoHealth.connection.status === "connected",
|
|
80
87
|
authenticated: teneoHealth.connection.authenticated
|
|
81
88
|
},
|
|
82
89
|
codex: {
|
|
@@ -87,14 +94,14 @@ app.get('/health', (_req: Request, res: Response) => {
|
|
|
87
94
|
});
|
|
88
95
|
|
|
89
96
|
// Query endpoint - Codex analyzes, then routes to Teneo agent
|
|
90
|
-
app.post(
|
|
97
|
+
app.post("/query", async (req: Request, res: Response) => {
|
|
91
98
|
try {
|
|
92
99
|
const { message } = req.body;
|
|
93
100
|
|
|
94
101
|
if (!message) {
|
|
95
102
|
return res.status(400).json({
|
|
96
103
|
success: false,
|
|
97
|
-
error:
|
|
104
|
+
error: "Message is required"
|
|
98
105
|
});
|
|
99
106
|
}
|
|
100
107
|
|
|
@@ -104,11 +111,11 @@ app.post('/query', async (req: Request, res: Response) => {
|
|
|
104
111
|
const agents = teneoSDK.getAgents();
|
|
105
112
|
|
|
106
113
|
// Step 2: Ask Codex to select the best agent
|
|
107
|
-
console.log(
|
|
114
|
+
console.log("🤖 Asking Codex to select best agent...");
|
|
108
115
|
|
|
109
|
-
const agentList = agents
|
|
110
|
-
`- ${a.name}: ${a.description ||
|
|
111
|
-
|
|
116
|
+
const agentList = agents
|
|
117
|
+
.map((a) => `- ${a.name}: ${a.description || "No description"}`)
|
|
118
|
+
.join("\n");
|
|
112
119
|
|
|
113
120
|
const thread = codex.startThread();
|
|
114
121
|
const codexResponse = await thread.run(
|
|
@@ -125,50 +132,55 @@ Respond with ONLY the agent name, nothing else.`
|
|
|
125
132
|
// Extract text from Codex response
|
|
126
133
|
// Codex SDK returns an object with finalResponse property
|
|
127
134
|
let selectedAgentName: string;
|
|
128
|
-
if (typeof codexResponse ===
|
|
135
|
+
if (typeof codexResponse === "string") {
|
|
129
136
|
selectedAgentName = codexResponse.trim();
|
|
130
|
-
} else if (codexResponse && typeof codexResponse ===
|
|
137
|
+
} else if (codexResponse && typeof codexResponse === "object") {
|
|
131
138
|
// Extract from finalResponse property
|
|
132
|
-
selectedAgentName =
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
selectedAgentName =
|
|
140
|
+
(codexResponse as any).finalResponse ||
|
|
141
|
+
(codexResponse as any).text ||
|
|
142
|
+
(codexResponse as any).content ||
|
|
143
|
+
String(codexResponse);
|
|
144
|
+
if (typeof selectedAgentName === "object") {
|
|
137
145
|
selectedAgentName = JSON.stringify(selectedAgentName);
|
|
138
146
|
}
|
|
139
147
|
selectedAgentName = selectedAgentName.trim();
|
|
140
148
|
} else {
|
|
141
|
-
selectedAgentName = agents[0]?.name ||
|
|
149
|
+
selectedAgentName = agents[0]?.name || "";
|
|
142
150
|
}
|
|
143
151
|
|
|
144
152
|
console.log(`✅ Selected agent: ${selectedAgentName}`);
|
|
145
153
|
|
|
146
154
|
// Find the agent by name or ID
|
|
147
|
-
const selectedAgent = agents.find(
|
|
148
|
-
a
|
|
149
|
-
|
|
155
|
+
const selectedAgent = agents.find(
|
|
156
|
+
(a) =>
|
|
157
|
+
a.name?.toLowerCase() === selectedAgentName.toLowerCase() ||
|
|
158
|
+
a.id?.toLowerCase() === selectedAgentName.toLowerCase()
|
|
150
159
|
);
|
|
151
160
|
|
|
152
161
|
if (!selectedAgent) {
|
|
153
162
|
return res.status(404).json({
|
|
154
163
|
success: false,
|
|
155
|
-
error: `Agent '${selectedAgentName}' not found. Available agents: ${agents.map(a => a.name || a.id).join(
|
|
164
|
+
error: `Agent '${selectedAgentName}' not found. Available agents: ${agents.map((a) => a.name || a.id).join(", ")}`
|
|
156
165
|
});
|
|
157
166
|
}
|
|
158
167
|
|
|
159
168
|
// Step 3: Send direct command to selected Teneo agent (bypasses coordinator)
|
|
160
169
|
// Use the SDK's built-in waitForResponse feature with the improved fallback matching
|
|
161
170
|
console.log(`📤 Sending to Teneo agent: ${selectedAgent.name || selectedAgent.id}...`);
|
|
162
|
-
const teneoResponse = await teneoSDK.sendDirectCommand(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
171
|
+
const teneoResponse = await teneoSDK.sendDirectCommand(
|
|
172
|
+
{
|
|
173
|
+
agent: selectedAgent.id,
|
|
174
|
+
command: message,
|
|
175
|
+
room: DEFAULT_ROOM
|
|
176
|
+
},
|
|
177
|
+
true
|
|
178
|
+
); // waitForResponse = true
|
|
167
179
|
|
|
168
180
|
if (!teneoResponse || !teneoResponse.humanized) {
|
|
169
181
|
return res.json({
|
|
170
182
|
success: false,
|
|
171
|
-
error:
|
|
183
|
+
error: "No response from Teneo agent"
|
|
172
184
|
});
|
|
173
185
|
}
|
|
174
186
|
|
|
@@ -186,25 +198,24 @@ Respond with ONLY the agent name, nothing else.`
|
|
|
186
198
|
metadata: teneoResponse.metadata
|
|
187
199
|
}
|
|
188
200
|
});
|
|
189
|
-
|
|
190
201
|
} catch (error) {
|
|
191
|
-
console.error(
|
|
202
|
+
console.error("❌ Query error:", error);
|
|
192
203
|
res.status(500).json({
|
|
193
204
|
success: false,
|
|
194
|
-
error: error instanceof Error ? error.message :
|
|
205
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
195
206
|
});
|
|
196
207
|
}
|
|
197
208
|
});
|
|
198
209
|
|
|
199
210
|
// Direct Codex query (bypass Teneo)
|
|
200
|
-
app.post(
|
|
211
|
+
app.post("/codex", async (req: Request, res: Response) => {
|
|
201
212
|
try {
|
|
202
213
|
const { message, threadId } = req.body;
|
|
203
214
|
|
|
204
215
|
if (!message) {
|
|
205
216
|
return res.status(400).json({
|
|
206
217
|
success: false,
|
|
207
|
-
error:
|
|
218
|
+
error: "Message is required"
|
|
208
219
|
});
|
|
209
220
|
}
|
|
210
221
|
|
|
@@ -217,13 +228,14 @@ app.post('/codex', async (req: Request, res: Response) => {
|
|
|
217
228
|
// Extract text from Codex response
|
|
218
229
|
// Codex SDK returns an object with finalResponse property
|
|
219
230
|
let responseText: string;
|
|
220
|
-
if (typeof codexResult ===
|
|
231
|
+
if (typeof codexResult === "string") {
|
|
221
232
|
responseText = codexResult;
|
|
222
|
-
} else if (codexResult && typeof codexResult ===
|
|
223
|
-
responseText =
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
233
|
+
} else if (codexResult && typeof codexResult === "object") {
|
|
234
|
+
responseText =
|
|
235
|
+
(codexResult as any).finalResponse ||
|
|
236
|
+
(codexResult as any).text ||
|
|
237
|
+
(codexResult as any).content ||
|
|
238
|
+
JSON.stringify(codexResult);
|
|
227
239
|
} else {
|
|
228
240
|
responseText = String(codexResult);
|
|
229
241
|
}
|
|
@@ -232,26 +244,25 @@ app.post('/codex', async (req: Request, res: Response) => {
|
|
|
232
244
|
success: true,
|
|
233
245
|
data: {
|
|
234
246
|
response: responseText,
|
|
235
|
-
threadId: thread.id ||
|
|
247
|
+
threadId: thread.id || "new",
|
|
236
248
|
usage: (codexResult as any).usage // Include token usage if available
|
|
237
249
|
}
|
|
238
250
|
});
|
|
239
|
-
|
|
240
251
|
} catch (error) {
|
|
241
|
-
console.error(
|
|
252
|
+
console.error("❌ Codex error:", error);
|
|
242
253
|
res.status(500).json({
|
|
243
254
|
success: false,
|
|
244
|
-
error: error instanceof Error ? error.message :
|
|
255
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
245
256
|
});
|
|
246
257
|
}
|
|
247
258
|
});
|
|
248
259
|
|
|
249
260
|
// List Teneo agents
|
|
250
|
-
app.get(
|
|
261
|
+
app.get("/agents", (_req: Request, res: Response) => {
|
|
251
262
|
const agents = teneoSDK.getAgents();
|
|
252
263
|
res.json({
|
|
253
264
|
success: true,
|
|
254
|
-
agents: agents.map(a => ({
|
|
265
|
+
agents: agents.map((a) => ({
|
|
255
266
|
id: a.id,
|
|
256
267
|
name: a.name,
|
|
257
268
|
description: a.description,
|
|
@@ -272,8 +283,8 @@ app.listen(PORT, () => {
|
|
|
272
283
|
});
|
|
273
284
|
|
|
274
285
|
// Graceful shutdown
|
|
275
|
-
process.on(
|
|
276
|
-
console.log(
|
|
286
|
+
process.on("SIGINT", () => {
|
|
287
|
+
console.log("\n👋 Shutting down...");
|
|
277
288
|
teneoSDK.disconnect();
|
|
278
289
|
teneoSDK.destroy();
|
|
279
290
|
process.exit(0);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Copy this file to .env and fill in your values
|
|
3
3
|
|
|
4
4
|
# ============================================================================
|
|
5
|
-
# REQUIRED: Teneo
|
|
5
|
+
# REQUIRED: Teneo Protocol Connection
|
|
6
6
|
# ============================================================================
|
|
7
7
|
|
|
8
8
|
# WebSocket URL for Teneo AI Network
|
|
@@ -714,7 +714,7 @@ Monitor rate limit status via `/metrics` endpoint.
|
|
|
714
714
|
|
|
715
715
|
- **Problem**: "Authentication Pending" never completes
|
|
716
716
|
- **Solution**: Verify `PRIVATE_KEY` and `WALLET_ADDRESS` are correct
|
|
717
|
-
- **Check**: Ensure wallet has access to the Teneo
|
|
717
|
+
- **Check**: Ensure wallet has access to the Teneo Protocol
|
|
718
718
|
|
|
719
719
|
### Webhook Not Receiving
|
|
720
720
|
|
|
@@ -130,8 +130,8 @@ async function initializeSDK() {
|
|
|
130
130
|
// Set up comprehensive event listeners
|
|
131
131
|
setupSDKEventListeners(sdk);
|
|
132
132
|
|
|
133
|
-
// Connect to Teneo
|
|
134
|
-
console.log("[SDK] Connecting to Teneo
|
|
133
|
+
// Connect to Teneo Protocol
|
|
134
|
+
console.log("[SDK] Connecting to Teneo Protocol...");
|
|
135
135
|
await sdk.connect();
|
|
136
136
|
console.log("[SDK] Successfully connected and authenticated!");
|
|
137
137
|
|
|
@@ -43,12 +43,12 @@ async function main() {
|
|
|
43
43
|
|
|
44
44
|
try {
|
|
45
45
|
// Connect and authenticate
|
|
46
|
-
console.log("📡 Connecting to Teneo
|
|
46
|
+
console.log("📡 Connecting to Teneo Protocol...");
|
|
47
47
|
await sdk.connect();
|
|
48
48
|
console.log("✅ Connected and authenticated\n");
|
|
49
49
|
|
|
50
50
|
// Wait a moment for initial room data to load
|
|
51
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
51
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
52
52
|
|
|
53
53
|
// Step 1: Check current room status
|
|
54
54
|
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
@@ -63,7 +63,7 @@ async function main() {
|
|
|
63
63
|
const newRooms = await createSampleRooms(sdk);
|
|
64
64
|
|
|
65
65
|
// Wait for room creation events to process
|
|
66
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
66
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
67
67
|
|
|
68
68
|
// Step 3: Display updated room status
|
|
69
69
|
console.log("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
@@ -103,7 +103,7 @@ async function main() {
|
|
|
103
103
|
await deleteRooms(sdk, newRooms);
|
|
104
104
|
|
|
105
105
|
// Wait for deletion events to process
|
|
106
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
106
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
107
107
|
|
|
108
108
|
// Step 7: Final room status
|
|
109
109
|
console.log("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
|
@@ -112,7 +112,6 @@ async function main() {
|
|
|
112
112
|
await displayRoomStatus(sdk);
|
|
113
113
|
|
|
114
114
|
console.log("\n✅ Room management example completed!");
|
|
115
|
-
|
|
116
115
|
} catch (error: any) {
|
|
117
116
|
console.error("\n❌ Error:", error.message);
|
|
118
117
|
console.error(error.stack);
|
|
@@ -228,7 +227,6 @@ async function createSampleRooms(sdk: TeneoSDK) {
|
|
|
228
227
|
});
|
|
229
228
|
newRooms.push(researchRoom);
|
|
230
229
|
}
|
|
231
|
-
|
|
232
230
|
} catch (error: any) {
|
|
233
231
|
console.error(`Failed to create room: ${error.message}`);
|
|
234
232
|
}
|
|
@@ -255,7 +253,6 @@ async function updateRoomExample(sdk: TeneoSDK, roomId: string) {
|
|
|
255
253
|
|
|
256
254
|
console.log(`\nNew room name: "${updatedRoom.name}"`);
|
|
257
255
|
console.log(`New description: "${updatedRoom.description}"`);
|
|
258
|
-
|
|
259
256
|
} catch (error: any) {
|
|
260
257
|
console.error(`Failed to update room: ${error.message}`);
|
|
261
258
|
}
|
|
@@ -274,7 +271,7 @@ async function deleteRooms(sdk: TeneoSDK, rooms: any[]) {
|
|
|
274
271
|
console.log(`Deleting "${room.name}" (${room.id})...`);
|
|
275
272
|
await sdk.deleteRoom(room.id);
|
|
276
273
|
// Wait a bit between deletions
|
|
277
|
-
await new Promise(resolve => setTimeout(resolve, 300));
|
|
274
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
278
275
|
} catch (error: any) {
|
|
279
276
|
console.error(`Failed to delete room ${room.id}: ${error.message}`);
|
|
280
277
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Teneo SDK Examples - Environment Configuration
|
|
2
2
|
# Copy this file to .env and fill in your actual values
|
|
3
3
|
|
|
4
|
-
# Required: WebSocket URL for Teneo
|
|
4
|
+
# Required: WebSocket URL for Teneo Protocol
|
|
5
5
|
WS_URL=wss://your-teneo-server.com/ws
|
|
6
6
|
|
|
7
7
|
# Required: Your Ethereum private key (keep this secret!)
|
|
@@ -14,8 +14,7 @@ import "dotenv/config";
|
|
|
14
14
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
15
15
|
|
|
16
16
|
// Load configuration from environment
|
|
17
|
-
const WS_URL =
|
|
18
|
-
process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
17
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
19
18
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
20
19
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
21
20
|
|
|
@@ -80,8 +79,8 @@ async function main() {
|
|
|
80
79
|
console.log("✅ Event listeners configured\n");
|
|
81
80
|
|
|
82
81
|
try {
|
|
83
|
-
// Step 4: Connect to Teneo
|
|
84
|
-
console.log("⚙️ Step 4: Connecting to Teneo
|
|
82
|
+
// Step 4: Connect to Teneo Protocol
|
|
83
|
+
console.log("⚙️ Step 4: Connecting to Teneo Protocol...");
|
|
85
84
|
await sdk.connect();
|
|
86
85
|
console.log("✅ Connected and authenticated!\n");
|
|
87
86
|
|
|
@@ -14,8 +14,7 @@ import "dotenv/config";
|
|
|
14
14
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
15
15
|
|
|
16
16
|
// Load configuration from environment
|
|
17
|
-
const WS_URL =
|
|
18
|
-
process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
17
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
19
18
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
20
19
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
21
20
|
|
|
@@ -44,7 +43,7 @@ async function main() {
|
|
|
44
43
|
|
|
45
44
|
try {
|
|
46
45
|
// Connect to Teneo
|
|
47
|
-
console.log("🔌 Connecting to Teneo
|
|
46
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
48
47
|
await sdk.connect();
|
|
49
48
|
console.log("✅ Connected!\n");
|
|
50
49
|
|
|
@@ -15,8 +15,7 @@ import "dotenv/config";
|
|
|
15
15
|
import { TeneoSDK, SDKConfigBuilder, FormattedResponse } from "../../dist/index.js";
|
|
16
16
|
|
|
17
17
|
// Load configuration from environment
|
|
18
|
-
const WS_URL =
|
|
19
|
-
process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
18
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
20
19
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
21
20
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
22
21
|
|
|
@@ -52,7 +51,7 @@ async function main() {
|
|
|
52
51
|
|
|
53
52
|
try {
|
|
54
53
|
// Connect
|
|
55
|
-
console.log("🔌 Connecting to Teneo
|
|
54
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
56
55
|
await sdk.connect();
|
|
57
56
|
console.log("✅ Connected!\n");
|
|
58
57
|
|
|
@@ -15,8 +15,7 @@ import "dotenv/config";
|
|
|
15
15
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
16
16
|
|
|
17
17
|
// Load configuration from environment
|
|
18
|
-
const WS_URL =
|
|
19
|
-
process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
18
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
20
19
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
21
20
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
22
21
|
|
|
@@ -40,7 +39,7 @@ async function main() {
|
|
|
40
39
|
|
|
41
40
|
try {
|
|
42
41
|
// Connect
|
|
43
|
-
console.log("🔌 Connecting to Teneo
|
|
42
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
44
43
|
await sdk.connect();
|
|
45
44
|
console.log("✅ Connected!\n");
|
|
46
45
|
|
|
@@ -26,8 +26,7 @@ import express from "express";
|
|
|
26
26
|
import type { Request, Response } from "express";
|
|
27
27
|
|
|
28
28
|
// Load configuration from environment
|
|
29
|
-
const WS_URL =
|
|
30
|
-
process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
29
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
31
30
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
32
31
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
33
32
|
const WEBHOOK_PORT = parseInt(process.env.WEBHOOK_PORT || "3001");
|
|
@@ -177,7 +176,7 @@ async function main() {
|
|
|
177
176
|
|
|
178
177
|
try {
|
|
179
178
|
// Step 4: Connect to Teneo
|
|
180
|
-
console.log("⚙️ Step 4: Connecting to Teneo
|
|
179
|
+
console.log("⚙️ Step 4: Connecting to Teneo Protocol...");
|
|
181
180
|
await sdk.connect();
|
|
182
181
|
console.log("✅ Connected!\n");
|
|
183
182
|
|
|
@@ -21,8 +21,7 @@ import type { Request, Response } from "express";
|
|
|
21
21
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
22
22
|
|
|
23
23
|
// Load configuration from environment
|
|
24
|
-
const WS_URL =
|
|
25
|
-
process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
24
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
26
25
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
27
26
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
28
27
|
const PORT = parseInt(process.env.PORT || "3000");
|
|
@@ -78,7 +77,7 @@ sdk.on("error", (error) => {
|
|
|
78
77
|
});
|
|
79
78
|
|
|
80
79
|
// Connect to Teneo
|
|
81
|
-
console.log("🔌 Connecting to Teneo
|
|
80
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
82
81
|
await sdk.connect();
|
|
83
82
|
console.log("✅ Connected!\n");
|
|
84
83
|
|
|
@@ -15,8 +15,7 @@ import "dotenv/config";
|
|
|
15
15
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
16
16
|
|
|
17
17
|
// Load configuration from environment
|
|
18
|
-
const WS_URL =
|
|
19
|
-
process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
18
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
20
19
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
21
20
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
22
21
|
|
|
@@ -336,7 +335,7 @@ async function main() {
|
|
|
336
335
|
// ============================================================================
|
|
337
336
|
|
|
338
337
|
try {
|
|
339
|
-
console.log("📡 Connecting to Teneo
|
|
338
|
+
console.log("📡 Connecting to Teneo Protocol...\n");
|
|
340
339
|
console.log("=".repeat(80));
|
|
341
340
|
console.log("Listening to all events... (will run for 30 seconds)");
|
|
342
341
|
console.log("=".repeat(80) + "\n");
|
|
@@ -64,7 +64,7 @@ async function initSDK() {
|
|
|
64
64
|
|
|
65
65
|
// Set up event listeners
|
|
66
66
|
sdk.on("connection:open", () => {
|
|
67
|
-
console.log("[SDK] Connected to Teneo
|
|
67
|
+
console.log("[SDK] Connected to Teneo Protocol");
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
sdk.on("auth:success", (state) => {
|
|
@@ -137,7 +137,7 @@ wss.on("connection", (ws: WebSocket) => {
|
|
|
137
137
|
ws.send(
|
|
138
138
|
JSON.stringify({
|
|
139
139
|
type: "error",
|
|
140
|
-
message: "Not connected to Teneo
|
|
140
|
+
message: "Not connected to Teneo Protocol"
|
|
141
141
|
})
|
|
142
142
|
);
|
|
143
143
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teneo-protocol/sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "TypeScript SDK for external platforms to interact with Teneo agents",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -24,12 +24,15 @@
|
|
|
24
24
|
},
|
|
25
25
|
"homepage": "https://github.com/TeneoProtocolAI/teneo-sdk#readme",
|
|
26
26
|
"dependencies": {
|
|
27
|
+
"@hono/node-server": "^1.19.6",
|
|
27
28
|
"eventemitter3": "^5.0.1",
|
|
29
|
+
"hono": "^4.10.4",
|
|
28
30
|
"node-fetch": "^3.3.2",
|
|
29
31
|
"pino": "^8.17.2",
|
|
30
32
|
"uuid": "^9.0.1",
|
|
31
33
|
"viem": "^2.37.11",
|
|
32
34
|
"ws": "^8.16.0",
|
|
35
|
+
"x402": "^0.7.3",
|
|
33
36
|
"zod": "^3.22.4"
|
|
34
37
|
},
|
|
35
38
|
"devDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
2
|
import { WebSocketClient } from "./websocket-client";
|
|
3
|
-
import { ConnectionError
|
|
3
|
+
import { ConnectionError } from "../types/events";
|
|
4
4
|
import type { SDKConfig } from "../types/config";
|
|
5
5
|
import WebSocket from "ws";
|
|
6
6
|
import { privateKeyToAccount } from "viem/accounts";
|
|
@@ -21,10 +21,13 @@ vi.mock("viem/accounts", () => ({
|
|
|
21
21
|
describe("WebSocketClient", () => {
|
|
22
22
|
let client: WebSocketClient;
|
|
23
23
|
let mockConfig: SDKConfig;
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
25
|
let mockWs: any;
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
27
|
let mockAccount: any;
|
|
26
28
|
|
|
27
29
|
// Helper to simulate successful authentication
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
31
|
const simulateAuth = (client: any) => {
|
|
29
32
|
// Update auth state to bypass authentication wait
|
|
30
33
|
client.updateAuthState({ authenticated: true });
|
|
@@ -49,9 +52,11 @@ describe("WebSocketClient", () => {
|
|
|
49
52
|
mockWs = {
|
|
50
53
|
on: vi.fn(),
|
|
51
54
|
once: vi.fn(),
|
|
52
|
-
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
send: vi.fn((data: unknown, callback?: () => void) => callback && callback()),
|
|
53
57
|
close: vi.fn(),
|
|
54
|
-
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
ping: vi.fn((callback?: () => void) => callback && callback()),
|
|
55
60
|
terminate: vi.fn(),
|
|
56
61
|
readyState: WebSocket.OPEN,
|
|
57
62
|
CONNECTING: 0,
|