negotium 0.1.10 → 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 (149) hide show
  1. package/README.md +42 -0
  2. package/dist/{chunk-rj7w44t0.js → chunk-01xcc856.js} +25 -23
  3. package/dist/{chunk-rj7w44t0.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-2p2hds67.js → chunk-1b62d730.js} +24 -22
  7. package/dist/{chunk-2p2hds67.js.map → chunk-1b62d730.js.map} +2 -2
  8. package/dist/{chunk-wfhghtdz.js → chunk-28apmz4r.js} +66 -64
  9. package/dist/{chunk-wfhghtdz.js.map → chunk-28apmz4r.js.map} +2 -2
  10. package/dist/{chunk-9webgemt.js → chunk-2fvydfkx.js} +27 -25
  11. package/dist/{chunk-9webgemt.js.map → chunk-2fvydfkx.js.map} +2 -2
  12. package/dist/{chunk-jkencnkw.js → chunk-41ygvg5k.js} +13 -11
  13. package/dist/{chunk-jkencnkw.js.map → chunk-41ygvg5k.js.map} +3 -3
  14. package/dist/{chunk-z6654rf6.js → chunk-4q966ttx.js} +27 -24
  15. package/dist/{chunk-z6654rf6.js.map → chunk-4q966ttx.js.map} +2 -2
  16. package/dist/{chunk-rx58pnss.js → chunk-51rcsavw.js} +93 -90
  17. package/dist/{chunk-rx58pnss.js.map → chunk-51rcsavw.js.map} +2 -2
  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-gsk494xn.js → chunk-5fzgvn79.js} +28 -26
  21. package/dist/{chunk-gsk494xn.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-waf61p58.js → chunk-66y0hr8c.js} +93 -85
  25. package/dist/{chunk-waf61p58.js.map → chunk-66y0hr8c.js.map} +6 -6
  26. package/dist/{chunk-y3de7fp3.js → chunk-69k45zg8.js} +27 -25
  27. package/dist/{chunk-y3de7fp3.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-9krt5z40.js → chunk-6d4fmea5.js} +10 -6
  31. package/dist/{chunk-9krt5z40.js.map → chunk-6d4fmea5.js.map} +2 -2
  32. package/dist/{chunk-a3ypq5pp.js → chunk-8cahx7xc.js} +9 -6
  33. package/dist/{chunk-a3ypq5pp.js.map → chunk-8cahx7xc.js.map} +2 -2
  34. package/dist/{chunk-mamgm6gb.js → chunk-8f20fk4n.js} +2 -2
  35. package/dist/{chunk-5rmbpqy9.js → chunk-91ckrvk8.js} +21 -18
  36. package/dist/{chunk-5rmbpqy9.js.map → chunk-91ckrvk8.js.map} +2 -2
  37. package/dist/{chunk-ka8rv918.js → chunk-93krf6ng.js} +70 -67
  38. package/dist/{chunk-ka8rv918.js.map → chunk-93krf6ng.js.map} +2 -2
  39. package/dist/{chunk-39czd64s.js → chunk-9qx1t77a.js} +9 -9
  40. package/dist/{chunk-cphmr4g4.js → chunk-beqhdr9w.js} +33 -31
  41. package/dist/{chunk-cphmr4g4.js.map → chunk-beqhdr9w.js.map} +2 -2
  42. package/dist/{chunk-q00djwra.js → chunk-bftftsgq.js} +34 -31
  43. package/dist/{chunk-q00djwra.js.map → chunk-bftftsgq.js.map} +2 -2
  44. package/dist/{chunk-1jdws5ns.js → chunk-cjsnkvq2.js} +3 -3
  45. package/dist/{chunk-sxf7krrx.js → chunk-cxa7yghg.js} +43 -40
  46. package/dist/{chunk-sxf7krrx.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-yx2dvsye.js → chunk-g144wdrs.js} +63 -43
  54. package/dist/{chunk-yx2dvsye.js.map → chunk-g144wdrs.js.map} +4 -4
  55. package/dist/{chunk-gdb8ywgf.js → chunk-gz12qcf0.js} +2 -2
  56. package/dist/{chunk-gdb8ywgf.js.map → chunk-gz12qcf0.js.map} +1 -1
  57. package/dist/{chunk-cp37k2wg.js → chunk-h980hb2n.js} +23 -22
  58. package/dist/{chunk-cp37k2wg.js.map → chunk-h980hb2n.js.map} +2 -2
  59. package/dist/{chunk-1vth6t3y.js → chunk-h9vbhhgr.js} +77 -71
  60. package/dist/{chunk-1vth6t3y.js.map → chunk-h9vbhhgr.js.map} +3 -3
  61. package/dist/{chunk-fcskj4xy.js → chunk-jtrk0khr.js} +6 -6
  62. package/dist/{chunk-4f43r1nd.js → chunk-m9e3tbr8.js} +6 -4
  63. package/dist/{chunk-4f43r1nd.js.map → chunk-m9e3tbr8.js.map} +2 -2
  64. package/dist/{chunk-pkdmypdd.js → chunk-mh5mexsf.js} +1 -1
  65. package/dist/{chunk-tdxmdy6s.js → chunk-npd8n03v.js} +29 -26
  66. package/dist/{chunk-tdxmdy6s.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-dj7cpy9k.js → chunk-r31q21h5.js} +24 -22
  72. package/dist/{chunk-dj7cpy9k.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-abme0zjm.js → chunk-sctcs5zb.js} +27 -25
  76. package/dist/{chunk-abme0zjm.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-wgrk1d2n.js → chunk-wk2qf31s.js} +26 -24
  80. package/dist/{chunk-wgrk1d2n.js.map → chunk-wk2qf31s.js.map} +2 -2
  81. package/dist/{chunk-grn9fxdn.js → chunk-wx7ag4dd.js} +41 -38
  82. package/dist/{chunk-grn9fxdn.js.map → chunk-wx7ag4dd.js.map} +2 -2
  83. package/dist/{chunk-4yvkqxmm.js → chunk-znx1fpfd.js} +1 -1
  84. package/dist/cron.js +953 -745
  85. package/dist/cron.js.map +18 -17
  86. package/dist/hosted-agent.js +6 -5
  87. package/dist/hosted-agent.js.map +2 -2
  88. package/dist/main.js +11 -11
  89. package/dist/registry.js +148 -11
  90. package/dist/registry.js.map +6 -4
  91. package/dist/rollout.js +1 -1
  92. package/dist/runtime/src/storage/activity-log.ts +21 -12
  93. package/dist/runtime/src/storage/api-messages.ts +58 -51
  94. package/dist/runtime/src/storage/api-topic-brief.ts +12 -9
  95. package/dist/runtime/src/storage/api-topic-config.ts +59 -54
  96. package/dist/runtime/src/storage/api-topics.ts +232 -227
  97. package/dist/runtime/src/storage/app-settings.ts +27 -15
  98. package/dist/runtime/src/storage/conversations.ts +2 -2
  99. package/dist/runtime/src/storage/forum/repository.ts +12 -2
  100. package/dist/runtime/src/storage/forum/schema.ts +178 -171
  101. package/dist/runtime/src/storage/forum-db.ts +1 -23
  102. package/dist/runtime/src/storage/session-asks.ts +145 -46
  103. package/dist/runtime/src/storage/storage-host.ts +185 -0
  104. package/dist/runtime/src/storage/storage-public.ts +80 -0
  105. package/dist/runtime/src/storage/tasks.ts +7 -2
  106. package/dist/runtime/src/storage/token-stats.ts +10 -6
  107. package/dist/runtime/src/storage/topic-archive-state.ts +11 -8
  108. package/dist/runtime/src/storage/wiki.ts +7 -5
  109. package/dist/runtime/src/version.ts +1 -1
  110. package/dist/runtime-helpers.js +119 -44
  111. package/dist/runtime-helpers.js.map +5 -5
  112. package/dist/storage.js +3156 -0
  113. package/dist/storage.js.map +37 -0
  114. package/dist/types/packages/core/src/platform/constants.d.ts +10 -0
  115. package/dist/types/packages/core/src/storage/activity-log.d.ts +25 -0
  116. package/dist/types/packages/core/src/storage/api-topic-brief.d.ts +39 -0
  117. package/dist/types/packages/core/src/storage/api-topic-config.d.ts +23 -0
  118. package/dist/types/packages/core/src/storage/api-topics.d.ts +86 -0
  119. package/dist/types/packages/core/src/storage/app-settings.d.ts +4 -0
  120. package/dist/types/packages/core/src/storage/forum/agent-settings.d.ts +3 -0
  121. package/dist/types/packages/core/src/storage/forum/index.d.ts +4 -0
  122. package/dist/types/packages/core/src/storage/forum/repository.d.ts +42 -0
  123. package/dist/types/packages/core/src/storage/forum/schema.d.ts +38 -0
  124. package/dist/types/packages/core/src/storage/forum-db.d.ts +1 -1
  125. package/dist/types/packages/core/src/storage/session-asks.d.ts +66 -0
  126. package/dist/types/packages/core/src/storage/storage-host.d.ts +37 -0
  127. package/dist/types/packages/core/src/storage/storage-public.d.ts +38 -0
  128. package/dist/types/packages/core/src/storage/tasks.d.ts +49 -0
  129. package/dist/types/packages/core/src/storage/token-stats.d.ts +30 -0
  130. package/dist/types/packages/core/src/storage/topic-archive-state.d.ts +10 -0
  131. package/dist/types/packages/core/src/storage/topic-archive.d.ts +26 -0
  132. package/dist/types/packages/core/src/storage/topic-settings.d.ts +19 -0
  133. package/dist/types/packages/core/src/storage/topic-transcript.d.ts +38 -0
  134. package/dist/types/packages/core/src/storage/wiki-summary-names.d.ts +6 -0
  135. package/dist/types/packages/core/src/storage/wiki.d.ts +15 -0
  136. package/dist/types/packages/core/src/version.d.ts +1 -1
  137. package/package.json +6 -1
  138. package/dist/chunk-1msje2zf.js +0 -23
  139. package/dist/chunk-1msje2zf.js.map +0 -10
  140. package/dist/chunk-f97qybwk.js.map +0 -11
  141. package/dist/chunk-hsq7j9jk.js.map +0 -10
  142. package/dist/chunk-mhty3nna.js.map +0 -11
  143. package/dist/chunk-sgsz2fpq.js.map +0 -10
  144. /package/dist/{chunk-mamgm6gb.js.map → chunk-8f20fk4n.js.map} +0 -0
  145. /package/dist/{chunk-39czd64s.js.map → chunk-9qx1t77a.js.map} +0 -0
  146. /package/dist/{chunk-1jdws5ns.js.map → chunk-cjsnkvq2.js.map} +0 -0
  147. /package/dist/{chunk-fcskj4xy.js.map → chunk-jtrk0khr.js.map} +0 -0
  148. /package/dist/{chunk-pkdmypdd.js.map → chunk-mh5mexsf.js.map} +0 -0
  149. /package/dist/{chunk-4yvkqxmm.js.map → chunk-znx1fpfd.js.map} +0 -0
package/README.md CHANGED
@@ -46,3 +46,45 @@ import {
46
46
 
47
47
  These subpaths are the stable public boundary. Paths under `negotium/dist/` are package internals
48
48
  and may change between releases.
49
+
50
+ ## Storage embedding API
51
+
52
+ Embedding hosts can reuse Negotium's SQLite and filesystem stores without importing package
53
+ internals:
54
+
55
+ ```ts
56
+ import { Database } from "bun:sqlite";
57
+ import {
58
+ configureStorageHost,
59
+ getTopic,
60
+ sessionAsks,
61
+ tasks,
62
+ } from "negotium/storage";
63
+
64
+ const database = new Database("/srv/otium/state/sessions.db", { create: true });
65
+ const restoreStorageHost = configureStorageHost({
66
+ database,
67
+ dataDir: "/srv/otium/state/data",
68
+ logDir: "/srv/otium/logs",
69
+ sessionAsksDir: "/srv/otium/state/run/session-asks",
70
+ workspaceDir: "/srv/otium/state/workspace",
71
+ });
72
+
73
+ getTopic("topic-id");
74
+ sessionAsks.listPendingAsksForCaller({ userId: "user-id", from: "caller" });
75
+ tasks.readTasks("user-id", "topic-id");
76
+
77
+ restoreStorageHost();
78
+ database.close();
79
+ ```
80
+
81
+ Configuration and schema setup are lazy. An injected database is borrowed: Negotium initializes
82
+ the required tables on first access but never closes that connection. Omitted fields use the same
83
+ `NEGOTIUM_*` paths as the standalone runtime, and the returned disposer restores the previous host
84
+ for nested tests or embeddings. `workspaceDir` owns the shared `wiki/` subtree.
85
+
86
+ The facade exposes both direct functions and collision-safe module namespaces such as
87
+ `apiTopics.getTopicByName` and `forum.getTopicByName`; the direct forum alias is
88
+ `getForumTopicByName`. Pending session asks use bounded `v3-<sha256>` filenames and migrate live v2
89
+ and legacy records on access. Unsafe or oversized user IDs and token-stat IDs are stored under
90
+ stable SHA-256 components.
@@ -1,30 +1,32 @@
1
1
  // @bun
2
- import"./chunk-ka8rv918.js";
3
- import"./chunk-x1arr7ze.js";
4
- import"./chunk-sxf7krrx.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-yx2dvsye.js";
9
- import"./chunk-5rmbpqy9.js";
10
- import"./chunk-waf61p58.js";
11
- import"./chunk-1vth6t3y.js";
12
- import"./chunk-f97qybwk.js";
13
- import"./chunk-a3ypq5pp.js";
14
- import"./chunk-9krt5z40.js";
15
- import"./chunk-mhty3nna.js";
16
- import"./chunk-vp2db42d.js";
17
- import"./chunk-hsq7j9jk.js";
18
- import"./chunk-jkencnkw.js";
19
- import"./chunk-4f43r1nd.js";
20
- import"./chunk-pkdmypdd.js";
8
+ import"./chunk-g144wdrs.js";
9
+ import"./chunk-91ckrvk8.js";
10
+ import"./chunk-66y0hr8c.js";
11
+ import"./chunk-h9vbhhgr.js";
12
+ import"./chunk-f361dwba.js";
13
+ import"./chunk-8cahx7xc.js";
14
+ import"./chunk-6d4fmea5.js";
15
+ import"./chunk-61px0717.js";
16
+ import"./chunk-tsstrcfc.js";
17
+ import"./chunk-6ah5farg.js";
18
+ import"./chunk-41ygvg5k.js";
19
+ import"./chunk-m9e3tbr8.js";
20
+ import"./chunk-mh5mexsf.js";
21
+ import"./chunk-qwy57177.js";
21
22
  import"./chunk-j0kjscb7.js";
22
- import"./chunk-cp37k2wg.js";
23
- import"./chunk-1msje2zf.js";
24
- import"./chunk-f5xgprg1.js";
23
+ import"./chunk-h980hb2n.js";
25
24
  import {
26
25
  logger
27
- } from "./chunk-k9z47mab.js";
26
+ } from "./chunk-ffefbd3r.js";
27
+ import"./chunk-pg1azh6n.js";
28
+ import"./chunk-1a6kv9vt.js";
29
+ import"./chunk-f5xgprg1.js";
28
30
  import"./chunk-hwy3n31w.js";
29
31
 
30
32
  // ../../adapters/otium/src/central.ts
@@ -144,4 +146,4 @@ export {
144
146
 
145
147
  export { configureOtiumCentral, otiumCentralConfig, listPeerNodes, selfPeerNode, resolvePeerNodeByCellId, mintPeerToken, verifyPeerToken, resetPeerCentralCaches };
146
148
 
147
- //# debugId=2A6DD94C7F57CC9C64756E2164756E21
149
+ //# debugId=FC91852260C865A864756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * Central peer API client — token mint/verify and node discovery for this\n * cell. Port of otium's `apps/runtime-api/src/peer/central.ts` (identical\n * cache policy) with `hostedRuntimeConfig()` replaced by the adapter's join\n * credentials. The cell secret never leaves this process; peers only ever see\n * the short-lived `ptk_…` tokens central mints here.\n */\n\nimport { logger } from \"@negotium/core\";\nimport type { OtiumJoin } from \"@/join\";\n\nexport interface PeerNode {\n cellId: string;\n nodeName: string | null;\n isPrimary: boolean;\n baseUrl: string;\n self: boolean;\n}\n\nexport interface VerifiedPeer {\n workspaceId: string;\n fromCellId: string;\n fromNodeName: string | null;\n fromIsPrimary: boolean;\n expiresAt: string;\n}\n\nconst NODES_CACHE_MS = 30_000;\n/** Positive verify cache — deliberately short so assignment revocation bites\n * within seconds, not the token TTL. */\nconst VERIFY_CACHE_MS = 30_000;\n\nlet joinConfig: OtiumJoin | null = null;\nlet nodesCache: { nodes: PeerNode[]; workspaceId: string; at: number } | null = null;\nconst verifyCache = new Map<string, { verified: VerifiedPeer; at: number }>();\nconst tokenCache = new Map<string, { token: string; expiresAtMs: number }>();\n\n/** Install (or clear) the join credentials every central call authenticates with. */\nexport function configureOtiumCentral(join: OtiumJoin | null): void {\n joinConfig = join;\n resetPeerCentralCaches();\n}\n\nexport function otiumCentralConfig(): OtiumJoin | null {\n return joinConfig;\n}\n\nfunction centralFetch(path: string, init: RequestInit): Promise<Response> {\n if (!joinConfig) throw new Error(\"otium: join credentials missing\");\n return fetch(`${joinConfig.central}${path}`, {\n ...init,\n headers: {\n authorization: `Bearer ${joinConfig.secret}`,\n \"content-type\": \"application/json\",\n ...(init.headers ?? {}),\n },\n signal: AbortSignal.timeout(5000),\n });\n}\n\n/** Active nodes of this cell's workspace (30s cache; pass fresh=true after a\n * resolution miss so a just-attached node is visible). */\nexport async function listPeerNodes(opts: { fresh?: boolean } = {}): Promise<PeerNode[]> {\n if (!opts.fresh && nodesCache && Date.now() - nodesCache.at < NODES_CACHE_MS) {\n return nodesCache.nodes;\n }\n const response = await centralFetch(\"/peer/nodes\", { method: \"GET\" });\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n workspaceId?: string;\n nodes?: PeerNode[];\n };\n if (!response.ok || !body.ok || !Array.isArray(body.nodes)) {\n throw new Error(`otium: node discovery failed: ${body.error ?? response.status}`);\n }\n nodesCache = { nodes: body.nodes, workspaceId: body.workspaceId ?? \"\", at: Date.now() };\n return body.nodes;\n}\n\nexport async function selfPeerNode(): Promise<PeerNode | null> {\n const nodes = await listPeerNodes();\n return nodes.find((node) => node.self) ?? null;\n}\n\nexport async function resolvePeerNodeByCellId(cellId: string): Promise<PeerNode | null> {\n const find = (nodes: PeerNode[]) => nodes.find((node) => node.cellId === cellId) ?? null;\n const cached = find(await listPeerNodes());\n if (cached) return cached;\n return find(await listPeerNodes({ fresh: true }));\n}\n\n/** Mint (or reuse a still-fresh) peer token for one target cell. Tokens are\n * reusable within their TTL, so cache until shortly before expiry. */\nexport async function mintPeerToken(toCellId: string): Promise<string> {\n const cached = tokenCache.get(toCellId);\n if (cached && cached.expiresAtMs - Date.now() > 30_000) return cached.token;\n const response = await centralFetch(\"/peer/token\", {\n method: \"POST\",\n body: JSON.stringify({ toCellId }),\n });\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n token?: string;\n expiresAt?: string;\n };\n if (!response.ok || !body.ok || !body.token) {\n throw new Error(`otium: peer token mint failed: ${body.error ?? response.status}`);\n }\n tokenCache.set(toCellId, {\n token: body.token,\n expiresAtMs: Date.parse(body.expiresAt ?? \"\") || Date.now() + 60_000,\n });\n return body.token;\n}\n\n/** Verify an inbound peer token against central (fail-closed on outages). */\nexport async function verifyPeerToken(token: string): Promise<VerifiedPeer | null> {\n const cached = verifyCache.get(token);\n if (cached && Date.now() - cached.at < VERIFY_CACHE_MS) return cached.verified;\n let response: Response;\n try {\n response = await centralFetch(\"/peer/verify\", {\n method: \"POST\",\n body: JSON.stringify({ token }),\n });\n } catch (err) {\n logger.warn({ err }, \"otium: central verify unreachable\");\n return null;\n }\n const body = (await response.json().catch(() => null)) as (VerifiedPeer & { ok: boolean }) | null;\n if (!response.ok || !body?.ok) return null;\n const verified: VerifiedPeer = {\n workspaceId: body.workspaceId,\n fromCellId: body.fromCellId,\n fromNodeName: body.fromNodeName,\n fromIsPrimary: body.fromIsPrimary,\n expiresAt: body.expiresAt,\n };\n verifyCache.set(token, { verified, at: Date.now() });\n // Opportunistic sweep — the cache only ever holds a handful of live tokens.\n for (const [key, entry] of verifyCache) {\n if (Date.now() - entry.at > VERIFY_CACHE_MS) verifyCache.delete(key);\n }\n return verified;\n}\n\n/** Test hook — caches are module singletons. */\nexport function resetPeerCentralCaches(): void {\n nodesCache = null;\n verifyCache.clear();\n tokenCache.clear();\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAM,iBAAiB;AAGvB,IAAM,kBAAkB;AAExB,IAAI,aAA+B;AACnC,IAAI,aAA4E;AAChF,IAAM,cAAc,IAAI;AACxB,IAAM,aAAa,IAAI;AAGhB,SAAS,qBAAqB,CAAC,MAA8B;AAAA,EAClE,aAAa;AAAA,EACb,uBAAuB;AAAA;AAGlB,SAAS,kBAAkB,GAAqB;AAAA,EACrD,OAAO;AAAA;AAGT,SAAS,YAAY,CAAC,MAAc,MAAsC;AAAA,EACxE,KAAK;AAAA,IAAY,MAAM,IAAI,MAAM,iCAAiC;AAAA,EAClE,OAAO,MAAM,GAAG,WAAW,UAAU,QAAQ;AAAA,OACxC;AAAA,IACH,SAAS;AAAA,MACP,eAAe,UAAU,WAAW;AAAA,MACpC,gBAAgB;AAAA,SACZ,KAAK,WAAW,CAAC;AAAA,IACvB;AAAA,IACA,QAAQ,YAAY,QAAQ,IAAI;AAAA,EAClC,CAAC;AAAA;AAKH,eAAsB,aAAa,CAAC,OAA4B,CAAC,GAAwB;AAAA,EACvF,KAAK,KAAK,SAAS,cAAc,KAAK,IAAI,IAAI,WAAW,KAAK,gBAAgB;AAAA,IAC5E,OAAO,WAAW;AAAA,EACpB;AAAA,EACA,MAAM,WAAW,MAAM,aAAa,eAAe,EAAE,QAAQ,MAAM,CAAC;AAAA,EACpE,MAAM,OAAQ,MAAM,SAAS,KAAK;AAAA,EAMlC,KAAK,SAAS,OAAO,KAAK,OAAO,MAAM,QAAQ,KAAK,KAAK,GAAG;AAAA,IAC1D,MAAM,IAAI,MAAM,iCAAiC,KAAK,SAAS,SAAS,QAAQ;AAAA,EAClF;AAAA,EACA,aAAa,EAAE,OAAO,KAAK,OAAO,aAAa,KAAK,eAAe,IAAI,IAAI,KAAK,IAAI,EAAE;AAAA,EACtF,OAAO,KAAK;AAAA;AAGd,eAAsB,YAAY,GAA6B;AAAA,EAC7D,MAAM,QAAQ,MAAM,cAAc;AAAA,EAClC,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,IAAI,KAAK;AAAA;AAG5C,eAAsB,uBAAuB,CAAC,QAA0C;AAAA,EACtF,MAAM,OAAO,CAAC,UAAsB,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM,KAAK;AAAA,EACpF,MAAM,SAAS,KAAK,MAAM,cAAc,CAAC;AAAA,EACzC,IAAI;AAAA,IAAQ,OAAO;AAAA,EACnB,OAAO,KAAK,MAAM,cAAc,EAAE,OAAO,KAAK,CAAC,CAAC;AAAA;AAKlD,eAAsB,aAAa,CAAC,UAAmC;AAAA,EACrE,MAAM,SAAS,WAAW,IAAI,QAAQ;AAAA,EACtC,IAAI,UAAU,OAAO,cAAc,KAAK,IAAI,IAAI;AAAA,IAAQ,OAAO,OAAO;AAAA,EACtE,MAAM,WAAW,MAAM,aAAa,eAAe;AAAA,IACjD,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,EAAE,SAAS,CAAC;AAAA,EACnC,CAAC;AAAA,EACD,MAAM,OAAQ,MAAM,SAAS,KAAK;AAAA,EAMlC,KAAK,SAAS,OAAO,KAAK,OAAO,KAAK,OAAO;AAAA,IAC3C,MAAM,IAAI,MAAM,kCAAkC,KAAK,SAAS,SAAS,QAAQ;AAAA,EACnF;AAAA,EACA,WAAW,IAAI,UAAU;AAAA,IACvB,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK,MAAM,KAAK,aAAa,EAAE,KAAK,KAAK,IAAI,IAAI;AAAA,EAChE,CAAC;AAAA,EACD,OAAO,KAAK;AAAA;AAId,eAAsB,eAAe,CAAC,OAA6C;AAAA,EACjF,MAAM,SAAS,YAAY,IAAI,KAAK;AAAA,EACpC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK;AAAA,IAAiB,OAAO,OAAO;AAAA,EACtE,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,WAAW,MAAM,aAAa,gBAAgB;AAAA,MAC5C,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC;AAAA,IAChC,CAAC;AAAA,IACD,OAAO,KAAK;AAAA,IACZ,OAAO,KAAK,EAAE,IAAI,GAAG,mCAAmC;AAAA,IACxD,OAAO;AAAA;AAAA,EAET,MAAM,OAAQ,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AAAA,EACpD,KAAK,SAAS,OAAO,MAAM;AAAA,IAAI,OAAO;AAAA,EACtC,MAAM,WAAyB;AAAA,IAC7B,aAAa,KAAK;AAAA,IAClB,YAAY,KAAK;AAAA,IACjB,cAAc,KAAK;AAAA,IACnB,eAAe,KAAK;AAAA,IACpB,WAAW,KAAK;AAAA,EAClB;AAAA,EACA,YAAY,IAAI,OAAO,EAAE,UAAU,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,EAEnD,YAAY,KAAK,UAAU,aAAa;AAAA,IACtC,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK;AAAA,MAAiB,YAAY,OAAO,GAAG;AAAA,EACrE;AAAA,EACA,OAAO;AAAA;AAIF,SAAS,sBAAsB,GAAS;AAAA,EAC7C,aAAa;AAAA,EACb,YAAY,MAAM;AAAA,EAClB,WAAW,MAAM;AAAA;",
8
- "debugId": "2A6DD94C7F57CC9C64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "FC91852260C865A864756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,118 @@
1
+ import {
2
+ Database
3
+ } from "./chunk-f5xgprg1.js";
4
+
5
+ // ../../packages/core/src/storage/storage-host.ts
6
+ import { mkdirSync } from "fs";
7
+ import { homedir } from "os";
8
+ import { dirname, join, resolve } from "path";
9
+ var configuredHost = {};
10
+ var fallbackDatabase = null;
11
+ var schemaInitializers = [];
12
+ var initializedSchemas = new WeakMap;
13
+ var initializingDatabases = new WeakSet;
14
+ function envPath(name, fallback) {
15
+ const value = process.env[name]?.trim();
16
+ return resolve(value || fallback);
17
+ }
18
+ function defaultStateDir() {
19
+ return envPath("NEGOTIUM_STATE_DIR", join(homedir(), ".negotium"));
20
+ }
21
+ function defaultDataDir() {
22
+ return envPath("NEGOTIUM_DATA_DIR", join(defaultStateDir(), "data"));
23
+ }
24
+ function defaultLogDir() {
25
+ return envPath("NEGOTIUM_LOG_DIR", join(defaultStateDir(), "logs"));
26
+ }
27
+ function defaultWorkspaceDir() {
28
+ return envPath("NEGOTIUM_WORKSPACE_DIR", join(defaultStateDir(), "workspace"));
29
+ }
30
+ function defaultSessionAsksDir() {
31
+ const runDir = envPath("NEGOTIUM_RUN_DIR", join(defaultStateDir(), "run"));
32
+ return join(runDir, "session-asks");
33
+ }
34
+ function defaultSessionsDatabasePath() {
35
+ return envPath("SESSIONS_DB_PATH", join(defaultDataDir(), "sessions.db"));
36
+ }
37
+ function initializeDatabase(database) {
38
+ database.exec("PRAGMA journal_mode = WAL");
39
+ database.exec("PRAGMA foreign_keys = ON");
40
+ database.exec("PRAGMA busy_timeout = 5000");
41
+ database.exec("PRAGMA wal_autocheckpoint = 1000");
42
+ try {
43
+ database.exec("PRAGMA wal_checkpoint(TRUNCATE)");
44
+ } catch {}
45
+ }
46
+ function defaultDatabase() {
47
+ if (fallbackDatabase)
48
+ return fallbackDatabase;
49
+ const path = defaultSessionsDatabasePath();
50
+ mkdirSync(dirname(path), { recursive: true });
51
+ fallbackDatabase = new Database(path, { create: true });
52
+ initializeDatabase(fallbackDatabase);
53
+ return fallbackDatabase;
54
+ }
55
+ function resolveStorageDatabase() {
56
+ return configuredHost.database ?? defaultDatabase();
57
+ }
58
+ function resolveStorageDataDir() {
59
+ return configuredHost.dataDir ?? defaultDataDir();
60
+ }
61
+ function resolveStorageLogDir() {
62
+ return configuredHost.logDir ?? defaultLogDir();
63
+ }
64
+ function resolveStorageSessionAsksDir() {
65
+ return configuredHost.sessionAsksDir ?? defaultSessionAsksDir();
66
+ }
67
+ function resolveStorageWorkspaceDir() {
68
+ return configuredHost.workspaceDir ?? defaultWorkspaceDir();
69
+ }
70
+ function resolveStorageSharedWikiDir() {
71
+ return join(resolveStorageWorkspaceDir(), "wiki");
72
+ }
73
+ function registerStorageSchemaInitializer(initialize, priority = 100) {
74
+ schemaInitializers.push({ initialize, priority });
75
+ schemaInitializers.sort((a, b) => a.priority - b.priority);
76
+ }
77
+ function ensureStorageSchemas(database = resolveStorageDatabase()) {
78
+ if (initializingDatabases.has(database))
79
+ return;
80
+ let initialized = initializedSchemas.get(database);
81
+ if (!initialized) {
82
+ initialized = new Set;
83
+ initializedSchemas.set(database, initialized);
84
+ }
85
+ initializingDatabases.add(database);
86
+ try {
87
+ for (const entry of schemaInitializers) {
88
+ if (initialized.has(entry.initialize))
89
+ continue;
90
+ initialized.add(entry.initialize);
91
+ try {
92
+ entry.initialize(database);
93
+ } catch (error) {
94
+ initialized.delete(entry.initialize);
95
+ throw error;
96
+ }
97
+ }
98
+ } finally {
99
+ initializingDatabases.delete(database);
100
+ }
101
+ }
102
+ var storageDatabase = new Proxy({}, {
103
+ get(_target, property) {
104
+ const database = resolveStorageDatabase();
105
+ ensureStorageSchemas(database);
106
+ const value = Reflect.get(database, property, database);
107
+ return typeof value === "function" ? value.bind(database) : value;
108
+ },
109
+ set(_target, property, value) {
110
+ const database = resolveStorageDatabase();
111
+ ensureStorageSchemas(database);
112
+ return Reflect.set(database, property, value, database);
113
+ }
114
+ });
115
+
116
+ export { resolveStorageDataDir, resolveStorageLogDir, resolveStorageSessionAsksDir, resolveStorageWorkspaceDir, resolveStorageSharedWikiDir, registerStorageSchemaInitializer, storageDatabase };
117
+
118
+ //# debugId=83AECADE534BF13864756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/core/src/storage/storage-host.ts"],
4
+ "sourcesContent": [
5
+ "import { mkdirSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { Database } from \"#storage/sqlite\";\n\nexport type StorageDatabase = InstanceType<typeof Database>;\n\nexport interface StorageHostOptions {\n /** Borrowed SQLite connection. Negotium never closes an injected database. */\n database?: StorageDatabase;\n /** Persistent JSON/JSONL state root. */\n dataDir?: string;\n /** Activity and token-usage log root. */\n logDir?: string;\n /** Durable ask edge root. Defaults to Negotium's runtime ask directory. */\n sessionAsksDir?: string;\n /** Shared topic workspace root used by wiki/archive helpers. */\n workspaceDir?: string;\n}\n\nlet configuredHost: Readonly<StorageHostOptions> = {};\nlet fallbackDatabase: StorageDatabase | null = null;\n\ntype StorageSchemaInitializer = (database: StorageDatabase) => void;\ninterface RegisteredSchemaInitializer {\n initialize: StorageSchemaInitializer;\n priority: number;\n}\n\nconst schemaInitializers: RegisteredSchemaInitializer[] = [];\nconst initializedSchemas = new WeakMap<StorageDatabase, Set<StorageSchemaInitializer>>();\nconst initializingDatabases = new WeakSet<StorageDatabase>();\n\nfunction envPath(name: string, fallback: string): string {\n const value = process.env[name]?.trim();\n return resolve(value || fallback);\n}\n\nfunction defaultStateDir(): string {\n return envPath(\"NEGOTIUM_STATE_DIR\", join(homedir(), \".negotium\"));\n}\n\nfunction defaultDataDir(): string {\n return envPath(\"NEGOTIUM_DATA_DIR\", join(defaultStateDir(), \"data\"));\n}\n\nfunction defaultLogDir(): string {\n return envPath(\"NEGOTIUM_LOG_DIR\", join(defaultStateDir(), \"logs\"));\n}\n\nfunction defaultWorkspaceDir(): string {\n return envPath(\"NEGOTIUM_WORKSPACE_DIR\", join(defaultStateDir(), \"workspace\"));\n}\n\nfunction defaultSessionAsksDir(): string {\n const runDir = envPath(\"NEGOTIUM_RUN_DIR\", join(defaultStateDir(), \"run\"));\n return join(runDir, \"session-asks\");\n}\n\nfunction defaultSessionsDatabasePath(): string {\n return envPath(\"SESSIONS_DB_PATH\", join(defaultDataDir(), \"sessions.db\"));\n}\n\nfunction initializeDatabase(database: StorageDatabase): void {\n database.exec(\"PRAGMA journal_mode = WAL\");\n database.exec(\"PRAGMA foreign_keys = ON\");\n database.exec(\"PRAGMA busy_timeout = 5000\");\n database.exec(\"PRAGMA wal_autocheckpoint = 1000\");\n try {\n database.exec(\"PRAGMA wal_checkpoint(TRUNCATE)\");\n } catch {\n // Non-fatal; a concurrent writer may hold the WAL briefly.\n }\n}\n\nfunction defaultDatabase(): StorageDatabase {\n if (fallbackDatabase) return fallbackDatabase;\n const path = defaultSessionsDatabasePath();\n mkdirSync(dirname(path), { recursive: true });\n fallbackDatabase = new Database(path, { create: true });\n initializeDatabase(fallbackDatabase);\n return fallbackDatabase;\n}\n\nexport function resolveStorageDatabase(): StorageDatabase {\n return configuredHost.database ?? defaultDatabase();\n}\n\nexport function resolveStorageDataDir(): string {\n return configuredHost.dataDir ?? defaultDataDir();\n}\n\nexport function resolveStorageLogDir(): string {\n return configuredHost.logDir ?? defaultLogDir();\n}\n\nexport function resolveStorageSessionAsksDir(): string {\n return configuredHost.sessionAsksDir ?? defaultSessionAsksDir();\n}\n\nexport function resolveStorageWorkspaceDir(): string {\n return configuredHost.workspaceDir ?? defaultWorkspaceDir();\n}\n\nexport function resolveStorageSharedWikiDir(): string {\n return join(resolveStorageWorkspaceDir(), \"wiki\");\n}\n\nexport function resolveStorageUsersLogDir(): string {\n return join(resolveStorageDataDir(), \"users\");\n}\n\n/**\n * Configure the process-local storage boundary for an embedding host.\n *\n * Resolution is lazy: importing `negotium/storage` never opens a database or\n * touches a filesystem path. The returned disposer restores the exact prior\n * host, which keeps tests and nested embeddings isolated.\n */\nexport function configureStorageHost(options: StorageHostOptions): () => void {\n const previous = configuredHost;\n configuredHost = Object.freeze({ ...previous, ...options });\n let restored = false;\n return () => {\n if (restored) return;\n restored = true;\n configuredHost = previous;\n };\n}\n\n/** Close only Negotium's fallback connection. Injected connections are borrowed. */\nexport function closeStorageDatabase(): void {\n if (configuredHost.database || !fallbackDatabase) return;\n fallbackDatabase.close();\n fallbackDatabase = null;\n}\n\nexport function registerStorageSchemaInitializer(\n initialize: StorageSchemaInitializer,\n priority = 100,\n): void {\n schemaInitializers.push({ initialize, priority });\n schemaInitializers.sort((a, b) => a.priority - b.priority);\n}\n\nexport function ensureStorageSchemas(database = resolveStorageDatabase()): void {\n if (initializingDatabases.has(database)) return;\n let initialized = initializedSchemas.get(database);\n if (!initialized) {\n initialized = new Set();\n initializedSchemas.set(database, initialized);\n }\n initializingDatabases.add(database);\n try {\n for (const entry of schemaInitializers) {\n if (initialized.has(entry.initialize)) continue;\n // Mark first so a migration that calls through the public db proxy does\n // not recursively invoke itself. Remove on failure so the next call can retry.\n initialized.add(entry.initialize);\n try {\n entry.initialize(database);\n } catch (error) {\n initialized.delete(entry.initialize);\n throw error;\n }\n }\n } finally {\n initializingDatabases.delete(database);\n }\n}\n\n/** Stable proxy identity used by legacy imports and embedding hosts. */\nexport const storageDatabase = new Proxy({} as StorageDatabase, {\n get(_target, property) {\n const database = resolveStorageDatabase();\n ensureStorageSchemas(database);\n const value = Reflect.get(database as object, property, database);\n return typeof value === \"function\" ? value.bind(database) : value;\n },\n set(_target, property, value) {\n const database = resolveStorageDatabase();\n ensureStorageSchemas(database);\n return Reflect.set(database as object, property, value, database);\n },\n});\n"
6
+ ],
7
+ "mappings": ";;;;;AAAA;AACA;AACA;AAkBA,IAAI,iBAA+C,CAAC;AACpD,IAAI,mBAA2C;AAQ/C,IAAM,qBAAoD,CAAC;AAC3D,IAAM,qBAAqB,IAAI;AAC/B,IAAM,wBAAwB,IAAI;AAElC,SAAS,OAAO,CAAC,MAAc,UAA0B;AAAA,EACvD,MAAM,QAAQ,QAAQ,IAAI,OAAO,KAAK;AAAA,EACtC,OAAO,QAAQ,SAAS,QAAQ;AAAA;AAGlC,SAAS,eAAe,GAAW;AAAA,EACjC,OAAO,QAAQ,sBAAsB,KAAK,QAAQ,GAAG,WAAW,CAAC;AAAA;AAGnE,SAAS,cAAc,GAAW;AAAA,EAChC,OAAO,QAAQ,qBAAqB,KAAK,gBAAgB,GAAG,MAAM,CAAC;AAAA;AAGrE,SAAS,aAAa,GAAW;AAAA,EAC/B,OAAO,QAAQ,oBAAoB,KAAK,gBAAgB,GAAG,MAAM,CAAC;AAAA;AAGpE,SAAS,mBAAmB,GAAW;AAAA,EACrC,OAAO,QAAQ,0BAA0B,KAAK,gBAAgB,GAAG,WAAW,CAAC;AAAA;AAG/E,SAAS,qBAAqB,GAAW;AAAA,EACvC,MAAM,SAAS,QAAQ,oBAAoB,KAAK,gBAAgB,GAAG,KAAK,CAAC;AAAA,EACzE,OAAO,KAAK,QAAQ,cAAc;AAAA;AAGpC,SAAS,2BAA2B,GAAW;AAAA,EAC7C,OAAO,QAAQ,oBAAoB,KAAK,eAAe,GAAG,aAAa,CAAC;AAAA;AAG1E,SAAS,kBAAkB,CAAC,UAAiC;AAAA,EAC3D,SAAS,KAAK,2BAA2B;AAAA,EACzC,SAAS,KAAK,0BAA0B;AAAA,EACxC,SAAS,KAAK,4BAA4B;AAAA,EAC1C,SAAS,KAAK,kCAAkC;AAAA,EAChD,IAAI;AAAA,IACF,SAAS,KAAK,iCAAiC;AAAA,IAC/C,MAAM;AAAA;AAKV,SAAS,eAAe,GAAoB;AAAA,EAC1C,IAAI;AAAA,IAAkB,OAAO;AAAA,EAC7B,MAAM,OAAO,4BAA4B;AAAA,EACzC,UAAU,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAC5C,mBAAmB,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;AAAA,EACtD,mBAAmB,gBAAgB;AAAA,EACnC,OAAO;AAAA;AAGF,SAAS,sBAAsB,GAAoB;AAAA,EACxD,OAAO,eAAe,YAAY,gBAAgB;AAAA;AAG7C,SAAS,qBAAqB,GAAW;AAAA,EAC9C,OAAO,eAAe,WAAW,eAAe;AAAA;AAG3C,SAAS,oBAAoB,GAAW;AAAA,EAC7C,OAAO,eAAe,UAAU,cAAc;AAAA;AAGzC,SAAS,4BAA4B,GAAW;AAAA,EACrD,OAAO,eAAe,kBAAkB,sBAAsB;AAAA;AAGzD,SAAS,0BAA0B,GAAW;AAAA,EACnD,OAAO,eAAe,gBAAgB,oBAAoB;AAAA;AAGrD,SAAS,2BAA2B,GAAW;AAAA,EACpD,OAAO,KAAK,2BAA2B,GAAG,MAAM;AAAA;AAgC3C,SAAS,gCAAgC,CAC9C,YACA,WAAW,KACL;AAAA,EACN,mBAAmB,KAAK,EAAE,YAAY,SAAS,CAAC;AAAA,EAChD,mBAAmB,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AAAA;AAGpD,SAAS,oBAAoB,CAAC,WAAW,uBAAuB,GAAS;AAAA,EAC9E,IAAI,sBAAsB,IAAI,QAAQ;AAAA,IAAG;AAAA,EACzC,IAAI,cAAc,mBAAmB,IAAI,QAAQ;AAAA,EACjD,KAAK,aAAa;AAAA,IAChB,cAAc,IAAI;AAAA,IAClB,mBAAmB,IAAI,UAAU,WAAW;AAAA,EAC9C;AAAA,EACA,sBAAsB,IAAI,QAAQ;AAAA,EAClC,IAAI;AAAA,IACF,WAAW,SAAS,oBAAoB;AAAA,MACtC,IAAI,YAAY,IAAI,MAAM,UAAU;AAAA,QAAG;AAAA,MAGvC,YAAY,IAAI,MAAM,UAAU;AAAA,MAChC,IAAI;AAAA,QACF,MAAM,WAAW,QAAQ;AAAA,QACzB,OAAO,OAAO;AAAA,QACd,YAAY,OAAO,MAAM,UAAU;AAAA,QACnC,MAAM;AAAA;AAAA,IAEV;AAAA,YACA;AAAA,IACA,sBAAsB,OAAO,QAAQ;AAAA;AAAA;AAKlC,IAAM,kBAAkB,IAAI,MAAM,CAAC,GAAsB;AAAA,EAC9D,GAAG,CAAC,SAAS,UAAU;AAAA,IACrB,MAAM,WAAW,uBAAuB;AAAA,IACxC,qBAAqB,QAAQ;AAAA,IAC7B,MAAM,QAAQ,QAAQ,IAAI,UAAoB,UAAU,QAAQ;AAAA,IAChE,OAAO,OAAO,UAAU,aAAa,MAAM,KAAK,QAAQ,IAAI;AAAA;AAAA,EAE9D,GAAG,CAAC,SAAS,UAAU,OAAO;AAAA,IAC5B,MAAM,WAAW,uBAAuB;AAAA,IACxC,qBAAqB,QAAQ;AAAA,IAC7B,OAAO,QAAQ,IAAI,UAAoB,UAAU,OAAO,QAAQ;AAAA;AAEpE,CAAC;",
8
+ "debugId": "83AECADE534BF13864756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,20 +1,20 @@
1
1
  // @bun
2
- import"./chunk-ka8rv918.js";
3
- import"./chunk-x1arr7ze.js";
4
- import"./chunk-sxf7krrx.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-yx2dvsye.js";
9
- import"./chunk-5rmbpqy9.js";
10
- import"./chunk-waf61p58.js";
11
- import"./chunk-1vth6t3y.js";
12
- import"./chunk-f97qybwk.js";
13
- import"./chunk-a3ypq5pp.js";
14
- import"./chunk-9krt5z40.js";
15
- import"./chunk-mhty3nna.js";
16
- import"./chunk-vp2db42d.js";
17
- import"./chunk-hsq7j9jk.js";
8
+ import"./chunk-g144wdrs.js";
9
+ import"./chunk-91ckrvk8.js";
10
+ import"./chunk-66y0hr8c.js";
11
+ import"./chunk-h9vbhhgr.js";
12
+ import"./chunk-f361dwba.js";
13
+ import"./chunk-8cahx7xc.js";
14
+ import"./chunk-6d4fmea5.js";
15
+ import"./chunk-61px0717.js";
16
+ import"./chunk-tsstrcfc.js";
17
+ import"./chunk-6ah5farg.js";
18
18
  import {
19
19
  VAULT_DESCRIPTION_MAX_LENGTH,
20
20
  VAULT_VALUE_MAX_BYTES,
@@ -24,14 +24,16 @@ import {
24
24
  vaultDel,
25
25
  vaultListWithValues,
26
26
  vaultSet
27
- } from "./chunk-jkencnkw.js";
28
- import"./chunk-4f43r1nd.js";
29
- import"./chunk-pkdmypdd.js";
27
+ } from "./chunk-41ygvg5k.js";
28
+ import"./chunk-m9e3tbr8.js";
29
+ import"./chunk-mh5mexsf.js";
30
+ import"./chunk-qwy57177.js";
30
31
  import"./chunk-j0kjscb7.js";
31
- import"./chunk-cp37k2wg.js";
32
- import"./chunk-1msje2zf.js";
32
+ import"./chunk-h980hb2n.js";
33
+ import"./chunk-ffefbd3r.js";
34
+ import"./chunk-pg1azh6n.js";
35
+ import"./chunk-1a6kv9vt.js";
33
36
  import"./chunk-f5xgprg1.js";
34
- import"./chunk-k9z47mab.js";
35
37
  import"./chunk-hwy3n31w.js";
36
38
 
37
39
  // ../cli/src/commands/vault.ts
@@ -112,4 +114,4 @@ export {
112
114
  vaultCommand
113
115
  };
114
116
 
115
- //# debugId=05140DB28456402E64756E2164756E21
117
+ //# debugId=EE1D095AA690E88864756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * `negotium vault <list|set|get|del>` — node secret store.\n *\n * Values are AES-encrypted at rest with the per-node master key\n * (~/.negotium/vault-master-key, or NEGOTIUM_VAULT_MASTER_KEY). The vault is a\n * core system: agents/MCPs read it through the runtime, humans through here.\n */\n\nimport {\n normalizeVaultKey,\n VAULT_DESCRIPTION_MAX_LENGTH,\n VAULT_VALUE_MAX_BYTES,\n VAULT_VALUE_MIN_BYTES,\n validateVaultKey,\n vaultDel,\n vaultListWithValues,\n vaultSet,\n} from \"@negotium/core\";\n\nconst DEFAULT_USER = \"local\";\n\nexport function vaultCommand(args: string[]): void {\n const [sub, key, value, ...descParts] = args;\n\n switch (sub) {\n case undefined:\n case \"list\": {\n const entries = vaultListWithValues(DEFAULT_USER);\n if (entries.length === 0) {\n console.log(\"vault is empty — `negotium vault set MY_KEY <value> [description]`\");\n return;\n }\n for (const entry of entries) {\n console.log(`${entry.key} ${entry.description || \"\"}`.trimEnd());\n }\n return;\n }\n case \"set\": {\n if (!key || !value) {\n console.error(\"usage: negotium vault set <KEY> <value> [description]\");\n process.exitCode = 1;\n return;\n }\n const normalized = normalizeVaultKey(key);\n if (!validateVaultKey(normalized)) {\n console.error(\"invalid key — use A-Z, 0-9, _ (must start with a letter, max 128 chars)\");\n process.exitCode = 1;\n return;\n }\n const valueBytes = Buffer.byteLength(value, \"utf8\");\n if (valueBytes < VAULT_VALUE_MIN_BYTES || valueBytes > VAULT_VALUE_MAX_BYTES) {\n console.error(\n `value must be between ${VAULT_VALUE_MIN_BYTES} and ${VAULT_VALUE_MAX_BYTES} bytes`,\n );\n process.exitCode = 1;\n return;\n }\n const description = descParts.join(\" \");\n if (description.length > VAULT_DESCRIPTION_MAX_LENGTH) {\n console.error(`description must be at most ${VAULT_DESCRIPTION_MAX_LENGTH} characters`);\n process.exitCode = 1;\n return;\n }\n vaultSet(DEFAULT_USER, normalized, value, description);\n console.log(`stored ${normalized}`);\n return;\n }\n case \"get\": {\n if (!key) {\n console.error(\"usage: negotium vault get <KEY>\");\n process.exitCode = 1;\n return;\n }\n const entry = vaultListWithValues(DEFAULT_USER).find((e) => e.key === normalizeVaultKey(key));\n if (!entry) {\n console.error(`no such key \"${key}\"`);\n process.exitCode = 1;\n return;\n }\n console.log(entry.value);\n return;\n }\n case \"del\": {\n if (!key) {\n console.error(\"usage: negotium vault del <KEY>\");\n process.exitCode = 1;\n return;\n }\n console.log(\n vaultDel(DEFAULT_USER, normalizeVaultKey(key)) ? `deleted ${key}` : `no such key \"${key}\"`,\n );\n return;\n }\n default:\n console.error(`unknown subcommand \"${sub}\" — use list|set|get|del`);\n process.exitCode = 1;\n }\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAM,eAAe;AAEd,SAAS,YAAY,CAAC,MAAsB;AAAA,EACjD,OAAO,KAAK,KAAK,UAAU,aAAa;AAAA,EAExC,QAAQ;AAAA,SACD;AAAA,SACA,QAAQ;AAAA,MACX,MAAM,UAAU,oBAAoB,YAAY;AAAA,MAChD,IAAI,QAAQ,WAAW,GAAG;AAAA,QACxB,QAAQ,IAAI,yEAAmE;AAAA,QAC/E;AAAA,MACF;AAAA,MACA,WAAW,SAAS,SAAS;AAAA,QAC3B,QAAQ,IAAI,GAAG,MAAM,QAAQ,MAAM,eAAe,KAAK,QAAQ,CAAC;AAAA,MAClE;AAAA,MACA;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,KAAK,QAAQ,OAAO;AAAA,QAClB,QAAQ,MAAM,uDAAuD;AAAA,QACrE,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,aAAa,kBAAkB,GAAG;AAAA,MACxC,KAAK,iBAAiB,UAAU,GAAG;AAAA,QACjC,QAAQ,MAAM,8EAAwE;AAAA,QACtF,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,aAAa,OAAO,WAAW,OAAO,MAAM;AAAA,MAClD,IAAI,aAAa,yBAAyB,aAAa,uBAAuB;AAAA,QAC5E,QAAQ,MACN,yBAAyB,6BAA6B,6BACxD;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,cAAc,UAAU,KAAK,GAAG;AAAA,MACtC,IAAI,YAAY,SAAS,8BAA8B;AAAA,QACrD,QAAQ,MAAM,+BAA+B,yCAAyC;AAAA,QACtF,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,SAAS,cAAc,YAAY,OAAO,WAAW;AAAA,MACrD,QAAQ,IAAI,UAAU,YAAY;AAAA,MAClC;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,KAAK,KAAK;AAAA,QACR,QAAQ,MAAM,iCAAiC;AAAA,QAC/C,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,QAAQ,oBAAoB,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,kBAAkB,GAAG,CAAC;AAAA,MAC5F,KAAK,OAAO;AAAA,QACV,QAAQ,MAAM,gBAAgB,MAAM;AAAA,QACpC,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,QAAQ,IAAI,MAAM,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,KAAK,KAAK;AAAA,QACR,QAAQ,MAAM,iCAAiC;AAAA,QAC/C,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,QAAQ,IACN,SAAS,cAAc,kBAAkB,GAAG,CAAC,IAAI,WAAW,QAAQ,gBAAgB,MACtF;AAAA,MACA;AAAA,IACF;AAAA;AAAA,MAEE,QAAQ,MAAM,uBAAuB,kCAA4B;AAAA,MACjE,QAAQ,WAAW;AAAA;AAAA;",
8
- "debugId": "05140DB28456402E64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAM,eAAe;AAEd,SAAS,YAAY,CAAC,MAAsB;AAAA,EACjD,OAAO,KAAK,KAAK,UAAU,aAAa;AAAA,EAExC,QAAQ;AAAA,SACD;AAAA,SACA,QAAQ;AAAA,MACX,MAAM,UAAU,oBAAoB,YAAY;AAAA,MAChD,IAAI,QAAQ,WAAW,GAAG;AAAA,QACxB,QAAQ,IAAI,yEAAmE;AAAA,QAC/E;AAAA,MACF;AAAA,MACA,WAAW,SAAS,SAAS;AAAA,QAC3B,QAAQ,IAAI,GAAG,MAAM,QAAQ,MAAM,eAAe,KAAK,QAAQ,CAAC;AAAA,MAClE;AAAA,MACA;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,KAAK,QAAQ,OAAO;AAAA,QAClB,QAAQ,MAAM,uDAAuD;AAAA,QACrE,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,aAAa,kBAAkB,GAAG;AAAA,MACxC,KAAK,iBAAiB,UAAU,GAAG;AAAA,QACjC,QAAQ,MAAM,8EAAwE;AAAA,QACtF,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,aAAa,OAAO,WAAW,OAAO,MAAM;AAAA,MAClD,IAAI,aAAa,yBAAyB,aAAa,uBAAuB;AAAA,QAC5E,QAAQ,MACN,yBAAyB,6BAA6B,6BACxD;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,cAAc,UAAU,KAAK,GAAG;AAAA,MACtC,IAAI,YAAY,SAAS,8BAA8B;AAAA,QACrD,QAAQ,MAAM,+BAA+B,yCAAyC;AAAA,QACtF,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,SAAS,cAAc,YAAY,OAAO,WAAW;AAAA,MACrD,QAAQ,IAAI,UAAU,YAAY;AAAA,MAClC;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,KAAK,KAAK;AAAA,QACR,QAAQ,MAAM,iCAAiC;AAAA,QAC/C,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,MAAM,QAAQ,oBAAoB,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,kBAAkB,GAAG,CAAC;AAAA,MAC5F,KAAK,OAAO;AAAA,QACV,QAAQ,MAAM,gBAAgB,MAAM;AAAA,QACpC,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,QAAQ,IAAI,MAAM,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,KAAK,KAAK;AAAA,QACR,QAAQ,MAAM,iCAAiC;AAAA,QAC/C,QAAQ,WAAW;AAAA,QACnB;AAAA,MACF;AAAA,MACA,QAAQ,IACN,SAAS,cAAc,kBAAkB,GAAG,CAAC,IAAI,WAAW,QAAQ,gBAAgB,MACtF;AAAA,MACA;AAAA,IACF;AAAA;AAAA,MAEE,QAAQ,MAAM,uBAAuB,kCAA4B;AAAA,MACjE,QAAQ,WAAW;AAAA;AAAA;",
8
+ "debugId": "EE1D095AA690E88864756E2164756E21",
9
9
  "names": []
10
10
  }