@log0u7/opencode-mesh 0.3.0 → 0.4.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/CHANGELOG.md +42 -0
- package/README.md +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +2 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +6 -1
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +8 -1
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/discovery.d.ts +2 -0
- package/dist/lib/discovery.d.ts.map +1 -1
- package/dist/lib/discovery.js +6 -3
- package/dist/lib/discovery.js.map +1 -1
- package/dist/lib/identity.d.ts +10 -0
- package/dist/lib/identity.d.ts.map +1 -1
- package/dist/lib/identity.js +93 -12
- package/dist/lib/identity.js.map +1 -1
- package/dist/lib/peers.d.ts +4 -1
- package/dist/lib/peers.d.ts.map +1 -1
- package/dist/lib/peers.js +68 -10
- package/dist/lib/peers.js.map +1 -1
- package/dist/lib/serve.js +11 -5
- package/dist/lib/serve.js.map +1 -1
- package/dist/lib/worktree.d.ts +0 -1
- package/dist/lib/worktree.d.ts.map +1 -1
- package/dist/lib/worktree.js +0 -6
- package/dist/lib/worktree.js.map +1 -1
- package/dist/options.d.ts +13 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +64 -0
- package/dist/options.js.map +1 -0
- package/dist/plugin-v2.d.ts.map +1 -1
- package/dist/plugin-v2.js +2 -1
- package/dist/plugin-v2.js.map +1 -1
- package/dist/plugin.d.ts +4 -12
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +15 -62
- package/dist/plugin.js.map +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +9 -2
- package/dist/tools.js.map +1 -1
- package/dist/types/peer.d.ts +2 -0
- package/dist/types/peer.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/lib/peers.js
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { pairingProofPayload, verifyPairingProof } from "./identity.js";
|
|
2
3
|
// A pairing offer is only useful while the operator can relay it out of band.
|
|
3
4
|
// Past this age the token is dropped instead of becoming a permanent credential.
|
|
4
5
|
export const PAIRING_TOKEN_TTL_MS = 5 * 60_000;
|
|
5
6
|
// Complete pairing with a token the peer generated (shared out of band).
|
|
6
7
|
// Only the pairing call and the peer know it; the server compares on every request.
|
|
8
|
+
// The pinned public_key is preserved when the call provides none (manual pairing):
|
|
9
|
+
// pairing must never be able to erase a proof key it did not attest.
|
|
7
10
|
export function pairWithToken(db, peer) {
|
|
8
11
|
const now = Date.now();
|
|
9
|
-
db.conn.run(`INSERT INTO peers (node_id, hostname, fingerprint, addresses, paired, token, last_seen)
|
|
10
|
-
VALUES (?, ?, ?, ?, 1, ?, ?)
|
|
12
|
+
db.conn.run(`INSERT INTO peers (node_id, hostname, fingerprint, addresses, paired, token, public_key, last_seen)
|
|
13
|
+
VALUES (?, ?, ?, ?, 1, ?, ?, ?)
|
|
11
14
|
ON CONFLICT(node_id) DO UPDATE SET hostname = excluded.hostname,
|
|
12
|
-
fingerprint = excluded.fingerprint, paired = 1, token = excluded.token,
|
|
15
|
+
fingerprint = excluded.fingerprint, paired = 1, token = excluded.token,
|
|
16
|
+
public_key = COALESCE(excluded.public_key, peers.public_key), last_seen = excluded.last_seen`, [
|
|
13
17
|
peer.node_id,
|
|
14
18
|
peer.hostname,
|
|
15
19
|
peer.fingerprint,
|
|
16
20
|
JSON.stringify(peer.addresses ?? []),
|
|
17
21
|
peer.token,
|
|
22
|
+
peer.public_key ?? null,
|
|
18
23
|
now,
|
|
19
24
|
]);
|
|
20
25
|
db.conn.run("DELETE FROM pending_tokens WHERE token = ?", [peer.token]);
|
|
@@ -31,8 +36,9 @@ export function createPairingToken(db) {
|
|
|
31
36
|
}
|
|
32
37
|
// Check a bearer token: known paired peer, or a live pending pairing token.
|
|
33
38
|
// The pending path requires the claimed sender to be a node this host already
|
|
34
|
-
// knows,
|
|
35
|
-
|
|
39
|
+
// knows, and (the rebind-window fix) a proof signed by the sender's pinned
|
|
40
|
+
// key: a leaked offer alone cannot rotate a paired credential.
|
|
41
|
+
export function authenticateToken(db, token, from, proof) {
|
|
36
42
|
const paired = findPeerByToken(db, token);
|
|
37
43
|
if (paired) {
|
|
38
44
|
return paired;
|
|
@@ -50,15 +56,56 @@ export function authenticateToken(db, token, from) {
|
|
|
50
56
|
if (!known) {
|
|
51
57
|
return null;
|
|
52
58
|
}
|
|
59
|
+
// Proof of possession: the sender signs opencode-mesh-pair:<node_id>:<token>
|
|
60
|
+
// with the key pinned for it (first bind: the proof carries its own key).
|
|
61
|
+
const attested = attestedProof(known, token, proof);
|
|
62
|
+
if (attested === null) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
53
65
|
pairWithToken(db, {
|
|
54
66
|
node_id: known.node_id,
|
|
55
67
|
hostname: known.hostname,
|
|
56
68
|
fingerprint: known.fingerprint,
|
|
57
69
|
addresses: known.addresses,
|
|
70
|
+
public_key: attested,
|
|
58
71
|
token,
|
|
59
72
|
});
|
|
60
73
|
return known;
|
|
61
74
|
}
|
|
75
|
+
// Returns the public key to pin for this binding, or null when the proof does
|
|
76
|
+
// not attest the sender. Rules:
|
|
77
|
+
// - wire form is exactly `<base64 spki>.<base64 sig>`: no extra dots (base64
|
|
78
|
+
// decoders skip '.', so a trailing dot would otherwise verify);
|
|
79
|
+
// - unpaired known node: the proof's key is pinned once its signature checks;
|
|
80
|
+
// - paired node with a pinned key: the proof key must BE the pinned key;
|
|
81
|
+
// - paired node without a pinned key (legacy/manual rows): no remote attested
|
|
82
|
+
// rebind at all. Rotation goes through the operator (re-run mesh_pair).
|
|
83
|
+
function attestedProof(known, token, proof) {
|
|
84
|
+
if (proof === undefined || proof.length === 0) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
const separator = proof.indexOf(".");
|
|
88
|
+
if (separator <= 0 || separator === proof.length - 1) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const presentedKey = proof.slice(0, separator);
|
|
92
|
+
const signature = proof.slice(separator + 1);
|
|
93
|
+
if (signature.includes(".")) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const payload = pairingProofPayload(known.node_id, token);
|
|
97
|
+
if (known.paired) {
|
|
98
|
+
// Rotation of a live credential: the pinned key is the only authority.
|
|
99
|
+
if (known.public_key === null || presentedKey !== known.public_key) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (known.public_key !== null && presentedKey !== known.public_key) {
|
|
104
|
+
// First bind, but discovery already pinned a different key: spoof guard.
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return verifyPairingProof(presentedKey, payload, signature) ? presentedKey : null;
|
|
108
|
+
}
|
|
62
109
|
// Pairing offers are single-shot credentials with a short life: bulk delete on
|
|
63
110
|
// every check keeps the table bounded without a background timer.
|
|
64
111
|
export function prunePendingTokens(db) {
|
|
@@ -94,15 +141,25 @@ export function resolvePeerUrl(db, query) {
|
|
|
94
141
|
return address !== undefined ? `http://${address}` : null;
|
|
95
142
|
}
|
|
96
143
|
function hasPort(address) {
|
|
97
|
-
// Bracketed IPv6,
|
|
98
|
-
|
|
144
|
+
// Bracketed IPv6, with an optional zone id (`[fe80::1%eth0]:4399`) and the
|
|
145
|
+
// v4-mapped dotted form (`[::ffff:192.168.1.10]:4399`).
|
|
146
|
+
return /^\[[0-9a-f:.]+(?:%[^\]]+)?\]:\d+$/i.test(address) || /^[^:]+:\d+$/.test(address);
|
|
99
147
|
}
|
|
100
148
|
export function upsertDiscoveredPeer(db, peer) {
|
|
101
149
|
const now = Date.now();
|
|
102
|
-
db.conn.run(`INSERT INTO peers (node_id, hostname, fingerprint, addresses, paired, token, last_seen)
|
|
103
|
-
VALUES (?, ?, ?, ?, 0, NULL, ?)
|
|
150
|
+
db.conn.run(`INSERT INTO peers (node_id, hostname, fingerprint, addresses, paired, token, public_key, last_seen)
|
|
151
|
+
VALUES (?, ?, ?, ?, 0, NULL, ?, ?)
|
|
104
152
|
ON CONFLICT(node_id) DO UPDATE SET hostname = excluded.hostname,
|
|
105
|
-
fingerprint = excluded.fingerprint, addresses = excluded.addresses,
|
|
153
|
+
fingerprint = excluded.fingerprint, addresses = excluded.addresses,
|
|
154
|
+
public_key = CASE WHEN peers.paired = 1 THEN peers.public_key ELSE excluded.public_key END,
|
|
155
|
+
last_seen = excluded.last_seen`, [
|
|
156
|
+
peer.node_id,
|
|
157
|
+
peer.hostname,
|
|
158
|
+
peer.fingerprint,
|
|
159
|
+
JSON.stringify(peer.addresses),
|
|
160
|
+
peer.public_key ?? null,
|
|
161
|
+
now,
|
|
162
|
+
]);
|
|
106
163
|
}
|
|
107
164
|
function rowToPeer(row) {
|
|
108
165
|
return {
|
|
@@ -112,6 +169,7 @@ function rowToPeer(row) {
|
|
|
112
169
|
addresses: parseAddresses(row.addresses),
|
|
113
170
|
paired: row.paired === 1,
|
|
114
171
|
token: row.token,
|
|
172
|
+
public_key: row.public_key,
|
|
115
173
|
last_seen: row.last_seen,
|
|
116
174
|
};
|
|
117
175
|
}
|
package/dist/lib/peers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../src/lib/peers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../src/lib/peers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/serve.js
CHANGED
|
@@ -67,8 +67,9 @@ async function handle(db, req, res) {
|
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
// Authenticate with the claimed sender so a pending pairing token can only
|
|
70
|
-
// bind to a node this host already knows.
|
|
71
|
-
|
|
70
|
+
// bind to a node this host already knows. The pairing proof (sender-signed
|
|
71
|
+
// over node_id+token) is what authorizes binding a pairing to that node.
|
|
72
|
+
const mailPeer = authenticate(db, req, parsed.from, parsed.proof);
|
|
72
73
|
if (!mailPeer) {
|
|
73
74
|
json(res, 401, { error: "unauthorized" });
|
|
74
75
|
return;
|
|
@@ -95,13 +96,13 @@ async function handle(db, req, res) {
|
|
|
95
96
|
}
|
|
96
97
|
json(res, 404, { error: "not found" });
|
|
97
98
|
}
|
|
98
|
-
function authenticate(db, req, from = null) {
|
|
99
|
+
function authenticate(db, req, from = null, proof) {
|
|
99
100
|
const header = req.headers.authorization ?? "";
|
|
100
101
|
const match = /^Bearer (.+)$/.exec(header);
|
|
101
102
|
if (!match?.[1]) {
|
|
102
103
|
return null;
|
|
103
104
|
}
|
|
104
|
-
const peer = authenticateToken(db, match[1], from);
|
|
105
|
+
const peer = authenticateToken(db, match[1], from, proof);
|
|
105
106
|
return peer ? { node_id: peer.node_id } : null;
|
|
106
107
|
}
|
|
107
108
|
function readBody(req) {
|
|
@@ -137,7 +138,12 @@ function parseMail(raw) {
|
|
|
137
138
|
typeof parsed.body !== "string") {
|
|
138
139
|
return null;
|
|
139
140
|
}
|
|
140
|
-
return {
|
|
141
|
+
return {
|
|
142
|
+
from: parsed.from,
|
|
143
|
+
subject: parsed.subject,
|
|
144
|
+
body: parsed.body,
|
|
145
|
+
...(typeof parsed.proof === "string" ? { proof: parsed.proof } : {}),
|
|
146
|
+
};
|
|
141
147
|
}
|
|
142
148
|
catch {
|
|
143
149
|
return null;
|
package/dist/lib/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/lib/serve.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/lib/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/worktree.d.ts
CHANGED
|
@@ -36,7 +36,6 @@ export type WorktreeDomain = {
|
|
|
36
36
|
};
|
|
37
37
|
export declare const WORKTREE_TIMEOUT_MS = 15000;
|
|
38
38
|
export type WorktreeFactory = (baseUrl: string, directory: string, fetchOverride?: typeof fetch) => WorktreeClient;
|
|
39
|
-
export declare const defaultWorktreeFactory: WorktreeFactory;
|
|
40
39
|
export declare function extractClientFetch(pluginClient: unknown): typeof fetch | undefined;
|
|
41
40
|
export declare function createWorkerWorktree(client: WorktreeClient, input: {
|
|
42
41
|
name?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,KAAK,mBAAmB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAIpD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE;QACR,MAAM,CACJ,UAAU,EAAE;YAAE,mBAAmB,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EACvD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,CACJ,UAAU,EAAE;YAAE,mBAAmB,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EAC1D,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;KACrB,CAAC;CACH,CAAC;AAKF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxF,CAAC;AAKF,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAW1C,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,OAAO,KAAK,KACzB,cAAc,CAAC;AAMpB,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,KAAK,GAAG,SAAS,CAUlF;AAcD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvB,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,OAAO,CAAC,CAUlB;AAOD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAuBhG"}
|
package/dist/lib/worktree.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createOpencodeClient } from "@opencode-ai/sdk/v2";
|
|
2
1
|
// Worktree setup/teardown shells out to git; a hung git process must not pin a
|
|
3
2
|
// tool call forever. The timeout only reaches the 1.x REST client, which
|
|
4
3
|
// forwards the signal to fetch; the 2.x in-process domain ignores it.
|
|
@@ -6,11 +5,6 @@ export const WORKTREE_TIMEOUT_MS = 15_000;
|
|
|
6
5
|
function callOptions() {
|
|
7
6
|
return { signal: AbortSignal.timeout(WORKTREE_TIMEOUT_MS) };
|
|
8
7
|
}
|
|
9
|
-
export const defaultWorktreeFactory = (baseUrl, directory, fetchOverride) => createOpencodeClient({
|
|
10
|
-
baseUrl,
|
|
11
|
-
directory,
|
|
12
|
-
...(fetchOverride ? { fetch: fetchOverride } : {}),
|
|
13
|
-
});
|
|
14
8
|
// In `opencode run` (in-process server) the plugin's own v1 client carries the
|
|
15
9
|
// custom fetch that routes to the embedded server; reuse it so our v2 client
|
|
16
10
|
// reaches /experimental/worktree without a real TCP listener. The v1 client
|
package/dist/lib/worktree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SpawnFn } from "./lib/spawn.js";
|
|
2
|
+
import type { WorktreeClient } from "./lib/worktree.js";
|
|
3
|
+
export type PluginOptions = {
|
|
4
|
+
dataDir?: string;
|
|
5
|
+
port?: number;
|
|
6
|
+
bind?: "loopback" | "lan";
|
|
7
|
+
advertise?: boolean;
|
|
8
|
+
worktreeClient?: WorktreeClient;
|
|
9
|
+
spawnFn?: SpawnFn;
|
|
10
|
+
};
|
|
11
|
+
export declare function parseOptions(raw: PluginOptions | undefined): PluginOptions;
|
|
12
|
+
export declare function defaultDataDir(): string;
|
|
13
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAKF,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAiD1E;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { homedir, tmpdir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
// Validate the host-supplied options once, at the boundary. A typo'd port or
|
|
4
|
+
// bind used to surface as a late, cryptic failure (EADDRINUSE, a bind on the
|
|
5
|
+
// wrong interface, or a data dir at the filesystem root); fail clearly here.
|
|
6
|
+
export function parseOptions(raw) {
|
|
7
|
+
const options = {};
|
|
8
|
+
// `null` is treated as "no options" (the old code tolerated it); a non-object
|
|
9
|
+
// is a programming error. Unknown keys are ignored on purpose: a host may pass
|
|
10
|
+
// its own option bag, and forward-compat beats rejecting a typo'd `datadir`.
|
|
11
|
+
if (raw === undefined || raw === null) {
|
|
12
|
+
return options;
|
|
13
|
+
}
|
|
14
|
+
if (typeof raw !== "object") {
|
|
15
|
+
throw new Error("opencode-mesh: options must be an object");
|
|
16
|
+
}
|
|
17
|
+
if (raw.dataDir !== undefined) {
|
|
18
|
+
if (typeof raw.dataDir !== "string" || raw.dataDir.length === 0) {
|
|
19
|
+
throw new Error("opencode-mesh: options.dataDir must be a non-empty string");
|
|
20
|
+
}
|
|
21
|
+
options.dataDir = raw.dataDir;
|
|
22
|
+
}
|
|
23
|
+
if (raw.port !== undefined) {
|
|
24
|
+
if (typeof raw.port !== "number" ||
|
|
25
|
+
!Number.isInteger(raw.port) ||
|
|
26
|
+
raw.port < 0 ||
|
|
27
|
+
raw.port > 65535) {
|
|
28
|
+
throw new Error("opencode-mesh: options.port must be an integer between 0 and 65535");
|
|
29
|
+
}
|
|
30
|
+
options.port = raw.port;
|
|
31
|
+
}
|
|
32
|
+
if (raw.bind !== undefined) {
|
|
33
|
+
if (raw.bind !== "loopback" && raw.bind !== "lan") {
|
|
34
|
+
throw new Error('opencode-mesh: options.bind must be "loopback" or "lan"');
|
|
35
|
+
}
|
|
36
|
+
options.bind = raw.bind;
|
|
37
|
+
}
|
|
38
|
+
if (raw.advertise !== undefined) {
|
|
39
|
+
if (typeof raw.advertise !== "boolean") {
|
|
40
|
+
throw new Error("opencode-mesh: options.advertise must be a boolean");
|
|
41
|
+
}
|
|
42
|
+
options.advertise = raw.advertise;
|
|
43
|
+
}
|
|
44
|
+
// Opaque collaborators are passed through untouched: the plugin cannot
|
|
45
|
+
// validate a client or spawn function beyond its nominal type.
|
|
46
|
+
if (raw.worktreeClient !== undefined) {
|
|
47
|
+
options.worktreeClient = raw.worktreeClient;
|
|
48
|
+
}
|
|
49
|
+
if (raw.spawnFn !== undefined) {
|
|
50
|
+
options.spawnFn = raw.spawnFn;
|
|
51
|
+
}
|
|
52
|
+
return options;
|
|
53
|
+
}
|
|
54
|
+
export function defaultDataDir() {
|
|
55
|
+
const dataHome = process.env.XDG_DATA_HOME || join(homeDir(), ".local", "share");
|
|
56
|
+
return join(dataHome, "opencode-mesh");
|
|
57
|
+
}
|
|
58
|
+
// `os.homedir()` / `os.tmpdir()` replace the old empty-string fallback, which
|
|
59
|
+
// produced a path at the filesystem root (`/.local/share/...`) when HOME was
|
|
60
|
+
// unset or blank.
|
|
61
|
+
function homeDir() {
|
|
62
|
+
return process.env.HOME || homedir() || tmpdir();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkBjC,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,GAA8B;IACzD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,IACE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B,GAAG,CAAC,IAAI,GAAG,CAAC;YACZ,GAAG,CAAC,IAAI,GAAG,KAAK,EAChB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACpC,CAAC;IACD,uEAAuE;IACvE,+DAA+D;IAC/D,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IAC9C,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACzC,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,kBAAkB;AAClB,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,MAAM,EAAE,CAAC;AACnD,CAAC"}
|
package/dist/plugin-v2.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-v2.d.ts","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA2B1C,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"plugin-v2.d.ts","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA2B1C,eAAO,MAAM,MAAM,eA6EjB,CAAC"}
|
package/dist/plugin-v2.js
CHANGED
|
@@ -9,7 +9,7 @@ import { v2WorktreeDomainClient } from "./lib/worktree.js";
|
|
|
9
9
|
import { reconcileWorkers } from "./lib/workers.js";
|
|
10
10
|
import { startMeshServer } from "./lib/serve.js";
|
|
11
11
|
import { buildToolSpecs } from "./tools.js";
|
|
12
|
-
import { defaultDataDir, parseOptions } from "./
|
|
12
|
+
import { defaultDataDir, parseOptions } from "./options.js";
|
|
13
13
|
const DEFAULT_PORT = 4399;
|
|
14
14
|
// A worker spawned by mesh_spawn inherits this marker: it must not boot its own
|
|
15
15
|
// mesh server, advertise over mDNS or register mesh tools. A pool of N workers
|
|
@@ -52,6 +52,7 @@ export const MeshV2 = Plugin.define({
|
|
|
52
52
|
port,
|
|
53
53
|
node_id: identity.node_id,
|
|
54
54
|
fingerprint: identity.fingerprint,
|
|
55
|
+
public_key: identity.public_key,
|
|
55
56
|
});
|
|
56
57
|
browseHandle = browseMesh({
|
|
57
58
|
bonjour,
|
package/dist/plugin-v2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-v2.js","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAwB,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAqB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAgB,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"plugin-v2.js","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
2
|
-
import { type
|
|
3
|
-
|
|
4
|
-
export type PluginOptions
|
|
5
|
-
|
|
6
|
-
port?: number;
|
|
7
|
-
bind?: "loopback" | "lan";
|
|
8
|
-
advertise?: boolean;
|
|
9
|
-
worktreeClient?: WorktreeClient;
|
|
10
|
-
spawnFn?: SpawnFn;
|
|
11
|
-
};
|
|
12
|
-
export declare function parseOptions(raw: PluginOptions | undefined): PluginOptions;
|
|
2
|
+
import { type WorktreeFactory } from "./lib/worktree.js";
|
|
3
|
+
export { defaultDataDir, parseOptions } from "./options.js";
|
|
4
|
+
export type { PluginOptions } from "./options.js";
|
|
5
|
+
export declare const defaultWorktreeFactory: WorktreeFactory;
|
|
13
6
|
export declare const MeshPlugin: Plugin;
|
|
14
|
-
export declare function defaultDataDir(): string;
|
|
15
7
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAWzD,OAAO,EAA2C,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKlG,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAOlD,eAAO,MAAM,sBAAsB,EAAE,eAKJ,CAAC;AAclC,eAAO,MAAM,UAAU,EAAE,MA8ExB,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,68 +1,30 @@
|
|
|
1
1
|
import { homedir, tmpdir } from "node:os";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { tool } from "@opencode-ai/plugin";
|
|
4
|
+
import { createOpencodeClient } from "@opencode-ai/sdk/v2";
|
|
4
5
|
import { Bonjour } from "bonjour-service";
|
|
5
6
|
import { openMeshDb } from "./lib/db.js";
|
|
6
7
|
import { advertiseMesh, browseMesh } from "./lib/discovery.js";
|
|
7
8
|
import { upsertDiscoveredPeer } from "./lib/peers.js";
|
|
8
9
|
import { loadOrCreateIdentity } from "./lib/identity.js";
|
|
9
10
|
import { nodeSpawn, stopAllWorkers } from "./lib/spawn.js";
|
|
10
|
-
import {
|
|
11
|
+
import { defaultDataDir, parseOptions } from "./options.js";
|
|
12
|
+
import { extractClientFetch } from "./lib/worktree.js";
|
|
11
13
|
import { reconcileWorkers } from "./lib/workers.js";
|
|
12
14
|
import { startMeshServer } from "./lib/serve.js";
|
|
13
15
|
import { buildToolSpecs } from "./tools.js";
|
|
16
|
+
export { defaultDataDir, parseOptions } from "./options.js";
|
|
17
|
+
// The v1 worktree REST factory lives HERE, not in lib/worktree.ts: it is only
|
|
18
|
+
// reachable from v1 hosts, and it imports `@opencode-ai/sdk/v2`, which only
|
|
19
|
+
// hosts that bundle the v1-era SDK resolve. Keeping it in the lazily loaded v1
|
|
20
|
+
// adapter keeps the SDK out of the package's static import graph, which v2
|
|
21
|
+
// hosts reject at load time (see scripts/smoke-dist.mjs).
|
|
22
|
+
export const defaultWorktreeFactory = (baseUrl, directory, fetchOverride) => createOpencodeClient({
|
|
23
|
+
baseUrl,
|
|
24
|
+
directory,
|
|
25
|
+
...(fetchOverride ? { fetch: fetchOverride } : {}),
|
|
26
|
+
});
|
|
14
27
|
const DEFAULT_PORT = 4399;
|
|
15
|
-
// Validate the host-supplied options once, at the boundary. A typo'd port or
|
|
16
|
-
// bind used to surface as a late, cryptic failure (EADDRINUSE, a bind on the
|
|
17
|
-
// wrong interface, or a data dir at the filesystem root); fail clearly here.
|
|
18
|
-
export function parseOptions(raw) {
|
|
19
|
-
const options = {};
|
|
20
|
-
// `null` is treated as "no options" (the old code tolerated it); a non-object
|
|
21
|
-
// is a programming error. Unknown keys are ignored on purpose: a host may pass
|
|
22
|
-
// its own option bag, and forward-compat beats rejecting a typo'd `datadir`.
|
|
23
|
-
if (raw === undefined || raw === null) {
|
|
24
|
-
return options;
|
|
25
|
-
}
|
|
26
|
-
if (typeof raw !== "object") {
|
|
27
|
-
throw new Error("opencode-mesh: options must be an object");
|
|
28
|
-
}
|
|
29
|
-
if (raw.dataDir !== undefined) {
|
|
30
|
-
if (typeof raw.dataDir !== "string" || raw.dataDir.length === 0) {
|
|
31
|
-
throw new Error("opencode-mesh: options.dataDir must be a non-empty string");
|
|
32
|
-
}
|
|
33
|
-
options.dataDir = raw.dataDir;
|
|
34
|
-
}
|
|
35
|
-
if (raw.port !== undefined) {
|
|
36
|
-
if (typeof raw.port !== "number" ||
|
|
37
|
-
!Number.isInteger(raw.port) ||
|
|
38
|
-
raw.port < 0 ||
|
|
39
|
-
raw.port > 65535) {
|
|
40
|
-
throw new Error("opencode-mesh: options.port must be an integer between 0 and 65535");
|
|
41
|
-
}
|
|
42
|
-
options.port = raw.port;
|
|
43
|
-
}
|
|
44
|
-
if (raw.bind !== undefined) {
|
|
45
|
-
if (raw.bind !== "loopback" && raw.bind !== "lan") {
|
|
46
|
-
throw new Error('opencode-mesh: options.bind must be "loopback" or "lan"');
|
|
47
|
-
}
|
|
48
|
-
options.bind = raw.bind;
|
|
49
|
-
}
|
|
50
|
-
if (raw.advertise !== undefined) {
|
|
51
|
-
if (typeof raw.advertise !== "boolean") {
|
|
52
|
-
throw new Error("opencode-mesh: options.advertise must be a boolean");
|
|
53
|
-
}
|
|
54
|
-
options.advertise = raw.advertise;
|
|
55
|
-
}
|
|
56
|
-
// Opaque collaborators are passed through untouched: the plugin cannot
|
|
57
|
-
// validate a client or spawn function beyond its nominal type.
|
|
58
|
-
if (raw.worktreeClient !== undefined) {
|
|
59
|
-
options.worktreeClient = raw.worktreeClient;
|
|
60
|
-
}
|
|
61
|
-
if (raw.spawnFn !== undefined) {
|
|
62
|
-
options.spawnFn = raw.spawnFn;
|
|
63
|
-
}
|
|
64
|
-
return options;
|
|
65
|
-
}
|
|
66
28
|
// A worker spawned by mesh_spawn inherits this marker: it must not boot its own
|
|
67
29
|
// mesh server, advertise over mDNS or register mesh tools. A pool of N workers
|
|
68
30
|
// then costs N worktrees, not N mesh nodes.
|
|
@@ -100,6 +62,7 @@ export const MeshPlugin = async (input, rawOptions) => {
|
|
|
100
62
|
port,
|
|
101
63
|
node_id: identity.node_id,
|
|
102
64
|
fingerprint: identity.fingerprint,
|
|
65
|
+
public_key: identity.public_key,
|
|
103
66
|
});
|
|
104
67
|
browseHandle = browseMesh({
|
|
105
68
|
bonjour,
|
|
@@ -151,14 +114,4 @@ function zodShape(spec) {
|
|
|
151
114
|
return [field.name, field.required ? described : described.optional()];
|
|
152
115
|
}));
|
|
153
116
|
}
|
|
154
|
-
export function defaultDataDir() {
|
|
155
|
-
const dataHome = process.env.XDG_DATA_HOME || join(homeDir(), ".local", "share");
|
|
156
|
-
return join(dataHome, "opencode-mesh");
|
|
157
|
-
}
|
|
158
|
-
// `os.homedir()` / `os.tmpdir()` replace the old empty-string fallback, which
|
|
159
|
-
// produced a path at the filesystem root (`/.local/share/...`) when HOME was
|
|
160
|
-
// unset or blank.
|
|
161
|
-
function homeDir() {
|
|
162
|
-
return process.env.HOME || homedir() || tmpdir();
|
|
163
|
-
}
|
|
164
117
|
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAwB,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAqB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAgB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { MeshDb } from "./lib/db.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type NodeIdentity } from "./lib/identity.js";
|
|
3
3
|
import { type SpawnFn } from "./lib/spawn.js";
|
|
4
4
|
import { type WorktreeClient } from "./lib/worktree.js";
|
|
5
5
|
export type ToolField = {
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUpE,OAAO,EAAuD,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAM3B,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/E,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAcF,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,EAAE,CA+T5D"}
|