holosphere 2.0.0-alpha0 → 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 -42
  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,294 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from 'vitest';
2
- import { Classifier } from '../../../src/ai/classifier.js';
3
-
4
- describe('Unit: Classifier', () => {
5
- let classifier;
6
- let mockLLM;
7
- let mockHolosphere;
8
-
9
- beforeEach(() => {
10
- vi.clearAllMocks();
11
-
12
- mockLLM = {
13
- getJSON: vi.fn()
14
- };
15
-
16
- mockHolosphere = {
17
- put: vi.fn().mockResolvedValue({ success: true })
18
- };
19
-
20
- classifier = new Classifier(mockLLM, mockHolosphere);
21
- });
22
-
23
- describe('Constructor', () => {
24
- it('should initialize with LLM service', () => {
25
- const c = new Classifier(mockLLM);
26
- expect(c.llm).toBe(mockLLM);
27
- expect(c.holosphere).toBeNull();
28
- expect(c.lensDescriptions).toBeInstanceOf(Map);
29
- });
30
-
31
- it('should accept optional HoloSphere instance', () => {
32
- expect(classifier.holosphere).toBe(mockHolosphere);
33
- });
34
- });
35
-
36
- describe('setHoloSphere', () => {
37
- it('should set HoloSphere instance', () => {
38
- const c = new Classifier(mockLLM);
39
- c.setHoloSphere(mockHolosphere);
40
- expect(c.holosphere).toBe(mockHolosphere);
41
- });
42
- });
43
-
44
- describe('registerLens', () => {
45
- it('should register a lens with description', () => {
46
- classifier.registerLens('projects', 'Contains project data');
47
-
48
- expect(classifier.lensDescriptions.has('projects')).toBe(true);
49
- expect(classifier.lensDescriptions.get('projects').description).toBe('Contains project data');
50
- });
51
-
52
- it('should register a lens with schema', () => {
53
- const schema = { type: 'object', properties: { name: { type: 'string' } } };
54
- classifier.registerLens('tasks', 'Task items', schema);
55
-
56
- expect(classifier.lensDescriptions.get('tasks').schema).toEqual(schema);
57
- });
58
- });
59
-
60
- describe('registerLenses', () => {
61
- it('should register multiple lenses', () => {
62
- classifier.registerLenses({
63
- projects: { description: 'Project data' },
64
- tasks: { description: 'Task data', schema: { type: 'object' } }
65
- });
66
-
67
- expect(classifier.lensDescriptions.size).toBe(2);
68
- expect(classifier.lensDescriptions.has('projects')).toBe(true);
69
- expect(classifier.lensDescriptions.has('tasks')).toBe(true);
70
- });
71
- });
72
-
73
- describe('classifyToLens', () => {
74
- beforeEach(() => {
75
- classifier.registerLenses({
76
- projects: { description: 'Project and initiative data' },
77
- events: { description: 'Events and meetings' },
78
- resources: { description: 'Resources and materials' }
79
- });
80
- });
81
-
82
- it('should classify content to best lens', async () => {
83
- mockLLM.getJSON.mockResolvedValue({
84
- lens: 'projects',
85
- confidence: 0.9,
86
- reasoning: 'Content describes a project'
87
- });
88
-
89
- const result = await classifier.classifyToLens({ title: 'New Project', description: 'A software project' });
90
-
91
- expect(result.lens).toBe('projects');
92
- expect(result.confidence).toBe(0.9);
93
- });
94
-
95
- it('should throw error if no lenses registered', async () => {
96
- const c = new Classifier(mockLLM);
97
-
98
- await expect(c.classifyToLens('content'))
99
- .rejects.toThrow('No lenses registered');
100
- });
101
-
102
- it('should handle string content', async () => {
103
- mockLLM.getJSON.mockResolvedValue({ lens: 'events', confidence: 0.8, reasoning: 'Event description' });
104
-
105
- await classifier.classifyToLens('Meeting tomorrow at 3pm');
106
-
107
- const call = mockLLM.getJSON.mock.calls[0];
108
- expect(call[1]).toBe('Meeting tomorrow at 3pm');
109
- });
110
-
111
- it('should handle object content', async () => {
112
- mockLLM.getJSON.mockResolvedValue({ lens: 'resources', confidence: 0.7, reasoning: 'Resource item' });
113
-
114
- const content = { type: 'document', name: 'Guide.pdf' };
115
- await classifier.classifyToLens(content);
116
-
117
- const call = mockLLM.getJSON.mock.calls[0];
118
- expect(call[1]).toContain('Guide.pdf');
119
- });
120
- });
121
-
122
- describe('classifyMultiple', () => {
123
- beforeEach(() => {
124
- classifier.registerLenses({
125
- projects: { description: 'Projects' },
126
- events: { description: 'Events' },
127
- resources: { description: 'Resources' }
128
- });
129
- });
130
-
131
- it('should return multiple lens classifications', async () => {
132
- mockLLM.getJSON.mockResolvedValue([
133
- { lens: 'projects', confidence: 0.8 },
134
- { lens: 'resources', confidence: 0.6 }
135
- ]);
136
-
137
- const result = await classifier.classifyMultiple('Multi-purpose content', 3);
138
-
139
- expect(Array.isArray(result)).toBe(true);
140
- expect(result[0].lens).toBe('projects');
141
- });
142
-
143
- it('should throw error if no lenses registered', async () => {
144
- const c = new Classifier(mockLLM);
145
-
146
- await expect(c.classifyMultiple('content'))
147
- .rejects.toThrow('No lenses registered');
148
- });
149
- });
150
-
151
- describe('autoStore', () => {
152
- beforeEach(() => {
153
- classifier.registerLens('projects', 'Project data');
154
- });
155
-
156
- it('should classify and store content', async () => {
157
- mockLLM.getJSON.mockResolvedValue({
158
- lens: 'projects',
159
- confidence: 0.9,
160
- reasoning: 'Project content'
161
- });
162
-
163
- const content = { title: 'My Project' };
164
- const result = await classifier.autoStore('holon1', content);
165
-
166
- expect(result.lens).toBe('projects');
167
- expect(result.stored).toBe(true);
168
- expect(mockHolosphere.put).toHaveBeenCalledWith('holon1', 'projects', content);
169
- });
170
-
171
- it('should throw error if HoloSphere not available', async () => {
172
- const c = new Classifier(mockLLM);
173
- c.registerLens('test', 'Test');
174
-
175
- await expect(c.autoStore('holon', { data: 'test' }))
176
- .rejects.toThrow('HoloSphere instance required for storage');
177
- });
178
- });
179
-
180
- describe('suggestNewLens', () => {
181
- it('should suggest a new lens for content type', async () => {
182
- classifier.registerLens('projects', 'Projects');
183
-
184
- mockLLM.getJSON.mockResolvedValue({
185
- name: 'recipes',
186
- description: 'Cooking recipes and food preparation guides'
187
- });
188
-
189
- const result = await classifier.suggestNewLens('Cooking recipes with ingredients and steps');
190
-
191
- expect(result.name).toBe('recipes');
192
- expect(result.description).toContain('recipes');
193
- });
194
-
195
- it('should include existing lenses in prompt', async () => {
196
- classifier.registerLenses({
197
- projects: { description: 'Projects' },
198
- tasks: { description: 'Tasks' }
199
- });
200
-
201
- mockLLM.getJSON.mockResolvedValue({ name: 'new_lens', description: 'New lens' });
202
-
203
- await classifier.suggestNewLens('New content type');
204
-
205
- const call = mockLLM.getJSON.mock.calls[0];
206
- expect(call[0]).toContain('projects');
207
- expect(call[0]).toContain('tasks');
208
- });
209
- });
210
-
211
- describe('suggestSchema', () => {
212
- it('should suggest JSON schema for content', async () => {
213
- mockLLM.getJSON.mockResolvedValue({
214
- type: 'object',
215
- properties: {
216
- title: { type: 'string', description: 'Item title' },
217
- priority: { type: 'number', description: 'Priority level' }
218
- },
219
- required: ['title']
220
- });
221
-
222
- const content = { title: 'Sample Task', priority: 1 };
223
- const result = await classifier.suggestSchema(content);
224
-
225
- expect(result.type).toBe('object');
226
- expect(result.properties.title).toBeDefined();
227
- });
228
- });
229
-
230
- describe('validateForLens', () => {
231
- it('should throw error if lens not found', async () => {
232
- await expect(classifier.validateForLens({ data: 'test' }, 'nonexistent'))
233
- .rejects.toThrow('Lens not found: nonexistent');
234
- });
235
-
236
- it('should use AI validation if no schema', async () => {
237
- classifier.registerLens('projects', 'Project data');
238
-
239
- mockLLM.getJSON.mockResolvedValue({
240
- valid: true,
241
- issues: []
242
- });
243
-
244
- const result = await classifier.validateForLens({ title: 'Project' }, 'projects');
245
-
246
- expect(result.valid).toBe(true);
247
- });
248
-
249
- it('should return valid if schema exists', async () => {
250
- classifier.registerLens('tasks', 'Tasks', { type: 'object' });
251
-
252
- const result = await classifier.validateForLens({ data: 'test' }, 'tasks');
253
-
254
- expect(result.valid).toBe(true);
255
- expect(result.issues).toEqual([]);
256
- });
257
- });
258
-
259
- describe('analyzeCollection', () => {
260
- beforeEach(() => {
261
- classifier.registerLenses({
262
- projects: { description: 'Projects' },
263
- tasks: { description: 'Tasks' }
264
- });
265
- });
266
-
267
- it('should analyze and classify collection of items', async () => {
268
- mockLLM.getJSON
269
- .mockResolvedValueOnce({ lens: 'projects', confidence: 0.9, reasoning: 'Project' })
270
- .mockResolvedValueOnce({ lens: 'tasks', confidence: 0.8, reasoning: 'Task' })
271
- .mockResolvedValueOnce({ lens: 'projects', confidence: 0.7, reasoning: 'Project' });
272
-
273
- const items = [
274
- { title: 'Project 1' },
275
- { title: 'Task 1' },
276
- { title: 'Project 2' }
277
- ];
278
-
279
- const result = await classifier.analyzeCollection(items);
280
-
281
- expect(result.total).toBe(3);
282
- expect(result.byLens.projects).toBe(2);
283
- expect(result.byLens.tasks).toBe(1);
284
- expect(result.classifications).toHaveLength(3);
285
- });
286
-
287
- it('should handle empty collection', async () => {
288
- const result = await classifier.analyzeCollection([]);
289
-
290
- expect(result.total).toBe(0);
291
- expect(result.classifications).toHaveLength(0);
292
- });
293
- });
294
- });
@@ -1,262 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from 'vitest';
2
- import { Council } from '../../../src/ai/council.js';
3
-
4
- describe('Unit: Council', () => {
5
- let council;
6
- let mockLLM;
7
-
8
- beforeEach(() => {
9
- vi.clearAllMocks();
10
-
11
- mockLLM = {
12
- sendMessage: vi.fn()
13
- };
14
-
15
- council = new Council(mockLLM);
16
- });
17
-
18
- describe('Constructor', () => {
19
- it('should initialize with LLM service', () => {
20
- expect(council.llm).toBe(mockLLM);
21
- });
22
-
23
- it('should use default perspectives', () => {
24
- expect(council.perspectives).toHaveLength(12);
25
- expect(council.perspectives[0].name).toBe('Values & Worldview');
26
- });
27
-
28
- it('should accept custom perspectives', () => {
29
- const customPerspectives = [
30
- { name: 'Tech', prompt: 'From tech perspective' },
31
- { name: 'Design', prompt: 'From design perspective' }
32
- ];
33
-
34
- const c = new Council(mockLLM, customPerspectives);
35
-
36
- expect(c.perspectives).toHaveLength(2);
37
- expect(c.perspectives[0].name).toBe('Tech');
38
- });
39
- });
40
-
41
- describe('setPerspectives', () => {
42
- it('should set custom perspectives', () => {
43
- const newPerspectives = [
44
- { name: 'Custom1', prompt: 'Prompt 1' }
45
- ];
46
-
47
- council.setPerspectives(newPerspectives);
48
-
49
- expect(council.perspectives).toHaveLength(1);
50
- expect(council.perspectives[0].name).toBe('Custom1');
51
- });
52
- });
53
-
54
- describe('getDefaultPerspectives', () => {
55
- it('should return default 12 perspectives', () => {
56
- const defaults = Council.getDefaultPerspectives();
57
-
58
- expect(defaults).toHaveLength(12);
59
- expect(defaults.map(p => p.name)).toContain('Health & Wellbeing');
60
- expect(defaults.map(p => p.name)).toContain('Climate & Environment');
61
- });
62
- });
63
-
64
- describe('ask', () => {
65
- it('should get answers from all perspectives in parallel', async () => {
66
- mockLLM.sendMessage.mockResolvedValue('Perspective answer');
67
-
68
- const result = await council.ask('What is the meaning of life?');
69
-
70
- expect(result.question).toBe('What is the meaning of life?');
71
- expect(result.perspectives).toHaveLength(12);
72
- expect(result.perspectives[0].perspective).toBe('Values & Worldview');
73
- expect(result.perspectives[0].answer).toBe('Perspective answer');
74
- expect(result.summary).toBeDefined();
75
- expect(result.timestamp).toBeDefined();
76
- });
77
-
78
- it('should get answers sequentially when parallel is false', async () => {
79
- mockLLM.sendMessage.mockResolvedValue('Answer');
80
-
81
- const result = await council.ask('Question', { parallel: false });
82
-
83
- expect(result.perspectives).toHaveLength(12);
84
- });
85
-
86
- it('should skip summary when includeSummary is false', async () => {
87
- mockLLM.sendMessage.mockResolvedValue('Answer');
88
-
89
- const result = await council.ask('Question', { includeSummary: false });
90
-
91
- expect(result.summary).toBeNull();
92
- });
93
-
94
- it('should use custom perspectives when provided', async () => {
95
- mockLLM.sendMessage.mockResolvedValue('Answer');
96
-
97
- const customPerspectives = [
98
- { name: 'Expert', prompt: 'As an expert' }
99
- ];
100
-
101
- const result = await council.ask('Question', { perspectives: customPerspectives });
102
-
103
- expect(result.perspectives).toHaveLength(1);
104
- expect(result.perspectives[0].perspective).toBe('Expert');
105
- });
106
-
107
- it('should generate summary across perspectives', async () => {
108
- mockLLM.sendMessage
109
- .mockResolvedValueOnce('Answer 1') // First perspective
110
- .mockResolvedValueOnce('Answer 2') // Second perspective (and so on...)
111
- .mockResolvedValue('Answer');
112
-
113
- council.setPerspectives([
114
- { name: 'P1', prompt: 'Prompt 1' },
115
- { name: 'P2', prompt: 'Prompt 2' }
116
- ]);
117
-
118
- await council.ask('Question');
119
-
120
- // Last call should be the summary
121
- const lastCall = mockLLM.sendMessage.mock.calls[mockLLM.sendMessage.mock.calls.length - 1];
122
- expect(lastCall[0]).toContain('Synthesize');
123
- });
124
- });
125
-
126
- describe('_askPerspective', () => {
127
- it('should send message with perspective prompt', async () => {
128
- mockLLM.sendMessage.mockResolvedValue('Response');
129
-
130
- const perspective = { name: 'Test', prompt: 'From test view' };
131
- await council._askPerspective('Question?', perspective);
132
-
133
- expect(mockLLM.sendMessage).toHaveBeenCalledWith(
134
- expect.stringContaining('From test view'),
135
- 'Question?',
136
- expect.objectContaining({ temperature: 0.7 })
137
- );
138
- });
139
- });
140
-
141
- describe('_summarize', () => {
142
- it('should synthesize multiple perspective answers', async () => {
143
- mockLLM.sendMessage.mockResolvedValue('Synthesized summary');
144
-
145
- const answers = [
146
- { perspective: 'P1', answer: 'Answer 1' },
147
- { perspective: 'P2', answer: 'Answer 2' }
148
- ];
149
-
150
- const result = await council._summarize('Question', answers);
151
-
152
- expect(result).toBe('Synthesized summary');
153
- expect(mockLLM.sendMessage).toHaveBeenCalledWith(
154
- expect.stringContaining('wise facilitator'),
155
- expect.stringContaining('Answer 1'),
156
- expect.objectContaining({ temperature: 0.5 })
157
- );
158
- });
159
- });
160
-
161
- describe('createPerspectives', () => {
162
- it('should create perspectives from names', () => {
163
- const names = ['Technology', 'Economics', 'Society'];
164
- const perspectives = Council.createPerspectives(names);
165
-
166
- expect(perspectives).toHaveLength(3);
167
- expect(perspectives[0].name).toBe('Technology');
168
- expect(perspectives[0].prompt).toContain('Technology');
169
- });
170
- });
171
-
172
- describe('askCustom', () => {
173
- it('should ask with custom perspective names', async () => {
174
- mockLLM.sendMessage.mockResolvedValue('Answer');
175
-
176
- const result = await council.askCustom('Question', ['Tech', 'Ethics']);
177
-
178
- expect(result.perspectives).toHaveLength(2);
179
- expect(result.perspectives[0].perspective).toBe('Tech');
180
- expect(result.perspectives[1].perspective).toBe('Ethics');
181
- });
182
- });
183
-
184
- describe('askSingle', () => {
185
- it('should get answer from single named perspective', async () => {
186
- mockLLM.sendMessage.mockResolvedValue('Single answer');
187
-
188
- const result = await council.askSingle('Question', 'Health & Wellbeing');
189
-
190
- expect(result).toBe('Single answer');
191
- });
192
-
193
- it('should create perspective if not found', async () => {
194
- mockLLM.sendMessage.mockResolvedValue('Custom perspective answer');
195
-
196
- const result = await council.askSingle('Question', 'Custom View');
197
-
198
- expect(result).toBe('Custom perspective answer');
199
- expect(mockLLM.sendMessage).toHaveBeenCalledWith(
200
- expect.stringContaining('Custom View'),
201
- expect.any(String),
202
- expect.any(Object)
203
- );
204
- });
205
- });
206
-
207
- describe('debate', () => {
208
- it('should conduct debate between two perspectives', async () => {
209
- mockLLM.sendMessage.mockResolvedValue('Debate response');
210
-
211
- const result = await council.debate('Climate policy', ['Climate & Environment', 'Economy & Wealth'], 2);
212
-
213
- expect(result.topic).toBe('Climate policy');
214
- expect(result.perspectives).toEqual(['Climate & Environment', 'Economy & Wealth']);
215
- expect(result.exchanges).toHaveLength(4); // 2 rounds * 2 perspectives
216
- expect(result.conclusion).toBeDefined();
217
- });
218
-
219
- it('should throw error if not exactly 2 perspectives', async () => {
220
- await expect(council.debate('Topic', ['One']))
221
- .rejects.toThrow('Debate requires exactly 2 perspectives');
222
-
223
- await expect(council.debate('Topic', ['One', 'Two', 'Three']))
224
- .rejects.toThrow('Debate requires exactly 2 perspectives');
225
- });
226
-
227
- it('should build context through debate rounds', async () => {
228
- let callCount = 0;
229
- mockLLM.sendMessage.mockImplementation(() => {
230
- callCount++;
231
- return Promise.resolve(`Response ${callCount}`);
232
- });
233
-
234
- await council.debate('Topic', ['A', 'B'], 2);
235
-
236
- // Later calls should include previous responses in context
237
- const laterCalls = mockLLM.sendMessage.mock.calls.slice(2);
238
- laterCalls.forEach(call => {
239
- expect(call[1]).toContain('Response');
240
- });
241
- });
242
-
243
- it('should generate conclusion after debate', async () => {
244
- mockLLM.sendMessage.mockResolvedValue('Response');
245
-
246
- const result = await council.debate('Topic', ['A', 'B'], 1);
247
-
248
- // Last call should be conclusion
249
- const lastCall = mockLLM.sendMessage.mock.calls[mockLLM.sendMessage.mock.calls.length - 1];
250
- expect(lastCall[0]).toContain('moderator');
251
- });
252
-
253
- it('should use existing perspective prompts when available', async () => {
254
- mockLLM.sendMessage.mockResolvedValue('Response');
255
-
256
- await council.debate('Topic', ['Health & Wellbeing', 'Climate & Environment'], 1);
257
-
258
- const calls = mockLLM.sendMessage.mock.calls;
259
- expect(calls[0][0]).toContain('Health');
260
- });
261
- });
262
- });