@framers/agentos 0.1.6 → 0.1.7

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 (260) hide show
  1. package/README.md +19 -0
  2. package/dist/api/AgentOS.d.ts +12 -0
  3. package/dist/api/AgentOS.d.ts.map +1 -1
  4. package/dist/api/AgentOS.js +96 -2
  5. package/dist/api/AgentOS.js.map +1 -1
  6. package/dist/api/AgentOSOrchestrator.d.ts +45 -0
  7. package/dist/api/AgentOSOrchestrator.d.ts.map +1 -1
  8. package/dist/api/AgentOSOrchestrator.js +470 -6
  9. package/dist/api/AgentOSOrchestrator.js.map +1 -1
  10. package/dist/api/types/AgentOSInput.d.ts +8 -0
  11. package/dist/api/types/AgentOSInput.d.ts.map +1 -1
  12. package/dist/api/types/AgentOSResponse.d.ts +22 -2
  13. package/dist/api/types/AgentOSResponse.d.ts.map +1 -1
  14. package/dist/api/types/AgentOSResponse.js +1 -0
  15. package/dist/api/types/AgentOSResponse.js.map +1 -1
  16. package/dist/channels/ChannelRouter.d.ts +150 -0
  17. package/dist/channels/ChannelRouter.d.ts.map +1 -0
  18. package/dist/channels/ChannelRouter.js +309 -0
  19. package/dist/channels/ChannelRouter.js.map +1 -0
  20. package/dist/channels/IChannelAdapter.d.ts +113 -0
  21. package/dist/channels/IChannelAdapter.d.ts.map +1 -0
  22. package/dist/channels/IChannelAdapter.js +17 -0
  23. package/dist/channels/IChannelAdapter.js.map +1 -0
  24. package/dist/channels/index.d.ts +9 -0
  25. package/dist/channels/index.d.ts.map +1 -0
  26. package/dist/channels/index.js +7 -0
  27. package/dist/channels/index.js.map +1 -0
  28. package/dist/channels/types.d.ts +257 -0
  29. package/dist/channels/types.d.ts.map +1 -0
  30. package/dist/channels/types.js +12 -0
  31. package/dist/channels/types.js.map +1 -0
  32. package/dist/cognitive_substrate/GMI.d.ts +139 -0
  33. package/dist/cognitive_substrate/GMI.d.ts.map +1 -1
  34. package/dist/cognitive_substrate/GMI.js +680 -14
  35. package/dist/cognitive_substrate/GMI.js.map +1 -1
  36. package/dist/cognitive_substrate/GMIEvent.d.ts +151 -0
  37. package/dist/cognitive_substrate/GMIEvent.d.ts.map +1 -0
  38. package/dist/cognitive_substrate/GMIEvent.js +79 -0
  39. package/dist/cognitive_substrate/GMIEvent.js.map +1 -0
  40. package/dist/cognitive_substrate/IGMI.d.ts +22 -0
  41. package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
  42. package/dist/cognitive_substrate/IGMI.js.map +1 -1
  43. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts +92 -0
  44. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts.map +1 -1
  45. package/dist/cognitive_substrate/personas/PersonaLoader.d.ts.map +1 -1
  46. package/dist/cognitive_substrate/personas/PersonaLoader.js +21 -0
  47. package/dist/cognitive_substrate/personas/PersonaLoader.js.map +1 -1
  48. package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts +86 -0
  49. package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts.map +1 -0
  50. package/dist/cognitive_substrate/personas/metaprompt_presets.js +457 -0
  51. package/dist/cognitive_substrate/personas/metaprompt_presets.js.map +1 -0
  52. package/dist/config/RetrievalAugmentorConfiguration.d.ts +21 -0
  53. package/dist/config/RetrievalAugmentorConfiguration.d.ts.map +1 -1
  54. package/dist/config/RetrievalAugmentorConfiguration.js.map +1 -1
  55. package/dist/config/VectorStoreConfiguration.d.ts +2 -1
  56. package/dist/config/VectorStoreConfiguration.d.ts.map +1 -1
  57. package/dist/config/VectorStoreConfiguration.js.map +1 -1
  58. package/dist/config/extension-secrets.json +198 -0
  59. package/dist/core/agents/AgentCore.d.ts +8 -0
  60. package/dist/core/agents/AgentCore.d.ts.map +1 -1
  61. package/dist/core/agents/AgentCore.js.map +1 -1
  62. package/dist/core/conversation/ConversationManager.d.ts.map +1 -1
  63. package/dist/core/conversation/ConversationManager.js +2 -4
  64. package/dist/core/conversation/ConversationManager.js.map +1 -1
  65. package/dist/core/conversation/ILongTermMemoryRetriever.d.ts +30 -0
  66. package/dist/core/conversation/ILongTermMemoryRetriever.d.ts.map +1 -0
  67. package/dist/core/conversation/ILongTermMemoryRetriever.js +2 -0
  68. package/dist/core/conversation/ILongTermMemoryRetriever.js.map +1 -0
  69. package/dist/core/conversation/IRollingSummaryMemorySink.d.ts +44 -0
  70. package/dist/core/conversation/IRollingSummaryMemorySink.d.ts.map +1 -0
  71. package/dist/core/conversation/IRollingSummaryMemorySink.js +9 -0
  72. package/dist/core/conversation/IRollingSummaryMemorySink.js.map +1 -0
  73. package/dist/core/conversation/LongTermMemoryPolicy.d.ts +53 -0
  74. package/dist/core/conversation/LongTermMemoryPolicy.d.ts.map +1 -0
  75. package/dist/core/conversation/LongTermMemoryPolicy.js +84 -0
  76. package/dist/core/conversation/LongTermMemoryPolicy.js.map +1 -0
  77. package/dist/core/conversation/RollingSummaryCompactor.d.ts +61 -0
  78. package/dist/core/conversation/RollingSummaryCompactor.d.ts.map +1 -0
  79. package/dist/core/conversation/RollingSummaryCompactor.js +255 -0
  80. package/dist/core/conversation/RollingSummaryCompactor.js.map +1 -0
  81. package/dist/core/llm/PromptEngine.d.ts.map +1 -1
  82. package/dist/core/llm/PromptEngine.js +10 -1
  83. package/dist/core/llm/PromptEngine.js.map +1 -1
  84. package/dist/core/orchestration/AgentOrchestrator.d.ts +40 -0
  85. package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -1
  86. package/dist/core/orchestration/AgentOrchestrator.js +324 -2
  87. package/dist/core/orchestration/AgentOrchestrator.js.map +1 -1
  88. package/dist/core/prompting/PromptProfileRouter.d.ts +74 -0
  89. package/dist/core/prompting/PromptProfileRouter.d.ts.map +1 -0
  90. package/dist/core/prompting/PromptProfileRouter.js +270 -0
  91. package/dist/core/prompting/PromptProfileRouter.js.map +1 -0
  92. package/dist/core/provenance/anchoring/AnchorManager.d.ts +86 -0
  93. package/dist/core/provenance/anchoring/AnchorManager.d.ts.map +1 -0
  94. package/dist/core/provenance/anchoring/AnchorManager.js +244 -0
  95. package/dist/core/provenance/anchoring/AnchorManager.js.map +1 -0
  96. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.d.ts +20 -0
  97. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.d.ts.map +1 -0
  98. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.js +62 -0
  99. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.js.map +1 -0
  100. package/dist/core/provenance/anchoring/providers/NoneProvider.d.ts +15 -0
  101. package/dist/core/provenance/anchoring/providers/NoneProvider.d.ts.map +1 -0
  102. package/dist/core/provenance/anchoring/providers/NoneProvider.js +21 -0
  103. package/dist/core/provenance/anchoring/providers/NoneProvider.js.map +1 -0
  104. package/dist/core/provenance/anchoring/providers/createAnchorProvider.d.ts +38 -0
  105. package/dist/core/provenance/anchoring/providers/createAnchorProvider.d.ts.map +1 -0
  106. package/dist/core/provenance/anchoring/providers/createAnchorProvider.js +67 -0
  107. package/dist/core/provenance/anchoring/providers/createAnchorProvider.js.map +1 -0
  108. package/dist/core/provenance/anchoring/providers/index.d.ts +12 -0
  109. package/dist/core/provenance/anchoring/providers/index.d.ts.map +1 -0
  110. package/dist/core/provenance/anchoring/providers/index.js +12 -0
  111. package/dist/core/provenance/anchoring/providers/index.js.map +1 -0
  112. package/dist/core/provenance/config/PolicyProfiles.d.ts +60 -0
  113. package/dist/core/provenance/config/PolicyProfiles.d.ts.map +1 -0
  114. package/dist/core/provenance/config/PolicyProfiles.js +144 -0
  115. package/dist/core/provenance/config/PolicyProfiles.js.map +1 -0
  116. package/dist/core/provenance/crypto/AgentKeyManager.d.ts +48 -0
  117. package/dist/core/provenance/crypto/AgentKeyManager.d.ts.map +1 -0
  118. package/dist/core/provenance/crypto/AgentKeyManager.js +162 -0
  119. package/dist/core/provenance/crypto/AgentKeyManager.js.map +1 -0
  120. package/dist/core/provenance/crypto/HashChain.d.ts +58 -0
  121. package/dist/core/provenance/crypto/HashChain.d.ts.map +1 -0
  122. package/dist/core/provenance/crypto/HashChain.js +86 -0
  123. package/dist/core/provenance/crypto/HashChain.js.map +1 -0
  124. package/dist/core/provenance/crypto/MerkleTree.d.ts +41 -0
  125. package/dist/core/provenance/crypto/MerkleTree.d.ts.map +1 -0
  126. package/dist/core/provenance/crypto/MerkleTree.js +86 -0
  127. package/dist/core/provenance/crypto/MerkleTree.js.map +1 -0
  128. package/dist/core/provenance/enforcement/AutonomyGuard.d.ts +37 -0
  129. package/dist/core/provenance/enforcement/AutonomyGuard.d.ts.map +1 -0
  130. package/dist/core/provenance/enforcement/AutonomyGuard.js +120 -0
  131. package/dist/core/provenance/enforcement/AutonomyGuard.js.map +1 -0
  132. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts +43 -0
  133. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts.map +1 -0
  134. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js +193 -0
  135. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js.map +1 -0
  136. package/dist/core/provenance/enforcement/RevisionManager.d.ts +41 -0
  137. package/dist/core/provenance/enforcement/RevisionManager.d.ts.map +1 -0
  138. package/dist/core/provenance/enforcement/RevisionManager.js +105 -0
  139. package/dist/core/provenance/enforcement/RevisionManager.js.map +1 -0
  140. package/dist/core/provenance/enforcement/TombstoneManager.d.ts +47 -0
  141. package/dist/core/provenance/enforcement/TombstoneManager.d.ts.map +1 -0
  142. package/dist/core/provenance/enforcement/TombstoneManager.js +121 -0
  143. package/dist/core/provenance/enforcement/TombstoneManager.js.map +1 -0
  144. package/dist/core/provenance/index.d.ts +34 -0
  145. package/dist/core/provenance/index.d.ts.map +1 -0
  146. package/dist/core/provenance/index.js +39 -0
  147. package/dist/core/provenance/index.js.map +1 -0
  148. package/dist/core/provenance/ledger/EventTypes.d.ts +123 -0
  149. package/dist/core/provenance/ledger/EventTypes.d.ts.map +1 -0
  150. package/dist/core/provenance/ledger/EventTypes.js +9 -0
  151. package/dist/core/provenance/ledger/EventTypes.js.map +1 -0
  152. package/dist/core/provenance/ledger/SignedEventLedger.d.ts +75 -0
  153. package/dist/core/provenance/ledger/SignedEventLedger.d.ts.map +1 -0
  154. package/dist/core/provenance/ledger/SignedEventLedger.js +210 -0
  155. package/dist/core/provenance/ledger/SignedEventLedger.js.map +1 -0
  156. package/dist/core/provenance/schema/provenance-schema.d.ts +17 -0
  157. package/dist/core/provenance/schema/provenance-schema.d.ts.map +1 -0
  158. package/dist/core/provenance/schema/provenance-schema.js +104 -0
  159. package/dist/core/provenance/schema/provenance-schema.js.map +1 -0
  160. package/dist/core/provenance/types.d.ts +261 -0
  161. package/dist/core/provenance/types.d.ts.map +1 -0
  162. package/dist/core/provenance/types.js +21 -0
  163. package/dist/core/provenance/types.js.map +1 -0
  164. package/dist/core/provenance/verification/BundleExporter.d.ts +50 -0
  165. package/dist/core/provenance/verification/BundleExporter.d.ts.map +1 -0
  166. package/dist/core/provenance/verification/BundleExporter.js +240 -0
  167. package/dist/core/provenance/verification/BundleExporter.js.map +1 -0
  168. package/dist/core/provenance/verification/ChainVerifier.d.ts +39 -0
  169. package/dist/core/provenance/verification/ChainVerifier.d.ts.map +1 -0
  170. package/dist/core/provenance/verification/ChainVerifier.js +204 -0
  171. package/dist/core/provenance/verification/ChainVerifier.js.map +1 -0
  172. package/dist/core/provenance/verification/ConversationVerifier.d.ts +56 -0
  173. package/dist/core/provenance/verification/ConversationVerifier.d.ts.map +1 -0
  174. package/dist/core/provenance/verification/ConversationVerifier.js +109 -0
  175. package/dist/core/provenance/verification/ConversationVerifier.js.map +1 -0
  176. package/dist/extensions/ExtensionManager.d.ts.map +1 -1
  177. package/dist/extensions/ExtensionManager.js +6 -1
  178. package/dist/extensions/ExtensionManager.js.map +1 -1
  179. package/dist/extensions/MessagingChannelPayload.d.ts +39 -0
  180. package/dist/extensions/MessagingChannelPayload.d.ts.map +1 -0
  181. package/dist/extensions/MessagingChannelPayload.js +12 -0
  182. package/dist/extensions/MessagingChannelPayload.js.map +1 -0
  183. package/dist/extensions/packs/provenance-pack.d.ts +66 -0
  184. package/dist/extensions/packs/provenance-pack.d.ts.map +1 -0
  185. package/dist/extensions/packs/provenance-pack.js +162 -0
  186. package/dist/extensions/packs/provenance-pack.js.map +1 -0
  187. package/dist/extensions/types.d.ts +11 -0
  188. package/dist/extensions/types.d.ts.map +1 -1
  189. package/dist/extensions/types.js +4 -0
  190. package/dist/extensions/types.js.map +1 -1
  191. package/dist/index.d.ts +7 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +10 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/rag/IRetrievalAugmentor.d.ts +22 -1
  196. package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
  197. package/dist/rag/RetrievalAugmentor.d.ts +37 -0
  198. package/dist/rag/RetrievalAugmentor.d.ts.map +1 -1
  199. package/dist/rag/RetrievalAugmentor.js +82 -6
  200. package/dist/rag/RetrievalAugmentor.js.map +1 -1
  201. package/dist/rag/VectorStoreManager.d.ts.map +1 -1
  202. package/dist/rag/VectorStoreManager.js +5 -0
  203. package/dist/rag/VectorStoreManager.js.map +1 -1
  204. package/dist/rag/graphrag/GraphRAGEngine.d.ts +100 -0
  205. package/dist/rag/graphrag/GraphRAGEngine.d.ts.map +1 -0
  206. package/dist/rag/graphrag/GraphRAGEngine.js +1146 -0
  207. package/dist/rag/graphrag/GraphRAGEngine.js.map +1 -0
  208. package/dist/rag/graphrag/IGraphRAG.d.ts +198 -0
  209. package/dist/rag/graphrag/IGraphRAG.d.ts.map +1 -0
  210. package/dist/rag/graphrag/IGraphRAG.js +11 -0
  211. package/dist/rag/graphrag/IGraphRAG.js.map +1 -0
  212. package/dist/rag/graphrag/index.d.ts +12 -0
  213. package/dist/rag/graphrag/index.d.ts.map +1 -0
  214. package/dist/rag/graphrag/index.js +11 -0
  215. package/dist/rag/graphrag/index.js.map +1 -0
  216. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.d.ts +72 -0
  217. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.d.ts.map +1 -0
  218. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.js +463 -0
  219. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.js.map +1 -0
  220. package/dist/rag/implementations/vector_stores/index.d.ts +1 -0
  221. package/dist/rag/implementations/vector_stores/index.d.ts.map +1 -1
  222. package/dist/rag/implementations/vector_stores/index.js +2 -0
  223. package/dist/rag/implementations/vector_stores/index.js.map +1 -1
  224. package/dist/rag/index.d.ts +3 -0
  225. package/dist/rag/index.d.ts.map +1 -1
  226. package/dist/rag/index.js +5 -0
  227. package/dist/rag/index.js.map +1 -1
  228. package/dist/rag/reranking/IRerankerService.d.ts +163 -0
  229. package/dist/rag/reranking/IRerankerService.d.ts.map +1 -0
  230. package/dist/rag/reranking/IRerankerService.js +9 -0
  231. package/dist/rag/reranking/IRerankerService.js.map +1 -0
  232. package/dist/rag/reranking/RerankerService.d.ts +107 -0
  233. package/dist/rag/reranking/RerankerService.d.ts.map +1 -0
  234. package/dist/rag/reranking/RerankerService.js +194 -0
  235. package/dist/rag/reranking/RerankerService.js.map +1 -0
  236. package/dist/rag/reranking/index.d.ts +55 -0
  237. package/dist/rag/reranking/index.d.ts.map +1 -0
  238. package/dist/rag/reranking/index.js +56 -0
  239. package/dist/rag/reranking/index.js.map +1 -0
  240. package/dist/rag/reranking/providers/CohereReranker.d.ts +66 -0
  241. package/dist/rag/reranking/providers/CohereReranker.d.ts.map +1 -0
  242. package/dist/rag/reranking/providers/CohereReranker.js +141 -0
  243. package/dist/rag/reranking/providers/CohereReranker.js.map +1 -0
  244. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.d.ts +105 -0
  245. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.d.ts.map +1 -0
  246. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.js +214 -0
  247. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.js.map +1 -0
  248. package/dist/rag/reranking/providers/index.d.ts +7 -0
  249. package/dist/rag/reranking/providers/index.d.ts.map +1 -0
  250. package/dist/rag/reranking/providers/index.js +7 -0
  251. package/dist/rag/reranking/providers/index.js.map +1 -0
  252. package/dist/rag/reranking/tests/index.d.ts +6 -0
  253. package/dist/rag/reranking/tests/index.d.ts.map +1 -0
  254. package/dist/rag/reranking/tests/index.js +11 -0
  255. package/dist/rag/reranking/tests/index.js.map +1 -0
  256. package/dist/types/optionalDependencies.d.ts +5 -0
  257. package/dist/types/optionalDependencies.d.ts.map +1 -0
  258. package/dist/types/optionalDependencies.js +4 -0
  259. package/dist/types/optionalDependencies.js.map +1 -0
  260. package/package.json +22 -6
@@ -0,0 +1,240 @@
1
+ /**
2
+ * @file BundleExporter.ts
3
+ * @description Export and import verification bundles for offline chain verification.
4
+ * Bundles contain events, anchors, public key, and a bundle-level signature.
5
+ *
6
+ * @module AgentOS/Provenance/Verification
7
+ */
8
+ import { AgentKeyManager } from '../crypto/AgentKeyManager.js';
9
+ import { HashChain } from '../crypto/HashChain.js';
10
+ import { ChainVerifier } from './ChainVerifier.js';
11
+ // =============================================================================
12
+ // BundleExporter
13
+ // =============================================================================
14
+ export class BundleExporter {
15
+ constructor(ledger, keyManager, anchorStorage = null, tablePrefix = '') {
16
+ this.ledger = ledger;
17
+ this.keyManager = keyManager;
18
+ this.anchorStorage = anchorStorage;
19
+ this.tablePrefix = tablePrefix;
20
+ }
21
+ /**
22
+ * Export a verification bundle containing all events, anchors, and public key.
23
+ * The bundle is signed for tamper evidence.
24
+ *
25
+ * @param fromSequence - Optional start sequence (inclusive). Defaults to 1.
26
+ * @param toSequence - Optional end sequence (inclusive). Defaults to latest.
27
+ * @returns A self-contained verification bundle.
28
+ */
29
+ async exportBundle(fromSequence, toSequence) {
30
+ // Get events
31
+ let events;
32
+ if (fromSequence !== undefined && toSequence !== undefined) {
33
+ events = await this.ledger.getEventsByRange(fromSequence, toSequence);
34
+ }
35
+ else {
36
+ events = await this.ledger.getAllEvents();
37
+ }
38
+ // Get anchors
39
+ let anchors = [];
40
+ if (this.anchorStorage) {
41
+ const rows = await this.anchorStorage.all(`SELECT * FROM ${this.tablePrefix}anchors ORDER BY sequence_from ASC`);
42
+ anchors = rows.map(row => ({
43
+ id: row.id,
44
+ merkleRoot: row.merkle_root,
45
+ sequenceFrom: row.sequence_from,
46
+ sequenceTo: row.sequence_to,
47
+ eventCount: row.event_count,
48
+ signature: row.signature,
49
+ timestamp: row.timestamp,
50
+ externalRef: row.external_ref ?? undefined,
51
+ }));
52
+ // Filter anchors to the requested range
53
+ if (fromSequence !== undefined || toSequence !== undefined) {
54
+ anchors = anchors.filter(a => {
55
+ if (fromSequence !== undefined && a.sequenceTo < fromSequence)
56
+ return false;
57
+ if (toSequence !== undefined && a.sequenceFrom > toSequence)
58
+ return false;
59
+ return true;
60
+ });
61
+ }
62
+ }
63
+ const publicKey = this.keyManager.getPublicKeyBase64();
64
+ const exportedAt = new Date().toISOString();
65
+ // Compute bundle hash (hash of all event hashes + anchor merkle roots)
66
+ const contentHashes = [
67
+ ...events.map(e => e.hash),
68
+ ...anchors.map(a => a.merkleRoot),
69
+ ];
70
+ const bundleContentHash = HashChain.hash(contentHashes.join('|'));
71
+ // Sign the bundle
72
+ const bundleSignature = await this.keyManager.sign(bundleContentHash);
73
+ const bundle = {
74
+ version: '1.0.0',
75
+ agentId: events.length > 0 ? events[0].agentId : '',
76
+ publicKey,
77
+ events,
78
+ anchors,
79
+ exportedAt,
80
+ bundleHash: bundleContentHash,
81
+ bundleSignature,
82
+ };
83
+ return bundle;
84
+ }
85
+ /**
86
+ * Export a bundle as a JSONL string (one JSON object per line).
87
+ * Format:
88
+ * Line 1: Bundle metadata (version, agentId, publicKey, exportedAt, bundleHash, bundleSignature)
89
+ * Lines 2-N: One event per line
90
+ * Lines N+1-M: One anchor per line (prefixed with type: 'anchor')
91
+ */
92
+ async exportAsJSONL(fromSequence, toSequence) {
93
+ const bundle = await this.exportBundle(fromSequence, toSequence);
94
+ const lines = [];
95
+ // Metadata line
96
+ lines.push(JSON.stringify({
97
+ type: 'metadata',
98
+ version: bundle.version,
99
+ agentId: bundle.agentId,
100
+ publicKey: bundle.publicKey,
101
+ exportedAt: bundle.exportedAt,
102
+ bundleHash: bundle.bundleHash,
103
+ bundleSignature: bundle.bundleSignature,
104
+ eventCount: bundle.events.length,
105
+ anchorCount: bundle.anchors.length,
106
+ }));
107
+ // Event lines
108
+ for (const event of bundle.events) {
109
+ lines.push(JSON.stringify({ _line: 'event', ...event }));
110
+ }
111
+ // Anchor lines
112
+ for (const anchor of bundle.anchors) {
113
+ lines.push(JSON.stringify({ _line: 'anchor', ...anchor }));
114
+ }
115
+ return lines.join('\n');
116
+ }
117
+ /**
118
+ * Import and verify a bundle. Works completely offline (no DB required).
119
+ *
120
+ * @param bundle - The verification bundle to verify.
121
+ * @returns Verification result.
122
+ */
123
+ static async importAndVerify(bundle) {
124
+ const errors = [];
125
+ const warnings = [];
126
+ // 1. Verify bundle signature
127
+ const contentHashes = [
128
+ ...bundle.events.map(e => e.hash),
129
+ ...bundle.anchors.map(a => a.merkleRoot),
130
+ ];
131
+ const recomputedBundleHash = HashChain.hash(contentHashes.join('|'));
132
+ if (recomputedBundleHash !== bundle.bundleHash) {
133
+ errors.push({
134
+ eventId: '',
135
+ sequence: 0,
136
+ code: 'BUNDLE_HASH_MISMATCH',
137
+ message: 'Bundle content hash does not match. Bundle may have been tampered with.',
138
+ });
139
+ }
140
+ if (bundle.bundleSignature && bundle.publicKey) {
141
+ try {
142
+ const sigValid = await AgentKeyManager.verifySignature(bundle.bundleHash, bundle.bundleSignature, bundle.publicKey);
143
+ if (!sigValid) {
144
+ errors.push({
145
+ eventId: '',
146
+ sequence: 0,
147
+ code: 'BUNDLE_SIGNATURE_INVALID',
148
+ message: 'Bundle signature is invalid.',
149
+ });
150
+ }
151
+ }
152
+ catch (e) {
153
+ errors.push({
154
+ eventId: '',
155
+ sequence: 0,
156
+ code: 'BUNDLE_SIGNATURE_INVALID',
157
+ message: `Bundle signature verification failed: ${e.message}`,
158
+ });
159
+ }
160
+ }
161
+ // 2. Verify the event chain
162
+ const chainResult = await ChainVerifier.verify(bundle.events, bundle.publicKey);
163
+ // 3. Verify anchors reference valid event ranges
164
+ for (const anchor of bundle.anchors) {
165
+ const anchorEvents = bundle.events.filter(e => e.sequence >= anchor.sequenceFrom && e.sequence <= anchor.sequenceTo);
166
+ if (anchorEvents.length !== anchor.eventCount) {
167
+ warnings.push(`Anchor ${anchor.id}: expected ${anchor.eventCount} events in range [${anchor.sequenceFrom}, ${anchor.sequenceTo}], found ${anchorEvents.length} in bundle.`);
168
+ }
169
+ // Verify anchor signature
170
+ if (anchor.signature && bundle.publicKey) {
171
+ try {
172
+ const sigValid = await AgentKeyManager.verifySignature(anchor.merkleRoot, anchor.signature, bundle.publicKey);
173
+ if (!sigValid) {
174
+ errors.push({
175
+ eventId: anchor.id,
176
+ sequence: anchor.sequenceFrom,
177
+ code: 'ANCHOR_SIGNATURE_INVALID',
178
+ message: `Anchor ${anchor.id} signature is invalid.`,
179
+ });
180
+ }
181
+ }
182
+ catch (e) {
183
+ errors.push({
184
+ eventId: anchor.id,
185
+ sequence: anchor.sequenceFrom,
186
+ code: 'ANCHOR_SIGNATURE_INVALID',
187
+ message: `Anchor ${anchor.id} signature verification failed: ${e.message}`,
188
+ });
189
+ }
190
+ }
191
+ }
192
+ return {
193
+ valid: errors.length === 0 && chainResult.valid,
194
+ eventsVerified: bundle.events.length,
195
+ errors: [...errors, ...chainResult.errors],
196
+ warnings: [...warnings, ...chainResult.warnings],
197
+ firstSequence: bundle.events.length > 0 ? bundle.events[0].sequence : undefined,
198
+ lastSequence: bundle.events.length > 0 ? bundle.events[bundle.events.length - 1].sequence : undefined,
199
+ agentId: bundle.agentId,
200
+ verifiedAt: new Date().toISOString(),
201
+ };
202
+ }
203
+ /**
204
+ * Parse a JSONL bundle string back into a VerificationBundle.
205
+ */
206
+ static parseJSONL(jsonl) {
207
+ const lines = jsonl.trim().split('\n').filter(l => l.length > 0);
208
+ if (lines.length === 0) {
209
+ throw new Error('Empty JSONL bundle');
210
+ }
211
+ const metadataLine = JSON.parse(lines[0]);
212
+ if (metadataLine.type !== 'metadata') {
213
+ throw new Error('First line must be metadata');
214
+ }
215
+ const events = [];
216
+ const anchors = [];
217
+ for (let i = 1; i < lines.length; i++) {
218
+ const obj = JSON.parse(lines[i]);
219
+ if (obj._line === 'event') {
220
+ const { _line, ...event } = obj;
221
+ events.push(event);
222
+ }
223
+ else if (obj._line === 'anchor') {
224
+ const { _line, ...anchor } = obj;
225
+ anchors.push(anchor);
226
+ }
227
+ }
228
+ return {
229
+ version: metadataLine.version,
230
+ agentId: metadataLine.agentId,
231
+ publicKey: metadataLine.publicKey,
232
+ events,
233
+ anchors,
234
+ exportedAt: metadataLine.exportedAt,
235
+ bundleHash: metadataLine.bundleHash,
236
+ bundleSignature: metadataLine.bundleSignature,
237
+ };
238
+ }
239
+ }
240
+ //# sourceMappingURL=BundleExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BundleExporter.js","sourceRoot":"","sources":["../../../../src/core/provenance/verification/BundleExporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @file ChainVerifier.ts
3
+ * @description Verifies the integrity of the signed event hash chain.
4
+ * Checks sequence continuity, hash linkage, payload hashes, signatures,
5
+ * and timestamp monotonicity.
6
+ *
7
+ * @module AgentOS/Provenance/Verification
8
+ */
9
+ import type { SignedEvent, VerificationResult } from '../types.js';
10
+ export declare class ChainVerifier {
11
+ /**
12
+ * Verify an ordered array of signed events for chain integrity.
13
+ *
14
+ * Checks performed:
15
+ * 1. Sequence continuity (monotonically increasing, no gaps)
16
+ * 2. Hash linkage (each event's prevHash matches the prior event's hash)
17
+ * 3. Payload hash integrity (recomputed hash matches stored payloadHash)
18
+ * 4. Event hash integrity (recomputed hash matches stored hash)
19
+ * 5. Ed25519 signature verification (if signatures present)
20
+ * 6. Timestamp monotonicity (non-decreasing)
21
+ *
22
+ * @param events - Ordered array of SignedEvent objects (sorted by sequence ASC).
23
+ * @param publicKeyBase64 - Optional public key for signature verification.
24
+ * If omitted, uses each event's signerPublicKey field.
25
+ * @param hashAlgorithm - Hash algorithm used (default: 'sha256').
26
+ * @returns VerificationResult with validity status and any errors found.
27
+ */
28
+ static verify(events: SignedEvent[], publicKeyBase64?: string, hashAlgorithm?: 'sha256'): Promise<VerificationResult>;
29
+ /**
30
+ * Quick integrity check - returns true/false without detailed errors.
31
+ */
32
+ static isValid(events: SignedEvent[], publicKeyBase64?: string): Promise<boolean>;
33
+ /**
34
+ * Verify a sub-chain (range of events) within a larger chain.
35
+ * The first event's prevHash is trusted as a starting point.
36
+ */
37
+ static verifySubChain(events: SignedEvent[], expectedStartPrevHash: string, publicKeyBase64?: string): Promise<VerificationResult>;
38
+ }
39
+ //# sourceMappingURL=ChainVerifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainVerifier.d.ts","sourceRoot":"","sources":["../../../../src/core/provenance/verification/ChainVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAQtF,qBAAa,aAAa;IACxB;;;;;;;;;;;;;;;;OAgBG;WACU,MAAM,CACjB,MAAM,EAAE,WAAW,EAAE,EACrB,eAAe,CAAC,EAAE,MAAM,EACxB,aAAa,GAAE,QAAmB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAyJ9B;;OAEG;WACU,OAAO,CAClB,MAAM,EAAE,WAAW,EAAE,EACrB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,OAAO,CAAC;IAKnB;;;OAGG;WACU,cAAc,CACzB,MAAM,EAAE,WAAW,EAAE,EACrB,qBAAqB,EAAE,MAAM,EAC7B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,kBAAkB,CAAC;CA+B/B"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * @file ChainVerifier.ts
3
+ * @description Verifies the integrity of the signed event hash chain.
4
+ * Checks sequence continuity, hash linkage, payload hashes, signatures,
5
+ * and timestamp monotonicity.
6
+ *
7
+ * @module AgentOS/Provenance/Verification
8
+ */
9
+ import { HashChain } from '../crypto/HashChain.js';
10
+ import { AgentKeyManager } from '../crypto/AgentKeyManager.js';
11
+ // =============================================================================
12
+ // ChainVerifier
13
+ // =============================================================================
14
+ export class ChainVerifier {
15
+ /**
16
+ * Verify an ordered array of signed events for chain integrity.
17
+ *
18
+ * Checks performed:
19
+ * 1. Sequence continuity (monotonically increasing, no gaps)
20
+ * 2. Hash linkage (each event's prevHash matches the prior event's hash)
21
+ * 3. Payload hash integrity (recomputed hash matches stored payloadHash)
22
+ * 4. Event hash integrity (recomputed hash matches stored hash)
23
+ * 5. Ed25519 signature verification (if signatures present)
24
+ * 6. Timestamp monotonicity (non-decreasing)
25
+ *
26
+ * @param events - Ordered array of SignedEvent objects (sorted by sequence ASC).
27
+ * @param publicKeyBase64 - Optional public key for signature verification.
28
+ * If omitted, uses each event's signerPublicKey field.
29
+ * @param hashAlgorithm - Hash algorithm used (default: 'sha256').
30
+ * @returns VerificationResult with validity status and any errors found.
31
+ */
32
+ static async verify(events, publicKeyBase64, hashAlgorithm = 'sha256') {
33
+ const errors = [];
34
+ const warnings = [];
35
+ if (events.length === 0) {
36
+ return {
37
+ valid: true,
38
+ eventsVerified: 0,
39
+ errors: [],
40
+ warnings: ['Empty event chain provided.'],
41
+ verifiedAt: new Date().toISOString(),
42
+ };
43
+ }
44
+ // Check first event
45
+ const first = events[0];
46
+ if (first.sequence !== 1) {
47
+ warnings.push(`Chain does not start at sequence 1 (starts at ${first.sequence}). Partial chain verification.`);
48
+ }
49
+ let previousEvent = null;
50
+ for (let i = 0; i < events.length; i++) {
51
+ const event = events[i];
52
+ // 1. Sequence continuity
53
+ if (previousEvent && event.sequence !== previousEvent.sequence + 1) {
54
+ errors.push({
55
+ eventId: event.id,
56
+ sequence: event.sequence,
57
+ code: 'SEQUENCE_GAP',
58
+ message: `Sequence gap: expected ${previousEvent.sequence + 1}, got ${event.sequence}`,
59
+ });
60
+ }
61
+ // 2. Hash linkage
62
+ const expectedPrevHash = previousEvent ? previousEvent.hash : '';
63
+ if (event.prevHash !== expectedPrevHash) {
64
+ // Allow first event in partial chain to have any prevHash
65
+ if (i > 0) {
66
+ errors.push({
67
+ eventId: event.id,
68
+ sequence: event.sequence,
69
+ code: 'HASH_CHAIN_BROKEN',
70
+ message: `Hash chain broken at sequence ${event.sequence}: prevHash does not match previous event's hash`,
71
+ });
72
+ }
73
+ }
74
+ // 3. Payload hash integrity
75
+ const recomputedPayloadHash = HashChain.computePayloadHash(event.payload, hashAlgorithm);
76
+ if (recomputedPayloadHash !== event.payloadHash) {
77
+ errors.push({
78
+ eventId: event.id,
79
+ sequence: event.sequence,
80
+ code: 'PAYLOAD_HASH_MISMATCH',
81
+ message: `Payload hash mismatch at sequence ${event.sequence}: payload may have been tampered with`,
82
+ });
83
+ }
84
+ // 4. Event hash integrity
85
+ const recomputedEventHash = HashChain.computeEventHash({
86
+ sequence: event.sequence,
87
+ type: event.type,
88
+ timestamp: event.timestamp,
89
+ agentId: event.agentId,
90
+ prevHash: event.prevHash,
91
+ payloadHash: event.payloadHash,
92
+ }, hashAlgorithm);
93
+ if (recomputedEventHash !== event.hash) {
94
+ errors.push({
95
+ eventId: event.id,
96
+ sequence: event.sequence,
97
+ code: 'EVENT_HASH_MISMATCH',
98
+ message: `Event hash mismatch at sequence ${event.sequence}: event data may have been tampered with`,
99
+ });
100
+ }
101
+ // 5. Signature verification
102
+ if (event.signature && event.signature.length > 0) {
103
+ const pubKey = publicKeyBase64 || event.signerPublicKey;
104
+ if (pubKey) {
105
+ try {
106
+ const isValid = await AgentKeyManager.verifySignature(event.hash, event.signature, pubKey);
107
+ if (!isValid) {
108
+ errors.push({
109
+ eventId: event.id,
110
+ sequence: event.sequence,
111
+ code: 'SIGNATURE_INVALID',
112
+ message: `Invalid signature at sequence ${event.sequence}`,
113
+ });
114
+ }
115
+ }
116
+ catch (e) {
117
+ errors.push({
118
+ eventId: event.id,
119
+ sequence: event.sequence,
120
+ code: 'SIGNATURE_INVALID',
121
+ message: `Signature verification failed at sequence ${event.sequence}: ${e.message}`,
122
+ });
123
+ }
124
+ }
125
+ else {
126
+ warnings.push(`Event ${event.id} (seq ${event.sequence}) has signature but no public key for verification.`);
127
+ }
128
+ }
129
+ // 6. Timestamp monotonicity
130
+ if (previousEvent) {
131
+ const prevTime = new Date(previousEvent.timestamp).getTime();
132
+ const currTime = new Date(event.timestamp).getTime();
133
+ if (currTime < prevTime) {
134
+ errors.push({
135
+ eventId: event.id,
136
+ sequence: event.sequence,
137
+ code: 'TIMESTAMP_REGRESSION',
138
+ message: `Timestamp regression at sequence ${event.sequence}: ${event.timestamp} is before ${previousEvent.timestamp}`,
139
+ });
140
+ }
141
+ }
142
+ previousEvent = event;
143
+ }
144
+ // Check agent ID consistency
145
+ const agentIds = new Set(events.map(e => e.agentId));
146
+ if (agentIds.size > 1) {
147
+ warnings.push(`Multiple agent IDs found in chain: ${[...agentIds].join(', ')}. This may indicate events from different agents.`);
148
+ }
149
+ // Check signer key consistency
150
+ const signerKeys = new Set(events.filter(e => e.signerPublicKey).map(e => e.signerPublicKey));
151
+ if (signerKeys.size > 1) {
152
+ warnings.push(`Multiple signer public keys found. Key rotation may have occurred.`);
153
+ }
154
+ return {
155
+ valid: errors.length === 0,
156
+ eventsVerified: events.length,
157
+ errors,
158
+ warnings,
159
+ firstSequence: events[0].sequence,
160
+ lastSequence: events[events.length - 1].sequence,
161
+ agentId: events[0].agentId,
162
+ verifiedAt: new Date().toISOString(),
163
+ };
164
+ }
165
+ /**
166
+ * Quick integrity check - returns true/false without detailed errors.
167
+ */
168
+ static async isValid(events, publicKeyBase64) {
169
+ const result = await ChainVerifier.verify(events, publicKeyBase64);
170
+ return result.valid;
171
+ }
172
+ /**
173
+ * Verify a sub-chain (range of events) within a larger chain.
174
+ * The first event's prevHash is trusted as a starting point.
175
+ */
176
+ static async verifySubChain(events, expectedStartPrevHash, publicKeyBase64) {
177
+ if (events.length === 0) {
178
+ return {
179
+ valid: true,
180
+ eventsVerified: 0,
181
+ errors: [],
182
+ warnings: ['Empty sub-chain provided.'],
183
+ verifiedAt: new Date().toISOString(),
184
+ };
185
+ }
186
+ const errors = [];
187
+ // Verify the sub-chain connects to the expected starting point
188
+ if (events[0].prevHash !== expectedStartPrevHash) {
189
+ errors.push({
190
+ eventId: events[0].id,
191
+ sequence: events[0].sequence,
192
+ code: 'HASH_CHAIN_BROKEN',
193
+ message: `Sub-chain does not connect: expected prevHash '${expectedStartPrevHash}', got '${events[0].prevHash}'`,
194
+ });
195
+ }
196
+ const chainResult = await ChainVerifier.verify(events, publicKeyBase64);
197
+ return {
198
+ ...chainResult,
199
+ valid: chainResult.valid && errors.length === 0,
200
+ errors: [...errors, ...chainResult.errors],
201
+ };
202
+ }
203
+ }
204
+ //# sourceMappingURL=ChainVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainVerifier.js","sourceRoot":"","sources":["../../../../src/core/provenance/verification/ChainVerifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @file ConversationVerifier.ts
3
+ * @description Convenience verifier for conversation-level provenance checks.
4
+ * Filters events by conversation ID and verifies the sub-chain.
5
+ *
6
+ * @module AgentOS/Provenance/Verification
7
+ */
8
+ import type { VerificationResult } from '../types.js';
9
+ import type { SignedEventLedger } from '../ledger/SignedEventLedger.js';
10
+ export interface ConversationVerificationResult extends VerificationResult {
11
+ conversationId: string;
12
+ messageCount: number;
13
+ hasGenesis: boolean;
14
+ hasHumanInterventions: boolean;
15
+ humanInterventionCount: number;
16
+ isFullyAutonomous: boolean;
17
+ }
18
+ export declare class ConversationVerifier {
19
+ private readonly ledger;
20
+ constructor(ledger: SignedEventLedger);
21
+ /**
22
+ * Verify the provenance chain for a specific conversation.
23
+ *
24
+ * @param conversationId - The conversation ID to verify.
25
+ * @param publicKeyBase64 - Optional public key for signature verification.
26
+ * @returns Detailed verification result including conversation-specific metadata.
27
+ */
28
+ verifyConversation(conversationId: string, publicKeyBase64?: string): Promise<ConversationVerificationResult>;
29
+ /**
30
+ * Verify a single post/message within a conversation.
31
+ * Checks that the message event exists and its chain position is valid.
32
+ *
33
+ * @param messageId - The message ID to verify.
34
+ * @param publicKeyBase64 - Optional public key for signature verification.
35
+ */
36
+ verifyMessage(messageId: string, publicKeyBase64?: string): Promise<VerificationResult & {
37
+ messageId: string;
38
+ found: boolean;
39
+ }>;
40
+ /**
41
+ * Get a summary of provenance status for a conversation.
42
+ * Lighter than full verification - just counts and metadata.
43
+ */
44
+ getProvenanceSummary(conversationId: string): Promise<{
45
+ conversationId: string;
46
+ totalEvents: number;
47
+ messageEvents: number;
48
+ revisionEvents: number;
49
+ tombstoneEvents: number;
50
+ humanInterventions: number;
51
+ hasGenesis: boolean;
52
+ chainLength: number;
53
+ lastEventTimestamp: string | null;
54
+ }>;
55
+ }
56
+ //# sourceMappingURL=ConversationVerifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationVerifier.d.ts","sourceRoot":"","sources":["../../../../src/core/provenance/verification/ConversationVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAOxE,MAAM,WAAW,8BAA+B,SAAQ,kBAAkB;IACxE,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAMD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,MAAM,EAAE,iBAAiB;IAIrC;;;;;;OAMG;IACG,kBAAkB,CACtB,cAAc,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,8BAA8B,CAAC;IA2C1C;;;;;;OAMG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,kBAAkB,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAkCtE;;;OAGG;IACG,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1D,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;CAwBH"}