@onlyne/node-host 3.0.0 → 3.2.0
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/README.md +22 -0
- package/dist/acquire.d.ts +62 -0
- package/dist/acquire.d.ts.map +1 -0
- package/dist/acquire.js +146 -0
- package/dist/acquire.js.map +1 -0
- package/dist/host-text.d.ts +2 -0
- package/dist/host-text.d.ts.map +1 -0
- package/dist/host-text.js +103 -0
- package/dist/host-text.js.map +1 -0
- package/dist/i18n.d.ts +9 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +19 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +20 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +144 -0
- package/dist/keys.js.map +1 -0
- package/dist/log.d.ts +43 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +77 -0
- package/dist/log.js.map +1 -0
- package/dist/network.d.ts +27 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +350 -0
- package/dist/network.js.map +1 -0
- package/dist/node.d.ts +20 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +153 -0
- package/dist/node.js.map +1 -0
- package/dist/store.d.ts +44 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +219 -0
- package/dist/store.js.map +1 -0
- package/dist/tui-text.d.ts +37 -0
- package/dist/tui-text.d.ts.map +1 -0
- package/dist/tui-text.js +69 -0
- package/dist/tui-text.js.map +1 -0
- package/dist/tui.d.ts +19 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +400 -0
- package/dist/tui.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -10
- package/src/i18n.ts +0 -22
- package/src/index.ts +0 -80
- package/src/keys.ts +0 -158
- package/src/log.ts +0 -52
- package/src/network.ts +0 -382
- package/src/tui-text.ts +0 -73
- package/src/tui.ts +0 -318
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OnlyneNode, type Action, type KeyHook, type MaintenanceClock, type MsgInput, type Runtime, type Storage } from "@onlyne/lib";
|
|
2
|
+
import { type ContextRegistry } from "./store.ts";
|
|
3
|
+
import type { OnlyneConfig } from "./types.ts";
|
|
4
|
+
export interface NodeDeps {
|
|
5
|
+
config: OnlyneConfig;
|
|
6
|
+
endpoint: string;
|
|
7
|
+
instanceId: string;
|
|
8
|
+
storage: Storage;
|
|
9
|
+
contexts: ContextRegistry;
|
|
10
|
+
decide(input: MsgInput): Promise<Action>;
|
|
11
|
+
runtime: Runtime;
|
|
12
|
+
/** The timer primitives of the library's own maintenance loop (RFC 0017 §6). */
|
|
13
|
+
clock: MaintenanceClock;
|
|
14
|
+
/** The directory the host resolved for this node's identity key; absent keeps the loopback development binding. */
|
|
15
|
+
keyDir?: string;
|
|
16
|
+
keys?: KeyHook;
|
|
17
|
+
}
|
|
18
|
+
export declare function advertisedHost(bind: string): string;
|
|
19
|
+
export declare function createOnlyneNode(deps: NodeDeps): OnlyneNode;
|
|
20
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,UAAU,EAAc,KAAK,MAAM,EAA+C,KAAK,OAAO,EAAoB,KAAK,gBAAgB,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAgC,KAAK,OAAO,EAAe,MAAM,aAAa,CAAC;AAGzR,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,QAAQ;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,gBAAgB,CAAC;IACxB,mHAAmH;IACnH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CA8H3D"}
|
package/dist/node.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { networkInterfaces } from "node:os";
|
|
2
|
+
import { FetchTransport, OnlyneError, OnlyneNode, trustPhase } from "@onlyne/lib";
|
|
3
|
+
import { loadOrCreateKey, writeKeyMaterial } from "./keys.js";
|
|
4
|
+
import { hostText as t } from "./host-text.js";
|
|
5
|
+
import { canAnswer } from "./store.js";
|
|
6
|
+
export function advertisedHost(bind) {
|
|
7
|
+
if (bind !== "0.0.0.0" && bind !== "::")
|
|
8
|
+
return bind;
|
|
9
|
+
for (const addresses of Object.values(networkInterfaces())) {
|
|
10
|
+
for (const address of addresses ?? []) {
|
|
11
|
+
if (!address.internal && address.family === "IPv4")
|
|
12
|
+
return address.address;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
throw new OnlyneError("unavailable", t("addressUnavailable"));
|
|
16
|
+
}
|
|
17
|
+
export function createOnlyneNode(deps) {
|
|
18
|
+
const { config } = deps;
|
|
19
|
+
if (config.node.key_ref && deps.keys === undefined)
|
|
20
|
+
throw new OnlyneError("unsupported_delivery", t("keyProvider"));
|
|
21
|
+
// Without a key directory the node keeps the loopback development binding (RFC 0001 §1).
|
|
22
|
+
if (deps.keys === undefined && deps.keyDir === undefined && !["127.0.0.1", "::1", "localhost"].includes(config.server.bind)) {
|
|
23
|
+
throw new OnlyneError("unsupported_delivery", t("loopbackBind"));
|
|
24
|
+
}
|
|
25
|
+
let node;
|
|
26
|
+
const authenticate = async (request) => {
|
|
27
|
+
const actor = request.headers.get("Onlyne-Actor");
|
|
28
|
+
if (!actor || !/^[A-Za-z][A-Za-z0-9+.-]*:[^\s]+$/.test(actor))
|
|
29
|
+
return null;
|
|
30
|
+
if (actor === config.node.id)
|
|
31
|
+
throw new OnlyneError("forbidden", t("managementIdentity"));
|
|
32
|
+
return { actor };
|
|
33
|
+
};
|
|
34
|
+
const resolve = async (id) => {
|
|
35
|
+
let target;
|
|
36
|
+
if (id === config.node.id) {
|
|
37
|
+
target = { node_id: id, base_url: deps.endpoint };
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
try {
|
|
41
|
+
target = await node.discovery.resolve(id);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const trustEntry = await node.trust.entry(id).catch(() => undefined);
|
|
45
|
+
if (trustEntry?.base_url) {
|
|
46
|
+
target = { node_id: id, base_url: trustEntry.base_url };
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { ...target, headers: { "Onlyne-Actor": config.node.id } };
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Admission reads the trust projection, never the discovery catalog (design §1.1): a discovered
|
|
57
|
+
* peer is a clue (RFC 0017 §4), and `discovery.known` is process-local, so a restart would refuse
|
|
58
|
+
* a peer whose exchange already completed.
|
|
59
|
+
*/
|
|
60
|
+
const admitted = async (id, context) => {
|
|
61
|
+
if (id === config.node.id)
|
|
62
|
+
return true;
|
|
63
|
+
return await context.trust(id) === "exchanged";
|
|
64
|
+
};
|
|
65
|
+
const keyDir = deps.keyDir;
|
|
66
|
+
const keys = deps.keys ?? (keyDir === undefined ? undefined : Object.assign(() => loadOrCreateKey(keyDir, config.node.id), { replace: (material) => writeKeyMaterial(keyDir, material, { replace: true }) }));
|
|
67
|
+
// The library's own signing transport, built here for one reason: a missing trust row has to
|
|
68
|
+
// end at this host's menu. Signing still happens only for a keyed node, and the trust reads
|
|
69
|
+
// resolve lazily because the service exists only once the node is built.
|
|
70
|
+
const signing = keys === undefined ? undefined : {
|
|
71
|
+
trust: {
|
|
72
|
+
entry: id => node.trust.entry(id),
|
|
73
|
+
signRequest: (request, target, raw) => node.trust.signRequest(request, target, raw),
|
|
74
|
+
verifyResponse: (target, request, response, body) => node.trust.verifyResponse(target, request, response, body),
|
|
75
|
+
},
|
|
76
|
+
guidance: details => ({
|
|
77
|
+
entry: details.required_action === "confirm_exchange"
|
|
78
|
+
? ["/onlyne", t("guideContacts"), t("guidePending"), t("guideAccept")]
|
|
79
|
+
: ["/onlyne", t("guideDiscover"), t("guideRequestExchange")],
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
node = new OnlyneNode({
|
|
83
|
+
node_id: config.node.id, base_url: deps.endpoint, instance_id: deps.instanceId,
|
|
84
|
+
now: () => Date.now(), id: () => crypto.randomUUID(),
|
|
85
|
+
authentication: keys === undefined ? ["none"] : ["signature"], plugins: {
|
|
86
|
+
storage: deps.storage, authenticate, resolve, decide: deps.decide, runtime: deps.runtime, maintenanceClock: deps.clock,
|
|
87
|
+
...(keys === undefined ? {} : { keys }),
|
|
88
|
+
...(signing === undefined ? {} : { transport: new FetchTransport(resolve, fetch, signing) }),
|
|
89
|
+
...(config.trust === undefined ? {} : { trust_seeds: config.trust }),
|
|
90
|
+
domainCandidates: id => node.discovery.candidates(id),
|
|
91
|
+
// The keyless development binding checks no identity (RFC 0001 §1): every declared
|
|
92
|
+
// actor may open a thread. A keyed node admits only peers whose exchange completed.
|
|
93
|
+
mayAdmit: async (actor, _thread, context) => keys === undefined || await admitted(actor, context),
|
|
94
|
+
inboundThread: async (actor, context) => keys === undefined || await admitted(actor, context),
|
|
95
|
+
// A context that cannot answer is not a continuation target: publishing one lets a
|
|
96
|
+
// sender aim a message at a session that can never reply (caerulea report 4, problem 7).
|
|
97
|
+
executionContexts: async () => (await deps.contexts.list()).filter(canAnswer)
|
|
98
|
+
.map(record => ({ alias: record.alias, summary: record.summary, state: record.state })),
|
|
99
|
+
mention: async (alias) => {
|
|
100
|
+
const name = alias.replace(/^@/, "");
|
|
101
|
+
if (name === "self" || name === config.node.id)
|
|
102
|
+
return config.node.id;
|
|
103
|
+
const candidates = [
|
|
104
|
+
...(await node.discovery.listRecords()).map(record => record.node_id),
|
|
105
|
+
...(await node.trust.list(node.auth)).map(entry => entry.node_id),
|
|
106
|
+
];
|
|
107
|
+
const ids = [...new Set(candidates.filter(id => id === name || id.split(":").at(-1) === name))];
|
|
108
|
+
if (ids.length !== 1)
|
|
109
|
+
throw new OnlyneError(ids.length ? "ambiguous_target" : "not_found", t("mentionNotFound", { name }));
|
|
110
|
+
return ids[0];
|
|
111
|
+
},
|
|
112
|
+
directory: async () => ({ node: config.node.id, region: config.region, endpoint: deps.endpoint, peers: await node.discovery.listRecords(), contexts: await deps.contexts.list() }),
|
|
113
|
+
// The same rows onlyne://neighbors renders: every observed or trusted node with its trust state.
|
|
114
|
+
neighbors: async () => {
|
|
115
|
+
const records = await node.discovery.listRecords();
|
|
116
|
+
const trust = new Map((await node.trust.list(node.auth)).map(entry => [entry.node_id, entry]));
|
|
117
|
+
const at = Date.now();
|
|
118
|
+
const byNode = new Map();
|
|
119
|
+
for (const record of records) {
|
|
120
|
+
if (record.node_id === config.node.id)
|
|
121
|
+
continue;
|
|
122
|
+
const entry = trust.get(record.node_id);
|
|
123
|
+
const verified = record.verified_at !== undefined && Date.parse(record.expires_at) > at;
|
|
124
|
+
const current = byNode.get(record.node_id);
|
|
125
|
+
if (current !== undefined && (current.verified || !verified))
|
|
126
|
+
continue;
|
|
127
|
+
byNode.set(record.node_id, {
|
|
128
|
+
node_id: record.node_id, base_url: record.base_url,
|
|
129
|
+
...(record.membership?.domain_id === undefined ? {} : { region: record.membership.domain_id }),
|
|
130
|
+
...(record.last_seen === undefined ? {} : { last_seen: record.last_seen }),
|
|
131
|
+
verified: verified || entry?.state === "trusted",
|
|
132
|
+
phase: entry === undefined ? "no_exchange" : trustPhase(entry),
|
|
133
|
+
fingerprint: entry?.fingerprint ?? null,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
for (const entry of trust.values()) {
|
|
137
|
+
if (entry.node_id === config.node.id || byNode.has(entry.node_id))
|
|
138
|
+
continue;
|
|
139
|
+
byNode.set(entry.node_id, {
|
|
140
|
+
node_id: entry.node_id,
|
|
141
|
+
base_url: entry.base_url,
|
|
142
|
+
verified: entry.state === "trusted",
|
|
143
|
+
phase: trustPhase(entry),
|
|
144
|
+
fingerprint: entry.fingerprint,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return [...byNode.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([, row]) => row);
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
return node;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Entry, Storage, ThreadRef, Transaction } from "@onlyne/lib";
|
|
2
|
+
import type { ContextRecord } from "./types.ts";
|
|
3
|
+
/** Key/value rows under one SQLite file; the library's durable state and the plugin's registry share it. */
|
|
4
|
+
export declare class SqliteStorage implements Storage {
|
|
5
|
+
#private;
|
|
6
|
+
readonly guarantee: "durable";
|
|
7
|
+
constructor(path: string);
|
|
8
|
+
/**
|
|
9
|
+
* Serialize every transaction; SQLite's own BEGIN IMMEDIATE would otherwise race across awaits.
|
|
10
|
+
* A caller already inside a callback on this same store is refused at once: the outer
|
|
11
|
+
* transaction still holds the writer, so queueing behind it could never settle. A caller
|
|
12
|
+
* that waits QUEUE_WAIT_MS for a free writer is refused instead of hanging, and its callback
|
|
13
|
+
* never runs; a callback that has started is never timed out, because an open SQLite
|
|
14
|
+
* transaction cannot be abandoned safely.
|
|
15
|
+
*/
|
|
16
|
+
transaction<T>(work: (tx: Transaction) => Promise<T>): Promise<T>;
|
|
17
|
+
close(): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Whether a registered context can answer a delivery. Only the session holding this node's
|
|
21
|
+
* own send right can: a subagent context reads and drafts, never sends. Advertising one as a
|
|
22
|
+
* continuation target hands the sender a message nobody there can reply to, and the sender
|
|
23
|
+
* has no way to see that from the alias (caerulea report 4, problem 7).
|
|
24
|
+
*/
|
|
25
|
+
export declare function canAnswer(record: ContextRecord): boolean;
|
|
26
|
+
/** Alias allocation and binding for execution contexts; the store is the authority across restarts. */
|
|
27
|
+
export declare class ContextRegistry {
|
|
28
|
+
private readonly storage;
|
|
29
|
+
private readonly nodeId;
|
|
30
|
+
private readonly mainAgentId;
|
|
31
|
+
constructor(storage: Storage, nodeId: string, mainAgentId: string);
|
|
32
|
+
/** The main OMP session is addressable like a registered execution context. */
|
|
33
|
+
ensureMain(): Promise<ContextRecord>;
|
|
34
|
+
allocate(thread_ref: ThreadRef | undefined, summary: string, source?: Entry["message"]): Promise<ContextRecord>;
|
|
35
|
+
bind(alias: string, binding: {
|
|
36
|
+
agent_id: string;
|
|
37
|
+
session_file?: string;
|
|
38
|
+
parent_id?: string;
|
|
39
|
+
}): Promise<ContextRecord>;
|
|
40
|
+
find(alias: string): Promise<ContextRecord | undefined>;
|
|
41
|
+
list(): Promise<ContextRecord[]>;
|
|
42
|
+
updateState(alias: string, state: ContextRecord["state"]): Promise<ContextRecord | undefined>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAchD,4GAA4G;AAC5G,qBAAa,aAAc,YAAW,OAAO;;IAC5C,QAAQ,CAAC,SAAS,EAAG,SAAS,CAAU;gBAM5B,IAAI,EAAE,MAAM;IAiBxB;;;;;;;OAOG;IACH,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA8EjE,KAAK,IAAI,IAAI;CAKb;AAKD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAExD;AAED,uGAAuG;AACvG,qBAAa,eAAe;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAW,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAU,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAA/E,OAAO,EAAE,OAAO,EAAmB,MAAM,EAAE,MAAM,EAAmB,WAAW,EAAE,MAAM;IAEpH,+EAA+E;IACzE,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAcpC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAqB/G,IAAI,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,aAAa,CAAC;IAkBnB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAIvD,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAMhC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAUnG"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Database } from "bun:sqlite";
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
import { chmodSync, existsSync, mkdirSync } from "node:fs";
|
|
4
|
+
import { dirname } from "node:path";
|
|
5
|
+
import { OnlyneError } from "@onlyne/lib";
|
|
6
|
+
import { hostText as t } from "./host-text.js";
|
|
7
|
+
/** The store whose transaction callback is currently running in this async context. */
|
|
8
|
+
const runningStore = new AsyncLocalStorage();
|
|
9
|
+
/** How long a transaction may wait for the writer before it is refused instead of queued. */
|
|
10
|
+
const QUEUE_WAIT_MS = 5_000;
|
|
11
|
+
/** Key/value rows under one SQLite file; the library's durable state and the plugin's registry share it. */
|
|
12
|
+
export class SqliteStorage {
|
|
13
|
+
guarantee = "durable";
|
|
14
|
+
#db;
|
|
15
|
+
#queue = [];
|
|
16
|
+
#running = false;
|
|
17
|
+
#closed = false;
|
|
18
|
+
constructor(path) {
|
|
19
|
+
// The store carries trust rows and, while a rotation is unacknowledged, the old private
|
|
20
|
+
// key that proves it. It is secret material: 0700 for the directory, 0600 for the files,
|
|
21
|
+
// including the WAL and shared-memory sidecars SQLite creates beside them.
|
|
22
|
+
const dir = dirname(path);
|
|
23
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
24
|
+
chmodSync(dir, 0o700);
|
|
25
|
+
this.#db = new Database(path, { create: true });
|
|
26
|
+
this.#db.exec("PRAGMA journal_mode = WAL");
|
|
27
|
+
this.#db.exec("PRAGMA synchronous = FULL");
|
|
28
|
+
this.#db.exec("PRAGMA busy_timeout = 5000");
|
|
29
|
+
this.#db.exec("CREATE TABLE IF NOT EXISTS kv (key TEXT PRIMARY KEY, value TEXT NOT NULL)");
|
|
30
|
+
for (const file of [path, `${path}-wal`, `${path}-shm`]) {
|
|
31
|
+
if (existsSync(file))
|
|
32
|
+
chmodSync(file, 0o600);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Serialize every transaction; SQLite's own BEGIN IMMEDIATE would otherwise race across awaits.
|
|
37
|
+
* A caller already inside a callback on this same store is refused at once: the outer
|
|
38
|
+
* transaction still holds the writer, so queueing behind it could never settle. A caller
|
|
39
|
+
* that waits QUEUE_WAIT_MS for a free writer is refused instead of hanging, and its callback
|
|
40
|
+
* never runs; a callback that has started is never timed out, because an open SQLite
|
|
41
|
+
* transaction cannot be abandoned safely.
|
|
42
|
+
*/
|
|
43
|
+
transaction(work) {
|
|
44
|
+
if (runningStore.getStore() === this) {
|
|
45
|
+
return Promise.reject(new OnlyneError("unavailable", t("storeNested")));
|
|
46
|
+
}
|
|
47
|
+
if (this.#closed)
|
|
48
|
+
return Promise.reject(new OnlyneError("unavailable", t("storeClosed")));
|
|
49
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
50
|
+
const waiter = {
|
|
51
|
+
start: () => {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
runningStore.run(this, () => this.#execute(work)).then(resolve, reject)
|
|
54
|
+
.finally(() => { this.#running = false; this.#drain(); });
|
|
55
|
+
},
|
|
56
|
+
expire: () => {
|
|
57
|
+
const index = this.#queue.indexOf(waiter);
|
|
58
|
+
if (index === -1)
|
|
59
|
+
return;
|
|
60
|
+
this.#queue.splice(index, 1);
|
|
61
|
+
reject(new OnlyneError("unavailable", t("storeBusy")));
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
const timer = setTimeout(() => waiter.expire(), QUEUE_WAIT_MS);
|
|
65
|
+
this.#queue.push(waiter);
|
|
66
|
+
this.#drain();
|
|
67
|
+
return promise;
|
|
68
|
+
}
|
|
69
|
+
#drain() {
|
|
70
|
+
if (this.#running)
|
|
71
|
+
return;
|
|
72
|
+
const waiter = this.#queue.shift();
|
|
73
|
+
if (waiter === undefined)
|
|
74
|
+
return;
|
|
75
|
+
this.#running = true;
|
|
76
|
+
void waiter.start();
|
|
77
|
+
}
|
|
78
|
+
async #execute(work) {
|
|
79
|
+
if (this.#closed)
|
|
80
|
+
throw new Error(t("storeClosed"));
|
|
81
|
+
this.#db.exec("BEGIN IMMEDIATE");
|
|
82
|
+
const tx = {
|
|
83
|
+
get: async (key) => this.#get(key),
|
|
84
|
+
put: async (key, value) => this.#put(key, value),
|
|
85
|
+
delete: async (key) => {
|
|
86
|
+
this.#db.query("DELETE FROM kv WHERE key = ?").run(key);
|
|
87
|
+
},
|
|
88
|
+
scan: async (prefix) => this.#scan(prefix),
|
|
89
|
+
};
|
|
90
|
+
try {
|
|
91
|
+
const value = await work(tx);
|
|
92
|
+
this.#db.exec("COMMIT");
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
try {
|
|
97
|
+
this.#db.exec("ROLLBACK");
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// The transaction may already be gone; preserve the original failure.
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
#get(key) {
|
|
106
|
+
const row = this.#db.query("SELECT value FROM kv WHERE key = ?").get(key);
|
|
107
|
+
return row === null ? undefined : JSON.parse(row.value);
|
|
108
|
+
}
|
|
109
|
+
#put(key, value) {
|
|
110
|
+
this.#db
|
|
111
|
+
.query("INSERT INTO kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value")
|
|
112
|
+
.run(key, JSON.stringify(value));
|
|
113
|
+
}
|
|
114
|
+
#scan(prefix) {
|
|
115
|
+
const rows = this.#db
|
|
116
|
+
.query("SELECT key, value FROM kv WHERE substr(key, 1, ?) = ? ORDER BY key")
|
|
117
|
+
.all(prefix.length, prefix);
|
|
118
|
+
return rows.map(row => ({ key: row.key, value: JSON.parse(row.value) }));
|
|
119
|
+
}
|
|
120
|
+
close() {
|
|
121
|
+
if (this.#closed)
|
|
122
|
+
return;
|
|
123
|
+
this.#closed = true;
|
|
124
|
+
this.#db.close();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const COUNTER_KEY = "meta/context-counter";
|
|
128
|
+
const CONTEXT_PREFIX = "context/";
|
|
129
|
+
/**
|
|
130
|
+
* Whether a registered context can answer a delivery. Only the session holding this node's
|
|
131
|
+
* own send right can: a subagent context reads and drafts, never sends. Advertising one as a
|
|
132
|
+
* continuation target hands the sender a message nobody there can reply to, and the sender
|
|
133
|
+
* has no way to see that from the alias (caerulea report 4, problem 7).
|
|
134
|
+
*/
|
|
135
|
+
export function canAnswer(record) {
|
|
136
|
+
return record.agent_id !== undefined && record.agent_id === record.main_agent_id;
|
|
137
|
+
}
|
|
138
|
+
/** Alias allocation and binding for execution contexts; the store is the authority across restarts. */
|
|
139
|
+
export class ContextRegistry {
|
|
140
|
+
storage;
|
|
141
|
+
nodeId;
|
|
142
|
+
mainAgentId;
|
|
143
|
+
constructor(storage, nodeId, mainAgentId) {
|
|
144
|
+
this.storage = storage;
|
|
145
|
+
this.nodeId = nodeId;
|
|
146
|
+
this.mainAgentId = mainAgentId;
|
|
147
|
+
}
|
|
148
|
+
/** The main OMP session is addressable like a registered execution context. */
|
|
149
|
+
async ensureMain() {
|
|
150
|
+
return this.storage.transaction(async (tx) => {
|
|
151
|
+
const key = `${CONTEXT_PREFIX}main`;
|
|
152
|
+
const current = await tx.get(key);
|
|
153
|
+
if (current !== undefined)
|
|
154
|
+
return current;
|
|
155
|
+
const record = {
|
|
156
|
+
alias: "main", node_id: this.nodeId, main_agent_id: this.mainAgentId, agent_id: this.mainAgentId,
|
|
157
|
+
summary: t("mainSummary"), state: "idle", created_at: new Date().toISOString(),
|
|
158
|
+
};
|
|
159
|
+
await tx.put(key, record);
|
|
160
|
+
return record;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
async allocate(thread_ref, summary, source) {
|
|
164
|
+
return this.storage.transaction(async (tx) => {
|
|
165
|
+
const counter = (await tx.get(COUNTER_KEY)) ?? 0;
|
|
166
|
+
const next = counter + 1;
|
|
167
|
+
await tx.put(COUNTER_KEY, next);
|
|
168
|
+
const alias = `c-${String(next)}`;
|
|
169
|
+
const record = {
|
|
170
|
+
alias,
|
|
171
|
+
node_id: this.nodeId,
|
|
172
|
+
main_agent_id: this.mainAgentId,
|
|
173
|
+
...(source === undefined ? {} : { source: { sender: source.sender, id: source.id } }),
|
|
174
|
+
...(thread_ref === undefined ? {} : { thread_ref }),
|
|
175
|
+
summary,
|
|
176
|
+
state: "unbound",
|
|
177
|
+
created_at: new Date().toISOString(),
|
|
178
|
+
};
|
|
179
|
+
await tx.put(`${CONTEXT_PREFIX}${alias}`, record);
|
|
180
|
+
return record;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
async bind(alias, binding) {
|
|
184
|
+
return this.storage.transaction(async (tx) => {
|
|
185
|
+
const key = `${CONTEXT_PREFIX}${alias}`;
|
|
186
|
+
const current = await tx.get(key);
|
|
187
|
+
if (current === undefined)
|
|
188
|
+
throw new Error(t("contextNotRegistered", { alias }));
|
|
189
|
+
const next = {
|
|
190
|
+
...current,
|
|
191
|
+
agent_id: binding.agent_id,
|
|
192
|
+
...(binding.session_file === undefined ? {} : { session_file: binding.session_file }),
|
|
193
|
+
...(binding.parent_id === undefined ? {} : { parent_id: binding.parent_id }),
|
|
194
|
+
state: current.agent_id === binding.agent_id ? current.state : "idle",
|
|
195
|
+
bound_at: new Date().toISOString(),
|
|
196
|
+
};
|
|
197
|
+
await tx.put(key, next);
|
|
198
|
+
return next;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
async find(alias) {
|
|
202
|
+
return this.storage.transaction(tx => tx.get(`${CONTEXT_PREFIX}${alias}`));
|
|
203
|
+
}
|
|
204
|
+
async list() {
|
|
205
|
+
return this.storage.transaction(async (tx) => (await tx.scan(CONTEXT_PREFIX)).map(row => row.value));
|
|
206
|
+
}
|
|
207
|
+
async updateState(alias, state) {
|
|
208
|
+
return this.storage.transaction(async (tx) => {
|
|
209
|
+
const key = `${CONTEXT_PREFIX}${alias}`;
|
|
210
|
+
const current = await tx.get(key);
|
|
211
|
+
if (current === undefined)
|
|
212
|
+
return undefined;
|
|
213
|
+
const next = { ...current, state };
|
|
214
|
+
await tx.put(key, next);
|
|
215
|
+
return next;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
declare const en: {
|
|
2
|
+
readonly title: "Onlyne gateway · {actor} · {endpoint}";
|
|
3
|
+
readonly 'peers.none': "No nodes discovered yet.";
|
|
4
|
+
readonly 'peers.count': "Nodes ({count})";
|
|
5
|
+
readonly 'column.delivery': "deliver";
|
|
6
|
+
readonly 'hint.idle': "Press [c] to enter an address, or wait for a peer to appear over mDNS.";
|
|
7
|
+
readonly 'label.fingerprint': "fingerprint";
|
|
8
|
+
readonly 'label.endpoint': "endpoint";
|
|
9
|
+
readonly 'label.delivery': "delivery";
|
|
10
|
+
readonly 'value.notExchanged': "not exchanged";
|
|
11
|
+
readonly 'value.unknown': "unknown";
|
|
12
|
+
readonly 'confirm.title': "Confirm the fingerprint of {node}?";
|
|
13
|
+
readonly 'confirm.keys': " [y] confirm [n] cancel";
|
|
14
|
+
readonly 'input.prompt': "address> {value}▏";
|
|
15
|
+
readonly 'help.keys': "[t] request exchange [a] accept request [r] revoke [c] connect address [q] quit";
|
|
16
|
+
readonly 'notice.cancelled': "Cancelled.";
|
|
17
|
+
readonly 'notice.enterAddress': "Enter a node service address, then press Enter to connect; Esc cancels.";
|
|
18
|
+
readonly 'notice.refreshFailed': "Refresh failed: {error}";
|
|
19
|
+
readonly 'notice.alreadyExchanged': "{node} has already exchanged keys.";
|
|
20
|
+
readonly 'notice.noRequest': "{node} has no request waiting for your confirmation.";
|
|
21
|
+
readonly 'notice.accepted': "Approved the key of {node}.";
|
|
22
|
+
readonly 'notice.noTrust': "{node} has no trust record.";
|
|
23
|
+
readonly 'notice.revoked': "Revoked trust for {node}.";
|
|
24
|
+
readonly 'notice.noAddress': "No address entered.";
|
|
25
|
+
readonly 'notice.connected': "Connected to {node}.";
|
|
26
|
+
readonly 'notice.submitted': "{node} submitted, current stage {phase}.";
|
|
27
|
+
readonly 'notice.operationFailed': "Operation failed: {error}";
|
|
28
|
+
readonly 'phase.exchanged': "verified";
|
|
29
|
+
readonly 'phase.requested': "awaiting peer";
|
|
30
|
+
readonly 'phase.invited': "needs approval";
|
|
31
|
+
readonly 'phase.revoked': "revoked";
|
|
32
|
+
readonly 'list.separator': ", ";
|
|
33
|
+
};
|
|
34
|
+
export type TuiTextKey = keyof typeof en;
|
|
35
|
+
export declare const t: (key: "title" | "peers.none" | "peers.count" | "column.delivery" | "hint.idle" | "label.fingerprint" | "label.endpoint" | "label.delivery" | "value.notExchanged" | "value.unknown" | "confirm.title" | "confirm.keys" | "input.prompt" | "help.keys" | "notice.cancelled" | "notice.enterAddress" | "notice.refreshFailed" | "notice.alreadyExchanged" | "notice.noRequest" | "notice.accepted" | "notice.noTrust" | "notice.revoked" | "notice.noAddress" | "notice.connected" | "notice.submitted" | "notice.operationFailed" | "phase.exchanged" | "phase.requested" | "phase.invited" | "phase.revoked" | "list.separator", vars?: Record<string, string | number>) => string;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=tui-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-text.d.ts","sourceRoot":"","sources":["../src/tui-text.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCE,CAAC;AAoCX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;AAEzC,eAAO,MAAM,CAAC,opBAAwC,CAAC"}
|
package/dist/tui-text.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createTranslator } from "./i18n.js";
|
|
2
|
+
const en = {
|
|
3
|
+
'title': 'Onlyne gateway · {actor} · {endpoint}',
|
|
4
|
+
'peers.none': 'No nodes discovered yet.',
|
|
5
|
+
'peers.count': 'Nodes ({count})',
|
|
6
|
+
'column.delivery': 'deliver',
|
|
7
|
+
'hint.idle': 'Press [c] to enter an address, or wait for a peer to appear over mDNS.',
|
|
8
|
+
'label.fingerprint': 'fingerprint',
|
|
9
|
+
'label.endpoint': 'endpoint',
|
|
10
|
+
'label.delivery': 'delivery',
|
|
11
|
+
'value.notExchanged': 'not exchanged',
|
|
12
|
+
'value.unknown': 'unknown',
|
|
13
|
+
'confirm.title': 'Confirm the fingerprint of {node}?',
|
|
14
|
+
'confirm.keys': ' [y] confirm [n] cancel',
|
|
15
|
+
'input.prompt': 'address> {value}▏',
|
|
16
|
+
'help.keys': '[t] request exchange [a] accept request [r] revoke [c] connect address [q] quit',
|
|
17
|
+
'notice.cancelled': 'Cancelled.',
|
|
18
|
+
'notice.enterAddress': 'Enter a node service address, then press Enter to connect; Esc cancels.',
|
|
19
|
+
'notice.refreshFailed': 'Refresh failed: {error}',
|
|
20
|
+
'notice.alreadyExchanged': '{node} has already exchanged keys.',
|
|
21
|
+
'notice.noRequest': '{node} has no request waiting for your confirmation.',
|
|
22
|
+
'notice.accepted': 'Approved the key of {node}.',
|
|
23
|
+
'notice.noTrust': '{node} has no trust record.',
|
|
24
|
+
'notice.revoked': 'Revoked trust for {node}.',
|
|
25
|
+
'notice.noAddress': 'No address entered.',
|
|
26
|
+
'notice.connected': 'Connected to {node}.',
|
|
27
|
+
'notice.submitted': '{node} submitted, current stage {phase}.',
|
|
28
|
+
'notice.operationFailed': 'Operation failed: {error}',
|
|
29
|
+
'phase.exchanged': 'verified',
|
|
30
|
+
'phase.requested': 'awaiting peer',
|
|
31
|
+
'phase.invited': 'needs approval',
|
|
32
|
+
'phase.revoked': 'revoked',
|
|
33
|
+
'list.separator': ', ',
|
|
34
|
+
};
|
|
35
|
+
const zh = {
|
|
36
|
+
'title': 'Onlyne 网关 · {actor} · {endpoint}',
|
|
37
|
+
'peers.none': '还没有发现任何节点。',
|
|
38
|
+
'peers.count': '节点 ({count})',
|
|
39
|
+
'column.delivery': '投送',
|
|
40
|
+
'hint.idle': '用 [c] 输入一个地址,或用 mDNS 等对端出现。',
|
|
41
|
+
'label.fingerprint': '指纹',
|
|
42
|
+
'label.endpoint': '端点',
|
|
43
|
+
'label.delivery': '投送',
|
|
44
|
+
'value.notExchanged': '未交换',
|
|
45
|
+
'value.unknown': '未知',
|
|
46
|
+
'confirm.title': '确认 {node} 的指纹?',
|
|
47
|
+
'confirm.keys': ' [y] 确认 [n] 取消',
|
|
48
|
+
'input.prompt': '地址> {value}▏',
|
|
49
|
+
'help.keys': '[t] 请求交换 [a] 接受申请 [r] 撤销 [c] 连接地址 [q] 退出界面',
|
|
50
|
+
'notice.cancelled': '已取消。',
|
|
51
|
+
'notice.enterAddress': '输入节点服务地址,回车连接,Esc 取消。',
|
|
52
|
+
'notice.refreshFailed': '刷新失败:{error}',
|
|
53
|
+
'notice.alreadyExchanged': '{node} 已经完成交换。',
|
|
54
|
+
'notice.noRequest': '{node} 没有等待你确认的申请。',
|
|
55
|
+
'notice.accepted': '已批准 {node} 的密钥。',
|
|
56
|
+
'notice.noTrust': '{node} 没有信任记录。',
|
|
57
|
+
'notice.revoked': '已撤销 {node} 的信任。',
|
|
58
|
+
'notice.noAddress': '没有输入地址。',
|
|
59
|
+
'notice.connected': '已连接 {node}。',
|
|
60
|
+
'notice.submitted': '{node} 已提交,当前阶段 {phase}。',
|
|
61
|
+
'notice.operationFailed': '操作失败:{error}',
|
|
62
|
+
'phase.exchanged': '已认证',
|
|
63
|
+
'phase.requested': '等对方',
|
|
64
|
+
'phase.invited': '待确认',
|
|
65
|
+
'phase.revoked': '已撤销',
|
|
66
|
+
'list.separator': '、',
|
|
67
|
+
};
|
|
68
|
+
export const t = createTranslator({ en, 'zh-CN': zh });
|
|
69
|
+
//# sourceMappingURL=tui-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-text.js","sourceRoot":"","sources":["../src/tui-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,EAAE,GAAG;IACT,OAAO,EAAE,uCAAuC;IAChD,YAAY,EAAE,0BAA0B;IACxC,aAAa,EAAE,iBAAiB;IAChC,iBAAiB,EAAE,SAAS;IAC5B,WAAW,EAAE,wEAAwE;IACrF,mBAAmB,EAAE,aAAa;IAClC,gBAAgB,EAAE,UAAU;IAC5B,gBAAgB,EAAE,UAAU;IAC5B,oBAAoB,EAAE,eAAe;IACrC,eAAe,EAAE,SAAS;IAC1B,eAAe,EAAE,oCAAoC;IACrD,cAAc,EAAE,4BAA4B;IAC5C,cAAc,EAAE,mBAAmB;IACnC,WAAW,EAAE,qFAAqF;IAClG,kBAAkB,EAAE,YAAY;IAChC,qBAAqB,EAAE,yEAAyE;IAChG,sBAAsB,EAAE,yBAAyB;IACjD,yBAAyB,EAAE,oCAAoC;IAC/D,kBAAkB,EAAE,sDAAsD;IAC1E,iBAAiB,EAAE,6BAA6B;IAChD,gBAAgB,EAAE,6BAA6B;IAC/C,gBAAgB,EAAE,2BAA2B;IAC7C,kBAAkB,EAAE,qBAAqB;IACzC,kBAAkB,EAAE,sBAAsB;IAC1C,kBAAkB,EAAE,0CAA0C;IAC9D,wBAAwB,EAAE,2BAA2B;IACrD,iBAAiB,EAAE,UAAU;IAC7B,iBAAiB,EAAE,eAAe;IAClC,eAAe,EAAE,gBAAgB;IACjC,eAAe,EAAE,SAAS;IAC1B,gBAAgB,EAAE,IAAI;CACd,CAAC;AAEX,MAAM,EAAE,GAAoC;IAC1C,OAAO,EAAE,kCAAkC;IAC3C,YAAY,EAAE,YAAY;IAC1B,aAAa,EAAE,cAAc;IAC7B,iBAAiB,EAAE,IAAI;IACvB,WAAW,EAAE,6BAA6B;IAC1C,mBAAmB,EAAE,IAAI;IACzB,gBAAgB,EAAE,IAAI;IACtB,gBAAgB,EAAE,IAAI;IACtB,oBAAoB,EAAE,KAAK;IAC3B,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,mBAAmB;IACnC,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,gDAAgD;IAC7D,kBAAkB,EAAE,MAAM;IAC1B,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,cAAc;IACtC,yBAAyB,EAAE,gBAAgB;IAC3C,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,iBAAiB;IACpC,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,aAAa;IACjC,kBAAkB,EAAE,0BAA0B;IAC9C,wBAAwB,EAAE,cAAc;IACxC,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,KAAK;IACxB,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,GAAG;CACtB,CAAC;AAIF,MAAM,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC"}
|