@relaycast/sdk 5.1.1 → 6.0.1

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/dist/index.d.ts CHANGED
@@ -18,6 +18,8 @@ export { appendLegacySuffix, isNameConflictError, } from './identity.js';
18
18
  export type { RegisterAgentInput, RegisterOrRotateInput, ResolvedIdentity } from './identity.js';
19
19
  export { WsClient } from './ws.js';
20
20
  export type { WsClientOptions, EventHandler } from './ws.js';
21
+ export { NodeProviderClient, NodeRegistrationError } from './node-provider.js';
22
+ export type { NodeProviderOptions, NodeCapabilityOptions, NodeCapabilityHandler, NodeHandlerContext, NodeSendMessageInput, } from './node-provider.js';
21
23
  export type { Subscription } from './subscription.js';
22
24
  export type * from './types.js';
23
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,mBAAmB,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,mBAAmB,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -9,4 +9,5 @@ export { AGENT_RELAY_DISTINCT_ID_HEADER, AGENT_RELAY_DISTINCT_ID_QUERY, ORIGIN_A
9
9
  export { relayErrorFromApi, normalizeRelayErrorCode, relayErrorRetryable, } from './errors.js';
10
10
  export { appendLegacySuffix, isNameConflictError, } from './identity.js';
11
11
  export { WsClient } from './ws.js';
12
+ export { NodeProviderClient, NodeRegistrationError } from './node-provider.js';
12
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAS7D,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAS7D,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,175 @@
1
+ import { type FleetWireJsonValue, type NodeRegisterReplyData } from '@relaycast/types';
2
+ /**
3
+ * A node provider client: it attaches a process to a node, registers a subset
4
+ * of that node's capabilities against the engine's `/v1/node/ws`, and executes
5
+ * their invokes. It is the language-neutral equivalent of the broker's Rust
6
+ * provider — connection, registration, heartbeats, invoke dispatch, and the
7
+ * handler-context helpers — with no local-broker dependency.
8
+ *
9
+ * Enrollment (reading the node token/URL from disk) layers on top of this in a
10
+ * thin wrapper; the client itself takes an explicit token and base URL.
11
+ */
12
+ type JsonObject = Record<string, FleetWireJsonValue>;
13
+ /** A capability's declaration alongside its handler. */
14
+ export interface NodeCapabilityOptions {
15
+ /**
16
+ * `action` (default) materializes an invokable handler; `capacity`
17
+ * (`spawn:<harness>`, `release`) describes what the node can run and is never
18
+ * materialized. Omit to let the engine classify by name.
19
+ */
20
+ kind?: 'action' | 'capacity';
21
+ /** Claim a workspace-global alias for this action name. */
22
+ global?: boolean;
23
+ /** Queue invokes while this provider is offline instead of failing fast. */
24
+ queue?: boolean;
25
+ metadata?: JsonObject;
26
+ }
27
+ /** Context passed to every capability handler. */
28
+ export interface NodeHandlerContext {
29
+ /** Informational view of the node this provider is attached to. */
30
+ node: {
31
+ name: string;
32
+ capabilities: string[];
33
+ };
34
+ /** The invocation being handled. */
35
+ invocationId: string;
36
+ /**
37
+ * Post a channel message, attributed to `from` (an agent name resolved in the
38
+ * workspace). Resolves with the posted message.
39
+ */
40
+ sendMessage(input: NodeSendMessageInput): Promise<unknown>;
41
+ /**
42
+ * Spawn an agent through the node's capacity executor. Capacity-direct: it
43
+ * never re-enters action dispatch, so a `spawn:<harness>` shadow handler that
44
+ * delegates cannot recurse into itself. Resolves with the spawn placement.
45
+ */
46
+ spawnAgent(input: JsonObject): Promise<unknown>;
47
+ }
48
+ export interface NodeSendMessageInput {
49
+ to: string;
50
+ from: string;
51
+ text: string;
52
+ mode?: 'wait' | 'steer';
53
+ data?: JsonObject;
54
+ }
55
+ export type NodeCapabilityHandler = (input: FleetWireJsonValue, ctx: NodeHandlerContext) => unknown | Promise<unknown>;
56
+ export interface NodeProviderOptions {
57
+ /** Engine base URL; defaults to `https://cast.agentrelay.com`. */
58
+ baseUrl?: string;
59
+ /** The node's shared `nt_live_` token. */
60
+ nodeToken: string;
61
+ /** The enrolled node id. */
62
+ nodeId: string;
63
+ /** The node's name (the target others address). */
64
+ nodeName: string;
65
+ /**
66
+ * Provider identity. `name` is stable across reconnects; `instanceId` is the
67
+ * connection epoch and is regenerated on every connection when omitted (the
68
+ * replace semantic).
69
+ */
70
+ provider: {
71
+ name: string;
72
+ instanceId?: string;
73
+ };
74
+ /** Capabilities and their handlers, keyed by capability name. */
75
+ capabilities?: Record<string, NodeCapabilityHandler | (NodeCapabilityOptions & {
76
+ handler: NodeCapabilityHandler;
77
+ })>;
78
+ /** Provider-level agent capacity reported at registration. */
79
+ maxAgents?: number;
80
+ tags?: string[];
81
+ version?: string;
82
+ machineId?: string;
83
+ heartbeatIntervalMs?: number;
84
+ reconnectBaseDelayMs?: number;
85
+ reconnectMaxDelayMs?: number;
86
+ reconnectJitter?: boolean;
87
+ /** Max reconnect attempts after an unexpected drop; defaults to unbounded. */
88
+ maxReconnectAttempts?: number;
89
+ onError?: (err: Error) => void;
90
+ debug?: boolean;
91
+ }
92
+ /** Thrown when the engine rejects the provider's registration. */
93
+ export declare class NodeRegistrationError extends Error {
94
+ readonly code: string;
95
+ constructor(message: string, code: string);
96
+ }
97
+ export declare class NodeProviderClient {
98
+ private readonly baseUrl;
99
+ private readonly nodeToken;
100
+ private readonly nodeId;
101
+ private readonly nodeName;
102
+ private readonly providerName;
103
+ private readonly initialInstanceId?;
104
+ private readonly maxAgents;
105
+ private readonly tags;
106
+ private readonly version;
107
+ private readonly machineId?;
108
+ private readonly heartbeatIntervalMs;
109
+ private readonly reconnectBaseDelayMs;
110
+ private readonly reconnectMaxDelayMs;
111
+ private readonly reconnectJitter;
112
+ private readonly maxReconnectAttempts;
113
+ private readonly onError?;
114
+ private readonly debug;
115
+ private readonly capabilities;
116
+ private readonly pending;
117
+ private readonly invokeTasks;
118
+ private ws;
119
+ private instanceId;
120
+ private heartbeatTimer;
121
+ private reconnectTimer;
122
+ private reconnectAttempt;
123
+ private stopped;
124
+ private registered;
125
+ private servePromise;
126
+ private resolveServe;
127
+ private rejectServe;
128
+ private registerPromise;
129
+ private resolveRegister;
130
+ private rejectRegister;
131
+ constructor(options: NodeProviderOptions);
132
+ /** Register a capability and its handler. */
133
+ capability(name: string, handler: NodeCapabilityHandler): this;
134
+ capability(name: string, options: NodeCapabilityOptions, handler: NodeCapabilityHandler): this;
135
+ get connected(): boolean;
136
+ /** Resolves once the provider is registered and its capabilities accepted. */
137
+ whenRegistered(): Promise<NodeRegisterReplyData>;
138
+ /**
139
+ * Connect, register, and dispatch invokes until {@link stop} is called.
140
+ * Reconnects with backoff on unexpected drops, re-registering with a fresh
141
+ * instance id. The returned promise resolves on graceful {@link stop} and
142
+ * rejects if the initial registration is rejected by the engine.
143
+ */
144
+ serve(): Promise<void>;
145
+ private settleServe;
146
+ /** Gracefully deregister the provider and close the connection. */
147
+ stop(): Promise<void>;
148
+ private providerIdentity;
149
+ private openSocket;
150
+ private registrationRejected;
151
+ private sendRegister;
152
+ private onRegistered;
153
+ private onRegisterFailed;
154
+ private handleFrame;
155
+ private dispatchInvoke;
156
+ private makeContext;
157
+ /**
158
+ * Post a channel message through the canonical message route with the node
159
+ * token, attributed to `input.from`. Node-attributed posts share the route's
160
+ * delivery routing, observer events, and triggers by construction.
161
+ */
162
+ private postChannelMessage;
163
+ /** Send a request frame keyed by `id` and await its reply/error. */
164
+ private request;
165
+ private sendFrame;
166
+ private startHeartbeat;
167
+ private stopHeartbeat;
168
+ private scheduleReconnect;
169
+ private clearReconnect;
170
+ private rejectPending;
171
+ private closeSocket;
172
+ private reportError;
173
+ }
174
+ export {};
175
+ //# sourceMappingURL=node-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-provider.d.ts","sourceRoot":"","sources":["../src/node-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,507 @@
1
+ import { parseFleetRelaycastToBrokerMessage, } from '@relaycast/types';
2
+ import { SDK_VERSION } from './version.js';
3
+ /** Thrown when the engine rejects the provider's registration. */
4
+ export class NodeRegistrationError extends Error {
5
+ code;
6
+ constructor(message, code) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = 'NodeRegistrationError';
10
+ }
11
+ }
12
+ function randomId() {
13
+ const cryptoObj = globalThis.crypto;
14
+ if (cryptoObj?.randomUUID)
15
+ return cryptoObj.randomUUID();
16
+ return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
17
+ }
18
+ export class NodeProviderClient {
19
+ baseUrl;
20
+ nodeToken;
21
+ nodeId;
22
+ nodeName;
23
+ providerName;
24
+ initialInstanceId;
25
+ maxAgents;
26
+ tags;
27
+ version;
28
+ machineId;
29
+ heartbeatIntervalMs;
30
+ reconnectBaseDelayMs;
31
+ reconnectMaxDelayMs;
32
+ reconnectJitter;
33
+ maxReconnectAttempts;
34
+ onError;
35
+ debug;
36
+ capabilities = new Map();
37
+ pending = new Map();
38
+ invokeTasks = new Set();
39
+ ws = null;
40
+ instanceId = null;
41
+ heartbeatTimer = null;
42
+ reconnectTimer = null;
43
+ reconnectAttempt = 0;
44
+ stopped = false;
45
+ registered = false;
46
+ servePromise = null;
47
+ resolveServe = null;
48
+ rejectServe = null;
49
+ registerPromise = null;
50
+ resolveRegister = null;
51
+ rejectRegister = null;
52
+ constructor(options) {
53
+ this.baseUrl = (options.baseUrl ?? 'https://cast.agentrelay.com').replace(/\/+$/, '');
54
+ this.nodeToken = options.nodeToken;
55
+ this.nodeId = options.nodeId;
56
+ this.nodeName = options.nodeName;
57
+ this.providerName = options.provider.name;
58
+ this.initialInstanceId = options.provider.instanceId;
59
+ this.maxAgents = options.maxAgents ?? 0;
60
+ this.tags = options.tags ?? [];
61
+ this.version = options.version ?? SDK_VERSION;
62
+ this.machineId = options.machineId;
63
+ this.heartbeatIntervalMs = options.heartbeatIntervalMs ?? 15_000;
64
+ this.reconnectBaseDelayMs = options.reconnectBaseDelayMs ?? 500;
65
+ this.reconnectMaxDelayMs = options.reconnectMaxDelayMs ?? 30_000;
66
+ this.reconnectJitter = options.reconnectJitter ?? true;
67
+ this.maxReconnectAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;
68
+ this.onError = options.onError;
69
+ this.debug = options.debug ?? false;
70
+ for (const [name, value] of Object.entries(options.capabilities ?? {})) {
71
+ if (typeof value === 'function') {
72
+ this.capability(name, value);
73
+ }
74
+ else {
75
+ const { handler, ...opts } = value;
76
+ this.capability(name, opts, handler);
77
+ }
78
+ }
79
+ }
80
+ capability(name, optionsOrHandler, handler) {
81
+ const options = typeof optionsOrHandler === 'function' ? {} : optionsOrHandler;
82
+ const fn = typeof optionsOrHandler === 'function' ? optionsOrHandler : handler;
83
+ if (!fn)
84
+ throw new Error(`capability "${name}" requires a handler`);
85
+ this.capabilities.set(name, { options, handler: fn });
86
+ return this;
87
+ }
88
+ get connected() {
89
+ return this.registered && this.ws?.readyState === 1;
90
+ }
91
+ /** Resolves once the provider is registered and its capabilities accepted. */
92
+ whenRegistered() {
93
+ if (!this.registerPromise) {
94
+ this.registerPromise = new Promise((resolve, reject) => {
95
+ this.resolveRegister = resolve;
96
+ this.rejectRegister = reject;
97
+ });
98
+ }
99
+ return this.registerPromise;
100
+ }
101
+ /**
102
+ * Connect, register, and dispatch invokes until {@link stop} is called.
103
+ * Reconnects with backoff on unexpected drops, re-registering with a fresh
104
+ * instance id. The returned promise resolves on graceful {@link stop} and
105
+ * rejects if the initial registration is rejected by the engine.
106
+ */
107
+ serve() {
108
+ if (this.servePromise)
109
+ return this.servePromise;
110
+ this.stopped = false;
111
+ this.servePromise = new Promise((resolve, reject) => {
112
+ this.resolveServe = resolve;
113
+ this.rejectServe = reject;
114
+ });
115
+ // `whenRegistered()` mirrors the same rejection; keep it from surfacing as
116
+ // an unhandled rejection when a caller only awaits serve().
117
+ this.whenRegistered().catch(() => { });
118
+ this.openSocket();
119
+ return this.servePromise;
120
+ }
121
+ settleServe(err) {
122
+ if (err)
123
+ this.rejectServe?.(err);
124
+ else
125
+ this.resolveServe?.();
126
+ this.resolveServe = null;
127
+ this.rejectServe = null;
128
+ }
129
+ /** Gracefully deregister the provider and close the connection. */
130
+ async stop() {
131
+ this.stopped = true;
132
+ this.clearReconnect();
133
+ this.stopHeartbeat();
134
+ // Let in-flight invoke handlers finish (and send their results) before the
135
+ // socket closes; bound the wait so a slow handler can't hang shutdown.
136
+ if (this.invokeTasks.size > 0) {
137
+ let drainTimer;
138
+ const timeout = new Promise((resolve) => { drainTimer = setTimeout(resolve, 5000); });
139
+ await Promise.race([Promise.allSettled([...this.invokeTasks]), timeout]);
140
+ if (drainTimer)
141
+ clearTimeout(drainTimer);
142
+ }
143
+ if (this.ws && this.ws.readyState === 1 && this.registered && this.instanceId) {
144
+ this.sendFrame({ type: 'node.deregister', provider: this.providerIdentity() });
145
+ }
146
+ // A stop() before registration completed must not leave whenRegistered()
147
+ // hanging.
148
+ this.rejectRegister?.(new Error('node provider stopped'));
149
+ this.rejectRegister = null;
150
+ this.resolveRegister = null;
151
+ this.rejectPending(new Error('node provider stopped'));
152
+ this.closeSocket();
153
+ this.registered = false;
154
+ this.settleServe();
155
+ }
156
+ providerIdentity() {
157
+ return { name: this.providerName, instance_id: this.instanceId ?? '' };
158
+ }
159
+ openSocket() {
160
+ if (this.stopped)
161
+ return;
162
+ // A fresh instance id per connection: reconnecting with a new id replaces the
163
+ // previous attachment (the engine's reconnect-vs-duplicate arbitration).
164
+ this.instanceId = this.reconnectAttempt === 0 && this.initialInstanceId
165
+ ? this.initialInstanceId
166
+ : randomId();
167
+ this.registered = false;
168
+ const url = new URL('/v1/node/ws', `${this.baseUrl.replace(/^http/, 'ws')}/`);
169
+ url.searchParams.set('token', this.nodeToken);
170
+ url.searchParams.set('origin_client', '@relaycast/sdk');
171
+ url.searchParams.set('origin_version', SDK_VERSION);
172
+ let ws;
173
+ try {
174
+ ws = new WebSocket(url.toString());
175
+ }
176
+ catch (err) {
177
+ this.reportError(err);
178
+ this.scheduleReconnect();
179
+ return;
180
+ }
181
+ this.ws = ws;
182
+ ws.onopen = () => {
183
+ if (this.ws !== ws)
184
+ return;
185
+ this.sendRegister();
186
+ };
187
+ ws.onmessage = (event) => {
188
+ if (this.ws !== ws)
189
+ return;
190
+ this.handleFrame(String(event.data));
191
+ };
192
+ ws.onclose = () => {
193
+ if (this.ws !== ws)
194
+ return;
195
+ this.ws = null;
196
+ this.stopHeartbeat();
197
+ const wasRegistered = this.registered;
198
+ this.registered = false;
199
+ this.rejectPending(new Error('node provider connection closed'));
200
+ if (this.stopped) {
201
+ this.settleServe();
202
+ return;
203
+ }
204
+ // A rejected registration is deterministic — do not reconnect into the same
205
+ // rejection; surface it and stop.
206
+ if (this.rejectRegister && !wasRegistered && this.registrationRejected) {
207
+ return;
208
+ }
209
+ this.scheduleReconnect();
210
+ };
211
+ ws.onerror = () => {
212
+ if (this.ws !== ws)
213
+ return;
214
+ this.reportError(new Error('node provider websocket error'));
215
+ };
216
+ }
217
+ registrationRejected = false;
218
+ sendRegister() {
219
+ this.registrationRejected = false;
220
+ const id = randomId();
221
+ const capabilities = [...this.capabilities.entries()].map(([name, cap]) => ({
222
+ name,
223
+ ...(cap.options.kind ? { kind: cap.options.kind } : {}),
224
+ ...(cap.options.global ? { global: true } : {}),
225
+ ...(cap.options.queue ? { queue: true } : {}),
226
+ ...(cap.options.metadata ? { metadata: cap.options.metadata } : {}),
227
+ }));
228
+ this.request(id, {
229
+ type: 'node.register',
230
+ name: this.nodeName,
231
+ node_id: this.nodeId,
232
+ provider: this.providerIdentity(),
233
+ capabilities,
234
+ max_agents: this.maxAgents,
235
+ tags: this.tags,
236
+ version: this.version,
237
+ ...(this.machineId ? { machine_id: this.machineId } : {}),
238
+ resume_cursor: null,
239
+ })
240
+ .then((data) => this.onRegistered(data, capabilities.map((c) => c.name)))
241
+ .catch((err) => this.onRegisterFailed(err));
242
+ }
243
+ onRegistered(data, sentNames) {
244
+ // The reply must carry a well-formed acceptance list (the engine always
245
+ // does). A missing/corrupt reply (including a null `data`) means acceptance
246
+ // can't be confirmed, so fail registration rather than assume success or
247
+ // throw; an entry missing `accepted` counts as rejected (fail-safe).
248
+ const list = (data ?? {}).accepted_capabilities;
249
+ if (!Array.isArray(list)) {
250
+ this.onRegisterFailed(new NodeRegistrationError('Registration reply is missing accepted_capabilities', 'invalid_register_reply'));
251
+ return;
252
+ }
253
+ // Every capability the register frame ADVERTISED must be acknowledged.
254
+ // Validate against the snapshot that was sent, not the live map — a
255
+ // `capability()` added after the frame was sent isn't in this reply.
256
+ const acknowledged = new Set(list.filter((c) => !!c && typeof c.name === 'string').map((c) => c.name));
257
+ const missing = sentNames.filter((name) => !acknowledged.has(name));
258
+ if (missing.length > 0) {
259
+ this.onRegisterFailed(new NodeRegistrationError(`Registration reply omitted acceptance for: ${missing.join(', ')}`, 'invalid_register_reply'));
260
+ return;
261
+ }
262
+ const rejected = list.filter((c) => !c || c.accepted !== true);
263
+ if (rejected.length > 0) {
264
+ const detail = rejected.map((c) => `${c?.name ?? '<unknown>'}${c?.reason ? ` (${c.reason})` : ''}`).join(', ');
265
+ this.onRegisterFailed(new NodeRegistrationError(`Capabilities rejected: ${detail}`, 'capabilities_rejected'));
266
+ return;
267
+ }
268
+ this.registered = true;
269
+ this.reconnectAttempt = 0;
270
+ this.startHeartbeat();
271
+ this.resolveRegister?.(data);
272
+ this.resolveRegister = null;
273
+ this.rejectRegister = null;
274
+ }
275
+ onRegisterFailed(err) {
276
+ // Only a protocol rejection (a rejected capability or an engine `error`
277
+ // frame) is deterministic and must not be retried. A transport drop during
278
+ // the handshake is a normal disconnect — reconnect like any other drop.
279
+ if (!(err instanceof NodeRegistrationError)) {
280
+ this.reportError(err);
281
+ if (!this.stopped) {
282
+ this.closeSocket();
283
+ this.scheduleReconnect();
284
+ }
285
+ return;
286
+ }
287
+ this.registrationRejected = true;
288
+ this.rejectRegister?.(err);
289
+ this.rejectRegister = null;
290
+ this.resolveRegister = null;
291
+ this.reportError(err);
292
+ // Close without reconnect; the onclose handler observes registrationRejected.
293
+ this.closeSocket();
294
+ if (!this.stopped) {
295
+ this.stopped = true;
296
+ this.settleServe(err);
297
+ }
298
+ }
299
+ handleFrame(raw) {
300
+ let message;
301
+ try {
302
+ message = parseFleetRelaycastToBrokerMessage(JSON.parse(raw));
303
+ }
304
+ catch (err) {
305
+ if (this.debug)
306
+ this.reportError(err);
307
+ return;
308
+ }
309
+ switch (message.type) {
310
+ case 'reply': {
311
+ const p = this.pending.get(message.id);
312
+ if (p) {
313
+ this.pending.delete(message.id);
314
+ p.resolve(message.data);
315
+ }
316
+ return;
317
+ }
318
+ case 'error': {
319
+ const p = this.pending.get(message.id);
320
+ if (p) {
321
+ this.pending.delete(message.id);
322
+ p.reject(new NodeRegistrationError(message.message, message.code));
323
+ }
324
+ return;
325
+ }
326
+ case 'action.invoke': {
327
+ // Stop accepting new invokes once shutting down/draining; the engine
328
+ // reschedules an undispatched invocation when the node goes offline.
329
+ if (this.stopped)
330
+ return;
331
+ const task = this.dispatchInvoke(message.invocation_id, message.action, message.input);
332
+ this.invokeTasks.add(task);
333
+ void task.finally(() => this.invokeTasks.delete(task));
334
+ return;
335
+ }
336
+ default:
337
+ // deliver / context.update / ping carry no work for a provider client.
338
+ return;
339
+ }
340
+ }
341
+ async dispatchInvoke(invocationId, action, input) {
342
+ const cap = this.capabilities.get(action);
343
+ if (!cap) {
344
+ this.sendFrame({ type: 'action.result', invocation_id: invocationId, error: `No handler registered for action "${action}"` });
345
+ return;
346
+ }
347
+ // A handler failure becomes an error result; the invocation is never dropped.
348
+ let output;
349
+ let handlerError;
350
+ try {
351
+ output = await cap.handler(input, this.makeContext(invocationId));
352
+ }
353
+ catch (err) {
354
+ handlerError = err;
355
+ }
356
+ if (handlerError !== undefined) {
357
+ this.sendFrame({ type: 'action.result', invocation_id: invocationId, error: errorMessage(handlerError) });
358
+ return;
359
+ }
360
+ this.sendFrame({ type: 'action.result', invocation_id: invocationId, output: (output ?? null) });
361
+ }
362
+ makeContext(invocationId) {
363
+ return {
364
+ node: { name: this.nodeName, capabilities: [...this.capabilities.keys()] },
365
+ invocationId,
366
+ sendMessage: (input) => this.postChannelMessage(input),
367
+ // Capacity-direct: the engine always targets this connection's own node,
368
+ // so the frame carries no node target.
369
+ spawnAgent: (input) => this.request(randomId(), {
370
+ type: 'node.spawn',
371
+ input,
372
+ }),
373
+ };
374
+ }
375
+ /**
376
+ * Post a channel message through the canonical message route with the node
377
+ * token, attributed to `input.from`. Node-attributed posts share the route's
378
+ * delivery routing, observer events, and triggers by construction.
379
+ */
380
+ async postChannelMessage(input) {
381
+ // The base may be given as ws(s):// (also accepted by the socket); normalize
382
+ // it back to http(s):// for the REST call.
383
+ const httpBase = this.baseUrl.replace(/^ws(s?):\/\//, 'http$1://');
384
+ const url = `${httpBase}/v1/channels/${encodeURIComponent(input.to)}/messages`;
385
+ const res = await fetch(url, {
386
+ method: 'POST',
387
+ headers: { 'content-type': 'application/json', authorization: `Bearer ${this.nodeToken}` },
388
+ body: JSON.stringify({
389
+ text: input.text,
390
+ from: input.from,
391
+ ...(input.mode ? { mode: input.mode } : {}),
392
+ ...(input.data ? { data: input.data } : {}),
393
+ }),
394
+ });
395
+ const body = await res.json().catch(() => ({}));
396
+ if (!res.ok) {
397
+ const code = body.error?.code ?? `http_${res.status}`;
398
+ throw new Error(`sendMessage to "${input.to}" failed (${code})${body.error?.message ? `: ${body.error.message}` : ''}`);
399
+ }
400
+ return body.data ?? body;
401
+ }
402
+ /** Send a request frame keyed by `id` and await its reply/error. */
403
+ request(id, frame) {
404
+ if (!this.ws || this.ws.readyState !== 1) {
405
+ return Promise.reject(new Error('node provider websocket is not open'));
406
+ }
407
+ return new Promise((resolve, reject) => {
408
+ this.pending.set(id, { resolve, reject });
409
+ try {
410
+ this.ws.send(JSON.stringify({ v: 1, id, ...frame }));
411
+ }
412
+ catch (err) {
413
+ this.pending.delete(id);
414
+ reject(err instanceof Error ? err : new Error(String(err)));
415
+ }
416
+ });
417
+ }
418
+ sendFrame(frame) {
419
+ if (!this.ws || this.ws.readyState !== 1)
420
+ return;
421
+ try {
422
+ this.ws.send(JSON.stringify({ v: 1, ...frame }));
423
+ }
424
+ catch (err) {
425
+ if (this.debug)
426
+ this.reportError(err);
427
+ }
428
+ }
429
+ startHeartbeat() {
430
+ this.stopHeartbeat();
431
+ this.heartbeatTimer = setInterval(() => {
432
+ this.sendFrame({
433
+ type: 'node.heartbeat',
434
+ provider: this.providerIdentity(),
435
+ load: 0,
436
+ active_agents: 0,
437
+ handlers_live: true,
438
+ });
439
+ }, this.heartbeatIntervalMs);
440
+ }
441
+ stopHeartbeat() {
442
+ if (this.heartbeatTimer) {
443
+ clearInterval(this.heartbeatTimer);
444
+ this.heartbeatTimer = null;
445
+ }
446
+ }
447
+ scheduleReconnect() {
448
+ if (this.stopped || this.reconnectTimer)
449
+ return;
450
+ if (this.reconnectAttempt >= this.maxReconnectAttempts) {
451
+ const err = new Error('node provider exhausted reconnect attempts');
452
+ this.reportError(err);
453
+ this.stopped = true;
454
+ // If registration never completed, reject its waiter too — otherwise
455
+ // whenRegistered() would hang forever after reconnects are exhausted.
456
+ this.rejectRegister?.(err);
457
+ this.rejectRegister = null;
458
+ this.resolveRegister = null;
459
+ this.settleServe(err);
460
+ return;
461
+ }
462
+ this.reconnectAttempt += 1;
463
+ const exp = Math.min(this.reconnectBaseDelayMs * 2 ** (this.reconnectAttempt - 1), this.reconnectMaxDelayMs);
464
+ const delay = this.reconnectJitter ? Math.round(exp * (0.5 + Math.random())) : exp;
465
+ this.reconnectTimer = setTimeout(() => {
466
+ this.reconnectTimer = null;
467
+ this.openSocket();
468
+ }, delay);
469
+ }
470
+ clearReconnect() {
471
+ if (this.reconnectTimer) {
472
+ clearTimeout(this.reconnectTimer);
473
+ this.reconnectTimer = null;
474
+ }
475
+ }
476
+ rejectPending(err) {
477
+ for (const p of this.pending.values())
478
+ p.reject(err);
479
+ this.pending.clear();
480
+ }
481
+ closeSocket() {
482
+ if (this.ws) {
483
+ this.ws.onopen = null;
484
+ this.ws.onmessage = null;
485
+ this.ws.onclose = null;
486
+ this.ws.onerror = null;
487
+ try {
488
+ this.ws.close();
489
+ }
490
+ catch {
491
+ // already closed
492
+ }
493
+ this.ws = null;
494
+ }
495
+ }
496
+ reportError(err) {
497
+ const error = err instanceof Error ? err : new Error(String(err));
498
+ if (this.onError)
499
+ this.onError(error);
500
+ else if (this.debug)
501
+ console.warn('[relaycast node-provider]', error);
502
+ }
503
+ }
504
+ function errorMessage(err) {
505
+ return err instanceof Error ? err.message : String(err);
506
+ }
507
+ //# sourceMappingURL=node-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-provider.js","sourceRoot":"","sources":["../src/node-provider.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const SDK_VERSION: "5.1.1";
1
+ export declare const SDK_VERSION: "6.0.1";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const SDK_VERSION = "5.1.1";
1
+ export const SDK_VERSION = "6.0.1";
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relaycast/sdk",
3
- "version": "5.1.1",
3
+ "version": "6.0.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "lint": "eslint src/"
29
29
  },
30
30
  "dependencies": {
31
- "@relaycast/types": "5.1.1",
31
+ "@relaycast/types": "6.0.1",
32
32
  "zod": "^4.3.6"
33
33
  },
34
34
  "devDependencies": {