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.
Files changed (137) hide show
  1. package/dist/canonical-mcp-bridge.js +2 -3
  2. package/dist/canonical-mcp-bridge.js.map +1 -1
  3. package/dist/chunk-a9y2rwxf.js.map +1 -1
  4. package/dist/{chunk-j0kjscb7.js → chunk-s2gez3wg.js} +20 -2
  5. package/dist/{chunk-j0kjscb7.js.map → chunk-s2gez3wg.js.map} +2 -2
  6. package/dist/cron.js +49 -25
  7. package/dist/cron.js.map +15 -14
  8. package/dist/hosted-agent.js +3012 -17
  9. package/dist/hosted-agent.js.map +30 -3
  10. package/dist/main.js +31323 -36
  11. package/dist/main.js.map +198 -3
  12. package/dist/prompts.js +11 -8
  13. package/dist/prompts.js.map +4 -4
  14. package/dist/runtime/src/application/submit-user-message.ts +3 -0
  15. package/dist/runtime/src/index.ts +7 -0
  16. package/dist/runtime/src/mcp/runtime-spec.ts +3 -0
  17. package/dist/runtime/src/mcp/session-comm/server.ts +1 -1
  18. package/dist/runtime/src/platform/mcp-config.ts +13 -0
  19. package/dist/runtime/src/prompts/builders.ts +20 -6
  20. package/dist/runtime/src/query/active-rooms.ts +2 -0
  21. package/dist/runtime/src/runtime/delivery-ack.ts +112 -0
  22. package/dist/runtime/src/runtime/errors.ts +12 -12
  23. package/dist/runtime/src/runtime/turn-runner.ts +12 -0
  24. package/dist/runtime/src/storage/runtime-turn-requests.ts +1 -0
  25. package/dist/runtime/src/types/api.ts +2 -0
  26. package/dist/runtime/src/types.ts +2 -0
  27. package/dist/runtime/src/version.ts +1 -1
  28. package/dist/runtime-helpers.js.map +1 -1
  29. package/dist/storage.js.map +1 -1
  30. package/dist/types/packages/core/src/mcp/runtime-spec.d.ts +2 -0
  31. package/dist/types/packages/core/src/platform/mcp-config.d.ts +4 -0
  32. package/dist/types/packages/core/src/prompts/builders.d.ts +2 -0
  33. package/dist/types/packages/core/src/types/api.d.ts +2 -0
  34. package/dist/types/packages/core/src/types.d.ts +2 -0
  35. package/dist/types/packages/core/src/version.d.ts +1 -1
  36. package/dist/vault.js.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/chunk-00q25k7p.js +0 -2387
  39. package/dist/chunk-00q25k7p.js.map +0 -26
  40. package/dist/chunk-03kv7mvj.js +0 -2152
  41. package/dist/chunk-03kv7mvj.js.map +0 -15
  42. package/dist/chunk-05pm51dh.js +0 -589
  43. package/dist/chunk-05pm51dh.js.map +0 -11
  44. package/dist/chunk-0eh16bk1.js +0 -2936
  45. package/dist/chunk-0eh16bk1.js.map +0 -20
  46. package/dist/chunk-0yfqyv88.js +0 -108
  47. package/dist/chunk-0yfqyv88.js.map +0 -10
  48. package/dist/chunk-1k7t7bnx.js +0 -97
  49. package/dist/chunk-1k7t7bnx.js.map +0 -10
  50. package/dist/chunk-3gkfr9vb.js +0 -431
  51. package/dist/chunk-3gkfr9vb.js.map +0 -11
  52. package/dist/chunk-5akd1gbj.js +0 -281
  53. package/dist/chunk-5akd1gbj.js.map +0 -10
  54. package/dist/chunk-7k19pcg8.js +0 -577
  55. package/dist/chunk-7k19pcg8.js.map +0 -14
  56. package/dist/chunk-81tbfbmt.js +0 -10
  57. package/dist/chunk-81tbfbmt.js.map +0 -10
  58. package/dist/chunk-82qhv1mq.js +0 -512
  59. package/dist/chunk-82qhv1mq.js.map +0 -13
  60. package/dist/chunk-8dy7e2a9.js +0 -103
  61. package/dist/chunk-8dy7e2a9.js.map +0 -10
  62. package/dist/chunk-8f2sqmrj.js +0 -1712
  63. package/dist/chunk-8f2sqmrj.js.map +0 -18
  64. package/dist/chunk-9hjeemfz.js +0 -372
  65. package/dist/chunk-9hjeemfz.js.map +0 -10
  66. package/dist/chunk-a4aa2ccv.js +0 -141
  67. package/dist/chunk-a4aa2ccv.js.map +0 -10
  68. package/dist/chunk-bsg215q3.js +0 -3536
  69. package/dist/chunk-bsg215q3.js.map +0 -20
  70. package/dist/chunk-bxnfsc7w.js +0 -58
  71. package/dist/chunk-bxnfsc7w.js.map +0 -10
  72. package/dist/chunk-c500xe9z.js +0 -33
  73. package/dist/chunk-c500xe9z.js.map +0 -10
  74. package/dist/chunk-cngrf7ab.js +0 -149
  75. package/dist/chunk-cngrf7ab.js.map +0 -10
  76. package/dist/chunk-d7tprf06.js +0 -53
  77. package/dist/chunk-d7tprf06.js.map +0 -10
  78. package/dist/chunk-ddnrmkrv.js +0 -61
  79. package/dist/chunk-ddnrmkrv.js.map +0 -10
  80. package/dist/chunk-edb07sjp.js +0 -567
  81. package/dist/chunk-edb07sjp.js.map +0 -14
  82. package/dist/chunk-ejcm6zx8.js +0 -591
  83. package/dist/chunk-ejcm6zx8.js.map +0 -11
  84. package/dist/chunk-ezs352qs.js +0 -237
  85. package/dist/chunk-ezs352qs.js.map +0 -11
  86. package/dist/chunk-f5xgprg1.js +0 -59
  87. package/dist/chunk-f5xgprg1.js.map +0 -10
  88. package/dist/chunk-fbtb3v0s.js +0 -1339
  89. package/dist/chunk-fbtb3v0s.js.map +0 -16
  90. package/dist/chunk-ffefbd3r.js +0 -17
  91. package/dist/chunk-ffefbd3r.js.map +0 -10
  92. package/dist/chunk-gaknyw04.js +0 -708
  93. package/dist/chunk-gaknyw04.js.map +0 -14
  94. package/dist/chunk-gxmny6tq.js +0 -1637
  95. package/dist/chunk-gxmny6tq.js.map +0 -15
  96. package/dist/chunk-h7bj5zwb.js +0 -3069
  97. package/dist/chunk-h7bj5zwb.js.map +0 -32
  98. package/dist/chunk-hp4g7wx7.js +0 -46
  99. package/dist/chunk-hp4g7wx7.js.map +0 -10
  100. package/dist/chunk-hwy3n31w.js +0 -21
  101. package/dist/chunk-hwy3n31w.js.map +0 -9
  102. package/dist/chunk-jzz91jwh.js +0 -70
  103. package/dist/chunk-jzz91jwh.js.map +0 -10
  104. package/dist/chunk-k778y16p.js +0 -153
  105. package/dist/chunk-k778y16p.js.map +0 -11
  106. package/dist/chunk-mh5mexsf.js +0 -147
  107. package/dist/chunk-mh5mexsf.js.map +0 -11
  108. package/dist/chunk-mnwaext5.js +0 -318
  109. package/dist/chunk-mnwaext5.js.map +0 -10
  110. package/dist/chunk-nkgs40ch.js +0 -23
  111. package/dist/chunk-nkgs40ch.js.map +0 -10
  112. package/dist/chunk-pz57vwsm.js +0 -250
  113. package/dist/chunk-pz57vwsm.js.map +0 -11
  114. package/dist/chunk-r6kdp7gn.js +0 -252
  115. package/dist/chunk-r6kdp7gn.js.map +0 -10
  116. package/dist/chunk-rkvrkcgx.js +0 -117
  117. package/dist/chunk-rkvrkcgx.js.map +0 -10
  118. package/dist/chunk-s74rdyqe.js +0 -117
  119. package/dist/chunk-s74rdyqe.js.map +0 -12
  120. package/dist/chunk-sa874j5c.js +0 -9
  121. package/dist/chunk-sa874j5c.js.map +0 -10
  122. package/dist/chunk-sffqdkvq.js +0 -122
  123. package/dist/chunk-sffqdkvq.js.map +0 -10
  124. package/dist/chunk-tcs9qjps.js +0 -64
  125. package/dist/chunk-tcs9qjps.js.map +0 -10
  126. package/dist/chunk-wx83ep8e.js +0 -131
  127. package/dist/chunk-wx83ep8e.js.map +0 -10
  128. package/dist/chunk-xag86ng3.js +0 -122
  129. package/dist/chunk-xag86ng3.js.map +0 -10
  130. package/dist/chunk-xfdkep71.js +0 -371
  131. package/dist/chunk-xfdkep71.js.map +0 -11
  132. package/dist/chunk-xhm1rfpt.js +0 -2907
  133. package/dist/chunk-xhm1rfpt.js.map +0 -24
  134. package/dist/chunk-xpcps28p.js +0 -2138
  135. package/dist/chunk-xpcps28p.js.map +0 -29
  136. package/dist/chunk-yb4rbev9.js +0 -214
  137. package/dist/chunk-yb4rbev9.js.map +0 -10
@@ -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
- }