@masons/runtime-broker 0.2.0 → 0.2.2
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/broker/broker-daemon.d.ts +8 -0
- package/dist/broker/broker-daemon.d.ts.map +1 -1
- package/dist/broker/broker-daemon.js +731 -81
- package/dist/broker/connector-ws.d.ts +4 -0
- package/dist/broker/connector-ws.d.ts.map +1 -1
- package/dist/broker/connector-ws.js +12 -0
- package/dist/broker/control-event-dispatcher.d.ts.map +1 -1
- package/dist/broker/control-event-dispatcher.js +34 -16
- package/dist/broker/control-event-types.d.ts +12 -2
- package/dist/broker/control-event-types.d.ts.map +1 -1
- package/dist/broker/delivery-cursor-file.d.ts +8 -0
- package/dist/broker/delivery-cursor-file.d.ts.map +1 -0
- package/dist/broker/delivery-cursor-file.js +71 -0
- package/dist/broker/endpoint-registry.d.ts +7 -0
- package/dist/broker/endpoint-registry.d.ts.map +1 -1
- package/dist/broker/endpoint-registry.js +3 -0
- package/dist/broker/entry.d.ts.map +1 -1
- package/dist/broker/entry.js +7 -1
- package/dist/broker/ipc-server.d.ts +33 -1
- package/dist/broker/ipc-server.d.ts.map +1 -1
- package/dist/broker/ipc-server.js +8 -1
- package/dist/broker/paths.d.ts +1 -0
- package/dist/broker/paths.d.ts.map +1 -1
- package/dist/broker/paths.js +1 -0
- package/dist/broker/reconnecting-buffer.d.ts +3 -0
- package/dist/broker/reconnecting-buffer.d.ts.map +1 -1
- package/dist/broker/reconnecting-buffer.js +3 -0
- package/dist/broker/runtime-endpoint-port.d.ts +4 -0
- package/dist/broker/runtime-endpoint-port.d.ts.map +1 -1
- package/dist/broker/runtime-inbound-routed-emitter.d.ts +22 -0
- package/dist/broker/runtime-inbound-routed-emitter.d.ts.map +1 -0
- package/dist/broker/runtime-inbound-routed-emitter.js +147 -0
- package/dist/broker/runtime-inbound-routed-event-types.d.ts +10 -0
- package/dist/broker/runtime-inbound-routed-event-types.d.ts.map +1 -0
- package/dist/broker/runtime-inbound-routed-event-types.js +1 -0
- package/dist/broker/runtime-processing-state-event-types.d.ts +26 -0
- package/dist/broker/runtime-processing-state-event-types.d.ts.map +1 -0
- package/dist/broker/runtime-processing-state-event-types.js +1 -0
- package/dist/broker/undispatched-changed-event-types.d.ts +1 -0
- package/dist/broker/undispatched-changed-event-types.d.ts.map +1 -1
- package/dist/broker/undispatched-inbox.d.ts +1 -0
- package/dist/broker/undispatched-inbox.d.ts.map +1 -1
- package/dist/broker/version-handshake.js +1 -1
- package/dist/broker-client/broker-client.d.ts +31 -0
- package/dist/broker-client/broker-client.d.ts.map +1 -1
- package/dist/broker-client/broker-client.js +30 -0
- package/dist/connector-client.d.ts +5 -0
- package/dist/connector-client.d.ts.map +1 -1
- package/dist/connector-client.js +47 -5
- package/dist/runtime-endpoint-client.d.ts +14 -0
- package/dist/runtime-endpoint-client.d.ts.map +1 -1
- package/dist/runtime-endpoint-client.js +66 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export const DEFAULT_INBOUND_ROUTED_EMITTER_CAPACITY = 1024;
|
|
2
|
+
export const DEFAULT_INBOUND_ROUTED_EMITTER_BACKOFF_INITIAL_MS = 500;
|
|
3
|
+
export const DEFAULT_INBOUND_ROUTED_EMITTER_BACKOFF_MAX_MS = 30_000;
|
|
4
|
+
export const DEFAULT_INBOUND_ROUTED_EMITTER_MAX_RETRIES = 5;
|
|
5
|
+
export function createRuntimeInboundRoutedEmitter(post, logger, opts = {}) {
|
|
6
|
+
const cap = opts.capacity ?? DEFAULT_INBOUND_ROUTED_EMITTER_CAPACITY;
|
|
7
|
+
const initialBackoff = opts.backoffInitialMs ?? DEFAULT_INBOUND_ROUTED_EMITTER_BACKOFF_INITIAL_MS;
|
|
8
|
+
const maxBackoff = opts.backoffMaxMs ?? DEFAULT_INBOUND_ROUTED_EMITTER_BACKOFF_MAX_MS;
|
|
9
|
+
const maxRetries = opts.maxRetries ?? DEFAULT_INBOUND_ROUTED_EMITTER_MAX_RETRIES;
|
|
10
|
+
if (cap <= 0)
|
|
11
|
+
throw new Error(`capacity must be positive: ${cap}`);
|
|
12
|
+
if (initialBackoff <= 0)
|
|
13
|
+
throw new Error(`backoffInitialMs must be positive: ${initialBackoff}`);
|
|
14
|
+
if (maxBackoff < initialBackoff)
|
|
15
|
+
throw new Error("backoffMaxMs must be >= backoffInitialMs");
|
|
16
|
+
if (maxRetries < 0)
|
|
17
|
+
throw new Error(`maxRetries must be non-negative: ${maxRetries}`);
|
|
18
|
+
const queue = [];
|
|
19
|
+
let draining = false;
|
|
20
|
+
let stopped = false;
|
|
21
|
+
let activeDrain = null;
|
|
22
|
+
let wakeSleep = null;
|
|
23
|
+
const sleep = (ms) => new Promise((resolve) => {
|
|
24
|
+
const t = setTimeout(() => {
|
|
25
|
+
wakeSleep = null;
|
|
26
|
+
resolve();
|
|
27
|
+
}, ms);
|
|
28
|
+
t.unref?.();
|
|
29
|
+
wakeSleep = () => {
|
|
30
|
+
clearTimeout(t);
|
|
31
|
+
wakeSleep = null;
|
|
32
|
+
resolve();
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
const drain = async () => {
|
|
36
|
+
while (!stopped && queue.length > 0) {
|
|
37
|
+
const event = queue[0];
|
|
38
|
+
if (!event)
|
|
39
|
+
break;
|
|
40
|
+
let attempts = 0;
|
|
41
|
+
while (true) {
|
|
42
|
+
if (stopped)
|
|
43
|
+
return;
|
|
44
|
+
let outcome;
|
|
45
|
+
try {
|
|
46
|
+
outcome = await post(event);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
outcome = {
|
|
50
|
+
ok: false,
|
|
51
|
+
terminal: false,
|
|
52
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (outcome.ok)
|
|
56
|
+
break;
|
|
57
|
+
if (outcome.terminal) {
|
|
58
|
+
logger.warn("runtime_inbound_routed_drop_terminal", {
|
|
59
|
+
source_message_id: event.source_message_id,
|
|
60
|
+
routed_to_endpoint_id: event.routed_to_endpoint_id,
|
|
61
|
+
status: outcome.status,
|
|
62
|
+
detail: outcome.detail,
|
|
63
|
+
});
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
attempts++;
|
|
67
|
+
if (attempts > maxRetries) {
|
|
68
|
+
logger.warn("runtime_inbound_routed_drop_max_retries", {
|
|
69
|
+
source_message_id: event.source_message_id,
|
|
70
|
+
routed_to_endpoint_id: event.routed_to_endpoint_id,
|
|
71
|
+
attempts,
|
|
72
|
+
status: outcome.status,
|
|
73
|
+
detail: outcome.detail,
|
|
74
|
+
});
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
const backoff = Math.min(initialBackoff * 2 ** (attempts - 1), maxBackoff);
|
|
78
|
+
logger.info("runtime_inbound_routed_retry", {
|
|
79
|
+
source_message_id: event.source_message_id,
|
|
80
|
+
routed_to_endpoint_id: event.routed_to_endpoint_id,
|
|
81
|
+
attempt: attempts,
|
|
82
|
+
backoff_ms: backoff,
|
|
83
|
+
status: outcome.status,
|
|
84
|
+
});
|
|
85
|
+
await sleep(backoff);
|
|
86
|
+
}
|
|
87
|
+
queue.shift();
|
|
88
|
+
}
|
|
89
|
+
draining = false;
|
|
90
|
+
};
|
|
91
|
+
const kick = () => {
|
|
92
|
+
if (draining || stopped)
|
|
93
|
+
return;
|
|
94
|
+
draining = true;
|
|
95
|
+
activeDrain = drain().catch((err) => {
|
|
96
|
+
logger.error("runtime_inbound_routed_drain_unexpected_error", {
|
|
97
|
+
err: err instanceof Error ? err.message : String(err),
|
|
98
|
+
});
|
|
99
|
+
draining = false;
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
enqueue(event) {
|
|
104
|
+
if (stopped)
|
|
105
|
+
return true;
|
|
106
|
+
let evicted = false;
|
|
107
|
+
if (queue.length >= cap) {
|
|
108
|
+
const old = queue.shift();
|
|
109
|
+
if (old) {
|
|
110
|
+
logger.warn("runtime_inbound_routed_queue_overflow", {
|
|
111
|
+
dropped_source_message_id: old.source_message_id,
|
|
112
|
+
size: queue.length,
|
|
113
|
+
capacity: cap,
|
|
114
|
+
});
|
|
115
|
+
evicted = true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
queue.push(event);
|
|
119
|
+
kick();
|
|
120
|
+
return !evicted;
|
|
121
|
+
},
|
|
122
|
+
size() {
|
|
123
|
+
return queue.length;
|
|
124
|
+
},
|
|
125
|
+
capacity() {
|
|
126
|
+
return cap;
|
|
127
|
+
},
|
|
128
|
+
async shutdown() {
|
|
129
|
+
stopped = true;
|
|
130
|
+
wakeSleep?.();
|
|
131
|
+
if (activeDrain)
|
|
132
|
+
await activeDrain.catch(() => { });
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
export function postRuntimeInboundRoutedViaPort(apiPort) {
|
|
137
|
+
return async (event) => {
|
|
138
|
+
if (!apiPort.emitRuntimeInboundRouted) {
|
|
139
|
+
return {
|
|
140
|
+
ok: false,
|
|
141
|
+
terminal: true,
|
|
142
|
+
detail: "emitRuntimeInboundRouted not implemented on this apiPort",
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return apiPort.emitRuntimeInboundRouted(event);
|
|
146
|
+
};
|
|
147
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type RuntimeInboundRouteKind = "active_endpoint" | "reconnecting_endpoint";
|
|
2
|
+
export interface RuntimeInboundRoutedEvent {
|
|
3
|
+
type: "runtime_inbound_routed";
|
|
4
|
+
version: 1;
|
|
5
|
+
source_message_id: string;
|
|
6
|
+
routed_to_endpoint_id: string;
|
|
7
|
+
route_kind: RuntimeInboundRouteKind;
|
|
8
|
+
routed_at: number;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=runtime-inbound-routed-event-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-inbound-routed-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/runtime-inbound-routed-event-types.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,uBAAuB,GAC/B,iBAAiB,GACjB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC;IAIX,iBAAiB,EAAE,MAAM,CAAC;IAK1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,uBAAuB,CAAC;IAEpC,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type BackgroundExchangeMode = "resident_endpoint" | "adapter_managed_turn";
|
|
2
|
+
export interface RuntimeWorkTargetRef {
|
|
3
|
+
kind: "projection_endpoint";
|
|
4
|
+
projection_endpoint_id: string;
|
|
5
|
+
runtime_session_id?: string;
|
|
6
|
+
background_exchange_mode: BackgroundExchangeMode;
|
|
7
|
+
}
|
|
8
|
+
export type RuntimeProcessingState = "assigned_to_runtime_target" | "adapter_accepted" | "processing_started" | "reply_requested" | "reply_emitted" | "processing_failed" | "waiting_for_runtime_capability" | "target_lost_before_acceptance" | "processing_interrupted" | "expired";
|
|
9
|
+
export interface RuntimeProcessingStateEvent {
|
|
10
|
+
type: "runtime_processing_state";
|
|
11
|
+
version: 1;
|
|
12
|
+
source_message_id: string;
|
|
13
|
+
assignment_id: string;
|
|
14
|
+
state_event_id: string;
|
|
15
|
+
state_sequence: number;
|
|
16
|
+
target_ref: RuntimeWorkTargetRef;
|
|
17
|
+
state: RuntimeProcessingState;
|
|
18
|
+
occurred_at: number;
|
|
19
|
+
undispatched_id?: string;
|
|
20
|
+
retryable?: boolean;
|
|
21
|
+
reason_code?: string;
|
|
22
|
+
detail?: string;
|
|
23
|
+
reply_request_id?: string;
|
|
24
|
+
outbound_message_id?: string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=runtime-processing-state-event-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-processing-state-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/runtime-processing-state-event-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,sBAAsB,CAAC;CAClD;AAED,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,kBAAkB,GAClB,oBAAoB,GACpB,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,gCAAgC,GAChC,+BAA+B,GAC/B,wBAAwB,GACxB,SAAS,CAAC;AAEd,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,oBAAoB,CAAC;IACjC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undispatched-changed-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/undispatched-changed-event-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"undispatched-changed-event-types.d.ts","sourceRoot":"","sources":["../../src/broker/undispatched-changed-event-types.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAMjD,MAAM,MAAM,kBAAkB,GAC1B,oBAAoB,GACpB,6BAA6B,CAAC;AAOlC,MAAM,MAAM,wBAAwB,GAWlC,2CAA2C,CAAC;AAG9C,UAAU,4BAA4B;IACpC,IAAI,EAAE,sBAAsB,CAAC;IAG7B,OAAO,EAAE,CAAC,CAAC;IAEX,eAAe,EAAE,MAAM,CAAC;IAKxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,WAAW,oBAAqB,SAAQ,4BAA4B;IACxE,MAAM,EAAE,KAAK,CAAC;IAEd,cAAc,EAAE,MAAM,CAAC;IASvB,eAAe,EAAE,MAAM,CAAC;IAExB,MAAM,EAAE,kBAAkB,CAAC;IAO3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAMjC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,yBACf,SAAQ,4BAA4B;IACpC,MAAM,EAAE,UAAU,CAAC;IAQnB,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAID,MAAM,WAAW,uBAAwB,SAAQ,4BAA4B;IAC3E,MAAM,EAAE,QAAQ,CAAC;IACjB,aAAa,EAAE,wBAAwB,CAAC;CACzC;AAED,MAAM,MAAM,wBAAwB,GAChC,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,CAAC;AAqB5B,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,CAAC,GAAE,MAAuC,GACzC,MAAM,CAYR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undispatched-inbox.d.ts","sourceRoot":"","sources":["../../src/broker/undispatched-inbox.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"undispatched-inbox.d.ts","sourceRoot":"","sources":["../../src/broker/undispatched-inbox.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMlC,MAAM,EAAE,aAAa,GAAG,6BAA6B,CAAC;IAEtD,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAMhC,MAAM,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAE1C,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAE9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;IAKjD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;IAElD,IAAI,IAAI,MAAM,CAAC;IAEf,QAAQ,IAAI,MAAM,CAAC;IAEnB,eAAe,IAAI,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,GAAE,wBAA6B,GAClC,iBAAiB,CAkDnB"}
|
|
@@ -2,7 +2,7 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
export const IPC_PROTOCOL_VERSION = "1.0";
|
|
3
3
|
export const SERVER_CAPABILITIES = Object.freeze({
|
|
4
4
|
endpoint_metadata_v1: true,
|
|
5
|
-
remote_spawn_v1:
|
|
5
|
+
remote_spawn_v1: true,
|
|
6
6
|
undispatched_inbox_v1: false,
|
|
7
7
|
});
|
|
8
8
|
export function handleInitialize(req, ctx) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import type { NetworkPresence } from "../broker/network-presence.js";
|
|
3
|
+
import type { RuntimeProcessingState, RuntimeWorkTargetRef } from "../broker/runtime-processing-state-event-types.js";
|
|
3
4
|
import { type InitializeResponseBody } from "../broker/version-handshake.js";
|
|
5
|
+
import type { EndpointBackgroundExchangeMode, EndpointExecutionSurface, RuntimeEndpointCapability } from "../runtime-endpoint-client.js";
|
|
4
6
|
export declare class ConnectorUnavailableError extends Error {
|
|
5
7
|
readonly code: "connector_unavailable";
|
|
6
8
|
readonly retryable: true;
|
|
@@ -27,6 +29,9 @@ export interface RegisterEndpointArgs {
|
|
|
27
29
|
workspace?: string;
|
|
28
30
|
trackingRef?: string;
|
|
29
31
|
taskHint?: string;
|
|
32
|
+
runtimeCapabilities?: RuntimeEndpointCapability[];
|
|
33
|
+
executionSurface?: EndpointExecutionSurface;
|
|
34
|
+
backgroundExchangeMode?: EndpointBackgroundExchangeMode;
|
|
30
35
|
spawnToken?: string;
|
|
31
36
|
}
|
|
32
37
|
export interface RegisterEndpointOutcome {
|
|
@@ -37,6 +42,31 @@ export interface BrokerInboundMessage {
|
|
|
37
42
|
content: string;
|
|
38
43
|
contentType: string;
|
|
39
44
|
metadata?: Record<string, unknown>;
|
|
45
|
+
sourceMessageId?: string;
|
|
46
|
+
runtimeAssignment?: BrokerRuntimeAssignmentContext;
|
|
47
|
+
}
|
|
48
|
+
export interface BrokerRuntimeAssignmentContext {
|
|
49
|
+
undispatchedId: string;
|
|
50
|
+
sourceMessageId: string;
|
|
51
|
+
assignmentId: string;
|
|
52
|
+
targetRef: RuntimeWorkTargetRef;
|
|
53
|
+
deliveryIntent: "external_handoff";
|
|
54
|
+
replyCorrelationId?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ReportRuntimeProcessingStateArgs {
|
|
57
|
+
endpointId: string;
|
|
58
|
+
sourceMessageId: string;
|
|
59
|
+
assignmentId: string;
|
|
60
|
+
stateEventId: string;
|
|
61
|
+
stateSequence: number;
|
|
62
|
+
state: RuntimeProcessingState;
|
|
63
|
+
occurredAt?: number;
|
|
64
|
+
undispatchedId?: string;
|
|
65
|
+
retryable?: boolean;
|
|
66
|
+
reasonCode?: string;
|
|
67
|
+
detail?: string;
|
|
68
|
+
replyRequestId?: string;
|
|
69
|
+
outboundMessageId?: string;
|
|
40
70
|
}
|
|
41
71
|
type Events = {
|
|
42
72
|
message_received: (msg: BrokerInboundMessage) => void;
|
|
@@ -62,6 +92,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
62
92
|
messageId: string;
|
|
63
93
|
status: string;
|
|
64
94
|
}>;
|
|
95
|
+
reportRuntimeProcessingState(args: ReportRuntimeProcessingStateArgs): Promise<void>;
|
|
65
96
|
close(endpointId?: string): Promise<void>;
|
|
66
97
|
on<K extends keyof Events>(event: K, listener: Events[K]): this;
|
|
67
98
|
on(event: string | symbol, listener: (...args: unknown[]) => void): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/broker-client/broker-client.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/broker-client/broker-client.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAevC,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAU;IACjD,QAAQ,CAAC,SAAS,EAAG,IAAI,CAAU;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAgBD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAClD,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;IAC5C,sBAAsB,CAAC,EAAE,8BAA8B,CAAC;IAQxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;CACpD;AAED,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,oBAAoB,CAAC;IAChC,cAAc,EAAE,kBAAkB,CAAC;IAEnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,KAAK,MAAM,GAAG;IACZ,gBAAgB,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAStD,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAC7B,CAAC;AAEF,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAuB;IAOzC,OAAO,CAAC,gBAAgB,CAAgC;IAExD,OAAO;WAUM,QAAQ,CACnB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,YAAY,CAAC;IAqBxB,IAAI,UAAU,IAAI,OAAO,CAExB;IAGD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAGD,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAWD,IAAI,eAAe,IAAI,eAAe,GAAG,IAAI,CAE5C;IAGK,OAAO,CACX,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,sBAAsB,CAAC;IA0D5B,gBAAgB,CACpB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,uBAAuB,CAAC;IA0B7B,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,WAAW,SAAS,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAU3C,4BAA4B,CAChC,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,IAAI,CAAC;IAyBV,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtC,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAC/D,EAAE,CACT,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAQE,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IACjE,IAAI,CACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAQE,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAChE,GAAG,CACV,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAQE,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAClC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAC7B,OAAO;IACD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;YASpD,QAAQ;IA0CtB,OAAO,CAAC,WAAW;CA+CpB"}
|
|
@@ -113,6 +113,9 @@ export class BrokerClient extends EventEmitter {
|
|
|
113
113
|
workspace: args.workspace,
|
|
114
114
|
tracking_ref: args.trackingRef,
|
|
115
115
|
task_hint: args.taskHint,
|
|
116
|
+
runtime_capabilities: args.runtimeCapabilities,
|
|
117
|
+
execution_surface: args.executionSurface,
|
|
118
|
+
background_exchange_mode: args.backgroundExchangeMode,
|
|
116
119
|
spawn_token: args.spawnToken,
|
|
117
120
|
});
|
|
118
121
|
}
|
|
@@ -125,6 +128,27 @@ export class BrokerClient extends EventEmitter {
|
|
|
125
128
|
metadata,
|
|
126
129
|
});
|
|
127
130
|
}
|
|
131
|
+
async reportRuntimeProcessingState(args) {
|
|
132
|
+
if (this.pluginPid === null) {
|
|
133
|
+
throw new Error("BrokerClient.connect must be called before reportRuntimeProcessingState");
|
|
134
|
+
}
|
|
135
|
+
await this.httpJson("POST", "/v1/runtime/processing-state", {
|
|
136
|
+
endpoint_id: args.endpointId,
|
|
137
|
+
plugin_pid: this.pluginPid,
|
|
138
|
+
source_message_id: args.sourceMessageId,
|
|
139
|
+
assignment_id: args.assignmentId,
|
|
140
|
+
state_event_id: args.stateEventId,
|
|
141
|
+
state_sequence: args.stateSequence,
|
|
142
|
+
state: args.state,
|
|
143
|
+
occurred_at: args.occurredAt ?? Date.now(),
|
|
144
|
+
undispatched_id: args.undispatchedId,
|
|
145
|
+
retryable: args.retryable,
|
|
146
|
+
reason_code: args.reasonCode,
|
|
147
|
+
detail: args.detail,
|
|
148
|
+
reply_request_id: args.replyRequestId,
|
|
149
|
+
outbound_message_id: args.outboundMessageId,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
128
152
|
async close(endpointId) {
|
|
129
153
|
if (endpointId) {
|
|
130
154
|
try {
|
|
@@ -197,6 +221,12 @@ export class BrokerClient extends EventEmitter {
|
|
|
197
221
|
content: msg.content,
|
|
198
222
|
contentType: msg.contentType,
|
|
199
223
|
metadata: msg.metadata,
|
|
224
|
+
...(msg.sourceMessageId !== undefined && {
|
|
225
|
+
sourceMessageId: msg.sourceMessageId,
|
|
226
|
+
}),
|
|
227
|
+
...(msg.runtimeAssignment !== undefined && {
|
|
228
|
+
runtimeAssignment: msg.runtimeAssignment,
|
|
229
|
+
}),
|
|
200
230
|
});
|
|
201
231
|
return;
|
|
202
232
|
}
|
|
@@ -27,6 +27,7 @@ export declare class ConnectorClient extends EventEmitter {
|
|
|
27
27
|
private registerReject;
|
|
28
28
|
private registerTimer;
|
|
29
29
|
private lastKnownSeq;
|
|
30
|
+
private readonly acceptedDeliveryGaps;
|
|
30
31
|
private pendingSends;
|
|
31
32
|
constructor(url: string, token: string);
|
|
32
33
|
connect(): Promise<void>;
|
|
@@ -34,6 +35,10 @@ export declare class ConnectorClient extends EventEmitter {
|
|
|
34
35
|
send(to: string, content: string, contentType?: string, metadata?: Record<string, unknown>): Promise<SendAckEvent>;
|
|
35
36
|
sendTyping(to: string, isTyping: boolean): boolean;
|
|
36
37
|
ackDelivery(upTo: string): boolean;
|
|
38
|
+
setDeliveryCursor(seq: number): void;
|
|
39
|
+
getDeliveryCursor(): number | undefined;
|
|
40
|
+
prepareDeliverySeqAccepted(seq: number): number | undefined;
|
|
41
|
+
markDeliverySeqAccepted(seq: number): number | undefined;
|
|
37
42
|
on<K extends keyof ConnectorClientEvents>(event: K, listener: ConnectorClientEvents[K]): this;
|
|
38
43
|
on(event: string | symbol, listener: (...args: unknown[]) => void): this;
|
|
39
44
|
once<K extends keyof ConnectorClientEvents>(event: K, listener: ConnectorClientEvents[K]): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector-client.d.ts","sourceRoot":"","sources":["../src/connector-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAEL,KAAK,qBAAqB,EAI1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAWxB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,YAAY,CAAC;AA0BpB,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;gBACT,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM;CAMvD;AAID,KAAK,qBAAqB,GAAG;IAC3B,gBAAgB,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACxD,eAAe,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,gBAAgB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC;AAIF,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,cAAc,CAA8C;IAEpE,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,aAAa,CAA8C;
|
|
1
|
+
{"version":3,"file":"connector-client.d.ts","sourceRoot":"","sources":["../src/connector-client.ts"],"names":[],"mappings":"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"}
|
package/dist/connector-client.js
CHANGED
|
@@ -35,6 +35,7 @@ export class ConnectorClient extends EventEmitter {
|
|
|
35
35
|
registerReject = null;
|
|
36
36
|
registerTimer = null;
|
|
37
37
|
lastKnownSeq;
|
|
38
|
+
acceptedDeliveryGaps = new Set();
|
|
38
39
|
pendingSends = new Map();
|
|
39
40
|
constructor(url, token) {
|
|
40
41
|
super();
|
|
@@ -97,6 +98,50 @@ export class ConnectorClient extends EventEmitter {
|
|
|
97
98
|
dbg("ackDelivery upTo=%s sent=%s", upTo, sent);
|
|
98
99
|
return sent;
|
|
99
100
|
}
|
|
101
|
+
setDeliveryCursor(seq) {
|
|
102
|
+
if (!Number.isInteger(seq) || seq < 0) {
|
|
103
|
+
throw new Error(`delivery cursor must be a non-negative integer: ${seq}`);
|
|
104
|
+
}
|
|
105
|
+
this.lastKnownSeq = seq;
|
|
106
|
+
for (const accepted of [...this.acceptedDeliveryGaps]) {
|
|
107
|
+
if (accepted <= seq)
|
|
108
|
+
this.acceptedDeliveryGaps.delete(accepted);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
getDeliveryCursor() {
|
|
112
|
+
return this.lastKnownSeq;
|
|
113
|
+
}
|
|
114
|
+
prepareDeliverySeqAccepted(seq) {
|
|
115
|
+
if (!Number.isInteger(seq) || seq < 0)
|
|
116
|
+
return this.lastKnownSeq;
|
|
117
|
+
const floor = this.lastKnownSeq ?? 0;
|
|
118
|
+
if (seq <= floor)
|
|
119
|
+
return this.lastKnownSeq;
|
|
120
|
+
const pending = new Set(this.acceptedDeliveryGaps);
|
|
121
|
+
pending.add(seq);
|
|
122
|
+
let cursor = this.lastKnownSeq;
|
|
123
|
+
let next = floor + 1;
|
|
124
|
+
while (pending.has(next)) {
|
|
125
|
+
cursor = next;
|
|
126
|
+
next++;
|
|
127
|
+
}
|
|
128
|
+
return cursor;
|
|
129
|
+
}
|
|
130
|
+
markDeliverySeqAccepted(seq) {
|
|
131
|
+
if (!Number.isInteger(seq) || seq < 0)
|
|
132
|
+
return this.lastKnownSeq;
|
|
133
|
+
const floor = this.lastKnownSeq ?? 0;
|
|
134
|
+
if (seq <= floor)
|
|
135
|
+
return this.lastKnownSeq;
|
|
136
|
+
this.acceptedDeliveryGaps.add(seq);
|
|
137
|
+
let next = floor + 1;
|
|
138
|
+
while (this.acceptedDeliveryGaps.has(next)) {
|
|
139
|
+
this.acceptedDeliveryGaps.delete(next);
|
|
140
|
+
this.lastKnownSeq = next;
|
|
141
|
+
next++;
|
|
142
|
+
}
|
|
143
|
+
return this.lastKnownSeq;
|
|
144
|
+
}
|
|
100
145
|
on(event, listener) {
|
|
101
146
|
return super.on(event, listener);
|
|
102
147
|
}
|
|
@@ -130,6 +175,7 @@ export class ConnectorClient extends EventEmitter {
|
|
|
130
175
|
token: this.token,
|
|
131
176
|
protocolVersion: CURRENT_PROTOCOL_VERSION,
|
|
132
177
|
clientVersion: PLUGIN_VERSION,
|
|
178
|
+
clientKind: "runtime-broker",
|
|
133
179
|
...(this.lastKnownSeq !== undefined
|
|
134
180
|
? { lastKnownSeq: this.lastKnownSeq }
|
|
135
181
|
: {}),
|
|
@@ -188,10 +234,6 @@ export class ConnectorClient extends EventEmitter {
|
|
|
188
234
|
}
|
|
189
235
|
if (isAddressedMessage(parsed)) {
|
|
190
236
|
dbgMsg("MESSAGE_RECEIVED from=%s contentLength=%d seq=%s", parsed.from, parsed.content.length, parsed.seq ?? "none");
|
|
191
|
-
if (typeof parsed.seq === "number" &&
|
|
192
|
-
(this.lastKnownSeq === undefined || parsed.seq > this.lastKnownSeq)) {
|
|
193
|
-
this.lastKnownSeq = parsed.seq;
|
|
194
|
-
}
|
|
195
237
|
this.emit("message_received", parsed);
|
|
196
238
|
return;
|
|
197
239
|
}
|
|
@@ -220,7 +262,7 @@ export class ConnectorClient extends EventEmitter {
|
|
|
220
262
|
setEnvironmentContext(ack.agent, ack.owner);
|
|
221
263
|
if (typeof ack.deliverySeq === "number" &&
|
|
222
264
|
this.lastKnownSeq === undefined) {
|
|
223
|
-
this.
|
|
265
|
+
this.setDeliveryCursor(ack.deliverySeq);
|
|
224
266
|
dbg("delivery cursor initialized: %d", ack.deliverySeq);
|
|
225
267
|
}
|
|
226
268
|
this.backoffMs = BACKOFF_INITIAL_MS;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { PlatformApiError, type PlatformClientConfig } from "./platform-client.js";
|
|
2
2
|
export { PlatformApiError, type PlatformClientConfig };
|
|
3
3
|
export type RuntimeKind = "claude-code" | "openclaw" | "codex" | "passport" | "custom" | (string & {});
|
|
4
|
+
export type RuntimeEndpointCapability = "remote_spawn_v1" | "background_exchange_v1" | "foreground_channel_v1" | (string & {});
|
|
5
|
+
export type EndpointExecutionSurface = "owner_attached" | "headless" | (string & {});
|
|
6
|
+
export type EndpointBackgroundExchangeMode = "resident_endpoint" | "adapter_managed_turn" | (string & {});
|
|
4
7
|
export interface WorkspaceMetadata {
|
|
5
8
|
root: string;
|
|
6
9
|
cwd: string;
|
|
@@ -18,12 +21,18 @@ export interface RegisterRuntimeEndpointParams {
|
|
|
18
21
|
task_hint?: string;
|
|
19
22
|
workspace?: WorkspaceMetadata;
|
|
20
23
|
tracking_ref?: string;
|
|
24
|
+
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
25
|
+
execution_surface?: EndpointExecutionSurface;
|
|
26
|
+
background_exchange_mode?: EndpointBackgroundExchangeMode;
|
|
21
27
|
share_with_peer?: ShareWithPeerField[];
|
|
22
28
|
}
|
|
23
29
|
export interface RegisterRuntimeEndpointResponse {
|
|
24
30
|
endpoint_id: string;
|
|
25
31
|
node_id: string;
|
|
26
32
|
display_label: string;
|
|
33
|
+
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
34
|
+
execution_surface?: EndpointExecutionSurface;
|
|
35
|
+
background_exchange_mode?: EndpointBackgroundExchangeMode;
|
|
27
36
|
heartbeat_after_seconds: number;
|
|
28
37
|
lease_ttl_seconds: number;
|
|
29
38
|
soft_retention_seconds: number;
|
|
@@ -41,6 +50,9 @@ export interface OwnedRuntimeEndpointView {
|
|
|
41
50
|
fingerprint?: {
|
|
42
51
|
workspace_hash_per_peer?: Record<string, string>;
|
|
43
52
|
};
|
|
53
|
+
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
54
|
+
execution_surface?: EndpointExecutionSurface;
|
|
55
|
+
background_exchange_mode?: EndpointBackgroundExchangeMode;
|
|
44
56
|
registered_at: string;
|
|
45
57
|
retired_at?: string;
|
|
46
58
|
is_self: boolean;
|
|
@@ -78,4 +90,6 @@ export type EmitUndispatchedChangedOutcome = {
|
|
|
78
90
|
detail?: string;
|
|
79
91
|
};
|
|
80
92
|
export declare function emitRuntimeNetworkPresenceChanged(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
93
|
+
export declare function emitRuntimeInboundRouted(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
94
|
+
export declare function emitRuntimeProcessingState(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
81
95
|
//# sourceMappingURL=runtime-endpoint-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,gBAAgB,EAChB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,CAAC;AAmBvD,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,UAAU,GACV,OAAO,GACP,UAAU,GACV,QAAQ,GACR,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAalB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,cAAc,GACd,oBAAoB,GACpB,aAAa,GACb,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAUlB,MAAM,WAAW,6BAA6B;IAQ5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,WAAW,CAAC;IAO1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAE9B,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,gBAAgB,EAChB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,CAAC;AAmBvD,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,UAAU,GACV,OAAO,GACP,UAAU,GACV,QAAQ,GACR,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,yBAAyB,GACjC,iBAAiB,GACjB,wBAAwB,GACxB,uBAAuB,GACvB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAChB,UAAU,GACV,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,8BAA8B,GACtC,mBAAmB,GACnB,sBAAsB,GACtB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAalB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,cAAc,GACd,oBAAoB,GACpB,aAAa,GACb,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAUlB,MAAM,WAAW,6BAA6B;IAQ5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,WAAW,CAAC;IAO1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAE9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAEnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAK1D,eAAe,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACxC;AAcD,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB;AAeD,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IAKpB,OAAO,EAAE,MAAM,CAAC;IAUhB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAQ5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAYtB,WAAW,CAAC,EAAE;QACZ,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClD,CAAC;IACF,oBAAoB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAOpB,OAAO,EAAE,OAAO,CAAC;CAClB;AASD,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,wBAAwB,EAAE,CAAC;CACnC;AAUD,MAAM,MAAM,gCAAgC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAQvE,MAAM,MAAM,iCAAiC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAYxE,MAAM,WAAW,oCAAoC;IAEnD,KAAK,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ,CAAC;IAG5C,MAAM,EAAE,MAAM,CAAC;IAEf,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,sCAAsC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7E,MAAM,WAAW,0CAA0C;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4DD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,+BAA+B,CAAC,CAQ1C;AAiBD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gCAAgC,CAAC,CAY3C;AA0BD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oCAAoC,GAC3C,OAAO,CAAC,sCAAsC,CAAC,CAYjD;AAED,wBAAsB,oCAAoC,CACxD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iCAAiC,CAAC,CAc5C;AAgBD,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iCAAiC,CAAC,CAO5C;AAWD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC,CAUnC;AA0BD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAOlB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CAoCzC;AAED,MAAM,MAAM,8BAA8B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAqBvE,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CA8BzC;AAOD,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CA8BzC;AAMD,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC,CA8BzC"}
|
|
@@ -157,6 +157,72 @@ export async function emitRuntimeNetworkPresenceChanged(cfg, runtimeKey, event)
|
|
|
157
157
|
detail: await readErrorDetail(res),
|
|
158
158
|
};
|
|
159
159
|
}
|
|
160
|
+
export async function emitRuntimeInboundRouted(cfg, runtimeKey, event) {
|
|
161
|
+
let res;
|
|
162
|
+
try {
|
|
163
|
+
res = await fetch(`${baseUrl(cfg)}/runtime/inbound-routed`, {
|
|
164
|
+
method: "POST",
|
|
165
|
+
headers: jsonHeaders(runtimeKey),
|
|
166
|
+
body: JSON.stringify(event),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
return {
|
|
171
|
+
ok: false,
|
|
172
|
+
terminal: false,
|
|
173
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
if (res.status === 204)
|
|
177
|
+
return { ok: true };
|
|
178
|
+
if (res.status === 401 || res.status === 422) {
|
|
179
|
+
return {
|
|
180
|
+
ok: false,
|
|
181
|
+
terminal: true,
|
|
182
|
+
status: res.status,
|
|
183
|
+
detail: await readErrorDetail(res),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
ok: false,
|
|
188
|
+
terminal: false,
|
|
189
|
+
status: res.status,
|
|
190
|
+
detail: await readErrorDetail(res),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export async function emitRuntimeProcessingState(cfg, runtimeKey, event) {
|
|
194
|
+
let res;
|
|
195
|
+
try {
|
|
196
|
+
res = await fetch(`${baseUrl(cfg)}/runtime/processing-state`, {
|
|
197
|
+
method: "POST",
|
|
198
|
+
headers: jsonHeaders(runtimeKey),
|
|
199
|
+
body: JSON.stringify(event),
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
return {
|
|
204
|
+
ok: false,
|
|
205
|
+
terminal: false,
|
|
206
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
if (res.status === 204)
|
|
210
|
+
return { ok: true };
|
|
211
|
+
if (res.status === 401 || res.status === 422 || res.status === 409) {
|
|
212
|
+
return {
|
|
213
|
+
ok: false,
|
|
214
|
+
terminal: true,
|
|
215
|
+
status: res.status,
|
|
216
|
+
detail: await readErrorDetail(res),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
ok: false,
|
|
221
|
+
terminal: false,
|
|
222
|
+
status: res.status,
|
|
223
|
+
detail: await readErrorDetail(res),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
160
226
|
async function readErrorDetail(res) {
|
|
161
227
|
try {
|
|
162
228
|
const body = (await res.json().catch(() => null));
|
package/dist/types.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export interface RegisterEvent {
|
|
|
6
6
|
token: string;
|
|
7
7
|
protocolVersion: number;
|
|
8
8
|
clientVersion?: string;
|
|
9
|
+
clientKind?: "runtime-broker";
|
|
9
10
|
lastKnownSeq?: number;
|
|
10
11
|
}
|
|
11
12
|
export interface AddressedSendEvent {
|
|
@@ -47,6 +48,7 @@ export interface SendAckEvent {
|
|
|
47
48
|
}
|
|
48
49
|
export interface AddressedMessageEvent {
|
|
49
50
|
event: "MESSAGE_RECEIVED";
|
|
51
|
+
messageId?: string;
|
|
50
52
|
from: string;
|
|
51
53
|
content: string;
|
|
52
54
|
contentType: string;
|