@masons/runtime-broker 0.1.1 → 0.2.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/broker/broker-daemon.d.ts +7 -0
- package/dist/broker/broker-daemon.d.ts.map +1 -1
- package/dist/broker/broker-daemon.js +247 -30
- 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/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/entry.d.ts.map +1 -1
- package/dist/broker/entry.js +4 -1
- package/dist/broker/ipc-server.d.ts +11 -2
- package/dist/broker/ipc-server.d.ts.map +1 -1
- package/dist/broker/ipc-server.js +32 -7
- 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 +1 -0
- package/dist/broker/reconnecting-buffer.d.ts.map +1 -1
- package/dist/broker/runtime-endpoint-port.d.ts +2 -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/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.d.ts +5 -1
- package/dist/broker/version-handshake.d.ts.map +1 -1
- package/dist/broker/version-handshake.js +3 -2
- package/dist/broker-client/broker-client.d.ts +14 -0
- package/dist/broker-client/broker-client.d.ts.map +1 -1
- package/dist/broker-client/broker-client.js +57 -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 +4 -0
- package/dist/runtime-endpoint-client.d.ts.map +1 -1
- package/dist/runtime-endpoint-client.js +33 -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
|
@@ -3,11 +3,28 @@ import WebSocket from "ws";
|
|
|
3
3
|
import { resolveBrokerPaths } from "../broker/paths.js";
|
|
4
4
|
import { IPC_PROTOCOL_VERSION, } from "../broker/version-handshake.js";
|
|
5
5
|
import { discoverBroker } from "./lazy-spawn.js";
|
|
6
|
+
export class ConnectorUnavailableError extends Error {
|
|
7
|
+
code = "connector_unavailable";
|
|
8
|
+
retryable = true;
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "ConnectorUnavailableError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function safeJsonParse(text) {
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse(text);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
6
22
|
export class BrokerClient extends EventEmitter {
|
|
7
23
|
handle;
|
|
8
24
|
ws = null;
|
|
9
25
|
pluginPid = null;
|
|
10
26
|
_sessionId = null;
|
|
27
|
+
_networkPresence = null;
|
|
11
28
|
constructor(handle) {
|
|
12
29
|
super();
|
|
13
30
|
this.handle = handle;
|
|
@@ -40,6 +57,9 @@ export class BrokerClient extends EventEmitter {
|
|
|
40
57
|
get sessionId() {
|
|
41
58
|
return this._sessionId;
|
|
42
59
|
}
|
|
60
|
+
get networkPresence() {
|
|
61
|
+
return this._networkPresence;
|
|
62
|
+
}
|
|
43
63
|
async connect(opts) {
|
|
44
64
|
if (this.ws) {
|
|
45
65
|
throw new Error("BrokerClient already connected");
|
|
@@ -52,6 +72,7 @@ export class BrokerClient extends EventEmitter {
|
|
|
52
72
|
capabilities: { endpoint_metadata_v1: true },
|
|
53
73
|
});
|
|
54
74
|
this._sessionId = initRes.session_id;
|
|
75
|
+
this._networkPresence = initRes.network_presence;
|
|
55
76
|
const wsUrl = `${this.handle.record.ipcUrl.replace(/^http/, "ws")}/v1/stream`;
|
|
56
77
|
const ws = new WebSocket(wsUrl, {
|
|
57
78
|
headers: {
|
|
@@ -122,6 +143,12 @@ export class BrokerClient extends EventEmitter {
|
|
|
122
143
|
on(event, listener) {
|
|
123
144
|
return super.on(event, listener);
|
|
124
145
|
}
|
|
146
|
+
once(event, listener) {
|
|
147
|
+
return super.once(event, listener);
|
|
148
|
+
}
|
|
149
|
+
off(event, listener) {
|
|
150
|
+
return super.off(event, listener);
|
|
151
|
+
}
|
|
125
152
|
emit(event, ...args) {
|
|
126
153
|
return super.emit(event, ...args);
|
|
127
154
|
}
|
|
@@ -136,6 +163,17 @@ export class BrokerClient extends EventEmitter {
|
|
|
136
163
|
});
|
|
137
164
|
if (!res.ok) {
|
|
138
165
|
const errText = await res.text().catch(() => "");
|
|
166
|
+
if (res.status === 503) {
|
|
167
|
+
const parsed = safeJsonParse(errText);
|
|
168
|
+
if (parsed !== null &&
|
|
169
|
+
typeof parsed === "object" &&
|
|
170
|
+
"error" in parsed &&
|
|
171
|
+
parsed.error === "connector_unavailable") {
|
|
172
|
+
const msgField = parsed.message;
|
|
173
|
+
const msg = typeof msgField === "string" ? msgField : "Connector unavailable";
|
|
174
|
+
throw new ConnectorUnavailableError(msg);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
139
177
|
throw new Error(`broker ${method} ${path} failed: ${res.status} ${errText}`);
|
|
140
178
|
}
|
|
141
179
|
return (await res.json());
|
|
@@ -159,7 +197,26 @@ export class BrokerClient extends EventEmitter {
|
|
|
159
197
|
content: msg.content,
|
|
160
198
|
contentType: msg.contentType,
|
|
161
199
|
metadata: msg.metadata,
|
|
200
|
+
...(msg.sourceMessageId !== undefined && {
|
|
201
|
+
sourceMessageId: msg.sourceMessageId,
|
|
202
|
+
}),
|
|
162
203
|
});
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (event === "presence_changed") {
|
|
207
|
+
const frame = parsed;
|
|
208
|
+
if (frame.presence === "online" ||
|
|
209
|
+
frame.presence === "reconnecting" ||
|
|
210
|
+
frame.presence === "offline") {
|
|
211
|
+
this._networkPresence = frame.presence;
|
|
212
|
+
if (typeof frame.reason === "string") {
|
|
213
|
+
this.emit("presence", frame.presence, frame.reason);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
this.emit("presence", frame.presence);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return;
|
|
163
220
|
}
|
|
164
221
|
}
|
|
165
222
|
}
|
|
@@ -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,7 @@
|
|
|
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" | (string & {});
|
|
4
5
|
export interface WorkspaceMetadata {
|
|
5
6
|
root: string;
|
|
6
7
|
cwd: string;
|
|
@@ -18,6 +19,7 @@ export interface RegisterRuntimeEndpointParams {
|
|
|
18
19
|
task_hint?: string;
|
|
19
20
|
workspace?: WorkspaceMetadata;
|
|
20
21
|
tracking_ref?: string;
|
|
22
|
+
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
21
23
|
share_with_peer?: ShareWithPeerField[];
|
|
22
24
|
}
|
|
23
25
|
export interface RegisterRuntimeEndpointResponse {
|
|
@@ -41,6 +43,7 @@ export interface OwnedRuntimeEndpointView {
|
|
|
41
43
|
fingerprint?: {
|
|
42
44
|
workspace_hash_per_peer?: Record<string, string>;
|
|
43
45
|
};
|
|
46
|
+
runtime_capabilities?: RuntimeEndpointCapability[];
|
|
44
47
|
registered_at: string;
|
|
45
48
|
retired_at?: string;
|
|
46
49
|
is_self: boolean;
|
|
@@ -78,4 +81,5 @@ export type EmitUndispatchedChangedOutcome = {
|
|
|
78
81
|
detail?: string;
|
|
79
82
|
};
|
|
80
83
|
export declare function emitRuntimeNetworkPresenceChanged(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
84
|
+
export declare function emitRuntimeInboundRouted(cfg: PlatformClientConfig, runtimeKey: string, event: Readonly<Record<string, unknown>>): Promise<EmitUndispatchedChangedOutcome>;
|
|
81
85
|
//# 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;
|
|
1
|
+
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -157,6 +157,39 @@ 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
|
+
}
|
|
160
193
|
async function readErrorDetail(res) {
|
|
161
194
|
try {
|
|
162
195
|
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;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAQ1C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -15,6 +15,7 @@ export function isSendAck(data) {
|
|
|
15
15
|
export function isAddressedMessage(data) {
|
|
16
16
|
return (isObject(data) &&
|
|
17
17
|
data.event === "MESSAGE_RECEIVED" &&
|
|
18
|
+
(data.messageId === undefined || typeof data.messageId === "string") &&
|
|
18
19
|
typeof data.from === "string" &&
|
|
19
20
|
typeof data.content === "string");
|
|
20
21
|
}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PLUGIN_VERSION = "0.
|
|
1
|
+
export declare const PLUGIN_VERSION = "0.2.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PLUGIN_VERSION = "0.
|
|
1
|
+
export const PLUGIN_VERSION = "0.2.1";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masons/runtime-broker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
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)",
|