agent-relay 2.1.5 → 2.1.6
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/README.md +85 -236
- package/dist/index.cjs +75 -12
- package/package.json +18 -18
- package/packages/api-types/package.json +1 -1
- package/packages/benchmark/package.json +4 -4
- package/packages/bridge/package.json +8 -8
- package/packages/cli-tester/package.json +1 -1
- package/packages/config/package.json +2 -2
- package/packages/continuity/package.json +2 -2
- package/packages/daemon/dist/server.d.ts +5 -0
- package/packages/daemon/dist/server.d.ts.map +1 -1
- package/packages/daemon/dist/server.js +31 -0
- package/packages/daemon/dist/server.js.map +1 -1
- package/packages/daemon/package.json +12 -12
- package/packages/daemon/src/server.ts +37 -0
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/dist/cloud.d.ts +7 -114
- package/packages/mcp/dist/cloud.d.ts.map +1 -1
- package/packages/mcp/dist/cloud.js +21 -431
- package/packages/mcp/dist/cloud.js.map +1 -1
- package/packages/mcp/dist/errors.d.ts +4 -22
- package/packages/mcp/dist/errors.d.ts.map +1 -1
- package/packages/mcp/dist/errors.js +4 -43
- package/packages/mcp/dist/errors.js.map +1 -1
- package/packages/mcp/dist/hybrid-client.d.ts.map +1 -1
- package/packages/mcp/dist/hybrid-client.js +7 -1
- package/packages/mcp/dist/hybrid-client.js.map +1 -1
- package/packages/mcp/package.json +4 -3
- package/packages/mcp/src/cloud.ts +29 -511
- package/packages/mcp/src/errors.ts +12 -49
- package/packages/mcp/src/hybrid-client.ts +8 -1
- package/packages/mcp/tests/discover.test.ts +72 -11
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/dist/types.d.ts +17 -1
- package/packages/protocol/dist/types.d.ts.map +1 -1
- package/packages/protocol/package.json +1 -1
- package/packages/protocol/src/types.ts +23 -0
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/dist/browser-client.d.ts +212 -0
- package/packages/sdk/dist/browser-client.d.ts.map +1 -0
- package/packages/sdk/dist/browser-client.js +750 -0
- package/packages/sdk/dist/browser-client.js.map +1 -0
- package/packages/sdk/dist/browser-framing.d.ts +46 -0
- package/packages/sdk/dist/browser-framing.d.ts.map +1 -0
- package/packages/sdk/dist/browser-framing.js +122 -0
- package/packages/sdk/dist/browser-framing.js.map +1 -0
- package/packages/sdk/dist/client.d.ts +129 -2
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +312 -2
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/discovery.d.ts +10 -0
- package/packages/sdk/dist/discovery.d.ts.map +1 -0
- package/packages/sdk/dist/discovery.js +22 -0
- package/packages/sdk/dist/discovery.js.map +1 -0
- package/packages/sdk/dist/errors.d.ts +9 -0
- package/packages/sdk/dist/errors.d.ts.map +1 -0
- package/packages/sdk/dist/errors.js +9 -0
- package/packages/sdk/dist/errors.js.map +1 -0
- package/packages/sdk/dist/index.d.ts +18 -2
- package/packages/sdk/dist/index.d.ts.map +1 -1
- package/packages/sdk/dist/index.js +27 -1
- package/packages/sdk/dist/index.js.map +1 -1
- package/packages/sdk/dist/transports/index.d.ts +92 -0
- package/packages/sdk/dist/transports/index.d.ts.map +1 -0
- package/packages/sdk/dist/transports/index.js +129 -0
- package/packages/sdk/dist/transports/index.js.map +1 -0
- package/packages/sdk/dist/transports/socket-transport.d.ts +30 -0
- package/packages/sdk/dist/transports/socket-transport.d.ts.map +1 -0
- package/packages/sdk/dist/transports/socket-transport.js +94 -0
- package/packages/sdk/dist/transports/socket-transport.js.map +1 -0
- package/packages/sdk/dist/transports/types.d.ts +69 -0
- package/packages/sdk/dist/transports/types.d.ts.map +1 -0
- package/packages/sdk/dist/transports/types.js +10 -0
- package/packages/sdk/dist/transports/types.js.map +1 -0
- package/packages/sdk/dist/transports/websocket-transport.d.ts +55 -0
- package/packages/sdk/dist/transports/websocket-transport.d.ts.map +1 -0
- package/packages/sdk/dist/transports/websocket-transport.js +180 -0
- package/packages/sdk/dist/transports/websocket-transport.js.map +1 -0
- package/packages/sdk/package.json +28 -4
- package/packages/sdk/src/browser-client.ts +985 -0
- package/packages/sdk/src/browser-framing.test.ts +115 -0
- package/packages/sdk/src/browser-framing.ts +150 -0
- package/packages/sdk/src/client.test.ts +425 -0
- package/packages/sdk/src/client.ts +397 -3
- package/packages/sdk/src/discovery.ts +38 -0
- package/packages/sdk/src/errors.ts +17 -0
- package/packages/sdk/src/index.ts +82 -1
- package/packages/sdk/src/transports/index.ts +197 -0
- package/packages/sdk/src/transports/socket-transport.ts +115 -0
- package/packages/sdk/src/transports/types.ts +77 -0
- package/packages/sdk/src/transports/websocket-transport.ts +245 -0
- package/packages/sdk/tsconfig.json +1 -1
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/storage/src/jsonl-adapter.test.ts +8 -3
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/dist/cjs/discovery.js +328 -0
- package/packages/utils/dist/cjs/errors.js +81 -0
- package/packages/utils/dist/discovery.d.ts +123 -0
- package/packages/utils/dist/discovery.d.ts.map +1 -0
- package/packages/utils/dist/discovery.js +439 -0
- package/packages/utils/dist/discovery.js.map +1 -0
- package/packages/utils/dist/errors.d.ts +29 -0
- package/packages/utils/dist/errors.d.ts.map +1 -0
- package/packages/utils/dist/errors.js +50 -0
- package/packages/utils/dist/errors.js.map +1 -0
- package/packages/utils/package.json +15 -2
- package/packages/utils/src/consolidation.test.ts +125 -0
- package/packages/utils/src/discovery.test.ts +196 -0
- package/packages/utils/src/discovery.ts +524 -0
- package/packages/utils/src/errors.test.ts +83 -0
- package/packages/utils/src/errors.ts +56 -0
- package/packages/wrapper/package.json +6 -6
|
@@ -24,10 +24,26 @@
|
|
|
24
24
|
* const client = new RelayClient({ agentName: 'MyAgent' });
|
|
25
25
|
* await client.connect();
|
|
26
26
|
* ```
|
|
27
|
+
*
|
|
28
|
+
* ## Browser Usage (WebSocket)
|
|
29
|
+
*
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { BrowserRelayClient } from '@agent-relay/sdk';
|
|
32
|
+
*
|
|
33
|
+
* const client = new BrowserRelayClient({
|
|
34
|
+
* agentName: 'BrowserAgent',
|
|
35
|
+
* transport: { wsUrl: 'wss://relay.example.com/ws' },
|
|
36
|
+
* });
|
|
37
|
+
* await client.connect();
|
|
38
|
+
* ```
|
|
27
39
|
*/
|
|
28
|
-
export { RelayClient, type ClientState, type ClientConfig, type SyncOptions, } from './client.js';
|
|
40
|
+
export { RelayClient, type ClientState, type ClientConfig, type SyncOptions, type RequestOptions, type RequestResponse, type SpawnResult, } from './client.js';
|
|
41
|
+
export { BrowserRelayClient, type BrowserClientState, type BrowserClientConfig, type BrowserRequestOptions, type BrowserRequestResponse, } from './browser-client.js';
|
|
42
|
+
export { type Transport, type TransportConfig, type TransportEvents, type TransportState, type TransportFactory, SocketTransport, createSocketTransport, type SocketTransportConfig, WebSocketTransport, createWebSocketTransport, socketPathToWsUrl, type WebSocketTransportConfig, createAutoTransport, type AutoTransportOptions, detectEnvironment, type EnvironmentInfo, isBrowser, isNode, } from './transports/index.js';
|
|
29
43
|
export { createRelay, createPair, type Relay, type RelayConfig, } from './standalone.js';
|
|
30
|
-
export { PROTOCOL_VERSION, type MessageType, type PayloadKind, type Envelope, type EntityType, type SendPayload, type SendMeta, type SyncMeta, type DeliveryInfo, type AckPayload, type ErrorCode, type ErrorPayload, type SpeakOnTrigger, type ShadowConfig, type SpawnPayload, type SpawnResultPayload, type ReleasePayload, type ReleaseResultPayload, type ChannelMessagePayload, type ChannelJoinPayload, type ChannelLeavePayload, type MessageAttachment, type StatusResponsePayload, type InboxMessage, type MessagesResponsePayload, type AgentInfo, type HealthResponsePayload, type CrashRecord, type AlertRecord, type MetricsResponsePayload, type AgentMetrics, type ConsensusType, type VoteValue, type ProposalStatus, type CreateProposalOptions, type VoteOptions, } from './protocol/index.js';
|
|
44
|
+
export { PROTOCOL_VERSION, type MessageType, type PayloadKind, type Envelope, type EntityType, type SendPayload, type SendMeta, type SyncMeta, type DeliveryInfo, type AckPayload, type ErrorCode, type ErrorPayload, type SpeakOnTrigger, type ShadowConfig, type SpawnPayload, type SpawnResultPayload, type ReleasePayload, type ReleaseResultPayload, type AgentReadyPayload, type ChannelMessagePayload, type ChannelJoinPayload, type ChannelLeavePayload, type MessageAttachment, type StatusResponsePayload, type InboxMessage, type MessagesResponsePayload, type AgentInfo, type HealthResponsePayload, type CrashRecord, type AlertRecord, type MetricsResponsePayload, type AgentMetrics, type ConsensusType, type VoteValue, type ProposalStatus, type CreateProposalOptions, type VoteOptions, } from './protocol/index.js';
|
|
31
45
|
export { encodeFrame, encodeFrameLegacy, FrameParser, MAX_FRAME_BYTES, } from './protocol/index.js';
|
|
32
46
|
export { getLogs, listLoggedAgents, type GetLogsOptions, type LogsResult, } from './logs.js';
|
|
47
|
+
export { discoverSocket, discoverAgentName, detectCloudWorkspace, isCloudWorkspace, getCloudSocketPath, getCloudOutboxPath, getConnectionInfo, getCloudEnvironmentSummary, cloudApiRequest, getWorkspaceStatus, type DiscoveryResult, type CloudWorkspace, type CloudConnectionOptions, type CloudConnectionInfo, } from './discovery.js';
|
|
48
|
+
export { RelayError, DaemonNotRunningError, AgentNotFoundError, TimeoutError, ConnectionError, ChannelNotFoundError, SpawnError, } from './errors.js';
|
|
33
49
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,EACL,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAErB,eAAe,EACf,qBAAqB,EACrB,KAAK,qBAAqB,EAE1B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,wBAAwB,EAE7B,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,KAAK,eAAe,EACpB,SAAS,EACT,MAAM,GACP,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,WAAW,EACX,UAAU,EACV,KAAK,KAAK,EACV,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EAEtB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAEtB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAEjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,OAAO,EACP,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,UAAU,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -24,9 +24,31 @@
|
|
|
24
24
|
* const client = new RelayClient({ agentName: 'MyAgent' });
|
|
25
25
|
* await client.connect();
|
|
26
26
|
* ```
|
|
27
|
+
*
|
|
28
|
+
* ## Browser Usage (WebSocket)
|
|
29
|
+
*
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { BrowserRelayClient } from '@agent-relay/sdk';
|
|
32
|
+
*
|
|
33
|
+
* const client = new BrowserRelayClient({
|
|
34
|
+
* agentName: 'BrowserAgent',
|
|
35
|
+
* transport: { wsUrl: 'wss://relay.example.com/ws' },
|
|
36
|
+
* });
|
|
37
|
+
* await client.connect();
|
|
38
|
+
* ```
|
|
27
39
|
*/
|
|
28
|
-
// Main client
|
|
40
|
+
// Main client (Node.js, Unix sockets)
|
|
29
41
|
export { RelayClient, } from './client.js';
|
|
42
|
+
// Browser-compatible client (WebSocket)
|
|
43
|
+
export { BrowserRelayClient, } from './browser-client.js';
|
|
44
|
+
// Transport abstractions
|
|
45
|
+
export {
|
|
46
|
+
// Socket transport (Node.js)
|
|
47
|
+
SocketTransport, createSocketTransport,
|
|
48
|
+
// WebSocket transport (Browser + Node.js)
|
|
49
|
+
WebSocketTransport, createWebSocketTransport, socketPathToWsUrl,
|
|
50
|
+
// Auto-detection
|
|
51
|
+
createAutoTransport, detectEnvironment, isBrowser, isNode, } from './transports/index.js';
|
|
30
52
|
// Standalone relay (in-process daemon for simple use cases)
|
|
31
53
|
export { createRelay, createPair, } from './standalone.js';
|
|
32
54
|
// Protocol types (re-export for convenience)
|
|
@@ -35,4 +57,8 @@ export { PROTOCOL_VERSION, } from './protocol/index.js';
|
|
|
35
57
|
export { encodeFrame, encodeFrameLegacy, FrameParser, MAX_FRAME_BYTES, } from './protocol/index.js';
|
|
36
58
|
// Log utilities (file-based, doesn't require connection)
|
|
37
59
|
export { getLogs, listLoggedAgents, } from './logs.js';
|
|
60
|
+
// Discovery (socket discovery, cloud workspace detection, agent identity)
|
|
61
|
+
export { discoverSocket, discoverAgentName, detectCloudWorkspace, isCloudWorkspace, getCloudSocketPath, getCloudOutboxPath, getConnectionInfo, getCloudEnvironmentSummary, cloudApiRequest, getWorkspaceStatus, } from './discovery.js';
|
|
62
|
+
// Error types
|
|
63
|
+
export { RelayError, DaemonNotRunningError, AgentNotFoundError, TimeoutError, ConnectionError, ChannelNotFoundError, SpawnError, } from './errors.js';
|
|
38
64
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,sCAAsC;AACtC,OAAO,EACL,WAAW,GAOZ,MAAM,aAAa,CAAC;AAErB,wCAAwC;AACxC,OAAO,EACL,kBAAkB,GAKnB,MAAM,qBAAqB,CAAC;AAE7B,yBAAyB;AACzB,OAAO;AAOL,6BAA6B;AAC7B,eAAe,EACf,qBAAqB;AAErB,0CAA0C;AAC1C,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB;AAEjB,iBAAiB;AACjB,mBAAmB,EAEnB,iBAAiB,EAEjB,SAAS,EACT,MAAM,GACP,MAAM,uBAAuB,CAAC;AAE/B,4DAA4D;AAC5D,OAAO,EACL,WAAW,EACX,UAAU,GAGX,MAAM,iBAAiB,CAAC;AAEzB,6CAA6C;AAC7C,OAAO,EACL,gBAAgB,GA0CjB,MAAM,qBAAqB,CAAC;AAE7B,oBAAoB;AACpB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,yDAAyD;AACzD,OAAO,EACL,OAAO,EACP,gBAAgB,GAGjB,MAAM,WAAW,CAAC;AAEnB,0EAA0E;AAC1E,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,GAKnB,MAAM,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,UAAU,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport module for relay client communication.
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*
|
|
5
|
+
* Provides transport abstraction and implementations:
|
|
6
|
+
* - SocketTransport: Unix/TCP sockets (Node.js only)
|
|
7
|
+
* - WebSocketTransport: WebSocket connections (Node.js and Browser)
|
|
8
|
+
*
|
|
9
|
+
* Auto-detection selects the appropriate transport based on environment.
|
|
10
|
+
*/
|
|
11
|
+
export type { Transport, TransportConfig, TransportEvents, TransportState, TransportFactory, } from './types.js';
|
|
12
|
+
export { SocketTransport, createSocketTransport, type SocketTransportConfig, } from './socket-transport.js';
|
|
13
|
+
export { WebSocketTransport, createWebSocketTransport, socketPathToWsUrl, type WebSocketTransportConfig, } from './websocket-transport.js';
|
|
14
|
+
import type { Transport, TransportConfig } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Environment detection result.
|
|
17
|
+
*/
|
|
18
|
+
export interface EnvironmentInfo {
|
|
19
|
+
/** Running in browser environment */
|
|
20
|
+
isBrowser: boolean;
|
|
21
|
+
/** Running in Node.js environment */
|
|
22
|
+
isNode: boolean;
|
|
23
|
+
/** WebSocket API is available */
|
|
24
|
+
hasWebSocket: boolean;
|
|
25
|
+
/** Unix sockets are available (Node.js only) */
|
|
26
|
+
hasUnixSockets: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Detect the current runtime environment.
|
|
30
|
+
*/
|
|
31
|
+
export declare function detectEnvironment(): EnvironmentInfo;
|
|
32
|
+
/**
|
|
33
|
+
* Options for creating an auto-detected transport.
|
|
34
|
+
*/
|
|
35
|
+
export interface AutoTransportOptions extends TransportConfig {
|
|
36
|
+
/** Unix socket path (for Node.js socket transport) */
|
|
37
|
+
socketPath?: string;
|
|
38
|
+
/** WebSocket URL (for WebSocket transport) */
|
|
39
|
+
wsUrl?: string;
|
|
40
|
+
/** WebSocket host (used with port to construct URL) */
|
|
41
|
+
wsHost?: string;
|
|
42
|
+
/** WebSocket port (default: 3888) */
|
|
43
|
+
wsPort?: number;
|
|
44
|
+
/** WebSocket path (default: /ws) */
|
|
45
|
+
wsPath?: string;
|
|
46
|
+
/** Use secure WebSocket (wss://) */
|
|
47
|
+
wsSecure?: boolean;
|
|
48
|
+
/** Force a specific transport type */
|
|
49
|
+
forceTransport?: 'socket' | 'websocket';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a transport automatically based on environment and options.
|
|
53
|
+
*
|
|
54
|
+
* In browser environments, WebSocket transport is always used.
|
|
55
|
+
* In Node.js, Unix socket is preferred if socketPath is provided,
|
|
56
|
+
* otherwise WebSocket is used if wsUrl or wsHost is provided.
|
|
57
|
+
*
|
|
58
|
+
* @param options - Transport configuration options
|
|
59
|
+
* @returns Configured transport instance
|
|
60
|
+
*
|
|
61
|
+
* @example Browser usage
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const transport = createAutoTransport({
|
|
64
|
+
* wsUrl: 'wss://relay.example.com/ws'
|
|
65
|
+
* });
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @example Node.js with Unix socket
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const transport = createAutoTransport({
|
|
71
|
+
* socketPath: '/tmp/agent-relay.sock'
|
|
72
|
+
* });
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @example Node.js with WebSocket
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const transport = createAutoTransport({
|
|
78
|
+
* wsHost: 'localhost',
|
|
79
|
+
* wsPort: 3888
|
|
80
|
+
* });
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare function createAutoTransport(options: AutoTransportOptions): Transport;
|
|
84
|
+
/**
|
|
85
|
+
* Check if running in a browser environment.
|
|
86
|
+
*/
|
|
87
|
+
export declare function isBrowser(): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Check if running in Node.js environment.
|
|
90
|
+
*/
|
|
91
|
+
export declare function isNode(): boolean;
|
|
92
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,eAAe,CAcnD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,cAAc,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAoC5E;AAuBD;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport module for relay client communication.
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*
|
|
5
|
+
* Provides transport abstraction and implementations:
|
|
6
|
+
* - SocketTransport: Unix/TCP sockets (Node.js only)
|
|
7
|
+
* - WebSocketTransport: WebSocket connections (Node.js and Browser)
|
|
8
|
+
*
|
|
9
|
+
* Auto-detection selects the appropriate transport based on environment.
|
|
10
|
+
*/
|
|
11
|
+
// Socket transport (Node.js)
|
|
12
|
+
export { SocketTransport, createSocketTransport, } from './socket-transport.js';
|
|
13
|
+
// WebSocket transport (Node.js and Browser)
|
|
14
|
+
export { WebSocketTransport, createWebSocketTransport, socketPathToWsUrl, } from './websocket-transport.js';
|
|
15
|
+
import { SocketTransport } from './socket-transport.js';
|
|
16
|
+
import { WebSocketTransport, socketPathToWsUrl } from './websocket-transport.js';
|
|
17
|
+
/**
|
|
18
|
+
* Detect the current runtime environment.
|
|
19
|
+
*/
|
|
20
|
+
export function detectEnvironment() {
|
|
21
|
+
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
22
|
+
const isNode = typeof process !== 'undefined' &&
|
|
23
|
+
process.versions != null &&
|
|
24
|
+
process.versions.node != null;
|
|
25
|
+
const hasWebSocket = typeof WebSocket !== 'undefined' || isNode; // 'ws' can provide WebSocket in Node
|
|
26
|
+
const hasUnixSockets = isNode; // Only Node.js supports Unix sockets
|
|
27
|
+
return {
|
|
28
|
+
isBrowser,
|
|
29
|
+
isNode,
|
|
30
|
+
hasWebSocket,
|
|
31
|
+
hasUnixSockets,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a transport automatically based on environment and options.
|
|
36
|
+
*
|
|
37
|
+
* In browser environments, WebSocket transport is always used.
|
|
38
|
+
* In Node.js, Unix socket is preferred if socketPath is provided,
|
|
39
|
+
* otherwise WebSocket is used if wsUrl or wsHost is provided.
|
|
40
|
+
*
|
|
41
|
+
* @param options - Transport configuration options
|
|
42
|
+
* @returns Configured transport instance
|
|
43
|
+
*
|
|
44
|
+
* @example Browser usage
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const transport = createAutoTransport({
|
|
47
|
+
* wsUrl: 'wss://relay.example.com/ws'
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @example Node.js with Unix socket
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const transport = createAutoTransport({
|
|
54
|
+
* socketPath: '/tmp/agent-relay.sock'
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @example Node.js with WebSocket
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const transport = createAutoTransport({
|
|
61
|
+
* wsHost: 'localhost',
|
|
62
|
+
* wsPort: 3888
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function createAutoTransport(options) {
|
|
67
|
+
const env = detectEnvironment();
|
|
68
|
+
const { forceTransport, ...config } = options;
|
|
69
|
+
// Forced transport type
|
|
70
|
+
if (forceTransport === 'websocket') {
|
|
71
|
+
return createWsTransportFromOptions(options);
|
|
72
|
+
}
|
|
73
|
+
if (forceTransport === 'socket') {
|
|
74
|
+
if (!options.socketPath) {
|
|
75
|
+
throw new Error('socketPath is required when forcing socket transport');
|
|
76
|
+
}
|
|
77
|
+
if (!env.hasUnixSockets) {
|
|
78
|
+
throw new Error('Unix sockets are not available in this environment');
|
|
79
|
+
}
|
|
80
|
+
return new SocketTransport({
|
|
81
|
+
socketPath: options.socketPath,
|
|
82
|
+
connectTimeout: config.connectTimeout,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// Auto-detect: Browser always uses WebSocket
|
|
86
|
+
if (env.isBrowser) {
|
|
87
|
+
return createWsTransportFromOptions(options);
|
|
88
|
+
}
|
|
89
|
+
// Node.js: prefer Unix socket if path is provided
|
|
90
|
+
if (env.isNode && options.socketPath) {
|
|
91
|
+
return new SocketTransport({
|
|
92
|
+
socketPath: options.socketPath,
|
|
93
|
+
connectTimeout: config.connectTimeout,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Fall back to WebSocket
|
|
97
|
+
return createWsTransportFromOptions(options);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create WebSocket transport from options.
|
|
101
|
+
*/
|
|
102
|
+
function createWsTransportFromOptions(options) {
|
|
103
|
+
let url = options.wsUrl;
|
|
104
|
+
if (!url) {
|
|
105
|
+
// Construct URL from components
|
|
106
|
+
const host = options.wsHost ?? 'localhost';
|
|
107
|
+
const port = options.wsPort ?? 3888;
|
|
108
|
+
const path = options.wsPath ?? '/ws';
|
|
109
|
+
const secure = options.wsSecure ?? false;
|
|
110
|
+
url = socketPathToWsUrl(host, port, path, secure);
|
|
111
|
+
}
|
|
112
|
+
return new WebSocketTransport({
|
|
113
|
+
url,
|
|
114
|
+
connectTimeout: options.connectTimeout,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if running in a browser environment.
|
|
119
|
+
*/
|
|
120
|
+
export function isBrowser() {
|
|
121
|
+
return detectEnvironment().isBrowser;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check if running in Node.js environment.
|
|
125
|
+
*/
|
|
126
|
+
export function isNode() {
|
|
127
|
+
return detectEnvironment().isNode;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unix/TCP Socket Transport for Node.js environments.
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*/
|
|
5
|
+
import type { Transport, TransportConfig, TransportEvents, TransportState } from './types.js';
|
|
6
|
+
export interface SocketTransportConfig extends TransportConfig {
|
|
7
|
+
/** Unix socket path or TCP host:port */
|
|
8
|
+
socketPath: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Socket-based transport for Unix sockets and TCP connections.
|
|
12
|
+
* This is the default transport for Node.js environments.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SocketTransport implements Transport {
|
|
15
|
+
private socket?;
|
|
16
|
+
private config;
|
|
17
|
+
private events;
|
|
18
|
+
private _state;
|
|
19
|
+
constructor(config: SocketTransportConfig);
|
|
20
|
+
get state(): TransportState;
|
|
21
|
+
setEvents(events: TransportEvents): void;
|
|
22
|
+
connect(): Promise<void>;
|
|
23
|
+
disconnect(): void;
|
|
24
|
+
send(data: Uint8Array | Buffer): boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a socket transport for Unix/TCP connections.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createSocketTransport(socketPath: string, config?: TransportConfig): SocketTransport;
|
|
30
|
+
//# sourceMappingURL=socket-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-transport.d.ts","sourceRoot":"","sources":["../../src/transports/socket-transport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9F,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,EAAE,qBAAqB;IAOzC,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAIxC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4CxB,UAAU,IAAI,IAAI;IAWlB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;CAczC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,eAAe,CAEnG"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unix/TCP Socket Transport for Node.js environments.
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*/
|
|
5
|
+
import net from 'node:net';
|
|
6
|
+
/**
|
|
7
|
+
* Socket-based transport for Unix sockets and TCP connections.
|
|
8
|
+
* This is the default transport for Node.js environments.
|
|
9
|
+
*/
|
|
10
|
+
export class SocketTransport {
|
|
11
|
+
socket;
|
|
12
|
+
config;
|
|
13
|
+
events = {};
|
|
14
|
+
_state = 'disconnected';
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.config = {
|
|
17
|
+
connectTimeout: 5000,
|
|
18
|
+
...config,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
get state() {
|
|
22
|
+
return this._state;
|
|
23
|
+
}
|
|
24
|
+
setEvents(events) {
|
|
25
|
+
this.events = events;
|
|
26
|
+
}
|
|
27
|
+
connect() {
|
|
28
|
+
if (this._state !== 'disconnected') {
|
|
29
|
+
return Promise.resolve();
|
|
30
|
+
}
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
this._state = 'connecting';
|
|
33
|
+
const timeout = setTimeout(() => {
|
|
34
|
+
if (this._state === 'connecting') {
|
|
35
|
+
this.socket?.destroy();
|
|
36
|
+
this._state = 'disconnected';
|
|
37
|
+
reject(new Error('Connection timeout'));
|
|
38
|
+
}
|
|
39
|
+
}, this.config.connectTimeout);
|
|
40
|
+
this.socket = net.createConnection(this.config.socketPath, () => {
|
|
41
|
+
clearTimeout(timeout);
|
|
42
|
+
this._state = 'connected';
|
|
43
|
+
this.events.onConnect?.();
|
|
44
|
+
resolve();
|
|
45
|
+
});
|
|
46
|
+
this.socket.on('data', (data) => {
|
|
47
|
+
// Convert Buffer to Uint8Array for consistent interface
|
|
48
|
+
this.events.onData?.(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
|
|
49
|
+
});
|
|
50
|
+
this.socket.on('close', () => {
|
|
51
|
+
this._state = 'disconnected';
|
|
52
|
+
this.events.onClose?.();
|
|
53
|
+
});
|
|
54
|
+
this.socket.on('error', (err) => {
|
|
55
|
+
clearTimeout(timeout);
|
|
56
|
+
if (this._state === 'connecting') {
|
|
57
|
+
this._state = 'disconnected';
|
|
58
|
+
reject(err);
|
|
59
|
+
}
|
|
60
|
+
this.events.onError?.(err);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
disconnect() {
|
|
65
|
+
if (!this.socket || this._state === 'disconnected') {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
this._state = 'closing';
|
|
69
|
+
this.socket.end();
|
|
70
|
+
this.socket = undefined;
|
|
71
|
+
this._state = 'disconnected';
|
|
72
|
+
}
|
|
73
|
+
send(data) {
|
|
74
|
+
if (!this.socket || this._state !== 'connected') {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
// Ensure we're sending a Buffer
|
|
79
|
+
const buffer = data instanceof Buffer ? data : Buffer.from(data);
|
|
80
|
+
this.socket.write(buffer);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a socket transport for Unix/TCP connections.
|
|
90
|
+
*/
|
|
91
|
+
export function createSocketTransport(socketPath, config) {
|
|
92
|
+
return new SocketTransport({ socketPath, ...config });
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=socket-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-transport.js","sourceRoot":"","sources":["../../src/transports/socket-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport abstraction for relay client communication.
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*
|
|
5
|
+
* Defines the interface for different transport implementations:
|
|
6
|
+
* - SocketTransport: Unix/TCP sockets (Node.js)
|
|
7
|
+
* - WebSocketTransport: WebSocket connections (Node.js and Browser)
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Transport connection state.
|
|
11
|
+
*/
|
|
12
|
+
export type TransportState = 'disconnected' | 'connecting' | 'connected' | 'closing';
|
|
13
|
+
/**
|
|
14
|
+
* Transport event handlers.
|
|
15
|
+
*/
|
|
16
|
+
export interface TransportEvents {
|
|
17
|
+
/** Called when transport connects successfully */
|
|
18
|
+
onConnect?: () => void;
|
|
19
|
+
/** Called when transport receives data */
|
|
20
|
+
onData?: (data: Uint8Array) => void;
|
|
21
|
+
/** Called when transport disconnects */
|
|
22
|
+
onClose?: () => void;
|
|
23
|
+
/** Called when transport encounters an error */
|
|
24
|
+
onError?: (error: Error) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Transport configuration options.
|
|
28
|
+
*/
|
|
29
|
+
export interface TransportConfig {
|
|
30
|
+
/** Connection timeout in milliseconds */
|
|
31
|
+
connectTimeout?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Transport interface for relay client communication.
|
|
35
|
+
*
|
|
36
|
+
* Implementations must handle:
|
|
37
|
+
* - Connection lifecycle (connect, disconnect)
|
|
38
|
+
* - Binary data transmission
|
|
39
|
+
* - Event callbacks for state changes
|
|
40
|
+
*/
|
|
41
|
+
export interface Transport {
|
|
42
|
+
/** Current connection state */
|
|
43
|
+
readonly state: TransportState;
|
|
44
|
+
/**
|
|
45
|
+
* Connect to the relay endpoint.
|
|
46
|
+
* @throws Error if connection fails
|
|
47
|
+
*/
|
|
48
|
+
connect(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Disconnect from the relay.
|
|
51
|
+
*/
|
|
52
|
+
disconnect(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Send binary data to the relay.
|
|
55
|
+
* @param data - Data to send (Buffer or Uint8Array)
|
|
56
|
+
* @returns true if data was queued for sending
|
|
57
|
+
*/
|
|
58
|
+
send(data: Uint8Array | Buffer): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Set event handlers.
|
|
61
|
+
* @param events - Event handler callbacks
|
|
62
|
+
*/
|
|
63
|
+
setEvents(events: TransportEvents): void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Transport factory function type.
|
|
67
|
+
*/
|
|
68
|
+
export type TransportFactory = (config?: TransportConfig) => Transport;
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transports/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAE/B;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;IAEnB;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IAEzC;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,SAAS,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport abstraction for relay client communication.
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*
|
|
5
|
+
* Defines the interface for different transport implementations:
|
|
6
|
+
* - SocketTransport: Unix/TCP sockets (Node.js)
|
|
7
|
+
* - WebSocketTransport: WebSocket connections (Node.js and Browser)
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/transports/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Transport for browser and Node.js environments.
|
|
3
|
+
* @agent-relay/sdk
|
|
4
|
+
*
|
|
5
|
+
* Uses native WebSocket in browsers and 'ws' package in Node.js.
|
|
6
|
+
* The transport expects the daemon to have a WebSocket endpoint (e.g., /ws).
|
|
7
|
+
*/
|
|
8
|
+
import type { Transport, TransportConfig, TransportEvents, TransportState } from './types.js';
|
|
9
|
+
export interface WebSocketTransportConfig extends TransportConfig {
|
|
10
|
+
/** WebSocket URL (e.g., ws://localhost:3888/ws) */
|
|
11
|
+
url: string;
|
|
12
|
+
/** Protocols to use in WebSocket handshake */
|
|
13
|
+
protocols?: string | string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* WebSocket-based transport for browser and Node.js.
|
|
17
|
+
*
|
|
18
|
+
* In browsers, uses native WebSocket.
|
|
19
|
+
* In Node.js, requires 'ws' package (optional dependency).
|
|
20
|
+
*/
|
|
21
|
+
export declare class WebSocketTransport implements Transport {
|
|
22
|
+
private ws?;
|
|
23
|
+
private config;
|
|
24
|
+
private events;
|
|
25
|
+
private _state;
|
|
26
|
+
private WebSocketImpl?;
|
|
27
|
+
constructor(config: WebSocketTransportConfig);
|
|
28
|
+
get state(): TransportState;
|
|
29
|
+
setEvents(events: TransportEvents): void;
|
|
30
|
+
/**
|
|
31
|
+
* Get WebSocket implementation (native or 'ws' package).
|
|
32
|
+
*/
|
|
33
|
+
private getWebSocketImpl;
|
|
34
|
+
connect(): Promise<void>;
|
|
35
|
+
disconnect(): void;
|
|
36
|
+
send(data: Uint8Array | Buffer): boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create a WebSocket transport.
|
|
40
|
+
*
|
|
41
|
+
* @param url - WebSocket URL (e.g., ws://localhost:3888/ws)
|
|
42
|
+
* @param config - Additional configuration options
|
|
43
|
+
*/
|
|
44
|
+
export declare function createWebSocketTransport(url: string, config?: Omit<WebSocketTransportConfig, 'url'>): WebSocketTransport;
|
|
45
|
+
/**
|
|
46
|
+
* Convert a socket path to WebSocket URL.
|
|
47
|
+
* Useful when daemon provides both Unix socket and WebSocket endpoints.
|
|
48
|
+
*
|
|
49
|
+
* @param host - Host address (default: localhost)
|
|
50
|
+
* @param port - Port number (default: 3888)
|
|
51
|
+
* @param path - WebSocket path (default: /ws)
|
|
52
|
+
* @param secure - Use wss:// instead of ws:// (default: false)
|
|
53
|
+
*/
|
|
54
|
+
export declare function socketPathToWsUrl(host?: string, port?: number, path?: string, secure?: boolean): string;
|
|
55
|
+
//# sourceMappingURL=websocket-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-transport.d.ts","sourceRoot":"","sources":["../../src/transports/websocket-transport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9F,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC/D,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAiCD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,EAAE,CAAC,CAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAAC,CAAuB;gBAEjC,MAAM,EAAE,wBAAwB;IAO5C,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAIxC;;OAEG;YACW,gBAAgB;IA+BxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqE9B,UAAU,IAAI,IAAI;IAWlB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;CAsBzC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC,GAC7C,kBAAkB,CAEpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,SAAc,EAClB,IAAI,SAAO,EACX,IAAI,SAAQ,EACZ,MAAM,UAAQ,GACb,MAAM,CAGR"}
|