society-protocol 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/adapters.d.ts +101 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +764 -0
- package/dist/adapters.js.map +1 -0
- package/dist/agents-md.d.ts +59 -0
- package/dist/agents-md.d.ts.map +1 -0
- package/dist/agents-md.js +204 -0
- package/dist/agents-md.js.map +1 -0
- package/dist/autoconfig.d.ts +137 -0
- package/dist/autoconfig.d.ts.map +1 -0
- package/dist/autoconfig.js +452 -0
- package/dist/autoconfig.js.map +1 -0
- package/dist/bootstrap.d.ts +68 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +304 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/bridges/a2a-bridge.d.ts +156 -0
- package/dist/bridges/a2a-bridge.d.ts.map +1 -0
- package/dist/bridges/a2a-bridge.js +337 -0
- package/dist/bridges/a2a-bridge.js.map +1 -0
- package/dist/bridges/mcp-bridge.d.ts +87 -0
- package/dist/bridges/mcp-bridge.d.ts.map +1 -0
- package/dist/bridges/mcp-bridge.js +332 -0
- package/dist/bridges/mcp-bridge.js.map +1 -0
- package/dist/cache.d.ts +130 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +257 -0
- package/dist/cache.js.map +1 -0
- package/dist/capsules.d.ts +23 -0
- package/dist/capsules.d.ts.map +1 -0
- package/dist/capsules.js +75 -0
- package/dist/capsules.js.map +1 -0
- package/dist/cli/commands.d.ts +8 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +263 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/coc.d.ts +121 -0
- package/dist/coc.d.ts.map +1 -0
- package/dist/coc.js +629 -0
- package/dist/coc.js.map +1 -0
- package/dist/coc.test.d.ts +2 -0
- package/dist/coc.test.d.ts.map +1 -0
- package/dist/coc.test.js +80 -0
- package/dist/coc.test.js.map +1 -0
- package/dist/compression.d.ts +125 -0
- package/dist/compression.d.ts.map +1 -0
- package/dist/compression.js +573 -0
- package/dist/compression.js.map +1 -0
- package/dist/cot-stream.d.ts +220 -0
- package/dist/cot-stream.d.ts.map +1 -0
- package/dist/cot-stream.js +673 -0
- package/dist/cot-stream.js.map +1 -0
- package/dist/crypto-wasm.d.ts +100 -0
- package/dist/crypto-wasm.d.ts.map +1 -0
- package/dist/crypto-wasm.js +229 -0
- package/dist/crypto-wasm.js.map +1 -0
- package/dist/federation.d.ts +200 -0
- package/dist/federation.d.ts.map +1 -0
- package/dist/federation.js +691 -0
- package/dist/federation.js.map +1 -0
- package/dist/federation.test.d.ts +2 -0
- package/dist/federation.test.d.ts.map +1 -0
- package/dist/federation.test.js +71 -0
- package/dist/federation.test.js.map +1 -0
- package/dist/gateway/capability-router.d.ts +77 -0
- package/dist/gateway/capability-router.d.ts.map +1 -0
- package/dist/gateway/capability-router.js +222 -0
- package/dist/gateway/capability-router.js.map +1 -0
- package/dist/gateway/demand-spawner.d.ts +155 -0
- package/dist/gateway/demand-spawner.d.ts.map +1 -0
- package/dist/gateway/demand-spawner.js +426 -0
- package/dist/gateway/demand-spawner.js.map +1 -0
- package/dist/identity.d.ts +46 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +102 -0
- package/dist/identity.js.map +1 -0
- package/dist/identity.test.d.ts +2 -0
- package/dist/identity.test.d.ts.map +1 -0
- package/dist/identity.test.js +45 -0
- package/dist/identity.test.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1572 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +210 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +1105 -0
- package/dist/integration.js.map +1 -0
- package/dist/integration.test.d.ts +2 -0
- package/dist/integration.test.d.ts.map +1 -0
- package/dist/integration.test.js +155 -0
- package/dist/integration.test.js.map +1 -0
- package/dist/knowledge.d.ts +219 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +543 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/knowledge.test.d.ts +2 -0
- package/dist/knowledge.test.d.ts.map +1 -0
- package/dist/knowledge.test.js +72 -0
- package/dist/knowledge.test.js.map +1 -0
- package/dist/latent-space.d.ts +178 -0
- package/dist/latent-space.d.ts.map +1 -0
- package/dist/latent-space.js +385 -0
- package/dist/latent-space.js.map +1 -0
- package/dist/lib.d.ts +30 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +30 -0
- package/dist/lib.js.map +1 -0
- package/dist/mcp/server.d.ts +74 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +1392 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/metrics.d.ts +98 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +222 -0
- package/dist/metrics.js.map +1 -0
- package/dist/p2p.d.ts +87 -0
- package/dist/p2p.d.ts.map +1 -0
- package/dist/p2p.js +606 -0
- package/dist/p2p.js.map +1 -0
- package/dist/persona/capabilities.d.ts +17 -0
- package/dist/persona/capabilities.d.ts.map +1 -0
- package/dist/persona/capabilities.js +224 -0
- package/dist/persona/capabilities.js.map +1 -0
- package/dist/persona/domains.d.ts +22 -0
- package/dist/persona/domains.d.ts.map +1 -0
- package/dist/persona/domains.js +176 -0
- package/dist/persona/domains.js.map +1 -0
- package/dist/persona/embeddings.d.ts +40 -0
- package/dist/persona/embeddings.d.ts.map +1 -0
- package/dist/persona/embeddings.js +265 -0
- package/dist/persona/embeddings.js.map +1 -0
- package/dist/persona/engine.d.ts +79 -0
- package/dist/persona/engine.d.ts.map +1 -0
- package/dist/persona/engine.js +1087 -0
- package/dist/persona/engine.js.map +1 -0
- package/dist/persona/index.d.ts +11 -0
- package/dist/persona/index.d.ts.map +1 -0
- package/dist/persona/index.js +11 -0
- package/dist/persona/index.js.map +1 -0
- package/dist/persona/lifecycle.d.ts +17 -0
- package/dist/persona/lifecycle.d.ts.map +1 -0
- package/dist/persona/lifecycle.js +36 -0
- package/dist/persona/lifecycle.js.map +1 -0
- package/dist/persona/retrieval.d.ts +6 -0
- package/dist/persona/retrieval.d.ts.map +1 -0
- package/dist/persona/retrieval.js +122 -0
- package/dist/persona/retrieval.js.map +1 -0
- package/dist/persona/sync.d.ts +15 -0
- package/dist/persona/sync.d.ts.map +1 -0
- package/dist/persona/sync.js +92 -0
- package/dist/persona/sync.js.map +1 -0
- package/dist/persona/types.d.ts +283 -0
- package/dist/persona/types.d.ts.map +1 -0
- package/dist/persona/types.js +2 -0
- package/dist/persona/types.js.map +1 -0
- package/dist/persona/zkp/engine.d.ts +26 -0
- package/dist/persona/zkp/engine.d.ts.map +1 -0
- package/dist/persona/zkp/engine.js +370 -0
- package/dist/persona/zkp/engine.js.map +1 -0
- package/dist/persona/zkp/types.d.ts +39 -0
- package/dist/persona/zkp/types.d.ts.map +1 -0
- package/dist/persona/zkp/types.js +2 -0
- package/dist/persona/zkp/types.js.map +1 -0
- package/dist/planner.d.ts +114 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +522 -0
- package/dist/planner.js.map +1 -0
- package/dist/proactive/checkpoints.d.ts +9 -0
- package/dist/proactive/checkpoints.d.ts.map +1 -0
- package/dist/proactive/checkpoints.js +20 -0
- package/dist/proactive/checkpoints.js.map +1 -0
- package/dist/proactive/engine.d.ts +59 -0
- package/dist/proactive/engine.d.ts.map +1 -0
- package/dist/proactive/engine.js +406 -0
- package/dist/proactive/engine.js.map +1 -0
- package/dist/proactive/scheduler.d.ts +11 -0
- package/dist/proactive/scheduler.d.ts.map +1 -0
- package/dist/proactive/scheduler.js +45 -0
- package/dist/proactive/scheduler.js.map +1 -0
- package/dist/proactive/swarm-controller.d.ts +189 -0
- package/dist/proactive/swarm-controller.d.ts.map +1 -0
- package/dist/proactive/swarm-controller.js +477 -0
- package/dist/proactive/swarm-controller.js.map +1 -0
- package/dist/proactive/swarm-registry.d.ts +13 -0
- package/dist/proactive/swarm-registry.d.ts.map +1 -0
- package/dist/proactive/swarm-registry.js +122 -0
- package/dist/proactive/swarm-registry.js.map +1 -0
- package/dist/proactive/types.d.ts +145 -0
- package/dist/proactive/types.d.ts.map +1 -0
- package/dist/proactive/types.js +25 -0
- package/dist/proactive/types.js.map +1 -0
- package/dist/registry.d.ts +35 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +88 -0
- package/dist/registry.js.map +1 -0
- package/dist/reputation.d.ts +123 -0
- package/dist/reputation.d.ts.map +1 -0
- package/dist/reputation.js +366 -0
- package/dist/reputation.js.map +1 -0
- package/dist/reputation.test.d.ts +5 -0
- package/dist/reputation.test.d.ts.map +1 -0
- package/dist/reputation.test.js +265 -0
- package/dist/reputation.test.js.map +1 -0
- package/dist/rooms.d.ts +96 -0
- package/dist/rooms.d.ts.map +1 -0
- package/dist/rooms.js +410 -0
- package/dist/rooms.js.map +1 -0
- package/dist/sdk/client.d.ts +290 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +1287 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/index.d.ts +32 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +70 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/security.d.ts +230 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +652 -0
- package/dist/security.js.map +1 -0
- package/dist/skills/engine.d.ts +262 -0
- package/dist/skills/engine.d.ts.map +1 -0
- package/dist/skills/engine.js +788 -0
- package/dist/skills/engine.js.map +1 -0
- package/dist/skills/engine.test.d.ts +2 -0
- package/dist/skills/engine.test.d.ts.map +1 -0
- package/dist/skills/engine.test.js +134 -0
- package/dist/skills/engine.test.js.map +1 -0
- package/dist/skills/parser.d.ts +129 -0
- package/dist/skills/parser.d.ts.map +1 -0
- package/dist/skills/parser.js +318 -0
- package/dist/skills/parser.js.map +1 -0
- package/dist/social.d.ts +149 -0
- package/dist/social.d.ts.map +1 -0
- package/dist/social.js +401 -0
- package/dist/social.js.map +1 -0
- package/dist/storage-optimized.d.ts +116 -0
- package/dist/storage-optimized.d.ts.map +1 -0
- package/dist/storage-optimized.js +264 -0
- package/dist/storage-optimized.js.map +1 -0
- package/dist/storage.d.ts +584 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +2703 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.test.d.ts +2 -0
- package/dist/storage.test.d.ts.map +1 -0
- package/dist/storage.test.js +78 -0
- package/dist/storage.test.js.map +1 -0
- package/dist/swp.d.ts +443 -0
- package/dist/swp.d.ts.map +1 -0
- package/dist/swp.js +223 -0
- package/dist/swp.js.map +1 -0
- package/dist/swp.test.d.ts +5 -0
- package/dist/swp.test.d.ts.map +1 -0
- package/dist/swp.test.js +127 -0
- package/dist/swp.test.js.map +1 -0
- package/dist/templates.d.ts +25 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +1048 -0
- package/dist/templates.js.map +1 -0
- package/dist/test-e2e.d.ts +14 -0
- package/dist/test-e2e.d.ts.map +1 -0
- package/dist/test-e2e.js +266 -0
- package/dist/test-e2e.js.map +1 -0
- package/dist/workers/research-worker.d.ts +19 -0
- package/dist/workers/research-worker.d.ts.map +1 -0
- package/dist/workers/research-worker.js +141 -0
- package/dist/workers/research-worker.js.map +1 -0
- package/package.json +110 -0
package/dist/cache.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Society Protocol - Caching Layer
|
|
3
|
+
*
|
|
4
|
+
* LRU cache with TTL support for frequently accessed data.
|
|
5
|
+
* Reduces database load and improves response times.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
/**
|
|
9
|
+
* LRU Cache with TTL support
|
|
10
|
+
*/
|
|
11
|
+
export class LRUCache extends EventEmitter {
|
|
12
|
+
cache;
|
|
13
|
+
maxSize;
|
|
14
|
+
defaultTtlMs;
|
|
15
|
+
cleanupInterval;
|
|
16
|
+
stats = {
|
|
17
|
+
hits: 0,
|
|
18
|
+
misses: 0,
|
|
19
|
+
evictions: 0,
|
|
20
|
+
expirations: 0,
|
|
21
|
+
};
|
|
22
|
+
constructor(options = {}) {
|
|
23
|
+
super();
|
|
24
|
+
this.cache = new Map();
|
|
25
|
+
this.maxSize = options.maxSize ?? 1000;
|
|
26
|
+
this.defaultTtlMs = options.defaultTtlMs ?? 60000; // 1 minute default
|
|
27
|
+
// Start cleanup interval
|
|
28
|
+
const checkInterval = options.checkIntervalMs ?? 60000;
|
|
29
|
+
this.cleanupInterval = setInterval(() => this.cleanup(), checkInterval);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get value from cache
|
|
33
|
+
*/
|
|
34
|
+
get(key) {
|
|
35
|
+
const entry = this.cache.get(key);
|
|
36
|
+
if (!entry) {
|
|
37
|
+
this.stats.misses++;
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
// Check expiration
|
|
41
|
+
if (Date.now() > entry.expiresAt) {
|
|
42
|
+
this.cache.delete(key);
|
|
43
|
+
this.stats.expirations++;
|
|
44
|
+
this.emit('expire', key);
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
// Move to end (LRU)
|
|
48
|
+
this.cache.delete(key);
|
|
49
|
+
this.cache.set(key, entry);
|
|
50
|
+
entry.hits++;
|
|
51
|
+
this.stats.hits++;
|
|
52
|
+
return entry.value;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Set value in cache
|
|
56
|
+
*/
|
|
57
|
+
set(key, value, ttlMs) {
|
|
58
|
+
const expiresAt = Date.now() + (ttlMs ?? this.defaultTtlMs);
|
|
59
|
+
// Evict oldest if at capacity
|
|
60
|
+
if (this.cache.size >= this.maxSize && !this.cache.has(key)) {
|
|
61
|
+
const oldestKey = this.cache.keys().next().value;
|
|
62
|
+
if (oldestKey !== undefined) {
|
|
63
|
+
this.cache.delete(oldestKey);
|
|
64
|
+
this.stats.evictions++;
|
|
65
|
+
this.emit('evict', oldestKey);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
this.cache.set(key, {
|
|
69
|
+
value,
|
|
70
|
+
expiresAt,
|
|
71
|
+
hits: 0,
|
|
72
|
+
});
|
|
73
|
+
this.emit('set', key);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if key exists and is not expired
|
|
77
|
+
*/
|
|
78
|
+
has(key) {
|
|
79
|
+
const entry = this.cache.get(key);
|
|
80
|
+
if (!entry)
|
|
81
|
+
return false;
|
|
82
|
+
if (Date.now() > entry.expiresAt) {
|
|
83
|
+
this.cache.delete(key);
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Delete key from cache
|
|
90
|
+
*/
|
|
91
|
+
delete(key) {
|
|
92
|
+
const existed = this.cache.delete(key);
|
|
93
|
+
if (existed) {
|
|
94
|
+
this.emit('delete', key);
|
|
95
|
+
}
|
|
96
|
+
return existed;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Clear all entries
|
|
100
|
+
*/
|
|
101
|
+
clear() {
|
|
102
|
+
this.cache.clear();
|
|
103
|
+
this.emit('clear');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get all keys
|
|
107
|
+
*/
|
|
108
|
+
keys() {
|
|
109
|
+
return this.cache.keys();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get cache size
|
|
113
|
+
*/
|
|
114
|
+
get size() {
|
|
115
|
+
return this.cache.size;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get cache statistics
|
|
119
|
+
*/
|
|
120
|
+
getStats() {
|
|
121
|
+
const total = this.stats.hits + this.stats.misses;
|
|
122
|
+
const hitRate = total > 0 ? this.stats.hits / total : 0;
|
|
123
|
+
return {
|
|
124
|
+
...this.stats,
|
|
125
|
+
size: this.cache.size,
|
|
126
|
+
maxSize: this.maxSize,
|
|
127
|
+
hitRate: Math.round(hitRate * 100) / 100,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Reset statistics
|
|
132
|
+
*/
|
|
133
|
+
resetStats() {
|
|
134
|
+
this.stats = {
|
|
135
|
+
hits: 0,
|
|
136
|
+
misses: 0,
|
|
137
|
+
evictions: 0,
|
|
138
|
+
expirations: 0,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Clean up expired entries
|
|
143
|
+
*/
|
|
144
|
+
cleanup() {
|
|
145
|
+
const now = Date.now();
|
|
146
|
+
let expired = 0;
|
|
147
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
148
|
+
if (now > entry.expiresAt) {
|
|
149
|
+
this.cache.delete(key);
|
|
150
|
+
expired++;
|
|
151
|
+
this.emit('expire', key);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (expired > 0) {
|
|
155
|
+
this.stats.expirations += expired;
|
|
156
|
+
this.emit('cleanup', expired);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Destroy cache and stop cleanup interval
|
|
161
|
+
*/
|
|
162
|
+
destroy() {
|
|
163
|
+
if (this.cleanupInterval) {
|
|
164
|
+
clearInterval(this.cleanupInterval);
|
|
165
|
+
this.cleanupInterval = undefined;
|
|
166
|
+
}
|
|
167
|
+
this.clear();
|
|
168
|
+
this.removeAllListeners();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Knowledge-specific cache with space invalidation
|
|
173
|
+
*/
|
|
174
|
+
export class KnowledgeCache extends LRUCache {
|
|
175
|
+
spaceIndex = new Map();
|
|
176
|
+
constructor(options = {}) {
|
|
177
|
+
super(options);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Cache card with space tracking
|
|
181
|
+
*/
|
|
182
|
+
setCard(cardId, card, spaceId, ttlMs) {
|
|
183
|
+
this.set(`card:${cardId}`, card, ttlMs);
|
|
184
|
+
// Track in space index
|
|
185
|
+
if (!this.spaceIndex.has(spaceId)) {
|
|
186
|
+
this.spaceIndex.set(spaceId, new Set());
|
|
187
|
+
}
|
|
188
|
+
this.spaceIndex.get(spaceId).add(cardId);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get cached card
|
|
192
|
+
*/
|
|
193
|
+
getCard(cardId) {
|
|
194
|
+
return this.get(`card:${cardId}`);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Invalidate all cards in a space
|
|
198
|
+
*/
|
|
199
|
+
invalidateSpace(spaceId) {
|
|
200
|
+
const cardIds = this.spaceIndex.get(spaceId);
|
|
201
|
+
if (!cardIds)
|
|
202
|
+
return 0;
|
|
203
|
+
let count = 0;
|
|
204
|
+
for (const cardId of cardIds) {
|
|
205
|
+
if (this.delete(`card:${cardId}`)) {
|
|
206
|
+
count++;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
this.spaceIndex.delete(spaceId);
|
|
210
|
+
return count;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Cache space metadata
|
|
214
|
+
*/
|
|
215
|
+
setSpace(spaceId, space, ttlMs) {
|
|
216
|
+
this.set(`space:${spaceId}`, space, ttlMs);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get cached space
|
|
220
|
+
*/
|
|
221
|
+
getSpace(spaceId) {
|
|
222
|
+
return this.get(`space:${spaceId}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Federation cache with policy caching
|
|
227
|
+
*/
|
|
228
|
+
export class FederationCache extends LRUCache {
|
|
229
|
+
constructor(options = {}) {
|
|
230
|
+
super({ ...options, defaultTtlMs: 300000 }); // 5 min default for policies
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Cache federation
|
|
234
|
+
*/
|
|
235
|
+
setFederation(fedId, federation) {
|
|
236
|
+
this.set(`fed:${fedId}`, federation);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get cached federation
|
|
240
|
+
*/
|
|
241
|
+
getFederation(fedId) {
|
|
242
|
+
return this.get(`fed:${fedId}`);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Cache policy check result
|
|
246
|
+
*/
|
|
247
|
+
setPolicyCheck(action, actor, result) {
|
|
248
|
+
this.set(`policy:${action}:${actor}`, result, 60000); // 1 min TTL
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get cached policy check
|
|
252
|
+
*/
|
|
253
|
+
getPolicyCheck(action, actor) {
|
|
254
|
+
return this.get(`policy:${action}:${actor}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Society Protocol — Capsules Module
|
|
3
|
+
*
|
|
4
|
+
* A Capsule is an immutable, exported snapshot of a CoC Chain.
|
|
5
|
+
* It contains the DAG, assignment history, and all generated artifacts packaged
|
|
6
|
+
* into a single archive (a `.society` zip file) for sharing and auditing.
|
|
7
|
+
*/
|
|
8
|
+
import { type CocEngine } from './coc.js';
|
|
9
|
+
import { type Storage } from './storage.js';
|
|
10
|
+
export declare class CapsuleExporter {
|
|
11
|
+
private coc;
|
|
12
|
+
private storage;
|
|
13
|
+
constructor(coc: CocEngine, storage: Storage);
|
|
14
|
+
/**
|
|
15
|
+
* Exports a chain to a .society archive file.
|
|
16
|
+
* @param chainId The ID of the chain to export.
|
|
17
|
+
* @param outputDirectory Where to save the file.
|
|
18
|
+
* @returns The absolute path to the generated .society file.
|
|
19
|
+
*/
|
|
20
|
+
export(chainId: string, outputDirectory: string): Promise<string>;
|
|
21
|
+
private guessExtension;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=capsules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsules.d.ts","sourceRoot":"","sources":["../src/capsules.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,qBAAa,eAAe;IAEpB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;gBADP,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,OAAO;IAG5B;;;;;OAKG;IACU,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgD9E,OAAO,CAAC,cAAc;CASzB"}
|
package/dist/capsules.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Society Protocol — Capsules Module
|
|
3
|
+
*
|
|
4
|
+
* A Capsule is an immutable, exported snapshot of a CoC Chain.
|
|
5
|
+
* It contains the DAG, assignment history, and all generated artifacts packaged
|
|
6
|
+
* into a single archive (a `.society` zip file) for sharing and auditing.
|
|
7
|
+
*/
|
|
8
|
+
import archiver from 'archiver';
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
export class CapsuleExporter {
|
|
12
|
+
coc;
|
|
13
|
+
storage;
|
|
14
|
+
constructor(coc, storage) {
|
|
15
|
+
this.coc = coc;
|
|
16
|
+
this.storage = storage;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Exports a chain to a .society archive file.
|
|
20
|
+
* @param chainId The ID of the chain to export.
|
|
21
|
+
* @param outputDirectory Where to save the file.
|
|
22
|
+
* @returns The absolute path to the generated .society file.
|
|
23
|
+
*/
|
|
24
|
+
async export(chainId, outputDirectory) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const chain = this.coc.getChain(chainId);
|
|
27
|
+
if (!chain) {
|
|
28
|
+
return reject(new Error(`Cannot export: Chain ${chainId} not found.`));
|
|
29
|
+
}
|
|
30
|
+
// Also get all raw events for auditing
|
|
31
|
+
const events = this.storage.db.prepare('SELECT * FROM coc_events WHERE chain_id = ? ORDER BY ts ASC').all(chainId);
|
|
32
|
+
const filename = `capsule_${chainId}.society`;
|
|
33
|
+
const outputPath = path.join(outputDirectory, filename);
|
|
34
|
+
const output = fs.createWriteStream(outputPath);
|
|
35
|
+
const archive = archiver('zip', { zlib: { level: 9 } });
|
|
36
|
+
output.on('close', () => {
|
|
37
|
+
resolve(outputPath);
|
|
38
|
+
});
|
|
39
|
+
archive.on('error', (err) => {
|
|
40
|
+
reject(err);
|
|
41
|
+
});
|
|
42
|
+
archive.pipe(output);
|
|
43
|
+
// 1. Write the main manifesto (chain.json)
|
|
44
|
+
archive.append(JSON.stringify(chain, null, 2), { name: 'manifest.json' });
|
|
45
|
+
// 2. Write the audit log
|
|
46
|
+
archive.append(JSON.stringify(events, null, 2), { name: 'audit_log.json' });
|
|
47
|
+
// 3. Extract and write individual artifacts into a folder hierarchy
|
|
48
|
+
for (const step of chain.steps) {
|
|
49
|
+
if (step.artifacts && step.artifacts.length > 0) {
|
|
50
|
+
for (let i = 0; i < step.artifacts.length; i++) {
|
|
51
|
+
const artifact = step.artifacts[i];
|
|
52
|
+
// If artifact is a string containing code/text, we save it directly
|
|
53
|
+
const content = typeof artifact === 'string' ? artifact : JSON.stringify(artifact, null, 2);
|
|
54
|
+
const extension = this.guessExtension(content);
|
|
55
|
+
archive.append(content, { name: `artifacts/${step.step_id}/artifact_${i}${extension}` });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
void archive.finalize();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
guessExtension(content) {
|
|
63
|
+
if (content.startsWith('{') || content.startsWith('['))
|
|
64
|
+
return '.json';
|
|
65
|
+
if (content.includes('import ') || content.includes('function ')) {
|
|
66
|
+
if (content.includes('React') || content.includes('JSX'))
|
|
67
|
+
return '.tsx';
|
|
68
|
+
return '.ts';
|
|
69
|
+
}
|
|
70
|
+
if (content.startsWith('# '))
|
|
71
|
+
return '.md';
|
|
72
|
+
return '.txt';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=capsules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsules.js","sourceRoot":"","sources":["../src/capsules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAiS9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Society Protocol - Enhanced CLI Commands
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { Storage } from '../storage.js';
|
|
7
|
+
import { generateIdentity } from '../identity.js';
|
|
8
|
+
import { SecurityManager } from '../security.js';
|
|
9
|
+
import { FederationEngine } from '../federation.js';
|
|
10
|
+
import { initializeWasm, WasmCryptoEngine } from '../crypto-wasm.js';
|
|
11
|
+
import { globalMetrics } from '../metrics.js';
|
|
12
|
+
import { tmpdir } from 'os';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
import { mkdirSync, rmSync } from 'fs';
|
|
15
|
+
const program = new Command();
|
|
16
|
+
program
|
|
17
|
+
.name('society')
|
|
18
|
+
.description('Society Protocol - P2P Multi-Agent Collaboration')
|
|
19
|
+
.version('1.0.0');
|
|
20
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
21
|
+
// TEST COMMANDS
|
|
22
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
23
|
+
program
|
|
24
|
+
.command('test')
|
|
25
|
+
.description('Run test suite')
|
|
26
|
+
.option('--unit', 'Run unit tests only')
|
|
27
|
+
.option('--integration', 'Run integration tests only')
|
|
28
|
+
.option('--coverage', 'Generate coverage report')
|
|
29
|
+
.option('--watch', 'Watch mode')
|
|
30
|
+
.action(async (options) => {
|
|
31
|
+
console.log('🧪 Running tests...\n');
|
|
32
|
+
const { execSync } = await import('child_process');
|
|
33
|
+
let cmd = 'npx vitest run';
|
|
34
|
+
if (options.unit)
|
|
35
|
+
cmd += ' test/unit';
|
|
36
|
+
if (options.integration)
|
|
37
|
+
cmd += ' test/integration';
|
|
38
|
+
if (options.coverage)
|
|
39
|
+
cmd += ' --coverage';
|
|
40
|
+
if (options.watch)
|
|
41
|
+
cmd = cmd.replace('run', '');
|
|
42
|
+
try {
|
|
43
|
+
execSync(cmd, { stdio: 'inherit' });
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
50
|
+
// BENCHMARK COMMANDS
|
|
51
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
52
|
+
program
|
|
53
|
+
.command('benchmark')
|
|
54
|
+
.description('Run performance benchmarks')
|
|
55
|
+
.option('--crypto', 'Benchmark cryptography only')
|
|
56
|
+
.option('--storage', 'Benchmark storage only')
|
|
57
|
+
.option('--all', 'Run all benchmarks')
|
|
58
|
+
.action(async (options) => {
|
|
59
|
+
console.log('🚀 Running benchmarks...\n');
|
|
60
|
+
const testDir = join(tmpdir(), `society-benchmark-cli-${Date.now()}`);
|
|
61
|
+
mkdirSync(testDir, { recursive: true });
|
|
62
|
+
const results = {};
|
|
63
|
+
try {
|
|
64
|
+
// Crypto Benchmarks
|
|
65
|
+
if (options.crypto || options.all || (!options.crypto && !options.storage)) {
|
|
66
|
+
console.log('📊 Crypto Benchmarks');
|
|
67
|
+
console.log('─'.repeat(50));
|
|
68
|
+
const storage = new Storage({ dbPath: join(testDir, 'bench-crypto.db') });
|
|
69
|
+
const identity = await generateIdentity(storage, 'Benchmark');
|
|
70
|
+
const security = new SecurityManager(identity);
|
|
71
|
+
// Sign benchmark
|
|
72
|
+
const message = new TextEncoder().encode('Benchmark');
|
|
73
|
+
let signStart = Date.now();
|
|
74
|
+
for (let i = 0; i < 1000; i++) {
|
|
75
|
+
await security.sign(message);
|
|
76
|
+
}
|
|
77
|
+
results.cryptoSign = {
|
|
78
|
+
ops: 1000,
|
|
79
|
+
time: Date.now() - signStart,
|
|
80
|
+
opsPerSec: Math.round(1000 / ((Date.now() - signStart) / 1000)),
|
|
81
|
+
};
|
|
82
|
+
console.log(` Sign: ${results.cryptoSign.opsPerSec} ops/sec`);
|
|
83
|
+
// Verify benchmark
|
|
84
|
+
const signature = await security.sign(message);
|
|
85
|
+
let verifyStart = Date.now();
|
|
86
|
+
for (let i = 0; i < 1000; i++) {
|
|
87
|
+
await security.verify(message, signature, identity.publicKey);
|
|
88
|
+
}
|
|
89
|
+
results.cryptoVerify = {
|
|
90
|
+
ops: 1000,
|
|
91
|
+
time: Date.now() - verifyStart,
|
|
92
|
+
opsPerSec: Math.round(1000 / ((Date.now() - verifyStart) / 1000)),
|
|
93
|
+
};
|
|
94
|
+
console.log(` Verify: ${results.cryptoVerify.opsPerSec} ops/sec`);
|
|
95
|
+
console.log('');
|
|
96
|
+
}
|
|
97
|
+
// Storage Benchmarks
|
|
98
|
+
if (options.storage || options.all || (!options.crypto && !options.storage)) {
|
|
99
|
+
console.log('📊 Storage Benchmarks');
|
|
100
|
+
console.log('─'.repeat(50));
|
|
101
|
+
const storage = new Storage({ dbPath: join(testDir, 'bench-storage.db') });
|
|
102
|
+
// Write benchmark
|
|
103
|
+
let writeStart = Date.now();
|
|
104
|
+
storage.transaction(() => {
|
|
105
|
+
for (let i = 0; i < 10000; i++) {
|
|
106
|
+
storage.set(`key-${i}`, { index: i, data: 'x'.repeat(100) });
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
results.storageWrite = {
|
|
110
|
+
ops: 10000,
|
|
111
|
+
time: Date.now() - writeStart,
|
|
112
|
+
opsPerSec: Math.round(10000 / ((Date.now() - writeStart) / 1000)),
|
|
113
|
+
};
|
|
114
|
+
console.log(` Write: ${results.storageWrite.opsPerSec} ops/sec`);
|
|
115
|
+
// Read benchmark
|
|
116
|
+
let readStart = Date.now();
|
|
117
|
+
for (let i = 0; i < 10000; i++) {
|
|
118
|
+
storage.get(`key-${i}`);
|
|
119
|
+
}
|
|
120
|
+
results.storageRead = {
|
|
121
|
+
ops: 10000,
|
|
122
|
+
time: Date.now() - readStart,
|
|
123
|
+
opsPerSec: Math.round(10000 / ((Date.now() - readStart) / 1000)),
|
|
124
|
+
};
|
|
125
|
+
console.log(` Read: ${results.storageRead.opsPerSec} ops/sec`);
|
|
126
|
+
console.log('');
|
|
127
|
+
}
|
|
128
|
+
// Summary
|
|
129
|
+
console.log('✅ Benchmark Complete');
|
|
130
|
+
console.log('─'.repeat(50));
|
|
131
|
+
console.log(JSON.stringify(results, null, 2));
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
138
|
+
// WASM COMMANDS
|
|
139
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
140
|
+
program
|
|
141
|
+
.command('wasm')
|
|
142
|
+
.description('WASM crypto operations')
|
|
143
|
+
.option('--init', 'Initialize WASM module')
|
|
144
|
+
.option('--benchmark', 'Benchmark WASM vs JS')
|
|
145
|
+
.option('--status', 'Check WASM status')
|
|
146
|
+
.action(async (options) => {
|
|
147
|
+
if (options.status) {
|
|
148
|
+
try {
|
|
149
|
+
await initializeWasm();
|
|
150
|
+
console.log('✅ WASM module loaded');
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
console.log('❌ WASM not available:', e);
|
|
154
|
+
}
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (options.init) {
|
|
158
|
+
console.log('🔧 Initializing WASM...');
|
|
159
|
+
try {
|
|
160
|
+
await initializeWasm();
|
|
161
|
+
console.log('✅ WASM initialized successfully');
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
console.error('❌ Failed to initialize WASM:', e);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (options.benchmark) {
|
|
170
|
+
console.log('🚀 Benchmarking WASM vs JS...\n');
|
|
171
|
+
try {
|
|
172
|
+
await initializeWasm();
|
|
173
|
+
console.log('WASM Benchmarks:');
|
|
174
|
+
console.log('─'.repeat(50));
|
|
175
|
+
// WASM sign benchmark
|
|
176
|
+
const wasmKeypair = WasmCryptoEngine.generateKeypair();
|
|
177
|
+
const message = new TextEncoder().encode('Benchmark');
|
|
178
|
+
let wasmStart = Date.now();
|
|
179
|
+
for (let i = 0; i < 1000; i++) {
|
|
180
|
+
WasmCryptoEngine.sign(message, wasmKeypair.privateKey);
|
|
181
|
+
}
|
|
182
|
+
const wasmTime = Date.now() - wasmStart;
|
|
183
|
+
console.log(` WASM Sign: ${wasmTime}ms (${Math.round(1000 / (wasmTime / 1000))} ops/sec)`);
|
|
184
|
+
// Compare with JS
|
|
185
|
+
const testDir = join(tmpdir(), `society-wasm-bench-${Date.now()}`);
|
|
186
|
+
mkdirSync(testDir, { recursive: true });
|
|
187
|
+
const storage = new Storage({ dbPath: join(testDir, 'bench.db') });
|
|
188
|
+
const identity = await generateIdentity(storage, 'Benchmark');
|
|
189
|
+
const security = new SecurityManager(identity);
|
|
190
|
+
let jsStart = Date.now();
|
|
191
|
+
for (let i = 0; i < 1000; i++) {
|
|
192
|
+
await security.sign(message);
|
|
193
|
+
}
|
|
194
|
+
const jsTime = Date.now() - jsStart;
|
|
195
|
+
console.log(` JS Sign: ${jsTime}ms (${Math.round(1000 / (jsTime / 1000))} ops/sec)`);
|
|
196
|
+
const speedup = (jsTime / wasmTime).toFixed(1);
|
|
197
|
+
console.log(`\n📈 WASM is ${speedup}x faster than JS`);
|
|
198
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
console.error('❌ Benchmark failed:', e);
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
207
|
+
// METRICS COMMANDS
|
|
208
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
209
|
+
program
|
|
210
|
+
.command('metrics')
|
|
211
|
+
.description('Start metrics server')
|
|
212
|
+
.option('-p, --port <port>', 'Server port', '9090')
|
|
213
|
+
.option('--once', 'Print metrics once and exit')
|
|
214
|
+
.action(async (options) => {
|
|
215
|
+
if (options.once) {
|
|
216
|
+
console.log(globalMetrics.exportPrometheus());
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const port = parseInt(options.port);
|
|
220
|
+
globalMetrics.startServer(port);
|
|
221
|
+
console.log(`📊 Metrics server started on port ${port}`);
|
|
222
|
+
console.log(` Prometheus: http://localhost:${port}/metrics`);
|
|
223
|
+
console.log(` JSON: http://localhost:${port}/metrics.json`);
|
|
224
|
+
console.log(` Health: http://localhost:${port}/health`);
|
|
225
|
+
console.log('\nPress Ctrl+C to stop');
|
|
226
|
+
// Keep process alive
|
|
227
|
+
process.on('SIGINT', () => {
|
|
228
|
+
console.log('\n\n🛑 Stopping metrics server...');
|
|
229
|
+
globalMetrics.stopServer();
|
|
230
|
+
process.exit(0);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
234
|
+
// FEDERATION COMMANDS
|
|
235
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
236
|
+
program
|
|
237
|
+
.command('federation')
|
|
238
|
+
.description('Federation management')
|
|
239
|
+
.option('--create <name>', 'Create new federation')
|
|
240
|
+
.option('--list', 'List all federations')
|
|
241
|
+
.option('--db <path>', 'Database path', '~/.society/society.db')
|
|
242
|
+
.action(async (options) => {
|
|
243
|
+
const storage = new Storage({ dbPath: options.db });
|
|
244
|
+
const identity = await generateIdentity(storage, 'CLI User');
|
|
245
|
+
const federation = new FederationEngine(storage, identity);
|
|
246
|
+
if (options.create) {
|
|
247
|
+
const fed = await federation.createFederation(options.create, 'Created via CLI', 'public');
|
|
248
|
+
console.log('✅ Federation created:');
|
|
249
|
+
console.log(` ID: ${fed.id}`);
|
|
250
|
+
console.log(` Name: ${fed.name}`);
|
|
251
|
+
console.log(` DID: ${fed.did}`);
|
|
252
|
+
}
|
|
253
|
+
if (options.list) {
|
|
254
|
+
const feds = federation.getFederations();
|
|
255
|
+
console.log(`📋 ${feds.length} Federations:`);
|
|
256
|
+
console.log('─'.repeat(60));
|
|
257
|
+
for (const fed of feds) {
|
|
258
|
+
console.log(` ${fed.id} - ${fed.name} (${fed.visibility})`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
export { program };
|
|
263
|
+
//# sourceMappingURL=commands.js.map
|