@mebular/core 0.0.0-stage → 0.1.0

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 (529) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +155 -2
  3. package/dist/core/GraphStore.d.ts +54 -0
  4. package/dist/core/GraphStore.d.ts.map +1 -0
  5. package/dist/core/GraphStore.js +374 -0
  6. package/dist/core/GraphStore.js.map +1 -0
  7. package/dist/core/displayName.d.ts +5 -0
  8. package/dist/core/displayName.d.ts.map +1 -0
  9. package/dist/core/displayName.js +28 -0
  10. package/dist/core/displayName.js.map +1 -0
  11. package/dist/core/namespace.d.ts +52 -0
  12. package/dist/core/namespace.d.ts.map +1 -0
  13. package/dist/core/namespace.js +107 -0
  14. package/dist/core/namespace.js.map +1 -0
  15. package/dist/core/stateHash.d.ts +15 -0
  16. package/dist/core/stateHash.d.ts.map +1 -0
  17. package/dist/core/stateHash.js +69 -0
  18. package/dist/core/stateHash.js.map +1 -0
  19. package/dist/crypto/IdentityManager.d.ts +67 -0
  20. package/dist/crypto/IdentityManager.d.ts.map +1 -0
  21. package/dist/crypto/IdentityManager.js +217 -0
  22. package/dist/crypto/IdentityManager.js.map +1 -0
  23. package/dist/crypto/KeyProtector.d.ts +24 -0
  24. package/dist/crypto/KeyProtector.d.ts.map +1 -0
  25. package/dist/crypto/KeyProtector.js +62 -0
  26. package/dist/crypto/KeyProtector.js.map +1 -0
  27. package/dist/crypto/StorageCipher.d.ts +21 -0
  28. package/dist/crypto/StorageCipher.d.ts.map +1 -0
  29. package/dist/crypto/StorageCipher.js +108 -0
  30. package/dist/crypto/StorageCipher.js.map +1 -0
  31. package/dist/errors.d.ts +111 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +147 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/eventlog/EventLog.d.ts +53 -0
  36. package/dist/eventlog/EventLog.d.ts.map +1 -0
  37. package/dist/eventlog/EventLog.js +175 -0
  38. package/dist/eventlog/EventLog.js.map +1 -0
  39. package/dist/eventlog/index.d.ts +3 -0
  40. package/dist/eventlog/index.d.ts.map +1 -0
  41. package/dist/eventlog/index.js +3 -0
  42. package/dist/eventlog/index.js.map +1 -0
  43. package/dist/exchange/adapter.d.ts +50 -0
  44. package/dist/exchange/adapter.d.ts.map +1 -0
  45. package/dist/exchange/adapter.js +89 -0
  46. package/dist/exchange/adapter.js.map +1 -0
  47. package/dist/exchange/builtin-adapters.d.ts +15 -0
  48. package/dist/exchange/builtin-adapters.d.ts.map +1 -0
  49. package/dist/exchange/builtin-adapters.js +98 -0
  50. package/dist/exchange/builtin-adapters.js.map +1 -0
  51. package/dist/exchange/cmf.d.ts +83 -0
  52. package/dist/exchange/cmf.d.ts.map +1 -0
  53. package/dist/exchange/cmf.js +411 -0
  54. package/dist/exchange/cmf.js.map +1 -0
  55. package/dist/exchange/hermes-adapter.d.ts +11 -0
  56. package/dist/exchange/hermes-adapter.d.ts.map +1 -0
  57. package/dist/exchange/hermes-adapter.js +162 -0
  58. package/dist/exchange/hermes-adapter.js.map +1 -0
  59. package/dist/exchange/import-keys.d.ts +7 -0
  60. package/dist/exchange/import-keys.d.ts.map +1 -0
  61. package/dist/exchange/import-keys.js +21 -0
  62. package/dist/exchange/import-keys.js.map +1 -0
  63. package/dist/exchange/index.d.ts +9 -0
  64. package/dist/exchange/index.d.ts.map +1 -0
  65. package/dist/exchange/index.js +10 -0
  66. package/dist/exchange/index.js.map +1 -0
  67. package/dist/exchange/json-memo-adapter.d.ts +17 -0
  68. package/dist/exchange/json-memo-adapter.d.ts.map +1 -0
  69. package/dist/exchange/json-memo-adapter.js +64 -0
  70. package/dist/exchange/json-memo-adapter.js.map +1 -0
  71. package/dist/exchange/log-journal-adapter.d.ts +15 -0
  72. package/dist/exchange/log-journal-adapter.d.ts.map +1 -0
  73. package/dist/exchange/log-journal-adapter.js +161 -0
  74. package/dist/exchange/log-journal-adapter.js.map +1 -0
  75. package/dist/exchange/obsidian-adapter.d.ts +24 -0
  76. package/dist/exchange/obsidian-adapter.d.ts.map +1 -0
  77. package/dist/exchange/obsidian-adapter.js +267 -0
  78. package/dist/exchange/obsidian-adapter.js.map +1 -0
  79. package/dist/hermes/HermesMemoryProvider.d.ts +31 -0
  80. package/dist/hermes/HermesMemoryProvider.d.ts.map +1 -0
  81. package/dist/hermes/HermesMemoryProvider.js +84 -0
  82. package/dist/hermes/HermesMemoryProvider.js.map +1 -0
  83. package/dist/hermes/import/HermesImporter.d.ts +39 -0
  84. package/dist/hermes/import/HermesImporter.d.ts.map +1 -0
  85. package/dist/hermes/import/HermesImporter.js +246 -0
  86. package/dist/hermes/import/HermesImporter.js.map +1 -0
  87. package/dist/hermes/import/index.d.ts +3 -0
  88. package/dist/hermes/import/index.d.ts.map +1 -0
  89. package/dist/hermes/import/index.js +4 -0
  90. package/dist/hermes/import/index.js.map +1 -0
  91. package/dist/hermes/import/markdown.d.ts +18 -0
  92. package/dist/hermes/import/markdown.d.ts.map +1 -0
  93. package/dist/hermes/import/markdown.js +64 -0
  94. package/dist/hermes/import/markdown.js.map +1 -0
  95. package/dist/hermes/index.d.ts +5 -0
  96. package/dist/hermes/index.d.ts.map +1 -0
  97. package/dist/hermes/index.js +5 -0
  98. package/dist/hermes/index.js.map +1 -0
  99. package/dist/hermes/types.d.ts +182 -0
  100. package/dist/hermes/types.d.ts.map +1 -0
  101. package/dist/hermes/types.js +7 -0
  102. package/dist/hermes/types.js.map +1 -0
  103. package/dist/index.d.ts +24 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +26 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/mebular.d.ts +537 -0
  108. package/dist/mebular.d.ts.map +1 -0
  109. package/dist/mebular.js +1178 -0
  110. package/dist/mebular.js.map +1 -0
  111. package/dist/memory/MemoryService.d.ts +97 -0
  112. package/dist/memory/MemoryService.d.ts.map +1 -0
  113. package/dist/memory/MemoryService.js +518 -0
  114. package/dist/memory/MemoryService.js.map +1 -0
  115. package/dist/memory/MemoryStore.d.ts +93 -0
  116. package/dist/memory/MemoryStore.d.ts.map +1 -0
  117. package/dist/memory/MemoryStore.js +371 -0
  118. package/dist/memory/MemoryStore.js.map +1 -0
  119. package/dist/memory/VectorIndex.d.ts +20 -0
  120. package/dist/memory/VectorIndex.d.ts.map +1 -0
  121. package/dist/memory/VectorIndex.js +6 -0
  122. package/dist/memory/VectorIndex.js.map +1 -0
  123. package/dist/memory/embedding.d.ts +32 -0
  124. package/dist/memory/embedding.d.ts.map +1 -0
  125. package/dist/memory/embedding.js +81 -0
  126. package/dist/memory/embedding.js.map +1 -0
  127. package/dist/memory/index.d.ts +7 -0
  128. package/dist/memory/index.d.ts.map +1 -0
  129. package/dist/memory/index.js +7 -0
  130. package/dist/memory/index.js.map +1 -0
  131. package/dist/memory/text.d.ts +6 -0
  132. package/dist/memory/text.d.ts.map +1 -0
  133. package/dist/memory/text.js +37 -0
  134. package/dist/memory/text.js.map +1 -0
  135. package/dist/memory/transformers.d.ts +67 -0
  136. package/dist/memory/transformers.d.ts.map +1 -0
  137. package/dist/memory/transformers.js +108 -0
  138. package/dist/memory/transformers.js.map +1 -0
  139. package/dist/memory/types.d.ts +125 -0
  140. package/dist/memory/types.d.ts.map +1 -0
  141. package/dist/memory/types.js +43 -0
  142. package/dist/memory/types.js.map +1 -0
  143. package/dist/p2p/DeviceDiscovery.d.ts +67 -0
  144. package/dist/p2p/DeviceDiscovery.d.ts.map +1 -0
  145. package/dist/p2p/DeviceDiscovery.js +199 -0
  146. package/dist/p2p/DeviceDiscovery.js.map +1 -0
  147. package/dist/p2p/P2PNetwork.d.ts +321 -0
  148. package/dist/p2p/P2PNetwork.d.ts.map +1 -0
  149. package/dist/p2p/P2PNetwork.js +825 -0
  150. package/dist/p2p/P2PNetwork.js.map +1 -0
  151. package/dist/p2p/connection/ConnectionManager.d.ts +84 -0
  152. package/dist/p2p/connection/ConnectionManager.d.ts.map +1 -0
  153. package/dist/p2p/connection/ConnectionManager.js +382 -0
  154. package/dist/p2p/connection/ConnectionManager.js.map +1 -0
  155. package/dist/p2p/connection/EndpointBook.d.ts +112 -0
  156. package/dist/p2p/connection/EndpointBook.d.ts.map +1 -0
  157. package/dist/p2p/connection/EndpointBook.js +318 -0
  158. package/dist/p2p/connection/EndpointBook.js.map +1 -0
  159. package/dist/p2p/connection/RelayPolicy.d.ts +46 -0
  160. package/dist/p2p/connection/RelayPolicy.d.ts.map +1 -0
  161. package/dist/p2p/connection/RelayPolicy.js +37 -0
  162. package/dist/p2p/connection/RelayPolicy.js.map +1 -0
  163. package/dist/p2p/discovery/bonjourDefault.d.ts +13 -0
  164. package/dist/p2p/discovery/bonjourDefault.d.ts.map +1 -0
  165. package/dist/p2p/discovery/bonjourDefault.js +64 -0
  166. package/dist/p2p/discovery/bonjourDefault.js.map +1 -0
  167. package/dist/p2p/handshake/AuthenticationHandshake.d.ts +152 -0
  168. package/dist/p2p/handshake/AuthenticationHandshake.d.ts.map +1 -0
  169. package/dist/p2p/handshake/AuthenticationHandshake.js +523 -0
  170. package/dist/p2p/handshake/AuthenticationHandshake.js.map +1 -0
  171. package/dist/p2p/index.d.ts +13 -0
  172. package/dist/p2p/index.d.ts.map +1 -0
  173. package/dist/p2p/index.js +14 -0
  174. package/dist/p2p/index.js.map +1 -0
  175. package/dist/p2p/nat/NATTraversal.d.ts +71 -0
  176. package/dist/p2p/nat/NATTraversal.d.ts.map +1 -0
  177. package/dist/p2p/nat/NATTraversal.js +224 -0
  178. package/dist/p2p/nat/NATTraversal.js.map +1 -0
  179. package/dist/p2p/relay/RelayRole.d.ts +31 -0
  180. package/dist/p2p/relay/RelayRole.d.ts.map +1 -0
  181. package/dist/p2p/relay/RelayRole.js +53 -0
  182. package/dist/p2p/relay/RelayRole.js.map +1 -0
  183. package/dist/p2p/secure/SecureChannelImpl.d.ts +75 -0
  184. package/dist/p2p/secure/SecureChannelImpl.d.ts.map +1 -0
  185. package/dist/p2p/secure/SecureChannelImpl.js +343 -0
  186. package/dist/p2p/secure/SecureChannelImpl.js.map +1 -0
  187. package/dist/p2p/transport/InMemoryTransport.d.ts +95 -0
  188. package/dist/p2p/transport/InMemoryTransport.d.ts.map +1 -0
  189. package/dist/p2p/transport/InMemoryTransport.js +219 -0
  190. package/dist/p2p/transport/InMemoryTransport.js.map +1 -0
  191. package/dist/p2p/transport/Libp2pProvider.d.ts +205 -0
  192. package/dist/p2p/transport/Libp2pProvider.d.ts.map +1 -0
  193. package/dist/p2p/transport/Libp2pProvider.js +522 -0
  194. package/dist/p2p/transport/Libp2pProvider.js.map +1 -0
  195. package/dist/storage/JsonFileStorage.d.ts +45 -0
  196. package/dist/storage/JsonFileStorage.d.ts.map +1 -0
  197. package/dist/storage/JsonFileStorage.js +167 -0
  198. package/dist/storage/JsonFileStorage.js.map +1 -0
  199. package/dist/storage/MemoryStorage.d.ts +39 -0
  200. package/dist/storage/MemoryStorage.d.ts.map +1 -0
  201. package/dist/storage/MemoryStorage.js +285 -0
  202. package/dist/storage/MemoryStorage.js.map +1 -0
  203. package/dist/storage/SqliteStorage.d.ts +48 -0
  204. package/dist/storage/SqliteStorage.d.ts.map +1 -0
  205. package/dist/storage/SqliteStorage.js +184 -0
  206. package/dist/storage/SqliteStorage.js.map +1 -0
  207. package/dist/storage/StorageAdapter.d.ts +25 -0
  208. package/dist/storage/StorageAdapter.d.ts.map +1 -0
  209. package/dist/storage/StorageAdapter.js +3 -0
  210. package/dist/storage/StorageAdapter.js.map +1 -0
  211. package/dist/sync/apply.d.ts +25 -0
  212. package/dist/sync/apply.d.ts.map +1 -0
  213. package/dist/sync/apply.js +403 -0
  214. package/dist/sync/apply.js.map +1 -0
  215. package/dist/sync/convergence.d.ts +185 -0
  216. package/dist/sync/convergence.d.ts.map +1 -0
  217. package/dist/sync/convergence.js +463 -0
  218. package/dist/sync/convergence.js.map +1 -0
  219. package/dist/sync/grantPolicy.d.ts +305 -0
  220. package/dist/sync/grantPolicy.d.ts.map +1 -0
  221. package/dist/sync/grantPolicy.js +1103 -0
  222. package/dist/sync/grantPolicy.js.map +1 -0
  223. package/dist/sync/index.d.ts +9 -0
  224. package/dist/sync/index.d.ts.map +1 -0
  225. package/dist/sync/index.js +12 -0
  226. package/dist/sync/index.js.map +1 -0
  227. package/dist/sync/namespacePolicy.d.ts +32 -0
  228. package/dist/sync/namespacePolicy.d.ts.map +1 -0
  229. package/dist/sync/namespacePolicy.js +24 -0
  230. package/dist/sync/namespacePolicy.js.map +1 -0
  231. package/dist/sync/netEndpoints.d.ts +62 -0
  232. package/dist/sync/netEndpoints.d.ts.map +1 -0
  233. package/dist/sync/netEndpoints.js +131 -0
  234. package/dist/sync/netEndpoints.js.map +1 -0
  235. package/dist/sync/protocol.d.ts +141 -0
  236. package/dist/sync/protocol.d.ts.map +1 -0
  237. package/dist/sync/protocol.js +195 -0
  238. package/dist/sync/protocol.js.map +1 -0
  239. package/dist/sync/syncmgr/PeerFrames.d.ts +38 -0
  240. package/dist/sync/syncmgr/PeerFrames.d.ts.map +1 -0
  241. package/dist/sync/syncmgr/PeerFrames.js +116 -0
  242. package/dist/sync/syncmgr/PeerFrames.js.map +1 -0
  243. package/dist/sync/syncmgr/SyncManager.d.ts +517 -0
  244. package/dist/sync/syncmgr/SyncManager.d.ts.map +1 -0
  245. package/dist/sync/syncmgr/SyncManager.js +1539 -0
  246. package/dist/sync/syncmgr/SyncManager.js.map +1 -0
  247. package/dist/sync/trust.d.ts +7 -0
  248. package/dist/sync/trust.d.ts.map +1 -0
  249. package/dist/sync/trust.js +46 -0
  250. package/dist/sync/trust.js.map +1 -0
  251. package/dist/sync/vectorclock/VectorClock.d.ts +15 -0
  252. package/dist/sync/vectorclock/VectorClock.d.ts.map +1 -0
  253. package/dist/sync/vectorclock/VectorClock.js +65 -0
  254. package/dist/sync/vectorclock/VectorClock.js.map +1 -0
  255. package/dist/sync/vectorclock/index.d.ts +2 -0
  256. package/dist/sync/vectorclock/index.d.ts.map +1 -0
  257. package/dist/sync/vectorclock/index.js +3 -0
  258. package/dist/sync/vectorclock/index.js.map +1 -0
  259. package/dist/types/common.d.ts +15 -0
  260. package/dist/types/common.d.ts.map +1 -0
  261. package/dist/types/common.js +3 -0
  262. package/dist/types/common.js.map +1 -0
  263. package/dist/types/config.d.ts +47 -0
  264. package/dist/types/config.d.ts.map +1 -0
  265. package/dist/types/config.js +3 -0
  266. package/dist/types/config.js.map +1 -0
  267. package/dist/types/edge.d.ts +38 -0
  268. package/dist/types/edge.d.ts.map +1 -0
  269. package/dist/types/edge.js +3 -0
  270. package/dist/types/edge.js.map +1 -0
  271. package/dist/types/event.d.ts +53 -0
  272. package/dist/types/event.d.ts.map +1 -0
  273. package/dist/types/event.js +3 -0
  274. package/dist/types/event.js.map +1 -0
  275. package/dist/types/index.d.ts +8 -0
  276. package/dist/types/index.d.ts.map +1 -0
  277. package/dist/types/index.js +9 -0
  278. package/dist/types/index.js.map +1 -0
  279. package/dist/types/node.d.ts +48 -0
  280. package/dist/types/node.d.ts.map +1 -0
  281. package/dist/types/node.js +3 -0
  282. package/dist/types/node.js.map +1 -0
  283. package/dist/types/traverse.d.ts +24 -0
  284. package/dist/types/traverse.d.ts.map +1 -0
  285. package/dist/types/traverse.js +3 -0
  286. package/dist/types/traverse.js.map +1 -0
  287. package/dist/types/vectorclock.d.ts +16 -0
  288. package/dist/types/vectorclock.d.ts.map +1 -0
  289. package/dist/types/vectorclock.js +3 -0
  290. package/dist/types/vectorclock.js.map +1 -0
  291. package/locales/README.md +100 -0
  292. package/locales/en-US/console.json +1214 -0
  293. package/locales/en-US/desktop.json +141 -0
  294. package/locales/en-US/errors.json +90 -0
  295. package/locales/manifest.json +30 -0
  296. package/locales/zh-CN/console.json +1214 -0
  297. package/locales/zh-CN/desktop.json +141 -0
  298. package/locales/zh-CN/errors.json +90 -0
  299. package/package.json +252 -4
  300. package/packages/console/assistant-status.js +105 -0
  301. package/packages/console/assistants.js +395 -0
  302. package/packages/console/console.css +2228 -0
  303. package/packages/console/console.js +6341 -0
  304. package/packages/console/deep-link.js +38 -0
  305. package/packages/console/dropdown.mjs +464 -0
  306. package/packages/console/host.js +278 -0
  307. package/packages/console/i18n.mjs +753 -0
  308. package/packages/console/index.html +390 -0
  309. package/packages/console/nebula.js +498 -0
  310. package/packages/console/package.json +24 -0
  311. package/packages/console/scripts/seed-demo.mjs +94 -0
  312. package/packages/console/scripts/verify-console-ui.mjs +4784 -0
  313. package/packages/console/scripts/verify-console.mjs +2516 -0
  314. package/packages/console/scripts/verify-subscription-ui.mjs +46 -0
  315. package/packages/console/settings-ia.js +458 -0
  316. package/packages/console/shell-boot.js +49 -0
  317. package/packages/console/starfield.js +2050 -0
  318. package/packages/console/stars.js +213 -0
  319. package/packages/console/wizard.js +47 -0
  320. package/packages/fleet/dist/agentdir.d.ts +43 -0
  321. package/packages/fleet/dist/agentdir.d.ts.map +1 -0
  322. package/packages/fleet/dist/agentdir.js +107 -0
  323. package/packages/fleet/dist/agentdir.js.map +1 -0
  324. package/packages/fleet/dist/cli.d.ts +3 -0
  325. package/packages/fleet/dist/cli.d.ts.map +1 -0
  326. package/packages/fleet/dist/cli.js +1135 -0
  327. package/packages/fleet/dist/cli.js.map +1 -0
  328. package/packages/fleet/dist/collab/chatter.d.ts +54 -0
  329. package/packages/fleet/dist/collab/chatter.d.ts.map +1 -0
  330. package/packages/fleet/dist/collab/chatter.js +94 -0
  331. package/packages/fleet/dist/collab/chatter.js.map +1 -0
  332. package/packages/fleet/dist/collab/dag.d.ts +27 -0
  333. package/packages/fleet/dist/collab/dag.d.ts.map +1 -0
  334. package/packages/fleet/dist/collab/dag.js +107 -0
  335. package/packages/fleet/dist/collab/dag.js.map +1 -0
  336. package/packages/fleet/dist/collab/negotiation.d.ts +60 -0
  337. package/packages/fleet/dist/collab/negotiation.d.ts.map +1 -0
  338. package/packages/fleet/dist/collab/negotiation.js +90 -0
  339. package/packages/fleet/dist/collab/negotiation.js.map +1 -0
  340. package/packages/fleet/dist/collab/tree.d.ts +39 -0
  341. package/packages/fleet/dist/collab/tree.d.ts.map +1 -0
  342. package/packages/fleet/dist/collab/tree.js +177 -0
  343. package/packages/fleet/dist/collab/tree.js.map +1 -0
  344. package/packages/fleet/dist/config.d.ts +123 -0
  345. package/packages/fleet/dist/config.d.ts.map +1 -0
  346. package/packages/fleet/dist/config.js +206 -0
  347. package/packages/fleet/dist/config.js.map +1 -0
  348. package/packages/fleet/dist/index.d.ts +33 -0
  349. package/packages/fleet/dist/index.d.ts.map +1 -0
  350. package/packages/fleet/dist/index.js +40 -0
  351. package/packages/fleet/dist/index.js.map +1 -0
  352. package/packages/fleet/dist/join.d.ts +50 -0
  353. package/packages/fleet/dist/join.d.ts.map +1 -0
  354. package/packages/fleet/dist/join.js +167 -0
  355. package/packages/fleet/dist/join.js.map +1 -0
  356. package/packages/fleet/dist/jointoken.d.ts +144 -0
  357. package/packages/fleet/dist/jointoken.d.ts.map +1 -0
  358. package/packages/fleet/dist/jointoken.js +472 -0
  359. package/packages/fleet/dist/jointoken.js.map +1 -0
  360. package/packages/fleet/dist/model.d.ts +64 -0
  361. package/packages/fleet/dist/model.d.ts.map +1 -0
  362. package/packages/fleet/dist/model.js +158 -0
  363. package/packages/fleet/dist/model.js.map +1 -0
  364. package/packages/fleet/dist/onboard.d.ts +90 -0
  365. package/packages/fleet/dist/onboard.d.ts.map +1 -0
  366. package/packages/fleet/dist/onboard.js +510 -0
  367. package/packages/fleet/dist/onboard.js.map +1 -0
  368. package/packages/fleet/dist/protocol/envelope.d.ts +94 -0
  369. package/packages/fleet/dist/protocol/envelope.d.ts.map +1 -0
  370. package/packages/fleet/dist/protocol/envelope.js +169 -0
  371. package/packages/fleet/dist/protocol/envelope.js.map +1 -0
  372. package/packages/fleet/dist/protocol/events.d.ts +51 -0
  373. package/packages/fleet/dist/protocol/events.d.ts.map +1 -0
  374. package/packages/fleet/dist/protocol/events.js +87 -0
  375. package/packages/fleet/dist/protocol/events.js.map +1 -0
  376. package/packages/fleet/dist/qr.d.ts +15 -0
  377. package/packages/fleet/dist/qr.d.ts.map +1 -0
  378. package/packages/fleet/dist/qr.js +52 -0
  379. package/packages/fleet/dist/qr.js.map +1 -0
  380. package/packages/fleet/dist/quickstart.d.ts +167 -0
  381. package/packages/fleet/dist/quickstart.d.ts.map +1 -0
  382. package/packages/fleet/dist/quickstart.js +482 -0
  383. package/packages/fleet/dist/quickstart.js.map +1 -0
  384. package/packages/fleet/dist/quota.d.ts +41 -0
  385. package/packages/fleet/dist/quota.d.ts.map +1 -0
  386. package/packages/fleet/dist/quota.js +84 -0
  387. package/packages/fleet/dist/quota.js.map +1 -0
  388. package/packages/fleet/dist/runtime/agent.d.ts +100 -0
  389. package/packages/fleet/dist/runtime/agent.d.ts.map +1 -0
  390. package/packages/fleet/dist/runtime/agent.js +260 -0
  391. package/packages/fleet/dist/runtime/agent.js.map +1 -0
  392. package/packages/fleet/dist/runtime/executor.d.ts +42 -0
  393. package/packages/fleet/dist/runtime/executor.d.ts.map +1 -0
  394. package/packages/fleet/dist/runtime/executor.js +87 -0
  395. package/packages/fleet/dist/runtime/executor.js.map +1 -0
  396. package/packages/fleet/dist/runtime/fairness.d.ts +25 -0
  397. package/packages/fleet/dist/runtime/fairness.d.ts.map +1 -0
  398. package/packages/fleet/dist/runtime/fairness.js +79 -0
  399. package/packages/fleet/dist/runtime/fairness.js.map +1 -0
  400. package/packages/fleet/dist/runtime/node.d.ts +91 -0
  401. package/packages/fleet/dist/runtime/node.d.ts.map +1 -0
  402. package/packages/fleet/dist/runtime/node.js +203 -0
  403. package/packages/fleet/dist/runtime/node.js.map +1 -0
  404. package/packages/fleet/dist/runtime/openchamber-http.d.ts +27 -0
  405. package/packages/fleet/dist/runtime/openchamber-http.d.ts.map +1 -0
  406. package/packages/fleet/dist/runtime/openchamber-http.js +118 -0
  407. package/packages/fleet/dist/runtime/openchamber-http.js.map +1 -0
  408. package/packages/fleet/dist/runtime/openchamber.d.ts +38 -0
  409. package/packages/fleet/dist/runtime/openchamber.d.ts.map +1 -0
  410. package/packages/fleet/dist/runtime/openchamber.js +43 -0
  411. package/packages/fleet/dist/runtime/openchamber.js.map +1 -0
  412. package/packages/fleet/dist/runtime/planner.d.ts +23 -0
  413. package/packages/fleet/dist/runtime/planner.d.ts.map +1 -0
  414. package/packages/fleet/dist/runtime/planner.js +17 -0
  415. package/packages/fleet/dist/runtime/planner.js.map +1 -0
  416. package/packages/fleet/dist/runtime/worker.d.ts +96 -0
  417. package/packages/fleet/dist/runtime/worker.d.ts.map +1 -0
  418. package/packages/fleet/dist/runtime/worker.js +296 -0
  419. package/packages/fleet/dist/runtime/worker.js.map +1 -0
  420. package/packages/fleet/dist/security.d.ts +462 -0
  421. package/packages/fleet/dist/security.d.ts.map +1 -0
  422. package/packages/fleet/dist/security.js +1197 -0
  423. package/packages/fleet/dist/security.js.map +1 -0
  424. package/packages/fleet/dist/store/daemon-store.d.ts +33 -0
  425. package/packages/fleet/dist/store/daemon-store.d.ts.map +1 -0
  426. package/packages/fleet/dist/store/daemon-store.js +115 -0
  427. package/packages/fleet/dist/store/daemon-store.js.map +1 -0
  428. package/packages/fleet/dist/store/file-store.d.ts +22 -0
  429. package/packages/fleet/dist/store/file-store.d.ts.map +1 -0
  430. package/packages/fleet/dist/store/file-store.js +63 -0
  431. package/packages/fleet/dist/store/file-store.js.map +1 -0
  432. package/packages/fleet/dist/store/mebular-store.d.ts +22 -0
  433. package/packages/fleet/dist/store/mebular-store.d.ts.map +1 -0
  434. package/packages/fleet/dist/store/mebular-store.js +53 -0
  435. package/packages/fleet/dist/store/mebular-store.js.map +1 -0
  436. package/packages/fleet/dist/store/message-store.d.ts +26 -0
  437. package/packages/fleet/dist/store/message-store.d.ts.map +1 -0
  438. package/packages/fleet/dist/store/message-store.js +51 -0
  439. package/packages/fleet/dist/store/message-store.js.map +1 -0
  440. package/packages/fleet/dist/surface.d.ts +43 -0
  441. package/packages/fleet/dist/surface.d.ts.map +1 -0
  442. package/packages/fleet/dist/surface.js +515 -0
  443. package/packages/fleet/dist/surface.js.map +1 -0
  444. package/packages/fleet/dist/transport/null.d.ts +7 -0
  445. package/packages/fleet/dist/transport/null.d.ts.map +1 -0
  446. package/packages/fleet/dist/transport/null.js +16 -0
  447. package/packages/fleet/dist/transport/null.js.map +1 -0
  448. package/packages/fleet/dist/transport/spool.d.ts +12 -0
  449. package/packages/fleet/dist/transport/spool.d.ts.map +1 -0
  450. package/packages/fleet/dist/transport/spool.js +54 -0
  451. package/packages/fleet/dist/transport/spool.js.map +1 -0
  452. package/packages/fleet/dist/transport/types.d.ts +21 -0
  453. package/packages/fleet/dist/transport/types.d.ts.map +1 -0
  454. package/packages/fleet/dist/transport/types.js +6 -0
  455. package/packages/fleet/dist/transport/types.js.map +1 -0
  456. package/packages/fleet/dist/version.json +6 -0
  457. package/packages/fleet/package.json +39 -0
  458. package/packages/fleet/protocol/collab.example.json +23 -0
  459. package/packages/fleet/protocol/daemon-home.example.json +66 -0
  460. package/packages/fleet/protocol/envelope.example.json +12 -0
  461. package/packages/fleet/protocol/state-machine.json +14 -0
  462. package/packages/fleet/protocol/task-tree.example.json +72 -0
  463. package/packages/mcp/bin/mebular.mjs +1133 -0
  464. package/packages/mcp/package.json +32 -0
  465. package/packages/mcp/src/admin.mjs +1320 -0
  466. package/packages/mcp/src/apply-supervisor.mjs +48 -0
  467. package/packages/mcp/src/build-sha.mjs +36 -0
  468. package/packages/mcp/src/client.mjs +49 -0
  469. package/packages/mcp/src/clients.mjs +1242 -0
  470. package/packages/mcp/src/cloud-switch.mjs +258 -0
  471. package/packages/mcp/src/config-apply.mjs +251 -0
  472. package/packages/mcp/src/config-schema.mjs +690 -0
  473. package/packages/mcp/src/config.mjs +265 -0
  474. package/packages/mcp/src/fleet-events.mjs +207 -0
  475. package/packages/mcp/src/home.mjs +16 -0
  476. package/packages/mcp/src/jointoken.mjs +31 -0
  477. package/packages/mcp/src/lan-host.mjs +36 -0
  478. package/packages/mcp/src/profiles.mjs +681 -0
  479. package/packages/mcp/src/provision.mjs +673 -0
  480. package/packages/mcp/src/qr.mjs +4 -0
  481. package/packages/mcp/src/runtime-file.mjs +91 -0
  482. package/packages/mcp/src/serve.mjs +3478 -0
  483. package/packages/mcp/src/server.mjs +416 -0
  484. package/packages/mcp/src/service-control.mjs +107 -0
  485. package/packages/mcp/src/service-facade.mjs +43 -0
  486. package/packages/mcp/src/task-tools.mjs +45 -0
  487. package/packages/mcp/src/tool-envelope.mjs +50 -0
  488. package/packages/mcp/src/tools.mjs +397 -0
  489. package/packages/service/dist/cli.d.ts +17 -0
  490. package/packages/service/dist/cli.d.ts.map +1 -0
  491. package/packages/service/dist/cli.js +120 -0
  492. package/packages/service/dist/cli.js.map +1 -0
  493. package/packages/service/dist/heartbeat.d.ts +30 -0
  494. package/packages/service/dist/heartbeat.d.ts.map +1 -0
  495. package/packages/service/dist/heartbeat.js +69 -0
  496. package/packages/service/dist/heartbeat.js.map +1 -0
  497. package/packages/service/dist/index.d.ts +7 -0
  498. package/packages/service/dist/index.d.ts.map +1 -0
  499. package/packages/service/dist/index.js +8 -0
  500. package/packages/service/dist/index.js.map +1 -0
  501. package/packages/service/dist/launchd.d.ts +32 -0
  502. package/packages/service/dist/launchd.d.ts.map +1 -0
  503. package/packages/service/dist/launchd.js +102 -0
  504. package/packages/service/dist/launchd.js.map +1 -0
  505. package/packages/service/dist/manager.d.ts +169 -0
  506. package/packages/service/dist/manager.d.ts.map +1 -0
  507. package/packages/service/dist/manager.js +505 -0
  508. package/packages/service/dist/manager.js.map +1 -0
  509. package/packages/service/dist/paths.d.ts +17 -0
  510. package/packages/service/dist/paths.d.ts.map +1 -0
  511. package/packages/service/dist/paths.js +29 -0
  512. package/packages/service/dist/paths.js.map +1 -0
  513. package/packages/service/dist/units.d.ts +50 -0
  514. package/packages/service/dist/units.d.ts.map +1 -0
  515. package/packages/service/dist/units.js +173 -0
  516. package/packages/service/dist/units.js.map +1 -0
  517. package/packages/service/dist/version.json +6 -0
  518. package/packages/service/package.json +30 -0
  519. package/packages/skill/MEMORY_POLICY.md +104 -0
  520. package/packages/skill/SETUP.md +205 -0
  521. package/packages/skill/SKILL.md +66 -0
  522. package/packages/skill/mcp/claude.json +8 -0
  523. package/packages/skill/mcp/cursor.json +8 -0
  524. package/packages/skill/mcp/dsh.cordis.yml +13 -0
  525. package/packages/skill/mcp/generic.json +8 -0
  526. package/packages/skill/mcp/opencode.json +9 -0
  527. package/packages/skill/package.json +26 -0
  528. package/packages/skill/scripts/install.mjs +76 -0
  529. package/packages/skill/tasks/SKILL.md +81 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Windsander
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,156 @@
1
- # Temporary Holding Version
1
+ <div align="center">
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ <picture>
4
+ <source media="(prefers-color-scheme: light)" srcset="assets/banner-light.svg">
5
+ <img src="assets/banner.svg" alt="Mebular">
6
+ </picture>
7
+
8
+ **One memory. Every assistant. Every device.**
9
+
10
+ A distributed memory network for your AI assistants.<br>
11
+ Memory and tasks stay on your devices; devices sync directly.
12
+
13
+ [![CI](https://github.com/Windsander/Mebular/actions/workflows/ci.yml/badge.svg?style=flat-square)](https://github.com/Windsander/Mebular/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE) [![Node.js >=20](https://img.shields.io/badge/Node-%E2%89%A520-339933?logo=node.js&logoColor=white&style=flat-square)](docs/getting-started/QUICKSTART.md) [![MCP](https://img.shields.io/badge/MCP-5A67D8?style=flat-square)](docs/getting-started/QUICKSTART.md)
14
+
15
+ [Start in 5 minutes](docs/getting-started/QUICKSTART.md) · [How it works](docs/architecture/ARCHITECT.md) · [Website](https://mebular.cyberfederal.io) · [中文](README_CN.md)
16
+
17
+ <sub>No hosted account · No central coordinator</sub>
18
+
19
+ </div>
20
+
21
+ ---
22
+
23
+ <p align="center">
24
+ <img src="assets/star-map-baseline-en.jpg" width="49%" alt="Star map baseline: the device network before hovering">
25
+ <img src="assets/star-map-lanes-en.jpg" width="49%" alt="Task lanes and a fleet event: blue can send, gold can receive, gray unreachable">
26
+ </p>
27
+ <p align="center"><sub>The map at rest: devices and their shared-subscription edges. · On hover: task-domain lanes plus live fleet traffic.<br>Blue and gold show this device's two-way task-domain reachability, not peer-to-peer links.</sub></p>
28
+
29
+ ## One memory
30
+
31
+ <p align="center">
32
+ <picture>
33
+ <source media="(prefers-color-scheme: light)" srcset="assets/one-graph-en-light.svg">
34
+ <img src="assets/one-graph-en.svg" alt="Why Mebular: one shared graph instead of a silo; local-first, direct sync, auditable, MCP">
35
+ </picture>
36
+ </p>
37
+
38
+ ## Get started
39
+
40
+ <p align="center">
41
+ <picture>
42
+ <source media="(prefers-color-scheme: light)" srcset="assets/desktop-steps-en-light.svg">
43
+ <img src="assets/desktop-steps-en.svg" alt="Desktop app setup: 1 Start deployment, 2 Create or join a Cloud, 3 Invite the next device">
44
+ </picture>
45
+ </p>
46
+
47
+ <p align="center">
48
+ <picture>
49
+ <source media="(prefers-color-scheme: light)" srcset="assets/other-paths-en-light.svg">
50
+ <img src="assets/other-paths-en.svg" alt="Other ways to start: Browser, CLI and Agent, all sharing one graph">
51
+ </picture>
52
+ </p>
53
+
54
+ **Desktop app (v0.1.0, unsigned).** [Download from GitHub Releases](https://github.com/Windsander/Mebular/releases/tag/v0.1.0): macOS Universal DMG, Windows x64 NSIS, Linux x64 AppImage and deb. Verify every file against `SHA256SUMS.txt` first. macOS needs right-click → **Open** (or Privacy & Security → **Open Anyway**); Windows SmartScreen needs **More info → Run anyway**. The app bundles Electron and its runtime, so it needs no local Node.js.
55
+
56
+ **Or install the CLI and server:**
57
+
58
+ ```bash
59
+ npm install -g @mebular/core
60
+ mebular serve # browser console
61
+ fleet quickstart --daemon # CLI start
62
+ mebular print-config --client opencode # MCP config
63
+ ```
64
+
65
+ ## How it works
66
+
67
+ <p align="center">
68
+ <picture>
69
+ <source media="(prefers-color-scheme: light)" srcset="assets/network-overview-en-light.svg">
70
+ <img src="assets/network-overview-en.svg" alt="Mebular network overview: each machine runs one node; nodes sync memory and tasks directly; add devices with a QR code or token">
71
+ </picture>
72
+ </p>
73
+
74
+ <p align="center"><sub>Write with <code>memory_write</code>, hand off with <code>task_submit</code> — the same graph, from any assistant.</sub></p>
75
+
76
+ <p align="center">
77
+ <picture>
78
+ <source media="(prefers-color-scheme: light)" srcset="assets/pairing-flow-en-light.svg">
79
+ <img src="assets/pairing-flow-en.svg" alt="Pairing flow: device A invites, device B joins with the QR code or token, then connection and the default grant happen automatically">
80
+ </picture>
81
+ </p>
82
+
83
+ ## Docs
84
+
85
+ <table width="100%">
86
+ <thead>
87
+ <tr>
88
+ <th align="left">Start</th>
89
+ <th align="left">Learn</th>
90
+ <th align="left">Run</th>
91
+ <th align="left">Trust</th>
92
+ </tr>
93
+ </thead>
94
+ <tbody>
95
+ <tr>
96
+ <td><strong><a href="docs/getting-started/QUICKSTART.md">Quickstart</a></strong><br><sub>Install &amp; pair</sub></td>
97
+ <td><strong><a href="docs/architecture/ARCHITECT.md">Architecture</a></strong><br><sub>Nodes &amp; sync</sub></td>
98
+ <td><strong><a href="docs/console/README.md">Console</a></strong><br><sub>Local GUI</sub></td>
99
+ <td><strong><a href="docs/limitations/LIMITATIONS.md">Limitations</a></strong><br><sub>Sensitive data</sub></td>
100
+ </tr>
101
+ <tr>
102
+ <td><strong><a href="packages/skill/SETUP.md">Agent skills</a></strong><br><sub>Setup playbooks</sub></td>
103
+ <td><strong><a href="packages/fleet/RUNBOOK.md">Fleet ops</a></strong><br><sub>Multi-machine</sub></td>
104
+ <td><strong><a href="docs/operations/RELEASE.md">Release SOP</a></strong><br><sub>Release steps</sub></td>
105
+ <td><strong><a href="SEALING.md">Sealing docs</a></strong><br><sub>Protocol rules</sub></td>
106
+ </tr>
107
+ <tr>
108
+ <td><strong><a href="CHANGELOG.md">Changelog</a></strong><br><sub>Release notes</sub></td>
109
+ <td><strong><a href="CONTRIBUTING.md">Contributing</a></strong><br><sub>Quality gates</sub></td>
110
+ <td><strong><a href="SECURITY.md">Security</a></strong><br><sub>Report a vuln</sub></td>
111
+ <td><strong><a href="https://mebular.cyberfederal.io">Website</a></strong><br><sub>Product site</sub></td>
112
+ </tr>
113
+ </tbody>
114
+ </table>
115
+
116
+ <p align="center"><strong>Use with DSH</strong><br>
117
+ Keep the Mebular app running, then install the plugin from npm into DSH's web profile:<br>
118
+ <code>dsh plugin --profile web add @mebular/dsh-plugin@0.1.0</code><br>
119
+ A Mebular sidebar panel embeds the same Console through <code>?embed=dsh</code> (loopback only), and the official MCP client reaches the same graph. The plugin discovers the daemon by <code>daemonUrl &gt; MEBULAR_HTTP_PORT &gt; runtime.json &gt; 7331</code>, so custom ports follow automatically. It has its own version line and is not part of the five-package lockstep. For plugin development, install from <code>packages/dsh-plugin</code> instead.<br>
120
+ <a href="packages/dsh-plugin/README.md">DSH plugin guide →</a> · <a href="docs/integrations/DSH.md">Integration notes →</a></p>
121
+
122
+ <details>
123
+ <summary>Who does what</summary>
124
+
125
+ | Who | Handles |
126
+ |---|---|
127
+ | **You** | One-time pairing, Cloud choice, invites, subscriptions. |
128
+ | **Your assistant** | Memory reads and writes, task claim and completion. |
129
+ | **Mebular** | Discovery, direct / relay / hole-punch, retries, certificates, service autostart. |
130
+
131
+ </details>
132
+
133
+ <details>
134
+ <summary>Use it from code</summary>
135
+
136
+ ```ts
137
+ import { Mebular } from 'mebular';
138
+
139
+ const mebular = new Mebular({
140
+ storagePath: './store.jsonl',
141
+ deviceId: 'device-a',
142
+ network: { enabled: false },
143
+ });
144
+
145
+ await mebular.initialize();
146
+ ```
147
+
148
+ Runnable examples: [`examples/quickstart`](examples/quickstart/index.mjs) writes and recalls a preference; [`examples/two-devices`](examples/two-devices/index.mjs) demonstrates offline sync.
149
+
150
+ </details>
151
+
152
+ <div align="center">
153
+
154
+ v0.1.0 · early · MIT
155
+
156
+ </div>
@@ -0,0 +1,54 @@
1
+ import type { StorageAdapter } from '../storage/StorageAdapter.js';
2
+ import type { Node, Edge, NodeFilter, EdgeFilter, TraverseOptions, TraverseResult } from '../types/index.js';
3
+ import type { EventLog } from '../eventlog/EventLog.js';
4
+ export interface GraphStoreConfig {
5
+ storage: StorageAdapter;
6
+ author: string;
7
+ /** 配置后,所有图变更自动写入带签名的事件日志(Phase 3 同步的前提) */
8
+ eventLog?: EventLog;
9
+ }
10
+ export declare class GraphStore {
11
+ private storage;
12
+ private author;
13
+ private clock;
14
+ private eventLog?;
15
+ constructor(config: GraphStoreConfig);
16
+ createNode(type: string, content: Record<string, unknown>, labels?: string[], options?: {
17
+ validFrom?: number;
18
+ validTo?: number;
19
+ namespace?: string;
20
+ }): Promise<Node>;
21
+ updateNode(id: string, updates: Partial<Node>): Promise<Node | null>;
22
+ deleteNode(id: string): Promise<boolean>;
23
+ getNode(id: string): Promise<Node | null>;
24
+ listNodes(filter?: NodeFilter): Promise<Node[]>;
25
+ createEdge(source: string, target: string, relation: string, labels?: string[], options?: {
26
+ namespace?: string;
27
+ }): Promise<Edge>;
28
+ updateEdge(id: string, updates: Partial<Edge>): Promise<Edge | null>;
29
+ deleteEdge(id: string): Promise<boolean>;
30
+ /** 为节点添加标签(spec-003 AddTag;幂等) */
31
+ addTag(nodeId: string, tag: string): Promise<Node | null>;
32
+ /** 移除节点标签(spec-003 RemoveTag;幂等) */
33
+ removeTag(nodeId: string, tag: string): Promise<Node | null>;
34
+ getEdge(id: string): Promise<Edge | null>;
35
+ listEdges(filter?: EdgeFilter): Promise<Edge[]>;
36
+ getNeighbors(nodeId: string, direction?: 'incoming' | 'outgoing' | 'both'): Promise<Edge[]>;
37
+ /**
38
+ * 图遍历(spec-004 TraverseOptions):从起点 BFS,
39
+ * 支持深度/边类型/方向/删除过滤,visited 集合防环。
40
+ */
41
+ traverse(startId: string, options?: TraverseOptions): Promise<TraverseResult>;
42
+ batchAddNodes(nodes: Array<{
43
+ type: string;
44
+ content: Record<string, unknown>;
45
+ labels?: string[];
46
+ }>): Promise<Node[]>;
47
+ batchAddEdges(edges: Array<{
48
+ source: string;
49
+ target: string;
50
+ relation: string;
51
+ labels?: string[];
52
+ }>): Promise<Edge[]>;
53
+ }
54
+ //# sourceMappingURL=GraphStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphStore.d.ts","sourceRoot":"","sources":["../../src/core/GraphStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,374 @@
1
+ // GraphStore - 图存储核心实现
2
+ //
3
+ // 签名语义(D11,Phase 6.0 收口):实体不逐条签名(signature 字段保留
4
+ // 为空串),真实性由事件日志的内容寻址 ID + 事件级签名承载(Phase 3+)。
5
+ // 旧版 signatureManager 缝隙与 snapshot()/merge() 遗留已移除。
6
+ import { VectorClock } from '../sync/index.js';
7
+ import { matchesNamespace, normalizeNamespace } from './namespace.js';
8
+ import { ulid } from 'ulid';
9
+ export class GraphStore {
10
+ storage;
11
+ author;
12
+ clock;
13
+ eventLog;
14
+ constructor(config) {
15
+ this.storage = config.storage;
16
+ this.author = config.author;
17
+ this.clock = new VectorClock();
18
+ this.eventLog = config.eventLog;
19
+ }
20
+ async createNode(type, content, labels, options) {
21
+ const now = Date.now();
22
+ const node = {
23
+ id: ulid(),
24
+ type,
25
+ content,
26
+ labels: labels || [],
27
+ createdBy: this.author,
28
+ signature: '',
29
+ createdAt: now,
30
+ updatedAt: now,
31
+ validFrom: options?.validFrom ?? now,
32
+ validTo: options?.validTo ?? 9999999999999,
33
+ tags: [],
34
+ namespace: normalizeNamespace(options?.namespace),
35
+ };
36
+ this.clock.increment(this.author);
37
+ node.clocks = this.clock.toJSON();
38
+ node.vectorClock = this.clock.toJSON();
39
+ // 单一时钟源(D10 收口):事件日志存在时,实体时钟以事件时钟为准;
40
+ // 载荷用快照拷贝,避免随后的时钟盖写突变已被内容寻址的事件内容
41
+ if (this.eventLog) {
42
+ const event = await this.eventLog.append({
43
+ type: 'node_created',
44
+ data: { node: { ...node } },
45
+ namespace: node.namespace,
46
+ });
47
+ node.clocks = { ...event.vectorClock };
48
+ node.vectorClock = { ...event.vectorClock };
49
+ }
50
+ await this.storage.putNode(node);
51
+ return node;
52
+ }
53
+ async updateNode(id, updates) {
54
+ const existing = await this.storage.getNode(id);
55
+ if (!existing) {
56
+ return null;
57
+ }
58
+ const now = Date.now();
59
+ const updated = {
60
+ ...existing,
61
+ ...updates,
62
+ id,
63
+ updatedAt: now,
64
+ updatedBy: this.author,
65
+ createdAt: existing.createdAt,
66
+ validFrom: existing.validFrom,
67
+ validTo: existing.validTo,
68
+ tags: existing.tags,
69
+ vectorClock: this.clock.toJSON(),
70
+ };
71
+ this.clock.increment(this.author);
72
+ updated.clocks = this.clock.toJSON();
73
+ updated.vectorClock = this.clock.toJSON();
74
+ if (this.eventLog) {
75
+ const event = await this.eventLog.append({
76
+ type: 'node_updated',
77
+ data: { nodeId: id, newVersion: { ...updated } },
78
+ namespace: updated.namespace,
79
+ });
80
+ updated.clocks = { ...event.vectorClock };
81
+ updated.vectorClock = { ...event.vectorClock };
82
+ }
83
+ await this.storage.putNode(updated);
84
+ return updated;
85
+ }
86
+ async deleteNode(id) {
87
+ const existing = await this.storage.getNode(id);
88
+ if (!existing) {
89
+ return false;
90
+ }
91
+ const now = Date.now();
92
+ const deleted = {
93
+ ...existing,
94
+ deletedAt: now,
95
+ deletedBy: this.author,
96
+ validTo: now,
97
+ updatedAt: now,
98
+ };
99
+ this.clock.increment(this.author);
100
+ deleted.clocks = this.clock.toJSON();
101
+ deleted.vectorClock = this.clock.toJSON();
102
+ if (this.eventLog) {
103
+ const event = await this.eventLog.append({
104
+ type: 'node_deleted',
105
+ data: { nodeId: id, deletionTime: now },
106
+ namespace: deleted.namespace,
107
+ });
108
+ deleted.clocks = { ...event.vectorClock };
109
+ deleted.vectorClock = { ...event.vectorClock };
110
+ }
111
+ await this.storage.putNode(deleted);
112
+ return true;
113
+ }
114
+ async getNode(id) {
115
+ return this.storage.getNode(id);
116
+ }
117
+ async listNodes(filter) {
118
+ return this.storage.listNodes(filter || {});
119
+ }
120
+ async createEdge(source, target, relation, labels, options) {
121
+ const now = Date.now();
122
+ // 边归属其源节点分区(未指定时):保证边事件与快照按分区裁剪时一致
123
+ const sourceNode = await this.storage.getNode(source);
124
+ const namespace = normalizeNamespace(options?.namespace ?? sourceNode?.namespace);
125
+ const edge = {
126
+ id: ulid(),
127
+ type: 'edge',
128
+ source,
129
+ target,
130
+ relation,
131
+ createdBy: this.author,
132
+ signature: '',
133
+ createdAt: now,
134
+ updatedAt: now,
135
+ labels: labels || [],
136
+ validFrom: now,
137
+ validTo: 9999999999999,
138
+ namespace,
139
+ };
140
+ this.clock.increment(this.author);
141
+ edge.clocks = this.clock.toJSON();
142
+ edge.vectorClock = this.clock.toJSON();
143
+ if (this.eventLog) {
144
+ const event = await this.eventLog.append({
145
+ type: 'edge_created',
146
+ data: { edge: { ...edge } },
147
+ namespace: edge.namespace,
148
+ });
149
+ edge.clocks = { ...event.vectorClock };
150
+ edge.vectorClock = { ...event.vectorClock };
151
+ }
152
+ await this.storage.putEdge(edge);
153
+ return edge;
154
+ }
155
+ async updateEdge(id, updates) {
156
+ const existing = await this.storage.getEdge(id);
157
+ if (!existing) {
158
+ return null;
159
+ }
160
+ const now = Date.now();
161
+ const updated = {
162
+ ...existing,
163
+ ...updates,
164
+ id,
165
+ updatedAt: now,
166
+ updatedBy: this.author,
167
+ createdAt: existing.createdAt,
168
+ validFrom: existing.validFrom,
169
+ validTo: existing.validTo,
170
+ vectorClock: this.clock.toJSON(),
171
+ };
172
+ this.clock.increment(this.author);
173
+ updated.clocks = this.clock.toJSON();
174
+ updated.vectorClock = this.clock.toJSON();
175
+ if (this.eventLog) {
176
+ const event = await this.eventLog.append({
177
+ type: 'edge_updated',
178
+ data: { edgeId: id, newVersion: { ...updated } },
179
+ namespace: updated.namespace,
180
+ });
181
+ updated.clocks = { ...event.vectorClock };
182
+ updated.vectorClock = { ...event.vectorClock };
183
+ }
184
+ await this.storage.putEdge(updated);
185
+ return updated;
186
+ }
187
+ async deleteEdge(id) {
188
+ const existing = await this.storage.getEdge(id);
189
+ if (!existing) {
190
+ return false;
191
+ }
192
+ const now = Date.now();
193
+ const deleted = {
194
+ ...existing,
195
+ deletedAt: now,
196
+ deletedBy: this.author,
197
+ validTo: now,
198
+ updatedAt: now,
199
+ };
200
+ this.clock.increment(this.author);
201
+ deleted.clocks = this.clock.toJSON();
202
+ deleted.vectorClock = this.clock.toJSON();
203
+ if (this.eventLog) {
204
+ const event = await this.eventLog.append({
205
+ type: 'edge_deleted',
206
+ data: { edgeId: id, deletionTime: now },
207
+ namespace: deleted.namespace,
208
+ });
209
+ deleted.clocks = { ...event.vectorClock };
210
+ deleted.vectorClock = { ...event.vectorClock };
211
+ }
212
+ await this.storage.putEdge(deleted);
213
+ return true;
214
+ }
215
+ /** 为节点添加标签(spec-003 AddTag;幂等) */
216
+ async addTag(nodeId, tag) {
217
+ const existing = await this.storage.getNode(nodeId);
218
+ if (!existing) {
219
+ return null;
220
+ }
221
+ if ((existing.tags ?? []).includes(tag)) {
222
+ return existing;
223
+ }
224
+ const now = Date.now();
225
+ const updated = {
226
+ ...existing,
227
+ tags: [...(existing.tags ?? []), tag],
228
+ updatedAt: now,
229
+ updatedBy: this.author,
230
+ };
231
+ this.clock.increment(this.author);
232
+ updated.clocks = this.clock.toJSON();
233
+ updated.vectorClock = this.clock.toJSON();
234
+ if (this.eventLog) {
235
+ const event = await this.eventLog.append({
236
+ type: 'tag_added',
237
+ data: { nodeId, tag },
238
+ namespace: updated.namespace,
239
+ });
240
+ updated.clocks = { ...event.vectorClock };
241
+ updated.vectorClock = { ...event.vectorClock };
242
+ }
243
+ await this.storage.putNode(updated);
244
+ return updated;
245
+ }
246
+ /** 移除节点标签(spec-003 RemoveTag;幂等) */
247
+ async removeTag(nodeId, tag) {
248
+ const existing = await this.storage.getNode(nodeId);
249
+ if (!existing) {
250
+ return null;
251
+ }
252
+ if (!(existing.tags ?? []).includes(tag)) {
253
+ return existing;
254
+ }
255
+ const now = Date.now();
256
+ const updated = {
257
+ ...existing,
258
+ tags: (existing.tags ?? []).filter((t) => t !== tag),
259
+ updatedAt: now,
260
+ updatedBy: this.author,
261
+ };
262
+ this.clock.increment(this.author);
263
+ updated.clocks = this.clock.toJSON();
264
+ updated.vectorClock = this.clock.toJSON();
265
+ if (this.eventLog) {
266
+ const event = await this.eventLog.append({
267
+ type: 'tag_removed',
268
+ data: { nodeId, tag },
269
+ namespace: updated.namespace,
270
+ });
271
+ updated.clocks = { ...event.vectorClock };
272
+ updated.vectorClock = { ...event.vectorClock };
273
+ }
274
+ await this.storage.putNode(updated);
275
+ return updated;
276
+ }
277
+ async getEdge(id) {
278
+ return this.storage.getEdge(id);
279
+ }
280
+ async listEdges(filter) {
281
+ return this.storage.listEdges(filter || {});
282
+ }
283
+ async getNeighbors(nodeId, direction) {
284
+ const filter = { limit: 100 };
285
+ if (direction === 'incoming') {
286
+ filter.target = nodeId;
287
+ }
288
+ else if (direction === 'outgoing') {
289
+ filter.source = nodeId;
290
+ }
291
+ else {
292
+ const incoming = await this.storage.listEdges({ target: nodeId });
293
+ const outgoing = await this.storage.listEdges({ source: nodeId });
294
+ return [...incoming, ...outgoing];
295
+ }
296
+ return this.storage.listEdges(filter);
297
+ }
298
+ /**
299
+ * 图遍历(spec-004 TraverseOptions):从起点 BFS,
300
+ * 支持深度/边类型/方向/删除过滤,visited 集合防环。
301
+ */
302
+ async traverse(startId, options = {}) {
303
+ const maxDepth = options.maxDepth ?? 3;
304
+ const direction = options.direction ?? 'both';
305
+ const includeDeleted = options.includeDeleted ?? false;
306
+ const visited = options.visited ?? new Set();
307
+ // 分区隔离:指定 namespace 时,起点、邻居与边都必须落在该分区内
308
+ const namespaceFilter = options.namespace;
309
+ const result = { visitedNodes: [], visitedEdges: [], path: [] };
310
+ const start = await this.storage.getNode(startId);
311
+ if (!start ||
312
+ (!includeDeleted && start.deletedAt) ||
313
+ !matchesNamespace(start.namespace, namespaceFilter) ||
314
+ visited.has(startId)) {
315
+ return result;
316
+ }
317
+ visited.add(startId);
318
+ result.visitedNodes.push(start);
319
+ result.path.push({ nodeId: startId });
320
+ let frontier = [{ nodeId: startId, depth: 0 }];
321
+ while (frontier.length > 0) {
322
+ const next = [];
323
+ for (const { nodeId, depth } of frontier) {
324
+ if (depth >= maxDepth) {
325
+ continue;
326
+ }
327
+ const edges = await this.getNeighbors(nodeId, direction);
328
+ for (const edge of edges) {
329
+ if (!includeDeleted && edge.deletedAt) {
330
+ continue;
331
+ }
332
+ if (options.edgeTypes && !options.edgeTypes.includes(edge.relation)) {
333
+ continue;
334
+ }
335
+ if (!matchesNamespace(edge.namespace, namespaceFilter)) {
336
+ continue;
337
+ }
338
+ const otherId = edge.source === nodeId ? edge.target : edge.source;
339
+ if (visited.has(otherId)) {
340
+ continue;
341
+ }
342
+ const other = await this.storage.getNode(otherId);
343
+ if (!other || (!includeDeleted && other.deletedAt) || !matchesNamespace(other.namespace, namespaceFilter)) {
344
+ continue;
345
+ }
346
+ visited.add(otherId);
347
+ result.visitedEdges.push(edge);
348
+ result.visitedNodes.push(other);
349
+ result.path.push({ nodeId: otherId, edgeId: edge.id });
350
+ next.push({ nodeId: otherId, depth: depth + 1 });
351
+ }
352
+ }
353
+ frontier = next;
354
+ }
355
+ return result;
356
+ }
357
+ async batchAddNodes(nodes) {
358
+ const created = [];
359
+ for (const nodeData of nodes) {
360
+ const node = await this.createNode(nodeData.type, nodeData.content, nodeData.labels);
361
+ created.push(node);
362
+ }
363
+ return created;
364
+ }
365
+ async batchAddEdges(edges) {
366
+ const created = [];
367
+ for (const edgeData of edges) {
368
+ const edge = await this.createEdge(edgeData.source, edgeData.target, edgeData.relation, edgeData.labels);
369
+ created.push(edge);
370
+ }
371
+ return created;
372
+ }
373
+ }
374
+ //# sourceMappingURL=GraphStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphStore.js","sourceRoot":"","sources":["../../src/core/GraphStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** 规范化展示名;无效返回 null(调用方决定拒绝写入还是忽略事件)。 */
2
+ export declare function normalizeDisplayName(raw: unknown): string | null;
3
+ /** 展示名是否合法(不改变输入)。 */
4
+ export declare function isValidDisplayName(raw: unknown): boolean;
5
+ //# sourceMappingURL=displayName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayName.d.ts","sourceRoot":"","sources":["../../src/core/displayName.ts"],"names":[],"mappings":"AAYA,yCAAyC;AACzC,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAOhE;AAED,sBAAsB;AACtB,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAExD"}