agentic-qe 2.7.4 → 2.8.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 (519) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +67 -2
  3. package/dist/cli/commands/agent/spawn.d.ts +12 -1
  4. package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
  5. package/dist/cli/commands/agent/spawn.js +95 -8
  6. package/dist/cli/commands/agent/spawn.js.map +1 -1
  7. package/dist/cli/index.js +91 -0
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  10. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts +134 -0
  11. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts.map +1 -0
  12. package/dist/edge/adapters/BrowserHNSWAdapter.js +484 -0
  13. package/dist/edge/adapters/BrowserHNSWAdapter.js.map +1 -0
  14. package/dist/edge/adapters/IndexedDBStorage.d.ts +114 -0
  15. package/dist/edge/adapters/IndexedDBStorage.d.ts.map +1 -0
  16. package/dist/edge/adapters/IndexedDBStorage.js +478 -0
  17. package/dist/edge/adapters/IndexedDBStorage.js.map +1 -0
  18. package/dist/edge/adapters/index.d.ts +12 -0
  19. package/dist/edge/adapters/index.d.ts.map +1 -0
  20. package/dist/edge/adapters/index.js +22 -0
  21. package/dist/edge/adapters/index.js.map +1 -0
  22. package/dist/edge/browser/BrowserAgent.d.ts +241 -0
  23. package/dist/edge/browser/BrowserAgent.d.ts.map +1 -0
  24. package/dist/edge/browser/BrowserAgent.js +743 -0
  25. package/dist/edge/browser/BrowserAgent.js.map +1 -0
  26. package/dist/edge/index.d.ts +34 -0
  27. package/dist/edge/index.d.ts.map +1 -0
  28. package/dist/edge/index.js +114 -0
  29. package/dist/edge/index.js.map +1 -0
  30. package/dist/edge/p2p/coordination/CoordinationManager.d.ts +181 -0
  31. package/dist/edge/p2p/coordination/CoordinationManager.d.ts.map +1 -0
  32. package/dist/edge/p2p/coordination/CoordinationManager.js +851 -0
  33. package/dist/edge/p2p/coordination/CoordinationManager.js.map +1 -0
  34. package/dist/edge/p2p/coordination/HealthMonitor.d.ts +143 -0
  35. package/dist/edge/p2p/coordination/HealthMonitor.d.ts.map +1 -0
  36. package/dist/edge/p2p/coordination/HealthMonitor.js +432 -0
  37. package/dist/edge/p2p/coordination/HealthMonitor.js.map +1 -0
  38. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts +146 -0
  39. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts.map +1 -0
  40. package/dist/edge/p2p/coordination/SyncOrchestrator.js +783 -0
  41. package/dist/edge/p2p/coordination/SyncOrchestrator.js.map +1 -0
  42. package/dist/edge/p2p/coordination/index.d.ts +70 -0
  43. package/dist/edge/p2p/coordination/index.d.ts.map +1 -0
  44. package/dist/edge/p2p/coordination/index.js +107 -0
  45. package/dist/edge/p2p/coordination/index.js.map +1 -0
  46. package/dist/edge/p2p/coordination/types.d.ts +572 -0
  47. package/dist/edge/p2p/coordination/types.d.ts.map +1 -0
  48. package/dist/edge/p2p/coordination/types.js +366 -0
  49. package/dist/edge/p2p/coordination/types.js.map +1 -0
  50. package/dist/edge/p2p/crdt/CRDTStore.d.ts +324 -0
  51. package/dist/edge/p2p/crdt/CRDTStore.d.ts.map +1 -0
  52. package/dist/edge/p2p/crdt/CRDTStore.js +839 -0
  53. package/dist/edge/p2p/crdt/CRDTStore.js.map +1 -0
  54. package/dist/edge/p2p/crdt/GCounter.d.ts +173 -0
  55. package/dist/edge/p2p/crdt/GCounter.d.ts.map +1 -0
  56. package/dist/edge/p2p/crdt/GCounter.js +394 -0
  57. package/dist/edge/p2p/crdt/GCounter.js.map +1 -0
  58. package/dist/edge/p2p/crdt/LWWRegister.d.ts +200 -0
  59. package/dist/edge/p2p/crdt/LWWRegister.d.ts.map +1 -0
  60. package/dist/edge/p2p/crdt/LWWRegister.js +456 -0
  61. package/dist/edge/p2p/crdt/LWWRegister.js.map +1 -0
  62. package/dist/edge/p2p/crdt/ORSet.d.ts +232 -0
  63. package/dist/edge/p2p/crdt/ORSet.d.ts.map +1 -0
  64. package/dist/edge/p2p/crdt/ORSet.js +723 -0
  65. package/dist/edge/p2p/crdt/ORSet.js.map +1 -0
  66. package/dist/edge/p2p/crdt/PatternCRDT.d.ts +366 -0
  67. package/dist/edge/p2p/crdt/PatternCRDT.d.ts.map +1 -0
  68. package/dist/edge/p2p/crdt/PatternCRDT.js +838 -0
  69. package/dist/edge/p2p/crdt/PatternCRDT.js.map +1 -0
  70. package/dist/edge/p2p/crdt/VectorClock.d.ts +274 -0
  71. package/dist/edge/p2p/crdt/VectorClock.d.ts.map +1 -0
  72. package/dist/edge/p2p/crdt/VectorClock.js +499 -0
  73. package/dist/edge/p2p/crdt/VectorClock.js.map +1 -0
  74. package/dist/edge/p2p/crdt/index.d.ts +87 -0
  75. package/dist/edge/p2p/crdt/index.d.ts.map +1 -0
  76. package/dist/edge/p2p/crdt/index.js +120 -0
  77. package/dist/edge/p2p/crdt/index.js.map +1 -0
  78. package/dist/edge/p2p/crdt/types.d.ts +667 -0
  79. package/dist/edge/p2p/crdt/types.d.ts.map +1 -0
  80. package/dist/edge/p2p/crdt/types.js +208 -0
  81. package/dist/edge/p2p/crdt/types.js.map +1 -0
  82. package/dist/edge/p2p/crypto/Identity.d.ts +139 -0
  83. package/dist/edge/p2p/crypto/Identity.d.ts.map +1 -0
  84. package/dist/edge/p2p/crypto/Identity.js +449 -0
  85. package/dist/edge/p2p/crypto/Identity.js.map +1 -0
  86. package/dist/edge/p2p/crypto/KeyManager.d.ts +196 -0
  87. package/dist/edge/p2p/crypto/KeyManager.d.ts.map +1 -0
  88. package/dist/edge/p2p/crypto/KeyManager.js +576 -0
  89. package/dist/edge/p2p/crypto/KeyManager.js.map +1 -0
  90. package/dist/edge/p2p/crypto/Signer.d.ts +164 -0
  91. package/dist/edge/p2p/crypto/Signer.d.ts.map +1 -0
  92. package/dist/edge/p2p/crypto/Signer.js +357 -0
  93. package/dist/edge/p2p/crypto/Signer.js.map +1 -0
  94. package/dist/edge/p2p/crypto/index.d.ts +90 -0
  95. package/dist/edge/p2p/crypto/index.d.ts.map +1 -0
  96. package/dist/edge/p2p/crypto/index.js +158 -0
  97. package/dist/edge/p2p/crypto/index.js.map +1 -0
  98. package/dist/edge/p2p/crypto/types.d.ts +217 -0
  99. package/dist/edge/p2p/crypto/types.d.ts.map +1 -0
  100. package/dist/edge/p2p/crypto/types.js +42 -0
  101. package/dist/edge/p2p/crypto/types.js.map +1 -0
  102. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts +270 -0
  103. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts.map +1 -0
  104. package/dist/edge/p2p/federated/FederatedCoordinator.js +824 -0
  105. package/dist/edge/p2p/federated/FederatedCoordinator.js.map +1 -0
  106. package/dist/edge/p2p/federated/FederatedRound.d.ts +295 -0
  107. package/dist/edge/p2p/federated/FederatedRound.d.ts.map +1 -0
  108. package/dist/edge/p2p/federated/FederatedRound.js +819 -0
  109. package/dist/edge/p2p/federated/FederatedRound.js.map +1 -0
  110. package/dist/edge/p2p/federated/GradientAggregator.d.ts +226 -0
  111. package/dist/edge/p2p/federated/GradientAggregator.d.ts.map +1 -0
  112. package/dist/edge/p2p/federated/GradientAggregator.js +826 -0
  113. package/dist/edge/p2p/federated/GradientAggregator.js.map +1 -0
  114. package/dist/edge/p2p/federated/ModelManager.d.ts +248 -0
  115. package/dist/edge/p2p/federated/ModelManager.d.ts.map +1 -0
  116. package/dist/edge/p2p/federated/ModelManager.js +724 -0
  117. package/dist/edge/p2p/federated/ModelManager.js.map +1 -0
  118. package/dist/edge/p2p/federated/index.d.ts +65 -0
  119. package/dist/edge/p2p/federated/index.d.ts.map +1 -0
  120. package/dist/edge/p2p/federated/index.js +110 -0
  121. package/dist/edge/p2p/federated/index.js.map +1 -0
  122. package/dist/edge/p2p/federated/types.d.ts +905 -0
  123. package/dist/edge/p2p/federated/types.d.ts.map +1 -0
  124. package/dist/edge/p2p/federated/types.js +339 -0
  125. package/dist/edge/p2p/federated/types.js.map +1 -0
  126. package/dist/edge/p2p/index.d.ts +156 -0
  127. package/dist/edge/p2p/index.d.ts.map +1 -0
  128. package/dist/edge/p2p/index.js +242 -0
  129. package/dist/edge/p2p/index.js.map +1 -0
  130. package/dist/edge/p2p/nat/ConnectivityTester.d.ts +128 -0
  131. package/dist/edge/p2p/nat/ConnectivityTester.d.ts.map +1 -0
  132. package/dist/edge/p2p/nat/ConnectivityTester.js +560 -0
  133. package/dist/edge/p2p/nat/ConnectivityTester.js.map +1 -0
  134. package/dist/edge/p2p/nat/HolePuncher.d.ts +159 -0
  135. package/dist/edge/p2p/nat/HolePuncher.d.ts.map +1 -0
  136. package/dist/edge/p2p/nat/HolePuncher.js +569 -0
  137. package/dist/edge/p2p/nat/HolePuncher.js.map +1 -0
  138. package/dist/edge/p2p/nat/NATDetector.d.ts +109 -0
  139. package/dist/edge/p2p/nat/NATDetector.d.ts.map +1 -0
  140. package/dist/edge/p2p/nat/NATDetector.js +472 -0
  141. package/dist/edge/p2p/nat/NATDetector.js.map +1 -0
  142. package/dist/edge/p2p/nat/TURNManager.d.ts +158 -0
  143. package/dist/edge/p2p/nat/TURNManager.d.ts.map +1 -0
  144. package/dist/edge/p2p/nat/TURNManager.js +547 -0
  145. package/dist/edge/p2p/nat/TURNManager.js.map +1 -0
  146. package/dist/edge/p2p/nat/index.d.ts +74 -0
  147. package/dist/edge/p2p/nat/index.d.ts.map +1 -0
  148. package/dist/edge/p2p/nat/index.js +104 -0
  149. package/dist/edge/p2p/nat/index.js.map +1 -0
  150. package/dist/edge/p2p/nat/types.d.ts +583 -0
  151. package/dist/edge/p2p/nat/types.d.ts.map +1 -0
  152. package/dist/edge/p2p/nat/types.js +267 -0
  153. package/dist/edge/p2p/nat/types.js.map +1 -0
  154. package/dist/edge/p2p/protocol/AgentChannel.d.ts +333 -0
  155. package/dist/edge/p2p/protocol/AgentChannel.d.ts.map +1 -0
  156. package/dist/edge/p2p/protocol/AgentChannel.js +914 -0
  157. package/dist/edge/p2p/protocol/AgentChannel.js.map +1 -0
  158. package/dist/edge/p2p/protocol/MessageEncoder.d.ts +147 -0
  159. package/dist/edge/p2p/protocol/MessageEncoder.d.ts.map +1 -0
  160. package/dist/edge/p2p/protocol/MessageEncoder.js +738 -0
  161. package/dist/edge/p2p/protocol/MessageEncoder.js.map +1 -0
  162. package/dist/edge/p2p/protocol/MessageRouter.d.ts +266 -0
  163. package/dist/edge/p2p/protocol/MessageRouter.d.ts.map +1 -0
  164. package/dist/edge/p2p/protocol/MessageRouter.js +808 -0
  165. package/dist/edge/p2p/protocol/MessageRouter.js.map +1 -0
  166. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts +309 -0
  167. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts.map +1 -0
  168. package/dist/edge/p2p/protocol/ProtocolHandler.js +930 -0
  169. package/dist/edge/p2p/protocol/ProtocolHandler.js.map +1 -0
  170. package/dist/edge/p2p/protocol/index.d.ts +114 -0
  171. package/dist/edge/p2p/protocol/index.d.ts.map +1 -0
  172. package/dist/edge/p2p/protocol/index.js +206 -0
  173. package/dist/edge/p2p/protocol/index.js.map +1 -0
  174. package/dist/edge/p2p/protocol/types.d.ts +737 -0
  175. package/dist/edge/p2p/protocol/types.d.ts.map +1 -0
  176. package/dist/edge/p2p/protocol/types.js +490 -0
  177. package/dist/edge/p2p/protocol/types.js.map +1 -0
  178. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts +284 -0
  179. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts.map +1 -0
  180. package/dist/edge/p2p/sharing/PatternBroadcaster.js +644 -0
  181. package/dist/edge/p2p/sharing/PatternBroadcaster.js.map +1 -0
  182. package/dist/edge/p2p/sharing/PatternIndex.d.ts +168 -0
  183. package/dist/edge/p2p/sharing/PatternIndex.d.ts.map +1 -0
  184. package/dist/edge/p2p/sharing/PatternIndex.js +781 -0
  185. package/dist/edge/p2p/sharing/PatternIndex.js.map +1 -0
  186. package/dist/edge/p2p/sharing/PatternSerializer.d.ts +163 -0
  187. package/dist/edge/p2p/sharing/PatternSerializer.d.ts.map +1 -0
  188. package/dist/edge/p2p/sharing/PatternSerializer.js +696 -0
  189. package/dist/edge/p2p/sharing/PatternSerializer.js.map +1 -0
  190. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts +242 -0
  191. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts.map +1 -0
  192. package/dist/edge/p2p/sharing/PatternSyncManager.js +859 -0
  193. package/dist/edge/p2p/sharing/PatternSyncManager.js.map +1 -0
  194. package/dist/edge/p2p/sharing/index.d.ts +90 -0
  195. package/dist/edge/p2p/sharing/index.d.ts.map +1 -0
  196. package/dist/edge/p2p/sharing/index.js +152 -0
  197. package/dist/edge/p2p/sharing/index.js.map +1 -0
  198. package/dist/edge/p2p/sharing/types.d.ts +796 -0
  199. package/dist/edge/p2p/sharing/types.d.ts.map +1 -0
  200. package/dist/edge/p2p/sharing/types.js +264 -0
  201. package/dist/edge/p2p/sharing/types.js.map +1 -0
  202. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts +218 -0
  203. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts.map +1 -0
  204. package/dist/edge/p2p/webrtc/ConnectionPool.js +562 -0
  205. package/dist/edge/p2p/webrtc/ConnectionPool.js.map +1 -0
  206. package/dist/edge/p2p/webrtc/ICEManager.d.ts +171 -0
  207. package/dist/edge/p2p/webrtc/ICEManager.d.ts.map +1 -0
  208. package/dist/edge/p2p/webrtc/ICEManager.js +490 -0
  209. package/dist/edge/p2p/webrtc/ICEManager.js.map +1 -0
  210. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts +159 -0
  211. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts.map +1 -0
  212. package/dist/edge/p2p/webrtc/PeerConnectionManager.js +735 -0
  213. package/dist/edge/p2p/webrtc/PeerConnectionManager.js.map +1 -0
  214. package/dist/edge/p2p/webrtc/SignalingClient.d.ts +191 -0
  215. package/dist/edge/p2p/webrtc/SignalingClient.d.ts.map +1 -0
  216. package/dist/edge/p2p/webrtc/SignalingClient.js +608 -0
  217. package/dist/edge/p2p/webrtc/SignalingClient.js.map +1 -0
  218. package/dist/edge/p2p/webrtc/index.d.ts +158 -0
  219. package/dist/edge/p2p/webrtc/index.d.ts.map +1 -0
  220. package/dist/edge/p2p/webrtc/index.js +164 -0
  221. package/dist/edge/p2p/webrtc/index.js.map +1 -0
  222. package/dist/edge/p2p/webrtc/types.d.ts +665 -0
  223. package/dist/edge/p2p/webrtc/types.d.ts.map +1 -0
  224. package/dist/edge/p2p/webrtc/types.js +245 -0
  225. package/dist/edge/p2p/webrtc/types.js.map +1 -0
  226. package/dist/edge/server/AgentSpawnAPI.d.ts +98 -0
  227. package/dist/edge/server/AgentSpawnAPI.d.ts.map +1 -0
  228. package/dist/edge/server/AgentSpawnAPI.js +264 -0
  229. package/dist/edge/server/AgentSpawnAPI.js.map +1 -0
  230. package/dist/edge/server/SignalingServer.d.ts +71 -0
  231. package/dist/edge/server/SignalingServer.d.ts.map +1 -0
  232. package/dist/edge/server/SignalingServer.js +429 -0
  233. package/dist/edge/server/SignalingServer.js.map +1 -0
  234. package/dist/edge/server/index.d.ts +64 -0
  235. package/dist/edge/server/index.d.ts.map +1 -0
  236. package/dist/edge/server/index.js +318 -0
  237. package/dist/edge/server/index.js.map +1 -0
  238. package/dist/edge/types/browser-agent.types.d.ts +455 -0
  239. package/dist/edge/types/browser-agent.types.d.ts.map +1 -0
  240. package/dist/edge/types/browser-agent.types.js +116 -0
  241. package/dist/edge/types/browser-agent.types.js.map +1 -0
  242. package/dist/edge/types/index.d.ts +11 -0
  243. package/dist/edge/types/index.d.ts.map +1 -0
  244. package/dist/edge/types/index.js +17 -0
  245. package/dist/edge/types/index.js.map +1 -0
  246. package/dist/edge/types/storage.types.d.ts +207 -0
  247. package/dist/edge/types/storage.types.d.ts.map +1 -0
  248. package/dist/edge/types/storage.types.js +47 -0
  249. package/dist/edge/types/storage.types.js.map +1 -0
  250. package/dist/edge/wasm/shims.d.ts +224 -0
  251. package/dist/edge/wasm/shims.d.ts.map +1 -0
  252. package/dist/edge/wasm/shims.js +667 -0
  253. package/dist/edge/wasm/shims.js.map +1 -0
  254. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +33 -0
  255. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -0
  256. package/dist/mcp/handlers/NewDomainToolsHandler.js +305 -0
  257. package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -0
  258. package/dist/mcp/handlers/filtered/index.d.ts +15 -19
  259. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -1
  260. package/dist/mcp/handlers/filtered/index.js +16 -27
  261. package/dist/mcp/handlers/filtered/index.js.map +1 -1
  262. package/dist/mcp/handlers/integration/index.d.ts +5 -4
  263. package/dist/mcp/handlers/integration/index.d.ts.map +1 -1
  264. package/dist/mcp/handlers/integration/index.js +7 -7
  265. package/dist/mcp/handlers/integration/index.js.map +1 -1
  266. package/dist/mcp/server-instructions.d.ts +1 -1
  267. package/dist/mcp/server-instructions.js +1 -1
  268. package/dist/mcp/server.d.ts.map +1 -1
  269. package/dist/mcp/server.js +14 -0
  270. package/dist/mcp/server.js.map +1 -1
  271. package/dist/mcp/tools.d.ts +8 -0
  272. package/dist/mcp/tools.d.ts.map +1 -1
  273. package/dist/mcp/tools.js +412 -1
  274. package/dist/mcp/tools.js.map +1 -1
  275. package/dist/planning/GOAPPlanner.d.ts +1 -0
  276. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  277. package/dist/planning/GOAPPlanner.js +12 -0
  278. package/dist/planning/GOAPPlanner.js.map +1 -1
  279. package/package.json +29 -8
  280. package/dist/alerting/AlertManager.d.ts +0 -120
  281. package/dist/alerting/AlertManager.d.ts.map +0 -1
  282. package/dist/alerting/AlertManager.js +0 -345
  283. package/dist/alerting/AlertManager.js.map +0 -1
  284. package/dist/alerting/FeedbackRouter.d.ts +0 -98
  285. package/dist/alerting/FeedbackRouter.d.ts.map +0 -1
  286. package/dist/alerting/FeedbackRouter.js +0 -331
  287. package/dist/alerting/FeedbackRouter.js.map +0 -1
  288. package/dist/alerting/StrategyApplicator.d.ts +0 -120
  289. package/dist/alerting/StrategyApplicator.d.ts.map +0 -1
  290. package/dist/alerting/StrategyApplicator.js +0 -299
  291. package/dist/alerting/StrategyApplicator.js.map +0 -1
  292. package/dist/alerting/index.d.ts +0 -68
  293. package/dist/alerting/index.d.ts.map +0 -1
  294. package/dist/alerting/index.js +0 -112
  295. package/dist/alerting/index.js.map +0 -1
  296. package/dist/alerting/types.d.ts +0 -118
  297. package/dist/alerting/types.d.ts.map +0 -1
  298. package/dist/alerting/types.js +0 -11
  299. package/dist/alerting/types.js.map +0 -1
  300. package/dist/cli/commands/fleet/backup.d.ts +0 -49
  301. package/dist/cli/commands/fleet/backup.d.ts.map +0 -1
  302. package/dist/cli/commands/fleet/backup.js +0 -88
  303. package/dist/cli/commands/fleet/backup.js.map +0 -1
  304. package/dist/cli/commands/fleet/health.d.ts +0 -154
  305. package/dist/cli/commands/fleet/health.d.ts.map +0 -1
  306. package/dist/cli/commands/fleet/health.js +0 -483
  307. package/dist/cli/commands/fleet/health.js.map +0 -1
  308. package/dist/cli/commands/fleet/init.d.ts +0 -11
  309. package/dist/cli/commands/fleet/init.d.ts.map +0 -1
  310. package/dist/cli/commands/fleet/init.js +0 -91
  311. package/dist/cli/commands/fleet/init.js.map +0 -1
  312. package/dist/cli/commands/fleet/logs.d.ts +0 -21
  313. package/dist/cli/commands/fleet/logs.d.ts.map +0 -1
  314. package/dist/cli/commands/fleet/logs.js +0 -267
  315. package/dist/cli/commands/fleet/logs.js.map +0 -1
  316. package/dist/cli/commands/fleet/metrics.d.ts +0 -27
  317. package/dist/cli/commands/fleet/metrics.d.ts.map +0 -1
  318. package/dist/cli/commands/fleet/metrics.js +0 -369
  319. package/dist/cli/commands/fleet/metrics.js.map +0 -1
  320. package/dist/cli/commands/fleet/monitor.d.ts +0 -18
  321. package/dist/cli/commands/fleet/monitor.d.ts.map +0 -1
  322. package/dist/cli/commands/fleet/monitor.js +0 -237
  323. package/dist/cli/commands/fleet/monitor.js.map +0 -1
  324. package/dist/cli/commands/fleet/optimize.d.ts +0 -42
  325. package/dist/cli/commands/fleet/optimize.d.ts.map +0 -1
  326. package/dist/cli/commands/fleet/optimize.js +0 -135
  327. package/dist/cli/commands/fleet/optimize.js.map +0 -1
  328. package/dist/cli/commands/fleet/recover.d.ts +0 -22
  329. package/dist/cli/commands/fleet/recover.d.ts.map +0 -1
  330. package/dist/cli/commands/fleet/recover.js +0 -99
  331. package/dist/cli/commands/fleet/recover.js.map +0 -1
  332. package/dist/cli/commands/fleet/restart.d.ts +0 -18
  333. package/dist/cli/commands/fleet/restart.d.ts.map +0 -1
  334. package/dist/cli/commands/fleet/restart.js +0 -290
  335. package/dist/cli/commands/fleet/restart.js.map +0 -1
  336. package/dist/cli/commands/fleet/scale.d.ts +0 -9
  337. package/dist/cli/commands/fleet/scale.d.ts.map +0 -1
  338. package/dist/cli/commands/fleet/scale.js +0 -77
  339. package/dist/cli/commands/fleet/scale.js.map +0 -1
  340. package/dist/cli/commands/fleet/shutdown.d.ts +0 -19
  341. package/dist/cli/commands/fleet/shutdown.d.ts.map +0 -1
  342. package/dist/cli/commands/fleet/shutdown.js +0 -307
  343. package/dist/cli/commands/fleet/shutdown.js.map +0 -1
  344. package/dist/cli/commands/fleet/status.d.ts +0 -10
  345. package/dist/cli/commands/fleet/status.d.ts.map +0 -1
  346. package/dist/cli/commands/fleet/status.js +0 -97
  347. package/dist/cli/commands/fleet/status.js.map +0 -1
  348. package/dist/cli/commands/fleet/topology.d.ts +0 -23
  349. package/dist/cli/commands/fleet/topology.d.ts.map +0 -1
  350. package/dist/cli/commands/fleet/topology.js +0 -376
  351. package/dist/cli/commands/fleet/topology.js.map +0 -1
  352. package/dist/cli/commands/monitor/alerts.d.ts +0 -45
  353. package/dist/cli/commands/monitor/alerts.d.ts.map +0 -1
  354. package/dist/cli/commands/monitor/alerts.js +0 -168
  355. package/dist/cli/commands/monitor/alerts.js.map +0 -1
  356. package/dist/cli/commands/monitor/analyze.d.ts +0 -49
  357. package/dist/cli/commands/monitor/analyze.d.ts.map +0 -1
  358. package/dist/cli/commands/monitor/analyze.js +0 -209
  359. package/dist/cli/commands/monitor/analyze.js.map +0 -1
  360. package/dist/cli/commands/monitor/compare.d.ts +0 -38
  361. package/dist/cli/commands/monitor/compare.d.ts.map +0 -1
  362. package/dist/cli/commands/monitor/compare.js +0 -177
  363. package/dist/cli/commands/monitor/compare.js.map +0 -1
  364. package/dist/cli/commands/monitor/dashboard.d.ts +0 -34
  365. package/dist/cli/commands/monitor/dashboard.d.ts.map +0 -1
  366. package/dist/cli/commands/monitor/dashboard.js +0 -157
  367. package/dist/cli/commands/monitor/dashboard.js.map +0 -1
  368. package/dist/cli/commands/monitor/export.d.ts +0 -36
  369. package/dist/cli/commands/monitor/export.d.ts.map +0 -1
  370. package/dist/cli/commands/monitor/export.js +0 -157
  371. package/dist/cli/commands/monitor/export.js.map +0 -1
  372. package/dist/cli/commands/monitor/index.d.ts +0 -11
  373. package/dist/cli/commands/monitor/index.d.ts.map +0 -1
  374. package/dist/cli/commands/monitor/index.js +0 -14
  375. package/dist/cli/commands/monitor/index.js.map +0 -1
  376. package/dist/cli/commands/quality/baseline.d.ts +0 -27
  377. package/dist/cli/commands/quality/baseline.d.ts.map +0 -1
  378. package/dist/cli/commands/quality/baseline.js +0 -124
  379. package/dist/cli/commands/quality/baseline.js.map +0 -1
  380. package/dist/cli/commands/quality/compare.d.ts +0 -36
  381. package/dist/cli/commands/quality/compare.d.ts.map +0 -1
  382. package/dist/cli/commands/quality/compare.js +0 -136
  383. package/dist/cli/commands/quality/compare.js.map +0 -1
  384. package/dist/cli/commands/quality/decision.d.ts +0 -81
  385. package/dist/cli/commands/quality/decision.d.ts.map +0 -1
  386. package/dist/cli/commands/quality/decision.js +0 -319
  387. package/dist/cli/commands/quality/decision.js.map +0 -1
  388. package/dist/cli/commands/quality/gate.d.ts +0 -47
  389. package/dist/cli/commands/quality/gate.d.ts.map +0 -1
  390. package/dist/cli/commands/quality/gate.js +0 -205
  391. package/dist/cli/commands/quality/gate.js.map +0 -1
  392. package/dist/cli/commands/quality/index.d.ts +0 -17
  393. package/dist/cli/commands/quality/index.d.ts.map +0 -1
  394. package/dist/cli/commands/quality/index.js +0 -41
  395. package/dist/cli/commands/quality/index.js.map +0 -1
  396. package/dist/cli/commands/quality/policy.d.ts +0 -57
  397. package/dist/cli/commands/quality/policy.d.ts.map +0 -1
  398. package/dist/cli/commands/quality/policy.js +0 -359
  399. package/dist/cli/commands/quality/policy.js.map +0 -1
  400. package/dist/cli/commands/quality/risk.d.ts +0 -41
  401. package/dist/cli/commands/quality/risk.d.ts.map +0 -1
  402. package/dist/cli/commands/quality/risk.js +0 -255
  403. package/dist/cli/commands/quality/risk.js.map +0 -1
  404. package/dist/cli/commands/quality/trends.d.ts +0 -40
  405. package/dist/cli/commands/quality/trends.d.ts.map +0 -1
  406. package/dist/cli/commands/quality/trends.js +0 -122
  407. package/dist/cli/commands/quality/trends.js.map +0 -1
  408. package/dist/cli/commands/quality/validate.d.ts +0 -44
  409. package/dist/cli/commands/quality/validate.d.ts.map +0 -1
  410. package/dist/cli/commands/quality/validate.js +0 -234
  411. package/dist/cli/commands/quality/validate.js.map +0 -1
  412. package/dist/cli/commands/test/analyze-failures.d.ts +0 -39
  413. package/dist/cli/commands/test/analyze-failures.d.ts.map +0 -1
  414. package/dist/cli/commands/test/analyze-failures.js +0 -113
  415. package/dist/cli/commands/test/analyze-failures.js.map +0 -1
  416. package/dist/cli/commands/test/clean.d.ts +0 -3
  417. package/dist/cli/commands/test/clean.d.ts.map +0 -1
  418. package/dist/cli/commands/test/clean.js +0 -148
  419. package/dist/cli/commands/test/clean.js.map +0 -1
  420. package/dist/cli/commands/test/debug.d.ts +0 -3
  421. package/dist/cli/commands/test/debug.d.ts.map +0 -1
  422. package/dist/cli/commands/test/debug.js +0 -167
  423. package/dist/cli/commands/test/debug.js.map +0 -1
  424. package/dist/cli/commands/test/diff.d.ts +0 -3
  425. package/dist/cli/commands/test/diff.d.ts.map +0 -1
  426. package/dist/cli/commands/test/diff.js +0 -195
  427. package/dist/cli/commands/test/diff.js.map +0 -1
  428. package/dist/cli/commands/test/flakiness.d.ts +0 -32
  429. package/dist/cli/commands/test/flakiness.d.ts.map +0 -1
  430. package/dist/cli/commands/test/flakiness.js +0 -121
  431. package/dist/cli/commands/test/flakiness.js.map +0 -1
  432. package/dist/cli/commands/test/index.d.ts +0 -17
  433. package/dist/cli/commands/test/index.d.ts.map +0 -1
  434. package/dist/cli/commands/test/index.js +0 -45
  435. package/dist/cli/commands/test/index.js.map +0 -1
  436. package/dist/cli/commands/test/mutate.d.ts +0 -29
  437. package/dist/cli/commands/test/mutate.d.ts.map +0 -1
  438. package/dist/cli/commands/test/mutate.js +0 -163
  439. package/dist/cli/commands/test/mutate.js.map +0 -1
  440. package/dist/cli/commands/test/parallel.d.ts +0 -3
  441. package/dist/cli/commands/test/parallel.d.ts.map +0 -1
  442. package/dist/cli/commands/test/parallel.js +0 -117
  443. package/dist/cli/commands/test/parallel.js.map +0 -1
  444. package/dist/cli/commands/test/profile.d.ts +0 -3
  445. package/dist/cli/commands/test/profile.d.ts.map +0 -1
  446. package/dist/cli/commands/test/profile.js +0 -156
  447. package/dist/cli/commands/test/profile.js.map +0 -1
  448. package/dist/cli/commands/test/queue.d.ts +0 -3
  449. package/dist/cli/commands/test/queue.d.ts.map +0 -1
  450. package/dist/cli/commands/test/queue.js +0 -140
  451. package/dist/cli/commands/test/queue.js.map +0 -1
  452. package/dist/cli/commands/test/retry.d.ts +0 -3
  453. package/dist/cli/commands/test/retry.d.ts.map +0 -1
  454. package/dist/cli/commands/test/retry.js +0 -105
  455. package/dist/cli/commands/test/retry.js.map +0 -1
  456. package/dist/cli/commands/test/snapshot.d.ts +0 -3
  457. package/dist/cli/commands/test/snapshot.d.ts.map +0 -1
  458. package/dist/cli/commands/test/snapshot.js +0 -176
  459. package/dist/cli/commands/test/snapshot.js.map +0 -1
  460. package/dist/cli/commands/test/trace.d.ts +0 -3
  461. package/dist/cli/commands/test/trace.d.ts.map +0 -1
  462. package/dist/cli/commands/test/trace.js +0 -137
  463. package/dist/cli/commands/test/trace.js.map +0 -1
  464. package/dist/cli/commands/test/watch.d.ts +0 -3
  465. package/dist/cli/commands/test/watch.d.ts.map +0 -1
  466. package/dist/cli/commands/test/watch.js +0 -130
  467. package/dist/cli/commands/test/watch.js.map +0 -1
  468. package/dist/cli/index-spec.d.ts +0 -3
  469. package/dist/cli/index-spec.d.ts.map +0 -1
  470. package/dist/cli/index-spec.js +0 -154
  471. package/dist/cli/index-spec.js.map +0 -1
  472. package/dist/cli/index-working.d.ts +0 -7
  473. package/dist/cli/index-working.d.ts.map +0 -1
  474. package/dist/cli/index-working.js +0 -617
  475. package/dist/cli/index-working.js.map +0 -1
  476. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +0 -83
  477. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +0 -1
  478. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +0 -130
  479. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +0 -1
  480. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +0 -58
  481. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +0 -1
  482. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +0 -84
  483. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +0 -1
  484. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +0 -54
  485. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +0 -1
  486. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +0 -73
  487. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +0 -1
  488. package/dist/mcp/handlers/integration/contract-validate.d.ts +0 -10
  489. package/dist/mcp/handlers/integration/contract-validate.d.ts.map +0 -1
  490. package/dist/mcp/handlers/integration/contract-validate.js +0 -348
  491. package/dist/mcp/handlers/integration/contract-validate.js.map +0 -1
  492. package/dist/reporting/ResultAggregator.d.ts +0 -107
  493. package/dist/reporting/ResultAggregator.d.ts.map +0 -1
  494. package/dist/reporting/ResultAggregator.js +0 -435
  495. package/dist/reporting/ResultAggregator.js.map +0 -1
  496. package/dist/reporting/index.d.ts +0 -48
  497. package/dist/reporting/index.d.ts.map +0 -1
  498. package/dist/reporting/index.js +0 -154
  499. package/dist/reporting/index.js.map +0 -1
  500. package/dist/reporting/reporters/ControlLoopReporter.d.ts +0 -128
  501. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +0 -1
  502. package/dist/reporting/reporters/ControlLoopReporter.js +0 -417
  503. package/dist/reporting/reporters/ControlLoopReporter.js.map +0 -1
  504. package/dist/reporting/reporters/HumanReadableReporter.d.ts +0 -140
  505. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +0 -1
  506. package/dist/reporting/reporters/HumanReadableReporter.js +0 -524
  507. package/dist/reporting/reporters/HumanReadableReporter.js.map +0 -1
  508. package/dist/reporting/reporters/JSONReporter.d.ts +0 -251
  509. package/dist/reporting/reporters/JSONReporter.d.ts.map +0 -1
  510. package/dist/reporting/reporters/JSONReporter.js +0 -325
  511. package/dist/reporting/reporters/JSONReporter.js.map +0 -1
  512. package/dist/reporting/reporters/index.d.ts +0 -14
  513. package/dist/reporting/reporters/index.d.ts.map +0 -1
  514. package/dist/reporting/reporters/index.js +0 -19
  515. package/dist/reporting/reporters/index.js.map +0 -1
  516. package/dist/reporting/types.d.ts +0 -427
  517. package/dist/reporting/types.d.ts.map +0 -1
  518. package/dist/reporting/types.js +0 -12
  519. package/dist/reporting/types.js.map +0 -1
@@ -0,0 +1,576 @@
1
+ "use strict";
2
+ /**
3
+ * Key Manager - Secure Key Storage with Encryption at Rest
4
+ *
5
+ * Provides secure storage for Ed25519 identity keys using IndexedDB.
6
+ * All private keys are encrypted with AES-GCM before storage.
7
+ *
8
+ * Features:
9
+ * - Secure key storage in IndexedDB
10
+ * - Key rotation with proof of ownership
11
+ * - Key revocation mechanism
12
+ * - Export/import functionality
13
+ * - Auto-lock timeout
14
+ *
15
+ * @module edge/p2p/crypto/KeyManager
16
+ * @version 1.0.0
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.KeyManager = void 0;
20
+ const types_1 = require("./types");
21
+ const Identity_1 = require("./Identity");
22
+ /**
23
+ * Default key storage configuration
24
+ */
25
+ const DEFAULT_CONFIG = {
26
+ dbName: 'agentic-qe-keystore',
27
+ storeName: 'identities',
28
+ autoLockTimeout: 0, // Disabled by default
29
+ };
30
+ /**
31
+ * KeyManager - Secure storage and management of cryptographic identities
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const keyManager = new KeyManager();
36
+ * await keyManager.initialize();
37
+ *
38
+ * // Store identity
39
+ * const identity = await IdentityManager.create({ password: 'secret' });
40
+ * await keyManager.store(identity);
41
+ *
42
+ * // Retrieve and unlock
43
+ * const stored = await keyManager.get(identity.agentId);
44
+ * const keyPair = await keyManager.unlock(identity.agentId, 'secret');
45
+ * ```
46
+ */
47
+ class KeyManager {
48
+ constructor(config = {}) {
49
+ this.db = null;
50
+ this.initialized = false;
51
+ this.unlockedKeys = new Map();
52
+ this.lockTimers = new Map();
53
+ this.config = { ...DEFAULT_CONFIG, ...config };
54
+ }
55
+ /**
56
+ * Initialize the key storage
57
+ */
58
+ async initialize() {
59
+ if (this.initialized && this.db) {
60
+ return;
61
+ }
62
+ if (!this.isAvailable()) {
63
+ throw new types_1.CryptoError('IndexedDB is not available', types_1.CryptoErrorCode.STORAGE_ERROR);
64
+ }
65
+ return new Promise((resolve, reject) => {
66
+ const request = indexedDB.open(this.config.dbName, 1);
67
+ request.onerror = () => {
68
+ reject(new types_1.CryptoError(`Failed to open key storage: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
69
+ };
70
+ request.onsuccess = () => {
71
+ this.db = request.result;
72
+ this.initialized = true;
73
+ this.db.onerror = (event) => {
74
+ console.error('[KeyManager] Database error:', event);
75
+ };
76
+ resolve();
77
+ };
78
+ request.onupgradeneeded = (event) => {
79
+ const db = event.target.result;
80
+ this.createObjectStores(db);
81
+ };
82
+ });
83
+ }
84
+ /**
85
+ * Create object stores for identity storage
86
+ */
87
+ createObjectStores(db) {
88
+ // Main identity store
89
+ if (!db.objectStoreNames.contains(this.config.storeName)) {
90
+ const store = db.createObjectStore(this.config.storeName, {
91
+ keyPath: 'agentId',
92
+ });
93
+ // Indexes for querying
94
+ store.createIndex('publicKey', 'publicKey', { unique: true });
95
+ store.createIndex('createdAt', 'createdAt', { unique: false });
96
+ store.createIndex('revoked', 'revoked', { unique: false });
97
+ }
98
+ // Key rotation audit log
99
+ if (!db.objectStoreNames.contains('rotation-log')) {
100
+ const rotationStore = db.createObjectStore('rotation-log', {
101
+ keyPath: 'id',
102
+ autoIncrement: true,
103
+ });
104
+ rotationStore.createIndex('agentId', 'agentId', { unique: false });
105
+ rotationStore.createIndex('rotatedAt', 'rotatedAt', { unique: false });
106
+ }
107
+ }
108
+ /**
109
+ * Store a new identity
110
+ *
111
+ * @param identity - The stored identity to persist
112
+ */
113
+ async store(identity) {
114
+ this.ensureInitialized();
115
+ // Check if identity already exists
116
+ const existing = await this.get(identity.agentId);
117
+ if (existing) {
118
+ throw new types_1.CryptoError(`Identity ${identity.agentId} already exists`, types_1.CryptoErrorCode.STORAGE_ERROR);
119
+ }
120
+ return new Promise((resolve, reject) => {
121
+ const transaction = this.db.transaction(this.config.storeName, 'readwrite');
122
+ const store = transaction.objectStore(this.config.storeName);
123
+ const request = store.add(identity);
124
+ request.onerror = () => {
125
+ reject(new types_1.CryptoError(`Failed to store identity: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
126
+ };
127
+ request.onsuccess = () => {
128
+ resolve();
129
+ };
130
+ });
131
+ }
132
+ /**
133
+ * Get a stored identity by agent ID
134
+ *
135
+ * @param agentId - The agent ID to look up
136
+ * @returns StoredIdentity or null if not found
137
+ */
138
+ async get(agentId) {
139
+ this.ensureInitialized();
140
+ return new Promise((resolve, reject) => {
141
+ const transaction = this.db.transaction(this.config.storeName, 'readonly');
142
+ const store = transaction.objectStore(this.config.storeName);
143
+ const request = store.get(agentId);
144
+ request.onerror = () => {
145
+ reject(new types_1.CryptoError(`Failed to get identity: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
146
+ };
147
+ request.onsuccess = () => {
148
+ resolve(request.result || null);
149
+ };
150
+ });
151
+ }
152
+ /**
153
+ * Get identity by public key
154
+ *
155
+ * @param publicKey - Base64-encoded public key
156
+ * @returns StoredIdentity or null
157
+ */
158
+ async getByPublicKey(publicKey) {
159
+ this.ensureInitialized();
160
+ return new Promise((resolve, reject) => {
161
+ const transaction = this.db.transaction(this.config.storeName, 'readonly');
162
+ const store = transaction.objectStore(this.config.storeName);
163
+ const index = store.index('publicKey');
164
+ const request = index.get(publicKey);
165
+ request.onerror = () => {
166
+ reject(new types_1.CryptoError(`Failed to get identity by public key: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
167
+ };
168
+ request.onsuccess = () => {
169
+ resolve(request.result || null);
170
+ };
171
+ });
172
+ }
173
+ /**
174
+ * List all stored identities
175
+ *
176
+ * @param includeRevoked - Whether to include revoked identities
177
+ * @returns Array of stored identities
178
+ */
179
+ async list(includeRevoked = false) {
180
+ this.ensureInitialized();
181
+ return new Promise((resolve, reject) => {
182
+ const transaction = this.db.transaction(this.config.storeName, 'readonly');
183
+ const store = transaction.objectStore(this.config.storeName);
184
+ const request = store.getAll();
185
+ request.onerror = () => {
186
+ reject(new types_1.CryptoError(`Failed to list identities: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
187
+ };
188
+ request.onsuccess = () => {
189
+ const identities = request.result;
190
+ if (includeRevoked) {
191
+ resolve(identities);
192
+ }
193
+ else {
194
+ resolve(identities.filter((id) => !id.revoked));
195
+ }
196
+ };
197
+ });
198
+ }
199
+ /**
200
+ * Unlock an identity's private key
201
+ *
202
+ * @param agentId - Agent ID to unlock
203
+ * @param password - Password for decryption
204
+ * @returns Decrypted keypair
205
+ */
206
+ async unlock(agentId, password) {
207
+ const identity = await this.get(agentId);
208
+ if (!identity) {
209
+ throw new types_1.CryptoError(`Identity ${agentId} not found`, types_1.CryptoErrorCode.KEY_NOT_FOUND);
210
+ }
211
+ if (identity.revoked) {
212
+ throw new types_1.CryptoError(`Identity ${agentId} has been revoked`, types_1.CryptoErrorCode.KEY_REVOKED, { revokedAt: identity.revokedAt, reason: identity.revocationReason });
213
+ }
214
+ // Check if already unlocked
215
+ const cached = this.unlockedKeys.get(agentId);
216
+ if (cached) {
217
+ this.resetAutoLock(agentId);
218
+ return cached;
219
+ }
220
+ // Decrypt private key
221
+ const keyPair = await Identity_1.IdentityManager.decryptPrivateKey(identity, password);
222
+ // Cache unlocked key
223
+ this.unlockedKeys.set(agentId, keyPair);
224
+ // Set up auto-lock if configured
225
+ if (this.config.autoLockTimeout > 0) {
226
+ this.setAutoLock(agentId);
227
+ }
228
+ return keyPair;
229
+ }
230
+ /**
231
+ * Lock a previously unlocked identity
232
+ *
233
+ * @param agentId - Agent ID to lock
234
+ */
235
+ lock(agentId) {
236
+ this.unlockedKeys.delete(agentId);
237
+ this.clearAutoLock(agentId);
238
+ }
239
+ /**
240
+ * Lock all unlocked identities
241
+ */
242
+ lockAll() {
243
+ this.unlockedKeys.clear();
244
+ this.lockTimers.forEach((timer) => clearTimeout(timer));
245
+ this.lockTimers.clear();
246
+ }
247
+ /**
248
+ * Check if an identity is currently unlocked
249
+ *
250
+ * @param agentId - Agent ID to check
251
+ * @returns true if unlocked
252
+ */
253
+ isUnlocked(agentId) {
254
+ return this.unlockedKeys.has(agentId);
255
+ }
256
+ /**
257
+ * Get unlocked keypair (throws if locked)
258
+ *
259
+ * @param agentId - Agent ID
260
+ * @returns KeyPair if unlocked
261
+ */
262
+ getUnlocked(agentId) {
263
+ const keyPair = this.unlockedKeys.get(agentId);
264
+ if (!keyPair) {
265
+ throw new types_1.CryptoError(`Identity ${agentId} is locked`, types_1.CryptoErrorCode.KEY_LOCKED);
266
+ }
267
+ this.resetAutoLock(agentId);
268
+ return keyPair;
269
+ }
270
+ /**
271
+ * Rotate keys for an identity
272
+ *
273
+ * @param agentId - Agent ID to rotate
274
+ * @param currentPassword - Current password
275
+ * @param newPassword - New password for encrypted storage
276
+ * @param reason - Optional reason for rotation
277
+ * @returns Updated stored identity
278
+ */
279
+ async rotateKeys(agentId, currentPassword, newPassword, reason) {
280
+ const identity = await this.get(agentId);
281
+ if (!identity) {
282
+ throw new types_1.CryptoError(`Identity ${agentId} not found`, types_1.CryptoErrorCode.KEY_NOT_FOUND);
283
+ }
284
+ if (identity.revoked) {
285
+ throw new types_1.CryptoError(`Cannot rotate keys for revoked identity`, types_1.CryptoErrorCode.KEY_REVOKED);
286
+ }
287
+ // Decrypt current private key to prove ownership
288
+ const oldKeyPair = await Identity_1.IdentityManager.decryptPrivateKey(identity, currentPassword);
289
+ // Generate new keypair
290
+ const newIdentity = await Identity_1.IdentityManager.create({
291
+ password: newPassword,
292
+ displayName: identity.displayName,
293
+ metadata: identity.metadata,
294
+ });
295
+ // Create rotation proof (sign new public key with old private key)
296
+ const rotationProof = await this.createRotationProof(oldKeyPair, newIdentity.publicKey);
297
+ // Log rotation event
298
+ const rotationEvent = {
299
+ agentId,
300
+ previousPublicKey: identity.publicKey,
301
+ newPublicKey: newIdentity.publicKey,
302
+ rotationProof,
303
+ rotatedAt: new Date().toISOString(),
304
+ reason,
305
+ };
306
+ // Update identity with new keys but preserve agent ID and creation time
307
+ const updatedIdentity = {
308
+ ...newIdentity,
309
+ agentId: identity.agentId, // Keep original agent ID
310
+ createdAt: identity.createdAt, // Keep original creation time
311
+ lastRotatedAt: rotationEvent.rotatedAt,
312
+ };
313
+ // Store updated identity and rotation log in transaction
314
+ await this.updateWithRotation(updatedIdentity, rotationEvent);
315
+ // Clear cached unlocked key
316
+ this.lock(agentId);
317
+ return updatedIdentity;
318
+ }
319
+ /**
320
+ * Revoke an identity
321
+ *
322
+ * @param agentId - Agent ID to revoke
323
+ * @param password - Password to prove ownership
324
+ * @param reason - Reason for revocation
325
+ */
326
+ async revoke(agentId, password, reason) {
327
+ const identity = await this.get(agentId);
328
+ if (!identity) {
329
+ throw new types_1.CryptoError(`Identity ${agentId} not found`, types_1.CryptoErrorCode.KEY_NOT_FOUND);
330
+ }
331
+ if (identity.revoked) {
332
+ throw new types_1.CryptoError(`Identity ${agentId} is already revoked`, types_1.CryptoErrorCode.KEY_REVOKED);
333
+ }
334
+ // Verify ownership by decrypting
335
+ await Identity_1.IdentityManager.decryptPrivateKey(identity, password);
336
+ // Mark as revoked
337
+ const revokedIdentity = {
338
+ ...identity,
339
+ revoked: true,
340
+ revokedAt: new Date().toISOString(),
341
+ revocationReason: reason,
342
+ };
343
+ await this.update(revokedIdentity);
344
+ // Lock the key
345
+ this.lock(agentId);
346
+ }
347
+ /**
348
+ * Export identity for backup
349
+ *
350
+ * @param agentId - Agent ID to export
351
+ * @returns Encrypted export
352
+ */
353
+ async export(agentId) {
354
+ const identity = await this.get(agentId);
355
+ if (!identity) {
356
+ throw new types_1.CryptoError(`Identity ${agentId} not found`, types_1.CryptoErrorCode.KEY_NOT_FOUND);
357
+ }
358
+ return Identity_1.IdentityManager.exportIdentity(identity);
359
+ }
360
+ /**
361
+ * Import identity from backup
362
+ *
363
+ * @param exported - Exported identity data
364
+ * @param overwrite - Whether to overwrite existing identity
365
+ */
366
+ async import(exported, overwrite = false) {
367
+ const identity = await Identity_1.IdentityManager.importIdentity(exported);
368
+ const existing = await this.get(identity.agentId);
369
+ if (existing && !overwrite) {
370
+ throw new types_1.CryptoError(`Identity ${identity.agentId} already exists`, types_1.CryptoErrorCode.STORAGE_ERROR);
371
+ }
372
+ if (existing) {
373
+ await this.update(identity);
374
+ }
375
+ else {
376
+ await this.store(identity);
377
+ }
378
+ return identity;
379
+ }
380
+ /**
381
+ * Delete an identity permanently
382
+ *
383
+ * @param agentId - Agent ID to delete
384
+ * @param password - Password to prove ownership
385
+ */
386
+ async delete(agentId, password) {
387
+ const identity = await this.get(agentId);
388
+ if (!identity) {
389
+ throw new types_1.CryptoError(`Identity ${agentId} not found`, types_1.CryptoErrorCode.KEY_NOT_FOUND);
390
+ }
391
+ // Verify ownership
392
+ await Identity_1.IdentityManager.decryptPrivateKey(identity, password);
393
+ // Lock and delete
394
+ this.lock(agentId);
395
+ return new Promise((resolve, reject) => {
396
+ const transaction = this.db.transaction(this.config.storeName, 'readwrite');
397
+ const store = transaction.objectStore(this.config.storeName);
398
+ const request = store.delete(agentId);
399
+ request.onerror = () => {
400
+ reject(new types_1.CryptoError(`Failed to delete identity: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
401
+ };
402
+ request.onsuccess = () => {
403
+ resolve();
404
+ };
405
+ });
406
+ }
407
+ /**
408
+ * Get key rotation history for an identity
409
+ *
410
+ * @param agentId - Agent ID
411
+ * @returns Array of rotation events
412
+ */
413
+ async getRotationHistory(agentId) {
414
+ this.ensureInitialized();
415
+ return new Promise((resolve, reject) => {
416
+ const transaction = this.db.transaction('rotation-log', 'readonly');
417
+ const store = transaction.objectStore('rotation-log');
418
+ const index = store.index('agentId');
419
+ const request = index.getAll(agentId);
420
+ request.onerror = () => {
421
+ reject(new types_1.CryptoError(`Failed to get rotation history: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
422
+ };
423
+ request.onsuccess = () => {
424
+ resolve(request.result || []);
425
+ };
426
+ });
427
+ }
428
+ /**
429
+ * Close the key storage
430
+ */
431
+ async close() {
432
+ this.lockAll();
433
+ if (this.db) {
434
+ this.db.close();
435
+ this.db = null;
436
+ this.initialized = false;
437
+ }
438
+ }
439
+ /**
440
+ * Check if storage is available
441
+ */
442
+ isAvailable() {
443
+ try {
444
+ return typeof indexedDB !== 'undefined' && indexedDB !== null;
445
+ }
446
+ catch {
447
+ return false;
448
+ }
449
+ }
450
+ // ==========================================
451
+ // Private Helper Methods
452
+ // ==========================================
453
+ /**
454
+ * Ensure database is initialized
455
+ */
456
+ ensureInitialized() {
457
+ if (!this.initialized || !this.db) {
458
+ throw new types_1.CryptoError('KeyManager not initialized. Call initialize() first.', types_1.CryptoErrorCode.STORAGE_ERROR);
459
+ }
460
+ }
461
+ /**
462
+ * Update an existing identity
463
+ */
464
+ async update(identity) {
465
+ return new Promise((resolve, reject) => {
466
+ const transaction = this.db.transaction(this.config.storeName, 'readwrite');
467
+ const store = transaction.objectStore(this.config.storeName);
468
+ const request = store.put(identity);
469
+ request.onerror = () => {
470
+ reject(new types_1.CryptoError(`Failed to update identity: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
471
+ };
472
+ request.onsuccess = () => {
473
+ resolve();
474
+ };
475
+ });
476
+ }
477
+ /**
478
+ * Update identity with rotation log in single transaction
479
+ */
480
+ async updateWithRotation(identity, rotationEvent) {
481
+ return new Promise((resolve, reject) => {
482
+ const transaction = this.db.transaction([this.config.storeName, 'rotation-log'], 'readwrite');
483
+ const identityStore = transaction.objectStore(this.config.storeName);
484
+ const rotationStore = transaction.objectStore('rotation-log');
485
+ const identityRequest = identityStore.put(identity);
486
+ const rotationRequest = rotationStore.add(rotationEvent);
487
+ let completed = 0;
488
+ let hasError = false;
489
+ const checkComplete = () => {
490
+ completed++;
491
+ if (completed === 2 && !hasError) {
492
+ // Both operations complete
493
+ }
494
+ };
495
+ identityRequest.onerror = () => {
496
+ if (!hasError) {
497
+ hasError = true;
498
+ reject(new types_1.CryptoError(`Failed to update identity: ${identityRequest.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
499
+ }
500
+ };
501
+ identityRequest.onsuccess = checkComplete;
502
+ rotationRequest.onerror = () => {
503
+ if (!hasError) {
504
+ hasError = true;
505
+ reject(new types_1.CryptoError(`Failed to log rotation: ${rotationRequest.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
506
+ }
507
+ };
508
+ rotationRequest.onsuccess = checkComplete;
509
+ transaction.oncomplete = () => {
510
+ if (!hasError) {
511
+ resolve();
512
+ }
513
+ };
514
+ });
515
+ }
516
+ /**
517
+ * Create rotation proof by signing new public key with old private key
518
+ */
519
+ async createRotationProof(oldKeyPair, newPublicKey) {
520
+ // Create rotation message
521
+ const message = `rotate:${oldKeyPair.publicKey}:${newPublicKey}:${Date.now()}`;
522
+ const encoder = new TextEncoder();
523
+ const data = encoder.encode(message);
524
+ // Sign with old private key (simplified - in production use proper Ed25519)
525
+ const privateKey = Identity_1.base64Utils.decode(oldKeyPair.privateKey);
526
+ const combined = new Uint8Array(data.length + privateKey.length);
527
+ combined.set(data);
528
+ combined.set(privateKey.slice(0, 32), data.length);
529
+ const signatureBuffer = await crypto.subtle.digest('SHA-256', combined);
530
+ return Identity_1.base64Utils.encode(new Uint8Array(signatureBuffer));
531
+ }
532
+ /**
533
+ * Set auto-lock timer for an identity
534
+ */
535
+ setAutoLock(agentId) {
536
+ this.clearAutoLock(agentId);
537
+ const timer = setTimeout(() => {
538
+ this.lock(agentId);
539
+ }, this.config.autoLockTimeout);
540
+ this.lockTimers.set(agentId, timer);
541
+ }
542
+ /**
543
+ * Clear auto-lock timer
544
+ */
545
+ clearAutoLock(agentId) {
546
+ const timer = this.lockTimers.get(agentId);
547
+ if (timer) {
548
+ clearTimeout(timer);
549
+ this.lockTimers.delete(agentId);
550
+ }
551
+ }
552
+ /**
553
+ * Reset auto-lock timer (on activity)
554
+ */
555
+ resetAutoLock(agentId) {
556
+ if (this.config.autoLockTimeout > 0 && this.unlockedKeys.has(agentId)) {
557
+ this.setAutoLock(agentId);
558
+ }
559
+ }
560
+ /**
561
+ * Delete all data (for testing)
562
+ */
563
+ static async deleteDatabase(dbName = DEFAULT_CONFIG.dbName) {
564
+ return new Promise((resolve, reject) => {
565
+ const request = indexedDB.deleteDatabase(dbName);
566
+ request.onerror = () => {
567
+ reject(new types_1.CryptoError(`Failed to delete database: ${request.error?.message}`, types_1.CryptoErrorCode.STORAGE_ERROR));
568
+ };
569
+ request.onsuccess = () => {
570
+ resolve();
571
+ };
572
+ });
573
+ }
574
+ }
575
+ exports.KeyManager = KeyManager;
576
+ //# sourceMappingURL=KeyManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyManager.js","sourceRoot":"","sources":["../../../../src/edge/p2p/crypto/KeyManager.ts"],"names":[],"mappings":"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"}