holosphere 2.0.0-alpha1 → 2.0.0-alpha4

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 (154) hide show
  1. package/dist/2019-D2OG2idw.js +6680 -0
  2. package/dist/2019-D2OG2idw.js.map +1 -0
  3. package/dist/2019-EION3wKo.cjs +8 -0
  4. package/dist/2019-EION3wKo.cjs.map +1 -0
  5. package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
  6. package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
  7. package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
  8. package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
  9. package/dist/browser-BSniCNqO.js +3058 -0
  10. package/dist/browser-BSniCNqO.js.map +1 -0
  11. package/dist/browser-Cq59Ij19.cjs +2 -0
  12. package/dist/browser-Cq59Ij19.cjs.map +1 -0
  13. package/dist/cjs/holosphere.cjs +2 -0
  14. package/dist/cjs/holosphere.cjs.map +1 -0
  15. package/dist/esm/holosphere.js +53 -0
  16. package/dist/esm/holosphere.js.map +1 -0
  17. package/dist/index-BB_vVJgv.cjs +5 -0
  18. package/dist/index-BB_vVJgv.cjs.map +1 -0
  19. package/dist/index-CBitK71M.cjs +12 -0
  20. package/dist/index-CBitK71M.cjs.map +1 -0
  21. package/dist/index-CV0eOogK.js +37423 -0
  22. package/dist/index-CV0eOogK.js.map +1 -0
  23. package/dist/index-Cz-PLCUR.js +15104 -0
  24. package/dist/index-Cz-PLCUR.js.map +1 -0
  25. package/dist/indexeddb-storage-CRsZyB2f.cjs +2 -0
  26. package/dist/indexeddb-storage-CRsZyB2f.cjs.map +1 -0
  27. package/dist/indexeddb-storage-DZaGlY_a.js +132 -0
  28. package/dist/indexeddb-storage-DZaGlY_a.js.map +1 -0
  29. package/dist/memory-storage-BkUi6sZG.js +51 -0
  30. package/dist/memory-storage-BkUi6sZG.js.map +1 -0
  31. package/dist/memory-storage-C0DuUsdY.cjs +2 -0
  32. package/dist/memory-storage-C0DuUsdY.cjs.map +1 -0
  33. package/dist/secp256k1-0kPdAVkK.cjs +12 -0
  34. package/dist/secp256k1-0kPdAVkK.cjs.map +1 -0
  35. package/dist/secp256k1-DN4FVXcv.js +1890 -0
  36. package/dist/secp256k1-DN4FVXcv.js.map +1 -0
  37. package/docs/CONTRACTS.md +797 -0
  38. package/docs/FOSDEM_PROPOSAL.md +388 -0
  39. package/docs/LOCALFIRST.md +266 -0
  40. package/docs/contracts/api-interface.md +793 -0
  41. package/docs/data-model.md +476 -0
  42. package/docs/gun-async-usage.md +338 -0
  43. package/docs/plan.md +349 -0
  44. package/docs/quickstart.md +674 -0
  45. package/docs/research.md +362 -0
  46. package/docs/spec.md +244 -0
  47. package/docs/storage-backends.md +326 -0
  48. package/docs/tasks.md +947 -0
  49. package/examples/demo.html +47 -0
  50. package/package.json +10 -5
  51. package/src/contracts/abis/Appreciative.json +1280 -0
  52. package/src/contracts/abis/AppreciativeFactory.json +101 -0
  53. package/src/contracts/abis/Bundle.json +1435 -0
  54. package/src/contracts/abis/BundleFactory.json +106 -0
  55. package/src/contracts/abis/Holon.json +881 -0
  56. package/src/contracts/abis/Holons.json +330 -0
  57. package/src/contracts/abis/Managed.json +1262 -0
  58. package/src/contracts/abis/ManagedFactory.json +149 -0
  59. package/src/contracts/abis/Membrane.json +261 -0
  60. package/src/contracts/abis/Splitter.json +1624 -0
  61. package/src/contracts/abis/SplitterFactory.json +220 -0
  62. package/src/contracts/abis/TestToken.json +321 -0
  63. package/src/contracts/abis/Zoned.json +1461 -0
  64. package/src/contracts/abis/ZonedFactory.json +154 -0
  65. package/src/contracts/chain-manager.js +375 -0
  66. package/src/contracts/deployer.js +443 -0
  67. package/src/contracts/event-listener.js +507 -0
  68. package/src/contracts/holon-contracts.js +344 -0
  69. package/src/contracts/index.js +83 -0
  70. package/src/contracts/networks.js +224 -0
  71. package/src/contracts/operations.js +670 -0
  72. package/src/contracts/queries.js +589 -0
  73. package/src/core/holosphere.js +453 -1
  74. package/src/crypto/nostr-utils.js +263 -0
  75. package/src/federation/handshake.js +455 -0
  76. package/src/federation/hologram.js +1 -1
  77. package/src/hierarchical/upcast.js +6 -5
  78. package/src/index.js +463 -1939
  79. package/src/lib/ai-methods.js +308 -0
  80. package/src/lib/contract-methods.js +293 -0
  81. package/src/lib/errors.js +23 -0
  82. package/src/lib/federation-methods.js +238 -0
  83. package/src/lib/index.js +26 -0
  84. package/src/spatial/h3-operations.js +2 -2
  85. package/src/storage/backends/gundb-backend.js +377 -46
  86. package/src/storage/global-tables.js +28 -1
  87. package/src/storage/gun-auth.js +303 -0
  88. package/src/storage/gun-federation.js +776 -0
  89. package/src/storage/gun-references.js +198 -0
  90. package/src/storage/gun-schema.js +291 -0
  91. package/src/storage/gun-wrapper.js +347 -31
  92. package/src/storage/indexeddb-storage.js +49 -11
  93. package/src/storage/memory-storage.js +5 -0
  94. package/src/storage/nostr-async.js +45 -23
  95. package/src/storage/nostr-client.js +11 -5
  96. package/src/storage/persistent-storage.js +6 -1
  97. package/src/storage/unified-storage.js +119 -0
  98. package/src/subscriptions/manager.js +1 -1
  99. package/types/index.d.ts +133 -0
  100. package/tests/unit/ai/aggregation.test.js +0 -295
  101. package/tests/unit/ai/breakdown.test.js +0 -446
  102. package/tests/unit/ai/classifier.test.js +0 -294
  103. package/tests/unit/ai/council.test.js +0 -262
  104. package/tests/unit/ai/embeddings.test.js +0 -384
  105. package/tests/unit/ai/federation-ai.test.js +0 -344
  106. package/tests/unit/ai/h3-ai.test.js +0 -458
  107. package/tests/unit/ai/index.test.js +0 -304
  108. package/tests/unit/ai/json-ops.test.js +0 -307
  109. package/tests/unit/ai/llm-service.test.js +0 -390
  110. package/tests/unit/ai/nl-query.test.js +0 -383
  111. package/tests/unit/ai/relationships.test.js +0 -311
  112. package/tests/unit/ai/schema-extractor.test.js +0 -384
  113. package/tests/unit/ai/spatial.test.js +0 -279
  114. package/tests/unit/ai/tts.test.js +0 -279
  115. package/tests/unit/content.test.js +0 -332
  116. package/tests/unit/contract/core.test.js +0 -88
  117. package/tests/unit/contract/crypto.test.js +0 -198
  118. package/tests/unit/contract/data.test.js +0 -223
  119. package/tests/unit/contract/federation.test.js +0 -181
  120. package/tests/unit/contract/hierarchical.test.js +0 -113
  121. package/tests/unit/contract/schema.test.js +0 -114
  122. package/tests/unit/contract/social.test.js +0 -217
  123. package/tests/unit/contract/spatial.test.js +0 -110
  124. package/tests/unit/contract/subscriptions.test.js +0 -128
  125. package/tests/unit/contract/utils.test.js +0 -159
  126. package/tests/unit/core.test.js +0 -152
  127. package/tests/unit/crypto.test.js +0 -328
  128. package/tests/unit/federation.test.js +0 -234
  129. package/tests/unit/gun-async.test.js +0 -252
  130. package/tests/unit/hierarchical.test.js +0 -399
  131. package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
  132. package/tests/unit/integration/scenario-02-federation.test.js +0 -76
  133. package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
  134. package/tests/unit/integration/scenario-04-validation.test.js +0 -129
  135. package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
  136. package/tests/unit/integration/scenario-06-social.test.js +0 -135
  137. package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
  138. package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
  139. package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
  140. package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
  141. package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
  142. package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
  143. package/tests/unit/performance/benchmark.test.js +0 -85
  144. package/tests/unit/schema.test.js +0 -213
  145. package/tests/unit/spatial.test.js +0 -158
  146. package/tests/unit/storage.test.js +0 -195
  147. package/tests/unit/subscriptions.test.js +0 -328
  148. package/tests/unit/test-data-permanence-debug.js +0 -197
  149. package/tests/unit/test-data-permanence.js +0 -340
  150. package/tests/unit/test-key-persistence-fixed.js +0 -148
  151. package/tests/unit/test-key-persistence.js +0 -172
  152. package/tests/unit/test-relay-permanence.js +0 -376
  153. package/tests/unit/test-second-node.js +0 -95
  154. package/tests/unit/test-simple-write.js +0 -89
@@ -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
- });