holosphere 2.0.0-alpha1 → 2.0.0-alpha11
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.
- package/CHANGELOG.md +473 -0
- package/FEATURES.md +431 -0
- package/LICENSE +29 -166
- package/LICENSE-AGPL.md +180 -0
- package/README.md +97 -16
- package/dist/2019-D2OG2idw.js +6680 -0
- package/dist/2019-D2OG2idw.js.map +1 -0
- package/dist/2019-EION3wKo.cjs +8 -0
- package/dist/2019-EION3wKo.cjs.map +1 -0
- package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
- package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
- package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
- package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
- package/dist/browser-BSniCNqO.js +3058 -0
- package/dist/browser-BSniCNqO.js.map +1 -0
- package/dist/browser-Cq59Ij19.cjs +2 -0
- package/dist/browser-Cq59Ij19.cjs.map +1 -0
- package/dist/cjs/holosphere.cjs +2 -0
- package/dist/cjs/holosphere.cjs.map +1 -0
- package/dist/esm/holosphere.js +53 -0
- package/dist/esm/holosphere.js.map +1 -0
- package/dist/index-Bl6rM1NW.js +15104 -0
- package/dist/index-Bl6rM1NW.js.map +1 -0
- package/dist/index-Bwg3OzRM.cjs +12 -0
- package/dist/index-Bwg3OzRM.cjs.map +1 -0
- package/dist/index-D-jZhliX.js +40274 -0
- package/dist/index-D-jZhliX.js.map +1 -0
- package/dist/index-Dc6Z8Aob.cjs +18 -0
- package/dist/index-Dc6Z8Aob.cjs.map +1 -0
- package/dist/indexeddb-storage-5eiUNsHC.js +176 -0
- package/dist/indexeddb-storage-5eiUNsHC.js.map +1 -0
- package/dist/indexeddb-storage-FNFUVvTJ.cjs +2 -0
- package/dist/indexeddb-storage-FNFUVvTJ.cjs.map +1 -0
- package/dist/memory-storage-CI-gfmuG.js +91 -0
- package/dist/memory-storage-CI-gfmuG.js.map +1 -0
- package/dist/memory-storage-DMt36uZO.cjs +2 -0
- package/dist/memory-storage-DMt36uZO.cjs.map +1 -0
- package/dist/secp256k1-CEwJNcfV.js +1890 -0
- package/dist/secp256k1-CEwJNcfV.js.map +1 -0
- package/dist/secp256k1-CiEONUnj.cjs +12 -0
- package/dist/secp256k1-CiEONUnj.cjs.map +1 -0
- package/docs/CONTRACTS.md +797 -0
- package/docs/FOSDEM_PROPOSAL.md +388 -0
- package/docs/LOCALFIRST.md +266 -0
- package/docs/api/ai_aggregation.js.html +333 -0
- package/docs/api/ai_breakdown.js.html +524 -0
- package/docs/api/ai_classifier.js.html +231 -0
- package/docs/api/ai_council.js.html +246 -0
- package/docs/api/ai_embeddings.js.html +304 -0
- package/docs/api/ai_federation-ai.js.html +338 -0
- package/docs/api/ai_h3-ai.js.html +970 -0
- package/docs/api/ai_index.js.html +124 -0
- package/docs/api/ai_json-ops.js.html +241 -0
- package/docs/api/ai_llm-service.js.html +239 -0
- package/docs/api/ai_nl-query.js.html +236 -0
- package/docs/api/ai_relationships.js.html +367 -0
- package/docs/api/ai_schema-extractor.js.html +235 -0
- package/docs/api/ai_spatial.js.html +307 -0
- package/docs/api/ai_tts.js.html +214 -0
- package/docs/api/content_social-protocols.js.html +180 -0
- package/docs/api/core_holosphere.js.html +757 -0
- package/docs/api/crypto_nostr-utils.js.html +306 -0
- package/docs/api/crypto_secp256k1.js.html +267 -0
- package/docs/api/data/search.json +1 -0
- package/docs/api/federation_discovery.js.html +337 -0
- package/docs/api/federation_handshake.js.html +478 -0
- package/docs/api/federation_hologram.js.html +1053 -0
- package/docs/api/federation_registry.js.html +389 -0
- package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
- package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
- package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
- package/docs/api/global.html +3 -0
- package/docs/api/hierarchical_upcast.js.html +128 -0
- package/docs/api/index.html +265 -0
- package/docs/api/index.js.html +1868 -0
- package/docs/api/lib_ai-methods.js.html +660 -0
- package/docs/api/lib_contract-methods.js.html +445 -0
- package/docs/api/lib_errors.js.html +56 -0
- package/docs/api/lib_federation-methods.js.html +348 -0
- package/docs/api/lib_index.js.html +33 -0
- package/docs/api/module-ai.html +5 -0
- package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
- package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
- package/docs/api/module-ai_aggregation.html +3 -0
- package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
- package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
- package/docs/api/module-ai_breakdown.html +3 -0
- package/docs/api/module-ai_classifier-Classifier.html +6 -0
- package/docs/api/module-ai_classifier.Classifier.html +3 -0
- package/docs/api/module-ai_classifier.html +3 -0
- package/docs/api/module-ai_council-Council.html +6 -0
- package/docs/api/module-ai_council.Council.html +3 -0
- package/docs/api/module-ai_council.html +3 -0
- package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
- package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
- package/docs/api/module-ai_embeddings.html +3 -0
- package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
- package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
- package/docs/api/module-ai_federation-ai.html +3 -0
- package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
- package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
- package/docs/api/module-ai_h3-ai.html +3 -0
- package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
- package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
- package/docs/api/module-ai_json-ops.html +3 -0
- package/docs/api/module-ai_llm-service-LLMService.html +5 -0
- package/docs/api/module-ai_llm-service.LLMService.html +3 -0
- package/docs/api/module-ai_llm-service.html +3 -0
- package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
- package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
- package/docs/api/module-ai_nl-query.html +3 -0
- package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
- package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
- package/docs/api/module-ai_relationships.html +3 -0
- package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
- package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
- package/docs/api/module-ai_schema-extractor.html +3 -0
- package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
- package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
- package/docs/api/module-ai_spatial.html +3 -0
- package/docs/api/module-ai_tts-TTS.html +5 -0
- package/docs/api/module-ai_tts.TTS.html +3 -0
- package/docs/api/module-ai_tts.html +3 -0
- package/docs/api/module-content_social-protocols.html +3 -0
- package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
- package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
- package/docs/api/module-core_holosphere.html +3 -0
- package/docs/api/module-crypto_nostr-utils.html +3 -0
- package/docs/api/module-crypto_secp256k1.html +3 -0
- package/docs/api/module-federation_hologram.html +3 -0
- package/docs/api/module-hierarchical_upcast.html +3 -0
- package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
- package/docs/api/module-holosphere.html +3 -0
- package/docs/api/module-lib_ai-methods.html +3 -0
- package/docs/api/module-lib_contract-methods.html +3 -0
- package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
- package/docs/api/module-lib_errors-ValidationError.html +3 -0
- package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
- package/docs/api/module-lib_errors.ValidationError.html +3 -0
- package/docs/api/module-lib_errors.html +3 -0
- package/docs/api/module-lib_federation-methods.html +3 -0
- package/docs/api/module-lib_index.html +3 -0
- package/docs/api/module-schema_validator-ValidationError.html +3 -0
- package/docs/api/module-schema_validator.ValidationError.html +3 -0
- package/docs/api/module-schema_validator.html +3 -0
- package/docs/api/module-spatial_h3-operations.html +4 -0
- package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
- package/docs/api/module-storage_backend-factory.html +3 -0
- package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
- package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
- package/docs/api/module-storage_backend-interface.html +3 -0
- package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
- package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
- package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
- package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
- package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
- package/docs/api/module-storage_backends_activitypub_server.html +3 -0
- package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
- package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
- package/docs/api/module-storage_backends_gundb-backend.html +3 -0
- package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
- package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
- package/docs/api/module-storage_backends_nostr-backend.html +3 -0
- package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
- package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
- package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage.html +3 -0
- package/docs/api/module-storage_global-tables.html +3 -0
- package/docs/api/module-storage_gun-async.html +3 -0
- package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
- package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
- package/docs/api/module-storage_gun-auth.html +3 -0
- package/docs/api/module-storage_gun-federation.html +3 -0
- package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
- package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
- package/docs/api/module-storage_gun-references.html +3 -0
- package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
- package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
- package/docs/api/module-storage_gun-schema.html +3 -0
- package/docs/api/module-storage_gun-wrapper.html +11 -0
- package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
- package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
- package/docs/api/module-storage_indexeddb-storage.html +3 -0
- package/docs/api/module-storage_key-storage-simple.html +3 -0
- package/docs/api/module-storage_key-storage.html +4 -0
- package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
- package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
- package/docs/api/module-storage_memory-storage.html +3 -0
- package/docs/api/module-storage_migration-MigrationTool.html +6 -0
- package/docs/api/module-storage_migration.MigrationTool.html +3 -0
- package/docs/api/module-storage_migration.html +3 -0
- package/docs/api/module-storage_nostr-async.html +18 -0
- package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
- package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
- package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
- package/docs/api/module-storage_nostr-client.html +6 -0
- package/docs/api/module-storage_nostr-wrapper.html +3 -0
- package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
- package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
- package/docs/api/module-storage_outbox-queue.html +3 -0
- package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
- package/docs/api/module-storage_persistent-storage.html +4 -0
- package/docs/api/module-storage_sync-service-SyncService.html +5 -0
- package/docs/api/module-storage_sync-service.SyncService.html +3 -0
- package/docs/api/module-storage_sync-service.html +3 -0
- package/docs/api/module-storage_unified-storage.html +3 -0
- package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
- package/docs/api/module-subscriptions_manager.html +3 -0
- package/docs/api/schema_validator.js.html +113 -0
- package/docs/api/scripts/core.js +726 -0
- package/docs/api/scripts/core.min.js +23 -0
- package/docs/api/scripts/resize.js +90 -0
- package/docs/api/scripts/search.js +265 -0
- package/docs/api/scripts/search.min.js +6 -0
- package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
- package/docs/api/scripts/third-party/fuse.js +9 -0
- package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
- package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
- package/docs/api/scripts/third-party/hljs-original.js +5171 -0
- package/docs/api/scripts/third-party/hljs.js +1 -0
- package/docs/api/scripts/third-party/popper.js +5 -0
- package/docs/api/scripts/third-party/tippy.js +1 -0
- package/docs/api/scripts/third-party/tocbot.js +672 -0
- package/docs/api/scripts/third-party/tocbot.min.js +1 -0
- package/docs/api/spatial_h3-operations.js.html +129 -0
- package/docs/api/storage_backend-factory.js.html +133 -0
- package/docs/api/storage_backend-interface.js.html +164 -0
- package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
- package/docs/api/storage_backends_activitypub_server.js.html +678 -0
- package/docs/api/storage_backends_gundb-backend.js.html +878 -0
- package/docs/api/storage_backends_nostr-backend.js.html +254 -0
- package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
- package/docs/api/storage_filesystem-storage.js.html +207 -0
- package/docs/api/storage_global-tables.js.html +116 -0
- package/docs/api/storage_gun-async.js.html +344 -0
- package/docs/api/storage_gun-auth.js.html +376 -0
- package/docs/api/storage_gun-federation.js.html +788 -0
- package/docs/api/storage_gun-references.js.html +212 -0
- package/docs/api/storage_gun-schema.js.html +309 -0
- package/docs/api/storage_gun-wrapper.js.html +645 -0
- package/docs/api/storage_indexeddb-storage.js.html +224 -0
- package/docs/api/storage_key-storage-simple.js.html +102 -0
- package/docs/api/storage_key-storage.js.html +171 -0
- package/docs/api/storage_memory-storage.js.html +128 -0
- package/docs/api/storage_migration.js.html +354 -0
- package/docs/api/storage_nostr-async.js.html +1076 -0
- package/docs/api/storage_nostr-client.js.html +1598 -0
- package/docs/api/storage_nostr-wrapper.js.html +218 -0
- package/docs/api/storage_outbox-queue.js.html +248 -0
- package/docs/api/storage_persistent-storage.js.html +160 -0
- package/docs/api/storage_sync-service.js.html +201 -0
- package/docs/api/storage_unified-storage.js.html +157 -0
- package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
- package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
- package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
- package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
- package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
- package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
- package/docs/api/subscriptions_manager.js.html +162 -0
- package/docs/contracts/api-interface.md +793 -0
- package/docs/data-model.md +476 -0
- package/docs/gun-async-usage.md +338 -0
- package/docs/plan.md +349 -0
- package/docs/quickstart.md +674 -0
- package/docs/research.md +362 -0
- package/docs/spec.md +244 -0
- package/docs/storage-backends.md +326 -0
- package/docs/tasks.md +947 -0
- package/examples/demo.html +47 -0
- package/examples/holosphere-widget.js +1242 -0
- package/examples/widget-demo.html +274 -0
- package/examples/widget.html +703 -0
- package/jsdoc.json +26 -0
- package/package.json +25 -7
- package/src/ai/aggregation.js +13 -2
- package/src/ai/breakdown.js +12 -2
- package/src/ai/classifier.js +14 -3
- package/src/ai/council.js +22 -7
- package/src/ai/embeddings.js +37 -15
- package/src/ai/federation-ai.js +13 -2
- package/src/ai/h3-ai.js +14 -2
- package/src/ai/index.js +16 -7
- package/src/ai/json-ops.js +18 -5
- package/src/ai/llm-service.js +62 -31
- package/src/ai/nl-query.js +12 -2
- package/src/ai/relationships.js +13 -2
- package/src/ai/schema-extractor.js +24 -10
- package/src/ai/spatial.js +13 -2
- package/src/ai/tts.js +25 -8
- package/src/cdn-entry.js +22 -0
- package/src/content/social-protocols.js +34 -25
- package/src/contracts/abis/Appreciative.json +1280 -0
- package/src/contracts/abis/AppreciativeFactory.json +101 -0
- package/src/contracts/abis/Bundle.json +1438 -0
- package/src/contracts/abis/BundleFactory.json +106 -0
- package/src/contracts/abis/Holon.json +881 -0
- package/src/contracts/abis/Holons.json +330 -0
- package/src/contracts/abis/Managed.json +1262 -0
- package/src/contracts/abis/ManagedFactory.json +149 -0
- package/src/contracts/abis/Membrane.json +261 -0
- package/src/contracts/abis/Splitter.json +1624 -0
- package/src/contracts/abis/SplitterFactory.json +220 -0
- package/src/contracts/abis/TestToken.json +321 -0
- package/src/contracts/abis/Zoned.json +1461 -0
- package/src/contracts/abis/ZonedFactory.json +154 -0
- package/src/contracts/chain-manager.js +403 -0
- package/src/contracts/deployer.js +500 -0
- package/src/contracts/event-listener.js +539 -0
- package/src/contracts/holon-contracts.js +359 -0
- package/src/contracts/index.js +82 -0
- package/src/contracts/networks.js +229 -0
- package/src/contracts/operations.js +687 -0
- package/src/contracts/queries.js +638 -0
- package/src/core/holosphere.js +487 -6
- package/src/crypto/nostr-utils.js +303 -0
- package/src/crypto/secp256k1.js +7 -2
- package/src/federation/handshake.js +475 -0
- package/src/federation/hologram.js +117 -3
- package/src/hierarchical/upcast.js +40 -25
- package/src/index.js +1547 -1912
- package/src/lib/ai-methods.js +657 -0
- package/src/lib/contract-methods.js +442 -0
- package/src/lib/errors.js +53 -0
- package/src/lib/federation-methods.js +345 -0
- package/src/lib/index.js +30 -0
- package/src/schema/validator.js +22 -3
- package/src/spatial/h3-operations.js +19 -3
- package/src/storage/backend-factory.js +7 -2
- package/src/storage/backend-interface.js +21 -2
- package/src/storage/backends/activitypub/server.js +25 -3
- package/src/storage/backends/activitypub-backend.js +25 -2
- package/src/storage/backends/gundb-backend.js +692 -50
- package/src/storage/backends/nostr-backend.js +116 -1
- package/src/storage/filesystem-storage-browser.js +42 -2
- package/src/storage/filesystem-storage.js +72 -5
- package/src/storage/global-tables.js +35 -3
- package/src/storage/gun-async.js +75 -15
- package/src/storage/gun-auth.js +373 -0
- package/src/storage/gun-federation.js +785 -0
- package/src/storage/gun-references.js +209 -0
- package/src/storage/gun-schema.js +306 -0
- package/src/storage/gun-wrapper.js +475 -54
- package/src/storage/indexeddb-storage.js +112 -13
- package/src/storage/key-storage-simple.js +32 -9
- package/src/storage/key-storage.js +45 -13
- package/src/storage/memory-storage.js +68 -2
- package/src/storage/migration.js +20 -7
- package/src/storage/nostr-async.js +412 -122
- package/src/storage/nostr-client.js +749 -76
- package/src/storage/nostr-wrapper.js +6 -2
- package/src/storage/outbox-queue.js +55 -18
- package/src/storage/persistent-storage.js +62 -14
- package/src/storage/sync-service.js +51 -17
- package/src/storage/unified-storage.js +154 -0
- package/src/subscriptions/manager.js +34 -17
- package/types/index.d.ts +133 -0
- package/vite.config.cdn.js +60 -0
- package/tests/unit/ai/aggregation.test.js +0 -295
- package/tests/unit/ai/breakdown.test.js +0 -446
- package/tests/unit/ai/classifier.test.js +0 -294
- package/tests/unit/ai/council.test.js +0 -262
- package/tests/unit/ai/embeddings.test.js +0 -384
- package/tests/unit/ai/federation-ai.test.js +0 -344
- package/tests/unit/ai/h3-ai.test.js +0 -458
- package/tests/unit/ai/index.test.js +0 -304
- package/tests/unit/ai/json-ops.test.js +0 -307
- package/tests/unit/ai/llm-service.test.js +0 -390
- package/tests/unit/ai/nl-query.test.js +0 -383
- package/tests/unit/ai/relationships.test.js +0 -311
- package/tests/unit/ai/schema-extractor.test.js +0 -384
- package/tests/unit/ai/spatial.test.js +0 -279
- package/tests/unit/ai/tts.test.js +0 -279
- package/tests/unit/content.test.js +0 -332
- package/tests/unit/contract/core.test.js +0 -88
- package/tests/unit/contract/crypto.test.js +0 -198
- package/tests/unit/contract/data.test.js +0 -223
- package/tests/unit/contract/federation.test.js +0 -181
- package/tests/unit/contract/hierarchical.test.js +0 -113
- package/tests/unit/contract/schema.test.js +0 -114
- package/tests/unit/contract/social.test.js +0 -217
- package/tests/unit/contract/spatial.test.js +0 -110
- package/tests/unit/contract/subscriptions.test.js +0 -128
- package/tests/unit/contract/utils.test.js +0 -159
- package/tests/unit/core.test.js +0 -152
- package/tests/unit/crypto.test.js +0 -328
- package/tests/unit/federation.test.js +0 -234
- package/tests/unit/gun-async.test.js +0 -252
- package/tests/unit/hierarchical.test.js +0 -399
- package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
- package/tests/unit/integration/scenario-02-federation.test.js +0 -76
- package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
- package/tests/unit/integration/scenario-04-validation.test.js +0 -129
- package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
- package/tests/unit/integration/scenario-06-social.test.js +0 -135
- package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
- package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
- package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
- package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
- package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
- package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
- package/tests/unit/performance/benchmark.test.js +0 -85
- package/tests/unit/schema.test.js +0 -213
- package/tests/unit/spatial.test.js +0 -158
- package/tests/unit/storage.test.js +0 -195
- package/tests/unit/subscriptions.test.js +0 -328
- package/tests/unit/test-data-permanence-debug.js +0 -197
- package/tests/unit/test-data-permanence.js +0 -340
- package/tests/unit/test-key-persistence-fixed.js +0 -148
- package/tests/unit/test-key-persistence.js +0 -172
- package/tests/unit/test-relay-permanence.js +0 -376
- package/tests/unit/test-second-node.js +0 -95
- package/tests/unit/test-simple-write.js +0 -89
- /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
- /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// Type declarations for holosphere
|
|
2
|
+
// This file tells TypeScript to skip type checking the bundled JS files
|
|
3
|
+
|
|
4
|
+
declare module 'holosphere' {
|
|
5
|
+
export class HoloSphere {
|
|
6
|
+
constructor(config?: any);
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
|
|
9
|
+
// Core CRUD operations
|
|
10
|
+
get(holonId: string, lens: string, key?: string): Promise<any>;
|
|
11
|
+
getAll(holonId: string, lens: string): Promise<Record<string, any>>;
|
|
12
|
+
put(holonId: string, lens: string, value: any): Promise<void>;
|
|
13
|
+
put(holonId: string, lens: string, key: string, value: any): Promise<void>;
|
|
14
|
+
delete(holonId: string, lens: string, key?: string): Promise<void>;
|
|
15
|
+
read(holonId: string, lens: string, key?: string): Promise<any>;
|
|
16
|
+
|
|
17
|
+
// Subscription
|
|
18
|
+
subscribe(holonId: string, lens: string, callback: (data: any, key: string) => void): Promise<{ unsubscribe: () => void }>;
|
|
19
|
+
|
|
20
|
+
// Profile operations
|
|
21
|
+
getHolonProfile(holonId: string): Promise<any>;
|
|
22
|
+
setHolonProfile(holonId: string, profile: any): Promise<void>;
|
|
23
|
+
|
|
24
|
+
// Federation operations
|
|
25
|
+
federate(sourceHolonId: string, targetHolonId: string, sourceKey?: string | null, targetKey?: string | null, bidirectional?: boolean, permissions?: any): Promise<void>;
|
|
26
|
+
federateHolon(holonId: string, targetHolonId: string, options?: any): Promise<void>;
|
|
27
|
+
getFederation(holonId: string): Promise<any>;
|
|
28
|
+
propagate(holonId: string, lens: string, key: string, value: any): Promise<void>;
|
|
29
|
+
propagateData(holonId: string, lens: string, data: any): Promise<void>;
|
|
30
|
+
|
|
31
|
+
// Global operations
|
|
32
|
+
getGlobal(lens: string, key?: string): Promise<any>;
|
|
33
|
+
getAllGlobal(lens: string): Promise<Record<string, any>>;
|
|
34
|
+
writeGlobal(lens: string, key: string, value: any): Promise<void>;
|
|
35
|
+
|
|
36
|
+
// Internal properties (exposed for advanced use)
|
|
37
|
+
gun?: any;
|
|
38
|
+
client?: any;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class PersistentStorage {
|
|
42
|
+
init(namespace: string): Promise<void>;
|
|
43
|
+
put(key: string, event: any): Promise<void>;
|
|
44
|
+
get(key: string): Promise<any | null>;
|
|
45
|
+
getAll(prefix: string): Promise<any[]>;
|
|
46
|
+
delete(key: string): Promise<void>;
|
|
47
|
+
clear(): Promise<void>;
|
|
48
|
+
close(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class IndexedDBStorage extends PersistentStorage {}
|
|
52
|
+
export class MemoryStorage extends PersistentStorage {}
|
|
53
|
+
export class FileSystemStorage extends PersistentStorage {}
|
|
54
|
+
|
|
55
|
+
export class ChainManager {
|
|
56
|
+
constructor(config?: any);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export class ContractDeployer {
|
|
60
|
+
constructor(chainManager: ChainManager);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class ContractOperations {
|
|
64
|
+
constructor(chainManager: ChainManager);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export class ContractQueries {
|
|
68
|
+
constructor(chainManager: ChainManager);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export class EventListener {
|
|
72
|
+
constructor(chainManager: ChainManager);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export class HolonContracts {
|
|
76
|
+
constructor(config?: any);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export const ContractABIs: any;
|
|
80
|
+
export const NETWORKS: any;
|
|
81
|
+
|
|
82
|
+
export class AuthorizationError extends Error {}
|
|
83
|
+
export class ValidationError extends Error {}
|
|
84
|
+
|
|
85
|
+
export const crypto: any;
|
|
86
|
+
export const federation: any;
|
|
87
|
+
export const handshake: {
|
|
88
|
+
initiateFederationHandshake(holosphere: HoloSphere, privateKey: string, params: any): Promise<any>;
|
|
89
|
+
acceptFederationRequest(holosphere: HoloSphere, privateKey: string, params: any): Promise<any>;
|
|
90
|
+
rejectFederationRequest(holosphere: HoloSphere, privateKey: string, params: any): Promise<any>;
|
|
91
|
+
subscribeToFederationDMs(client: any, privateKey: string, publicKey: string, handlers: any): () => void;
|
|
92
|
+
};
|
|
93
|
+
export const hierarchical: any;
|
|
94
|
+
export const nostrUtils: any;
|
|
95
|
+
export const schema: any;
|
|
96
|
+
export const social: any;
|
|
97
|
+
export const spatial: any;
|
|
98
|
+
export const storage: any;
|
|
99
|
+
export const subscriptions: any;
|
|
100
|
+
export const networks: any;
|
|
101
|
+
|
|
102
|
+
export function createHologram(config?: any): any;
|
|
103
|
+
export function createAIServices(config?: any): any;
|
|
104
|
+
export function getNetwork(name: string): any;
|
|
105
|
+
export function getNetworksByType(type: string): any[];
|
|
106
|
+
export function listNetworks(): string[];
|
|
107
|
+
export function isNetworkSupported(name: string): boolean;
|
|
108
|
+
export function getAddressUrl(network: string, address: string): string;
|
|
109
|
+
export function getTxUrl(network: string, txHash: string): string;
|
|
110
|
+
export function matchScope(scope: string, pattern: string): boolean;
|
|
111
|
+
|
|
112
|
+
// AI-related exports
|
|
113
|
+
export class Classifier {}
|
|
114
|
+
export class Council {}
|
|
115
|
+
export class Embeddings {}
|
|
116
|
+
export class FederationAdvisor {}
|
|
117
|
+
export class H3AI {}
|
|
118
|
+
export class JSONOps {}
|
|
119
|
+
export class LLMService {}
|
|
120
|
+
export class NLQuery {}
|
|
121
|
+
export class RelationshipDiscovery {}
|
|
122
|
+
export class SchemaExtractor {}
|
|
123
|
+
export class SmartAggregation {}
|
|
124
|
+
export class SpatialAnalysis {}
|
|
125
|
+
export class TaskBreakdown {}
|
|
126
|
+
export class TTS {}
|
|
127
|
+
|
|
128
|
+
export const MODELS: any;
|
|
129
|
+
export const VOICES: any;
|
|
130
|
+
export const SANKEY_EVENTS: any;
|
|
131
|
+
|
|
132
|
+
export default HoloSphere;
|
|
133
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* CDN Build Configuration
|
|
6
|
+
* Creates a self-contained bundle for browser usage via CDN
|
|
7
|
+
* All dependencies are bundled (no externals)
|
|
8
|
+
*/
|
|
9
|
+
export default defineConfig({
|
|
10
|
+
build: {
|
|
11
|
+
target: 'es2020',
|
|
12
|
+
outDir: 'dist/cdn',
|
|
13
|
+
lib: {
|
|
14
|
+
entry: resolve(__dirname, 'src/cdn-entry.js'),
|
|
15
|
+
name: 'HoloSphere',
|
|
16
|
+
formats: ['iife'],
|
|
17
|
+
fileName: () => 'holosphere.min.js',
|
|
18
|
+
},
|
|
19
|
+
rollupOptions: {
|
|
20
|
+
// Bundle all dependencies for CDN
|
|
21
|
+
external: [],
|
|
22
|
+
output: {
|
|
23
|
+
// Use default export so HoloSphere is directly accessible
|
|
24
|
+
exports: 'default',
|
|
25
|
+
// Extend window with all exports
|
|
26
|
+
extend: true,
|
|
27
|
+
// Provide globals for any remaining externals
|
|
28
|
+
globals: {},
|
|
29
|
+
// Inline dynamic imports
|
|
30
|
+
inlineDynamicImports: true,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
sourcemap: true,
|
|
34
|
+
minify: 'terser',
|
|
35
|
+
terserOptions: {
|
|
36
|
+
compress: {
|
|
37
|
+
drop_console: false,
|
|
38
|
+
passes: 2,
|
|
39
|
+
},
|
|
40
|
+
mangle: {
|
|
41
|
+
safari10: true,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
// Increase chunk size warning limit for CDN bundle
|
|
45
|
+
chunkSizeWarningLimit: 2000,
|
|
46
|
+
},
|
|
47
|
+
resolve: {
|
|
48
|
+
alias: [
|
|
49
|
+
{
|
|
50
|
+
find: './filesystem-storage.js',
|
|
51
|
+
replacement: resolve(__dirname, 'src/storage/filesystem-storage-browser.js'),
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
define: {
|
|
56
|
+
'process.versions.node': JSON.stringify(undefined),
|
|
57
|
+
'process.env.NODE_ENV': JSON.stringify('production'),
|
|
58
|
+
'global': 'globalThis',
|
|
59
|
+
},
|
|
60
|
+
});
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
|
-
import { SmartAggregation } from '../../../src/ai/aggregation.js';
|
|
3
|
-
|
|
4
|
-
// Mock h3-js
|
|
5
|
-
vi.mock('h3-js', () => ({
|
|
6
|
-
getResolution: vi.fn().mockReturnValue(5),
|
|
7
|
-
cellToParent: vi.fn().mockReturnValue('parent_holon'),
|
|
8
|
-
cellToChildren: vi.fn().mockReturnValue(['child1', 'child2', 'child3'])
|
|
9
|
-
}));
|
|
10
|
-
|
|
11
|
-
describe('Unit: SmartAggregation', () => {
|
|
12
|
-
let aggregation;
|
|
13
|
-
let mockLLM;
|
|
14
|
-
let mockHolosphere;
|
|
15
|
-
|
|
16
|
-
beforeEach(() => {
|
|
17
|
-
vi.clearAllMocks();
|
|
18
|
-
|
|
19
|
-
mockLLM = {
|
|
20
|
-
getJSON: vi.fn()
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
mockHolosphere = {
|
|
24
|
-
getAll: vi.fn().mockResolvedValue([]),
|
|
25
|
-
put: vi.fn().mockResolvedValue({ success: true })
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
aggregation = new SmartAggregation(mockLLM, mockHolosphere);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
describe('Constructor', () => {
|
|
32
|
-
it('should initialize with LLM service', () => {
|
|
33
|
-
const a = new SmartAggregation(mockLLM);
|
|
34
|
-
expect(a.llm).toBe(mockLLM);
|
|
35
|
-
expect(a.holosphere).toBeNull();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should accept optional HoloSphere instance', () => {
|
|
39
|
-
expect(aggregation.holosphere).toBe(mockHolosphere);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
describe('setHoloSphere', () => {
|
|
44
|
-
it('should set HoloSphere instance', () => {
|
|
45
|
-
const a = new SmartAggregation(mockLLM);
|
|
46
|
-
a.setHoloSphere(mockHolosphere);
|
|
47
|
-
expect(a.holosphere).toBe(mockHolosphere);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
describe('smartUpcast', () => {
|
|
52
|
-
it('should generate summary and upcast to parent', async () => {
|
|
53
|
-
mockHolosphere.getAll.mockResolvedValue([
|
|
54
|
-
{ id: 1, title: 'Item 1' },
|
|
55
|
-
{ id: 2, title: 'Item 2' }
|
|
56
|
-
]);
|
|
57
|
-
|
|
58
|
-
mockLLM.getJSON.mockResolvedValue({
|
|
59
|
-
text: 'Two items in region',
|
|
60
|
-
stats: { count: 2 },
|
|
61
|
-
notable: ['Item 1'],
|
|
62
|
-
themes: ['development']
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
const result = await aggregation.smartUpcast('holon1', 'projects');
|
|
66
|
-
|
|
67
|
-
expect(result.holon).toBe('holon1');
|
|
68
|
-
expect(result.lens).toBe('projects');
|
|
69
|
-
expect(result.summary).toBeDefined();
|
|
70
|
-
expect(result.dataCount).toBe(2);
|
|
71
|
-
expect(result.parent).toBeDefined();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('should throw error if HoloSphere not available', async () => {
|
|
75
|
-
const a = new SmartAggregation(mockLLM);
|
|
76
|
-
|
|
77
|
-
await expect(a.smartUpcast('holon', 'lens'))
|
|
78
|
-
.rejects.toThrow('HoloSphere instance required');
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('should store summary at parent level when storeResults is true', async () => {
|
|
82
|
-
mockHolosphere.getAll.mockResolvedValue([{ id: 1 }]);
|
|
83
|
-
mockLLM.getJSON.mockResolvedValue({ text: 'Summary' });
|
|
84
|
-
|
|
85
|
-
await aggregation.smartUpcast('holon1', 'projects', { storeResults: true });
|
|
86
|
-
|
|
87
|
-
expect(mockHolosphere.put).toHaveBeenCalledWith(
|
|
88
|
-
'parent_holon',
|
|
89
|
-
'projects_summaries',
|
|
90
|
-
expect.objectContaining({
|
|
91
|
-
childHolon: 'holon1',
|
|
92
|
-
summary: expect.any(Object)
|
|
93
|
-
})
|
|
94
|
-
);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should respect maxLevels option', async () => {
|
|
98
|
-
mockHolosphere.getAll.mockResolvedValue([{ id: 1 }]);
|
|
99
|
-
mockLLM.getJSON.mockResolvedValue({ text: 'Summary' });
|
|
100
|
-
|
|
101
|
-
const result = await aggregation.smartUpcast('holon1', 'projects', { maxLevels: 1 });
|
|
102
|
-
|
|
103
|
-
// Should only go up one level
|
|
104
|
-
expect(result.parent).toBeDefined();
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
describe('_generateSummary', () => {
|
|
109
|
-
it('should generate summary for data', async () => {
|
|
110
|
-
mockLLM.getJSON.mockResolvedValue({
|
|
111
|
-
text: 'Active region',
|
|
112
|
-
stats: { count: 5 },
|
|
113
|
-
notable: ['Project A'],
|
|
114
|
-
themes: ['sustainability']
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
const data = [{ id: 1 }, { id: 2 }];
|
|
118
|
-
const result = await aggregation._generateSummary(data, 'holon1', 'projects');
|
|
119
|
-
|
|
120
|
-
expect(result.text).toBe('Active region');
|
|
121
|
-
expect(result.stats.count).toBe(5);
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it('should return empty summary for empty data', async () => {
|
|
125
|
-
const result = await aggregation._generateSummary([], 'holon1', 'lens');
|
|
126
|
-
|
|
127
|
-
expect(result.text).toBe('No data in this region');
|
|
128
|
-
expect(result.stats.count).toBe(0);
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
describe('generateHolonSummary', () => {
|
|
133
|
-
it('should generate comprehensive holon summary', async () => {
|
|
134
|
-
mockHolosphere.getAll
|
|
135
|
-
.mockResolvedValueOnce([{ id: 1 }]) // projects
|
|
136
|
-
.mockResolvedValueOnce([{ id: 2 }]) // quests
|
|
137
|
-
.mockResolvedValueOnce([]) // events
|
|
138
|
-
.mockResolvedValueOnce([]) // resources
|
|
139
|
-
.mockResolvedValueOnce([{ id: 3 }]); // default
|
|
140
|
-
|
|
141
|
-
mockLLM.getJSON.mockResolvedValue({
|
|
142
|
-
title: 'Region Summary',
|
|
143
|
-
executive_summary: 'Active region',
|
|
144
|
-
highlights: ['Growth'],
|
|
145
|
-
activities: { count: 2, summary: 'Various activities' },
|
|
146
|
-
community: { engagement_level: 'high', notes: 'Active community' },
|
|
147
|
-
resources: ['Local resources'],
|
|
148
|
-
challenges: ['Coordination'],
|
|
149
|
-
opportunities: ['Expansion'],
|
|
150
|
-
health_score: 0.8,
|
|
151
|
-
recommendations: ['Focus on coordination']
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
const result = await aggregation.generateHolonSummary('holon1');
|
|
155
|
-
|
|
156
|
-
expect(result.holon).toBe('holon1');
|
|
157
|
-
expect(result.summary.title).toBe('Region Summary');
|
|
158
|
-
expect(result.lensesAnalyzed).toBeDefined();
|
|
159
|
-
expect(result.totalItems).toBeGreaterThan(0);
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
it('should throw error if HoloSphere not available', async () => {
|
|
163
|
-
const a = new SmartAggregation(mockLLM);
|
|
164
|
-
|
|
165
|
-
await expect(a.generateHolonSummary('holon'))
|
|
166
|
-
.rejects.toThrow('HoloSphere instance required');
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
it('should skip unavailable lenses', async () => {
|
|
170
|
-
mockHolosphere.getAll
|
|
171
|
-
.mockResolvedValueOnce([{ id: 1 }])
|
|
172
|
-
.mockRejectedValueOnce(new Error('Lens not found'))
|
|
173
|
-
.mockResolvedValueOnce([])
|
|
174
|
-
.mockResolvedValueOnce([])
|
|
175
|
-
.mockResolvedValueOnce([]);
|
|
176
|
-
|
|
177
|
-
mockLLM.getJSON.mockResolvedValue({ title: 'Summary' });
|
|
178
|
-
|
|
179
|
-
const result = await aggregation.generateHolonSummary('holon1');
|
|
180
|
-
|
|
181
|
-
expect(result).toBeDefined();
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
describe('aggregateChildren', () => {
|
|
186
|
-
it('should aggregate summaries from child holons', async () => {
|
|
187
|
-
mockHolosphere.getAll
|
|
188
|
-
.mockResolvedValueOnce([{ id: 1 }])
|
|
189
|
-
.mockResolvedValueOnce([{ id: 2 }])
|
|
190
|
-
.mockResolvedValueOnce([{ id: 3 }]);
|
|
191
|
-
|
|
192
|
-
mockLLM.getJSON.mockResolvedValue({
|
|
193
|
-
text: 'Summary',
|
|
194
|
-
stats: { count: 1 }
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
const result = await aggregation.aggregateChildren('parent_holon', 'projects');
|
|
198
|
-
|
|
199
|
-
expect(result.holon).toBe('parent_holon');
|
|
200
|
-
expect(result.lens).toBe('projects');
|
|
201
|
-
expect(result.childCount).toBeGreaterThan(0);
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
it('should throw error if HoloSphere not available', async () => {
|
|
205
|
-
const a = new SmartAggregation(mockLLM);
|
|
206
|
-
|
|
207
|
-
await expect(a.aggregateChildren('parent', 'lens'))
|
|
208
|
-
.rejects.toThrow('HoloSphere instance required');
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it('should return message when no child data found', async () => {
|
|
212
|
-
mockHolosphere.getAll.mockResolvedValue([]);
|
|
213
|
-
|
|
214
|
-
const result = await aggregation.aggregateChildren('parent_holon', 'projects');
|
|
215
|
-
|
|
216
|
-
expect(result.message).toBe('No child data found');
|
|
217
|
-
expect(result.summary).toBeNull();
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
describe('comparePeriods', () => {
|
|
222
|
-
it('should compare data across time periods', async () => {
|
|
223
|
-
mockHolosphere.getAll.mockResolvedValue([
|
|
224
|
-
{ id: 1, timestamp: '2024-01-15' },
|
|
225
|
-
{ id: 2, timestamp: '2024-06-15' },
|
|
226
|
-
{ id: 3, timestamp: '2024-08-15' }
|
|
227
|
-
]);
|
|
228
|
-
|
|
229
|
-
mockLLM.getJSON.mockResolvedValue({
|
|
230
|
-
growth_rate: 50,
|
|
231
|
-
direction: 'growth',
|
|
232
|
-
new_themes: ['sustainability'],
|
|
233
|
-
disappeared: ['legacy'],
|
|
234
|
-
key_changes: ['Focus shift'],
|
|
235
|
-
summary: 'Growing activity'
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
const result = await aggregation.comparePeriods(
|
|
239
|
-
'holon1',
|
|
240
|
-
'projects',
|
|
241
|
-
{ start: '2024-01-01', end: '2024-03-31' },
|
|
242
|
-
{ start: '2024-07-01', end: '2024-09-30' }
|
|
243
|
-
);
|
|
244
|
-
|
|
245
|
-
expect(result.growth_rate).toBe(50);
|
|
246
|
-
expect(result.direction).toBe('growth');
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
it('should throw error if HoloSphere not available', async () => {
|
|
250
|
-
const a = new SmartAggregation(mockLLM);
|
|
251
|
-
|
|
252
|
-
await expect(a.comparePeriods('h', 'l', {}, {}))
|
|
253
|
-
.rejects.toThrow('HoloSphere instance required');
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
it('should filter items by period', async () => {
|
|
257
|
-
mockHolosphere.getAll.mockResolvedValue([
|
|
258
|
-
{ id: 1, timestamp: '2024-01-15' },
|
|
259
|
-
{ id: 2, timestamp: '2024-02-15' },
|
|
260
|
-
{ id: 3, timestamp: '2024-06-15' }
|
|
261
|
-
]);
|
|
262
|
-
|
|
263
|
-
mockLLM.getJSON.mockResolvedValue({ growth_rate: 0 });
|
|
264
|
-
|
|
265
|
-
await aggregation.comparePeriods(
|
|
266
|
-
'holon1',
|
|
267
|
-
'lens',
|
|
268
|
-
{ start: '2024-01-01', end: '2024-03-31' },
|
|
269
|
-
{ start: '2024-06-01', end: '2024-06-30' }
|
|
270
|
-
);
|
|
271
|
-
|
|
272
|
-
const call = mockLLM.getJSON.mock.calls[0];
|
|
273
|
-
expect(call[1]).toContain('Period 1 data');
|
|
274
|
-
expect(call[1]).toContain('Period 2 data');
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
it('should handle items with created_at field', async () => {
|
|
278
|
-
mockHolosphere.getAll.mockResolvedValue([
|
|
279
|
-
{ id: 1, created_at: '2024-01-15' },
|
|
280
|
-
{ id: 2, created_at: '2024-06-15' }
|
|
281
|
-
]);
|
|
282
|
-
|
|
283
|
-
mockLLM.getJSON.mockResolvedValue({ growth_rate: 100 });
|
|
284
|
-
|
|
285
|
-
await aggregation.comparePeriods(
|
|
286
|
-
'holon1',
|
|
287
|
-
'lens',
|
|
288
|
-
{ start: '2024-01-01', end: '2024-03-31' },
|
|
289
|
-
{ start: '2024-06-01', end: '2024-06-30' }
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
expect(mockLLM.getJSON).toHaveBeenCalled();
|
|
293
|
-
});
|
|
294
|
-
});
|
|
295
|
-
});
|