@masons/agent-network 0.6.4 → 0.6.6
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/handoff.d.ts.map +1 -1
- package/dist/handoff.js +14 -6
- package/dist/platform-client.d.ts +6 -0
- package/dist/platform-client.d.ts.map +1 -1
- package/dist/platform-client.js +58 -6
- package/dist/runtime-endpoint-client.d.ts.map +1 -1
- package/dist/runtime-endpoint-client.js +9 -9
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +27 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/handoff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AAerB,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAiBhE,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAKhD,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAY5C,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAQD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAOhB,UAAU,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC;AAMD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAyD/B;AAKD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAmC9B"}
|
package/dist/handoff.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createDecipheriv, constants as cryptoConstants, generateKeyPairSync, privateDecrypt, } from "node:crypto";
|
|
2
|
+
import { apiFetch, PlatformNetworkError } from "./platform-client.js";
|
|
2
3
|
export const DEFAULT_IDP_BASE_URL = "https://preview.masons.ai";
|
|
3
4
|
const HANDLE_REGEX = /^[a-z][a-z0-9_-]{2,14}$/;
|
|
4
5
|
export const HANDOFF_TIMEOUT_MS = 5 * 60 * 1000;
|
|
@@ -15,7 +16,7 @@ export async function beginBridgeHandoff(options) {
|
|
|
15
16
|
const apiBase = normalizeHttpBase(options.apiHost);
|
|
16
17
|
let sessionId;
|
|
17
18
|
try {
|
|
18
|
-
const initRes = await
|
|
19
|
+
const initRes = await apiFetch(`${apiBase}/v1/cli-handoff/init`, {
|
|
19
20
|
method: "POST",
|
|
20
21
|
headers: { "content-type": "application/json" },
|
|
21
22
|
body: JSON.stringify({
|
|
@@ -83,14 +84,19 @@ export async function completeBridgeHandoff(session) {
|
|
|
83
84
|
}
|
|
84
85
|
async function pollForCompletion(apiBase, sessionId) {
|
|
85
86
|
const start = Date.now();
|
|
87
|
+
let lastNetworkError;
|
|
86
88
|
while (Date.now() - start < HANDOFF_TIMEOUT_MS) {
|
|
87
89
|
let res;
|
|
88
90
|
try {
|
|
89
|
-
res = await
|
|
91
|
+
res = await apiFetch(`${apiBase}/v1/cli-handoff/${encodeURIComponent(sessionId)}/poll`, { method: "GET" });
|
|
90
92
|
}
|
|
91
|
-
catch (
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err instanceof PlatformNetworkError) {
|
|
95
|
+
lastNetworkError = err;
|
|
96
|
+
await sleep(HANDOFF_POLL_INTERVAL_MS);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
throw err;
|
|
94
100
|
}
|
|
95
101
|
if (res.status === 404) {
|
|
96
102
|
throw new SetupFlowError("Handoff session expired before the runtime key was delivered. Re-run setup.");
|
|
@@ -105,7 +111,9 @@ async function pollForCompletion(apiBase, sessionId) {
|
|
|
105
111
|
}
|
|
106
112
|
await sleep(HANDOFF_POLL_INTERVAL_MS);
|
|
107
113
|
}
|
|
108
|
-
throw new SetupFlowError(
|
|
114
|
+
throw new SetupFlowError(lastNetworkError
|
|
115
|
+
? `Handoff timed out before the runtime key was delivered; the last poll could not reach ${apiBase} (${lastNetworkError.message}). Re-run setup; if you're behind a proxy that blocks long-running fetches, retry on a different network.`
|
|
116
|
+
: "Handoff timed out before the runtime key was delivered. Re-run setup; if you're behind a proxy that blocks long-running fetches, retry on a different network.");
|
|
109
117
|
}
|
|
110
118
|
function decryptBridgeEnvelope(privateKey, envelope) {
|
|
111
119
|
const wrappedKey = Buffer.from(envelope.wrapped_key, "base64url");
|
|
@@ -8,6 +8,11 @@ export declare class PlatformApiError extends Error {
|
|
|
8
8
|
readonly code: string;
|
|
9
9
|
constructor(status: number, code: string, message: string);
|
|
10
10
|
}
|
|
11
|
+
export declare class PlatformNetworkError extends Error {
|
|
12
|
+
readonly code: "timeout" | "network";
|
|
13
|
+
readonly detail: string;
|
|
14
|
+
constructor(code: "timeout" | "network", detail: string);
|
|
15
|
+
}
|
|
11
16
|
export interface RequestConnectionResponse {
|
|
12
17
|
requestIds: string[];
|
|
13
18
|
status: string;
|
|
@@ -67,6 +72,7 @@ export interface ListConnectionsResponse {
|
|
|
67
72
|
createdAt: string | null;
|
|
68
73
|
}>;
|
|
69
74
|
}
|
|
75
|
+
export declare function apiFetch(url: string, init?: RequestInit): Promise<Response>;
|
|
70
76
|
export declare function requestConnection(cfg: PlatformClientConfig, runtimeKey: string, params: {
|
|
71
77
|
targetHandle: string;
|
|
72
78
|
variants: ("distribute" | "receive")[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-client.d.ts","sourceRoot":"","sources":["../src/platform-client.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AASxD,eAAO,MAAM,qBAAqB,iDACc,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,gBAAiB,SAAQ,KAAK;aAEvB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAMD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAQD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IAEnC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEpC,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,KAAK,CAAC;QACjB,YAAY,EAAE,iBAAiB,CAAC;QAChC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;QACnD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"platform-client.d.ts","sourceRoot":"","sources":["../src/platform-client.ts"],"names":[],"mappings":"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"}
|
package/dist/platform-client.js
CHANGED
|
@@ -10,6 +10,16 @@ export class PlatformApiError extends Error {
|
|
|
10
10
|
this.name = "PlatformApiError";
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
+
export class PlatformNetworkError extends Error {
|
|
14
|
+
code;
|
|
15
|
+
detail;
|
|
16
|
+
constructor(code, detail) {
|
|
17
|
+
super(`network ${code}: ${detail}`);
|
|
18
|
+
this.code = code;
|
|
19
|
+
this.detail = detail;
|
|
20
|
+
this.name = "PlatformNetworkError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
13
23
|
function baseUrl(cfg) {
|
|
14
24
|
const trimmed = cfg.apiHost.replace(/\/+$/, "");
|
|
15
25
|
const origin = /^https?:\/\//.test(trimmed) ? trimmed : `https://${trimmed}`;
|
|
@@ -21,8 +31,50 @@ async function handleError(res) {
|
|
|
21
31
|
const message = typeof body.message === "string" ? body.message : res.statusText;
|
|
22
32
|
throw new PlatformApiError(res.status, code, message);
|
|
23
33
|
}
|
|
34
|
+
const REQUEST_TIMEOUT_MS = 15_000;
|
|
35
|
+
function causeCode(cause) {
|
|
36
|
+
if (cause && typeof cause === "object" && "code" in cause) {
|
|
37
|
+
const code = cause.code;
|
|
38
|
+
if (typeof code === "string")
|
|
39
|
+
return code;
|
|
40
|
+
}
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
function isTimeoutCode(code) {
|
|
44
|
+
return (code === "ETIMEDOUT" ||
|
|
45
|
+
code === "UND_ERR_CONNECT_TIMEOUT" ||
|
|
46
|
+
code === "UND_ERR_HEADERS_TIMEOUT" ||
|
|
47
|
+
code === "UND_ERR_BODY_TIMEOUT");
|
|
48
|
+
}
|
|
49
|
+
function toNetworkError(err) {
|
|
50
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
51
|
+
return new PlatformNetworkError("timeout", `timed out after ${REQUEST_TIMEOUT_MS}ms`);
|
|
52
|
+
}
|
|
53
|
+
if (err instanceof TypeError && err.message === "fetch failed") {
|
|
54
|
+
const cause = err.cause;
|
|
55
|
+
const code = causeCode(cause);
|
|
56
|
+
const detail = cause instanceof Error && cause.message
|
|
57
|
+
? cause.message
|
|
58
|
+
: code || "fetch failed";
|
|
59
|
+
return new PlatformNetworkError(isTimeoutCode(code) ? "timeout" : "network", detail);
|
|
60
|
+
}
|
|
61
|
+
return err;
|
|
62
|
+
}
|
|
63
|
+
export async function apiFetch(url, init = {}) {
|
|
64
|
+
const controller = new AbortController();
|
|
65
|
+
const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
66
|
+
try {
|
|
67
|
+
return await fetch(url, { ...init, signal: controller.signal });
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
throw toNetworkError(err);
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
24
76
|
export async function requestConnection(cfg, runtimeKey, params) {
|
|
25
|
-
const res = await
|
|
77
|
+
const res = await apiFetch(`${baseUrl(cfg)}/me/connections/requests`, {
|
|
26
78
|
method: "POST",
|
|
27
79
|
headers: {
|
|
28
80
|
"Content-Type": "application/json",
|
|
@@ -46,7 +98,7 @@ export async function listRequests(cfg, runtimeKey, params) {
|
|
|
46
98
|
query.set("limit", String(params.limit));
|
|
47
99
|
const qs = query.toString();
|
|
48
100
|
const url = `${baseUrl(cfg)}/me/connections/requests${qs ? `?${qs}` : ""}`;
|
|
49
|
-
const res = await
|
|
101
|
+
const res = await apiFetch(url, {
|
|
50
102
|
headers: { Authorization: `Bearer ${runtimeKey}` },
|
|
51
103
|
});
|
|
52
104
|
if (!res.ok)
|
|
@@ -54,7 +106,7 @@ export async function listRequests(cfg, runtimeKey, params) {
|
|
|
54
106
|
return (await res.json());
|
|
55
107
|
}
|
|
56
108
|
export async function acceptRequest(cfg, runtimeKey, requestId) {
|
|
57
|
-
const res = await
|
|
109
|
+
const res = await apiFetch(`${baseUrl(cfg)}/me/connections/requests/${encodeURIComponent(requestId)}/accept`, {
|
|
58
110
|
method: "POST",
|
|
59
111
|
headers: { Authorization: `Bearer ${runtimeKey}` },
|
|
60
112
|
});
|
|
@@ -63,7 +115,7 @@ export async function acceptRequest(cfg, runtimeKey, requestId) {
|
|
|
63
115
|
return (await res.json());
|
|
64
116
|
}
|
|
65
117
|
export async function declineRequest(cfg, runtimeKey, requestId) {
|
|
66
|
-
const res = await
|
|
118
|
+
const res = await apiFetch(`${baseUrl(cfg)}/me/connections/requests/${encodeURIComponent(requestId)}/decline`, {
|
|
67
119
|
method: "POST",
|
|
68
120
|
headers: { Authorization: `Bearer ${runtimeKey}` },
|
|
69
121
|
});
|
|
@@ -72,7 +124,7 @@ export async function declineRequest(cfg, runtimeKey, requestId) {
|
|
|
72
124
|
return (await res.json());
|
|
73
125
|
}
|
|
74
126
|
export async function updateProfile(cfg, runtimeKey, params) {
|
|
75
|
-
const res = await
|
|
127
|
+
const res = await apiFetch(`${baseUrl(cfg)}/me/profile`, {
|
|
76
128
|
method: "PATCH",
|
|
77
129
|
headers: {
|
|
78
130
|
"Content-Type": "application/json",
|
|
@@ -85,7 +137,7 @@ export async function updateProfile(cfg, runtimeKey, params) {
|
|
|
85
137
|
return (await res.json());
|
|
86
138
|
}
|
|
87
139
|
export async function listConnections(cfg, runtimeKey) {
|
|
88
|
-
const res = await
|
|
140
|
+
const res = await apiFetch(`${baseUrl(cfg)}/me/connections`, {
|
|
89
141
|
headers: { Authorization: `Bearer ${runtimeKey}` },
|
|
90
142
|
});
|
|
91
143
|
if (!res.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"AAuBA,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime-endpoint-client.d.ts","sourceRoot":"","sources":["../src/runtime-endpoint-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlatformApiError, } from "./platform-client.js";
|
|
1
|
+
import { apiFetch, PlatformApiError, } from "./platform-client.js";
|
|
2
2
|
export { PlatformApiError };
|
|
3
3
|
function baseUrl(cfg) {
|
|
4
4
|
const trimmed = cfg.apiHost.replace(/\/+$/, "");
|
|
@@ -21,7 +21,7 @@ function jsonHeaders(runtimeKey) {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
export async function registerRuntimeEndpoint(cfg, runtimeKey, params) {
|
|
24
|
-
const res = await
|
|
24
|
+
const res = await apiFetch(`${baseUrl(cfg)}/runtime-endpoints`, {
|
|
25
25
|
method: "POST",
|
|
26
26
|
headers: jsonHeaders(runtimeKey),
|
|
27
27
|
body: JSON.stringify(params),
|
|
@@ -31,7 +31,7 @@ export async function registerRuntimeEndpoint(cfg, runtimeKey, params) {
|
|
|
31
31
|
return (await res.json());
|
|
32
32
|
}
|
|
33
33
|
export async function heartbeatRuntimeEndpoint(cfg, runtimeKey, endpointId) {
|
|
34
|
-
const res = await
|
|
34
|
+
const res = await apiFetch(`${baseUrl(cfg)}/runtime-endpoints/${encodeURIComponent(endpointId)}/heartbeat`, {
|
|
35
35
|
method: "POST",
|
|
36
36
|
headers: authHeaders(runtimeKey),
|
|
37
37
|
});
|
|
@@ -41,7 +41,7 @@ export async function heartbeatRuntimeEndpoint(cfg, runtimeKey, endpointId) {
|
|
|
41
41
|
{});
|
|
42
42
|
}
|
|
43
43
|
export async function transitionRuntimeEndpointState(cfg, runtimeKey, endpointId, params) {
|
|
44
|
-
const res = await
|
|
44
|
+
const res = await apiFetch(`${baseUrl(cfg)}/runtime-endpoints/${encodeURIComponent(endpointId)}/state`, {
|
|
45
45
|
method: "POST",
|
|
46
46
|
headers: jsonHeaders(runtimeKey),
|
|
47
47
|
body: JSON.stringify(params),
|
|
@@ -55,7 +55,7 @@ export async function unregisterRuntimeEndpoint(cfg, runtimeKey, endpointId, asN
|
|
|
55
55
|
const query = asNodeId
|
|
56
56
|
? `?${new URLSearchParams({ as: asNodeId }).toString()}`
|
|
57
57
|
: "";
|
|
58
|
-
const res = await
|
|
58
|
+
const res = await apiFetch(`${baseUrl(cfg)}/runtime-endpoints/${encodeURIComponent(endpointId)}${query}`, {
|
|
59
59
|
method: "DELETE",
|
|
60
60
|
headers: authHeaders(runtimeKey),
|
|
61
61
|
});
|
|
@@ -66,7 +66,7 @@ export async function unregisterRuntimeEndpoint(cfg, runtimeKey, endpointId, asN
|
|
|
66
66
|
}
|
|
67
67
|
export async function listOwnedRuntimeEndpoints(cfg, runtimeKey, asNodeId) {
|
|
68
68
|
const query = new URLSearchParams({ as: asNodeId }).toString();
|
|
69
|
-
const res = await
|
|
69
|
+
const res = await apiFetch(`${baseUrl(cfg)}/runtime-endpoints?${query}`, {
|
|
70
70
|
headers: authHeaders(runtimeKey),
|
|
71
71
|
});
|
|
72
72
|
if (!res.ok)
|
|
@@ -75,7 +75,7 @@ export async function listOwnedRuntimeEndpoints(cfg, runtimeKey, asNodeId) {
|
|
|
75
75
|
}
|
|
76
76
|
export async function getOwnedRuntimeEndpoint(cfg, runtimeKey, endpointId, asNodeId) {
|
|
77
77
|
const query = new URLSearchParams({ as: asNodeId }).toString();
|
|
78
|
-
const res = await
|
|
78
|
+
const res = await apiFetch(`${baseUrl(cfg)}/runtime-endpoints/${encodeURIComponent(endpointId)}?${query}`, {
|
|
79
79
|
headers: authHeaders(runtimeKey),
|
|
80
80
|
});
|
|
81
81
|
if (!res.ok)
|
|
@@ -85,7 +85,7 @@ export async function getOwnedRuntimeEndpoint(cfg, runtimeKey, endpointId, asNod
|
|
|
85
85
|
export async function emitRuntimeUndispatchedChanged(cfg, runtimeKey, event) {
|
|
86
86
|
let res;
|
|
87
87
|
try {
|
|
88
|
-
res = await
|
|
88
|
+
res = await apiFetch(`${baseUrl(cfg)}/runtime/undispatched-changed`, {
|
|
89
89
|
method: "POST",
|
|
90
90
|
headers: jsonHeaders(runtimeKey),
|
|
91
91
|
body: JSON.stringify(event),
|
|
@@ -118,7 +118,7 @@ export async function emitRuntimeUndispatchedChanged(cfg, runtimeKey, event) {
|
|
|
118
118
|
export async function emitRuntimeNetworkPresenceChanged(cfg, runtimeKey, event) {
|
|
119
119
|
let res;
|
|
120
120
|
try {
|
|
121
|
-
res = await
|
|
121
|
+
res = await apiFetch(`${baseUrl(cfg)}/runtime/network-presence-changed`, {
|
|
122
122
|
method: "POST",
|
|
123
123
|
headers: jsonHeaders(runtimeKey),
|
|
124
124
|
body: JSON.stringify(event),
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAsEA,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;AAwSD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA01BhD"}
|
package/dist/tools.js
CHANGED
|
@@ -4,7 +4,7 @@ import { _resetChannelSetupForTesting, consumeChannelSetupStatus, getDefaultChan
|
|
|
4
4
|
import { clearTargetHandle, extractNetworkConfig, getDmScope, getPendingTarget, isProfileNeeded, markProfileComplete, removeIdentityLinks, requireApiKey, requireConversationManager, requirePlatformConfig, writeIdentityLinks, } from "./config.js";
|
|
5
5
|
import { getOwnerHandle } from "./environment-context.js";
|
|
6
6
|
import { ownerNotesQueue } from "./owner-notes.js";
|
|
7
|
-
import { acceptRequest, declineRequest, listConnections, listRequests, PlatformApiError, requestConnection, updateProfile, } from "./platform-client.js";
|
|
7
|
+
import { acceptRequest, declineRequest, listConnections, listRequests, PlatformApiError, PlatformNetworkError, requestConnection, updateProfile, } from "./platform-client.js";
|
|
8
8
|
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";
|
|
@@ -21,6 +21,14 @@ export function _resetToolsForTesting() {
|
|
|
21
21
|
function textResult(text) {
|
|
22
22
|
return { content: [{ type: "text", text }] };
|
|
23
23
|
}
|
|
24
|
+
function networkErrorText(err) {
|
|
25
|
+
const lead = err.code === "timeout"
|
|
26
|
+
? "The request to the MASONS network timed out"
|
|
27
|
+
: "Couldn't reach the MASONS network";
|
|
28
|
+
return (`${lead} (${err.detail}). The request did not reach the server, so this ` +
|
|
29
|
+
"is a connectivity failure, not an empty result. Retry shortly; if it " +
|
|
30
|
+
"persists, check network access to the API host.");
|
|
31
|
+
}
|
|
24
32
|
let updateNoticeShown = false;
|
|
25
33
|
function maybeAppendUpdateNotice(result) {
|
|
26
34
|
const info = getUpdateInfo();
|
|
@@ -297,6 +305,9 @@ export function registerTools(api) {
|
|
|
297
305
|
return textResult(`Validation error: ${err.message}`);
|
|
298
306
|
}
|
|
299
307
|
}
|
|
308
|
+
if (err instanceof PlatformNetworkError) {
|
|
309
|
+
return textResult(networkErrorText(err));
|
|
310
|
+
}
|
|
300
311
|
throw err;
|
|
301
312
|
}
|
|
302
313
|
if (result.profile) {
|
|
@@ -368,6 +379,9 @@ export function registerTools(api) {
|
|
|
368
379
|
}
|
|
369
380
|
return textResult(`Connection request failed: ${err.message}`);
|
|
370
381
|
}
|
|
382
|
+
if (err instanceof PlatformNetworkError) {
|
|
383
|
+
return textResult(networkErrorText(err));
|
|
384
|
+
}
|
|
371
385
|
throw err;
|
|
372
386
|
}
|
|
373
387
|
if (getPendingTarget()) {
|
|
@@ -407,6 +421,9 @@ export function registerTools(api) {
|
|
|
407
421
|
}
|
|
408
422
|
return textResult(`Failed to list requests: ${err.message}`);
|
|
409
423
|
}
|
|
424
|
+
if (err instanceof PlatformNetworkError) {
|
|
425
|
+
return textResult(networkErrorText(err));
|
|
426
|
+
}
|
|
410
427
|
throw err;
|
|
411
428
|
}
|
|
412
429
|
if (result.total === 0) {
|
|
@@ -479,6 +496,9 @@ export function registerTools(api) {
|
|
|
479
496
|
if (err instanceof PlatformApiError && err.status === 404) {
|
|
480
497
|
return textResult("Request not found or already processed. Use masons_list_requests to see current requests.");
|
|
481
498
|
}
|
|
499
|
+
if (err instanceof PlatformNetworkError) {
|
|
500
|
+
return textResult(networkErrorText(err));
|
|
501
|
+
}
|
|
482
502
|
throw err;
|
|
483
503
|
}
|
|
484
504
|
}),
|
|
@@ -503,6 +523,9 @@ export function registerTools(api) {
|
|
|
503
523
|
if (err instanceof PlatformApiError && err.status === 404) {
|
|
504
524
|
return textResult("Request not found or already processed. Use masons_list_requests to see current requests.");
|
|
505
525
|
}
|
|
526
|
+
if (err instanceof PlatformNetworkError) {
|
|
527
|
+
return textResult(networkErrorText(err));
|
|
528
|
+
}
|
|
506
529
|
throw err;
|
|
507
530
|
}
|
|
508
531
|
}),
|
|
@@ -525,6 +548,9 @@ export function registerTools(api) {
|
|
|
525
548
|
}
|
|
526
549
|
return textResult(`Failed to list connections: ${err.message}`);
|
|
527
550
|
}
|
|
551
|
+
if (err instanceof PlatformNetworkError) {
|
|
552
|
+
return textResult(networkErrorText(err));
|
|
553
|
+
}
|
|
528
554
|
throw err;
|
|
529
555
|
}
|
|
530
556
|
if (result.total === 0) {
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PLUGIN_VERSION = "0.6.
|
|
1
|
+
export declare const PLUGIN_VERSION = "0.6.6";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PLUGIN_VERSION = "0.6.
|
|
1
|
+
export const PLUGIN_VERSION = "0.6.6";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masons/agent-network",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"description": "MASONS Agent Network — OpenClaw channel plugin for connecting agent runtimes to the Agent Network over MSTP.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "MASONS.ai <hello@masons.ai> (https://masons.ai)",
|