negotium 0.1.12 → 0.1.13
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/canonical-mcp-bridge.js +2 -3
- package/dist/canonical-mcp-bridge.js.map +1 -1
- package/dist/chunk-a9y2rwxf.js.map +1 -1
- package/dist/{chunk-j0kjscb7.js → chunk-s2gez3wg.js} +20 -2
- package/dist/{chunk-j0kjscb7.js.map → chunk-s2gez3wg.js.map} +2 -2
- package/dist/cron.js +49 -25
- package/dist/cron.js.map +15 -14
- package/dist/hosted-agent.js +3012 -17
- package/dist/hosted-agent.js.map +30 -3
- package/dist/main.js +31323 -36
- package/dist/main.js.map +198 -3
- package/dist/prompts.js +11 -8
- package/dist/prompts.js.map +4 -4
- package/dist/runtime/src/application/submit-user-message.ts +3 -0
- package/dist/runtime/src/index.ts +7 -0
- package/dist/runtime/src/mcp/runtime-spec.ts +3 -0
- package/dist/runtime/src/mcp/session-comm/server.ts +1 -1
- package/dist/runtime/src/platform/mcp-config.ts +13 -0
- package/dist/runtime/src/prompts/builders.ts +20 -6
- package/dist/runtime/src/query/active-rooms.ts +2 -0
- package/dist/runtime/src/runtime/delivery-ack.ts +112 -0
- package/dist/runtime/src/runtime/errors.ts +12 -12
- package/dist/runtime/src/runtime/turn-runner.ts +12 -0
- package/dist/runtime/src/storage/runtime-turn-requests.ts +1 -0
- package/dist/runtime/src/types/api.ts +2 -0
- package/dist/runtime/src/types.ts +2 -0
- package/dist/runtime/src/version.ts +1 -1
- package/dist/runtime-helpers.js.map +1 -1
- package/dist/storage.js.map +1 -1
- package/dist/types/packages/core/src/mcp/runtime-spec.d.ts +2 -0
- package/dist/types/packages/core/src/platform/mcp-config.d.ts +4 -0
- package/dist/types/packages/core/src/prompts/builders.d.ts +2 -0
- package/dist/types/packages/core/src/types/api.d.ts +2 -0
- package/dist/types/packages/core/src/types.d.ts +2 -0
- package/dist/types/packages/core/src/version.d.ts +1 -1
- package/dist/vault.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-00q25k7p.js +0 -2387
- package/dist/chunk-00q25k7p.js.map +0 -26
- package/dist/chunk-03kv7mvj.js +0 -2152
- package/dist/chunk-03kv7mvj.js.map +0 -15
- package/dist/chunk-05pm51dh.js +0 -589
- package/dist/chunk-05pm51dh.js.map +0 -11
- package/dist/chunk-0eh16bk1.js +0 -2936
- package/dist/chunk-0eh16bk1.js.map +0 -20
- package/dist/chunk-0yfqyv88.js +0 -108
- package/dist/chunk-0yfqyv88.js.map +0 -10
- package/dist/chunk-1k7t7bnx.js +0 -97
- package/dist/chunk-1k7t7bnx.js.map +0 -10
- package/dist/chunk-3gkfr9vb.js +0 -431
- package/dist/chunk-3gkfr9vb.js.map +0 -11
- package/dist/chunk-5akd1gbj.js +0 -281
- package/dist/chunk-5akd1gbj.js.map +0 -10
- package/dist/chunk-7k19pcg8.js +0 -577
- package/dist/chunk-7k19pcg8.js.map +0 -14
- package/dist/chunk-81tbfbmt.js +0 -10
- package/dist/chunk-81tbfbmt.js.map +0 -10
- package/dist/chunk-82qhv1mq.js +0 -512
- package/dist/chunk-82qhv1mq.js.map +0 -13
- package/dist/chunk-8dy7e2a9.js +0 -103
- package/dist/chunk-8dy7e2a9.js.map +0 -10
- package/dist/chunk-8f2sqmrj.js +0 -1712
- package/dist/chunk-8f2sqmrj.js.map +0 -18
- package/dist/chunk-9hjeemfz.js +0 -372
- package/dist/chunk-9hjeemfz.js.map +0 -10
- package/dist/chunk-a4aa2ccv.js +0 -141
- package/dist/chunk-a4aa2ccv.js.map +0 -10
- package/dist/chunk-bsg215q3.js +0 -3536
- package/dist/chunk-bsg215q3.js.map +0 -20
- package/dist/chunk-bxnfsc7w.js +0 -58
- package/dist/chunk-bxnfsc7w.js.map +0 -10
- package/dist/chunk-c500xe9z.js +0 -33
- package/dist/chunk-c500xe9z.js.map +0 -10
- package/dist/chunk-cngrf7ab.js +0 -149
- package/dist/chunk-cngrf7ab.js.map +0 -10
- package/dist/chunk-d7tprf06.js +0 -53
- package/dist/chunk-d7tprf06.js.map +0 -10
- package/dist/chunk-ddnrmkrv.js +0 -61
- package/dist/chunk-ddnrmkrv.js.map +0 -10
- package/dist/chunk-edb07sjp.js +0 -567
- package/dist/chunk-edb07sjp.js.map +0 -14
- package/dist/chunk-ejcm6zx8.js +0 -591
- package/dist/chunk-ejcm6zx8.js.map +0 -11
- package/dist/chunk-ezs352qs.js +0 -237
- package/dist/chunk-ezs352qs.js.map +0 -11
- package/dist/chunk-f5xgprg1.js +0 -59
- package/dist/chunk-f5xgprg1.js.map +0 -10
- package/dist/chunk-fbtb3v0s.js +0 -1339
- package/dist/chunk-fbtb3v0s.js.map +0 -16
- package/dist/chunk-ffefbd3r.js +0 -17
- package/dist/chunk-ffefbd3r.js.map +0 -10
- package/dist/chunk-gaknyw04.js +0 -708
- package/dist/chunk-gaknyw04.js.map +0 -14
- package/dist/chunk-gxmny6tq.js +0 -1637
- package/dist/chunk-gxmny6tq.js.map +0 -15
- package/dist/chunk-h7bj5zwb.js +0 -3069
- package/dist/chunk-h7bj5zwb.js.map +0 -32
- package/dist/chunk-hp4g7wx7.js +0 -46
- package/dist/chunk-hp4g7wx7.js.map +0 -10
- package/dist/chunk-hwy3n31w.js +0 -21
- package/dist/chunk-hwy3n31w.js.map +0 -9
- package/dist/chunk-jzz91jwh.js +0 -70
- package/dist/chunk-jzz91jwh.js.map +0 -10
- package/dist/chunk-k778y16p.js +0 -153
- package/dist/chunk-k778y16p.js.map +0 -11
- package/dist/chunk-mh5mexsf.js +0 -147
- package/dist/chunk-mh5mexsf.js.map +0 -11
- package/dist/chunk-mnwaext5.js +0 -318
- package/dist/chunk-mnwaext5.js.map +0 -10
- package/dist/chunk-nkgs40ch.js +0 -23
- package/dist/chunk-nkgs40ch.js.map +0 -10
- package/dist/chunk-pz57vwsm.js +0 -250
- package/dist/chunk-pz57vwsm.js.map +0 -11
- package/dist/chunk-r6kdp7gn.js +0 -252
- package/dist/chunk-r6kdp7gn.js.map +0 -10
- package/dist/chunk-rkvrkcgx.js +0 -117
- package/dist/chunk-rkvrkcgx.js.map +0 -10
- package/dist/chunk-s74rdyqe.js +0 -117
- package/dist/chunk-s74rdyqe.js.map +0 -12
- package/dist/chunk-sa874j5c.js +0 -9
- package/dist/chunk-sa874j5c.js.map +0 -10
- package/dist/chunk-sffqdkvq.js +0 -122
- package/dist/chunk-sffqdkvq.js.map +0 -10
- package/dist/chunk-tcs9qjps.js +0 -64
- package/dist/chunk-tcs9qjps.js.map +0 -10
- package/dist/chunk-wx83ep8e.js +0 -131
- package/dist/chunk-wx83ep8e.js.map +0 -10
- package/dist/chunk-xag86ng3.js +0 -122
- package/dist/chunk-xag86ng3.js.map +0 -10
- package/dist/chunk-xfdkep71.js +0 -371
- package/dist/chunk-xfdkep71.js.map +0 -11
- package/dist/chunk-xhm1rfpt.js +0 -2907
- package/dist/chunk-xhm1rfpt.js.map +0 -24
- package/dist/chunk-xpcps28p.js +0 -2138
- package/dist/chunk-xpcps28p.js.map +0 -29
- package/dist/chunk-yb4rbev9.js +0 -214
- package/dist/chunk-yb4rbev9.js.map +0 -10
package/dist/chunk-yb4rbev9.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
// @bun
|
|
3
|
-
import {
|
|
4
|
-
MAX_PEER_INPUT_REQUEST_BYTES
|
|
5
|
-
} from "./chunk-c500xe9z.js";
|
|
6
|
-
import {
|
|
7
|
-
__require,
|
|
8
|
-
__toESM
|
|
9
|
-
} from "./chunk-hwy3n31w.js";
|
|
10
|
-
|
|
11
|
-
// ../../adapters/otium/src/cli.ts
|
|
12
|
-
function parseArgs(args) {
|
|
13
|
-
const positional = [];
|
|
14
|
-
const options = new Map;
|
|
15
|
-
for (let i = 0;i < args.length; i += 1) {
|
|
16
|
-
const value = args[i];
|
|
17
|
-
if (!value.startsWith("--")) {
|
|
18
|
-
positional.push(value);
|
|
19
|
-
continue;
|
|
20
|
-
}
|
|
21
|
-
const equalsAt = value.indexOf("=");
|
|
22
|
-
if (equalsAt > 2) {
|
|
23
|
-
options.set(value.slice(2, equalsAt), value.slice(equalsAt + 1));
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
const next = args[i + 1];
|
|
27
|
-
if (next && !next.startsWith("--")) {
|
|
28
|
-
options.set(value.slice(2), next);
|
|
29
|
-
i += 1;
|
|
30
|
-
} else {
|
|
31
|
-
options.set(value.slice(2), "true");
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return { positional, options };
|
|
35
|
-
}
|
|
36
|
-
function parseOtiumServePort(args, fallback) {
|
|
37
|
-
const parsed = parseArgs(args);
|
|
38
|
-
if (parsed.positional.length > 0 || [...parsed.options.keys()].some((key) => key !== "port" && key !== "relay")) {
|
|
39
|
-
throw new Error("usage: negotium otium serve [--port <1-65535>] [--relay <url>]");
|
|
40
|
-
}
|
|
41
|
-
const raw = parsed.options.get("port");
|
|
42
|
-
const port = raw === undefined ? fallback : Number(raw);
|
|
43
|
-
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
44
|
-
throw new Error("serve port must be an integer between 1 and 65535");
|
|
45
|
-
}
|
|
46
|
-
return port;
|
|
47
|
-
}
|
|
48
|
-
function parseOtiumServeRelayUrl(args) {
|
|
49
|
-
const parsed = parseArgs(args);
|
|
50
|
-
if (parsed.positional.length > 0 || [...parsed.options.keys()].some((key) => key !== "port" && key !== "relay")) {
|
|
51
|
-
throw new Error("usage: negotium otium serve [--port <1-65535>] [--relay <url>]");
|
|
52
|
-
}
|
|
53
|
-
const raw = parsed.options.get("relay")?.trim();
|
|
54
|
-
if (!raw)
|
|
55
|
-
return;
|
|
56
|
-
if (!/^(?:https?|wss?):\/\//.test(raw)) {
|
|
57
|
-
throw new Error("relay URL must use http(s) or ws(s)");
|
|
58
|
-
}
|
|
59
|
-
return raw.replace(/\/+$/, "");
|
|
60
|
-
}
|
|
61
|
-
async function resolveHostNodeId(explicit) {
|
|
62
|
-
if (explicit?.trim())
|
|
63
|
-
return explicit.trim();
|
|
64
|
-
const [{ configureOtiumCentral, listPeerNodes }, { loadJoin }] = await Promise.all([
|
|
65
|
-
import("./chunk-cngrf7ab.js"),
|
|
66
|
-
import("./chunk-xfdkep71.js")
|
|
67
|
-
]);
|
|
68
|
-
const join = loadJoin();
|
|
69
|
-
if (!join)
|
|
70
|
-
throw new Error("not joined to an Otium workspace; pass --host-node or join first");
|
|
71
|
-
configureOtiumCentral(join);
|
|
72
|
-
try {
|
|
73
|
-
const nodes = await listPeerNodes({ fresh: true });
|
|
74
|
-
const primary = nodes.find((node) => node.isPrimary && !node.self) ?? nodes.find((node) => node.isPrimary);
|
|
75
|
-
if (!primary)
|
|
76
|
-
throw new Error("workspace has no primary Otium node");
|
|
77
|
-
return primary.cellId;
|
|
78
|
-
} finally {
|
|
79
|
-
configureOtiumCentral(null);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
async function runOtiumCli(args = process.argv.slice(2)) {
|
|
83
|
-
const [command, ...commandArgs] = args;
|
|
84
|
-
switch (command) {
|
|
85
|
-
case "join": {
|
|
86
|
-
const { joinCommand } = await import("./chunk-a4aa2ccv.js");
|
|
87
|
-
await joinCommand(commandArgs);
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
case "serve": {
|
|
91
|
-
const {
|
|
92
|
-
NEGOTIUM_PORT,
|
|
93
|
-
onShutdown,
|
|
94
|
-
registerNodeRequestHandler,
|
|
95
|
-
unregisterNodeRequestHandler,
|
|
96
|
-
waitForRequiredRuntimeProcessLease
|
|
97
|
-
} = await import("./chunk-h7bj5zwb.js");
|
|
98
|
-
const [{ startDefaultNode }, otium] = await Promise.all([
|
|
99
|
-
import("./chunk-gxmny6tq.js"),
|
|
100
|
-
import("./chunk-0eh16bk1.js")
|
|
101
|
-
]);
|
|
102
|
-
const port = parseOtiumServePort(commandArgs, NEGOTIUM_PORT);
|
|
103
|
-
const relayUrl = parseOtiumServeRelayUrl(commandArgs);
|
|
104
|
-
let node;
|
|
105
|
-
const singleton = await waitForRequiredRuntimeProcessLease("adapter:otium", {
|
|
106
|
-
workloadName: "Otium adapter",
|
|
107
|
-
onLost: () => {
|
|
108
|
-
console.error("negotium otium: singleton lease lost; shutting down");
|
|
109
|
-
node?.stop();
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
const { handleOtiumPeerRequest, startOtiumWorker } = otium;
|
|
113
|
-
const worker = startOtiumWorker();
|
|
114
|
-
if (!worker) {
|
|
115
|
-
singleton.stop();
|
|
116
|
-
throw new Error("not joined to an otium workspace \u2014 run `negotium otium join <code>` first");
|
|
117
|
-
}
|
|
118
|
-
registerNodeRequestHandler("otium-peer", handleOtiumPeerRequest);
|
|
119
|
-
let workerStopped = false;
|
|
120
|
-
const stopWorker = () => {
|
|
121
|
-
if (workerStopped)
|
|
122
|
-
return;
|
|
123
|
-
workerStopped = true;
|
|
124
|
-
unregisterNodeRequestHandler("otium-peer");
|
|
125
|
-
worker.stop();
|
|
126
|
-
};
|
|
127
|
-
onShutdown("otium-worker", 100, stopWorker);
|
|
128
|
-
onShutdown("otium-singleton", 90, () => singleton.stop());
|
|
129
|
-
try {
|
|
130
|
-
node = await startDefaultNode({
|
|
131
|
-
port,
|
|
132
|
-
maxRequestBodySize: MAX_PEER_INPUT_REQUEST_BYTES
|
|
133
|
-
});
|
|
134
|
-
} catch (error) {
|
|
135
|
-
stopWorker();
|
|
136
|
-
singleton.stop();
|
|
137
|
-
throw error;
|
|
138
|
-
}
|
|
139
|
-
console.log(`negotium node (otium worker) listening on 127.0.0.1:${node.port} (ctrl-c to stop)`);
|
|
140
|
-
worker.startTunnel({ targetOrigin: `http://127.0.0.1:${node.port}`, relayUrl });
|
|
141
|
-
await node.completed;
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
case "bindings": {
|
|
145
|
-
const { listOtiumTopicBindings } = await import("./chunk-3gkfr9vb.js");
|
|
146
|
-
const bindings = listOtiumTopicBindings();
|
|
147
|
-
if (bindings.length === 0) {
|
|
148
|
-
console.log("no Otium topic bindings");
|
|
149
|
-
break;
|
|
150
|
-
}
|
|
151
|
-
for (const binding of bindings) {
|
|
152
|
-
const local = binding.localTopicTitle ? `${binding.localTopicTitle} (${binding.localTopicId})` : `${binding.localTopicId} [missing]`;
|
|
153
|
-
console.log(`${binding.transport.padEnd(16)} ${binding.hostNodeId}/${binding.hostTopicId} -> ${local}`);
|
|
154
|
-
}
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
case "share": {
|
|
158
|
-
const parsed = parseArgs(commandArgs);
|
|
159
|
-
const [hostTopicId, localTopicId] = parsed.positional;
|
|
160
|
-
const userId = parsed.options.get("user")?.trim();
|
|
161
|
-
if (!hostTopicId || !localTopicId || !userId) {
|
|
162
|
-
throw new Error("usage: negotium otium share <host-topic-id> <local-topic-id> --user <user-id> [--host-node <cell-id>]");
|
|
163
|
-
}
|
|
164
|
-
const hostNodeId = await resolveHostNodeId(parsed.options.get("host-node"));
|
|
165
|
-
const { shareOtiumTopic } = await import("./chunk-3gkfr9vb.js");
|
|
166
|
-
const result = shareOtiumTopic({ hostNodeId, hostTopicId, localTopicId, userId });
|
|
167
|
-
if (!result.ok)
|
|
168
|
-
throw new Error(result.error);
|
|
169
|
-
console.log(`shared ${hostNodeId}/${hostTopicId} with local topic ${result.localTopicId}` + (result.replaced ? " (replaced previous binding)" : ""));
|
|
170
|
-
break;
|
|
171
|
-
}
|
|
172
|
-
case "private": {
|
|
173
|
-
const parsed = parseArgs(commandArgs);
|
|
174
|
-
const [localTopicId] = parsed.positional;
|
|
175
|
-
const userId = parsed.options.get("user")?.trim();
|
|
176
|
-
if (!localTopicId || !userId) {
|
|
177
|
-
throw new Error("usage: negotium otium private <local-topic-id> --user <user-id>");
|
|
178
|
-
}
|
|
179
|
-
const { setOtiumTopicPrivate } = await import("./chunk-3gkfr9vb.js");
|
|
180
|
-
const result = setOtiumTopicPrivate({ localTopicId, userId });
|
|
181
|
-
if (!result.ok)
|
|
182
|
-
throw new Error(result.error);
|
|
183
|
-
console.log(`private mode selected for ${result.localTopicId}; removed ${result.removedBindings} Otium binding(s)`);
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
default: {
|
|
187
|
-
console.log([
|
|
188
|
-
"negotium otium \u2014 attach a Negotium node to an Otium workspace",
|
|
189
|
-
"",
|
|
190
|
-
"usage: negotium otium <join|serve|bindings|share|private> [args]",
|
|
191
|
-
"",
|
|
192
|
-
" join <code> store credentials from an Otium invite code",
|
|
193
|
-
" serve [--port <port>] [--relay <url>]",
|
|
194
|
-
" run peer routes and an outbound relay tunnel",
|
|
195
|
-
" bindings list internal mirrors and shared topic bindings",
|
|
196
|
-
" share <host-topic> <local-topic> --user <id> [--host-node <cell>]",
|
|
197
|
-
" publish one private local topic to Otium as shared",
|
|
198
|
-
" private <local-topic> --user <id>",
|
|
199
|
-
" remove all Otium bindings; keep Terminal/Telegram access"
|
|
200
|
-
].join(`
|
|
201
|
-
`));
|
|
202
|
-
if (command && command !== "help" && command !== "--help")
|
|
203
|
-
process.exitCode = 1;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
if (false) {}
|
|
208
|
-
export {
|
|
209
|
-
runOtiumCli,
|
|
210
|
-
parseOtiumServeRelayUrl,
|
|
211
|
-
parseOtiumServePort
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
//# debugId=8477A0A218977B2264756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../adapters/otium/src/cli.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"#!/usr/bin/env bun\n/**\n * negotium-otium — run a negotium node as an otium workspace worker.\n *\n * negotium-otium join <invite-code> store credentials from an invite code\n * negotium-otium serve negotium node + otium peer routes\n * negotium-otium bindings inspect internal/shared Otium transports\n * negotium-otium share ... bind an Otium room to a visible local topic\n * negotium-otium private ... keep a topic on Terminal/Telegram only\n *\n * The otium integration mounts onto the node through negotium's plugin chain\n * (registerNodeRequestHandler) — negotium core knows nothing about otium.\n */\n\nimport { MAX_PEER_INPUT_REQUEST_BYTES } from \"@/protocol\";\n\nfunction parseArgs(args: string[]): { positional: string[]; options: Map<string, string> } {\n const positional: string[] = [];\n const options = new Map<string, string>();\n for (let i = 0; i < args.length; i += 1) {\n const value = args[i]!;\n if (!value.startsWith(\"--\")) {\n positional.push(value);\n continue;\n }\n const equalsAt = value.indexOf(\"=\");\n if (equalsAt > 2) {\n options.set(value.slice(2, equalsAt), value.slice(equalsAt + 1));\n continue;\n }\n const next = args[i + 1];\n if (next && !next.startsWith(\"--\")) {\n options.set(value.slice(2), next);\n i += 1;\n } else {\n options.set(value.slice(2), \"true\");\n }\n }\n return { positional, options };\n}\n\nexport function parseOtiumServePort(args: string[], fallback: number): number {\n const parsed = parseArgs(args);\n if (\n parsed.positional.length > 0 ||\n [...parsed.options.keys()].some((key) => key !== \"port\" && key !== \"relay\")\n ) {\n throw new Error(\"usage: negotium otium serve [--port <1-65535>] [--relay <url>]\");\n }\n const raw = parsed.options.get(\"port\");\n const port = raw === undefined ? fallback : Number(raw);\n if (!Number.isInteger(port) || port < 1 || port > 65_535) {\n throw new Error(\"serve port must be an integer between 1 and 65535\");\n }\n return port;\n}\n\nexport function parseOtiumServeRelayUrl(args: string[]): string | undefined {\n const parsed = parseArgs(args);\n if (\n parsed.positional.length > 0 ||\n [...parsed.options.keys()].some((key) => key !== \"port\" && key !== \"relay\")\n ) {\n throw new Error(\"usage: negotium otium serve [--port <1-65535>] [--relay <url>]\");\n }\n const raw = parsed.options.get(\"relay\")?.trim();\n if (!raw) return undefined;\n if (!/^(?:https?|wss?):\\/\\//.test(raw)) {\n throw new Error(\"relay URL must use http(s) or ws(s)\");\n }\n return raw.replace(/\\/+$/, \"\");\n}\n\nasync function resolveHostNodeId(explicit?: string): Promise<string> {\n if (explicit?.trim()) return explicit.trim();\n const [{ configureOtiumCentral, listPeerNodes }, { loadJoin }] = await Promise.all([\n import(\"@/central\"),\n import(\"@/join\"),\n ]);\n const join = loadJoin();\n if (!join) throw new Error(\"not joined to an Otium workspace; pass --host-node or join first\");\n configureOtiumCentral(join);\n try {\n const nodes = await listPeerNodes({ fresh: true });\n const primary =\n nodes.find((node) => node.isPrimary && !node.self) ?? nodes.find((node) => node.isPrimary);\n if (!primary) throw new Error(\"workspace has no primary Otium node\");\n return primary.cellId;\n } finally {\n configureOtiumCentral(null);\n }\n}\n\nexport async function runOtiumCli(args = process.argv.slice(2)): Promise<void> {\n const [command, ...commandArgs] = args;\n switch (command) {\n case \"join\": {\n const { joinCommand } = await import(\"@/join-cli\");\n await joinCommand(commandArgs);\n break;\n }\n case \"serve\": {\n const {\n NEGOTIUM_PORT,\n onShutdown,\n registerNodeRequestHandler,\n unregisterNodeRequestHandler,\n waitForRequiredRuntimeProcessLease,\n } = await import(\"@negotium/core\");\n const [{ startDefaultNode }, otium] = await Promise.all([\n import(\"@negotium/node\"),\n import(\"@/index\"),\n ]);\n const port = parseOtiumServePort(commandArgs, NEGOTIUM_PORT);\n const relayUrl = parseOtiumServeRelayUrl(commandArgs);\n let node: Awaited<ReturnType<typeof startDefaultNode>> | undefined;\n const singleton = await waitForRequiredRuntimeProcessLease(\"adapter:otium\", {\n workloadName: \"Otium adapter\",\n onLost: () => {\n console.error(\"negotium otium: singleton lease lost; shutting down\");\n void node?.stop();\n },\n });\n const { handleOtiumPeerRequest, startOtiumWorker } = otium;\n const worker = startOtiumWorker();\n if (!worker) {\n singleton.stop();\n throw new Error(\n \"not joined to an otium workspace — run `negotium otium join <code>` first\",\n );\n }\n registerNodeRequestHandler(\"otium-peer\", handleOtiumPeerRequest);\n let workerStopped = false;\n const stopWorker = (): void => {\n if (workerStopped) return;\n workerStopped = true;\n unregisterNodeRequestHandler(\"otium-peer\");\n worker.stop();\n };\n onShutdown(\"otium-worker\", 100, stopWorker);\n onShutdown(\"otium-singleton\", 90, () => singleton.stop());\n try {\n node = await startDefaultNode({\n port,\n maxRequestBodySize: MAX_PEER_INPUT_REQUEST_BYTES,\n });\n } catch (error) {\n stopWorker();\n singleton.stop();\n throw error;\n }\n console.log(\n `negotium node (otium worker) listening on 127.0.0.1:${node.port} (ctrl-c to stop)`,\n );\n worker.startTunnel({ targetOrigin: `http://127.0.0.1:${node.port}`, relayUrl });\n await node.completed;\n break;\n }\n case \"bindings\": {\n const { listOtiumTopicBindings } = await import(\"@/bindings\");\n const bindings = listOtiumTopicBindings();\n if (bindings.length === 0) {\n console.log(\"no Otium topic bindings\");\n break;\n }\n for (const binding of bindings) {\n const local = binding.localTopicTitle\n ? `${binding.localTopicTitle} (${binding.localTopicId})`\n : `${binding.localTopicId} [missing]`;\n console.log(\n `${binding.transport.padEnd(16)} ${binding.hostNodeId}/${binding.hostTopicId} -> ${local}`,\n );\n }\n break;\n }\n case \"share\": {\n const parsed = parseArgs(commandArgs);\n const [hostTopicId, localTopicId] = parsed.positional;\n const userId = parsed.options.get(\"user\")?.trim();\n if (!hostTopicId || !localTopicId || !userId) {\n throw new Error(\n \"usage: negotium otium share <host-topic-id> <local-topic-id> --user <user-id> [--host-node <cell-id>]\",\n );\n }\n const hostNodeId = await resolveHostNodeId(parsed.options.get(\"host-node\"));\n const { shareOtiumTopic } = await import(\"@/bindings\");\n const result = shareOtiumTopic({ hostNodeId, hostTopicId, localTopicId, userId });\n if (!result.ok) throw new Error(result.error);\n console.log(\n `shared ${hostNodeId}/${hostTopicId} with local topic ${result.localTopicId}` +\n (result.replaced ? \" (replaced previous binding)\" : \"\"),\n );\n break;\n }\n case \"private\": {\n const parsed = parseArgs(commandArgs);\n const [localTopicId] = parsed.positional;\n const userId = parsed.options.get(\"user\")?.trim();\n if (!localTopicId || !userId) {\n throw new Error(\"usage: negotium otium private <local-topic-id> --user <user-id>\");\n }\n const { setOtiumTopicPrivate } = await import(\"@/bindings\");\n const result = setOtiumTopicPrivate({ localTopicId, userId });\n if (!result.ok) throw new Error(result.error);\n console.log(\n `private mode selected for ${result.localTopicId}; removed ${result.removedBindings} Otium binding(s)`,\n );\n break;\n }\n default: {\n console.log(\n [\n \"negotium otium — attach a Negotium node to an Otium workspace\",\n \"\",\n \"usage: negotium otium <join|serve|bindings|share|private> [args]\",\n \"\",\n \" join <code> store credentials from an Otium invite code\",\n \" serve [--port <port>] [--relay <url>]\",\n \" run peer routes and an outbound relay tunnel\",\n \" bindings list internal mirrors and shared topic bindings\",\n \" share <host-topic> <local-topic> --user <id> [--host-node <cell>]\",\n \" publish one private local topic to Otium as shared\",\n \" private <local-topic> --user <id>\",\n \" remove all Otium bindings; keep Terminal/Telegram access\",\n ].join(\"\\n\"),\n );\n if (command && command !== \"help\" && command !== \"--help\") process.exitCode = 1;\n }\n }\n}\n\nif (import.meta.main) {\n runOtiumCli().catch((error) => {\n process.stderr.write(\n `negotium-otium: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exitCode = 1;\n });\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "8477A0A218977B2264756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|