negotium 0.1.11 → 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 (165) hide show
  1. package/README.md +11 -2
  2. package/dist/canonical-mcp-bridge.js +2 -3
  3. package/dist/canonical-mcp-bridge.js.map +1 -1
  4. package/dist/{chunk-gz12qcf0.js → chunk-a9y2rwxf.js} +2 -2
  5. package/dist/{chunk-gz12qcf0.js.map → chunk-a9y2rwxf.js.map} +3 -3
  6. package/dist/{chunk-j0kjscb7.js → chunk-s2gez3wg.js} +20 -2
  7. package/dist/{chunk-j0kjscb7.js.map → chunk-s2gez3wg.js.map} +2 -2
  8. package/dist/cron.js +292 -256
  9. package/dist/cron.js.map +23 -22
  10. package/dist/hosted-agent.js +3012 -17
  11. package/dist/hosted-agent.js.map +30 -3
  12. package/dist/main.js +31323 -36
  13. package/dist/main.js.map +198 -3
  14. package/dist/prompts.js +12 -9
  15. package/dist/prompts.js.map +5 -5
  16. package/dist/registry.js +10 -6
  17. package/dist/registry.js.map +3 -3
  18. package/dist/rollout.js +1 -1
  19. package/dist/runtime/cron/store.ts +24 -1
  20. package/dist/runtime/src/application/submit-user-message.ts +3 -0
  21. package/dist/runtime/src/index.ts +7 -0
  22. package/dist/runtime/src/mcp/runtime-spec.ts +3 -0
  23. package/dist/runtime/src/mcp/session-comm/server.ts +1 -1
  24. package/dist/runtime/src/platform/config.ts +2 -2
  25. package/dist/runtime/src/platform/mcp-config.ts +13 -0
  26. package/dist/runtime/src/prompts/builders.ts +20 -6
  27. package/dist/runtime/src/query/active-rooms.ts +2 -0
  28. package/dist/runtime/src/runtime/delivery-ack.ts +112 -0
  29. package/dist/runtime/src/runtime/errors.ts +12 -12
  30. package/dist/runtime/src/runtime/turn-runner.ts +12 -0
  31. package/dist/runtime/src/storage/api-messages.ts +7 -5
  32. package/dist/runtime/src/storage/api-topics.ts +5 -2
  33. package/dist/runtime/src/storage/forum-db.ts +4 -1
  34. package/dist/runtime/src/storage/runtime-turn-requests.ts +1 -0
  35. package/dist/runtime/src/storage/session-asks.ts +13 -5
  36. package/dist/runtime/src/storage/storage-contract.ts +54 -0
  37. package/dist/runtime/src/storage/storage-host.ts +89 -36
  38. package/dist/runtime/src/storage/storage-public-host.ts +16 -0
  39. package/dist/runtime/src/storage/storage-public.ts +21 -5
  40. package/dist/runtime/src/storage/token-stats.ts +1 -1
  41. package/dist/runtime/src/types/api.ts +2 -0
  42. package/dist/runtime/src/types.ts +2 -0
  43. package/dist/runtime/src/version.ts +1 -1
  44. package/dist/runtime-helpers.js +29 -18
  45. package/dist/runtime-helpers.js.map +8 -7
  46. package/dist/storage.js +260 -202
  47. package/dist/storage.js.map +11 -9
  48. package/dist/types/packages/core/src/mcp/runtime-spec.d.ts +2 -0
  49. package/dist/types/packages/core/src/platform/mcp-config.d.ts +4 -0
  50. package/dist/types/packages/core/src/prompts/builders.d.ts +2 -0
  51. package/dist/types/packages/core/src/storage/api-messages.d.ts +6 -6
  52. package/dist/types/packages/core/src/storage/api-topics.d.ts +20 -2
  53. package/dist/types/packages/core/src/storage/forum-db.d.ts +2 -1
  54. package/dist/types/packages/core/src/storage/session-asks.d.ts +3 -2
  55. package/dist/types/packages/core/src/storage/storage-contract.d.ts +46 -0
  56. package/dist/types/packages/core/src/storage/storage-host.d.ts +12 -19
  57. package/dist/types/packages/core/src/storage/storage-public-host.d.ts +7 -0
  58. package/dist/types/packages/core/src/storage/storage-public.d.ts +4 -2
  59. package/dist/types/packages/core/src/types/api.d.ts +2 -0
  60. package/dist/types/packages/core/src/types.d.ts +2 -0
  61. package/dist/types/packages/core/src/version.d.ts +1 -1
  62. package/dist/types/packages/module-cron/src/store.d.ts +22 -2
  63. package/dist/vault.js +2 -2
  64. package/dist/vault.js.map +3 -3
  65. package/package.json +1 -1
  66. package/dist/chunk-01xcc856.js +0 -149
  67. package/dist/chunk-01xcc856.js.map +0 -10
  68. package/dist/chunk-1a6kv9vt.js +0 -118
  69. package/dist/chunk-1a6kv9vt.js.map +0 -10
  70. package/dist/chunk-1b62d730.js +0 -117
  71. package/dist/chunk-1b62d730.js.map +0 -10
  72. package/dist/chunk-1k7t7bnx.js +0 -97
  73. package/dist/chunk-1k7t7bnx.js.map +0 -10
  74. package/dist/chunk-28apmz4r.js +0 -431
  75. package/dist/chunk-28apmz4r.js.map +0 -11
  76. package/dist/chunk-2fvydfkx.js +0 -141
  77. package/dist/chunk-2fvydfkx.js.map +0 -10
  78. package/dist/chunk-41ygvg5k.js +0 -2387
  79. package/dist/chunk-41ygvg5k.js.map +0 -26
  80. package/dist/chunk-4q966ttx.js +0 -371
  81. package/dist/chunk-4q966ttx.js.map +0 -11
  82. package/dist/chunk-51rcsavw.js +0 -1712
  83. package/dist/chunk-51rcsavw.js.map +0 -18
  84. package/dist/chunk-59d0shyj.js +0 -103
  85. package/dist/chunk-59d0shyj.js.map +0 -10
  86. package/dist/chunk-5fzgvn79.js +0 -3536
  87. package/dist/chunk-5fzgvn79.js.map +0 -20
  88. package/dist/chunk-61px0717.js +0 -153
  89. package/dist/chunk-61px0717.js.map +0 -11
  90. package/dist/chunk-66y0hr8c.js +0 -2136
  91. package/dist/chunk-66y0hr8c.js.map +0 -29
  92. package/dist/chunk-69k45zg8.js +0 -250
  93. package/dist/chunk-69k45zg8.js.map +0 -11
  94. package/dist/chunk-6ah5farg.js +0 -130
  95. package/dist/chunk-6ah5farg.js.map +0 -10
  96. package/dist/chunk-6d4fmea5.js +0 -117
  97. package/dist/chunk-6d4fmea5.js.map +0 -12
  98. package/dist/chunk-8cahx7xc.js +0 -46
  99. package/dist/chunk-8cahx7xc.js.map +0 -10
  100. package/dist/chunk-8f20fk4n.js +0 -252
  101. package/dist/chunk-8f20fk4n.js.map +0 -10
  102. package/dist/chunk-91ckrvk8.js +0 -318
  103. package/dist/chunk-91ckrvk8.js.map +0 -10
  104. package/dist/chunk-93krf6ng.js +0 -3069
  105. package/dist/chunk-93krf6ng.js.map +0 -32
  106. package/dist/chunk-9qx1t77a.js +0 -214
  107. package/dist/chunk-9qx1t77a.js.map +0 -10
  108. package/dist/chunk-beqhdr9w.js +0 -589
  109. package/dist/chunk-beqhdr9w.js.map +0 -11
  110. package/dist/chunk-bftftsgq.js +0 -1637
  111. package/dist/chunk-bftftsgq.js.map +0 -15
  112. package/dist/chunk-c500xe9z.js +0 -33
  113. package/dist/chunk-c500xe9z.js.map +0 -10
  114. package/dist/chunk-cjsnkvq2.js +0 -23
  115. package/dist/chunk-cjsnkvq2.js.map +0 -10
  116. package/dist/chunk-cxa7yghg.js +0 -577
  117. package/dist/chunk-cxa7yghg.js.map +0 -14
  118. package/dist/chunk-edb07sjp.js +0 -567
  119. package/dist/chunk-edb07sjp.js.map +0 -14
  120. package/dist/chunk-f361dwba.js +0 -589
  121. package/dist/chunk-f361dwba.js.map +0 -11
  122. package/dist/chunk-f5xgprg1.js +0 -59
  123. package/dist/chunk-f5xgprg1.js.map +0 -10
  124. package/dist/chunk-ffefbd3r.js +0 -17
  125. package/dist/chunk-ffefbd3r.js.map +0 -10
  126. package/dist/chunk-fswhzdf5.js +0 -64
  127. package/dist/chunk-fswhzdf5.js.map +0 -10
  128. package/dist/chunk-g144wdrs.js +0 -2907
  129. package/dist/chunk-g144wdrs.js.map +0 -24
  130. package/dist/chunk-h980hb2n.js +0 -512
  131. package/dist/chunk-h980hb2n.js.map +0 -13
  132. package/dist/chunk-h9vbhhgr.js +0 -1337
  133. package/dist/chunk-h9vbhhgr.js.map +0 -16
  134. package/dist/chunk-hwy3n31w.js +0 -21
  135. package/dist/chunk-hwy3n31w.js.map +0 -9
  136. package/dist/chunk-jtrk0khr.js +0 -108
  137. package/dist/chunk-jtrk0khr.js.map +0 -10
  138. package/dist/chunk-jzz91jwh.js +0 -70
  139. package/dist/chunk-jzz91jwh.js.map +0 -10
  140. package/dist/chunk-m9e3tbr8.js +0 -708
  141. package/dist/chunk-m9e3tbr8.js.map +0 -14
  142. package/dist/chunk-mh5mexsf.js +0 -147
  143. package/dist/chunk-mh5mexsf.js.map +0 -11
  144. package/dist/chunk-npd8n03v.js +0 -2152
  145. package/dist/chunk-npd8n03v.js.map +0 -15
  146. package/dist/chunk-pg1azh6n.js +0 -2
  147. package/dist/chunk-pg1azh6n.js.map +0 -9
  148. package/dist/chunk-qwy57177.js +0 -237
  149. package/dist/chunk-qwy57177.js.map +0 -11
  150. package/dist/chunk-r31q21h5.js +0 -53
  151. package/dist/chunk-r31q21h5.js.map +0 -10
  152. package/dist/chunk-rbvctv1n.js +0 -366
  153. package/dist/chunk-rbvctv1n.js.map +0 -10
  154. package/dist/chunk-sa874j5c.js +0 -9
  155. package/dist/chunk-sa874j5c.js.map +0 -10
  156. package/dist/chunk-sctcs5zb.js +0 -281
  157. package/dist/chunk-sctcs5zb.js.map +0 -10
  158. package/dist/chunk-tsstrcfc.js +0 -122
  159. package/dist/chunk-tsstrcfc.js.map +0 -10
  160. package/dist/chunk-wk2qf31s.js +0 -58
  161. package/dist/chunk-wk2qf31s.js.map +0 -10
  162. package/dist/chunk-wx7ag4dd.js +0 -2936
  163. package/dist/chunk-wx7ag4dd.js.map +0 -20
  164. package/dist/chunk-znx1fpfd.js +0 -61
  165. package/dist/chunk-znx1fpfd.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-01xcc856.js"),
66
- import("./chunk-4q966ttx.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-2fvydfkx.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-93krf6ng.js");
98
- const [{ startDefaultNode }, otium] = await Promise.all([
99
- import("./chunk-bftftsgq.js"),
100
- import("./chunk-wx7ag4dd.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-28apmz4r.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-28apmz4r.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-28apmz4r.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
- }