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
package/dist/swp.d.ts ADDED
@@ -0,0 +1,443 @@
1
+ /**
2
+ * Society Wire Protocol (SWP) v1.0 — State of the Art
3
+ *
4
+ * Every message on the Society network is wrapped in an SWP envelope:
5
+ * - Signed with the sender's Ed25519 key
6
+ * - Includes TTL for expiration
7
+ * - ULID for unique, time-sortable IDs
8
+ * - Replay protection via (from.did, id) dedup
9
+ * - Optional end-to-end encryption
10
+ */
11
+ import { type Identity } from './identity.js';
12
+ export declare const SWP_VERSION = "swp/1.0";
13
+ export declare const DEFAULT_TTL_MS = 600000;
14
+ export declare const MAX_PAYLOAD_BYTES: number;
15
+ export type MessageType = 'presence.heartbeat' | 'presence.capabilities_update' | 'presence.status_change' | 'chat.msg' | 'chat.reaction' | 'chat.edit' | 'chat.delete' | 'coc.open' | 'coc.plan' | 'coc.assign' | 'coc.submit' | 'coc.review' | 'coc.merge' | 'coc.close' | 'coc.handoff' | 'coc.feedback' | 'coc.cancel' | 'adapter.register' | 'adapter.offer' | 'adapter.heartbeat' | 'adapter.capabilities' | 'mission.start' | 'mission.pause' | 'mission.resume' | 'mission.stop' | 'mission.checkpoint' | 'mission.alert' | 'capsule.publish' | 'capsule.import' | 'capsule.request' | 'federation.peer.request' | 'federation.peer.accept' | 'federation.peer.reject' | 'federation.peer.revoke' | 'federation.bridge.open' | 'federation.bridge.close' | 'federation.bridge.sync' | 'persona.memory.upsert' | 'persona.memory.delete' | 'persona.edge.upsert' | 'persona.claim.upsert' | 'persona.claim.revoke' | 'persona.zkp.proof' | 'persona.preference.update' | 'persona.sync.delta' | 'persona.sync.ack' | 'persona.capability.revoke' | 'persona.capability.attenuate' | 'latent.thought' | 'latent.architecture' | 'latent.query' | 'latent.merge' | 'swarm.role.assign' | 'swarm.reallocation' | 'swarm.window.open' | 'swarm.window.close' | 'swarm.affinity.update' | 'cot.stream.start' | 'cot.stream.token' | 'cot.stream.insight' | 'cot.stream.question' | 'cot.stream.answer' | 'cot.stream.branch' | 'cot.stream.merge' | 'cot.stream.end' | 'system.ping' | 'system.pong' | 'system.error';
16
+ export interface SwpSender {
17
+ did: string;
18
+ name: string;
19
+ }
20
+ export interface SwpEnvelope {
21
+ v: string;
22
+ id: string;
23
+ t: MessageType;
24
+ room: string;
25
+ from: SwpSender;
26
+ ts: number;
27
+ ttl: number;
28
+ body: Record<string, unknown>;
29
+ sig: string;
30
+ enc?: {
31
+ algorithm: 'x25519-xsalsa20-poly1305';
32
+ ephemeral_public_key: string;
33
+ nonce: string;
34
+ };
35
+ }
36
+ export interface PresenceBody {
37
+ status: 'online' | 'busy' | 'running' | 'offline' | 'away';
38
+ caps: string[];
39
+ load?: number;
40
+ specialties?: string[];
41
+ adapter_endpoint?: string;
42
+ reputation_score?: number;
43
+ peer_id?: string;
44
+ }
45
+ export interface CapabilitiesUpdateBody {
46
+ added_caps: string[];
47
+ removed_caps: string[];
48
+ new_specialties?: string[];
49
+ }
50
+ export interface ChatMsgBody {
51
+ text: string;
52
+ reply_to?: string;
53
+ mentions?: string[];
54
+ attachments?: string[];
55
+ formatting?: 'markdown' | 'plain' | 'html';
56
+ encrypted?: boolean;
57
+ }
58
+ export interface ChatReactionBody {
59
+ message_id: string;
60
+ emoji: string;
61
+ action: 'add' | 'remove';
62
+ }
63
+ export interface ChatEditBody {
64
+ message_id: string;
65
+ new_text: string;
66
+ edit_timestamp: number;
67
+ }
68
+ export interface CocOpenBody {
69
+ chain_id?: string;
70
+ goal: string;
71
+ template_id?: string;
72
+ priority?: 'low' | 'normal' | 'high' | 'critical';
73
+ tags?: string[];
74
+ timeout_ms?: number;
75
+ privacy_level?: 'public' | 'encrypted' | 'private';
76
+ }
77
+ export interface CocDagNode {
78
+ step_id: string;
79
+ kind: 'task' | 'review' | 'merge' | 'decision' | 'synthesis' | 'verification';
80
+ title: string;
81
+ description?: string;
82
+ depends_on: string[];
83
+ requirements?: StepRequirements;
84
+ timeout_ms?: number;
85
+ retries?: number;
86
+ max_retries?: number;
87
+ artifacts_expected?: string[];
88
+ }
89
+ export interface StepRequirements {
90
+ capabilities: string[];
91
+ min_reputation?: number;
92
+ max_cost?: number;
93
+ required_providers?: string[];
94
+ }
95
+ export interface CocPlanBody {
96
+ chain_id: string;
97
+ dag: CocDagNode[];
98
+ planner_version: string;
99
+ plan_metadata?: {
100
+ estimated_tokens?: number;
101
+ confidence?: number;
102
+ reasoning?: string;
103
+ approach?: string;
104
+ };
105
+ }
106
+ export interface CocAssignBody {
107
+ chain_id: string;
108
+ step_id: string;
109
+ assignee_did: string;
110
+ lease_ms: number;
111
+ lease_type: 'exclusive' | 'shared';
112
+ constraints?: {
113
+ max_cost?: number;
114
+ required_providers?: string[];
115
+ deadline?: number;
116
+ };
117
+ }
118
+ export interface Artifact {
119
+ artifact_id: string;
120
+ artifact_type: string;
121
+ content_hash: string;
122
+ size_bytes: number;
123
+ encoding: 'utf8' | 'base64' | 'binary';
124
+ content?: string;
125
+ uri?: string;
126
+ metadata?: Record<string, unknown>;
127
+ provenance?: string[];
128
+ }
129
+ export interface CocSubmitBody {
130
+ chain_id: string;
131
+ step_id: string;
132
+ status: 'completed' | 'failed' | 'partial' | 'cancelled';
133
+ memo: string;
134
+ artifacts: Artifact[];
135
+ metrics?: {
136
+ tokens_used?: number;
137
+ latency_ms?: number;
138
+ cost?: number;
139
+ retries?: number;
140
+ };
141
+ }
142
+ export interface CocReviewBody {
143
+ chain_id: string;
144
+ step_id: string;
145
+ decision: 'approved' | 'rejected' | 'needs_revision' | 'escalated';
146
+ notes: string;
147
+ suggestions?: string[];
148
+ approval_weight?: number;
149
+ quality_score?: number;
150
+ }
151
+ export interface CocMergeBody {
152
+ chain_id: string;
153
+ summary: string;
154
+ outputs: string[];
155
+ quality_score?: number;
156
+ lessons_learned?: string[];
157
+ metrics?: {
158
+ total_steps: number;
159
+ completed_steps: number;
160
+ failed_steps: number;
161
+ total_latency_ms: number;
162
+ total_cost?: number;
163
+ };
164
+ }
165
+ export interface CocCloseBody {
166
+ chain_id: string;
167
+ reason: 'completed' | 'cancelled' | 'timeout' | 'failed';
168
+ final_report?: string;
169
+ }
170
+ export interface CocHandoffBody {
171
+ chain_id: string;
172
+ step_id: string;
173
+ previous_assignee: string;
174
+ new_assignee: string;
175
+ reason: 'timeout' | 'failure' | 'load_balancing' | 'capability_mismatch' | 'agent_offline' | 'worker_offline' | 'worker_overloaded' | 'scheduler_rebalance';
176
+ handoff_count: number;
177
+ }
178
+ export interface CocFeedbackBody {
179
+ chain_id: string;
180
+ step_id: string;
181
+ feedback_type: 'clarification' | 'additional_request' | 'correction' | 'praise';
182
+ message: string;
183
+ priority: 'low' | 'normal' | 'high' | 'critical';
184
+ from_did: string;
185
+ }
186
+ export interface CocCancelBody {
187
+ chain_id: string;
188
+ step_id?: string;
189
+ reason: string;
190
+ cancelled_by: string;
191
+ }
192
+ export interface AdapterCapabilities {
193
+ specialties?: string[];
194
+ kinds?: string[];
195
+ max_concurrency?: number;
196
+ capabilities?: string[];
197
+ mission_tags?: string[];
198
+ room_id?: string;
199
+ }
200
+ export interface AdapterProfile {
201
+ adapter_id: string;
202
+ runtime: 'claude-code' | 'nanobot' | 'ollama' | 'openai' | 'custom' | 'docker';
203
+ version: string;
204
+ display_name: string;
205
+ description?: string;
206
+ specialties: string[];
207
+ kinds: string[];
208
+ max_concurrency: number;
209
+ endpoint: string;
210
+ auth_type: 'none' | 'token' | 'mtls';
211
+ pricing?: {
212
+ per_token?: number;
213
+ per_request?: number;
214
+ currency: 'USD';
215
+ };
216
+ capabilities?: string[];
217
+ owner_did?: string;
218
+ room_id?: string;
219
+ peer_id?: string;
220
+ host_id?: string;
221
+ mission_tags?: string[];
222
+ }
223
+ export interface AdapterRegisterBody {
224
+ profile: AdapterProfile;
225
+ }
226
+ export interface AdapterOfferBody {
227
+ adapter_id: string;
228
+ available_kinds: string[];
229
+ current_load: number;
230
+ estimated_wait_ms: number;
231
+ active_tasks: number;
232
+ worker_did?: string;
233
+ room_id?: string;
234
+ }
235
+ export interface AdapterHeartbeatBody {
236
+ adapter_id: string;
237
+ active_tasks: number;
238
+ queue_depth: number;
239
+ health: 'healthy' | 'degraded' | 'unhealthy';
240
+ worker_did?: string;
241
+ room_id?: string;
242
+ metrics?: {
243
+ avg_task_duration_ms?: number;
244
+ success_rate?: number;
245
+ };
246
+ }
247
+ export interface MissionStartBody {
248
+ mission_id: string;
249
+ goal: string;
250
+ template_id?: string;
251
+ cadence_ms: number;
252
+ }
253
+ export interface MissionPauseBody {
254
+ mission_id: string;
255
+ }
256
+ export interface MissionResumeBody {
257
+ mission_id: string;
258
+ }
259
+ export interface MissionStopBody {
260
+ mission_id: string;
261
+ reason?: string;
262
+ }
263
+ export interface MissionCheckpointBody {
264
+ mission_id: string;
265
+ checkpoint_id: string;
266
+ summary: string;
267
+ }
268
+ export interface MissionAlertBody {
269
+ mission_id: string;
270
+ level: 'info' | 'warning' | 'critical';
271
+ message: string;
272
+ }
273
+ export interface CapsulePublishBody {
274
+ capsule_id: string;
275
+ title: string;
276
+ description: string;
277
+ chain_id: string;
278
+ room_id: string;
279
+ tags: string[];
280
+ content_hash: string;
281
+ pointers: {
282
+ ipfs_cid?: string;
283
+ url?: string;
284
+ magnet?: string;
285
+ };
286
+ }
287
+ export interface CapsuleImportBody {
288
+ capsule_id: string;
289
+ import_mode: 'resume' | 'fork' | 'reference';
290
+ }
291
+ export interface FederationPeeringPolicyBody {
292
+ allowed_types: string[];
293
+ max_rate: number;
294
+ privacy_mode: 'metadata-only' | 'summary' | 'full';
295
+ allowed_rooms?: string[];
296
+ blocked_rooms?: string[];
297
+ }
298
+ export interface FederationPeerRequestBody {
299
+ peering_id: string;
300
+ source_federation_id: string;
301
+ source_federation_did: string;
302
+ target_federation_did: string;
303
+ requested_by: string;
304
+ policy: FederationPeeringPolicyBody;
305
+ }
306
+ export interface FederationPeerAcceptBody {
307
+ peering_id: string;
308
+ accepted_by: string;
309
+ reason?: string;
310
+ }
311
+ export interface FederationPeerRejectBody {
312
+ peering_id: string;
313
+ rejected_by: string;
314
+ reason?: string;
315
+ }
316
+ export interface FederationPeerRevokeBody {
317
+ peering_id: string;
318
+ revoked_by: string;
319
+ reason?: string;
320
+ }
321
+ export interface FederationBridgeOpenBody {
322
+ bridge_id: string;
323
+ peering_id: string;
324
+ local_federation_id: string;
325
+ local_room_id: string;
326
+ remote_room_id: string;
327
+ rules: FederationPeeringPolicyBody;
328
+ }
329
+ export interface FederationBridgeCloseBody {
330
+ bridge_id: string;
331
+ peering_id: string;
332
+ reason?: string;
333
+ }
334
+ export interface FederationBridgeSyncBody {
335
+ bridge_id: string;
336
+ peering_id: string;
337
+ source_federation_id: string;
338
+ target_federation_did: string;
339
+ direction: 'in' | 'out';
340
+ cursor?: string;
341
+ envelope: SwpEnvelope;
342
+ }
343
+ export interface ValidationResult {
344
+ valid: boolean;
345
+ error?: string;
346
+ code?: 'invalid_version' | 'expired' | 'oversized' | 'invalid_signature' | 'replay_detected';
347
+ }
348
+ export interface CotStreamStartBody {
349
+ stream_id: string;
350
+ chain_id?: string;
351
+ step_id?: string;
352
+ goal: string;
353
+ model?: string;
354
+ parent_stream_id?: string;
355
+ }
356
+ export interface CotStreamTokenBody {
357
+ stream_id: string;
358
+ seq: number;
359
+ token: string;
360
+ token_type: 'reasoning' | 'observation' | 'hypothesis' | 'conclusion' | 'evidence' | 'critique';
361
+ confidence?: number;
362
+ domain?: string;
363
+ references?: string[];
364
+ }
365
+ export interface CotStreamInsightBody {
366
+ stream_id: string;
367
+ insight_id: string;
368
+ title: string;
369
+ content: string;
370
+ insight_type: 'discovery' | 'pattern' | 'contradiction' | 'connection' | 'gap' | 'confirmation';
371
+ confidence: number;
372
+ supporting_evidence: string[];
373
+ related_streams?: string[];
374
+ auto_create_card?: boolean;
375
+ }
376
+ export interface CotStreamQuestionBody {
377
+ stream_id: string;
378
+ question_id: string;
379
+ question: string;
380
+ question_type: 'clarification' | 'exploration' | 'validation' | 'critique' | 'suggestion';
381
+ context: string;
382
+ target_did?: string;
383
+ urgency: 'low' | 'normal' | 'high';
384
+ }
385
+ export interface CotStreamAnswerBody {
386
+ stream_id: string;
387
+ question_id: string;
388
+ answer: string;
389
+ confidence: number;
390
+ references?: string[];
391
+ }
392
+ export interface CotStreamBranchBody {
393
+ stream_id: string;
394
+ parent_stream_id: string;
395
+ branch_reason: string;
396
+ hypothesis: string;
397
+ }
398
+ export interface CotStreamMergeBody {
399
+ stream_id: string;
400
+ merged_streams: string[];
401
+ synthesis: string;
402
+ consensus_level: number;
403
+ }
404
+ export interface CotStreamEndBody {
405
+ stream_id: string;
406
+ status: 'completed' | 'paused' | 'abandoned' | 'merged';
407
+ summary: string;
408
+ insights_generated: number;
409
+ tokens_total: number;
410
+ duration_ms: number;
411
+ }
412
+ export declare function createEnvelope(identity: Identity, type: MessageType, room: string, body: Record<string, unknown>, ttl?: number): SwpEnvelope;
413
+ export declare class ReplayCache {
414
+ private cache;
415
+ private maxSize;
416
+ private ttlMs;
417
+ private cleanupInterval;
418
+ constructor(maxSize?: number, ttlMs?: number);
419
+ private cleanup;
420
+ /**
421
+ * Check if message is a replay
422
+ * @returns true if replay detected, false if new message
423
+ */
424
+ check(envelope: SwpEnvelope): boolean;
425
+ get size(): number;
426
+ clear(): void;
427
+ }
428
+ export declare const globalReplayCache: ReplayCache;
429
+ export interface ValidationOptions {
430
+ skipReplayCheck?: boolean;
431
+ replayCache?: ReplayCache;
432
+ }
433
+ export declare function validateEnvelope(envelope: SwpEnvelope, options?: ValidationOptions): ValidationResult;
434
+ export declare function serializeEnvelope(envelope: SwpEnvelope): Uint8Array;
435
+ export declare function deserializeEnvelope(data: Uint8Array): SwpEnvelope;
436
+ export declare function isCocMessage(type: MessageType): boolean;
437
+ export declare function isPresenceMessage(type: MessageType): boolean;
438
+ export declare function isAdapterMessage(type: MessageType): boolean;
439
+ export declare function isFederationMessage(type: MessageType): boolean;
440
+ export declare function isPersonaMessage(type: MessageType): boolean;
441
+ export declare function isMissionMessage(type: MessageType): boolean;
442
+ export declare function getMessagePriority(type: MessageType): 'high' | 'normal' | 'low';
443
+ //# sourceMappingURL=swp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swp.d.ts","sourceRoot":"","sources":["../src/swp.ts"],"names":[],"mappings":"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"}
package/dist/swp.js ADDED
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Society Wire Protocol (SWP) v1.0 — State of the Art
3
+ *
4
+ * Every message on the Society network is wrapped in an SWP envelope:
5
+ * - Signed with the sender's Ed25519 key
6
+ * - Includes TTL for expiration
7
+ * - ULID for unique, time-sortable IDs
8
+ * - Replay protection via (from.did, id) dedup
9
+ * - Optional end-to-end encryption
10
+ */
11
+ import { ulid } from 'ulid';
12
+ import { deepCanonicalJson, sign, verify, publicKeyFromDid, } from './identity.js';
13
+ // ─── Constants ──────────────────────────────────────────────────
14
+ export const SWP_VERSION = 'swp/1.0';
15
+ export const DEFAULT_TTL_MS = 600_000; // 10 minutes
16
+ export const MAX_PAYLOAD_BYTES = 64 * 1024; // 64KB
17
+ // ─── Envelope Creation ──────────────────────────────────────────
18
+ export function createEnvelope(identity, type, room, body, ttl = DEFAULT_TTL_MS) {
19
+ // Normalize payload before signing so signature input matches serialized wire payload.
20
+ const normalizedBody = JSON.parse(JSON.stringify(body ?? {}));
21
+ const envelope = {
22
+ v: SWP_VERSION,
23
+ id: ulid(),
24
+ t: type,
25
+ room,
26
+ from: { did: identity.did, name: identity.displayName },
27
+ ts: Date.now(),
28
+ ttl,
29
+ body: normalizedBody,
30
+ };
31
+ const canonical = deepCanonicalJson(envelope);
32
+ const sig = sign(identity, canonical);
33
+ return { ...envelope, sig };
34
+ }
35
+ // ─── Replay Protection ───────────────────────────────────────────
36
+ export class ReplayCache {
37
+ cache = new Map();
38
+ maxSize;
39
+ ttlMs;
40
+ cleanupInterval;
41
+ constructor(maxSize = 100000, ttlMs = 24 * 60 * 60 * 1000) {
42
+ this.maxSize = maxSize;
43
+ this.ttlMs = ttlMs;
44
+ // Periodic cleanup every 5 minutes
45
+ this.cleanupInterval = setInterval(() => this.cleanup(), 5 * 60 * 1000);
46
+ // Do not keep the process alive just for cache housekeeping.
47
+ this.cleanupInterval.unref?.();
48
+ }
49
+ cleanup() {
50
+ const now = Date.now();
51
+ let cleaned = 0;
52
+ for (const [key, timestamp] of this.cache) {
53
+ if (now - timestamp > this.ttlMs) {
54
+ this.cache.delete(key);
55
+ cleaned++;
56
+ }
57
+ }
58
+ if (cleaned > 0) {
59
+ console.log(`[replay-cache] Cleaned ${cleaned} expired entries`);
60
+ }
61
+ }
62
+ /**
63
+ * Check if message is a replay
64
+ * @returns true if replay detected, false if new message
65
+ */
66
+ check(envelope) {
67
+ const key = `${envelope.from.did}:${envelope.id}`;
68
+ if (this.cache.has(key)) {
69
+ return true; // Replay detected
70
+ }
71
+ // Add to cache
72
+ this.cache.set(key, Date.now());
73
+ // Prevent unbounded growth
74
+ if (this.cache.size > this.maxSize) {
75
+ // Remove oldest 10% of entries
76
+ const entries = Array.from(this.cache.entries());
77
+ entries.sort((a, b) => a[1] - b[1]);
78
+ const toRemove = Math.floor(this.maxSize * 0.1);
79
+ for (let i = 0; i < toRemove; i++) {
80
+ this.cache.delete(entries[i][0]);
81
+ }
82
+ }
83
+ return false;
84
+ }
85
+ get size() {
86
+ return this.cache.size;
87
+ }
88
+ clear() {
89
+ this.cache.clear();
90
+ }
91
+ }
92
+ // Global replay cache instance
93
+ export const globalReplayCache = new ReplayCache();
94
+ export function validateEnvelope(envelope, options) {
95
+ // 1. Version check
96
+ if (envelope.v !== SWP_VERSION) {
97
+ return {
98
+ valid: false,
99
+ error: `Unsupported version: ${envelope.v}, expected: ${SWP_VERSION}`,
100
+ code: 'invalid_version'
101
+ };
102
+ }
103
+ // 2. TTL check
104
+ const now = Date.now();
105
+ if (now - envelope.ts > envelope.ttl) {
106
+ return {
107
+ valid: false,
108
+ error: 'Envelope expired (TTL exceeded)',
109
+ code: 'expired'
110
+ };
111
+ }
112
+ // 3. Payload size check
113
+ const payloadSize = new TextEncoder().encode(JSON.stringify(envelope)).length;
114
+ if (payloadSize > MAX_PAYLOAD_BYTES) {
115
+ return {
116
+ valid: false,
117
+ error: `Payload too large: ${payloadSize} bytes (max ${MAX_PAYLOAD_BYTES})`,
118
+ code: 'oversized'
119
+ };
120
+ }
121
+ // 4. Signature verification
122
+ try {
123
+ const { sig, ...withoutSig } = envelope;
124
+ const canonical = deepCanonicalJson(withoutSig);
125
+ const publicKey = publicKeyFromDid(envelope.from.did);
126
+ const isValid = verify(publicKey, canonical, sig);
127
+ if (!isValid) {
128
+ return {
129
+ valid: false,
130
+ error: 'Invalid signature',
131
+ code: 'invalid_signature'
132
+ };
133
+ }
134
+ }
135
+ catch (err) {
136
+ return {
137
+ valid: false,
138
+ error: `Signature verification failed: ${err.message}`,
139
+ code: 'invalid_signature'
140
+ };
141
+ }
142
+ // 5. Replay protection
143
+ if (!options?.skipReplayCheck) {
144
+ const cache = options?.replayCache || globalReplayCache;
145
+ if (cache.check(envelope)) {
146
+ return {
147
+ valid: false,
148
+ error: 'Replay detected: message already processed',
149
+ code: 'replay_detected'
150
+ };
151
+ }
152
+ }
153
+ return { valid: true };
154
+ }
155
+ // ─── Serialization ──────────────────────────────────────────────
156
+ export function serializeEnvelope(envelope) {
157
+ return new TextEncoder().encode(JSON.stringify(envelope));
158
+ }
159
+ export function deserializeEnvelope(data) {
160
+ const json = new TextDecoder().decode(data);
161
+ return JSON.parse(json);
162
+ }
163
+ // ─── Utility Functions ──────────────────────────────────────────
164
+ export function isCocMessage(type) {
165
+ return type.startsWith('coc.');
166
+ }
167
+ export function isPresenceMessage(type) {
168
+ return type.startsWith('presence.');
169
+ }
170
+ export function isAdapterMessage(type) {
171
+ return type.startsWith('adapter.');
172
+ }
173
+ export function isFederationMessage(type) {
174
+ return type.startsWith('federation.');
175
+ }
176
+ export function isPersonaMessage(type) {
177
+ return type.startsWith('persona.');
178
+ }
179
+ export function isMissionMessage(type) {
180
+ return type.startsWith('mission.');
181
+ }
182
+ export function getMessagePriority(type) {
183
+ switch (type) {
184
+ case 'coc.handoff':
185
+ case 'coc.cancel':
186
+ case 'federation.peer.revoke':
187
+ case 'federation.bridge.close':
188
+ case 'persona.capability.revoke':
189
+ case 'persona.claim.revoke':
190
+ case 'system.error':
191
+ return 'high';
192
+ case 'chat.msg':
193
+ case 'coc.assign':
194
+ case 'coc.submit':
195
+ case 'federation.peer.request':
196
+ case 'federation.peer.accept':
197
+ case 'federation.peer.reject':
198
+ case 'federation.bridge.open':
199
+ case 'federation.bridge.sync':
200
+ case 'persona.memory.upsert':
201
+ case 'persona.memory.delete':
202
+ case 'persona.edge.upsert':
203
+ case 'persona.claim.upsert':
204
+ case 'persona.zkp.proof':
205
+ case 'persona.preference.update':
206
+ case 'persona.sync.delta':
207
+ case 'persona.sync.ack':
208
+ case 'persona.capability.attenuate':
209
+ case 'mission.start':
210
+ case 'mission.pause':
211
+ case 'mission.resume':
212
+ case 'mission.stop':
213
+ case 'mission.checkpoint':
214
+ case 'mission.alert':
215
+ return 'normal';
216
+ case 'presence.heartbeat':
217
+ case 'adapter.heartbeat':
218
+ return 'low';
219
+ default:
220
+ return 'normal';
221
+ }
222
+ }
223
+ //# sourceMappingURL=swp.js.map