holosphere 2.0.0-alpha1 → 2.0.0-alpha10

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 (418) hide show
  1. package/CHANGELOG.md +473 -0
  2. package/FEATURES.md +431 -0
  3. package/LICENSE +29 -166
  4. package/LICENSE-AGPL.md +180 -0
  5. package/README.md +97 -16
  6. package/dist/2019-D2OG2idw.js +6680 -0
  7. package/dist/2019-D2OG2idw.js.map +1 -0
  8. package/dist/2019-EION3wKo.cjs +8 -0
  9. package/dist/2019-EION3wKo.cjs.map +1 -0
  10. package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
  11. package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
  12. package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
  13. package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
  14. package/dist/browser-BSniCNqO.js +3058 -0
  15. package/dist/browser-BSniCNqO.js.map +1 -0
  16. package/dist/browser-Cq59Ij19.cjs +2 -0
  17. package/dist/browser-Cq59Ij19.cjs.map +1 -0
  18. package/dist/cdn/holosphere.min.js +55 -0
  19. package/dist/cdn/holosphere.min.js.map +1 -0
  20. package/dist/cjs/holosphere.cjs +2 -0
  21. package/dist/cjs/holosphere.cjs.map +1 -0
  22. package/dist/esm/holosphere.js +53 -0
  23. package/dist/esm/holosphere.js.map +1 -0
  24. package/dist/index-DDGt_V9o.cjs +12 -0
  25. package/dist/index-DDGt_V9o.cjs.map +1 -0
  26. package/dist/index-DJXftyvB.js +39841 -0
  27. package/dist/index-DJXftyvB.js.map +1 -0
  28. package/dist/index-DMbdcMtK.cjs +18 -0
  29. package/dist/index-DMbdcMtK.cjs.map +1 -0
  30. package/dist/index-DeZ1xz_s.js +15104 -0
  31. package/dist/index-DeZ1xz_s.js.map +1 -0
  32. package/dist/indexeddb-storage-BFt6hMeF.js +176 -0
  33. package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
  34. package/dist/indexeddb-storage-BK5tv4Sh.cjs +2 -0
  35. package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
  36. package/dist/memory-storage-C9HuoL2E.js +91 -0
  37. package/dist/memory-storage-C9HuoL2E.js.map +1 -0
  38. package/dist/memory-storage-Dao7jfYG.cjs +2 -0
  39. package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
  40. package/dist/secp256k1-BbKzbLtD.cjs +12 -0
  41. package/dist/secp256k1-BbKzbLtD.cjs.map +1 -0
  42. package/dist/secp256k1-CreY7Pcl.js +1890 -0
  43. package/dist/secp256k1-CreY7Pcl.js.map +1 -0
  44. package/docs/CONTRACTS.md +797 -0
  45. package/docs/FOSDEM_PROPOSAL.md +388 -0
  46. package/docs/LOCALFIRST.md +266 -0
  47. package/docs/api/ai_aggregation.js.html +333 -0
  48. package/docs/api/ai_breakdown.js.html +524 -0
  49. package/docs/api/ai_classifier.js.html +231 -0
  50. package/docs/api/ai_council.js.html +246 -0
  51. package/docs/api/ai_embeddings.js.html +304 -0
  52. package/docs/api/ai_federation-ai.js.html +338 -0
  53. package/docs/api/ai_h3-ai.js.html +970 -0
  54. package/docs/api/ai_index.js.html +124 -0
  55. package/docs/api/ai_json-ops.js.html +241 -0
  56. package/docs/api/ai_llm-service.js.html +239 -0
  57. package/docs/api/ai_nl-query.js.html +236 -0
  58. package/docs/api/ai_relationships.js.html +367 -0
  59. package/docs/api/ai_schema-extractor.js.html +235 -0
  60. package/docs/api/ai_spatial.js.html +307 -0
  61. package/docs/api/ai_tts.js.html +214 -0
  62. package/docs/api/content_social-protocols.js.html +180 -0
  63. package/docs/api/core_holosphere.js.html +757 -0
  64. package/docs/api/crypto_nostr-utils.js.html +306 -0
  65. package/docs/api/crypto_secp256k1.js.html +267 -0
  66. package/docs/api/data/search.json +1 -0
  67. package/docs/api/federation_discovery.js.html +337 -0
  68. package/docs/api/federation_handshake.js.html +478 -0
  69. package/docs/api/federation_hologram.js.html +1053 -0
  70. package/docs/api/federation_registry.js.html +389 -0
  71. package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
  72. package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
  73. package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
  74. package/docs/api/global.html +3 -0
  75. package/docs/api/hierarchical_upcast.js.html +128 -0
  76. package/docs/api/index.html +265 -0
  77. package/docs/api/index.js.html +1868 -0
  78. package/docs/api/lib_ai-methods.js.html +660 -0
  79. package/docs/api/lib_contract-methods.js.html +445 -0
  80. package/docs/api/lib_errors.js.html +56 -0
  81. package/docs/api/lib_federation-methods.js.html +348 -0
  82. package/docs/api/lib_index.js.html +33 -0
  83. package/docs/api/module-ai.html +5 -0
  84. package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
  85. package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
  86. package/docs/api/module-ai_aggregation.html +3 -0
  87. package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
  88. package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
  89. package/docs/api/module-ai_breakdown.html +3 -0
  90. package/docs/api/module-ai_classifier-Classifier.html +6 -0
  91. package/docs/api/module-ai_classifier.Classifier.html +3 -0
  92. package/docs/api/module-ai_classifier.html +3 -0
  93. package/docs/api/module-ai_council-Council.html +6 -0
  94. package/docs/api/module-ai_council.Council.html +3 -0
  95. package/docs/api/module-ai_council.html +3 -0
  96. package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
  97. package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
  98. package/docs/api/module-ai_embeddings.html +3 -0
  99. package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
  100. package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
  101. package/docs/api/module-ai_federation-ai.html +3 -0
  102. package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
  103. package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
  104. package/docs/api/module-ai_h3-ai.html +3 -0
  105. package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
  106. package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
  107. package/docs/api/module-ai_json-ops.html +3 -0
  108. package/docs/api/module-ai_llm-service-LLMService.html +5 -0
  109. package/docs/api/module-ai_llm-service.LLMService.html +3 -0
  110. package/docs/api/module-ai_llm-service.html +3 -0
  111. package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
  112. package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
  113. package/docs/api/module-ai_nl-query.html +3 -0
  114. package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
  115. package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
  116. package/docs/api/module-ai_relationships.html +3 -0
  117. package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
  118. package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
  119. package/docs/api/module-ai_schema-extractor.html +3 -0
  120. package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
  121. package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
  122. package/docs/api/module-ai_spatial.html +3 -0
  123. package/docs/api/module-ai_tts-TTS.html +5 -0
  124. package/docs/api/module-ai_tts.TTS.html +3 -0
  125. package/docs/api/module-ai_tts.html +3 -0
  126. package/docs/api/module-content_social-protocols.html +3 -0
  127. package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
  128. package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
  129. package/docs/api/module-core_holosphere.html +3 -0
  130. package/docs/api/module-crypto_nostr-utils.html +3 -0
  131. package/docs/api/module-crypto_secp256k1.html +3 -0
  132. package/docs/api/module-federation_hologram.html +3 -0
  133. package/docs/api/module-hierarchical_upcast.html +3 -0
  134. package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
  135. package/docs/api/module-holosphere.html +3 -0
  136. package/docs/api/module-lib_ai-methods.html +3 -0
  137. package/docs/api/module-lib_contract-methods.html +3 -0
  138. package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
  139. package/docs/api/module-lib_errors-ValidationError.html +3 -0
  140. package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
  141. package/docs/api/module-lib_errors.ValidationError.html +3 -0
  142. package/docs/api/module-lib_errors.html +3 -0
  143. package/docs/api/module-lib_federation-methods.html +3 -0
  144. package/docs/api/module-lib_index.html +3 -0
  145. package/docs/api/module-schema_validator-ValidationError.html +3 -0
  146. package/docs/api/module-schema_validator.ValidationError.html +3 -0
  147. package/docs/api/module-schema_validator.html +3 -0
  148. package/docs/api/module-spatial_h3-operations.html +4 -0
  149. package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
  150. package/docs/api/module-storage_backend-factory.html +3 -0
  151. package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
  152. package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
  153. package/docs/api/module-storage_backend-interface.html +3 -0
  154. package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
  155. package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
  156. package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
  157. package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
  158. package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
  159. package/docs/api/module-storage_backends_activitypub_server.html +3 -0
  160. package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
  161. package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
  162. package/docs/api/module-storage_backends_gundb-backend.html +3 -0
  163. package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
  164. package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
  165. package/docs/api/module-storage_backends_nostr-backend.html +3 -0
  166. package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
  167. package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
  168. package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
  169. package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
  170. package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
  171. package/docs/api/module-storage_filesystem-storage.html +3 -0
  172. package/docs/api/module-storage_global-tables.html +3 -0
  173. package/docs/api/module-storage_gun-async.html +3 -0
  174. package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
  175. package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
  176. package/docs/api/module-storage_gun-auth.html +3 -0
  177. package/docs/api/module-storage_gun-federation.html +3 -0
  178. package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
  179. package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
  180. package/docs/api/module-storage_gun-references.html +3 -0
  181. package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
  182. package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
  183. package/docs/api/module-storage_gun-schema.html +3 -0
  184. package/docs/api/module-storage_gun-wrapper.html +11 -0
  185. package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
  186. package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
  187. package/docs/api/module-storage_indexeddb-storage.html +3 -0
  188. package/docs/api/module-storage_key-storage-simple.html +3 -0
  189. package/docs/api/module-storage_key-storage.html +4 -0
  190. package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
  191. package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
  192. package/docs/api/module-storage_memory-storage.html +3 -0
  193. package/docs/api/module-storage_migration-MigrationTool.html +6 -0
  194. package/docs/api/module-storage_migration.MigrationTool.html +3 -0
  195. package/docs/api/module-storage_migration.html +3 -0
  196. package/docs/api/module-storage_nostr-async.html +18 -0
  197. package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
  198. package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
  199. package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
  200. package/docs/api/module-storage_nostr-client.html +6 -0
  201. package/docs/api/module-storage_nostr-wrapper.html +3 -0
  202. package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
  203. package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
  204. package/docs/api/module-storage_outbox-queue.html +3 -0
  205. package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
  206. package/docs/api/module-storage_persistent-storage.html +4 -0
  207. package/docs/api/module-storage_sync-service-SyncService.html +5 -0
  208. package/docs/api/module-storage_sync-service.SyncService.html +3 -0
  209. package/docs/api/module-storage_sync-service.html +3 -0
  210. package/docs/api/module-storage_unified-storage.html +3 -0
  211. package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
  212. package/docs/api/module-subscriptions_manager.html +3 -0
  213. package/docs/api/schema_validator.js.html +113 -0
  214. package/docs/api/scripts/core.js +726 -0
  215. package/docs/api/scripts/core.min.js +23 -0
  216. package/docs/api/scripts/resize.js +90 -0
  217. package/docs/api/scripts/search.js +265 -0
  218. package/docs/api/scripts/search.min.js +6 -0
  219. package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
  220. package/docs/api/scripts/third-party/fuse.js +9 -0
  221. package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
  222. package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
  223. package/docs/api/scripts/third-party/hljs-original.js +5171 -0
  224. package/docs/api/scripts/third-party/hljs.js +1 -0
  225. package/docs/api/scripts/third-party/popper.js +5 -0
  226. package/docs/api/scripts/third-party/tippy.js +1 -0
  227. package/docs/api/scripts/third-party/tocbot.js +672 -0
  228. package/docs/api/scripts/third-party/tocbot.min.js +1 -0
  229. package/docs/api/spatial_h3-operations.js.html +129 -0
  230. package/docs/api/storage_backend-factory.js.html +133 -0
  231. package/docs/api/storage_backend-interface.js.html +164 -0
  232. package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
  233. package/docs/api/storage_backends_activitypub_server.js.html +678 -0
  234. package/docs/api/storage_backends_gundb-backend.js.html +878 -0
  235. package/docs/api/storage_backends_nostr-backend.js.html +254 -0
  236. package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
  237. package/docs/api/storage_filesystem-storage.js.html +207 -0
  238. package/docs/api/storage_global-tables.js.html +116 -0
  239. package/docs/api/storage_gun-async.js.html +344 -0
  240. package/docs/api/storage_gun-auth.js.html +376 -0
  241. package/docs/api/storage_gun-federation.js.html +788 -0
  242. package/docs/api/storage_gun-references.js.html +212 -0
  243. package/docs/api/storage_gun-schema.js.html +309 -0
  244. package/docs/api/storage_gun-wrapper.js.html +645 -0
  245. package/docs/api/storage_indexeddb-storage.js.html +224 -0
  246. package/docs/api/storage_key-storage-simple.js.html +102 -0
  247. package/docs/api/storage_key-storage.js.html +171 -0
  248. package/docs/api/storage_memory-storage.js.html +128 -0
  249. package/docs/api/storage_migration.js.html +354 -0
  250. package/docs/api/storage_nostr-async.js.html +1076 -0
  251. package/docs/api/storage_nostr-client.js.html +1598 -0
  252. package/docs/api/storage_nostr-wrapper.js.html +218 -0
  253. package/docs/api/storage_outbox-queue.js.html +248 -0
  254. package/docs/api/storage_persistent-storage.js.html +160 -0
  255. package/docs/api/storage_sync-service.js.html +201 -0
  256. package/docs/api/storage_unified-storage.js.html +157 -0
  257. package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
  258. package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
  259. package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
  260. package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  261. package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  262. package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
  263. package/docs/api/subscriptions_manager.js.html +162 -0
  264. package/docs/contracts/api-interface.md +793 -0
  265. package/docs/data-model.md +476 -0
  266. package/docs/gun-async-usage.md +338 -0
  267. package/docs/plan.md +349 -0
  268. package/docs/quickstart.md +674 -0
  269. package/docs/research.md +362 -0
  270. package/docs/spec.md +244 -0
  271. package/docs/storage-backends.md +326 -0
  272. package/docs/tasks.md +947 -0
  273. package/examples/demo.html +47 -0
  274. package/examples/holosphere-widget.js +1242 -0
  275. package/examples/widget-demo.html +274 -0
  276. package/examples/widget.html +703 -0
  277. package/jsdoc.json +26 -0
  278. package/package.json +25 -7
  279. package/src/ai/aggregation.js +13 -2
  280. package/src/ai/breakdown.js +12 -2
  281. package/src/ai/classifier.js +14 -3
  282. package/src/ai/council.js +22 -7
  283. package/src/ai/embeddings.js +37 -15
  284. package/src/ai/federation-ai.js +13 -2
  285. package/src/ai/h3-ai.js +14 -2
  286. package/src/ai/index.js +16 -7
  287. package/src/ai/json-ops.js +18 -5
  288. package/src/ai/llm-service.js +62 -31
  289. package/src/ai/nl-query.js +12 -2
  290. package/src/ai/relationships.js +13 -2
  291. package/src/ai/schema-extractor.js +24 -10
  292. package/src/ai/spatial.js +13 -2
  293. package/src/ai/tts.js +25 -8
  294. package/src/cdn-entry.js +22 -0
  295. package/src/content/social-protocols.js +34 -25
  296. package/src/contracts/abis/Appreciative.json +1280 -0
  297. package/src/contracts/abis/AppreciativeFactory.json +101 -0
  298. package/src/contracts/abis/Bundle.json +1438 -0
  299. package/src/contracts/abis/BundleFactory.json +106 -0
  300. package/src/contracts/abis/Holon.json +881 -0
  301. package/src/contracts/abis/Holons.json +330 -0
  302. package/src/contracts/abis/Managed.json +1262 -0
  303. package/src/contracts/abis/ManagedFactory.json +149 -0
  304. package/src/contracts/abis/Membrane.json +261 -0
  305. package/src/contracts/abis/Splitter.json +1624 -0
  306. package/src/contracts/abis/SplitterFactory.json +220 -0
  307. package/src/contracts/abis/TestToken.json +321 -0
  308. package/src/contracts/abis/Zoned.json +1461 -0
  309. package/src/contracts/abis/ZonedFactory.json +154 -0
  310. package/src/contracts/chain-manager.js +403 -0
  311. package/src/contracts/deployer.js +500 -0
  312. package/src/contracts/event-listener.js +539 -0
  313. package/src/contracts/holon-contracts.js +359 -0
  314. package/src/contracts/index.js +82 -0
  315. package/src/contracts/networks.js +229 -0
  316. package/src/contracts/operations.js +687 -0
  317. package/src/contracts/queries.js +638 -0
  318. package/src/core/holosphere.js +487 -6
  319. package/src/crypto/nostr-utils.js +303 -0
  320. package/src/crypto/secp256k1.js +7 -2
  321. package/src/federation/handshake.js +475 -0
  322. package/src/federation/hologram.js +117 -3
  323. package/src/hierarchical/upcast.js +40 -25
  324. package/src/index.js +1501 -1909
  325. package/src/lib/ai-methods.js +657 -0
  326. package/src/lib/contract-methods.js +442 -0
  327. package/src/lib/errors.js +53 -0
  328. package/src/lib/federation-methods.js +345 -0
  329. package/src/lib/index.js +30 -0
  330. package/src/schema/validator.js +22 -3
  331. package/src/spatial/h3-operations.js +19 -3
  332. package/src/storage/backend-factory.js +7 -2
  333. package/src/storage/backend-interface.js +21 -2
  334. package/src/storage/backends/activitypub/server.js +25 -3
  335. package/src/storage/backends/activitypub-backend.js +25 -2
  336. package/src/storage/backends/gundb-backend.js +692 -50
  337. package/src/storage/backends/nostr-backend.js +116 -1
  338. package/src/storage/filesystem-storage-browser.js +42 -2
  339. package/src/storage/filesystem-storage.js +72 -5
  340. package/src/storage/global-tables.js +35 -3
  341. package/src/storage/gun-async.js +75 -15
  342. package/src/storage/gun-auth.js +373 -0
  343. package/src/storage/gun-federation.js +785 -0
  344. package/src/storage/gun-references.js +209 -0
  345. package/src/storage/gun-schema.js +306 -0
  346. package/src/storage/gun-wrapper.js +475 -54
  347. package/src/storage/indexeddb-storage.js +112 -13
  348. package/src/storage/key-storage-simple.js +32 -9
  349. package/src/storage/key-storage.js +45 -13
  350. package/src/storage/memory-storage.js +68 -2
  351. package/src/storage/migration.js +20 -7
  352. package/src/storage/nostr-async.js +412 -122
  353. package/src/storage/nostr-client.js +749 -76
  354. package/src/storage/nostr-wrapper.js +6 -2
  355. package/src/storage/outbox-queue.js +55 -18
  356. package/src/storage/persistent-storage.js +62 -14
  357. package/src/storage/sync-service.js +51 -17
  358. package/src/storage/unified-storage.js +154 -0
  359. package/src/subscriptions/manager.js +34 -17
  360. package/types/index.d.ts +133 -0
  361. package/vite.config.cdn.js +60 -0
  362. package/tests/unit/ai/aggregation.test.js +0 -295
  363. package/tests/unit/ai/breakdown.test.js +0 -446
  364. package/tests/unit/ai/classifier.test.js +0 -294
  365. package/tests/unit/ai/council.test.js +0 -262
  366. package/tests/unit/ai/embeddings.test.js +0 -384
  367. package/tests/unit/ai/federation-ai.test.js +0 -344
  368. package/tests/unit/ai/h3-ai.test.js +0 -458
  369. package/tests/unit/ai/index.test.js +0 -304
  370. package/tests/unit/ai/json-ops.test.js +0 -307
  371. package/tests/unit/ai/llm-service.test.js +0 -390
  372. package/tests/unit/ai/nl-query.test.js +0 -383
  373. package/tests/unit/ai/relationships.test.js +0 -311
  374. package/tests/unit/ai/schema-extractor.test.js +0 -384
  375. package/tests/unit/ai/spatial.test.js +0 -279
  376. package/tests/unit/ai/tts.test.js +0 -279
  377. package/tests/unit/content.test.js +0 -332
  378. package/tests/unit/contract/core.test.js +0 -88
  379. package/tests/unit/contract/crypto.test.js +0 -198
  380. package/tests/unit/contract/data.test.js +0 -223
  381. package/tests/unit/contract/federation.test.js +0 -181
  382. package/tests/unit/contract/hierarchical.test.js +0 -113
  383. package/tests/unit/contract/schema.test.js +0 -114
  384. package/tests/unit/contract/social.test.js +0 -217
  385. package/tests/unit/contract/spatial.test.js +0 -110
  386. package/tests/unit/contract/subscriptions.test.js +0 -128
  387. package/tests/unit/contract/utils.test.js +0 -159
  388. package/tests/unit/core.test.js +0 -152
  389. package/tests/unit/crypto.test.js +0 -328
  390. package/tests/unit/federation.test.js +0 -234
  391. package/tests/unit/gun-async.test.js +0 -252
  392. package/tests/unit/hierarchical.test.js +0 -399
  393. package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
  394. package/tests/unit/integration/scenario-02-federation.test.js +0 -76
  395. package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
  396. package/tests/unit/integration/scenario-04-validation.test.js +0 -129
  397. package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
  398. package/tests/unit/integration/scenario-06-social.test.js +0 -135
  399. package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
  400. package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
  401. package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
  402. package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
  403. package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
  404. package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
  405. package/tests/unit/performance/benchmark.test.js +0 -85
  406. package/tests/unit/schema.test.js +0 -213
  407. package/tests/unit/spatial.test.js +0 -158
  408. package/tests/unit/storage.test.js +0 -195
  409. package/tests/unit/subscriptions.test.js +0 -328
  410. package/tests/unit/test-data-permanence-debug.js +0 -197
  411. package/tests/unit/test-data-permanence.js +0 -340
  412. package/tests/unit/test-key-persistence-fixed.js +0 -148
  413. package/tests/unit/test-key-persistence.js +0 -172
  414. package/tests/unit/test-relay-permanence.js +0 -376
  415. package/tests/unit/test-second-node.js +0 -95
  416. package/tests/unit/test-simple-write.js +0 -89
  417. /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
  418. /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
@@ -1,384 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from 'vitest';
2
- import { Embeddings } from '../../../src/ai/embeddings.js';
3
-
4
- describe('Unit: Embeddings', () => {
5
- let embeddings;
6
- let mockOpenAI;
7
- let mockHolosphere;
8
-
9
- beforeEach(() => {
10
- vi.clearAllMocks();
11
-
12
- mockOpenAI = {
13
- embeddings: {
14
- create: vi.fn()
15
- }
16
- };
17
-
18
- mockHolosphere = {
19
- put: vi.fn().mockResolvedValue({ success: true }),
20
- getAll: vi.fn().mockResolvedValue([])
21
- };
22
-
23
- embeddings = new Embeddings(mockOpenAI, mockHolosphere);
24
- });
25
-
26
- describe('Constructor', () => {
27
- it('should initialize with OpenAI client', () => {
28
- const emb = new Embeddings(mockOpenAI);
29
- expect(emb.openai).toBe(mockOpenAI);
30
- expect(emb.model).toBe('text-embedding-3-small');
31
- expect(emb.dimensions).toBe(1536);
32
- });
33
-
34
- it('should accept optional HoloSphere instance', () => {
35
- const emb = new Embeddings(mockOpenAI, mockHolosphere);
36
- expect(emb.holosphere).toBe(mockHolosphere);
37
- });
38
-
39
- it('should work without HoloSphere instance', () => {
40
- const emb = new Embeddings(mockOpenAI);
41
- expect(emb.holosphere).toBeNull();
42
- });
43
- });
44
-
45
- describe('setHoloSphere', () => {
46
- it('should set HoloSphere instance', () => {
47
- const emb = new Embeddings(mockOpenAI);
48
- emb.setHoloSphere(mockHolosphere);
49
- expect(emb.holosphere).toBe(mockHolosphere);
50
- });
51
- });
52
-
53
- describe('embed', () => {
54
- it('should generate embedding for text', async () => {
55
- const mockEmbedding = Array(1536).fill(0).map((_, i) => i / 1536);
56
- mockOpenAI.embeddings.create.mockResolvedValue({
57
- data: [{ embedding: mockEmbedding }]
58
- });
59
-
60
- const result = await embeddings.embed('Hello world');
61
-
62
- expect(mockOpenAI.embeddings.create).toHaveBeenCalledWith({
63
- model: 'text-embedding-3-small',
64
- input: 'Hello world'
65
- });
66
- expect(result).toEqual(mockEmbedding);
67
- expect(result).toHaveLength(1536);
68
- });
69
-
70
- it('should throw error on API failure', async () => {
71
- mockOpenAI.embeddings.create.mockRejectedValue(new Error('API Error'));
72
-
73
- await expect(embeddings.embed('Test'))
74
- .rejects.toThrow('Embedding generation failed: API Error');
75
- });
76
- });
77
-
78
- describe('embedBatch', () => {
79
- it('should generate embeddings for multiple texts', async () => {
80
- const mockEmbeddings = [
81
- { embedding: Array(1536).fill(0.1) },
82
- { embedding: Array(1536).fill(0.2) },
83
- { embedding: Array(1536).fill(0.3) }
84
- ];
85
- mockOpenAI.embeddings.create.mockResolvedValue({ data: mockEmbeddings });
86
-
87
- const result = await embeddings.embedBatch(['text1', 'text2', 'text3']);
88
-
89
- expect(mockOpenAI.embeddings.create).toHaveBeenCalledWith({
90
- model: 'text-embedding-3-small',
91
- input: ['text1', 'text2', 'text3']
92
- });
93
- expect(result).toHaveLength(3);
94
- expect(result[0]).toEqual(Array(1536).fill(0.1));
95
- });
96
-
97
- it('should throw error on batch failure', async () => {
98
- mockOpenAI.embeddings.create.mockRejectedValue(new Error('Batch failed'));
99
-
100
- await expect(embeddings.embedBatch(['a', 'b']))
101
- .rejects.toThrow('Batch embedding failed: Batch failed');
102
- });
103
- });
104
-
105
- describe('cosineSimilarity', () => {
106
- it('should calculate cosine similarity between vectors', () => {
107
- const vec1 = [1, 0, 0];
108
- const vec2 = [1, 0, 0];
109
-
110
- const similarity = embeddings.cosineSimilarity(vec1, vec2);
111
- expect(similarity).toBeCloseTo(1.0, 5);
112
- });
113
-
114
- it('should return 0 for orthogonal vectors', () => {
115
- const vec1 = [1, 0, 0];
116
- const vec2 = [0, 1, 0];
117
-
118
- const similarity = embeddings.cosineSimilarity(vec1, vec2);
119
- expect(similarity).toBeCloseTo(0, 5);
120
- });
121
-
122
- it('should return -1 for opposite vectors', () => {
123
- const vec1 = [1, 0, 0];
124
- const vec2 = [-1, 0, 0];
125
-
126
- const similarity = embeddings.cosineSimilarity(vec1, vec2);
127
- expect(similarity).toBeCloseTo(-1.0, 5);
128
- });
129
-
130
- it('should throw error for vectors of different lengths', () => {
131
- const vec1 = [1, 2, 3];
132
- const vec2 = [1, 2];
133
-
134
- expect(() => embeddings.cosineSimilarity(vec1, vec2))
135
- .toThrow('Vectors must have same length');
136
- });
137
-
138
- it('should handle normalized vectors correctly', () => {
139
- const vec1 = [0.6, 0.8, 0];
140
- const vec2 = [0.6, 0.8, 0];
141
-
142
- const similarity = embeddings.cosineSimilarity(vec1, vec2);
143
- expect(similarity).toBeCloseTo(1.0, 5);
144
- });
145
- });
146
-
147
- describe('storeWithEmbedding', () => {
148
- it('should store item with generated embedding', async () => {
149
- const mockEmbedding = Array(1536).fill(0.5);
150
- mockOpenAI.embeddings.create.mockResolvedValue({
151
- data: [{ embedding: mockEmbedding }]
152
- });
153
-
154
- const item = { content: 'Test content', title: 'Test' };
155
- const result = await embeddings.storeWithEmbedding('holon1', 'lens1', item);
156
-
157
- expect(result._embedding).toEqual(mockEmbedding);
158
- expect(result._embeddedField).toBe('auto');
159
- expect(result._embeddedAt).toBeDefined();
160
- expect(mockHolosphere.put).toHaveBeenCalledWith('holon1', 'lens1', expect.objectContaining({
161
- content: 'Test content',
162
- _embedding: mockEmbedding
163
- }));
164
- });
165
-
166
- it('should use specified text field for embedding', async () => {
167
- mockOpenAI.embeddings.create.mockResolvedValue({
168
- data: [{ embedding: Array(1536).fill(0) }]
169
- });
170
-
171
- const item = { title: 'Title', description: 'Description text' };
172
- await embeddings.storeWithEmbedding('holon1', 'lens1', item, 'description');
173
-
174
- expect(mockOpenAI.embeddings.create).toHaveBeenCalledWith({
175
- model: 'text-embedding-3-small',
176
- input: 'Description text'
177
- });
178
- });
179
-
180
- it('should throw error if HoloSphere not available', async () => {
181
- const emb = new Embeddings(mockOpenAI);
182
-
183
- await expect(emb.storeWithEmbedding('holon', 'lens', { text: 'test' }))
184
- .rejects.toThrow('HoloSphere instance required for storage');
185
- });
186
-
187
- it('should throw error if no text found to embed', async () => {
188
- const item = { id: 123, number: 456 };
189
-
190
- await expect(embeddings.storeWithEmbedding('holon', 'lens', item, 'missing'))
191
- .rejects.toThrow('No text found to embed');
192
- });
193
-
194
- it('should fall back to JSON stringify for objects without text fields', async () => {
195
- mockOpenAI.embeddings.create.mockResolvedValue({
196
- data: [{ embedding: Array(1536).fill(0) }]
197
- });
198
-
199
- const item = { id: 123, data: [1, 2, 3] };
200
- await embeddings.storeWithEmbedding('holon', 'lens', item);
201
-
202
- expect(mockOpenAI.embeddings.create).toHaveBeenCalledWith({
203
- model: 'text-embedding-3-small',
204
- input: JSON.stringify(item)
205
- });
206
- });
207
- });
208
-
209
- describe('semanticSearch', () => {
210
- it('should search for similar items using embeddings', async () => {
211
- const queryEmbedding = Array(1536).fill(0.5);
212
- mockOpenAI.embeddings.create.mockResolvedValue({
213
- data: [{ embedding: queryEmbedding }]
214
- });
215
-
216
- const storedItems = [
217
- { id: 1, text: 'Similar item', _embedding: Array(1536).fill(0.5) },
218
- { id: 2, text: 'Less similar', _embedding: Array(1536).fill(0.1) },
219
- { id: 3, text: 'No embedding' }
220
- ];
221
- mockHolosphere.getAll.mockResolvedValue(storedItems);
222
-
223
- const results = await embeddings.semanticSearch('query', 'holon1', 'lens1');
224
-
225
- expect(results).toHaveLength(2); // Only items with embeddings
226
- expect(results[0].similarity).toBeGreaterThan(results[1].similarity);
227
- expect(results[0].item._embedding).toBeUndefined(); // Embedding not returned
228
- });
229
-
230
- it('should respect threshold option', async () => {
231
- mockOpenAI.embeddings.create.mockResolvedValue({
232
- data: [{ embedding: Array(1536).fill(1) }]
233
- });
234
-
235
- mockHolosphere.getAll.mockResolvedValue([
236
- { id: 1, _embedding: Array(1536).fill(0.9) }, // High similarity
237
- { id: 2, _embedding: Array(1536).fill(0.1) } // Low similarity
238
- ]);
239
-
240
- const results = await embeddings.semanticSearch('query', 'holon', 'lens', { threshold: 0.8 });
241
-
242
- expect(results.length).toBeLessThanOrEqual(2);
243
- results.forEach(r => expect(r.similarity).toBeGreaterThanOrEqual(0.8));
244
- });
245
-
246
- it('should respect limit option', async () => {
247
- mockOpenAI.embeddings.create.mockResolvedValue({
248
- data: [{ embedding: Array(1536).fill(0.5) }]
249
- });
250
-
251
- const manyItems = Array(20).fill(null).map((_, i) => ({
252
- id: i,
253
- _embedding: Array(1536).fill(0.5)
254
- }));
255
- mockHolosphere.getAll.mockResolvedValue(manyItems);
256
-
257
- const results = await embeddings.semanticSearch('query', 'holon', 'lens', { limit: 5 });
258
-
259
- expect(results).toHaveLength(5);
260
- });
261
-
262
- it('should throw error if HoloSphere not available', async () => {
263
- const emb = new Embeddings(mockOpenAI);
264
-
265
- await expect(emb.semanticSearch('query', 'holon', 'lens'))
266
- .rejects.toThrow('HoloSphere instance required for search');
267
- });
268
- });
269
-
270
- describe('findSimilar', () => {
271
- it('should find items similar to given item', async () => {
272
- mockOpenAI.embeddings.create.mockResolvedValue({
273
- data: [{ embedding: Array(1536).fill(0.5) }]
274
- });
275
-
276
- mockHolosphere.getAll.mockResolvedValue([
277
- { id: 1, _embedding: Array(1536).fill(0.5) }
278
- ]);
279
-
280
- const item = { content: 'Test item' };
281
- const results = await embeddings.findSimilar(item, 'holon', 'lens');
282
-
283
- expect(mockOpenAI.embeddings.create).toHaveBeenCalledWith({
284
- model: 'text-embedding-3-small',
285
- input: 'Test item'
286
- });
287
- expect(results).toBeDefined();
288
- });
289
- });
290
-
291
- describe('cluster', () => {
292
- it('should cluster items by semantic similarity', async () => {
293
- const items = [
294
- { id: 1, text: 'Item 1' },
295
- { id: 2, text: 'Item 2' },
296
- { id: 3, text: 'Item 3' }
297
- ];
298
-
299
- // Mock embeddings for each item
300
- mockOpenAI.embeddings.create
301
- .mockResolvedValueOnce({ data: [{ embedding: Array(1536).fill(0.1) }] })
302
- .mockResolvedValueOnce({ data: [{ embedding: Array(1536).fill(0.5) }] })
303
- .mockResolvedValueOnce({ data: [{ embedding: Array(1536).fill(0.9) }] });
304
-
305
- const clusters = await embeddings.cluster(items, 2);
306
-
307
- expect(Array.isArray(clusters)).toBe(true);
308
- expect(clusters.length).toBeLessThanOrEqual(2);
309
- // Embeddings should not be included in output
310
- clusters.forEach(cluster => {
311
- cluster.forEach(item => {
312
- expect(item._embedding).toBeUndefined();
313
- });
314
- });
315
- });
316
-
317
- it('should use existing embeddings if available', async () => {
318
- const items = [
319
- { id: 1, _embedding: Array(1536).fill(0.1) },
320
- { id: 2, _embedding: Array(1536).fill(0.2) }
321
- ];
322
-
323
- const clusters = await embeddings.cluster(items, 2);
324
-
325
- expect(mockOpenAI.embeddings.create).not.toHaveBeenCalled();
326
- expect(clusters).toBeDefined();
327
- });
328
-
329
- it('should return individual items as clusters when fewer items than k', async () => {
330
- const items = [
331
- { id: 1, _embedding: Array(1536).fill(0.1) },
332
- { id: 2, _embedding: Array(1536).fill(0.2) }
333
- ];
334
-
335
- const clusters = await embeddings.cluster(items, 5);
336
-
337
- expect(clusters).toHaveLength(2);
338
- expect(clusters[0]).toHaveLength(1);
339
- expect(clusters[1]).toHaveLength(1);
340
- });
341
- });
342
-
343
- describe('_kMeans', () => {
344
- it('should perform k-means clustering', () => {
345
- // Use consistent dimensions (1536 is the default)
346
- const dim = 1536;
347
- const items = [
348
- { id: 1, _embedding: Array(dim).fill(0).map((_, i) => i < dim/2 ? 0.9 : 0.1) },
349
- { id: 2, _embedding: Array(dim).fill(0).map((_, i) => i < dim/2 ? 0.85 : 0.15) },
350
- { id: 3, _embedding: Array(dim).fill(0).map((_, i) => i < dim/2 ? 0.1 : 0.9) },
351
- { id: 4, _embedding: Array(dim).fill(0).map((_, i) => i < dim/2 ? 0.15 : 0.85) }
352
- ];
353
-
354
- const clusters = embeddings._kMeans(items, 2);
355
-
356
- expect(clusters).toHaveLength(2);
357
- // Each cluster should have 2 items (the similar pairs)
358
- });
359
-
360
- it('should handle items less than k', () => {
361
- const dim = 1536;
362
- const items = [
363
- { id: 1, _embedding: Array(dim).fill(0.5) }
364
- ];
365
-
366
- const clusters = embeddings._kMeans(items, 3);
367
-
368
- expect(clusters).toHaveLength(1);
369
- });
370
-
371
- it('should converge within max iterations', () => {
372
- const dim = 1536;
373
- const items = Array(10).fill(null).map((_, i) => ({
374
- id: i,
375
- _embedding: Array(dim).fill(0).map(() => Math.random())
376
- }));
377
-
378
- const clusters = embeddings._kMeans(items, 3, 10);
379
-
380
- expect(clusters.length).toBeGreaterThan(0);
381
- expect(clusters.length).toBeLessThanOrEqual(3);
382
- });
383
- });
384
- });