@masons/runtime-broker 0.2.12 → 0.2.13
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/version-handshake.d.ts +2 -0
- package/dist/broker/version-handshake.d.ts.map +1 -1
- package/dist/broker/version-handshake.js +3 -0
- package/dist/broker-client/broker-client.d.ts +2 -0
- package/dist/broker-client/broker-client.d.ts.map +1 -1
- package/dist/broker-client/broker-client.js +10 -0
- package/dist/broker-client/lazy-spawn.d.ts +1 -0
- package/dist/broker-client/lazy-spawn.d.ts.map +1 -1
- package/dist/broker-client/lazy-spawn.js +103 -13
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ export interface IpcCapabilities {
|
|
|
7
7
|
runtime_assignment_reply_v1?: boolean;
|
|
8
8
|
runtime_assignment_claim_v1?: boolean;
|
|
9
9
|
push_receipt_ack_v1?: boolean;
|
|
10
|
+
structured_workspace_v1?: boolean;
|
|
10
11
|
}
|
|
11
12
|
export declare const SERVER_CAPABILITIES: Readonly<IpcCapabilities>;
|
|
12
13
|
export interface InitializeRequestBody {
|
|
@@ -16,6 +17,7 @@ export interface InitializeRequestBody {
|
|
|
16
17
|
capabilities?: IpcCapabilities;
|
|
17
18
|
}
|
|
18
19
|
export interface InitializeResponseBody {
|
|
20
|
+
server_version?: string;
|
|
19
21
|
server_protocol_version: string;
|
|
20
22
|
server_capabilities: IpcCapabilities;
|
|
21
23
|
session_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-handshake.d.ts","sourceRoot":"","sources":["../../src/broker/version-handshake.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version-handshake.d.ts","sourceRoot":"","sources":["../../src/broker/version-handshake.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAM1C,MAAM,WAAW,eAAe;IAE9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAMtC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAGD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,eAAe,CAQxD,CAAC;AAEH,MAAM,WAAW,qBAAqB;IAEpC,uBAAuB,EAAE,MAAM,CAAC;IAEhC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IAErC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,eAAe,CAAC;IAErC,UAAU,EAAE,MAAM,CAAC;IAanB,gBAAgB,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,2BAA2B,GAAG,aAAa,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,qBAAqB,EAC1B,GAAG,EAAE;IAAE,eAAe,EAAE,eAAe,CAAA;CAAE,GAEvC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,CA4C7C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { PLUGIN_VERSION } from "../version.js";
|
|
2
3
|
export const IPC_PROTOCOL_VERSION = "1.1";
|
|
3
4
|
export const SERVER_CAPABILITIES = Object.freeze({
|
|
4
5
|
endpoint_metadata_v1: true,
|
|
@@ -7,6 +8,7 @@ export const SERVER_CAPABILITIES = Object.freeze({
|
|
|
7
8
|
runtime_assignment_reply_v1: true,
|
|
8
9
|
runtime_assignment_claim_v1: true,
|
|
9
10
|
push_receipt_ack_v1: true,
|
|
11
|
+
structured_workspace_v1: true,
|
|
10
12
|
});
|
|
11
13
|
export function handleInitialize(req, ctx) {
|
|
12
14
|
if (typeof req.client_protocol_version !== "string") {
|
|
@@ -42,6 +44,7 @@ export function handleInitialize(req, ctx) {
|
|
|
42
44
|
return {
|
|
43
45
|
status: 200,
|
|
44
46
|
body: {
|
|
47
|
+
server_version: PLUGIN_VERSION,
|
|
45
48
|
server_protocol_version: IPC_PROTOCOL_VERSION,
|
|
46
49
|
server_capabilities: { ...SERVER_CAPABILITIES },
|
|
47
50
|
session_id: randomUUID(),
|
|
@@ -122,6 +122,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
122
122
|
private _sessionId;
|
|
123
123
|
private _networkPresence;
|
|
124
124
|
private _serverCapabilities;
|
|
125
|
+
private _serverVersion;
|
|
125
126
|
private _clientKind;
|
|
126
127
|
private _clientVersion;
|
|
127
128
|
private readonly endpointOwnerTokens;
|
|
@@ -132,6 +133,7 @@ export declare class BrokerClient extends EventEmitter {
|
|
|
132
133
|
get sessionId(): string | null;
|
|
133
134
|
get networkPresence(): NetworkPresence | null;
|
|
134
135
|
get serverCapabilities(): Readonly<IpcCapabilities>;
|
|
136
|
+
get serverVersion(): string | null;
|
|
135
137
|
connect(opts: BrokerClientConnectOptions): Promise<InitializeResponseBody>;
|
|
136
138
|
registerEndpoint(args: RegisterEndpointArgs): Promise<RegisterEndpointOutcome>;
|
|
137
139
|
send(endpointId: string, to: string, content: string, contentType?: string, metadata?: Record<string, unknown>): Promise<{
|
|
@@ -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,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/broker-client/broker-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { EventEmitter } from "node:events";
|
|
|
2
2
|
import WebSocket from "ws";
|
|
3
3
|
import { resolveBrokerPaths } from "../broker/paths.js";
|
|
4
4
|
import { IPC_PROTOCOL_VERSION, } from "../broker/version-handshake.js";
|
|
5
|
+
import { PLUGIN_VERSION } from "../version.js";
|
|
5
6
|
import { discoverBroker } from "./lazy-spawn.js";
|
|
6
7
|
export class ConnectorUnavailableError extends Error {
|
|
7
8
|
code = "connector_unavailable";
|
|
@@ -39,6 +40,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
39
40
|
_sessionId = null;
|
|
40
41
|
_networkPresence = null;
|
|
41
42
|
_serverCapabilities = {};
|
|
43
|
+
_serverVersion = null;
|
|
42
44
|
_clientKind = null;
|
|
43
45
|
_clientVersion = null;
|
|
44
46
|
endpointOwnerTokens = new Map();
|
|
@@ -55,6 +57,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
55
57
|
timeoutMs: opts.timeoutMs,
|
|
56
58
|
brokerEntry: opts.brokerEntry,
|
|
57
59
|
nodeBinary: opts.nodeBinary,
|
|
60
|
+
expectedBrokerVersion: PLUGIN_VERSION,
|
|
58
61
|
env: {
|
|
59
62
|
MASONS_BROKER_ACCOUNT_ID: opts.accountId,
|
|
60
63
|
...(opts.userDataDir
|
|
@@ -80,6 +83,9 @@ export class BrokerClient extends EventEmitter {
|
|
|
80
83
|
get serverCapabilities() {
|
|
81
84
|
return this._serverCapabilities;
|
|
82
85
|
}
|
|
86
|
+
get serverVersion() {
|
|
87
|
+
return this._serverVersion;
|
|
88
|
+
}
|
|
83
89
|
async connect(opts) {
|
|
84
90
|
if (this.ws) {
|
|
85
91
|
throw new Error("BrokerClient already connected");
|
|
@@ -106,6 +112,10 @@ export class BrokerClient extends EventEmitter {
|
|
|
106
112
|
});
|
|
107
113
|
this._sessionId = initRes.session_id;
|
|
108
114
|
this._serverCapabilities = initRes.server_capabilities;
|
|
115
|
+
this._serverVersion =
|
|
116
|
+
typeof initRes.server_version === "string"
|
|
117
|
+
? initRes.server_version
|
|
118
|
+
: null;
|
|
109
119
|
this._networkPresence = initRes.network_presence;
|
|
110
120
|
const wsUrl = `${this.handle.record.ipcUrl.replace(/^http/, "ws")}/v1/stream`;
|
|
111
121
|
const ws = new WebSocket(wsUrl, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-spawn.d.ts","sourceRoot":"","sources":["../../src/broker-client/lazy-spawn.ts"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAE/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IAEvD,aAAa,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"lazy-spawn.d.ts","sourceRoot":"","sources":["../../src/broker-client/lazy-spawn.ts"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAE/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IAEvD,aAAa,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,OAAO,CAAC;IAKrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IAExB,OAAO,EAAE,OAAO,CAAC;CAClB;AA2BD,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,eAAe,CAAC,CAgE1B"}
|
|
@@ -12,15 +12,21 @@ export async function discoverBroker(opts) {
|
|
|
12
12
|
const poll = opts.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
13
13
|
if (!opts.forceSpawn) {
|
|
14
14
|
const existing = readDiscoveryFile(opts.discoveryFile);
|
|
15
|
-
if (existing
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if (existing) {
|
|
16
|
+
const health = await probeHealth(existing.ipcUrl, existing.bearerToken);
|
|
17
|
+
if (usableHealth(health, opts.expectedBrokerVersion)) {
|
|
18
|
+
return { record: existing, spawned: false };
|
|
19
|
+
}
|
|
20
|
+
if (replaceableOlderHealth(health, opts.expectedBrokerVersion)) {
|
|
21
|
+
await terminateDiscoveredBroker(existing, opts.pollIntervalMs ?? poll);
|
|
22
|
+
}
|
|
18
23
|
}
|
|
19
24
|
}
|
|
20
25
|
const acquired = await acquireSpawnLock({
|
|
21
26
|
discoveryFile: opts.discoveryFile,
|
|
22
27
|
deadline,
|
|
23
28
|
pollIntervalMs: poll,
|
|
29
|
+
expectedBrokerVersion: opts.expectedBrokerVersion,
|
|
24
30
|
});
|
|
25
31
|
if (acquired.kind === "existing") {
|
|
26
32
|
return { record: acquired.record, spawned: false };
|
|
@@ -28,15 +34,23 @@ export async function discoverBroker(opts) {
|
|
|
28
34
|
const { lock } = acquired;
|
|
29
35
|
try {
|
|
30
36
|
const recovered = readDiscoveryFile(opts.discoveryFile);
|
|
31
|
-
if (recovered
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
if (recovered) {
|
|
38
|
+
const health = await probeHealth(recovered.ipcUrl, recovered.bearerToken);
|
|
39
|
+
if (usableHealth(health, opts.expectedBrokerVersion)) {
|
|
40
|
+
return { record: recovered, spawned: false };
|
|
41
|
+
}
|
|
42
|
+
if (replaceableOlderHealth(health, opts.expectedBrokerVersion)) {
|
|
43
|
+
await terminateDiscoveredBroker(recovered, poll);
|
|
44
|
+
}
|
|
34
45
|
}
|
|
35
46
|
spawnDaemon(opts);
|
|
36
47
|
while (Date.now() < deadline) {
|
|
37
48
|
const rec = readDiscoveryFile(opts.discoveryFile);
|
|
38
|
-
if (rec
|
|
39
|
-
|
|
49
|
+
if (rec) {
|
|
50
|
+
const health = await probeHealth(rec.ipcUrl, rec.bearerToken);
|
|
51
|
+
if (usableHealth(health, opts.expectedBrokerVersion)) {
|
|
52
|
+
return { record: rec, spawned: true };
|
|
53
|
+
}
|
|
40
54
|
}
|
|
41
55
|
await sleep(poll);
|
|
42
56
|
}
|
|
@@ -81,9 +95,15 @@ async function acquireSpawnLock(opts) {
|
|
|
81
95
|
if (!isNodeErr(err, "EEXIST"))
|
|
82
96
|
throw err;
|
|
83
97
|
const existing = readDiscoveryFile(opts.discoveryFile);
|
|
84
|
-
if (existing
|
|
85
|
-
|
|
86
|
-
|
|
98
|
+
if (existing) {
|
|
99
|
+
const health = await probeHealth(existing.ipcUrl, existing.bearerToken);
|
|
100
|
+
if (usableHealth(health, opts.expectedBrokerVersion)) {
|
|
101
|
+
return { kind: "existing", record: existing };
|
|
102
|
+
}
|
|
103
|
+
if (replaceableOlderHealth(health, opts.expectedBrokerVersion)) {
|
|
104
|
+
await terminateDiscoveredBroker(existing, opts.pollIntervalMs);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
87
107
|
}
|
|
88
108
|
if (isStaleSpawnLock(lockPath)) {
|
|
89
109
|
try {
|
|
@@ -171,15 +191,85 @@ async function probeHealth(ipcUrl, bearerToken) {
|
|
|
171
191
|
headers: { Authorization: `Bearer ${bearerToken}` },
|
|
172
192
|
signal: ctrl.signal,
|
|
173
193
|
});
|
|
174
|
-
|
|
194
|
+
if (!res.ok)
|
|
195
|
+
return { ok: false };
|
|
196
|
+
let body = null;
|
|
197
|
+
try {
|
|
198
|
+
body = (await res.json());
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
body = null;
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
ok: true,
|
|
205
|
+
...(typeof body?.version === "string" ? { version: body.version } : {}),
|
|
206
|
+
};
|
|
175
207
|
}
|
|
176
208
|
catch {
|
|
177
|
-
return false;
|
|
209
|
+
return { ok: false };
|
|
178
210
|
}
|
|
179
211
|
finally {
|
|
180
212
|
clearTimeout(timer);
|
|
181
213
|
}
|
|
182
214
|
}
|
|
215
|
+
function usableHealth(health, expectedBrokerVersion) {
|
|
216
|
+
if (!health.ok)
|
|
217
|
+
return false;
|
|
218
|
+
if (!expectedBrokerVersion)
|
|
219
|
+
return true;
|
|
220
|
+
if (!health.version)
|
|
221
|
+
return true;
|
|
222
|
+
const comparison = compareBrokerVersions(health.version, expectedBrokerVersion);
|
|
223
|
+
return comparison === null || comparison >= 0;
|
|
224
|
+
}
|
|
225
|
+
function replaceableOlderHealth(health, expectedBrokerVersion) {
|
|
226
|
+
if (!health.ok || !expectedBrokerVersion)
|
|
227
|
+
return false;
|
|
228
|
+
if (!health.version)
|
|
229
|
+
return false;
|
|
230
|
+
const comparison = compareBrokerVersions(health.version, expectedBrokerVersion);
|
|
231
|
+
return comparison !== null && comparison < 0;
|
|
232
|
+
}
|
|
233
|
+
async function terminateDiscoveredBroker(record, pollIntervalMs) {
|
|
234
|
+
try {
|
|
235
|
+
process.kill(record.pid, "SIGKILL");
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
if (!isNodeErr(err, "ESRCH"))
|
|
239
|
+
throw err;
|
|
240
|
+
}
|
|
241
|
+
const deadline = Date.now() + DEFAULT_HEALTH_TIMEOUT_MS;
|
|
242
|
+
while (Date.now() < deadline) {
|
|
243
|
+
if (!(await probeHealth(record.ipcUrl, record.bearerToken)).ok)
|
|
244
|
+
return;
|
|
245
|
+
await sleep(pollIntervalMs);
|
|
246
|
+
}
|
|
247
|
+
throw new Error(`older broker pid ${record.pid} remained healthy after SIGKILL; ` +
|
|
248
|
+
`cannot replace ${record.ipcUrl}`);
|
|
249
|
+
}
|
|
250
|
+
function compareBrokerVersions(left, right) {
|
|
251
|
+
const a = parseBrokerVersion(left);
|
|
252
|
+
const b = parseBrokerVersion(right);
|
|
253
|
+
if (!a || !b) {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
const major = a[0] - b[0];
|
|
257
|
+
if (major !== 0)
|
|
258
|
+
return major;
|
|
259
|
+
const minor = a[1] - b[1];
|
|
260
|
+
if (minor !== 0)
|
|
261
|
+
return minor;
|
|
262
|
+
const patch = a[2] - b[2];
|
|
263
|
+
if (patch !== 0)
|
|
264
|
+
return patch;
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
function parseBrokerVersion(version) {
|
|
268
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(version.trim());
|
|
269
|
+
if (!match)
|
|
270
|
+
return null;
|
|
271
|
+
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
272
|
+
}
|
|
183
273
|
function sleep(ms) {
|
|
184
274
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
185
275
|
}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PLUGIN_VERSION = "0.2.
|
|
1
|
+
export declare const PLUGIN_VERSION = "0.2.13";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PLUGIN_VERSION = "0.2.
|
|
1
|
+
export const PLUGIN_VERSION = "0.2.13";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masons/runtime-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"description": "MASONS Runtime Broker — local daemon and BrokerClient SDK for multi-session agent runtime coordination.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "MASONS.ai <hello@masons.ai> (https://masons.ai)",
|