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.
Files changed (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/adapters.d.ts +101 -0
  4. package/dist/adapters.d.ts.map +1 -0
  5. package/dist/adapters.js +764 -0
  6. package/dist/adapters.js.map +1 -0
  7. package/dist/agents-md.d.ts +59 -0
  8. package/dist/agents-md.d.ts.map +1 -0
  9. package/dist/agents-md.js +204 -0
  10. package/dist/agents-md.js.map +1 -0
  11. package/dist/autoconfig.d.ts +137 -0
  12. package/dist/autoconfig.d.ts.map +1 -0
  13. package/dist/autoconfig.js +452 -0
  14. package/dist/autoconfig.js.map +1 -0
  15. package/dist/bootstrap.d.ts +68 -0
  16. package/dist/bootstrap.d.ts.map +1 -0
  17. package/dist/bootstrap.js +304 -0
  18. package/dist/bootstrap.js.map +1 -0
  19. package/dist/bridges/a2a-bridge.d.ts +156 -0
  20. package/dist/bridges/a2a-bridge.d.ts.map +1 -0
  21. package/dist/bridges/a2a-bridge.js +337 -0
  22. package/dist/bridges/a2a-bridge.js.map +1 -0
  23. package/dist/bridges/mcp-bridge.d.ts +87 -0
  24. package/dist/bridges/mcp-bridge.d.ts.map +1 -0
  25. package/dist/bridges/mcp-bridge.js +332 -0
  26. package/dist/bridges/mcp-bridge.js.map +1 -0
  27. package/dist/cache.d.ts +130 -0
  28. package/dist/cache.d.ts.map +1 -0
  29. package/dist/cache.js +257 -0
  30. package/dist/cache.js.map +1 -0
  31. package/dist/capsules.d.ts +23 -0
  32. package/dist/capsules.d.ts.map +1 -0
  33. package/dist/capsules.js +75 -0
  34. package/dist/capsules.js.map +1 -0
  35. package/dist/cli/commands.d.ts +8 -0
  36. package/dist/cli/commands.d.ts.map +1 -0
  37. package/dist/cli/commands.js +263 -0
  38. package/dist/cli/commands.js.map +1 -0
  39. package/dist/coc.d.ts +121 -0
  40. package/dist/coc.d.ts.map +1 -0
  41. package/dist/coc.js +629 -0
  42. package/dist/coc.js.map +1 -0
  43. package/dist/coc.test.d.ts +2 -0
  44. package/dist/coc.test.d.ts.map +1 -0
  45. package/dist/coc.test.js +80 -0
  46. package/dist/coc.test.js.map +1 -0
  47. package/dist/compression.d.ts +125 -0
  48. package/dist/compression.d.ts.map +1 -0
  49. package/dist/compression.js +573 -0
  50. package/dist/compression.js.map +1 -0
  51. package/dist/cot-stream.d.ts +220 -0
  52. package/dist/cot-stream.d.ts.map +1 -0
  53. package/dist/cot-stream.js +673 -0
  54. package/dist/cot-stream.js.map +1 -0
  55. package/dist/crypto-wasm.d.ts +100 -0
  56. package/dist/crypto-wasm.d.ts.map +1 -0
  57. package/dist/crypto-wasm.js +229 -0
  58. package/dist/crypto-wasm.js.map +1 -0
  59. package/dist/federation.d.ts +200 -0
  60. package/dist/federation.d.ts.map +1 -0
  61. package/dist/federation.js +691 -0
  62. package/dist/federation.js.map +1 -0
  63. package/dist/federation.test.d.ts +2 -0
  64. package/dist/federation.test.d.ts.map +1 -0
  65. package/dist/federation.test.js +71 -0
  66. package/dist/federation.test.js.map +1 -0
  67. package/dist/gateway/capability-router.d.ts +77 -0
  68. package/dist/gateway/capability-router.d.ts.map +1 -0
  69. package/dist/gateway/capability-router.js +222 -0
  70. package/dist/gateway/capability-router.js.map +1 -0
  71. package/dist/gateway/demand-spawner.d.ts +155 -0
  72. package/dist/gateway/demand-spawner.d.ts.map +1 -0
  73. package/dist/gateway/demand-spawner.js +426 -0
  74. package/dist/gateway/demand-spawner.js.map +1 -0
  75. package/dist/identity.d.ts +46 -0
  76. package/dist/identity.d.ts.map +1 -0
  77. package/dist/identity.js +102 -0
  78. package/dist/identity.js.map +1 -0
  79. package/dist/identity.test.d.ts +2 -0
  80. package/dist/identity.test.d.ts.map +1 -0
  81. package/dist/identity.test.js +45 -0
  82. package/dist/identity.test.js.map +1 -0
  83. package/dist/index.d.ts +36 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +1572 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/integration.d.ts +210 -0
  88. package/dist/integration.d.ts.map +1 -0
  89. package/dist/integration.js +1105 -0
  90. package/dist/integration.js.map +1 -0
  91. package/dist/integration.test.d.ts +2 -0
  92. package/dist/integration.test.d.ts.map +1 -0
  93. package/dist/integration.test.js +155 -0
  94. package/dist/integration.test.js.map +1 -0
  95. package/dist/knowledge.d.ts +219 -0
  96. package/dist/knowledge.d.ts.map +1 -0
  97. package/dist/knowledge.js +543 -0
  98. package/dist/knowledge.js.map +1 -0
  99. package/dist/knowledge.test.d.ts +2 -0
  100. package/dist/knowledge.test.d.ts.map +1 -0
  101. package/dist/knowledge.test.js +72 -0
  102. package/dist/knowledge.test.js.map +1 -0
  103. package/dist/latent-space.d.ts +178 -0
  104. package/dist/latent-space.d.ts.map +1 -0
  105. package/dist/latent-space.js +385 -0
  106. package/dist/latent-space.js.map +1 -0
  107. package/dist/lib.d.ts +30 -0
  108. package/dist/lib.d.ts.map +1 -0
  109. package/dist/lib.js +30 -0
  110. package/dist/lib.js.map +1 -0
  111. package/dist/mcp/server.d.ts +74 -0
  112. package/dist/mcp/server.d.ts.map +1 -0
  113. package/dist/mcp/server.js +1392 -0
  114. package/dist/mcp/server.js.map +1 -0
  115. package/dist/metrics.d.ts +98 -0
  116. package/dist/metrics.d.ts.map +1 -0
  117. package/dist/metrics.js +222 -0
  118. package/dist/metrics.js.map +1 -0
  119. package/dist/p2p.d.ts +87 -0
  120. package/dist/p2p.d.ts.map +1 -0
  121. package/dist/p2p.js +606 -0
  122. package/dist/p2p.js.map +1 -0
  123. package/dist/persona/capabilities.d.ts +17 -0
  124. package/dist/persona/capabilities.d.ts.map +1 -0
  125. package/dist/persona/capabilities.js +224 -0
  126. package/dist/persona/capabilities.js.map +1 -0
  127. package/dist/persona/domains.d.ts +22 -0
  128. package/dist/persona/domains.d.ts.map +1 -0
  129. package/dist/persona/domains.js +176 -0
  130. package/dist/persona/domains.js.map +1 -0
  131. package/dist/persona/embeddings.d.ts +40 -0
  132. package/dist/persona/embeddings.d.ts.map +1 -0
  133. package/dist/persona/embeddings.js +265 -0
  134. package/dist/persona/embeddings.js.map +1 -0
  135. package/dist/persona/engine.d.ts +79 -0
  136. package/dist/persona/engine.d.ts.map +1 -0
  137. package/dist/persona/engine.js +1087 -0
  138. package/dist/persona/engine.js.map +1 -0
  139. package/dist/persona/index.d.ts +11 -0
  140. package/dist/persona/index.d.ts.map +1 -0
  141. package/dist/persona/index.js +11 -0
  142. package/dist/persona/index.js.map +1 -0
  143. package/dist/persona/lifecycle.d.ts +17 -0
  144. package/dist/persona/lifecycle.d.ts.map +1 -0
  145. package/dist/persona/lifecycle.js +36 -0
  146. package/dist/persona/lifecycle.js.map +1 -0
  147. package/dist/persona/retrieval.d.ts +6 -0
  148. package/dist/persona/retrieval.d.ts.map +1 -0
  149. package/dist/persona/retrieval.js +122 -0
  150. package/dist/persona/retrieval.js.map +1 -0
  151. package/dist/persona/sync.d.ts +15 -0
  152. package/dist/persona/sync.d.ts.map +1 -0
  153. package/dist/persona/sync.js +92 -0
  154. package/dist/persona/sync.js.map +1 -0
  155. package/dist/persona/types.d.ts +283 -0
  156. package/dist/persona/types.d.ts.map +1 -0
  157. package/dist/persona/types.js +2 -0
  158. package/dist/persona/types.js.map +1 -0
  159. package/dist/persona/zkp/engine.d.ts +26 -0
  160. package/dist/persona/zkp/engine.d.ts.map +1 -0
  161. package/dist/persona/zkp/engine.js +370 -0
  162. package/dist/persona/zkp/engine.js.map +1 -0
  163. package/dist/persona/zkp/types.d.ts +39 -0
  164. package/dist/persona/zkp/types.d.ts.map +1 -0
  165. package/dist/persona/zkp/types.js +2 -0
  166. package/dist/persona/zkp/types.js.map +1 -0
  167. package/dist/planner.d.ts +114 -0
  168. package/dist/planner.d.ts.map +1 -0
  169. package/dist/planner.js +522 -0
  170. package/dist/planner.js.map +1 -0
  171. package/dist/proactive/checkpoints.d.ts +9 -0
  172. package/dist/proactive/checkpoints.d.ts.map +1 -0
  173. package/dist/proactive/checkpoints.js +20 -0
  174. package/dist/proactive/checkpoints.js.map +1 -0
  175. package/dist/proactive/engine.d.ts +59 -0
  176. package/dist/proactive/engine.d.ts.map +1 -0
  177. package/dist/proactive/engine.js +406 -0
  178. package/dist/proactive/engine.js.map +1 -0
  179. package/dist/proactive/scheduler.d.ts +11 -0
  180. package/dist/proactive/scheduler.d.ts.map +1 -0
  181. package/dist/proactive/scheduler.js +45 -0
  182. package/dist/proactive/scheduler.js.map +1 -0
  183. package/dist/proactive/swarm-controller.d.ts +189 -0
  184. package/dist/proactive/swarm-controller.d.ts.map +1 -0
  185. package/dist/proactive/swarm-controller.js +477 -0
  186. package/dist/proactive/swarm-controller.js.map +1 -0
  187. package/dist/proactive/swarm-registry.d.ts +13 -0
  188. package/dist/proactive/swarm-registry.d.ts.map +1 -0
  189. package/dist/proactive/swarm-registry.js +122 -0
  190. package/dist/proactive/swarm-registry.js.map +1 -0
  191. package/dist/proactive/types.d.ts +145 -0
  192. package/dist/proactive/types.d.ts.map +1 -0
  193. package/dist/proactive/types.js +25 -0
  194. package/dist/proactive/types.js.map +1 -0
  195. package/dist/registry.d.ts +35 -0
  196. package/dist/registry.d.ts.map +1 -0
  197. package/dist/registry.js +88 -0
  198. package/dist/registry.js.map +1 -0
  199. package/dist/reputation.d.ts +123 -0
  200. package/dist/reputation.d.ts.map +1 -0
  201. package/dist/reputation.js +366 -0
  202. package/dist/reputation.js.map +1 -0
  203. package/dist/reputation.test.d.ts +5 -0
  204. package/dist/reputation.test.d.ts.map +1 -0
  205. package/dist/reputation.test.js +265 -0
  206. package/dist/reputation.test.js.map +1 -0
  207. package/dist/rooms.d.ts +96 -0
  208. package/dist/rooms.d.ts.map +1 -0
  209. package/dist/rooms.js +410 -0
  210. package/dist/rooms.js.map +1 -0
  211. package/dist/sdk/client.d.ts +290 -0
  212. package/dist/sdk/client.d.ts.map +1 -0
  213. package/dist/sdk/client.js +1287 -0
  214. package/dist/sdk/client.js.map +1 -0
  215. package/dist/sdk/index.d.ts +32 -0
  216. package/dist/sdk/index.d.ts.map +1 -0
  217. package/dist/sdk/index.js +70 -0
  218. package/dist/sdk/index.js.map +1 -0
  219. package/dist/security.d.ts +230 -0
  220. package/dist/security.d.ts.map +1 -0
  221. package/dist/security.js +652 -0
  222. package/dist/security.js.map +1 -0
  223. package/dist/skills/engine.d.ts +262 -0
  224. package/dist/skills/engine.d.ts.map +1 -0
  225. package/dist/skills/engine.js +788 -0
  226. package/dist/skills/engine.js.map +1 -0
  227. package/dist/skills/engine.test.d.ts +2 -0
  228. package/dist/skills/engine.test.d.ts.map +1 -0
  229. package/dist/skills/engine.test.js +134 -0
  230. package/dist/skills/engine.test.js.map +1 -0
  231. package/dist/skills/parser.d.ts +129 -0
  232. package/dist/skills/parser.d.ts.map +1 -0
  233. package/dist/skills/parser.js +318 -0
  234. package/dist/skills/parser.js.map +1 -0
  235. package/dist/social.d.ts +149 -0
  236. package/dist/social.d.ts.map +1 -0
  237. package/dist/social.js +401 -0
  238. package/dist/social.js.map +1 -0
  239. package/dist/storage-optimized.d.ts +116 -0
  240. package/dist/storage-optimized.d.ts.map +1 -0
  241. package/dist/storage-optimized.js +264 -0
  242. package/dist/storage-optimized.js.map +1 -0
  243. package/dist/storage.d.ts +584 -0
  244. package/dist/storage.d.ts.map +1 -0
  245. package/dist/storage.js +2703 -0
  246. package/dist/storage.js.map +1 -0
  247. package/dist/storage.test.d.ts +2 -0
  248. package/dist/storage.test.d.ts.map +1 -0
  249. package/dist/storage.test.js +78 -0
  250. package/dist/storage.test.js.map +1 -0
  251. package/dist/swp.d.ts +443 -0
  252. package/dist/swp.d.ts.map +1 -0
  253. package/dist/swp.js +223 -0
  254. package/dist/swp.js.map +1 -0
  255. package/dist/swp.test.d.ts +5 -0
  256. package/dist/swp.test.d.ts.map +1 -0
  257. package/dist/swp.test.js +127 -0
  258. package/dist/swp.test.js.map +1 -0
  259. package/dist/templates.d.ts +25 -0
  260. package/dist/templates.d.ts.map +1 -0
  261. package/dist/templates.js +1048 -0
  262. package/dist/templates.js.map +1 -0
  263. package/dist/test-e2e.d.ts +14 -0
  264. package/dist/test-e2e.d.ts.map +1 -0
  265. package/dist/test-e2e.js +266 -0
  266. package/dist/test-e2e.js.map +1 -0
  267. package/dist/workers/research-worker.d.ts +19 -0
  268. package/dist/workers/research-worker.d.ts.map +1 -0
  269. package/dist/workers/research-worker.js +141 -0
  270. package/dist/workers/research-worker.js.map +1 -0
  271. package/package.json +110 -0
@@ -0,0 +1,522 @@
1
+ /**
2
+ * Society Protocol — Planner Module v1.0 (State of the Art)
3
+ *
4
+ * The Planner takes a high-level goal and breaks it down into a Directed Task Graph (DAG).
5
+ * Features:
6
+ * - Multi-provider support (OpenAI, Anthropic, Ollama, custom)
7
+ * - Intelligent caching
8
+ * - Fallback chains
9
+ * - Streaming support
10
+ * - Validation and verification
11
+ */
12
+ import { createHash } from 'crypto';
13
+ // ─── Default Configuration ──────────────────────────────────────
14
+ const DEFAULT_CONFIG = {
15
+ provider: 'openai',
16
+ apiKey: '',
17
+ openaiApiKey: process.env.OPENAI_API_KEY || '',
18
+ openaiModel: 'gpt-4o',
19
+ openaiBaseUrl: 'https://api.openai.com/v1',
20
+ anthropicApiKey: process.env.ANTHROPIC_API_KEY || '',
21
+ anthropicModel: 'claude-3-5-sonnet-20241022',
22
+ ollamaUrl: 'http://localhost:11434',
23
+ ollamaModel: 'llama3.2',
24
+ customEndpoint: '',
25
+ customHeaders: {},
26
+ temperature: 0.2,
27
+ maxTokens: 4096,
28
+ timeoutMs: 60000,
29
+ enableCache: true,
30
+ cacheMaxSize: 100,
31
+ fallbackChain: ['openai', 'anthropic', 'ollama'],
32
+ };
33
+ // ─── Planner Class ──────────────────────────────────────────────
34
+ export class Planner {
35
+ config;
36
+ cache = new Map();
37
+ cacheOrder = []; // LRU tracking
38
+ constructor(config = {}) {
39
+ this.config = { ...DEFAULT_CONFIG, ...config };
40
+ }
41
+ // ─── Core API ─────────────────────────────────────────────────
42
+ /**
43
+ * Generate a plan (DAG) for a goal
44
+ */
45
+ async generatePlan(goal, options = {}) {
46
+ const startTime = Date.now();
47
+ // Check cache
48
+ if (this.config.enableCache) {
49
+ const cached = this.getCachedPlan(goal, options.templateId);
50
+ if (cached) {
51
+ return {
52
+ dag: cached.dag,
53
+ provider: cached.provider,
54
+ model: 'cached',
55
+ confidence: cached.confidence,
56
+ latencyMs: 0,
57
+ cached: true,
58
+ };
59
+ }
60
+ }
61
+ // Determine provider chain
62
+ const providerChain = options.preferredProvider
63
+ ? [options.preferredProvider, ...this.config.fallbackChain.filter(p => p !== options.preferredProvider)]
64
+ : this.config.fallbackChain;
65
+ // Try providers in order
66
+ let lastError;
67
+ for (const provider of providerChain) {
68
+ if (!this.isProviderAvailable(provider))
69
+ continue;
70
+ try {
71
+ const result = await this.tryProvider(provider, goal, options);
72
+ // Validate the result
73
+ const validation = this.validateDag(result.dag);
74
+ if (!validation.valid) {
75
+ console.warn(`[planner] ${provider} produced invalid DAG:`, validation.errors);
76
+ continue;
77
+ }
78
+ // Cache result
79
+ if (this.config.enableCache) {
80
+ this.cachePlan(goal, options.templateId, result);
81
+ }
82
+ return result;
83
+ }
84
+ catch (err) {
85
+ console.warn(`[planner] ${provider} failed:`, err.message);
86
+ lastError = err;
87
+ continue;
88
+ }
89
+ }
90
+ throw new Error(`All providers failed. Last error: ${lastError?.message || 'Unknown'}`);
91
+ }
92
+ /**
93
+ * Generate plan with streaming (for real-time UI updates)
94
+ */
95
+ async *generatePlanStreaming(goal, options = {}) {
96
+ // For now, just yield the final result
97
+ // Full streaming would require provider-specific implementations
98
+ try {
99
+ yield { type: 'thinking' };
100
+ const result = await this.generatePlan(goal, options);
101
+ for (const step of result.dag) {
102
+ yield { type: 'step', data: step };
103
+ }
104
+ yield { type: 'complete' };
105
+ }
106
+ catch (err) {
107
+ yield { type: 'error', error: err.message };
108
+ }
109
+ }
110
+ /**
111
+ * Expand an existing plan with new steps (for dynamic DAG expansion)
112
+ */
113
+ async expandPlan(goal, currentDag, triggerStepId, expansionReason) {
114
+ const context = `
115
+ Current plan:
116
+ ${currentDag.map(s => `- ${s.step_id}: ${s.title} (${s.kind})`).join('\n')}
117
+
118
+ Trigger step: ${triggerStepId}
119
+ Reason for expansion: ${expansionReason}
120
+
121
+ Generate additional steps to address the ${expansionReason}.
122
+ These steps should be inserted after ${triggerStepId}.
123
+ `;
124
+ const result = await this.generatePlan(goal, { context });
125
+ // Merge new steps into existing DAG
126
+ const merged = [...currentDag];
127
+ const triggerIndex = merged.findIndex(s => s.step_id === triggerStepId);
128
+ // Rename new steps to avoid conflicts
129
+ const renamed = result.dag.map((step, i) => ({
130
+ ...step,
131
+ step_id: `${triggerStepId}_expand_${i}`,
132
+ depends_on: [triggerStepId, ...step.depends_on.filter(d => d !== triggerStepId)],
133
+ }));
134
+ // Update downstream dependencies
135
+ const triggerStep = merged[triggerIndex];
136
+ const oldDownstream = merged.filter(s => s.depends_on.includes(triggerStepId));
137
+ for (const step of oldDownstream) {
138
+ step.depends_on = step.depends_on.map(d => d === triggerStepId ? renamed[renamed.length - 1].step_id : d);
139
+ }
140
+ // Insert new steps
141
+ merged.splice(triggerIndex + 1, 0, ...renamed);
142
+ return merged;
143
+ }
144
+ /**
145
+ * Validate a DAG structure
146
+ */
147
+ validateDag(dag) {
148
+ const errors = [];
149
+ const warnings = [];
150
+ // Check for duplicate IDs
151
+ const ids = new Set();
152
+ for (const step of dag) {
153
+ if (ids.has(step.step_id)) {
154
+ errors.push(`Duplicate step_id: ${step.step_id}`);
155
+ }
156
+ ids.add(step.step_id);
157
+ }
158
+ // Check all dependencies exist
159
+ for (const step of dag) {
160
+ for (const dep of step.depends_on) {
161
+ if (!ids.has(dep)) {
162
+ errors.push(`Step ${step.step_id} depends on unknown step: ${dep}`);
163
+ }
164
+ }
165
+ }
166
+ // Check for cycles
167
+ if (!this.checkAcyclic(dag)) {
168
+ errors.push('Cycle detected in DAG');
169
+ }
170
+ // Check for orphaned steps
171
+ const reachable = this.findReachableSteps(dag);
172
+ for (const step of dag) {
173
+ if (!reachable.has(step.step_id)) {
174
+ warnings.push(`Step ${step.step_id} may be unreachable`);
175
+ }
176
+ }
177
+ // Validate step kinds
178
+ const validKinds = ['task', 'review', 'merge', 'decision', 'synthesis', 'verification'];
179
+ for (const step of dag) {
180
+ if (!validKinds.includes(step.kind)) {
181
+ warnings.push(`Unknown step kind: ${step.kind}`);
182
+ }
183
+ }
184
+ return { valid: errors.length === 0, errors, warnings };
185
+ }
186
+ // ─── Provider Implementations ─────────────────────────────────
187
+ async tryProvider(provider, goal, options) {
188
+ const startTime = Date.now();
189
+ switch (provider) {
190
+ case 'openai':
191
+ return this.callOpenAI(goal, options, startTime);
192
+ case 'anthropic':
193
+ return this.callAnthropic(goal, options, startTime);
194
+ case 'ollama':
195
+ return this.callOllama(goal, options, startTime);
196
+ case 'custom':
197
+ return this.callCustom(goal, options, startTime);
198
+ default:
199
+ throw new Error(`Unknown provider: ${provider}`);
200
+ }
201
+ }
202
+ async callOpenAI(goal, options, startTime) {
203
+ const response = await fetch(`${this.config.openaiBaseUrl}/chat/completions`, {
204
+ method: 'POST',
205
+ headers: {
206
+ 'Content-Type': 'application/json',
207
+ 'Authorization': `Bearer ${this.config.openaiApiKey}`,
208
+ },
209
+ body: JSON.stringify({
210
+ model: this.config.openaiModel,
211
+ temperature: this.config.temperature,
212
+ max_tokens: this.config.maxTokens,
213
+ response_format: { type: 'json_object' },
214
+ messages: [
215
+ { role: 'system', content: this.buildSystemPrompt() },
216
+ { role: 'user', content: this.buildUserPrompt(goal, options) },
217
+ ],
218
+ }),
219
+ });
220
+ if (!response.ok) {
221
+ throw new Error(`OpenAI API error: ${response.status} ${await response.text()}`);
222
+ }
223
+ const data = await response.json();
224
+ const content = data.choices[0]?.message?.content;
225
+ if (!content) {
226
+ throw new Error('OpenAI returned empty content');
227
+ }
228
+ const parsed = JSON.parse(content);
229
+ const dag = parsed.steps;
230
+ return {
231
+ dag,
232
+ provider: 'openai',
233
+ model: this.config.openaiModel,
234
+ confidence: parsed.confidence || 0.8,
235
+ latencyMs: Date.now() - startTime,
236
+ tokensUsed: data.usage?.total_tokens,
237
+ costUsd: this.estimateCost('openai', data.usage?.total_tokens || 0),
238
+ cached: false,
239
+ reasoning: parsed.reasoning,
240
+ };
241
+ }
242
+ async callAnthropic(goal, options, startTime) {
243
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
244
+ method: 'POST',
245
+ headers: {
246
+ 'Content-Type': 'application/json',
247
+ 'x-api-key': this.config.anthropicApiKey,
248
+ 'anthropic-version': '2023-06-01',
249
+ },
250
+ body: JSON.stringify({
251
+ model: this.config.anthropicModel,
252
+ temperature: this.config.temperature,
253
+ max_tokens: this.config.maxTokens,
254
+ messages: [
255
+ { role: 'user', content: this.buildSystemPrompt() + '\n\n' + this.buildUserPrompt(goal, options) },
256
+ ],
257
+ }),
258
+ });
259
+ if (!response.ok) {
260
+ throw new Error(`Anthropic API error: ${response.status} ${await response.text()}`);
261
+ }
262
+ const data = await response.json();
263
+ const content = data.content[0]?.text;
264
+ if (!content) {
265
+ throw new Error('Anthropic returned empty content');
266
+ }
267
+ // Extract JSON from content (Claude might wrap in markdown)
268
+ const jsonMatch = content.match(/```json\n?([\s\S]*?)\n?```/) || content.match(/({[\s\S]*})/);
269
+ const jsonStr = jsonMatch ? jsonMatch[1] : content;
270
+ const parsed = JSON.parse(jsonStr);
271
+ const dag = parsed.steps;
272
+ return {
273
+ dag,
274
+ provider: 'anthropic',
275
+ model: this.config.anthropicModel,
276
+ confidence: parsed.confidence || 0.8,
277
+ latencyMs: Date.now() - startTime,
278
+ tokensUsed: data.usage?.input_tokens + data.usage?.output_tokens,
279
+ costUsd: this.estimateCost('anthropic', (data.usage?.input_tokens + data.usage?.output_tokens) || 0),
280
+ cached: false,
281
+ reasoning: parsed.reasoning,
282
+ };
283
+ }
284
+ async callOllama(goal, options, startTime) {
285
+ const response = await fetch(`${this.config.ollamaUrl}/api/generate`, {
286
+ method: 'POST',
287
+ headers: { 'Content-Type': 'application/json' },
288
+ body: JSON.stringify({
289
+ model: this.config.ollamaModel,
290
+ system: this.buildSystemPrompt(),
291
+ prompt: this.buildUserPrompt(goal, options),
292
+ stream: false,
293
+ format: 'json',
294
+ options: {
295
+ temperature: this.config.temperature,
296
+ },
297
+ }),
298
+ });
299
+ if (!response.ok) {
300
+ throw new Error(`Ollama API error: ${response.status}`);
301
+ }
302
+ const data = await response.json();
303
+ const parsed = JSON.parse(data.response);
304
+ const dag = parsed.steps;
305
+ return {
306
+ dag,
307
+ provider: 'ollama',
308
+ model: this.config.ollamaModel,
309
+ confidence: parsed.confidence || 0.7,
310
+ latencyMs: Date.now() - startTime,
311
+ cached: false,
312
+ reasoning: parsed.reasoning,
313
+ };
314
+ }
315
+ async callCustom(goal, options, startTime) {
316
+ const response = await fetch(this.config.customEndpoint, {
317
+ method: 'POST',
318
+ headers: {
319
+ 'Content-Type': 'application/json',
320
+ ...this.config.customHeaders,
321
+ },
322
+ body: JSON.stringify({
323
+ goal,
324
+ context: options.context,
325
+ constraints: options.constraints,
326
+ temperature: this.config.temperature,
327
+ }),
328
+ });
329
+ if (!response.ok) {
330
+ throw new Error(`Custom API error: ${response.status}`);
331
+ }
332
+ const data = await response.json();
333
+ return {
334
+ dag: data.steps,
335
+ provider: 'custom',
336
+ model: 'custom',
337
+ confidence: data.confidence || 0.7,
338
+ latencyMs: Date.now() - startTime,
339
+ cached: false,
340
+ };
341
+ }
342
+ // ─── Prompt Engineering ───────────────────────────────────────
343
+ buildSystemPrompt() {
344
+ return `You are the Society Protocol Architect, an expert at breaking down complex goals into executable task DAGs (Directed Acyclic Graphs).
345
+
346
+ Your task is to analyze the user's goal and create a structured plan consisting of steps that can be executed by specialized AI agents.
347
+
348
+ OUTPUT FORMAT:
349
+ Respond with a JSON object containing:
350
+ {
351
+ "steps": [
352
+ {
353
+ "step_id": "unique_identifier",
354
+ "kind": "task|review|merge|decision|synthesis|verification",
355
+ "title": "Human-readable title",
356
+ "description": "Detailed description of what to do",
357
+ "depends_on": ["step_ids_that_must_complete_first"],
358
+ "requirements": {
359
+ "capabilities": ["required_skills"],
360
+ "min_reputation": 0.5
361
+ }
362
+ }
363
+ ],
364
+ "confidence": 0.85,
365
+ "reasoning": "Why you structured it this way"
366
+ }
367
+
368
+ RULES:
369
+ 1. step_id must be unique, lowercase, using underscores
370
+ 2. kind must be one of: task, review, merge, decision, synthesis, verification
371
+ 3. depends_on must reference existing step_ids (no cycles!)
372
+ 4. Tasks with empty depends_on can start immediately
373
+ 5. Include a final 'merge' or 'synthesis' step that combines outputs
374
+ 6. Add 'review' steps after complex tasks for quality control
375
+ 7. Consider parallel execution where possible`;
376
+ }
377
+ buildUserPrompt(goal, options) {
378
+ let prompt = `Goal: ${goal}\n\n`;
379
+ if (options.context) {
380
+ prompt += `Context:\n${options.context}\n\n`;
381
+ }
382
+ if (options.constraints?.length) {
383
+ prompt += `Constraints:\n${options.constraints.map(c => `- ${c}`).join('\n')}\n\n`;
384
+ }
385
+ prompt += 'Generate the execution plan as JSON:';
386
+ return prompt;
387
+ }
388
+ // ─── Cache Management ─────────────────────────────────────────
389
+ getCacheKey(goal, templateId) {
390
+ const hash = createHash('sha256');
391
+ hash.update(goal.toLowerCase().trim());
392
+ if (templateId)
393
+ hash.update(templateId);
394
+ return hash.digest('hex').slice(0, 16);
395
+ }
396
+ getCachedPlan(goal, templateId) {
397
+ const key = this.getCacheKey(goal, templateId);
398
+ const entry = this.cache.get(key);
399
+ if (!entry)
400
+ return null;
401
+ // Check if expired (24 hours)
402
+ if (Date.now() - entry.timestamp > 24 * 60 * 60 * 1000) {
403
+ this.cache.delete(key);
404
+ this.cacheOrder = this.cacheOrder.filter(k => k !== key);
405
+ return null;
406
+ }
407
+ // Update LRU order
408
+ this.cacheOrder = this.cacheOrder.filter(k => k !== key);
409
+ this.cacheOrder.push(key);
410
+ return entry;
411
+ }
412
+ cachePlan(goal, templateId, result) {
413
+ const key = this.getCacheKey(goal, templateId);
414
+ // Evict oldest if at capacity
415
+ if (this.cache.size >= this.config.cacheMaxSize && this.cacheOrder.length > 0) {
416
+ const oldest = this.cacheOrder.shift();
417
+ if (oldest)
418
+ this.cache.delete(oldest);
419
+ }
420
+ this.cache.set(key, {
421
+ goal,
422
+ templateId,
423
+ dag: result.dag,
424
+ timestamp: Date.now(),
425
+ provider: result.provider,
426
+ confidence: result.confidence,
427
+ });
428
+ this.cacheOrder.push(key);
429
+ }
430
+ clearCache() {
431
+ this.cache.clear();
432
+ this.cacheOrder = [];
433
+ }
434
+ // ─── Helpers ──────────────────────────────────────────────────
435
+ isProviderAvailable(provider) {
436
+ switch (provider) {
437
+ case 'openai':
438
+ return !!this.config.openaiApiKey;
439
+ case 'anthropic':
440
+ return !!this.config.anthropicApiKey;
441
+ case 'ollama':
442
+ // Assume available, will fail on request if not
443
+ return true;
444
+ case 'custom':
445
+ return !!this.config.customEndpoint;
446
+ default:
447
+ return false;
448
+ }
449
+ }
450
+ checkAcyclic(dag) {
451
+ const visiting = new Set();
452
+ const visited = new Set();
453
+ const nodeMap = new Map(dag.map(n => [n.step_id, n]));
454
+ const visit = (nodeId) => {
455
+ if (visiting.has(nodeId))
456
+ return false;
457
+ if (visited.has(nodeId))
458
+ return true;
459
+ visiting.add(nodeId);
460
+ const node = nodeMap.get(nodeId);
461
+ if (node) {
462
+ for (const dep of node.depends_on) {
463
+ if (!visit(dep))
464
+ return false;
465
+ }
466
+ }
467
+ visiting.delete(nodeId);
468
+ visited.add(nodeId);
469
+ return true;
470
+ };
471
+ for (const node of dag) {
472
+ if (!visit(node.step_id))
473
+ return false;
474
+ }
475
+ return true;
476
+ }
477
+ findReachableSteps(dag) {
478
+ const reachable = new Set();
479
+ const roots = dag.filter(n => n.depends_on.length === 0);
480
+ const nodeMap = new Map(dag.map(n => [n.step_id, n]));
481
+ const visit = (nodeId) => {
482
+ if (reachable.has(nodeId))
483
+ return;
484
+ reachable.add(nodeId);
485
+ // Find all steps that depend on this one
486
+ for (const node of dag) {
487
+ if (node.depends_on.includes(nodeId)) {
488
+ visit(node.step_id);
489
+ }
490
+ }
491
+ };
492
+ for (const root of roots) {
493
+ visit(root.step_id);
494
+ }
495
+ return reachable;
496
+ }
497
+ estimateCost(provider, tokens) {
498
+ // Rough estimates per 1K tokens
499
+ const rates = {
500
+ openai: 0.01, // GPT-4o
501
+ anthropic: 0.008, // Claude 3.5 Sonnet
502
+ ollama: 0,
503
+ custom: 0,
504
+ };
505
+ return (tokens / 1000) * (rates[provider] || 0);
506
+ }
507
+ // ─── Status ───────────────────────────────────────────────────
508
+ isReady() {
509
+ return this.config.fallbackChain.some(p => this.isProviderAvailable(p));
510
+ }
511
+ getAvailableProviders() {
512
+ return this.config.fallbackChain.filter(p => this.isProviderAvailable(p));
513
+ }
514
+ getCacheStats() {
515
+ return {
516
+ size: this.cache.size,
517
+ maxSize: this.config.cacheMaxSize,
518
+ keys: [...this.cacheOrder],
519
+ };
520
+ }
521
+ }
522
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Storage } from '../storage.js';
2
+ import type { MissionCheckpoint } from './types.js';
3
+ export declare class MissionCheckpointService {
4
+ private storage;
5
+ constructor(storage: Storage);
6
+ save(input: Omit<MissionCheckpoint, 'checkpointId' | 'createdAt'>): MissionCheckpoint;
7
+ getLatest(missionId: string): MissionCheckpoint | undefined;
8
+ }
9
+ //# sourceMappingURL=checkpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../../src/proactive/checkpoints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,qBAAa,wBAAwB;IACrB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAEpC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,cAAc,GAAG,WAAW,CAAC,GAAG,iBAAiB;IAUrF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAG9D"}
@@ -0,0 +1,20 @@
1
+ import { ulid } from 'ulid';
2
+ export class MissionCheckpointService {
3
+ storage;
4
+ constructor(storage) {
5
+ this.storage = storage;
6
+ }
7
+ save(input) {
8
+ const checkpoint = {
9
+ checkpointId: `mchk_${ulid()}`,
10
+ createdAt: Date.now(),
11
+ ...input,
12
+ };
13
+ this.storage.saveMissionCheckpoint(checkpoint);
14
+ return checkpoint;
15
+ }
16
+ getLatest(missionId) {
17
+ return this.storage.getLatestMissionCheckpoint(missionId);
18
+ }
19
+ }
20
+ //# sourceMappingURL=checkpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../../src/proactive/checkpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,MAAM,OAAO,wBAAwB;IACb;IAApB,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC,IAAI,CAAC,KAA4D;QAC7D,MAAM,UAAU,GAAsB;YAClC,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,KAAK;SACX,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,SAAS,CAAkC,CAAC;IAC/F,CAAC;CACJ"}
@@ -0,0 +1,59 @@
1
+ import type { Identity } from '../identity.js';
2
+ import type { Storage } from '../storage.js';
3
+ import type { RoomManager } from '../rooms.js';
4
+ import type { CocEngine } from '../coc.js';
5
+ import type { Planner } from '../planner.js';
6
+ import type { KnowledgePool } from '../knowledge.js';
7
+ import { P2PSwarmRegistry } from './swarm-registry.js';
8
+ import { SwarmScheduler } from './scheduler.js';
9
+ import type { MissionInfo, ProactiveMissionSpec, SwarmStatus } from './types.js';
10
+ export interface ProactiveMissionEngineOptions {
11
+ enableLeadership?: boolean;
12
+ autoRestoreMissions?: boolean;
13
+ leaseTtlMs?: number;
14
+ leaseRenewIntervalMs?: number;
15
+ }
16
+ export declare class ProactiveMissionEngine {
17
+ private identity;
18
+ private storage;
19
+ private rooms;
20
+ private coc;
21
+ private planner;
22
+ private knowledge;
23
+ private missionTimers;
24
+ private leaseTimers;
25
+ private leadershipState;
26
+ private checkpoints;
27
+ private registry;
28
+ private scheduler;
29
+ private readonly instanceId;
30
+ private readonly enableLeadership;
31
+ private readonly autoRestoreMissions;
32
+ private readonly leaseTtlMs;
33
+ private readonly leaseRenewIntervalMs;
34
+ constructor(identity: Identity, storage: Storage, rooms: RoomManager, coc: CocEngine, planner: Planner, knowledge: KnowledgePool, registry?: P2PSwarmRegistry, scheduler?: SwarmScheduler, options?: ProactiveMissionEngineOptions);
35
+ private bindEvents;
36
+ private restoreActiveMissions;
37
+ startMission(spec: ProactiveMissionSpec): Promise<MissionInfo>;
38
+ pauseMission(missionId: string): Promise<void>;
39
+ resumeMission(missionId: string): Promise<void>;
40
+ stopMission(missionId: string, reason?: string): Promise<void>;
41
+ listMissions(roomId?: string): MissionInfo[];
42
+ getMission(missionId: string): MissionInfo | undefined;
43
+ getSwarmStatus(roomId?: string): SwarmStatus;
44
+ tickMission(missionId: string): Promise<void>;
45
+ private ensureMissionCycle;
46
+ private buildMissionDag;
47
+ private isRunnableStep;
48
+ private startLeadershipManagement;
49
+ private stopLeadershipManagement;
50
+ private refreshLeadership;
51
+ private ensureLeadershipLease;
52
+ private isCurrentLeader;
53
+ private startTicker;
54
+ private clearTicker;
55
+ private clearLeaseTicker;
56
+ private toMissionInfo;
57
+ destroy(): void;
58
+ }
59
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/proactive/engine.ts"],"names":[],"mappings":"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"}