negotium 0.1.9 → 0.1.11

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 (244) hide show
  1. package/README.md +42 -0
  2. package/dist/{chunk-e9b2xpff.js → chunk-01xcc856.js} +25 -23
  3. package/dist/{chunk-e9b2xpff.js.map → chunk-01xcc856.js.map} +2 -2
  4. package/dist/chunk-1a6kv9vt.js +118 -0
  5. package/dist/chunk-1a6kv9vt.js.map +10 -0
  6. package/dist/{chunk-f1pzh3xh.js → chunk-1b62d730.js} +24 -22
  7. package/dist/{chunk-f1pzh3xh.js.map → chunk-1b62d730.js.map} +2 -2
  8. package/dist/{chunk-10ct8814.js → chunk-28apmz4r.js} +66 -64
  9. package/dist/{chunk-10ct8814.js.map → chunk-28apmz4r.js.map} +2 -2
  10. package/dist/{chunk-ns2m25dz.js → chunk-2fvydfkx.js} +27 -25
  11. package/dist/{chunk-ns2m25dz.js.map → chunk-2fvydfkx.js.map} +2 -2
  12. package/dist/{chunk-n0kk5xbq.js → chunk-41ygvg5k.js} +73 -44
  13. package/dist/{chunk-n0kk5xbq.js.map → chunk-41ygvg5k.js.map} +7 -7
  14. package/dist/{chunk-eexqsee7.js → chunk-4q966ttx.js} +27 -24
  15. package/dist/{chunk-eexqsee7.js.map → chunk-4q966ttx.js.map} +2 -2
  16. package/dist/{chunk-m4veth0c.js → chunk-51rcsavw.js} +109 -46
  17. package/dist/chunk-51rcsavw.js.map +18 -0
  18. package/dist/{chunk-z2xy5n2q.js → chunk-59d0shyj.js} +12 -12
  19. package/dist/{chunk-z2xy5n2q.js.map → chunk-59d0shyj.js.map} +2 -2
  20. package/dist/{chunk-epqxwkvh.js → chunk-5fzgvn79.js} +28 -26
  21. package/dist/{chunk-epqxwkvh.js.map → chunk-5fzgvn79.js.map} +2 -2
  22. package/dist/{chunk-mhty3nna.js → chunk-61px0717.js} +8 -5
  23. package/dist/chunk-61px0717.js.map +11 -0
  24. package/dist/{chunk-6hknphtc.js → chunk-66y0hr8c.js} +306 -224
  25. package/dist/chunk-66y0hr8c.js.map +29 -0
  26. package/dist/{chunk-mmgh670x.js → chunk-69k45zg8.js} +27 -25
  27. package/dist/{chunk-mmgh670x.js.map → chunk-69k45zg8.js.map} +2 -2
  28. package/dist/{chunk-hsq7j9jk.js → chunk-6ah5farg.js} +38 -34
  29. package/dist/chunk-6ah5farg.js.map +10 -0
  30. package/dist/{chunk-nqdp52aj.js → chunk-6d4fmea5.js} +10 -6
  31. package/dist/{chunk-nqdp52aj.js.map → chunk-6d4fmea5.js.map} +2 -2
  32. package/dist/{chunk-hgw7n8cm.js → chunk-8cahx7xc.js} +9 -6
  33. package/dist/{chunk-hgw7n8cm.js.map → chunk-8cahx7xc.js.map} +2 -2
  34. package/dist/{chunk-fvc7ncxd.js → chunk-8f20fk4n.js} +2 -2
  35. package/dist/{chunk-h8vmb9gf.js → chunk-91ckrvk8.js} +21 -18
  36. package/dist/{chunk-h8vmb9gf.js.map → chunk-91ckrvk8.js.map} +2 -2
  37. package/dist/{chunk-sn51wnf1.js → chunk-93krf6ng.js} +141 -92
  38. package/dist/{chunk-sn51wnf1.js.map → chunk-93krf6ng.js.map} +3 -3
  39. package/dist/{chunk-18fzftjf.js → chunk-9qx1t77a.js} +9 -9
  40. package/dist/{chunk-sqhr1a7e.js → chunk-beqhdr9w.js} +33 -31
  41. package/dist/{chunk-sqhr1a7e.js.map → chunk-beqhdr9w.js.map} +2 -2
  42. package/dist/{chunk-rmyfmrrr.js → chunk-bftftsgq.js} +34 -31
  43. package/dist/{chunk-rmyfmrrr.js.map → chunk-bftftsgq.js.map} +2 -2
  44. package/dist/{chunk-8g0c4as0.js → chunk-cjsnkvq2.js} +3 -3
  45. package/dist/{chunk-g7pvfj5e.js → chunk-cxa7yghg.js} +43 -40
  46. package/dist/{chunk-g7pvfj5e.js.map → chunk-cxa7yghg.js.map} +2 -2
  47. package/dist/{chunk-f97qybwk.js → chunk-f361dwba.js} +173 -168
  48. package/dist/chunk-f361dwba.js.map +11 -0
  49. package/dist/chunk-ffefbd3r.js +17 -0
  50. package/dist/chunk-ffefbd3r.js.map +10 -0
  51. package/dist/{chunk-x1arr7ze.js → chunk-fswhzdf5.js} +3 -2
  52. package/dist/{chunk-x1arr7ze.js.map → chunk-fswhzdf5.js.map} +2 -2
  53. package/dist/{chunk-nmv41qx9.js → chunk-g144wdrs.js} +114 -54
  54. package/dist/chunk-g144wdrs.js.map +24 -0
  55. package/dist/chunk-gz12qcf0.js +981 -0
  56. package/dist/chunk-gz12qcf0.js.map +16 -0
  57. package/dist/{chunk-efyxk97v.js → chunk-h980hb2n.js} +44 -32
  58. package/dist/chunk-h980hb2n.js.map +13 -0
  59. package/dist/{chunk-kbm35t7w.js → chunk-h9vbhhgr.js} +77 -71
  60. package/dist/{chunk-kbm35t7w.js.map → chunk-h9vbhhgr.js.map} +3 -3
  61. package/dist/{chunk-wry79q55.js → chunk-jtrk0khr.js} +6 -6
  62. package/dist/{chunk-2dgkah1z.js → chunk-m9e3tbr8.js} +8 -6
  63. package/dist/{chunk-2dgkah1z.js.map → chunk-m9e3tbr8.js.map} +3 -3
  64. package/dist/{chunk-pkdmypdd.js → chunk-mh5mexsf.js} +1 -1
  65. package/dist/{chunk-6tfzpcvk.js → chunk-npd8n03v.js} +29 -26
  66. package/dist/{chunk-6tfzpcvk.js.map → chunk-npd8n03v.js.map} +2 -2
  67. package/dist/chunk-pg1azh6n.js +2 -0
  68. package/dist/chunk-pg1azh6n.js.map +9 -0
  69. package/dist/{chunk-k9z47mab.js → chunk-qwy57177.js} +5 -15
  70. package/dist/{chunk-k9z47mab.js.map → chunk-qwy57177.js.map} +3 -4
  71. package/dist/{chunk-3vn2vnj1.js → chunk-r31q21h5.js} +24 -22
  72. package/dist/{chunk-3vn2vnj1.js.map → chunk-r31q21h5.js.map} +2 -2
  73. package/dist/{chunk-sgsz2fpq.js → chunk-rbvctv1n.js} +125 -48
  74. package/dist/chunk-rbvctv1n.js.map +10 -0
  75. package/dist/{chunk-9spx3h9n.js → chunk-sctcs5zb.js} +27 -25
  76. package/dist/{chunk-9spx3h9n.js.map → chunk-sctcs5zb.js.map} +2 -2
  77. package/dist/{chunk-vp2db42d.js → chunk-tsstrcfc.js} +3 -2
  78. package/dist/{chunk-vp2db42d.js.map → chunk-tsstrcfc.js.map} +2 -2
  79. package/dist/{chunk-vefj3880.js → chunk-wk2qf31s.js} +26 -24
  80. package/dist/{chunk-vefj3880.js.map → chunk-wk2qf31s.js.map} +2 -2
  81. package/dist/{chunk-tmj5r2zv.js → chunk-wx7ag4dd.js} +41 -38
  82. package/dist/{chunk-tmj5r2zv.js.map → chunk-wx7ag4dd.js.map} +2 -2
  83. package/dist/{chunk-3t4dtm26.js → chunk-znx1fpfd.js} +1 -1
  84. package/dist/cron.js +13184 -0
  85. package/dist/cron.js.map +135 -0
  86. package/dist/hosted-agent.js +25 -14
  87. package/dist/hosted-agent.js.map +3 -3
  88. package/dist/main.js +11 -11
  89. package/dist/mcp-servers.js +47 -0
  90. package/dist/mcp-servers.js.map +10 -0
  91. package/dist/prompts.js +451 -0
  92. package/dist/prompts.js.map +13 -0
  93. package/dist/registry.js +395 -0
  94. package/dist/registry.js.map +19 -0
  95. package/dist/rollout.js +43 -0
  96. package/dist/rollout.js.map +10 -0
  97. package/dist/runtime/cron/background-sessions.ts +91 -0
  98. package/dist/runtime/cron/context.ts +123 -0
  99. package/dist/runtime/cron/host.ts +67 -0
  100. package/dist/runtime/cron/index.ts +92 -0
  101. package/dist/runtime/cron/mcp-server.ts +517 -0
  102. package/dist/runtime/cron/module.ts +169 -0
  103. package/dist/runtime/cron/schedule.ts +211 -0
  104. package/dist/runtime/cron/scheduler.ts +444 -0
  105. package/dist/runtime/cron/scripts.ts +181 -0
  106. package/dist/runtime/cron/store.ts +1043 -0
  107. package/dist/runtime/cron/summarize.ts +115 -0
  108. package/dist/runtime/src/agents/execution-host.ts +20 -0
  109. package/dist/runtime/src/agents/hosted-agent.ts +22 -8
  110. package/dist/runtime/src/agents/mcp-tools/spawn-subagent.ts +75 -1
  111. package/dist/runtime/src/agents/rollout/index.ts +20 -0
  112. package/dist/runtime/src/agents/rollout/shared.ts +36 -3
  113. package/dist/runtime/src/prompts/builders.ts +1 -1
  114. package/dist/runtime/src/query/active-rooms.ts +31 -11
  115. package/dist/runtime/src/runtime/inbox.ts +146 -49
  116. package/dist/runtime/src/runtime/public-helpers.ts +11 -0
  117. package/dist/runtime/src/runtime/task-format.ts +18 -0
  118. package/dist/runtime/src/runtime/tasks.ts +2 -16
  119. package/dist/runtime/src/runtime/turn-runner.ts +65 -15
  120. package/dist/runtime/src/storage/activity-log.ts +21 -12
  121. package/dist/runtime/src/storage/api-messages.ts +58 -51
  122. package/dist/runtime/src/storage/api-topic-brief.ts +12 -9
  123. package/dist/runtime/src/storage/api-topic-config.ts +59 -54
  124. package/dist/runtime/src/storage/api-topics.ts +232 -227
  125. package/dist/runtime/src/storage/app-settings.ts +27 -15
  126. package/dist/runtime/src/storage/conversations.ts +2 -2
  127. package/dist/runtime/src/storage/forum/repository.ts +12 -2
  128. package/dist/runtime/src/storage/forum/schema.ts +178 -171
  129. package/dist/runtime/src/storage/forum-db.ts +1 -23
  130. package/dist/runtime/src/storage/session-asks.ts +145 -46
  131. package/dist/runtime/src/storage/storage-host.ts +185 -0
  132. package/dist/runtime/src/storage/storage-public.ts +80 -0
  133. package/dist/runtime/src/storage/tasks.ts +7 -2
  134. package/dist/runtime/src/storage/token-stats.ts +10 -6
  135. package/dist/runtime/src/storage/topic-archive-state.ts +11 -8
  136. package/dist/runtime/src/storage/vault-crypto.ts +11 -5
  137. package/dist/runtime/src/storage/vault-public.ts +27 -0
  138. package/dist/runtime/src/storage/vault.ts +95 -42
  139. package/dist/runtime/src/storage/wiki.ts +7 -5
  140. package/dist/runtime/src/types/api.ts +2 -0
  141. package/dist/runtime/src/version.ts +1 -1
  142. package/dist/runtime-helpers.js +540 -0
  143. package/dist/runtime-helpers.js.map +18 -0
  144. package/dist/storage.js +3156 -0
  145. package/dist/storage.js.map +37 -0
  146. package/dist/types/apps/negotium/src/mcp-servers.d.ts +7 -0
  147. package/dist/types/packages/core/src/agents/claude-provider.d.ts +23 -0
  148. package/dist/types/packages/core/src/agents/claude-registry.d.ts +2 -0
  149. package/dist/types/packages/core/src/agents/codex-native-multi-agent.d.ts +8 -0
  150. package/dist/types/packages/core/src/agents/codex-provider.d.ts +45 -0
  151. package/dist/types/packages/core/src/agents/codex-registry.d.ts +2 -0
  152. package/dist/types/packages/core/src/agents/codex-tree-kill.d.ts +78 -0
  153. package/dist/types/packages/core/src/agents/contracts.d.ts +63 -0
  154. package/dist/types/packages/core/src/agents/deep-map.d.ts +2 -0
  155. package/dist/types/packages/core/src/agents/execution-host.d.ts +31 -0
  156. package/dist/types/packages/core/src/agents/hosted-agent.d.ts +11 -0
  157. package/dist/types/packages/core/src/agents/maestro-provider.d.ts +67 -0
  158. package/dist/types/packages/core/src/agents/maestro-registry.d.ts +17 -0
  159. package/dist/types/packages/core/src/agents/registry.d.ts +4 -0
  160. package/dist/types/packages/core/src/agents/rollout/claude.d.ts +72 -0
  161. package/dist/types/packages/core/src/agents/rollout/codex.d.ts +70 -0
  162. package/dist/types/packages/core/src/agents/rollout/index.d.ts +6 -0
  163. package/dist/types/packages/core/src/agents/rollout/shared.d.ts +50 -0
  164. package/dist/types/packages/core/src/agents/vault-tool-policy.d.ts +4 -0
  165. package/dist/types/packages/core/src/mcp/canonical-bridge-config.d.ts +21 -0
  166. package/dist/types/packages/core/src/mcp/runtime-spec.d.ts +36 -0
  167. package/dist/types/packages/core/src/mcp/session-comm/bridge-ipc-config.d.ts +6 -0
  168. package/dist/types/packages/core/src/media/file-events.d.ts +14 -0
  169. package/dist/types/packages/core/src/platform/config.d.ts +95 -0
  170. package/dist/types/packages/core/src/platform/constants.d.ts +10 -0
  171. package/dist/types/packages/core/src/platform/error.d.ts +6 -0
  172. package/dist/types/packages/core/src/platform/file-utils.d.ts +6 -0
  173. package/dist/types/packages/core/src/platform/jsonl.d.ts +33 -0
  174. package/dist/types/packages/core/src/platform/logger.d.ts +14 -0
  175. package/dist/types/packages/core/src/platform/maestro-bootstrap-env.d.ts +0 -0
  176. package/dist/types/packages/core/src/platform/mcp-config.d.ts +227 -0
  177. package/dist/types/packages/core/src/prompts/builders.d.ts +32 -0
  178. package/dist/types/packages/core/src/runtime/attachments.d.ts +36 -0
  179. package/dist/types/packages/core/src/runtime/channel-context.d.ts +13 -0
  180. package/dist/types/packages/core/src/runtime/file-hooks.d.ts +38 -0
  181. package/dist/types/packages/core/src/runtime/public-helpers.d.ts +3 -0
  182. package/dist/types/packages/core/src/runtime/task-format.d.ts +4 -0
  183. package/dist/types/packages/core/src/runtime/visual-html.d.ts +13 -0
  184. package/dist/types/packages/core/src/security/sanitize.d.ts +16 -0
  185. package/dist/types/packages/core/src/security/sensitive-path.d.ts +1 -0
  186. package/dist/types/packages/core/src/storage/activity-log.d.ts +25 -0
  187. package/dist/types/packages/core/src/storage/api-messages.d.ts +111 -0
  188. package/dist/types/packages/core/src/storage/api-topic-brief.d.ts +39 -0
  189. package/dist/types/packages/core/src/storage/api-topic-config.d.ts +23 -0
  190. package/dist/types/packages/core/src/storage/api-topics.d.ts +86 -0
  191. package/dist/types/packages/core/src/storage/app-settings.d.ts +4 -0
  192. package/dist/types/packages/core/src/storage/conversations.d.ts +123 -0
  193. package/dist/types/packages/core/src/storage/forum/agent-settings.d.ts +3 -0
  194. package/dist/types/packages/core/src/storage/forum/index.d.ts +4 -0
  195. package/dist/types/packages/core/src/storage/forum/repository.d.ts +42 -0
  196. package/dist/types/packages/core/src/storage/forum/schema.d.ts +38 -0
  197. package/dist/types/packages/core/src/storage/forum-db.d.ts +1 -0
  198. package/dist/types/packages/core/src/storage/session-asks.d.ts +66 -0
  199. package/dist/types/packages/core/src/storage/sqlite.d.ts +4 -0
  200. package/dist/types/packages/core/src/storage/storage-host.d.ts +37 -0
  201. package/dist/types/packages/core/src/storage/storage-public.d.ts +38 -0
  202. package/dist/types/packages/core/src/storage/tasks.d.ts +49 -0
  203. package/dist/types/packages/core/src/storage/token-stats.d.ts +30 -0
  204. package/dist/types/packages/core/src/storage/topic-archive-state.d.ts +10 -0
  205. package/dist/types/packages/core/src/storage/topic-archive.d.ts +26 -0
  206. package/dist/types/packages/core/src/storage/topic-settings.d.ts +19 -0
  207. package/dist/types/packages/core/src/storage/topic-transcript.d.ts +38 -0
  208. package/dist/types/packages/core/src/storage/vault-crypto.d.ts +11 -0
  209. package/dist/types/packages/core/src/storage/vault-public.d.ts +3 -0
  210. package/dist/types/packages/core/src/storage/vault.d.ts +39 -0
  211. package/dist/types/packages/core/src/storage/wiki-summary-names.d.ts +6 -0
  212. package/dist/types/packages/core/src/storage/wiki.d.ts +15 -0
  213. package/dist/types/packages/core/src/types/api.d.ts +472 -0
  214. package/dist/types/packages/core/src/types.d.ts +249 -0
  215. package/dist/types/packages/core/src/version.d.ts +1 -0
  216. package/dist/types/packages/module-cron/src/background-sessions.d.ts +2 -0
  217. package/dist/types/packages/module-cron/src/context.d.ts +15 -0
  218. package/dist/types/packages/module-cron/src/host.d.ts +23 -0
  219. package/dist/types/packages/module-cron/src/index.d.ts +14 -0
  220. package/dist/types/packages/module-cron/src/module.d.ts +13 -0
  221. package/dist/types/packages/module-cron/src/schedule.d.ts +23 -0
  222. package/dist/types/packages/module-cron/src/scheduler.d.ts +46 -0
  223. package/dist/types/packages/module-cron/src/scripts.d.ts +23 -0
  224. package/dist/types/packages/module-cron/src/store.d.ts +127 -0
  225. package/dist/types/packages/module-cron/src/summarize.d.ts +4 -0
  226. package/dist/vault.js +533 -0
  227. package/dist/vault.js.map +15 -0
  228. package/package.json +47 -4
  229. package/dist/chunk-1msje2zf.js +0 -23
  230. package/dist/chunk-1msje2zf.js.map +0 -10
  231. package/dist/chunk-6hknphtc.js.map +0 -29
  232. package/dist/chunk-efyxk97v.js.map +0 -13
  233. package/dist/chunk-f97qybwk.js.map +0 -11
  234. package/dist/chunk-hsq7j9jk.js.map +0 -10
  235. package/dist/chunk-m4veth0c.js.map +0 -17
  236. package/dist/chunk-mhty3nna.js.map +0 -11
  237. package/dist/chunk-nmv41qx9.js.map +0 -23
  238. package/dist/chunk-sgsz2fpq.js.map +0 -10
  239. /package/dist/{chunk-fvc7ncxd.js.map → chunk-8f20fk4n.js.map} +0 -0
  240. /package/dist/{chunk-18fzftjf.js.map → chunk-9qx1t77a.js.map} +0 -0
  241. /package/dist/{chunk-8g0c4as0.js.map → chunk-cjsnkvq2.js.map} +0 -0
  242. /package/dist/{chunk-wry79q55.js.map → chunk-jtrk0khr.js.map} +0 -0
  243. /package/dist/{chunk-pkdmypdd.js.map → chunk-mh5mexsf.js.map} +0 -0
  244. /package/dist/{chunk-3t4dtm26.js.map → chunk-znx1fpfd.js.map} +0 -0
@@ -1,40 +1,42 @@
1
1
  // @bun
2
- import"./chunk-sn51wnf1.js";
3
- import"./chunk-x1arr7ze.js";
4
- import"./chunk-g7pvfj5e.js";
5
- import"./chunk-z2xy5n2q.js";
6
- import"./chunk-sgsz2fpq.js";
2
+ import"./chunk-93krf6ng.js";
3
+ import"./chunk-fswhzdf5.js";
4
+ import"./chunk-cxa7yghg.js";
5
+ import"./chunk-59d0shyj.js";
6
+ import"./chunk-rbvctv1n.js";
7
7
  import"./chunk-1k7t7bnx.js";
8
- import"./chunk-nmv41qx9.js";
9
- import"./chunk-h8vmb9gf.js";
10
- import"./chunk-6hknphtc.js";
11
- import"./chunk-kbm35t7w.js";
8
+ import"./chunk-g144wdrs.js";
9
+ import"./chunk-91ckrvk8.js";
10
+ import"./chunk-66y0hr8c.js";
11
+ import"./chunk-h9vbhhgr.js";
12
12
  import {
13
13
  getTopic,
14
14
  isTopicShared,
15
15
  isTopicVisible,
16
16
  upsertTopic
17
- } from "./chunk-f97qybwk.js";
18
- import"./chunk-hgw7n8cm.js";
19
- import"./chunk-nqdp52aj.js";
20
- import"./chunk-mhty3nna.js";
21
- import"./chunk-vp2db42d.js";
22
- import"./chunk-hsq7j9jk.js";
23
- import"./chunk-n0kk5xbq.js";
24
- import"./chunk-2dgkah1z.js";
25
- import"./chunk-pkdmypdd.js";
17
+ } from "./chunk-f361dwba.js";
18
+ import"./chunk-8cahx7xc.js";
19
+ import"./chunk-6d4fmea5.js";
20
+ import"./chunk-61px0717.js";
21
+ import"./chunk-tsstrcfc.js";
22
+ import"./chunk-6ah5farg.js";
23
+ import"./chunk-41ygvg5k.js";
24
+ import"./chunk-m9e3tbr8.js";
25
+ import"./chunk-mh5mexsf.js";
26
+ import"./chunk-qwy57177.js";
26
27
  import"./chunk-j0kjscb7.js";
27
- import"./chunk-efyxk97v.js";
28
+ import"./chunk-h980hb2n.js";
29
+ import"./chunk-ffefbd3r.js";
30
+ import"./chunk-pg1azh6n.js";
28
31
  import {
29
- db
30
- } from "./chunk-1msje2zf.js";
32
+ storageDatabase
33
+ } from "./chunk-1a6kv9vt.js";
31
34
  import"./chunk-f5xgprg1.js";
32
- import"./chunk-k9z47mab.js";
33
35
  import"./chunk-hwy3n31w.js";
34
36
 
35
37
  // ../../adapters/otium/src/store.ts
36
38
  import { createHash } from "crypto";
37
- db.exec(`
39
+ storageDatabase.exec(`
38
40
  CREATE TABLE IF NOT EXISTS otium_peer_sessions (
39
41
  host_node_id TEXT NOT NULL,
40
42
  host_topic_id TEXT NOT NULL,
@@ -44,19 +46,19 @@ db.exec(`
44
46
  PRIMARY KEY (host_node_id, host_topic_id)
45
47
  )
46
48
  `);
47
- var peerSessionColumns = new Set(db.query("PRAGMA table_info(otium_peer_sessions)").all().map((row) => row.name));
49
+ var peerSessionColumns = new Set(storageDatabase.query("PRAGMA table_info(otium_peer_sessions)").all().map((row) => row.name));
48
50
  if (!peerSessionColumns.has("binding_mode")) {
49
- db.exec("ALTER TABLE otium_peer_sessions ADD COLUMN binding_mode TEXT NOT NULL DEFAULT 'mirror'");
51
+ storageDatabase.exec("ALTER TABLE otium_peer_sessions ADD COLUMN binding_mode TEXT NOT NULL DEFAULT 'mirror'");
50
52
  }
51
- db.run(`UPDATE api_topics
53
+ storageDatabase.run(`UPDATE api_topics
52
54
  SET visibility = 'hidden', access_mode = 'shared'
53
55
  WHERE id IN (
54
56
  SELECT local_topic_id FROM otium_peer_sessions WHERE binding_mode = 'mirror'
55
57
  )`);
56
- db.run(`UPDATE api_topics
58
+ storageDatabase.run(`UPDATE api_topics
57
59
  SET access_mode = 'shared'
58
60
  WHERE id IN (SELECT local_topic_id FROM otium_peer_sessions)`);
59
- db.exec(`
61
+ storageDatabase.exec(`
60
62
  CREATE TABLE IF NOT EXISTS otium_peer_turn_requests (
61
63
  host_node_id TEXT NOT NULL,
62
64
  request_id TEXT NOT NULL,
@@ -69,7 +71,7 @@ db.exec(`
69
71
  PRIMARY KEY (host_node_id, request_id)
70
72
  )
71
73
  `);
72
- db.exec(`
74
+ storageDatabase.exec(`
73
75
  CREATE TABLE IF NOT EXISTS otium_peer_terminal_outbox (
74
76
  host_node_id TEXT NOT NULL,
75
77
  request_id TEXT NOT NULL,
@@ -80,7 +82,7 @@ db.exec(`
80
82
  PRIMARY KEY (host_node_id, request_id)
81
83
  )
82
84
  `);
83
- db.exec(`
85
+ storageDatabase.exec(`
84
86
  CREATE TABLE IF NOT EXISTS otium_peer_inbox_requests (
85
87
  from_cell_id TEXT NOT NULL,
86
88
  request_id TEXT NOT NULL,
@@ -91,7 +93,7 @@ db.exec(`
91
93
  PRIMARY KEY (from_cell_id, request_id, kind)
92
94
  )
93
95
  `);
94
- db.exec(`
96
+ storageDatabase.exec(`
95
97
  CREATE TABLE IF NOT EXISTS otium_remote_asks (
96
98
  request_id TEXT PRIMARY KEY,
97
99
  expected_cell_id TEXT NOT NULL,
@@ -103,11 +105,11 @@ db.exec(`
103
105
  created_at INTEGER NOT NULL
104
106
  )
105
107
  `);
106
- db.exec(`
108
+ storageDatabase.exec(`
107
109
  CREATE INDEX IF NOT EXISTS idx_otium_remote_asks_created
108
110
  ON otium_remote_asks(created_at)
109
111
  `);
110
- db.exec(`
112
+ storageDatabase.exec(`
111
113
  CREATE TABLE IF NOT EXISTS otium_peer_reply_outbox (
112
114
  node_cell_id TEXT NOT NULL,
113
115
  request_id TEXT NOT NULL,
@@ -123,7 +125,7 @@ db.exec(`
123
125
  )
124
126
  `);
125
127
  function getPeerSession(hostNodeId, hostTopicId) {
126
- return db.query("SELECT * FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?").get(hostNodeId, hostTopicId) ?? null;
128
+ return storageDatabase.query("SELECT * FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?").get(hostNodeId, hostTopicId) ?? null;
127
129
  }
128
130
  function createPeerSession(hostNodeId, hostTopicId, localTopicId) {
129
131
  const row = {
@@ -133,7 +135,7 @@ function createPeerSession(hostNodeId, hostTopicId, localTopicId) {
133
135
  binding_mode: "mirror",
134
136
  created_at: new Date().toISOString()
135
137
  };
136
- db.run("INSERT INTO otium_peer_sessions (host_node_id, host_topic_id, local_topic_id, binding_mode, created_at) VALUES (?, ?, ?, ?, ?)", [row.host_node_id, row.host_topic_id, row.local_topic_id, row.binding_mode, row.created_at]);
138
+ storageDatabase.run("INSERT INTO otium_peer_sessions (host_node_id, host_topic_id, local_topic_id, binding_mode, created_at) VALUES (?, ?, ?, ?, ?)", [row.host_node_id, row.host_topic_id, row.local_topic_id, row.binding_mode, row.created_at]);
137
139
  return row;
138
140
  }
139
141
  function bindPeerSession(hostNodeId, hostTopicId, localTopicId, mode = "shared") {
@@ -144,7 +146,7 @@ function bindPeerSession(hostNodeId, hostTopicId, localTopicId, mode = "shared")
144
146
  binding_mode: mode,
145
147
  created_at: new Date().toISOString()
146
148
  };
147
- db.run(`INSERT INTO otium_peer_sessions
149
+ storageDatabase.run(`INSERT INTO otium_peer_sessions
148
150
  (host_node_id, host_topic_id, local_topic_id, binding_mode, created_at)
149
151
  VALUES (?, ?, ?, ?, ?)
150
152
  ON CONFLICT(host_node_id, host_topic_id) DO UPDATE SET
@@ -154,20 +156,20 @@ function bindPeerSession(hostNodeId, hostTopicId, localTopicId, mode = "shared")
154
156
  return row;
155
157
  }
156
158
  function unbindPeerSession(hostNodeId, hostTopicId) {
157
- return db.run("DELETE FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?", [
159
+ return storageDatabase.run("DELETE FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?", [
158
160
  hostNodeId,
159
161
  hostTopicId
160
162
  ]).changes === 1;
161
163
  }
162
164
  function unbindSharedPeerSessionsForLocalTopic(localTopicId) {
163
- return db.run("DELETE FROM otium_peer_sessions WHERE local_topic_id = ? AND binding_mode = 'shared'", [localTopicId]).changes;
165
+ return storageDatabase.run("DELETE FROM otium_peer_sessions WHERE local_topic_id = ? AND binding_mode = 'shared'", [localTopicId]).changes;
164
166
  }
165
167
  function listPeerSessions() {
166
- return db.query("SELECT * FROM otium_peer_sessions").all();
168
+ return storageDatabase.query("SELECT * FROM otium_peer_sessions").all();
167
169
  }
168
170
  function cleanupPeerStateForLocalTopic(localTopicId) {
169
- return db.transaction(() => {
170
- const terminalOutbox = db.run(`DELETE FROM otium_peer_terminal_outbox
171
+ return storageDatabase.transaction(() => {
172
+ const terminalOutbox = storageDatabase.run(`DELETE FROM otium_peer_terminal_outbox
171
173
  WHERE EXISTS (
172
174
  SELECT 1 FROM otium_peer_turn_requests turn_request
173
175
  JOIN otium_peer_sessions session
@@ -177,27 +179,27 @@ function cleanupPeerStateForLocalTopic(localTopicId) {
177
179
  AND turn_request.host_node_id = otium_peer_terminal_outbox.host_node_id
178
180
  AND turn_request.request_id = otium_peer_terminal_outbox.request_id
179
181
  )`, [localTopicId]).changes;
180
- const turns = db.run(`DELETE FROM otium_peer_turn_requests
182
+ const turns = storageDatabase.run(`DELETE FROM otium_peer_turn_requests
181
183
  WHERE EXISTS (
182
184
  SELECT 1 FROM otium_peer_sessions session
183
185
  WHERE session.local_topic_id = ?
184
186
  AND session.host_node_id = otium_peer_turn_requests.host_node_id
185
187
  AND session.host_topic_id = otium_peer_turn_requests.host_topic_id
186
188
  )`, [localTopicId]).changes;
187
- const inboxRequests = db.run("DELETE FROM otium_peer_inbox_requests WHERE topic_id = ?", [
189
+ const inboxRequests = storageDatabase.run("DELETE FROM otium_peer_inbox_requests WHERE topic_id = ?", [
188
190
  localTopicId
189
191
  ]).changes;
190
- const remoteAsks = db.run("DELETE FROM otium_remote_asks WHERE caller_topic_id = ?", [
192
+ const remoteAsks = storageDatabase.run("DELETE FROM otium_remote_asks WHERE caller_topic_id = ?", [
191
193
  localTopicId
192
194
  ]).changes;
193
- const sessions = db.run("DELETE FROM otium_peer_sessions WHERE local_topic_id = ?", [
195
+ const sessions = storageDatabase.run("DELETE FROM otium_peer_sessions WHERE local_topic_id = ?", [
194
196
  localTopicId
195
197
  ]).changes;
196
198
  return { sessions, turns, terminalOutbox, inboxRequests, remoteAsks };
197
199
  })();
198
200
  }
199
201
  function failInterruptedPeerTurnRequestsOnStartup() {
200
- return db.run(`UPDATE otium_peer_turn_requests
202
+ return storageDatabase.run(`UPDATE otium_peer_turn_requests
201
203
  SET status = 'failed', error = 'worker restarted during turn', updated_at = ?
202
204
  WHERE status IN ('claimed', 'running')
203
205
  AND NOT EXISTS (
@@ -208,7 +210,7 @@ function failInterruptedPeerTurnRequestsOnStartup() {
208
210
  }
209
211
  function claimPeerTurnRequest(hostNodeId, requestId, hostTopicId) {
210
212
  const now = new Date().toISOString();
211
- const inserted = db.run(`INSERT OR IGNORE INTO otium_peer_turn_requests
213
+ const inserted = storageDatabase.run(`INSERT OR IGNORE INTO otium_peer_turn_requests
212
214
  (host_node_id, request_id, host_topic_id, status, created_at, updated_at)
213
215
  VALUES (?, ?, ?, 'claimed', ?, ?)`, [hostNodeId, requestId, hostTopicId, now, now]);
214
216
  const row = getPeerTurnRequest(hostNodeId, requestId);
@@ -217,10 +219,10 @@ function claimPeerTurnRequest(hostNodeId, requestId, hostTopicId) {
217
219
  return { claimed: inserted.changes === 1, row };
218
220
  }
219
221
  function getPeerTurnRequest(hostNodeId, requestId) {
220
- return db.query("SELECT * FROM otium_peer_turn_requests WHERE host_node_id = ? AND request_id = ?").get(hostNodeId, requestId) ?? null;
222
+ return storageDatabase.query("SELECT * FROM otium_peer_turn_requests WHERE host_node_id = ? AND request_id = ?").get(hostNodeId, requestId) ?? null;
221
223
  }
222
224
  function setPeerTurnRequestStatus(hostNodeId, requestId, status, error = null) {
223
- db.run(`UPDATE otium_peer_turn_requests
225
+ storageDatabase.run(`UPDATE otium_peer_turn_requests
224
226
  SET status = ?, error = ?, updated_at = ?
225
227
  WHERE host_node_id = ? AND request_id = ?`, [status, error, new Date().toISOString(), hostNodeId, requestId]);
226
228
  }
@@ -235,18 +237,18 @@ function markPeerTurnRequestFailed(hostNodeId, requestId, error) {
235
237
  }
236
238
  function upsertPeerTerminalOutbox(args) {
237
239
  const now = Date.now();
238
- db.run(`INSERT INTO otium_peer_terminal_outbox
240
+ storageDatabase.run(`INSERT INTO otium_peer_terminal_outbox
239
241
  (host_node_id, request_id, seq, event_json, created_at, updated_at)
240
242
  VALUES (?, ?, ?, ?, ?, ?)
241
243
  ON CONFLICT(host_node_id, request_id) DO UPDATE SET
242
244
  seq = excluded.seq, event_json = excluded.event_json, updated_at = excluded.updated_at`, [args.hostNodeId, args.requestId, args.seq, JSON.stringify(args.event), now, now]);
243
245
  }
244
246
  function listPeerTerminalOutbox(limit = 100) {
245
- return db.query("SELECT * FROM otium_peer_terminal_outbox ORDER BY created_at LIMIT ?").all(limit);
247
+ return storageDatabase.query("SELECT * FROM otium_peer_terminal_outbox ORDER BY created_at LIMIT ?").all(limit);
246
248
  }
247
249
  function acknowledgePeerTerminal(hostNodeId, requestId) {
248
- return db.transaction(() => {
249
- const removed = db.run("DELETE FROM otium_peer_terminal_outbox WHERE host_node_id = ? AND request_id = ?", [hostNodeId, requestId]).changes;
250
+ return storageDatabase.transaction(() => {
251
+ const removed = storageDatabase.run("DELETE FROM otium_peer_terminal_outbox WHERE host_node_id = ? AND request_id = ?", [hostNodeId, requestId]).changes;
250
252
  if (removed !== 1)
251
253
  return false;
252
254
  markPeerTurnRequestFinished(hostNodeId, requestId);
@@ -257,7 +259,7 @@ function peerInboxPayloadHash(value) {
257
259
  return createHash("sha256").update(JSON.stringify(value)).digest("hex");
258
260
  }
259
261
  function claimPeerInboxRequest(args) {
260
- const inserted = db.run(`INSERT OR IGNORE INTO otium_peer_inbox_requests
262
+ const inserted = storageDatabase.run(`INSERT OR IGNORE INTO otium_peer_inbox_requests
261
263
  (from_cell_id, request_id, kind, topic_id, payload_hash, created_at)
262
264
  VALUES (?, ?, ?, ?, ?, ?)`, [
263
265
  args.fromCellId,
@@ -269,16 +271,16 @@ function claimPeerInboxRequest(args) {
269
271
  ]);
270
272
  if (inserted.changes === 1)
271
273
  return { outcome: "claimed" };
272
- const existing = db.query("SELECT payload_hash FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?").get(args.fromCellId, args.requestId, args.kind);
274
+ const existing = storageDatabase.query("SELECT payload_hash FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?").get(args.fromCellId, args.requestId, args.kind);
273
275
  if (!existing)
274
276
  return { outcome: "conflict" };
275
277
  return { outcome: existing.payload_hash === args.payloadHash ? "replay" : "conflict" };
276
278
  }
277
279
  function releasePeerInboxRequest(fromCellId, requestId, kind) {
278
- db.run("DELETE FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?", [fromCellId, requestId, kind]);
280
+ storageDatabase.run("DELETE FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?", [fromCellId, requestId, kind]);
279
281
  }
280
282
  function createRemoteAsk(args) {
281
- const result = db.run(`INSERT OR IGNORE INTO otium_remote_asks
283
+ const result = storageDatabase.run(`INSERT OR IGNORE INTO otium_remote_asks
282
284
  (request_id, expected_cell_id, user_id, caller_topic_id, from_key, to_key,
283
285
  source_query_id, created_at)
284
286
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
@@ -294,17 +296,17 @@ function createRemoteAsk(args) {
294
296
  return result.changes === 1;
295
297
  }
296
298
  function getRemoteAsk(requestId) {
297
- return db.query("SELECT * FROM otium_remote_asks WHERE request_id = ?").get(requestId) ?? null;
299
+ return storageDatabase.query("SELECT * FROM otium_remote_asks WHERE request_id = ?").get(requestId) ?? null;
298
300
  }
299
301
  function deleteRemoteAsk(requestId) {
300
- return db.run("DELETE FROM otium_remote_asks WHERE request_id = ?", [requestId]).changes === 1;
302
+ return storageDatabase.run("DELETE FROM otium_remote_asks WHERE request_id = ?", [requestId]).changes === 1;
301
303
  }
302
304
  function pruneRemoteAsks(olderThan) {
303
- return db.run("DELETE FROM otium_remote_asks WHERE created_at < ?", [olderThan]).changes;
305
+ return storageDatabase.run("DELETE FROM otium_remote_asks WHERE created_at < ?", [olderThan]).changes;
304
306
  }
305
307
  function upsertPeerReplyOutbox(args) {
306
308
  const now = Date.now();
307
- db.run(`INSERT INTO otium_peer_reply_outbox
309
+ storageDatabase.run(`INSERT INTO otium_peer_reply_outbox
308
310
  (node_cell_id, request_id, node_name, topic_id, user_id, source_title,
309
311
  reply_text, kind, created_at, updated_at)
310
312
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -329,10 +331,10 @@ function upsertPeerReplyOutbox(args) {
329
331
  ]);
330
332
  }
331
333
  function listPeerReplyOutbox(limit = 100) {
332
- return db.query("SELECT * FROM otium_peer_reply_outbox ORDER BY created_at LIMIT ?").all(limit);
334
+ return storageDatabase.query("SELECT * FROM otium_peer_reply_outbox ORDER BY created_at LIMIT ?").all(limit);
333
335
  }
334
336
  function deletePeerReplyOutbox(nodeCellId, requestId) {
335
- return db.run("DELETE FROM otium_peer_reply_outbox WHERE node_cell_id = ? AND request_id = ?", [
337
+ return storageDatabase.run("DELETE FROM otium_peer_reply_outbox WHERE node_cell_id = ? AND request_id = ?", [
336
338
  nodeCellId,
337
339
  requestId
338
340
  ]).changes === 1;
@@ -426,4 +428,4 @@ export {
426
428
 
427
429
  export { getPeerSession, createPeerSession, cleanupPeerStateForLocalTopic, failInterruptedPeerTurnRequestsOnStartup, claimPeerTurnRequest, getPeerTurnRequest, markPeerTurnRequestRunning, markPeerTurnRequestFailed, upsertPeerTerminalOutbox, listPeerTerminalOutbox, acknowledgePeerTerminal, peerInboxPayloadHash, claimPeerInboxRequest, releasePeerInboxRequest, createRemoteAsk, getRemoteAsk, deleteRemoteAsk, pruneRemoteAsks, upsertPeerReplyOutbox, listPeerReplyOutbox, deletePeerReplyOutbox, bindOtiumTopic, shareOtiumTopic, setOtiumTopicPrivate, unbindOtiumTopic, listOtiumTopicBindings };
428
430
 
429
- //# debugId=455249C7C78605CD64756E2164756E21
431
+ //# debugId=CB1D478090DA374A64756E2164756E21
@@ -5,7 +5,7 @@
5
5
  "/**\n * Adapter-owned durable peer state —\n * equivalents of otium's `peer_sessions`, `peer_turn_requests` and\n * `peer_inbox_requests` tables, kept in negotium's shared SQLite (one machine\n * = one runtime process = one WAL database). Table names are prefixed so the\n * adapter never collides with core schema.\n *\n * Invariant these tables carry: at-least-once inbound requests, exactly-once\n * execution. requestId claims must survive worker restarts; interrupted\n * claimed/running turns are failed wholesale on startup.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { db } from \"@negotium/core\";\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_sessions (\n host_node_id TEXT NOT NULL,\n host_topic_id TEXT NOT NULL,\n local_topic_id TEXT NOT NULL,\n binding_mode TEXT NOT NULL DEFAULT 'mirror',\n created_at TEXT NOT NULL,\n PRIMARY KEY (host_node_id, host_topic_id)\n )\n`);\n\nconst peerSessionColumns = new Set(\n db\n .query<{ name: string }, []>(\"PRAGMA table_info(otium_peer_sessions)\")\n .all()\n .map((row) => row.name),\n);\nif (!peerSessionColumns.has(\"binding_mode\")) {\n db.exec(\"ALTER TABLE otium_peer_sessions ADD COLUMN binding_mode TEXT NOT NULL DEFAULT 'mirror'\");\n}\n\n// Migrate mirrors created before core had an explicit visibility boundary.\n// `isSubagent` remains execution metadata; it is no longer used as a picker\n// hiding convention.\ndb.run(\n `UPDATE api_topics\n SET visibility = 'hidden', access_mode = 'shared'\n WHERE id IN (\n SELECT local_topic_id FROM otium_peer_sessions WHERE binding_mode = 'mirror'\n )`,\n);\ndb.run(\n `UPDATE api_topics\n SET access_mode = 'shared'\n WHERE id IN (SELECT local_topic_id FROM otium_peer_sessions)`,\n);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_turn_requests (\n host_node_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n host_topic_id TEXT NOT NULL,\n status TEXT NOT NULL CHECK (status IN\n ('claimed', 'running', 'finished', 'failed')),\n error TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (host_node_id, request_id)\n )\n`);\n\n// A terminal is not completion until the canonical hub acknowledges it. Keep\n// the exact envelope so a worker restart can replay it; the hub's event\n// journal makes that replay idempotent when the original ACK was lost.\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_terminal_outbox (\n host_node_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n event_json TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (host_node_id, request_id)\n )\n`);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_inbox_requests (\n from_cell_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n kind TEXT NOT NULL CHECK (kind IN ('tell', 'ask')),\n topic_id TEXT NOT NULL,\n payload_hash TEXT NOT NULL,\n created_at TEXT NOT NULL,\n PRIMARY KEY (from_cell_id, request_id, kind)\n )\n`);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_remote_asks (\n request_id TEXT PRIMARY KEY,\n expected_cell_id TEXT NOT NULL,\n user_id TEXT NOT NULL,\n caller_topic_id TEXT NOT NULL,\n from_key TEXT NOT NULL,\n to_key TEXT NOT NULL,\n source_query_id TEXT,\n created_at INTEGER NOT NULL\n )\n`);\ndb.exec(`\n CREATE INDEX IF NOT EXISTS idx_otium_remote_asks_created\n ON otium_remote_asks(created_at)\n`);\n\ndb.exec(`\n CREATE TABLE IF NOT EXISTS otium_peer_reply_outbox (\n node_cell_id TEXT NOT NULL,\n request_id TEXT NOT NULL,\n node_name TEXT NOT NULL,\n topic_id TEXT NOT NULL,\n user_id TEXT NOT NULL,\n source_title TEXT NOT NULL,\n reply_text TEXT NOT NULL,\n kind TEXT NOT NULL CHECK (kind IN ('reply', 'error')),\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (node_cell_id, request_id)\n )\n`);\n\n// ── peer sessions: Otium room → hidden mirror OR user-selected shared topic ──\n\nexport type PeerTopicBindingMode = \"mirror\" | \"shared\";\n\nexport interface PeerSessionRow {\n host_node_id: string;\n host_topic_id: string;\n local_topic_id: string;\n binding_mode: PeerTopicBindingMode;\n created_at: string;\n}\n\nexport function getPeerSession(hostNodeId: string, hostTopicId: string): PeerSessionRow | null {\n return (\n db\n .query<PeerSessionRow, [string, string]>(\n \"SELECT * FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?\",\n )\n .get(hostNodeId, hostTopicId) ?? null\n );\n}\n\nexport function createPeerSession(\n hostNodeId: string,\n hostTopicId: string,\n localTopicId: string,\n): PeerSessionRow {\n const row: PeerSessionRow = {\n host_node_id: hostNodeId,\n host_topic_id: hostTopicId,\n local_topic_id: localTopicId,\n binding_mode: \"mirror\",\n created_at: new Date().toISOString(),\n };\n db.run(\n \"INSERT INTO otium_peer_sessions (host_node_id, host_topic_id, local_topic_id, binding_mode, created_at) VALUES (?, ?, ?, ?, ?)\",\n [row.host_node_id, row.host_topic_id, row.local_topic_id, row.binding_mode, row.created_at],\n );\n return row;\n}\n\nexport function bindPeerSession(\n hostNodeId: string,\n hostTopicId: string,\n localTopicId: string,\n mode: PeerTopicBindingMode = \"shared\",\n): PeerSessionRow {\n const row: PeerSessionRow = {\n host_node_id: hostNodeId,\n host_topic_id: hostTopicId,\n local_topic_id: localTopicId,\n binding_mode: mode,\n created_at: new Date().toISOString(),\n };\n db.run(\n `INSERT INTO otium_peer_sessions\n (host_node_id, host_topic_id, local_topic_id, binding_mode, created_at)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(host_node_id, host_topic_id) DO UPDATE SET\n local_topic_id = excluded.local_topic_id,\n binding_mode = excluded.binding_mode,\n created_at = excluded.created_at`,\n [hostNodeId, hostTopicId, localTopicId, mode, row.created_at],\n );\n return row;\n}\n\nexport function unbindPeerSession(hostNodeId: string, hostTopicId: string): boolean {\n return (\n db.run(\"DELETE FROM otium_peer_sessions WHERE host_node_id = ? AND host_topic_id = ?\", [\n hostNodeId,\n hostTopicId,\n ]).changes === 1\n );\n}\n\n/** Remove every Otium room binding for a topic being made private. */\nexport function unbindSharedPeerSessionsForLocalTopic(localTopicId: string): number {\n return db.run(\n \"DELETE FROM otium_peer_sessions WHERE local_topic_id = ? AND binding_mode = 'shared'\",\n [localTopicId],\n ).changes;\n}\n\nexport function listPeerSessions(): PeerSessionRow[] {\n return db.query<PeerSessionRow, []>(\"SELECT * FROM otium_peer_sessions\").all();\n}\n\nexport interface PeerTopicCleanupResult {\n sessions: number;\n turns: number;\n terminalOutbox: number;\n inboxRequests: number;\n remoteAsks: number;\n}\n\n/**\n * Remove adapter-owned state whose local execution topic was hard-deleted.\n * Turn rows are linked indirectly through the host room binding, so they must\n * be removed before the session rows that provide that relationship.\n */\nexport function cleanupPeerStateForLocalTopic(localTopicId: string): PeerTopicCleanupResult {\n return db.transaction(() => {\n const terminalOutbox = db.run(\n `DELETE FROM otium_peer_terminal_outbox\n WHERE EXISTS (\n SELECT 1 FROM otium_peer_turn_requests turn_request\n JOIN otium_peer_sessions session\n ON session.host_node_id = turn_request.host_node_id\n AND session.host_topic_id = turn_request.host_topic_id\n WHERE session.local_topic_id = ?\n AND turn_request.host_node_id = otium_peer_terminal_outbox.host_node_id\n AND turn_request.request_id = otium_peer_terminal_outbox.request_id\n )`,\n [localTopicId],\n ).changes;\n const turns = db.run(\n `DELETE FROM otium_peer_turn_requests\n WHERE EXISTS (\n SELECT 1 FROM otium_peer_sessions session\n WHERE session.local_topic_id = ?\n AND session.host_node_id = otium_peer_turn_requests.host_node_id\n AND session.host_topic_id = otium_peer_turn_requests.host_topic_id\n )`,\n [localTopicId],\n ).changes;\n const inboxRequests = db.run(\"DELETE FROM otium_peer_inbox_requests WHERE topic_id = ?\", [\n localTopicId,\n ]).changes;\n const remoteAsks = db.run(\"DELETE FROM otium_remote_asks WHERE caller_topic_id = ?\", [\n localTopicId,\n ]).changes;\n const sessions = db.run(\"DELETE FROM otium_peer_sessions WHERE local_topic_id = ?\", [\n localTopicId,\n ]).changes;\n return { sessions, turns, terminalOutbox, inboxRequests, remoteAsks };\n })();\n}\n\n// ── peer turn requests: durable exactly-once claim per (hostCellId, requestId) ──\n\ntype PeerTurnRequestStatus = \"claimed\" | \"running\" | \"finished\" | \"failed\";\n\nexport interface PeerTurnRequestRow {\n host_node_id: string;\n request_id: string;\n host_topic_id: string;\n status: PeerTurnRequestStatus;\n error: string | null;\n created_at: string;\n updated_at: string;\n}\n\n/** Recover requests whose in-memory forwarder disappeared with the process. */\nexport function failInterruptedPeerTurnRequestsOnStartup(): number {\n return db.run(\n `UPDATE otium_peer_turn_requests\n SET status = 'failed', error = 'worker restarted during turn', updated_at = ?\n WHERE status IN ('claimed', 'running')\n AND NOT EXISTS (\n SELECT 1 FROM otium_peer_terminal_outbox terminal\n WHERE terminal.host_node_id = otium_peer_turn_requests.host_node_id\n AND terminal.request_id = otium_peer_turn_requests.request_id\n )`,\n [new Date().toISOString()],\n ).changes;\n}\n\nexport type ClaimPeerTurnRequestResult =\n | { claimed: true; row: PeerTurnRequestRow }\n | { claimed: false; row: PeerTurnRequestRow };\n\nexport function claimPeerTurnRequest(\n hostNodeId: string,\n requestId: string,\n hostTopicId: string,\n): ClaimPeerTurnRequestResult {\n const now = new Date().toISOString();\n const inserted = db.run(\n `INSERT OR IGNORE INTO otium_peer_turn_requests\n (host_node_id, request_id, host_topic_id, status, created_at, updated_at)\n VALUES (?, ?, ?, 'claimed', ?, ?)`,\n [hostNodeId, requestId, hostTopicId, now, now],\n );\n const row = getPeerTurnRequest(hostNodeId, requestId);\n if (!row) throw new Error(\"otium peer turn request claim disappeared\");\n return { claimed: inserted.changes === 1, row };\n}\n\nexport function getPeerTurnRequest(\n hostNodeId: string,\n requestId: string,\n): PeerTurnRequestRow | null {\n return (\n db\n .query<PeerTurnRequestRow, [string, string]>(\n \"SELECT * FROM otium_peer_turn_requests WHERE host_node_id = ? AND request_id = ?\",\n )\n .get(hostNodeId, requestId) ?? null\n );\n}\n\nfunction setPeerTurnRequestStatus(\n hostNodeId: string,\n requestId: string,\n status: PeerTurnRequestStatus,\n error: string | null = null,\n): void {\n db.run(\n `UPDATE otium_peer_turn_requests\n SET status = ?, error = ?, updated_at = ?\n WHERE host_node_id = ? AND request_id = ?`,\n [status, error, new Date().toISOString(), hostNodeId, requestId],\n );\n}\n\nexport function markPeerTurnRequestRunning(hostNodeId: string, requestId: string): void {\n setPeerTurnRequestStatus(hostNodeId, requestId, \"running\");\n}\n\nexport function markPeerTurnRequestFinished(hostNodeId: string, requestId: string): void {\n setPeerTurnRequestStatus(hostNodeId, requestId, \"finished\");\n}\n\nexport function markPeerTurnRequestFailed(\n hostNodeId: string,\n requestId: string,\n error: string,\n): void {\n setPeerTurnRequestStatus(hostNodeId, requestId, \"failed\", error);\n}\n\nexport interface PeerTerminalOutboxRow {\n host_node_id: string;\n request_id: string;\n seq: number;\n event_json: string;\n created_at: number;\n updated_at: number;\n}\n\nexport function upsertPeerTerminalOutbox(args: {\n hostNodeId: string;\n requestId: string;\n seq: number;\n event: Record<string, unknown>;\n}): void {\n const now = Date.now();\n db.run(\n `INSERT INTO otium_peer_terminal_outbox\n (host_node_id, request_id, seq, event_json, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(host_node_id, request_id) DO UPDATE SET\n seq = excluded.seq, event_json = excluded.event_json, updated_at = excluded.updated_at`,\n [args.hostNodeId, args.requestId, args.seq, JSON.stringify(args.event), now, now],\n );\n}\n\nexport function listPeerTerminalOutbox(limit = 100): PeerTerminalOutboxRow[] {\n return db\n .query<PeerTerminalOutboxRow, [number]>(\n \"SELECT * FROM otium_peer_terminal_outbox ORDER BY created_at LIMIT ?\",\n )\n .all(limit);\n}\n\n/** Atomically acknowledge the terminal locally only after the hub ACK. */\nexport function acknowledgePeerTerminal(hostNodeId: string, requestId: string): boolean {\n return db.transaction(() => {\n const removed = db.run(\n \"DELETE FROM otium_peer_terminal_outbox WHERE host_node_id = ? AND request_id = ?\",\n [hostNodeId, requestId],\n ).changes;\n if (removed !== 1) return false;\n markPeerTurnRequestFinished(hostNodeId, requestId);\n return true;\n })();\n}\n\n// ── peer inbox requests: durable idempotent claim for inbound tell/ask ──\n\nexport type PeerInboxKind = \"tell\" | \"ask\";\n\nexport type PeerInboxClaimOutcome = \"claimed\" | \"replay\" | \"conflict\";\n\nexport function peerInboxPayloadHash(value: unknown): string {\n return createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\");\n}\n\n/**\n * Claim an inbound tell/ask by (fromCellId, requestId, kind). Replays of the\n * exact payload ack idempotently; the same requestId with a different payload\n * is a conflict (409 upstream).\n */\nexport function claimPeerInboxRequest(args: {\n fromCellId: string;\n requestId: string;\n kind: PeerInboxKind;\n topicId: string;\n payloadHash: string;\n}): { outcome: PeerInboxClaimOutcome } {\n const inserted = db.run(\n `INSERT OR IGNORE INTO otium_peer_inbox_requests\n (from_cell_id, request_id, kind, topic_id, payload_hash, created_at)\n VALUES (?, ?, ?, ?, ?, ?)`,\n [\n args.fromCellId,\n args.requestId,\n args.kind,\n args.topicId,\n args.payloadHash,\n new Date().toISOString(),\n ],\n );\n if (inserted.changes === 1) return { outcome: \"claimed\" };\n const existing = db\n .query<{ payload_hash: string }, [string, string, string]>(\n \"SELECT payload_hash FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?\",\n )\n .get(args.fromCellId, args.requestId, args.kind);\n if (!existing) return { outcome: \"conflict\" };\n return { outcome: existing.payload_hash === args.payloadHash ? \"replay\" : \"conflict\" };\n}\n\n/** Undo a claim whose side effect (inbox append) failed, so the sender's\n * retry can re-claim instead of being swallowed as a replay. */\nexport function releasePeerInboxRequest(\n fromCellId: string,\n requestId: string,\n kind: PeerInboxKind,\n): void {\n db.run(\n \"DELETE FROM otium_peer_inbox_requests WHERE from_cell_id = ? AND request_id = ? AND kind = ?\",\n [fromCellId, requestId, kind],\n );\n}\n\n// ── outbound remote asks: durable reply routing across worker restarts ──\n\nexport interface RemoteAskRow {\n request_id: string;\n expected_cell_id: string;\n user_id: string;\n caller_topic_id: string;\n from_key: string;\n to_key: string;\n source_query_id: string | null;\n created_at: number;\n}\n\nexport function createRemoteAsk(args: {\n requestId: string;\n expectedCellId: string;\n userId: string;\n callerTopicId: string;\n from: string;\n to: string;\n sourceQueryId?: string;\n createdAt?: number;\n}): boolean {\n const result = db.run(\n `INSERT OR IGNORE INTO otium_remote_asks\n (request_id, expected_cell_id, user_id, caller_topic_id, from_key, to_key,\n source_query_id, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n args.requestId,\n args.expectedCellId,\n args.userId,\n args.callerTopicId,\n args.from,\n args.to,\n args.sourceQueryId ?? null,\n args.createdAt ?? Date.now(),\n ],\n );\n return result.changes === 1;\n}\n\nexport function getRemoteAsk(requestId: string): RemoteAskRow | null {\n return (\n db\n .query<RemoteAskRow, [string]>(\"SELECT * FROM otium_remote_asks WHERE request_id = ?\")\n .get(requestId) ?? null\n );\n}\n\nexport function deleteRemoteAsk(requestId: string): boolean {\n return db.run(\"DELETE FROM otium_remote_asks WHERE request_id = ?\", [requestId]).changes === 1;\n}\n\nexport function pruneRemoteAsks(olderThan: number): number {\n return db.run(\"DELETE FROM otium_remote_asks WHERE created_at < ?\", [olderThan]).changes;\n}\n\n// ── outbound peer replies: durable until the source node acknowledges ──\n\nexport interface PeerReplyOutboxRow {\n node_cell_id: string;\n request_id: string;\n node_name: string;\n topic_id: string;\n user_id: string;\n source_title: string;\n reply_text: string;\n kind: \"reply\" | \"error\";\n created_at: number;\n updated_at: number;\n}\n\nexport function upsertPeerReplyOutbox(args: {\n nodeCellId: string;\n requestId: string;\n nodeName: string;\n topicId: string;\n userId: string;\n sourceTitle: string;\n replyText: string;\n kind: \"reply\" | \"error\";\n}): void {\n const now = Date.now();\n db.run(\n `INSERT INTO otium_peer_reply_outbox\n (node_cell_id, request_id, node_name, topic_id, user_id, source_title,\n reply_text, kind, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(node_cell_id, request_id) DO UPDATE SET\n node_name = excluded.node_name,\n topic_id = excluded.topic_id,\n user_id = excluded.user_id,\n source_title = excluded.source_title,\n reply_text = excluded.reply_text,\n kind = excluded.kind,\n updated_at = excluded.updated_at`,\n [\n args.nodeCellId,\n args.requestId,\n args.nodeName,\n args.topicId,\n args.userId,\n args.sourceTitle,\n args.replyText,\n args.kind,\n now,\n now,\n ],\n );\n}\n\nexport function listPeerReplyOutbox(limit = 100): PeerReplyOutboxRow[] {\n return db\n .query<PeerReplyOutboxRow, [number]>(\n \"SELECT * FROM otium_peer_reply_outbox ORDER BY created_at LIMIT ?\",\n )\n .all(limit);\n}\n\nexport function deletePeerReplyOutbox(nodeCellId: string, requestId: string): boolean {\n return (\n db.run(\"DELETE FROM otium_peer_reply_outbox WHERE node_cell_id = ? AND request_id = ?\", [\n nodeCellId,\n requestId,\n ]).changes === 1\n );\n}\n",
6
6
  "import { getTopic, isTopicShared, isTopicVisible, upsertTopic } from \"@negotium/core\";\nimport {\n bindPeerSession,\n getPeerSession,\n listPeerSessions,\n unbindPeerSession,\n unbindSharedPeerSessionsForLocalTopic,\n} from \"@/store\";\n\nexport type OtiumTopicBindingResult =\n | { ok: true; localTopicId: string; replaced: boolean }\n | { ok: false; error: string; status: number };\n\nexport interface OtiumTopicBinding {\n hostNodeId: string;\n hostTopicId: string;\n localTopicId: string;\n /** Internal Otium transport; this is deliberately not a topic access mode. */\n transport: \"internal-mirror\" | \"shared-binding\";\n topicAccessMode?: \"private\" | \"shared\";\n localTopicTitle?: string;\n localTopicExists: boolean;\n createdAt: string;\n}\n\nexport type OtiumTopicPrivateResult =\n | { ok: true; localTopicId: string; removedBindings: number }\n | { ok: false; error: string; status: number };\n\nfunction ownsTopic(localTopicId: string, userId: string) {\n const topic = getTopic(localTopicId);\n if (!topic) return { ok: false as const, error: \"local topic not found\", status: 404 };\n if (!isTopicVisible(topic)) {\n return { ok: false as const, error: \"internal topics have no user access mode\", status: 409 };\n }\n if (!topic.participants.some((participant) => participant.userId === userId)) {\n return { ok: false as const, error: \"local topic is not visible to this user\", status: 403 };\n }\n if (\n !topic.participants.some(\n (participant) => participant.userId === userId && participant.role === \"owner\",\n )\n ) {\n return {\n ok: false as const,\n error: \"only a topic owner can change its access mode\",\n status: 403,\n };\n }\n return { ok: true as const, topic };\n}\n\n/** Bind an Otium room to an existing visible Negotium topic without cloning it. */\nexport function bindOtiumTopic(options: {\n hostNodeId: string;\n hostTopicId: string;\n localTopicId: string;\n userId: string;\n}): OtiumTopicBindingResult {\n const topic = getTopic(options.localTopicId);\n if (!topic) return { ok: false, error: \"local topic not found\", status: 404 };\n if (!isTopicVisible(topic)) {\n return { ok: false, error: \"hidden local topics cannot be shared\", status: 409 };\n }\n if (!topic.participants.some((participant) => participant.userId === options.userId)) {\n return { ok: false, error: \"local topic is not visible to this user\", status: 403 };\n }\n if (!isTopicShared(topic)) {\n return { ok: false, error: \"private topics must be shared explicitly first\", status: 409 };\n }\n const previous = getPeerSession(options.hostNodeId, options.hostTopicId);\n bindPeerSession(options.hostNodeId, options.hostTopicId, options.localTopicId, \"shared\");\n return {\n ok: true,\n localTopicId: options.localTopicId,\n replaced: Boolean(previous && previous.local_topic_id !== options.localTopicId),\n };\n}\n\n/** Explicitly publish a private local topic and bind one Otium room to it. */\nexport function shareOtiumTopic(options: {\n hostNodeId: string;\n hostTopicId: string;\n localTopicId: string;\n userId: string;\n}): OtiumTopicBindingResult {\n const owned = ownsTopic(options.localTopicId, options.userId);\n if (!owned.ok) return owned;\n if (!isTopicShared(owned.topic)) {\n upsertTopic({ ...owned.topic, accessMode: \"shared\" });\n }\n return bindOtiumTopic(options);\n}\n\n/** Make a user topic local-only and remove all of its Otium room bindings. */\nexport function setOtiumTopicPrivate(options: {\n localTopicId: string;\n userId: string;\n}): OtiumTopicPrivateResult {\n const owned = ownsTopic(options.localTopicId, options.userId);\n if (!owned.ok) return owned;\n const removedBindings = unbindSharedPeerSessionsForLocalTopic(options.localTopicId);\n if (isTopicShared(owned.topic)) {\n upsertTopic({ ...owned.topic, accessMode: \"private\" });\n }\n return { ok: true, localTopicId: options.localTopicId, removedBindings };\n}\n\n/** Remove only the Otium binding. The local Negotium topic is never deleted. */\nexport function unbindOtiumTopic(hostNodeId: string, hostTopicId: string): boolean {\n return unbindPeerSession(hostNodeId, hostTopicId);\n}\n\n/** Inspect internal execution mirrors and user-topic shared bindings. */\nexport function listOtiumTopicBindings(): OtiumTopicBinding[] {\n return listPeerSessions().map((row) => {\n const topic = getTopic(row.local_topic_id);\n return {\n hostNodeId: row.host_node_id,\n hostTopicId: row.host_topic_id,\n localTopicId: row.local_topic_id,\n transport: row.binding_mode === \"shared\" ? \"shared-binding\" : \"internal-mirror\",\n ...(topic ? { topicAccessMode: topic.accessMode ?? \"private\" } : {}),\n ...(topic ? { localTopicTitle: topic.title } : {}),\n localTopicExists: Boolean(topic),\n createdAt: row.created_at,\n };\n });\n}\n"
7
7
  ],
8
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA;AAGA,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CASP;AAED,IAAM,qBAAqB,IAAI,IAC7B,GACG,MAA4B,wCAAwC,EACpE,IAAI,EACJ,IAAI,CAAC,QAAQ,IAAI,IAAI,CAC1B;AACA,KAAK,mBAAmB,IAAI,cAAc,GAAG;AAAA,EAC3C,GAAG,KAAK,wFAAwF;AAClG;AAKA,GAAG,IACD;AAAA;AAAA;AAAA;AAAA,KAKF;AACA,GAAG,IACD;AAAA;AAAA,gEAGF;AAEA,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAYP;AAKD,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAUP;AAED,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAUP;AAED,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAWP;AACD,GAAG,KAAK;AAAA;AAAA;AAAA,CAGP;AAED,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAcP;AAcM,SAAS,cAAc,CAAC,YAAoB,aAA4C;AAAA,EAC7F,OACE,GACG,MACC,gFACF,EACC,IAAI,YAAY,WAAW,KAAK;AAAA;AAIhC,SAAS,iBAAiB,CAC/B,YACA,aACA,cACgB;AAAA,EAChB,MAAM,MAAsB;AAAA,IAC1B,cAAc;AAAA,IACd,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,EACrC;AAAA,EACA,GAAG,IACD,kIACA,CAAC,IAAI,cAAc,IAAI,eAAe,IAAI,gBAAgB,IAAI,cAAc,IAAI,UAAU,CAC5F;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,eAAe,CAC7B,YACA,aACA,cACA,OAA6B,UACb;AAAA,EAChB,MAAM,MAAsB;AAAA,IAC1B,cAAc;AAAA,IACd,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,EACrC;AAAA,EACA,GAAG,IACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAOA,CAAC,YAAY,aAAa,cAAc,MAAM,IAAI,UAAU,CAC9D;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,iBAAiB,CAAC,YAAoB,aAA8B;AAAA,EAClF,OACE,GAAG,IAAI,gFAAgF;AAAA,IACrF;AAAA,IACA;AAAA,EACF,CAAC,EAAE,YAAY;AAAA;AAKZ,SAAS,qCAAqC,CAAC,cAA8B;AAAA,EAClF,OAAO,GAAG,IACR,wFACA,CAAC,YAAY,CACf,EAAE;AAAA;AAGG,SAAS,gBAAgB,GAAqB;AAAA,EACnD,OAAO,GAAG,MAA0B,mCAAmC,EAAE,IAAI;AAAA;AAgBxE,SAAS,6BAA6B,CAAC,cAA8C;AAAA,EAC1F,OAAO,GAAG,YAAY,MAAM;AAAA,IAC1B,MAAM,iBAAiB,GAAG,IACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUA,CAAC,YAAY,CACf,EAAE;AAAA,IACF,MAAM,QAAQ,GAAG,IACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOA,CAAC,YAAY,CACf,EAAE;AAAA,IACF,MAAM,gBAAgB,GAAG,IAAI,4DAA4D;AAAA,MACvF;AAAA,IACF,CAAC,EAAE;AAAA,IACH,MAAM,aAAa,GAAG,IAAI,2DAA2D;AAAA,MACnF;AAAA,IACF,CAAC,EAAE;AAAA,IACH,MAAM,WAAW,GAAG,IAAI,4DAA4D;AAAA,MAClF;AAAA,IACF,CAAC,EAAE;AAAA,IACH,OAAO,EAAE,UAAU,OAAO,gBAAgB,eAAe,WAAW;AAAA,GACrE,EAAE;AAAA;AAkBE,SAAS,wCAAwC,GAAW;AAAA,EACjE,OAAO,GAAG,IACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAQA,CAAC,IAAI,KAAK,EAAE,YAAY,CAAC,CAC3B,EAAE;AAAA;AAOG,SAAS,oBAAoB,CAClC,YACA,WACA,aAC4B;AAAA,EAC5B,MAAM,MAAM,IAAI,KAAK,EAAE,YAAY;AAAA,EACnC,MAAM,WAAW,GAAG,IAClB;AAAA;AAAA,yCAGA,CAAC,YAAY,WAAW,aAAa,KAAK,GAAG,CAC/C;AAAA,EACA,MAAM,MAAM,mBAAmB,YAAY,SAAS;AAAA,EACpD,KAAK;AAAA,IAAK,MAAM,IAAI,MAAM,2CAA2C;AAAA,EACrE,OAAO,EAAE,SAAS,SAAS,YAAY,GAAG,IAAI;AAAA;AAGzC,SAAS,kBAAkB,CAChC,YACA,WAC2B;AAAA,EAC3B,OACE,GACG,MACC,kFACF,EACC,IAAI,YAAY,SAAS,KAAK;AAAA;AAIrC,SAAS,wBAAwB,CAC/B,YACA,WACA,QACA,QAAuB,MACjB;AAAA,EACN,GAAG,IACD;AAAA;AAAA,iDAGA,CAAC,QAAQ,OAAO,IAAI,KAAK,EAAE,YAAY,GAAG,YAAY,SAAS,CACjE;AAAA;AAGK,SAAS,0BAA0B,CAAC,YAAoB,WAAyB;AAAA,EACtF,yBAAyB,YAAY,WAAW,SAAS;AAAA;AAGpD,SAAS,2BAA2B,CAAC,YAAoB,WAAyB;AAAA,EACvF,yBAAyB,YAAY,WAAW,UAAU;AAAA;AAGrD,SAAS,yBAAyB,CACvC,YACA,WACA,OACM;AAAA,EACN,yBAAyB,YAAY,WAAW,UAAU,KAAK;AAAA;AAY1D,SAAS,wBAAwB,CAAC,MAKhC;AAAA,EACP,MAAM,MAAM,KAAK,IAAI;AAAA,EACrB,GAAG,IACD;AAAA;AAAA;AAAA;AAAA,gGAKA,CAAC,KAAK,YAAY,KAAK,WAAW,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,CAClF;AAAA;AAGK,SAAS,sBAAsB,CAAC,QAAQ,KAA8B;AAAA,EAC3E,OAAO,GACJ,MACC,sEACF,EACC,IAAI,KAAK;AAAA;AAIP,SAAS,uBAAuB,CAAC,YAAoB,WAA4B;AAAA,EACtF,OAAO,GAAG,YAAY,MAAM;AAAA,IAC1B,MAAM,UAAU,GAAG,IACjB,oFACA,CAAC,YAAY,SAAS,CACxB,EAAE;AAAA,IACF,IAAI,YAAY;AAAA,MAAG,OAAO;AAAA,IAC1B,4BAA4B,YAAY,SAAS;AAAA,IACjD,OAAO;AAAA,GACR,EAAE;AAAA;AASE,SAAS,oBAAoB,CAAC,OAAwB;AAAA,EAC3D,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC,EAAE,OAAO,KAAK;AAAA;AAQjE,SAAS,qBAAqB,CAAC,MAMC;AAAA,EACrC,MAAM,WAAW,GAAG,IAClB;AAAA;AAAA,iCAGA;AAAA,IACE,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI,KAAK,EAAE,YAAY;AAAA,EACzB,CACF;AAAA,EACA,IAAI,SAAS,YAAY;AAAA,IAAG,OAAO,EAAE,SAAS,UAAU;AAAA,EACxD,MAAM,WAAW,GACd,MACC,2GACF,EACC,IAAI,KAAK,YAAY,KAAK,WAAW,KAAK,IAAI;AAAA,EACjD,KAAK;AAAA,IAAU,OAAO,EAAE,SAAS,WAAW;AAAA,EAC5C,OAAO,EAAE,SAAS,SAAS,iBAAiB,KAAK,cAAc,WAAW,WAAW;AAAA;AAKhF,SAAS,uBAAuB,CACrC,YACA,WACA,MACM;AAAA,EACN,GAAG,IACD,gGACA,CAAC,YAAY,WAAW,IAAI,CAC9B;AAAA;AAgBK,SAAS,eAAe,CAAC,MASpB;AAAA,EACV,MAAM,SAAS,GAAG,IAChB;AAAA;AAAA;AAAA,uCAIA;AAAA,IACE,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,iBAAiB;AAAA,IACtB,KAAK,aAAa,KAAK,IAAI;AAAA,EAC7B,CACF;AAAA,EACA,OAAO,OAAO,YAAY;AAAA;AAGrB,SAAS,YAAY,CAAC,WAAwC;AAAA,EACnE,OACE,GACG,MAA8B,sDAAsD,EACpF,IAAI,SAAS,KAAK;AAAA;AAIlB,SAAS,eAAe,CAAC,WAA4B;AAAA,EAC1D,OAAO,GAAG,IAAI,sDAAsD,CAAC,SAAS,CAAC,EAAE,YAAY;AAAA;AAGxF,SAAS,eAAe,CAAC,WAA2B;AAAA,EACzD,OAAO,GAAG,IAAI,sDAAsD,CAAC,SAAS,CAAC,EAAE;AAAA;AAkB5E,SAAS,qBAAqB,CAAC,MAS7B;AAAA,EACP,MAAM,MAAM,KAAK,IAAI;AAAA,EACrB,GAAG,IACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAYA;AAAA,IACE,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,EACF,CACF;AAAA;AAGK,SAAS,mBAAmB,CAAC,QAAQ,KAA2B;AAAA,EACrE,OAAO,GACJ,MACC,mEACF,EACC,IAAI,KAAK;AAAA;AAGP,SAAS,qBAAqB,CAAC,YAAoB,WAA4B;AAAA,EACpF,OACE,GAAG,IAAI,iFAAiF;AAAA,IACtF;AAAA,IACA;AAAA,EACF,CAAC,EAAE,YAAY;AAAA;;;AC/iBnB,SAAS,SAAS,CAAC,cAAsB,QAAgB;AAAA,EACvD,MAAM,QAAQ,SAAS,YAAY;AAAA,EACnC,KAAK;AAAA,IAAO,OAAO,EAAE,IAAI,OAAgB,OAAO,yBAAyB,QAAQ,IAAI;AAAA,EACrF,KAAK,eAAe,KAAK,GAAG;AAAA,IAC1B,OAAO,EAAE,IAAI,OAAgB,OAAO,4CAA4C,QAAQ,IAAI;AAAA,EAC9F;AAAA,EACA,KAAK,MAAM,aAAa,KAAK,CAAC,gBAAgB,YAAY,WAAW,MAAM,GAAG;AAAA,IAC5E,OAAO,EAAE,IAAI,OAAgB,OAAO,2CAA2C,QAAQ,IAAI;AAAA,EAC7F;AAAA,EACA,KACG,MAAM,aAAa,KAClB,CAAC,gBAAgB,YAAY,WAAW,UAAU,YAAY,SAAS,OACzE,GACA;AAAA,IACA,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,OAAO,EAAE,IAAI,MAAe,MAAM;AAAA;AAI7B,SAAS,cAAc,CAAC,SAKH;AAAA,EAC1B,MAAM,QAAQ,SAAS,QAAQ,YAAY;AAAA,EAC3C,KAAK;AAAA,IAAO,OAAO,EAAE,IAAI,OAAO,OAAO,yBAAyB,QAAQ,IAAI;AAAA,EAC5E,KAAK,eAAe,KAAK,GAAG;AAAA,IAC1B,OAAO,EAAE,IAAI,OAAO,OAAO,wCAAwC,QAAQ,IAAI;AAAA,EACjF;AAAA,EACA,KAAK,MAAM,aAAa,KAAK,CAAC,gBAAgB,YAAY,WAAW,QAAQ,MAAM,GAAG;AAAA,IACpF,OAAO,EAAE,IAAI,OAAO,OAAO,2CAA2C,QAAQ,IAAI;AAAA,EACpF;AAAA,EACA,KAAK,cAAc,KAAK,GAAG;AAAA,IACzB,OAAO,EAAE,IAAI,OAAO,OAAO,kDAAkD,QAAQ,IAAI;AAAA,EAC3F;AAAA,EACA,MAAM,WAAW,eAAe,QAAQ,YAAY,QAAQ,WAAW;AAAA,EACvE,gBAAgB,QAAQ,YAAY,QAAQ,aAAa,QAAQ,cAAc,QAAQ;AAAA,EACvF,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,cAAc,QAAQ;AAAA,IACtB,UAAU,QAAQ,YAAY,SAAS,mBAAmB,QAAQ,YAAY;AAAA,EAChF;AAAA;AAIK,SAAS,eAAe,CAAC,SAKJ;AAAA,EAC1B,MAAM,QAAQ,UAAU,QAAQ,cAAc,QAAQ,MAAM;AAAA,EAC5D,KAAK,MAAM;AAAA,IAAI,OAAO;AAAA,EACtB,KAAK,cAAc,MAAM,KAAK,GAAG;AAAA,IAC/B,YAAY,KAAK,MAAM,OAAO,YAAY,SAAS,CAAC;AAAA,EACtD;AAAA,EACA,OAAO,eAAe,OAAO;AAAA;AAIxB,SAAS,oBAAoB,CAAC,SAGT;AAAA,EAC1B,MAAM,QAAQ,UAAU,QAAQ,cAAc,QAAQ,MAAM;AAAA,EAC5D,KAAK,MAAM;AAAA,IAAI,OAAO;AAAA,EACtB,MAAM,kBAAkB,sCAAsC,QAAQ,YAAY;AAAA,EAClF,IAAI,cAAc,MAAM,KAAK,GAAG;AAAA,IAC9B,YAAY,KAAK,MAAM,OAAO,YAAY,UAAU,CAAC;AAAA,EACvD;AAAA,EACA,OAAO,EAAE,IAAI,MAAM,cAAc,QAAQ,cAAc,gBAAgB;AAAA;AAIlE,SAAS,gBAAgB,CAAC,YAAoB,aAA8B;AAAA,EACjF,OAAO,kBAAkB,YAAY,WAAW;AAAA;AAI3C,SAAS,sBAAsB,GAAwB;AAAA,EAC5D,OAAO,iBAAiB,EAAE,IAAI,CAAC,QAAQ;AAAA,IACrC,MAAM,QAAQ,SAAS,IAAI,cAAc;AAAA,IACzC,OAAO;AAAA,MACL,YAAY,IAAI;AAAA,MAChB,aAAa,IAAI;AAAA,MACjB,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI,iBAAiB,WAAW,mBAAmB;AAAA,SAC1D,QAAQ,EAAE,iBAAiB,MAAM,cAAc,UAAU,IAAI,CAAC;AAAA,SAC9D,QAAQ,EAAE,iBAAiB,MAAM,MAAM,IAAI,CAAC;AAAA,MAChD,kBAAkB,QAAQ,KAAK;AAAA,MAC/B,WAAW,IAAI;AAAA,IACjB;AAAA,GACD;AAAA;",
9
- "debugId": "455249C7C78605CD64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "CB1D478090DA374A64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -5,39 +5,41 @@ import {
5
5
  isEnrollmentPending,
6
6
  parseEnrollmentInvite,
7
7
  previewEnrollment
8
- } from "./chunk-fvc7ncxd.js";
8
+ } from "./chunk-8f20fk4n.js";
9
9
  import {
10
10
  configureOtiumCentral,
11
11
  selfPeerNode
12
- } from "./chunk-e9b2xpff.js";
12
+ } from "./chunk-01xcc856.js";
13
13
  import {
14
14
  parseInviteCode,
15
15
  saveJoin
16
- } from "./chunk-eexqsee7.js";
17
- import"./chunk-sn51wnf1.js";
18
- import"./chunk-x1arr7ze.js";
19
- import"./chunk-g7pvfj5e.js";
20
- import"./chunk-z2xy5n2q.js";
21
- import"./chunk-sgsz2fpq.js";
16
+ } from "./chunk-4q966ttx.js";
17
+ import"./chunk-93krf6ng.js";
18
+ import"./chunk-fswhzdf5.js";
19
+ import"./chunk-cxa7yghg.js";
20
+ import"./chunk-59d0shyj.js";
21
+ import"./chunk-rbvctv1n.js";
22
22
  import"./chunk-1k7t7bnx.js";
23
- import"./chunk-nmv41qx9.js";
24
- import"./chunk-h8vmb9gf.js";
25
- import"./chunk-6hknphtc.js";
26
- import"./chunk-kbm35t7w.js";
27
- import"./chunk-f97qybwk.js";
28
- import"./chunk-hgw7n8cm.js";
29
- import"./chunk-nqdp52aj.js";
30
- import"./chunk-mhty3nna.js";
31
- import"./chunk-vp2db42d.js";
32
- import"./chunk-hsq7j9jk.js";
33
- import"./chunk-n0kk5xbq.js";
34
- import"./chunk-2dgkah1z.js";
35
- import"./chunk-pkdmypdd.js";
23
+ import"./chunk-g144wdrs.js";
24
+ import"./chunk-91ckrvk8.js";
25
+ import"./chunk-66y0hr8c.js";
26
+ import"./chunk-h9vbhhgr.js";
27
+ import"./chunk-f361dwba.js";
28
+ import"./chunk-8cahx7xc.js";
29
+ import"./chunk-6d4fmea5.js";
30
+ import"./chunk-61px0717.js";
31
+ import"./chunk-tsstrcfc.js";
32
+ import"./chunk-6ah5farg.js";
33
+ import"./chunk-41ygvg5k.js";
34
+ import"./chunk-m9e3tbr8.js";
35
+ import"./chunk-mh5mexsf.js";
36
+ import"./chunk-qwy57177.js";
36
37
  import"./chunk-j0kjscb7.js";
37
- import"./chunk-efyxk97v.js";
38
- import"./chunk-1msje2zf.js";
38
+ import"./chunk-h980hb2n.js";
39
+ import"./chunk-ffefbd3r.js";
40
+ import"./chunk-pg1azh6n.js";
41
+ import"./chunk-1a6kv9vt.js";
39
42
  import"./chunk-f5xgprg1.js";
40
- import"./chunk-k9z47mab.js";
41
43
  import {
42
44
  __require,
43
45
  __toESM
@@ -136,4 +138,4 @@ export {
136
138
  joinCommand
137
139
  };
138
140
 
139
- //# debugId=E93FFD7D2301057764756E2164756E21
141
+ //# debugId=2889F5B123EC294564756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * `negotium-otium join <code>` — attach this node to an otium workspace as a\n * worker. Production codes carry only `{v:2, central, token}`; the node\n * previews the workspace, creates an X25519 enrollment key, atomically claims\n * the invite, and decrypts the returned credential envelope. Credentials persist under\n * `${DATA_DIR}/otium-join.json` (0600); `negotium-otium serve` mounts the otium\n * peer routes whenever that file exists.\n */\n\nimport { configureOtiumCentral, selfPeerNode } from \"@/central\";\nimport {\n claimEnrollment,\n commitEnrollment,\n isEnrollmentPending,\n parseEnrollmentInvite,\n previewEnrollment,\n} from \"@/enrollment\";\nimport { parseInviteCode, saveJoin } from \"@/join\";\n\nfunction option(args: string[], name: string): string | undefined {\n const index = args.indexOf(`--${name}`);\n return index >= 0 ? args[index + 1]?.trim() : undefined;\n}\n\nasync function confirmEnrollment(message: string): Promise<boolean> {\n if (!process.stdin.isTTY) return false;\n const { createInterface } = await import(\"node:readline/promises\");\n const prompt = createInterface({ input: process.stdin, output: process.stdout });\n try {\n return /^(?:y|yes)$/i.test((await prompt.question(`${message} [y/N] `)).trim());\n } finally {\n prompt.close();\n }\n}\n\nexport async function joinCommand(args: string[]): Promise<void> {\n const code = args[0]?.trim();\n if (!code) {\n console.error(\n \"usage: negotium-otium join <invite-code> [--yes] [--name <node-name>] [--legacy] [--replace]\",\n );\n process.exitCode = 1;\n return;\n }\n\n let join: ReturnType<typeof parseInviteCode>;\n let productionEnrollment = false;\n if (args.includes(\"--legacy\")) {\n try {\n join = parseInviteCode(code);\n } catch (err) {\n console.error(`invalid legacy invite code: ${err instanceof Error ? err.message : err}`);\n process.exitCode = 1;\n return;\n }\n } else {\n try {\n const invite = parseEnrollmentInvite(code);\n const resuming = isEnrollmentPending(invite);\n let nodeName = option(args, \"name\");\n if (resuming) {\n console.log(`Resuming interrupted Otium enrollment with ${invite.central}`);\n } else {\n const preview = await previewEnrollment(invite);\n const workspace = preview.preview?.workspace;\n nodeName ||= preview.preview?.suggestedNodeName || undefined;\n console.log(`Otium workspace: ${workspace?.name ?? workspace?.slug ?? workspace?.id}`);\n console.log(` central: ${invite.central}`);\n console.log(` transport: ${preview.preview?.transport ?? \"relay\"}`);\n console.log(` access: ${preview.preview?.topics ?? \"explicitly shared topics only\"}`);\n const accepted =\n args.includes(\"--yes\") || (await confirmEnrollment(\"Join this workspace?\"));\n if (!accepted) {\n console.log(\"enrollment cancelled\");\n return;\n }\n }\n join = await claimEnrollment(invite, nodeName);\n productionEnrollment = true;\n } catch (err) {\n console.error(`enrollment failed: ${err instanceof Error ? err.message : err}`);\n process.exitCode = 1;\n return;\n }\n }\n\n let path: string;\n try {\n const saveOptions = { replaceExisting: args.includes(\"--replace\") };\n path = productionEnrollment ? commitEnrollment(join, saveOptions) : saveJoin(join, saveOptions);\n } catch (err) {\n console.error(`could not save join credentials: ${err instanceof Error ? err.message : err}`);\n process.exitCode = 1;\n return;\n }\n console.log(`otium join credentials saved to ${path}`);\n console.log(` central: ${join.central}`);\n console.log(` cellId: ${join.cellId}`);\n\n // Self check: confirm the assignment exists and surface the node name.\n configureOtiumCentral(join);\n try {\n const self = await selfPeerNode();\n if (self) {\n console.log(\n `attached to workspace as \"${self.nodeName ?? self.cellId}\" (baseUrl ${self.baseUrl})`,\n );\n } else {\n console.warn(\n \"warning: central answered but this cell has no visible assignment yet — check the workspace assignment\",\n );\n }\n } catch (err) {\n console.warn(\n `warning: could not verify against central (${err instanceof Error ? err.message : err}) — credentials saved anyway`,\n );\n } finally {\n configureOtiumCentral(null);\n }\n console.log(\"\\nnext: `negotium-otium serve` (mounts the otium peer routes automatically)\");\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "E93FFD7D2301057764756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "2889F5B123EC294564756E2164756E21",
9
9
  "names": []
10
10
  }