@masons/agent-network 0.5.27 → 0.5.29

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.
Files changed (50) hide show
  1. package/dist/broker/broker-daemon.d.ts +24 -0
  2. package/dist/broker/broker-daemon.d.ts.map +1 -0
  3. package/dist/broker/broker-daemon.js +229 -0
  4. package/dist/broker/connector-ws.d.ts +47 -0
  5. package/dist/broker/connector-ws.d.ts.map +1 -0
  6. package/dist/broker/connector-ws.js +60 -0
  7. package/dist/broker/correlation-ring.d.ts +10 -0
  8. package/dist/broker/correlation-ring.d.ts.map +1 -0
  9. package/dist/broker/correlation-ring.js +32 -0
  10. package/dist/broker/discovery-file.d.ts +12 -0
  11. package/dist/broker/discovery-file.d.ts.map +1 -0
  12. package/dist/broker/discovery-file.js +77 -0
  13. package/dist/broker/endpoint-registry.d.ts +37 -0
  14. package/dist/broker/endpoint-registry.d.ts.map +1 -0
  15. package/dist/broker/endpoint-registry.js +44 -0
  16. package/dist/broker/entry.d.ts +2 -0
  17. package/dist/broker/entry.d.ts.map +1 -0
  18. package/dist/broker/entry.js +85 -0
  19. package/dist/broker/ipc-server.d.ts +65 -0
  20. package/dist/broker/ipc-server.d.ts.map +1 -0
  21. package/dist/broker/ipc-server.js +212 -0
  22. package/dist/broker/logger.d.ts +10 -0
  23. package/dist/broker/logger.d.ts.map +1 -0
  24. package/dist/broker/logger.js +34 -0
  25. package/dist/broker/paths.d.ts +10 -0
  26. package/dist/broker/paths.d.ts.map +1 -0
  27. package/dist/broker/paths.js +28 -0
  28. package/dist/broker/routing-table.d.ts +22 -0
  29. package/dist/broker/routing-table.d.ts.map +1 -0
  30. package/dist/broker/routing-table.js +35 -0
  31. package/dist/broker/runtime-endpoint-port.d.ts +7 -0
  32. package/dist/broker/runtime-endpoint-port.d.ts.map +1 -0
  33. package/dist/broker/runtime-endpoint-port.js +1 -0
  34. package/dist/broker/version-handshake.d.ts +30 -0
  35. package/dist/broker/version-handshake.d.ts.map +1 -0
  36. package/dist/broker/version-handshake.js +47 -0
  37. package/dist/broker-client/broker-client.d.ts +64 -0
  38. package/dist/broker-client/broker-client.d.ts.map +1 -0
  39. package/dist/broker-client/broker-client.js +164 -0
  40. package/dist/broker-client/lazy-spawn.d.ts +18 -0
  41. package/dist/broker-client/lazy-spawn.d.ts.map +1 -0
  42. package/dist/broker-client/lazy-spawn.js +61 -0
  43. package/dist/runtime-endpoint-client.d.ts +2 -2
  44. package/dist/runtime-endpoint-client.d.ts.map +1 -1
  45. package/dist/runtime-endpoint-client.js +4 -2
  46. package/dist/tools.d.ts.map +1 -1
  47. package/dist/tools.js +5 -24
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/package.json +16 -5
@@ -0,0 +1,64 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { type InitializeResponseBody } from "../broker/version-handshake.js";
3
+ export interface BrokerClientDiscoverOptions {
4
+ accountId: string;
5
+ runtimeToken: string;
6
+ userDataDir?: string;
7
+ env?: Record<string, string>;
8
+ timeoutMs?: number;
9
+ brokerEntry?: string;
10
+ nodeBinary?: string;
11
+ }
12
+ export interface BrokerClientConnectOptions {
13
+ pluginPid: number;
14
+ clientKind: string;
15
+ clientVersion: string;
16
+ }
17
+ export interface RegisterEndpointArgs {
18
+ agentId: string;
19
+ kind: string;
20
+ sessionName?: string;
21
+ workspace?: string;
22
+ trackingRef?: string;
23
+ taskHint?: string;
24
+ }
25
+ export interface RegisterEndpointOutcome {
26
+ endpoint_id: string;
27
+ }
28
+ export interface BrokerInboundMessage {
29
+ from: string;
30
+ content: string;
31
+ contentType: string;
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ type Events = {
35
+ message_received: (msg: BrokerInboundMessage) => void;
36
+ disconnected: () => void;
37
+ error: (err: Error) => void;
38
+ };
39
+ export declare class BrokerClient extends EventEmitter {
40
+ private readonly handle;
41
+ private ws;
42
+ private pluginPid;
43
+ private _sessionId;
44
+ private constructor();
45
+ static discover(opts: BrokerClientDiscoverOptions): Promise<BrokerClient>;
46
+ get spawnedNew(): boolean;
47
+ get ipcUrl(): string;
48
+ get sessionId(): string | null;
49
+ connect(opts: BrokerClientConnectOptions): Promise<InitializeResponseBody>;
50
+ registerEndpoint(args: RegisterEndpointArgs): Promise<RegisterEndpointOutcome>;
51
+ send(endpointId: string, to: string, content: string, contentType?: string, metadata?: Record<string, unknown>): Promise<{
52
+ messageId: string;
53
+ status: string;
54
+ }>;
55
+ close(endpointId?: string): Promise<void>;
56
+ on<K extends keyof Events>(event: K, listener: Events[K]): this;
57
+ on(event: string | symbol, listener: (...args: unknown[]) => void): this;
58
+ emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): boolean;
59
+ emit(event: string | symbol, ...args: unknown[]): boolean;
60
+ private httpJson;
61
+ private handleFrame;
62
+ }
63
+ export {};
64
+ //# sourceMappingURL=broker-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-client.d.ts","sourceRoot":"","sources":["../../src/broker-client/broker-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ import { EventEmitter } from "node:events";
2
+ import WebSocket from "ws";
3
+ import { resolveBrokerPaths } from "../broker/paths.js";
4
+ import { IPC_PROTOCOL_VERSION, } from "../broker/version-handshake.js";
5
+ import { discoverBroker } from "./lazy-spawn.js";
6
+ export class BrokerClient extends EventEmitter {
7
+ handle;
8
+ ws = null;
9
+ pluginPid = null;
10
+ _sessionId = null;
11
+ constructor(handle) {
12
+ super();
13
+ this.handle = handle;
14
+ }
15
+ static async discover(opts) {
16
+ const paths = resolveBrokerPaths(opts.accountId, opts.runtimeToken, {
17
+ userDataDir: opts.userDataDir,
18
+ });
19
+ const handle = await discoverBroker({
20
+ discoveryFile: paths.discoveryFile,
21
+ timeoutMs: opts.timeoutMs,
22
+ brokerEntry: opts.brokerEntry,
23
+ nodeBinary: opts.nodeBinary,
24
+ env: {
25
+ MASONS_BROKER_ACCOUNT_ID: opts.accountId,
26
+ ...(opts.userDataDir
27
+ ? { MASONS_BROKER_USER_DATA: opts.userDataDir }
28
+ : {}),
29
+ ...(opts.env ?? {}),
30
+ },
31
+ });
32
+ return new BrokerClient(handle);
33
+ }
34
+ get spawnedNew() {
35
+ return this.handle.spawned;
36
+ }
37
+ get ipcUrl() {
38
+ return this.handle.record.ipcUrl;
39
+ }
40
+ get sessionId() {
41
+ return this._sessionId;
42
+ }
43
+ async connect(opts) {
44
+ if (this.ws) {
45
+ throw new Error("BrokerClient already connected");
46
+ }
47
+ this.pluginPid = opts.pluginPid;
48
+ const initRes = await this.httpJson("POST", "/v1/initialize", {
49
+ client_protocol_version: IPC_PROTOCOL_VERSION,
50
+ client_kind: opts.clientKind,
51
+ client_version: opts.clientVersion,
52
+ capabilities: { endpoint_metadata_v1: true },
53
+ });
54
+ this._sessionId = initRes.session_id;
55
+ const wsUrl = `${this.handle.record.ipcUrl.replace(/^http/, "ws")}/v1/stream`;
56
+ const ws = new WebSocket(wsUrl, {
57
+ headers: {
58
+ Authorization: `Bearer ${this.handle.record.bearerToken}`,
59
+ "x-plugin-pid": String(opts.pluginPid),
60
+ },
61
+ });
62
+ this.ws = ws;
63
+ await new Promise((resolve, reject) => {
64
+ const onOpen = () => {
65
+ ws.off("error", onError);
66
+ resolve();
67
+ };
68
+ const onError = (err) => {
69
+ ws.off("open", onOpen);
70
+ reject(err);
71
+ };
72
+ ws.once("open", onOpen);
73
+ ws.once("error", onError);
74
+ });
75
+ ws.on("message", (data) => this.handleFrame(data.toString()));
76
+ ws.on("close", () => {
77
+ this.ws = null;
78
+ this.emit("disconnected");
79
+ });
80
+ ws.on("error", (err) => this.emit("error", err));
81
+ return initRes;
82
+ }
83
+ async registerEndpoint(args) {
84
+ if (this.pluginPid === null) {
85
+ throw new Error("BrokerClient.connect must be called before registerEndpoint");
86
+ }
87
+ return this.httpJson("POST", "/v1/endpoint/register", {
88
+ agent_id: args.agentId,
89
+ plugin_pid: this.pluginPid,
90
+ kind: args.kind,
91
+ session_name: args.sessionName,
92
+ workspace: args.workspace,
93
+ tracking_ref: args.trackingRef,
94
+ task_hint: args.taskHint,
95
+ });
96
+ }
97
+ async send(endpointId, to, content, contentType = "text", metadata) {
98
+ return this.httpJson("POST", "/v1/send", {
99
+ endpoint_id: endpointId,
100
+ to,
101
+ content,
102
+ contentType,
103
+ metadata,
104
+ });
105
+ }
106
+ async close(endpointId) {
107
+ if (endpointId) {
108
+ try {
109
+ await this.httpJson("DELETE", `/v1/endpoint/${encodeURIComponent(endpointId)}`);
110
+ }
111
+ catch {
112
+ }
113
+ }
114
+ if (this.ws &&
115
+ (this.ws.readyState === WebSocket.OPEN ||
116
+ this.ws.readyState === WebSocket.CONNECTING)) {
117
+ this.ws.close(1000, "client_close");
118
+ }
119
+ this.ws = null;
120
+ }
121
+ on(event, listener) {
122
+ return super.on(event, listener);
123
+ }
124
+ emit(event, ...args) {
125
+ return super.emit(event, ...args);
126
+ }
127
+ async httpJson(method, path, body) {
128
+ const res = await fetch(`${this.handle.record.ipcUrl}${path}`, {
129
+ method,
130
+ headers: {
131
+ Authorization: `Bearer ${this.handle.record.bearerToken}`,
132
+ ...(body ? { "Content-Type": "application/json" } : {}),
133
+ },
134
+ body: body ? JSON.stringify(body) : undefined,
135
+ });
136
+ if (!res.ok) {
137
+ const errText = await res.text().catch(() => "");
138
+ throw new Error(`broker ${method} ${path} failed: ${res.status} ${errText}`);
139
+ }
140
+ return (await res.json());
141
+ }
142
+ handleFrame(raw) {
143
+ let parsed;
144
+ try {
145
+ parsed = JSON.parse(raw);
146
+ }
147
+ catch {
148
+ this.emit("error", new Error("BrokerClient received non-JSON frame"));
149
+ return;
150
+ }
151
+ if (!parsed || typeof parsed !== "object" || !("event" in parsed))
152
+ return;
153
+ const event = parsed.event;
154
+ if (event === "message_received") {
155
+ const msg = parsed;
156
+ this.emit("message_received", {
157
+ from: msg.from,
158
+ content: msg.content,
159
+ contentType: msg.contentType,
160
+ metadata: msg.metadata,
161
+ });
162
+ }
163
+ }
164
+ }
@@ -0,0 +1,18 @@
1
+ import { type DiscoveryRecord } from "../broker/discovery-file.js";
2
+ export interface LazySpawnOptions {
3
+ brokerEntry?: string;
4
+ env?: Record<string, string>;
5
+ nodeBinary?: string;
6
+ }
7
+ export interface DiscoverOptions extends LazySpawnOptions {
8
+ discoveryFile: string;
9
+ timeoutMs?: number;
10
+ pollIntervalMs?: number;
11
+ forceSpawn?: boolean;
12
+ }
13
+ export interface DiscoveryHandle {
14
+ record: DiscoveryRecord;
15
+ spawned: boolean;
16
+ }
17
+ export declare function discoverBroker(opts: DiscoverOptions): Promise<DiscoveryHandle>;
18
+ //# sourceMappingURL=lazy-spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-spawn.d.ts","sourceRoot":"","sources":["../../src/broker-client/lazy-spawn.ts"],"names":[],"mappings":"AA0CA,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;AAMD,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;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IAExB,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,eAAe,CAAC,CA8B1B"}
@@ -0,0 +1,61 @@
1
+ import { spawn } from "node:child_process";
2
+ import { fileURLToPath } from "node:url";
3
+ import { readDiscoveryFile, } from "../broker/discovery-file.js";
4
+ const DEFAULT_POLL_INTERVAL_MS = 100;
5
+ const DEFAULT_DISCOVER_TIMEOUT_MS = 5_000;
6
+ const DEFAULT_HEALTH_TIMEOUT_MS = 2_000;
7
+ export async function discoverBroker(opts) {
8
+ const deadline = Date.now() + (opts.timeoutMs ?? DEFAULT_DISCOVER_TIMEOUT_MS);
9
+ const poll = opts.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
10
+ if (!opts.forceSpawn) {
11
+ const existing = readDiscoveryFile(opts.discoveryFile);
12
+ if (existing &&
13
+ (await probeHealth(existing.ipcUrl, existing.bearerToken))) {
14
+ return { record: existing, spawned: false };
15
+ }
16
+ }
17
+ spawnDaemon(opts);
18
+ while (Date.now() < deadline) {
19
+ const rec = readDiscoveryFile(opts.discoveryFile);
20
+ if (rec && (await probeHealth(rec.ipcUrl, rec.bearerToken))) {
21
+ return { record: rec, spawned: true };
22
+ }
23
+ await sleep(poll);
24
+ }
25
+ throw new Error(`broker did not become healthy within ${opts.timeoutMs ?? DEFAULT_DISCOVER_TIMEOUT_MS}ms; ` +
26
+ `check ${opts.discoveryFile} and the daemon log`);
27
+ }
28
+ function spawnDaemon(opts) {
29
+ const entry = opts.brokerEntry ?? resolveDefaultBrokerEntry();
30
+ const child = spawn(opts.nodeBinary ?? process.execPath, [entry], {
31
+ detached: true,
32
+ stdio: "ignore",
33
+ windowsHide: true,
34
+ env: { ...process.env, ...(opts.env ?? {}) },
35
+ });
36
+ child.unref();
37
+ }
38
+ function resolveDefaultBrokerEntry() {
39
+ const self = fileURLToPath(import.meta.url);
40
+ return self.replace(/broker-client\/lazy-spawn\.(c?js|ts)$/, "broker/entry.$1");
41
+ }
42
+ async function probeHealth(ipcUrl, bearerToken) {
43
+ const ctrl = new AbortController();
44
+ const timer = setTimeout(() => ctrl.abort(), DEFAULT_HEALTH_TIMEOUT_MS);
45
+ try {
46
+ const res = await fetch(`${ipcUrl}/health`, {
47
+ headers: { Authorization: `Bearer ${bearerToken}` },
48
+ signal: ctrl.signal,
49
+ });
50
+ return res.ok;
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ finally {
56
+ clearTimeout(timer);
57
+ }
58
+ }
59
+ function sleep(ms) {
60
+ return new Promise((resolve) => setTimeout(resolve, ms));
61
+ }
@@ -9,7 +9,7 @@ export interface WorkspaceMetadata {
9
9
  }
10
10
  export type ShareWithPeerField = "workspace" | "tracking_ref" | "runtime_session_id" | "fingerprint" | (string & {});
11
11
  export interface RegisterRuntimeEndpointParams {
12
- as: string;
12
+ as?: string;
13
13
  runtime_kind: RuntimeKind;
14
14
  runtime_session_id?: string;
15
15
  endpoint_nonce: string;
@@ -51,7 +51,7 @@ export type HeartbeatRuntimeEndpointResponse = Record<string, unknown>;
51
51
  export type UnregisterRuntimeEndpointResponse = Record<string, unknown>;
52
52
  export declare function registerRuntimeEndpoint(cfg: PlatformClientConfig, runtimeKey: string, params: RegisterRuntimeEndpointParams): Promise<RegisterRuntimeEndpointResponse>;
53
53
  export declare function heartbeatRuntimeEndpoint(cfg: PlatformClientConfig, runtimeKey: string, endpointId: string): Promise<HeartbeatRuntimeEndpointResponse>;
54
- export declare function unregisterRuntimeEndpoint(cfg: PlatformClientConfig, runtimeKey: string, endpointId: string, asNodeId: string): Promise<UnregisterRuntimeEndpointResponse>;
54
+ export declare function unregisterRuntimeEndpoint(cfg: PlatformClientConfig, runtimeKey: string, endpointId: string, asNodeId?: string): Promise<UnregisterRuntimeEndpointResponse>;
55
55
  export declare function listOwnedRuntimeEndpoints(cfg: PlatformClientConfig, runtimeKey: string, asNodeId: string): Promise<ListOwnedRuntimeEndpointsResponse>;
56
56
  export declare function getOwnedRuntimeEndpoint(cfg: PlatformClientConfig, runtimeKey: string, endpointId: string, asNodeId: string): Promise<OwnedRuntimeEndpointView>;
57
57
  //# 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":"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"}
1
+ {"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"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"}
@@ -41,8 +41,10 @@ export async function heartbeatRuntimeEndpoint(cfg, runtimeKey, endpointId) {
41
41
  {});
42
42
  }
43
43
  export async function unregisterRuntimeEndpoint(cfg, runtimeKey, endpointId, asNodeId) {
44
- const query = new URLSearchParams({ as: asNodeId }).toString();
45
- const res = await fetch(`${baseUrl(cfg)}/runtime-endpoints/${encodeURIComponent(endpointId)}?${query}`, {
44
+ const query = asNodeId
45
+ ? `?${new URLSearchParams({ as: asNodeId }).toString()}`
46
+ : "";
47
+ const res = await fetch(`${baseUrl(cfg)}/runtime-endpoints/${encodeURIComponent(endpointId)}${query}`, {
46
48
  method: "DELETE",
47
49
  headers: authHeaders(runtimeKey),
48
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAqEA,UAAU,WAAW;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,CACP,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,WAAW,CAAC,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;AAE3E,UAAU,OAAO;IACf,YAAY,CACV,IAAI,EAAE,cAAc,GAAG,WAAW,EAClC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,IAAI,CAAC;CACT;AAmCD,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAqRD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA80BhD"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAqEA,UAAU,WAAW;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,CACP,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,WAAW,CAAC,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;AAE3E,UAAU,OAAO;IACf,YAAY,CACV,IAAI,EAAE,cAAc,GAAG,WAAW,EAClC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,IAAI,CAAC;CACT;AAoDD,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAqRD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAuzBhD"}
package/dist/tools.js CHANGED
@@ -9,16 +9,13 @@ import { sentMessageBuffer } from "./sent-message-buffer.js";
9
9
  import { getCurrentTurnChannelId, getCurrentTurnIsOwnerNonConsuming, getCurrentTurnOwnerSignal, } from "./turn-context.js";
10
10
  import { getLatestPublishedVersion, getPluginVersion, getUpdateInfo, } from "./update-check.js";
11
11
  const PROFILE_FIELDS = new Set(["name", "scope", "about", "audience"]);
12
- const UPGRADE_CMD = "openclaw plugins update agent-network";
13
12
  const GATEWAY_RESTART_CMD = "openclaw gateway restart";
14
- function reinstallCmd(version) {
13
+ function upgradeCmd(version) {
15
14
  return `openclaw plugins install @masons/agent-network@${version} --force`;
16
15
  }
17
16
  const SEMVER_RE = /^\d+\.\d+\.\d+$/;
18
- let upgradeAttemptedVersion = null;
19
17
  export function _resetToolsForTesting() {
20
18
  updateNoticeShown = false;
21
- upgradeAttemptedVersion = null;
22
19
  _resetChannelSetupForTesting();
23
20
  }
24
21
  function textResult(text) {
@@ -598,7 +595,7 @@ export function registerTools(api) {
598
595
  });
599
596
  api.registerTool({
600
597
  name: "masons_upgrade",
601
- description: "Check for and install plugin updates via `openclaw plugins update`. Do not use ClawHub (it distributes skills, not plugins).",
598
+ description: "Check for and install plugin updates. Emits an `openclaw plugins install ...@<version> --force` command pinned to the live npm `latest` value — the command carries full advance-to-latest semantics on its own, independent of OpenClaw's plugin-manager version-resolution path. Do not use ClawHub (it distributes skills, not plugins).",
602
599
  parameters: Type.Object({}),
603
600
  execute: async () => {
604
601
  const pendingNotes = ownerNotesQueue.size();
@@ -612,37 +609,21 @@ export function registerTools(api) {
612
609
  return textResult("Could not check for updates (network issue). Try again later.");
613
610
  }
614
611
  if (latestVersion === currentVersion) {
615
- upgradeAttemptedVersion = null;
616
612
  return textResult(`You're on the latest version (v${currentVersion}). No update needed.`);
617
613
  }
618
614
  if (!SEMVER_RE.test(latestVersion)) {
619
615
  return textResult(`Registry returned an unexpected version format: "${latestVersion}". Try again later.`);
620
616
  }
621
- const useFallback = upgradeAttemptedVersion === latestVersion;
622
- if (useFallback) {
623
- upgradeAttemptedVersion = null;
624
- const fallbackCmd = reinstallCmd(latestVersion);
625
- return textResult([
626
- `Update to v${latestVersion} — reinstall through OpenClaw (the normal update command may not have detected the new version).`,
627
- "",
628
- "Run this command using the exec tool:",
629
- fallbackCmd,
630
- "",
631
- `Then restart the gateway using the gateway tool.`,
632
- `If you cannot run commands, tell the user to run in Terminal:`,
633
- `${fallbackCmd} && ${GATEWAY_RESTART_CMD}`,
634
- ].join("\n"));
635
- }
636
- upgradeAttemptedVersion = latestVersion;
617
+ const cmd = upgradeCmd(latestVersion);
637
618
  return textResult([
638
619
  `Update available: v${currentVersion} → v${latestVersion}`,
639
620
  "",
640
621
  "Run this command using the exec tool:",
641
- UPGRADE_CMD,
622
+ cmd,
642
623
  "",
643
624
  "Then restart the gateway using the gateway tool.",
644
625
  "If you cannot run commands, tell the user to run in Terminal:",
645
- `${UPGRADE_CMD} && ${GATEWAY_RESTART_CMD}`,
626
+ `${cmd} && ${GATEWAY_RESTART_CMD}`,
646
627
  ].join("\n"));
647
628
  },
648
629
  });
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const PLUGIN_VERSION = "0.5.27";
1
+ export declare const PLUGIN_VERSION = "0.5.29";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const PLUGIN_VERSION = "0.5.27";
1
+ export const PLUGIN_VERSION = "0.5.29";
package/package.json CHANGED
@@ -1,16 +1,18 @@
1
1
  {
2
2
  "name": "@masons/agent-network",
3
- "version": "0.5.27",
4
- "description": "MASONS plugin for OpenClaw connect your agent to the agent network",
3
+ "version": "0.5.29",
4
+ "description": "MASONS Agent Networkconnects agent runtimes to the Agent Network over MSTP. Ships an OpenClaw channel plugin (root export) and subpath exports consumed by the Claude Code plugin today (planned: Codex and future hosts).",
5
5
  "license": "MIT",
6
6
  "author": "MASONS.ai <hello@masons.ai> (https://masons.ai)",
7
7
  "homepage": "https://masons.ai",
8
8
  "keywords": [
9
9
  "mstp",
10
- "openclaw",
10
+ "agent-network",
11
11
  "agent",
12
12
  "agent-to-agent",
13
- "masons"
13
+ "masons",
14
+ "openclaw",
15
+ "claude-code"
14
16
  ],
15
17
  "engines": {
16
18
  "node": ">=20.10"
@@ -63,12 +65,21 @@
63
65
  "./handoff": {
64
66
  "types": "./dist/handoff.d.ts",
65
67
  "default": "./dist/handoff.js"
68
+ },
69
+ "./broker": {
70
+ "types": "./dist/broker/entry.d.ts",
71
+ "default": "./dist/broker/entry.js"
72
+ },
73
+ "./broker/client": {
74
+ "types": "./dist/broker-client/broker-client.d.ts",
75
+ "default": "./dist/broker-client/broker-client.js"
66
76
  }
67
77
  },
68
78
  "dependencies": {
69
79
  "@clack/prompts": "^1.2.0",
70
80
  "@sinclair/typebox": "^0.34",
71
81
  "debug": "^4.4.3",
82
+ "env-paths": "^3.0.0",
72
83
  "ws": "8.18.3"
73
84
  },
74
85
  "devDependencies": {
@@ -81,7 +92,7 @@
81
92
  "scripts": {
82
93
  "build": "tsc",
83
94
  "dev": "tsc --watch",
84
- "test": "tsc -p test/tsconfig.json && node --test --loader ts-node/esm test/**/*.test.ts",
95
+ "test": "tsc -p test/tsconfig.json && node --test --loader ts-node/esm 'test/**/*.test.ts'",
85
96
  "lint": "biome check",
86
97
  "format": "biome format --write",
87
98
  "release": "pnpm publish --access public"