@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,37 @@
1
+ /**
2
+ * @file AutonomyGuard.ts
3
+ * @description Enforces autonomy rules in sealed mode.
4
+ * Blocks human input/prompting after genesis, logs all human interventions.
5
+ *
6
+ * @module AgentOS/Provenance/Enforcement
7
+ */
8
+ import type { AutonomyConfig } from '../types.js';
9
+ import type { SignedEventLedger } from '../ledger/SignedEventLedger.js';
10
+ export declare class AutonomyGuard {
11
+ private readonly config;
12
+ private readonly ledger;
13
+ private genesisRecorded;
14
+ constructor(config: AutonomyConfig, ledger?: SignedEventLedger | null);
15
+ /**
16
+ * Check if a human action is allowed under the current autonomy config.
17
+ * Throws ProvenanceViolationError if the action is blocked.
18
+ *
19
+ * @param actionType - Type of human action (e.g., 'prompt', 'edit_config', 'add_tool', 'pause', 'stop')
20
+ * @param details - Optional details about the action
21
+ */
22
+ checkHumanAction(actionType: string, details?: Record<string, unknown>): Promise<void>;
23
+ /**
24
+ * Record the genesis event, marking the start of sealed autonomous operation.
25
+ */
26
+ recordGenesis(genesisEventId: string): Promise<void>;
27
+ /**
28
+ * Check if genesis has been recorded.
29
+ */
30
+ isSealed(): boolean;
31
+ /**
32
+ * Check whether a specific action type would be blocked.
33
+ * Returns true if the action is allowed, false if it would be blocked.
34
+ */
35
+ wouldAllow(actionType: string): boolean;
36
+ }
37
+ //# sourceMappingURL=AutonomyGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutonomyGuard.d.ts","sourceRoot":"","sources":["../../../../src/core/provenance/enforcement/AutonomyGuard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA0B,MAAM,aAAa,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAMxE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,eAAe,CAAkB;gBAE7B,MAAM,EAAE,cAAc,EAAE,MAAM,GAAE,iBAAiB,GAAG,IAAW;IAM3E;;;;;;OAMG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IA0EhB;;OAEG;IACG,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAoBxC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * @file AutonomyGuard.ts
3
+ * @description Enforces autonomy rules in sealed mode.
4
+ * Blocks human input/prompting after genesis, logs all human interventions.
5
+ *
6
+ * @module AgentOS/Provenance/Enforcement
7
+ */
8
+ import { ProvenanceViolationError } from '../types.js';
9
+ // =============================================================================
10
+ // AutonomyGuard
11
+ // =============================================================================
12
+ export class AutonomyGuard {
13
+ constructor(config, ledger = null) {
14
+ this.genesisRecorded = false;
15
+ this.config = config;
16
+ this.ledger = ledger;
17
+ this.genesisRecorded = !!config.genesisEventId;
18
+ }
19
+ /**
20
+ * Check if a human action is allowed under the current autonomy config.
21
+ * Throws ProvenanceViolationError if the action is blocked.
22
+ *
23
+ * @param actionType - Type of human action (e.g., 'prompt', 'edit_config', 'add_tool', 'pause', 'stop')
24
+ * @param details - Optional details about the action
25
+ */
26
+ async checkHumanAction(actionType, details) {
27
+ if (!this.genesisRecorded) {
28
+ // Before genesis, all human actions are allowed
29
+ return;
30
+ }
31
+ // Check whitelist first
32
+ if (this.config.allowedHumanActions?.includes(actionType)) {
33
+ // Allowed but log it
34
+ if (this.ledger) {
35
+ await this.ledger.appendEvent('human.intervention', {
36
+ interventionType: actionType,
37
+ allowed: true,
38
+ details,
39
+ });
40
+ }
41
+ return;
42
+ }
43
+ // Check specific permissions
44
+ switch (actionType) {
45
+ case 'prompt':
46
+ case 'user_message':
47
+ case 'human_input':
48
+ if (!this.config.allowHumanPrompting) {
49
+ throw new ProvenanceViolationError(`Human prompting is blocked in sealed autonomous mode. Action: ${actionType}`, { code: 'AUTONOMY_HUMAN_PROMPT_BLOCKED', operation: actionType });
50
+ }
51
+ break;
52
+ case 'edit_config':
53
+ case 'config_change':
54
+ if (!this.config.allowConfigEdits) {
55
+ throw new ProvenanceViolationError(`Configuration changes are blocked in sealed autonomous mode.`, { code: 'AUTONOMY_CONFIG_EDIT_BLOCKED', operation: actionType });
56
+ }
57
+ break;
58
+ case 'add_tool':
59
+ case 'remove_tool':
60
+ case 'tool_change':
61
+ if (!this.config.allowToolChanges) {
62
+ throw new ProvenanceViolationError(`Tool changes are blocked in sealed autonomous mode.`, { code: 'AUTONOMY_TOOL_CHANGE_BLOCKED', operation: actionType });
63
+ }
64
+ break;
65
+ default:
66
+ // Unknown action types are blocked by default in sealed mode
67
+ // unless explicitly in the allowedHumanActions list
68
+ if (!this.config.allowHumanPrompting) {
69
+ throw new ProvenanceViolationError(`Human action '${actionType}' is blocked in sealed autonomous mode.`, { code: 'AUTONOMY_ACTION_BLOCKED', operation: actionType });
70
+ }
71
+ }
72
+ // Log the allowed action
73
+ if (this.ledger) {
74
+ await this.ledger.appendEvent('human.intervention', {
75
+ interventionType: actionType,
76
+ allowed: true,
77
+ details,
78
+ });
79
+ }
80
+ }
81
+ /**
82
+ * Record the genesis event, marking the start of sealed autonomous operation.
83
+ */
84
+ async recordGenesis(genesisEventId) {
85
+ this.config.genesisEventId = genesisEventId;
86
+ this.genesisRecorded = true;
87
+ }
88
+ /**
89
+ * Check if genesis has been recorded.
90
+ */
91
+ isSealed() {
92
+ return this.genesisRecorded;
93
+ }
94
+ /**
95
+ * Check whether a specific action type would be blocked.
96
+ * Returns true if the action is allowed, false if it would be blocked.
97
+ */
98
+ wouldAllow(actionType) {
99
+ if (!this.genesisRecorded)
100
+ return true;
101
+ if (this.config.allowedHumanActions?.includes(actionType))
102
+ return true;
103
+ switch (actionType) {
104
+ case 'prompt':
105
+ case 'user_message':
106
+ case 'human_input':
107
+ return this.config.allowHumanPrompting;
108
+ case 'edit_config':
109
+ case 'config_change':
110
+ return this.config.allowConfigEdits;
111
+ case 'add_tool':
112
+ case 'remove_tool':
113
+ case 'tool_change':
114
+ return this.config.allowToolChanges;
115
+ default:
116
+ return this.config.allowHumanPrompting;
117
+ }
118
+ }
119
+ }
120
+ //# sourceMappingURL=AutonomyGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutonomyGuard.js","sourceRoot":"","sources":["../../../../src/core/provenance/enforcement/AutonomyGuard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @file ProvenanceStorageHooks.ts
3
+ * @description StorageHooks implementation that enforces provenance policies.
4
+ * Integrates with sql-storage-adapter's onBeforeWrite/onAfterWrite hooks.
5
+ *
6
+ * @module AgentOS/Provenance/Enforcement
7
+ */
8
+ import type { ProvenanceSystemConfig } from '../types.js';
9
+ import type { SignedEventLedger } from '../ledger/SignedEventLedger.js';
10
+ import type { RevisionManager } from './RevisionManager.js';
11
+ import type { TombstoneManager } from './TombstoneManager.js';
12
+ interface WriteContext {
13
+ readonly operation: 'run' | 'batch';
14
+ statement: string;
15
+ parameters?: unknown[];
16
+ affectedTables?: string[];
17
+ readonly inTransaction?: boolean;
18
+ operationId: string;
19
+ startTime: number;
20
+ adapterKind?: string;
21
+ metadata?: Record<string, unknown>;
22
+ }
23
+ interface StorageRunResult {
24
+ changes: number;
25
+ lastInsertRowid?: string | number | null;
26
+ }
27
+ type WriteHookResult = WriteContext | undefined | void;
28
+ interface StorageHooks {
29
+ onBeforeWrite?(context: WriteContext): Promise<WriteHookResult>;
30
+ onAfterWrite?(context: WriteContext, result: StorageRunResult): Promise<void>;
31
+ }
32
+ /**
33
+ * Create StorageHooks that enforce provenance policies.
34
+ *
35
+ * @param config - The provenance system configuration.
36
+ * @param ledger - The signed event ledger (optional, for logging events).
37
+ * @param revisionManager - For capturing revisions in revisioned mode.
38
+ * @param tombstoneManager - For creating tombstones in revisioned mode.
39
+ * @returns StorageHooks compatible with sql-storage-adapter's combineHooks().
40
+ */
41
+ export declare function createProvenanceHooks(config: ProvenanceSystemConfig, ledger?: SignedEventLedger, revisionManager?: RevisionManager, tombstoneManager?: TombstoneManager): StorageHooks;
42
+ export {};
43
+ //# sourceMappingURL=ProvenanceStorageHooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvenanceStorageHooks.d.ts","sourceRoot":"","sources":["../../../../src/core/provenance/enforcement/ProvenanceStorageHooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAuB,MAAM,aAAa,CAAC;AAE/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM9D,UAAU,YAAY;IACpB,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,KAAK,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC;AAEvD,UAAU,YAAY;IACpB,aAAa,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAChE,YAAY,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AA+FD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,sBAAsB,EAC9B,MAAM,CAAC,EAAE,iBAAiB,EAC1B,eAAe,CAAC,EAAE,eAAe,EACjC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,YAAY,CAkGd"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * @file ProvenanceStorageHooks.ts
3
+ * @description StorageHooks implementation that enforces provenance policies.
4
+ * Integrates with sql-storage-adapter's onBeforeWrite/onAfterWrite hooks.
5
+ *
6
+ * @module AgentOS/Provenance/Enforcement
7
+ */
8
+ import { ProvenanceViolationError } from '../types.js';
9
+ function detectSqlOperation(statement) {
10
+ const trimmed = statement.trim().toUpperCase();
11
+ if (trimmed.startsWith('INSERT'))
12
+ return 'INSERT';
13
+ if (trimmed.startsWith('UPDATE'))
14
+ return 'UPDATE';
15
+ if (trimmed.startsWith('DELETE'))
16
+ return 'DELETE';
17
+ if (trimmed.startsWith('CREATE'))
18
+ return 'CREATE';
19
+ if (trimmed.startsWith('ALTER'))
20
+ return 'ALTER';
21
+ if (trimmed.startsWith('DROP'))
22
+ return 'DROP';
23
+ return 'UNKNOWN';
24
+ }
25
+ function extractTableFromStatement(statement) {
26
+ const trimmed = statement.trim();
27
+ // INSERT INTO <table>
28
+ const insertMatch = trimmed.match(/INSERT\s+(?:OR\s+\w+\s+)?INTO\s+(\S+)/i);
29
+ if (insertMatch)
30
+ return insertMatch[1];
31
+ // UPDATE <table>
32
+ const updateMatch = trimmed.match(/UPDATE\s+(\S+)/i);
33
+ if (updateMatch)
34
+ return updateMatch[1];
35
+ // DELETE FROM <table>
36
+ const deleteMatch = trimmed.match(/DELETE\s+FROM\s+(\S+)/i);
37
+ if (deleteMatch)
38
+ return deleteMatch[1];
39
+ return undefined;
40
+ }
41
+ function extractWhereClause(statement) {
42
+ const whereMatch = statement.match(/WHERE\s+(.+?)(?:;|\s*$)/i);
43
+ if (!whereMatch)
44
+ return null;
45
+ return { clause: whereMatch[1], params: [] };
46
+ }
47
+ function inferWhereParameters(whereClause, parameters) {
48
+ const positional = Array.isArray(parameters) ? parameters : [];
49
+ const placeholderCount = (whereClause.match(/\?/g) || []).length;
50
+ if (placeholderCount <= 0) {
51
+ return positional;
52
+ }
53
+ if (positional.length <= placeholderCount) {
54
+ return positional;
55
+ }
56
+ return positional.slice(positional.length - placeholderCount);
57
+ }
58
+ // =============================================================================
59
+ // isTableProtected
60
+ // =============================================================================
61
+ function isTableProtected(tableName, config) {
62
+ // Skip provenance's own tables
63
+ if (tableName.includes('signed_events') ||
64
+ tableName.includes('revisions') ||
65
+ tableName.includes('tombstones') ||
66
+ tableName.includes('anchors') ||
67
+ tableName.includes('agent_keys')) {
68
+ return false;
69
+ }
70
+ // Check exempt tables
71
+ if (config.exemptTables?.includes(tableName)) {
72
+ return false;
73
+ }
74
+ // If protectedTables is specified, only those are protected
75
+ if (config.protectedTables && config.protectedTables.length > 0) {
76
+ return config.protectedTables.includes(tableName);
77
+ }
78
+ // Default: all tables are protected
79
+ return true;
80
+ }
81
+ // =============================================================================
82
+ // Factory: createProvenanceHooks
83
+ // =============================================================================
84
+ /**
85
+ * Create StorageHooks that enforce provenance policies.
86
+ *
87
+ * @param config - The provenance system configuration.
88
+ * @param ledger - The signed event ledger (optional, for logging events).
89
+ * @param revisionManager - For capturing revisions in revisioned mode.
90
+ * @param tombstoneManager - For creating tombstones in revisioned mode.
91
+ * @returns StorageHooks compatible with sql-storage-adapter's combineHooks().
92
+ */
93
+ export function createProvenanceHooks(config, ledger, revisionManager, tombstoneManager) {
94
+ return {
95
+ onBeforeWrite: async (context) => {
96
+ const operation = detectSqlOperation(context.statement);
97
+ const table = context.affectedTables?.[0] ?? extractTableFromStatement(context.statement);
98
+ // Schema operations always allowed
99
+ if (operation === 'CREATE' || operation === 'ALTER' || operation === 'DROP') {
100
+ return context;
101
+ }
102
+ // Check if the table is protected
103
+ if (!table || !isTableProtected(table, config.storagePolicy)) {
104
+ return context;
105
+ }
106
+ const mode = config.storagePolicy.mode;
107
+ switch (mode) {
108
+ case 'sealed':
109
+ if (operation === 'UPDATE' || operation === 'DELETE') {
110
+ throw new ProvenanceViolationError(`${operation} operations are forbidden in sealed mode on table '${table}'`, { code: 'SEALED_MUTATION_BLOCKED', table, operation });
111
+ }
112
+ break;
113
+ case 'revisioned':
114
+ if (operation === 'UPDATE' && revisionManager) {
115
+ // Capture snapshot before the update
116
+ const where = extractWhereClause(context.statement);
117
+ if (where) {
118
+ await revisionManager.captureRevision(table, where.clause, inferWhereParameters(where.clause, context.parameters));
119
+ }
120
+ }
121
+ if (operation === 'DELETE' && tombstoneManager) {
122
+ // Create tombstone and abort the actual DELETE
123
+ const where = extractWhereClause(context.statement);
124
+ if (where) {
125
+ await tombstoneManager.createTombstone(table, where.clause, inferWhereParameters(where.clause, context.parameters));
126
+ }
127
+ // Return undefined to abort the DELETE
128
+ return undefined;
129
+ }
130
+ break;
131
+ case 'mutable':
132
+ // No enforcement
133
+ break;
134
+ }
135
+ return context;
136
+ },
137
+ onAfterWrite: async (context, result) => {
138
+ // Log events to the signed ledger (for all modes when provenance is enabled)
139
+ if (!config.provenance.enabled || !ledger || result.changes === 0) {
140
+ return;
141
+ }
142
+ const operation = detectSqlOperation(context.statement);
143
+ const table = context.affectedTables?.[0] ?? extractTableFromStatement(context.statement);
144
+ if (!table)
145
+ return;
146
+ // Skip logging for provenance's own tables (prevent infinite recursion)
147
+ if (table.includes('signed_events') ||
148
+ table.includes('revisions') ||
149
+ table.includes('tombstones') ||
150
+ table.includes('anchors') ||
151
+ table.includes('agent_keys')) {
152
+ return;
153
+ }
154
+ // Map SQL operation to event type
155
+ const eventType = mapOperationToEventType(operation, table);
156
+ if (!eventType)
157
+ return;
158
+ await ledger.appendEvent(eventType, {
159
+ table,
160
+ operation,
161
+ changes: result.changes,
162
+ operationId: context.operationId,
163
+ });
164
+ },
165
+ };
166
+ }
167
+ // =============================================================================
168
+ // Helpers
169
+ // =============================================================================
170
+ function mapOperationToEventType(operation, table) {
171
+ if (table.includes('message')) {
172
+ switch (operation) {
173
+ case 'INSERT': return 'message.created';
174
+ case 'UPDATE': return 'message.revised';
175
+ case 'DELETE': return 'message.tombstoned';
176
+ }
177
+ }
178
+ if (table.includes('conversation')) {
179
+ switch (operation) {
180
+ case 'INSERT': return 'conversation.created';
181
+ case 'UPDATE': return 'conversation.archived';
182
+ case 'DELETE': return 'conversation.tombstoned';
183
+ }
184
+ }
185
+ // Generic storage events
186
+ switch (operation) {
187
+ case 'INSERT': return 'memory.stored';
188
+ case 'UPDATE': return 'memory.revised';
189
+ case 'DELETE': return 'memory.tombstoned';
190
+ }
191
+ return null;
192
+ }
193
+ //# sourceMappingURL=ProvenanceStorageHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvenanceStorageHooks.js","sourceRoot":"","sources":["../../../../src/core/provenance/enforcement/ProvenanceStorageHooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @file RevisionManager.ts
3
+ * @description Captures row snapshots before UPDATE operations in revisioned mode.
4
+ * Creates revision records so the full history of every row is preserved.
5
+ *
6
+ * @module AgentOS/Provenance/Enforcement
7
+ */
8
+ import type { RevisionRecord } from '../types.js';
9
+ import type { SignedEventLedger } from '../ledger/SignedEventLedger.js';
10
+ interface RevisionStorageAdapter {
11
+ run(statement: string, parameters?: unknown[]): Promise<{
12
+ changes: number;
13
+ }>;
14
+ all<T = unknown>(statement: string, parameters?: unknown[]): Promise<T[]>;
15
+ get<T = unknown>(statement: string, parameters?: unknown[]): Promise<T | null>;
16
+ }
17
+ export declare class RevisionManager {
18
+ private readonly storageAdapter;
19
+ private readonly ledger;
20
+ private readonly tablePrefix;
21
+ constructor(storageAdapter: RevisionStorageAdapter, ledger?: SignedEventLedger | null, tablePrefix?: string);
22
+ /**
23
+ * Capture the current state of records that are about to be updated.
24
+ * Call this BEFORE the UPDATE executes.
25
+ *
26
+ * @param tableName - The table being updated.
27
+ * @param whereClause - The WHERE clause from the UPDATE statement (without "WHERE").
28
+ * @param parameters - Parameters for the WHERE clause.
29
+ */
30
+ captureRevision(tableName: string, whereClause: string, parameters?: unknown[]): Promise<RevisionRecord[]>;
31
+ /**
32
+ * Get all revisions for a specific record.
33
+ */
34
+ getRevisions(tableName: string, recordId: string): Promise<RevisionRecord[]>;
35
+ /**
36
+ * Get the latest revision for a specific record.
37
+ */
38
+ getLatestRevision(tableName: string, recordId: string): Promise<RevisionRecord | null>;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=RevisionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevisionManager.d.ts","sourceRoot":"","sources":["../../../../src/core/provenance/enforcement/RevisionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAOxE,UAAU,sBAAsB;IAC9B,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAChF;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAGnC,cAAc,EAAE,sBAAsB,EACtC,MAAM,GAAE,iBAAiB,GAAG,IAAW,EACvC,WAAW,GAAE,MAAW;IAO1B;;;;;;;OAOG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,OAAO,EAAO,GACzB,OAAO,CAAC,cAAc,EAAE,CAAC;IA2D5B;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAmBlF;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAoB7F"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @file RevisionManager.ts
3
+ * @description Captures row snapshots before UPDATE operations in revisioned mode.
4
+ * Creates revision records so the full history of every row is preserved.
5
+ *
6
+ * @module AgentOS/Provenance/Enforcement
7
+ */
8
+ import { v4 as uuidv4 } from 'uuid';
9
+ import { HashChain } from '../crypto/HashChain.js';
10
+ // =============================================================================
11
+ // RevisionManager
12
+ // =============================================================================
13
+ export class RevisionManager {
14
+ constructor(storageAdapter, ledger = null, tablePrefix = '') {
15
+ this.storageAdapter = storageAdapter;
16
+ this.ledger = ledger;
17
+ this.tablePrefix = tablePrefix;
18
+ }
19
+ /**
20
+ * Capture the current state of records that are about to be updated.
21
+ * Call this BEFORE the UPDATE executes.
22
+ *
23
+ * @param tableName - The table being updated.
24
+ * @param whereClause - The WHERE clause from the UPDATE statement (without "WHERE").
25
+ * @param parameters - Parameters for the WHERE clause.
26
+ */
27
+ async captureRevision(tableName, whereClause, parameters = []) {
28
+ // Fetch current rows that match the WHERE clause
29
+ const rows = await this.storageAdapter.all(`SELECT * FROM ${tableName} WHERE ${whereClause}`, parameters);
30
+ const revisions = [];
31
+ for (const row of rows) {
32
+ // Determine the record ID (use 'id' column by convention)
33
+ const recordId = row.id ?? row.Id ?? row.ID ?? JSON.stringify(row);
34
+ // Get the current revision number for this record
35
+ const lastRevision = await this.storageAdapter.get(`SELECT MAX(revision_number) as revision_number FROM ${this.tablePrefix}revisions
36
+ WHERE table_name = ? AND record_id = ?`, [tableName, String(recordId)]);
37
+ const revisionNumber = (lastRevision?.revision_number ?? 0) + 1;
38
+ const snapshot = JSON.stringify(row);
39
+ const timestamp = new Date().toISOString();
40
+ const id = uuidv4();
41
+ // Log to signed event ledger
42
+ let eventId = id; // fallback
43
+ if (this.ledger) {
44
+ const event = await this.ledger.appendEvent('message.revised', {
45
+ tableName,
46
+ recordId: String(recordId),
47
+ revisionNumber,
48
+ previousContentHash: HashChain.computePayloadHash(row),
49
+ });
50
+ eventId = event.id;
51
+ }
52
+ // Insert revision record
53
+ await this.storageAdapter.run(`INSERT INTO ${this.tablePrefix}revisions
54
+ (id, table_name, record_id, revision_number, snapshot, event_id, timestamp)
55
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [id, tableName, String(recordId), revisionNumber, snapshot, eventId, timestamp]);
56
+ revisions.push({
57
+ id,
58
+ tableName,
59
+ recordId: String(recordId),
60
+ revisionNumber,
61
+ snapshot,
62
+ eventId,
63
+ timestamp,
64
+ });
65
+ }
66
+ return revisions;
67
+ }
68
+ /**
69
+ * Get all revisions for a specific record.
70
+ */
71
+ async getRevisions(tableName, recordId) {
72
+ const rows = await this.storageAdapter.all(`SELECT * FROM ${this.tablePrefix}revisions
73
+ WHERE table_name = ? AND record_id = ?
74
+ ORDER BY revision_number ASC`, [tableName, recordId]);
75
+ return rows.map(row => ({
76
+ id: row.id,
77
+ tableName: row.table_name,
78
+ recordId: row.record_id,
79
+ revisionNumber: row.revision_number,
80
+ snapshot: row.snapshot,
81
+ eventId: row.event_id,
82
+ timestamp: row.timestamp,
83
+ }));
84
+ }
85
+ /**
86
+ * Get the latest revision for a specific record.
87
+ */
88
+ async getLatestRevision(tableName, recordId) {
89
+ const row = await this.storageAdapter.get(`SELECT * FROM ${this.tablePrefix}revisions
90
+ WHERE table_name = ? AND record_id = ?
91
+ ORDER BY revision_number DESC LIMIT 1`, [tableName, recordId]);
92
+ if (!row)
93
+ return null;
94
+ return {
95
+ id: row.id,
96
+ tableName: row.table_name,
97
+ recordId: row.record_id,
98
+ revisionNumber: row.revision_number,
99
+ snapshot: row.snapshot,
100
+ eventId: row.event_id,
101
+ timestamp: row.timestamp,
102
+ };
103
+ }
104
+ }
105
+ //# sourceMappingURL=RevisionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevisionManager.js","sourceRoot":"","sources":["../../../../src/core/provenance/enforcement/RevisionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @file TombstoneManager.ts
3
+ * @description Manages soft-deletion via tombstone records.
4
+ * In revisioned/sealed modes, DELETE operations are converted to tombstones.
5
+ *
6
+ * @module AgentOS/Provenance/Enforcement
7
+ */
8
+ import type { TombstoneRecord } from '../types.js';
9
+ import type { SignedEventLedger } from '../ledger/SignedEventLedger.js';
10
+ interface TombstoneStorageAdapter {
11
+ run(statement: string, parameters?: unknown[]): Promise<{
12
+ changes: number;
13
+ }>;
14
+ all<T = unknown>(statement: string, parameters?: unknown[]): Promise<T[]>;
15
+ get<T = unknown>(statement: string, parameters?: unknown[]): Promise<T | null>;
16
+ }
17
+ export declare class TombstoneManager {
18
+ private readonly storageAdapter;
19
+ private readonly ledger;
20
+ private readonly tablePrefix;
21
+ constructor(storageAdapter: TombstoneStorageAdapter, ledger?: SignedEventLedger | null, tablePrefix?: string);
22
+ /**
23
+ * Create a tombstone for records about to be deleted.
24
+ * Call this INSTEAD of executing the DELETE.
25
+ *
26
+ * @param tableName - The table the records belong to.
27
+ * @param whereClause - The WHERE clause from the DELETE statement.
28
+ * @param parameters - Parameters for the WHERE clause.
29
+ * @param reason - Reason for deletion.
30
+ * @param initiator - Who initiated the deletion (agent ID or 'human').
31
+ */
32
+ createTombstone(tableName: string, whereClause: string, parameters?: unknown[], reason?: string, initiator?: string): Promise<TombstoneRecord[]>;
33
+ /**
34
+ * Check if a record has been tombstoned.
35
+ */
36
+ isTombstoned(tableName: string, recordId: string): Promise<boolean>;
37
+ /**
38
+ * Get the tombstone record for a specific record.
39
+ */
40
+ getTombstone(tableName: string, recordId: string): Promise<TombstoneRecord | null>;
41
+ /**
42
+ * Get all tombstones for a table.
43
+ */
44
+ getTombstones(tableName?: string): Promise<TombstoneRecord[]>;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=TombstoneManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TombstoneManager.d.ts","sourceRoot":"","sources":["../../../../src/core/provenance/enforcement/TombstoneManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAMxE,UAAU,uBAAuB;IAC/B,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAChF;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAGnC,cAAc,EAAE,uBAAuB,EACvC,MAAM,GAAE,iBAAiB,GAAG,IAAW,EACvC,WAAW,GAAE,MAAW;IAO1B;;;;;;;;;OASG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,OAAO,EAAO,EAC1B,MAAM,GAAE,MAAkB,EAC1B,SAAS,GAAE,MAAiB,GAC3B,OAAO,CAAC,eAAe,EAAE,CAAC;IAiE7B;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzE;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAmBxF;;OAEG;IACG,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAsBpE"}