@dcyfr/ai 2.1.3 → 3.0.1

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 (468) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +75 -10
  3. package/config/default.json +11 -5
  4. package/config/default.yaml +13 -5
  5. package/dist/.tsbuildinfo +1 -0
  6. package/dist/ai/agents/agent-loader.d.ts.map +1 -1
  7. package/dist/ai/agents/agent-loader.js +1 -0
  8. package/dist/ai/agents/agent-loader.js.map +1 -1
  9. package/dist/ai/agents/agent-registry.d.ts.map +1 -1
  10. package/dist/ai/agents/agent-registry.js.map +1 -1
  11. package/dist/ai/agents/agent-router.d.ts +3 -3
  12. package/dist/ai/agents/agent-router.d.ts.map +1 -1
  13. package/dist/ai/agents/agent-router.js +6 -7
  14. package/dist/ai/agents/agent-router.js.map +1 -1
  15. package/dist/ai/config/schema.js +3 -3
  16. package/dist/ai/config/schema.js.map +1 -1
  17. package/dist/ai/core/provider-registry.d.ts.map +1 -1
  18. package/dist/ai/core/provider-registry.js +47 -16
  19. package/dist/ai/core/provider-registry.js.map +1 -1
  20. package/dist/ai/core/telemetry-engine.d.ts.map +1 -1
  21. package/dist/ai/core/telemetry-engine.js +5 -3
  22. package/dist/ai/core/telemetry-engine.js.map +1 -1
  23. package/dist/ai/delegation/capability-bootstrap.js +1 -1
  24. package/dist/ai/delegation/capability-bootstrap.js.map +1 -1
  25. package/dist/ai/delegation/contract-manager.d.ts +54 -5
  26. package/dist/ai/delegation/contract-manager.d.ts.map +1 -1
  27. package/dist/ai/delegation/contract-manager.js +122 -7
  28. package/dist/ai/delegation/contract-manager.js.map +1 -1
  29. package/dist/ai/delegation/feature-flags.d.ts +1 -1
  30. package/dist/ai/delegation/feature-flags.d.ts.map +1 -1
  31. package/dist/ai/delegation/feature-flags.js +3 -1
  32. package/dist/ai/delegation/feature-flags.js.map +1 -1
  33. package/dist/ai/delegation/index.d.ts +1 -0
  34. package/dist/ai/delegation/index.d.ts.map +1 -1
  35. package/dist/ai/delegation/index.js +2 -0
  36. package/dist/ai/delegation/index.js.map +1 -1
  37. package/dist/ai/delegation/monitoring.d.ts.map +1 -1
  38. package/dist/ai/delegation/monitoring.js +1 -0
  39. package/dist/ai/delegation/monitoring.js.map +1 -1
  40. package/dist/ai/delegation/session-manager.d.ts +16 -1
  41. package/dist/ai/delegation/session-manager.d.ts.map +1 -1
  42. package/dist/ai/delegation/session-manager.js +10 -1
  43. package/dist/ai/delegation/session-manager.js.map +1 -1
  44. package/dist/ai/delegation/session-queue.d.ts.map +1 -1
  45. package/dist/ai/delegation/session-queue.js.map +1 -1
  46. package/dist/ai/examples/integration-demo.d.ts.map +1 -1
  47. package/dist/ai/examples/integration-demo.js +1 -0
  48. package/dist/ai/examples/integration-demo.js.map +1 -1
  49. package/dist/ai/index.d.ts +7 -0
  50. package/dist/ai/index.d.ts.map +1 -1
  51. package/dist/ai/index.js +8 -0
  52. package/dist/ai/index.js.map +1 -1
  53. package/dist/ai/mcp/mcp-registry.d.ts.map +1 -1
  54. package/dist/ai/mcp/mcp-registry.js +1 -1
  55. package/dist/ai/mcp/mcp-registry.js.map +1 -1
  56. package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -1
  57. package/dist/ai/mcp/servers/analytics/index.js +1 -0
  58. package/dist/ai/mcp/servers/analytics/index.js.map +1 -1
  59. package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -1
  60. package/dist/ai/mcp/servers/delegation-monitor/index.js +27 -27
  61. package/dist/ai/mcp/servers/delegation-monitor/index.js.map +1 -1
  62. package/dist/ai/mcp/servers/design-tokens/index.js +1 -1
  63. package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -1
  64. package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -1
  65. package/dist/ai/mcp/servers/promptintel/index.js +2 -1
  66. package/dist/ai/mcp/servers/promptintel/index.js.map +1 -1
  67. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -1
  68. package/dist/ai/mcp/servers/shared/rate-limiter.js +1 -0
  69. package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -1
  70. package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -1
  71. package/dist/ai/mcp/servers/shared/redis-client.js +2 -0
  72. package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -1
  73. package/dist/ai/mcp/servers/shared/utils.js +12 -18
  74. package/dist/ai/mcp/servers/shared/utils.js.map +1 -1
  75. package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -1
  76. package/dist/ai/memory/dcyfr-memory.js +11 -1
  77. package/dist/ai/memory/dcyfr-memory.js.map +1 -1
  78. package/dist/ai/memory/file-memory-adapter.d.ts +103 -0
  79. package/dist/ai/memory/file-memory-adapter.d.ts.map +1 -0
  80. package/dist/ai/memory/file-memory-adapter.js +532 -0
  81. package/dist/ai/memory/file-memory-adapter.js.map +1 -0
  82. package/dist/ai/memory/index.d.ts +6 -0
  83. package/dist/ai/memory/index.d.ts.map +1 -1
  84. package/dist/ai/memory/index.js +6 -0
  85. package/dist/ai/memory/index.js.map +1 -1
  86. package/dist/ai/memory/mem0-client.d.ts.map +1 -1
  87. package/dist/ai/memory/mem0-client.js +5 -2
  88. package/dist/ai/memory/mem0-client.js.map +1 -1
  89. package/dist/ai/memory/sqlite-index.d.ts +89 -0
  90. package/dist/ai/memory/sqlite-index.d.ts.map +1 -0
  91. package/dist/ai/memory/sqlite-index.js +295 -0
  92. package/dist/ai/memory/sqlite-index.js.map +1 -0
  93. package/dist/ai/memory/types.d.ts.map +1 -1
  94. package/dist/ai/memory/types.js +1 -0
  95. package/dist/ai/memory/types.js.map +1 -1
  96. package/dist/ai/memory/working-memory-persistence.d.ts +79 -0
  97. package/dist/ai/memory/working-memory-persistence.d.ts.map +1 -0
  98. package/dist/ai/memory/working-memory-persistence.js +220 -0
  99. package/dist/ai/memory/working-memory-persistence.js.map +1 -0
  100. package/dist/ai/permissions/attenuation-engine.d.ts.map +1 -1
  101. package/dist/ai/permissions/attenuation-engine.js.map +1 -1
  102. package/dist/ai/reputation/reputation-engine.d.ts +4 -0
  103. package/dist/ai/reputation/reputation-engine.d.ts.map +1 -1
  104. package/dist/ai/reputation/reputation-engine.js +1 -0
  105. package/dist/ai/reputation/reputation-engine.js.map +1 -1
  106. package/dist/ai/runtime/agent-runtime.d.ts.map +1 -1
  107. package/dist/ai/runtime/agent-runtime.js +9 -5
  108. package/dist/ai/runtime/agent-runtime.js.map +1 -1
  109. package/dist/ai/src/batch-processor.d.ts +6 -6
  110. package/dist/ai/src/batch-processor.d.ts.map +1 -1
  111. package/dist/ai/src/batch-processor.js +11 -4
  112. package/dist/ai/src/batch-processor.js.map +1 -1
  113. package/dist/ai/src/capability-bootstrap.d.ts.map +1 -1
  114. package/dist/ai/src/capability-bootstrap.js +1 -0
  115. package/dist/ai/src/capability-bootstrap.js.map +1 -1
  116. package/dist/ai/src/capability-registry.js +1 -1
  117. package/dist/ai/src/capability-registry.js.map +1 -1
  118. package/dist/ai/src/cli/telemetry-dashboard.d.ts +0 -11
  119. package/dist/ai/src/cli/telemetry-dashboard.d.ts.map +1 -1
  120. package/dist/ai/src/cli/telemetry-dashboard.js +12 -6
  121. package/dist/ai/src/cli/telemetry-dashboard.js.map +1 -1
  122. package/dist/ai/src/compaction/context-compactor.d.ts +149 -0
  123. package/dist/ai/src/compaction/context-compactor.d.ts.map +1 -0
  124. package/dist/ai/src/compaction/context-compactor.js +302 -0
  125. package/dist/ai/src/compaction/context-compactor.js.map +1 -0
  126. package/dist/ai/src/compaction/index.d.ts +11 -0
  127. package/dist/ai/src/compaction/index.d.ts.map +1 -0
  128. package/dist/ai/src/compaction/index.js +11 -0
  129. package/dist/ai/src/compaction/index.js.map +1 -0
  130. package/dist/ai/src/compaction/memory-compaction.d.ts +138 -0
  131. package/dist/ai/src/compaction/memory-compaction.d.ts.map +1 -0
  132. package/dist/ai/src/compaction/memory-compaction.js +630 -0
  133. package/dist/ai/src/compaction/memory-compaction.js.map +1 -0
  134. package/dist/ai/src/container/agent-container-dispatcher.d.ts +154 -0
  135. package/dist/ai/src/container/agent-container-dispatcher.d.ts.map +1 -0
  136. package/dist/ai/src/container/agent-container-dispatcher.js +329 -0
  137. package/dist/ai/src/container/agent-container-dispatcher.js.map +1 -0
  138. package/dist/ai/src/container/backend-factory.d.ts +89 -0
  139. package/dist/ai/src/container/backend-factory.d.ts.map +1 -0
  140. package/dist/ai/src/container/backend-factory.js +169 -0
  141. package/dist/ai/src/container/backend-factory.js.map +1 -0
  142. package/dist/ai/src/container/index.d.ts +13 -0
  143. package/dist/ai/src/container/index.d.ts.map +1 -0
  144. package/dist/ai/src/container/index.js +13 -0
  145. package/dist/ai/src/container/index.js.map +1 -0
  146. package/dist/ai/src/container/kubernetes-backend.d.ts +23 -0
  147. package/dist/ai/src/container/kubernetes-backend.d.ts.map +1 -0
  148. package/dist/ai/src/container/kubernetes-backend.js +39 -0
  149. package/dist/ai/src/container/kubernetes-backend.js.map +1 -0
  150. package/dist/ai/src/container/local-docker-backend.d.ts +77 -0
  151. package/dist/ai/src/container/local-docker-backend.d.ts.map +1 -0
  152. package/dist/ai/src/container/local-docker-backend.js +362 -0
  153. package/dist/ai/src/container/local-docker-backend.js.map +1 -0
  154. package/dist/ai/src/container/remote-docker-backend.d.ts +35 -0
  155. package/dist/ai/src/container/remote-docker-backend.d.ts.map +1 -0
  156. package/dist/ai/src/container/remote-docker-backend.js +189 -0
  157. package/dist/ai/src/container/remote-docker-backend.js.map +1 -0
  158. package/dist/ai/src/container/types.d.ts +270 -0
  159. package/dist/ai/src/container/types.d.ts.map +1 -0
  160. package/dist/ai/src/container/types.js +86 -0
  161. package/dist/ai/src/container/types.js.map +1 -0
  162. package/dist/ai/src/delegation/feature-flags.d.ts.map +1 -1
  163. package/dist/ai/src/delegation/feature-flags.js +1 -0
  164. package/dist/ai/src/delegation/feature-flags.js.map +1 -1
  165. package/dist/ai/src/delegation/liability-firebreak.d.ts.map +1 -1
  166. package/dist/ai/src/delegation/liability-firebreak.js +1 -0
  167. package/dist/ai/src/delegation/liability-firebreak.js.map +1 -1
  168. package/dist/ai/src/delegation/security-threat-model.d.ts.map +1 -1
  169. package/dist/ai/src/delegation/security-threat-model.js +1 -1
  170. package/dist/ai/src/delegation/security-threat-model.js.map +1 -1
  171. package/dist/ai/src/delegation-capability-integration.d.ts +1 -1
  172. package/dist/ai/src/delegation-capability-integration.d.ts.map +1 -1
  173. package/dist/ai/src/delegation-capability-integration.js +2 -7
  174. package/dist/ai/src/delegation-capability-integration.js.map +1 -1
  175. package/dist/ai/src/end-to-end-workflow-orchestrator.d.ts.map +1 -1
  176. package/dist/ai/src/end-to-end-workflow-orchestrator.js +2 -1
  177. package/dist/ai/src/end-to-end-workflow-orchestrator.js.map +1 -1
  178. package/dist/ai/src/enhanced-capability-detection.d.ts +1 -1
  179. package/dist/ai/src/enhanced-capability-detection.d.ts.map +1 -1
  180. package/dist/ai/src/enhanced-capability-detection.js +1 -1
  181. package/dist/ai/src/enhanced-capability-detection.js.map +1 -1
  182. package/dist/ai/src/gateway/index.d.ts +6 -0
  183. package/dist/ai/src/gateway/index.d.ts.map +1 -0
  184. package/dist/ai/src/gateway/index.js +6 -0
  185. package/dist/ai/src/gateway/index.js.map +1 -0
  186. package/dist/ai/src/gateway/message-gateway.d.ts +296 -0
  187. package/dist/ai/src/gateway/message-gateway.d.ts.map +1 -0
  188. package/dist/ai/src/gateway/message-gateway.js +415 -0
  189. package/dist/ai/src/gateway/message-gateway.js.map +1 -0
  190. package/dist/ai/src/intelligent-cache-manager.d.ts.map +1 -1
  191. package/dist/ai/src/intelligent-cache-manager.js +2 -1
  192. package/dist/ai/src/intelligent-cache-manager.js.map +1 -1
  193. package/dist/ai/src/mcp/index.d.ts +10 -0
  194. package/dist/ai/src/mcp/index.d.ts.map +1 -0
  195. package/dist/ai/src/mcp/index.js +10 -0
  196. package/dist/ai/src/mcp/index.js.map +1 -0
  197. package/dist/ai/src/mcp/mcp-tool-bridge.d.ts +186 -0
  198. package/dist/ai/src/mcp/mcp-tool-bridge.d.ts.map +1 -0
  199. package/dist/ai/src/mcp/mcp-tool-bridge.js +292 -0
  200. package/dist/ai/src/mcp/mcp-tool-bridge.js.map +1 -0
  201. package/dist/ai/src/mcp-auto-configuration.d.ts.map +1 -1
  202. package/dist/ai/src/mcp-auto-configuration.js +2 -1
  203. package/dist/ai/src/mcp-auto-configuration.js.map +1 -1
  204. package/dist/ai/src/performance-profiler.d.ts.map +1 -1
  205. package/dist/ai/src/performance-profiler.js +1 -0
  206. package/dist/ai/src/performance-profiler.js.map +1 -1
  207. package/dist/ai/src/plugins/anomaly/anomaly-detector.d.ts +58 -0
  208. package/dist/ai/src/plugins/anomaly/anomaly-detector.d.ts.map +1 -0
  209. package/dist/ai/src/plugins/anomaly/anomaly-detector.js +101 -0
  210. package/dist/ai/src/plugins/anomaly/anomaly-detector.js.map +1 -0
  211. package/dist/ai/src/plugins/anomaly/anomaly-monitor.d.ts +145 -0
  212. package/dist/ai/src/plugins/anomaly/anomaly-monitor.d.ts.map +1 -0
  213. package/dist/ai/src/plugins/anomaly/anomaly-monitor.js +245 -0
  214. package/dist/ai/src/plugins/anomaly/anomaly-monitor.js.map +1 -0
  215. package/dist/ai/src/plugins/anomaly/behavior-baseline.d.ts +79 -0
  216. package/dist/ai/src/plugins/anomaly/behavior-baseline.d.ts.map +1 -0
  217. package/dist/ai/src/plugins/anomaly/behavior-baseline.js +161 -0
  218. package/dist/ai/src/plugins/anomaly/behavior-baseline.js.map +1 -0
  219. package/dist/ai/src/plugins/anomaly/index.d.ts +15 -0
  220. package/dist/ai/src/plugins/anomaly/index.d.ts.map +1 -0
  221. package/dist/ai/src/plugins/anomaly/index.js +12 -0
  222. package/dist/ai/src/plugins/anomaly/index.js.map +1 -0
  223. package/dist/ai/src/plugins/anomaly/types.d.ts +150 -0
  224. package/dist/ai/src/plugins/anomaly/types.d.ts.map +1 -0
  225. package/dist/ai/src/plugins/anomaly/types.js +68 -0
  226. package/dist/ai/src/plugins/anomaly/types.js.map +1 -0
  227. package/dist/ai/src/plugins/certification/certification-manager.d.ts +102 -0
  228. package/dist/ai/src/plugins/certification/certification-manager.d.ts.map +1 -0
  229. package/dist/ai/src/plugins/certification/certification-manager.js +321 -0
  230. package/dist/ai/src/plugins/certification/certification-manager.js.map +1 -0
  231. package/dist/ai/src/plugins/certification/index.d.ts +12 -0
  232. package/dist/ai/src/plugins/certification/index.d.ts.map +1 -0
  233. package/dist/ai/src/plugins/certification/index.js +10 -0
  234. package/dist/ai/src/plugins/certification/index.js.map +1 -0
  235. package/dist/ai/src/plugins/certification/types.d.ts +128 -0
  236. package/dist/ai/src/plugins/certification/types.d.ts.map +1 -0
  237. package/dist/ai/src/plugins/certification/types.js +201 -0
  238. package/dist/ai/src/plugins/certification/types.js.map +1 -0
  239. package/dist/ai/src/plugins/escalation/escalation-trigger.d.ts +155 -0
  240. package/dist/ai/src/plugins/escalation/escalation-trigger.d.ts.map +1 -0
  241. package/dist/ai/src/plugins/escalation/escalation-trigger.js +183 -0
  242. package/dist/ai/src/plugins/escalation/escalation-trigger.js.map +1 -0
  243. package/dist/ai/src/plugins/escalation/index.d.ts +11 -0
  244. package/dist/ai/src/plugins/escalation/index.d.ts.map +1 -0
  245. package/dist/ai/src/plugins/escalation/index.js +10 -0
  246. package/dist/ai/src/plugins/escalation/index.js.map +1 -0
  247. package/dist/ai/src/plugins/incidents/incident-response-manager.d.ts +165 -0
  248. package/dist/ai/src/plugins/incidents/incident-response-manager.d.ts.map +1 -0
  249. package/dist/ai/src/plugins/incidents/incident-response-manager.js +462 -0
  250. package/dist/ai/src/plugins/incidents/incident-response-manager.js.map +1 -0
  251. package/dist/ai/src/plugins/incidents/index.d.ts +8 -0
  252. package/dist/ai/src/plugins/incidents/index.d.ts.map +1 -0
  253. package/dist/ai/src/plugins/incidents/index.js +7 -0
  254. package/dist/ai/src/plugins/incidents/index.js.map +1 -0
  255. package/dist/ai/src/plugins/incidents/types.d.ts +183 -0
  256. package/dist/ai/src/plugins/incidents/types.d.ts.map +1 -0
  257. package/dist/ai/src/plugins/incidents/types.js +55 -0
  258. package/dist/ai/src/plugins/incidents/types.js.map +1 -0
  259. package/dist/ai/src/plugins/permissions/index.d.ts +17 -0
  260. package/dist/ai/src/plugins/permissions/index.d.ts.map +1 -0
  261. package/dist/ai/src/plugins/permissions/index.js +14 -0
  262. package/dist/ai/src/plugins/permissions/index.js.map +1 -0
  263. package/dist/ai/src/plugins/permissions/permission-attenuator.d.ts +29 -0
  264. package/dist/ai/src/plugins/permissions/permission-attenuator.d.ts.map +1 -0
  265. package/dist/ai/src/plugins/permissions/permission-attenuator.js +190 -0
  266. package/dist/ai/src/plugins/permissions/permission-attenuator.js.map +1 -0
  267. package/dist/ai/src/plugins/permissions/permission-audit-logger.d.ts +72 -0
  268. package/dist/ai/src/plugins/permissions/permission-audit-logger.d.ts.map +1 -0
  269. package/dist/ai/src/plugins/permissions/permission-audit-logger.js +176 -0
  270. package/dist/ai/src/plugins/permissions/permission-audit-logger.js.map +1 -0
  271. package/dist/ai/src/plugins/permissions/permission-enforcer.d.ts +99 -0
  272. package/dist/ai/src/plugins/permissions/permission-enforcer.d.ts.map +1 -0
  273. package/dist/ai/src/plugins/permissions/permission-enforcer.js +151 -0
  274. package/dist/ai/src/plugins/permissions/permission-enforcer.js.map +1 -0
  275. package/dist/ai/src/plugins/permissions/plugin-permission-validator.d.ts +39 -0
  276. package/dist/ai/src/plugins/permissions/plugin-permission-validator.d.ts.map +1 -0
  277. package/dist/ai/src/plugins/permissions/plugin-permission-validator.js +296 -0
  278. package/dist/ai/src/plugins/permissions/plugin-permission-validator.js.map +1 -0
  279. package/dist/ai/src/plugins/permissions/types.d.ts +116 -0
  280. package/dist/ai/src/plugins/permissions/types.d.ts.map +1 -0
  281. package/dist/ai/src/plugins/permissions/types.js +36 -0
  282. package/dist/ai/src/plugins/permissions/types.js.map +1 -0
  283. package/dist/ai/src/plugins/reputation/index.d.ts +9 -0
  284. package/dist/ai/src/plugins/reputation/index.d.ts.map +1 -0
  285. package/dist/ai/src/plugins/reputation/index.js +8 -0
  286. package/dist/ai/src/plugins/reputation/index.js.map +1 -0
  287. package/dist/ai/src/plugins/reputation/plugin-reputation-db.d.ts +29 -0
  288. package/dist/ai/src/plugins/reputation/plugin-reputation-db.d.ts.map +1 -0
  289. package/dist/ai/src/plugins/reputation/plugin-reputation-db.js +120 -0
  290. package/dist/ai/src/plugins/reputation/plugin-reputation-db.js.map +1 -0
  291. package/dist/ai/src/plugins/reputation/plugin-reputation-engine.d.ts +115 -0
  292. package/dist/ai/src/plugins/reputation/plugin-reputation-engine.d.ts.map +1 -0
  293. package/dist/ai/src/plugins/reputation/plugin-reputation-engine.js +528 -0
  294. package/dist/ai/src/plugins/reputation/plugin-reputation-engine.js.map +1 -0
  295. package/dist/ai/src/plugins/reputation/types.d.ts +149 -0
  296. package/dist/ai/src/plugins/reputation/types.d.ts.map +1 -0
  297. package/dist/ai/src/plugins/reputation/types.js +14 -0
  298. package/dist/ai/src/plugins/reputation/types.js.map +1 -0
  299. package/dist/ai/src/plugins/reviews/index.d.ts +11 -0
  300. package/dist/ai/src/plugins/reviews/index.d.ts.map +1 -0
  301. package/dist/ai/src/plugins/reviews/index.js +10 -0
  302. package/dist/ai/src/plugins/reviews/index.js.map +1 -0
  303. package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.d.ts +116 -0
  304. package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.d.ts.map +1 -0
  305. package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.js +282 -0
  306. package/dist/ai/src/plugins/reviews/plugin-rating-aggregator.js.map +1 -0
  307. package/dist/ai/src/plugins/reviews/types.d.ts +113 -0
  308. package/dist/ai/src/plugins/reviews/types.d.ts.map +1 -0
  309. package/dist/ai/src/plugins/reviews/types.js +55 -0
  310. package/dist/ai/src/plugins/reviews/types.js.map +1 -0
  311. package/dist/ai/src/plugins/runtime/docker-plugin-runner.d.ts +77 -0
  312. package/dist/ai/src/plugins/runtime/docker-plugin-runner.d.ts.map +1 -0
  313. package/dist/ai/src/plugins/runtime/docker-plugin-runner.js +248 -0
  314. package/dist/ai/src/plugins/runtime/docker-plugin-runner.js.map +1 -0
  315. package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.d.ts +99 -0
  316. package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.d.ts.map +1 -0
  317. package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.js +158 -0
  318. package/dist/ai/src/plugins/runtime/gvisor-plugin-runner.js.map +1 -0
  319. package/dist/ai/src/plugins/runtime/index.d.ts +13 -0
  320. package/dist/ai/src/plugins/runtime/index.d.ts.map +1 -0
  321. package/dist/ai/src/plugins/runtime/index.js +11 -0
  322. package/dist/ai/src/plugins/runtime/index.js.map +1 -0
  323. package/dist/ai/src/plugins/runtime/types.d.ts +143 -0
  324. package/dist/ai/src/plugins/runtime/types.d.ts.map +1 -0
  325. package/dist/ai/src/plugins/runtime/types.js +19 -0
  326. package/dist/ai/src/plugins/runtime/types.js.map +1 -0
  327. package/dist/ai/src/plugins/runtime/wasm-plugin-runner.d.ts +104 -0
  328. package/dist/ai/src/plugins/runtime/wasm-plugin-runner.d.ts.map +1 -0
  329. package/dist/ai/src/plugins/runtime/wasm-plugin-runner.js +307 -0
  330. package/dist/ai/src/plugins/runtime/wasm-plugin-runner.js.map +1 -0
  331. package/dist/ai/src/plugins/security/index.d.ts +24 -0
  332. package/dist/ai/src/plugins/security/index.d.ts.map +1 -0
  333. package/dist/ai/src/plugins/security/index.js +23 -0
  334. package/dist/ai/src/plugins/security/index.js.map +1 -0
  335. package/dist/ai/src/plugins/security/license-checker.d.ts +26 -0
  336. package/dist/ai/src/plugins/security/license-checker.d.ts.map +1 -0
  337. package/dist/ai/src/plugins/security/license-checker.js +137 -0
  338. package/dist/ai/src/plugins/security/license-checker.js.map +1 -0
  339. package/dist/ai/src/plugins/security/malware-scanner.d.ts +19 -0
  340. package/dist/ai/src/plugins/security/malware-scanner.d.ts.map +1 -0
  341. package/dist/ai/src/plugins/security/malware-scanner.js +121 -0
  342. package/dist/ai/src/plugins/security/malware-scanner.js.map +1 -0
  343. package/dist/ai/src/plugins/security/plugin-security-scanner.d.ts +36 -0
  344. package/dist/ai/src/plugins/security/plugin-security-scanner.d.ts.map +1 -0
  345. package/dist/ai/src/plugins/security/plugin-security-scanner.js +160 -0
  346. package/dist/ai/src/plugins/security/plugin-security-scanner.js.map +1 -0
  347. package/dist/ai/src/plugins/security/sbom-generator.d.ts +23 -0
  348. package/dist/ai/src/plugins/security/sbom-generator.d.ts.map +1 -0
  349. package/dist/ai/src/plugins/security/sbom-generator.js +115 -0
  350. package/dist/ai/src/plugins/security/sbom-generator.js.map +1 -0
  351. package/dist/ai/src/plugins/security/secret-detector.d.ts +19 -0
  352. package/dist/ai/src/plugins/security/secret-detector.d.ts.map +1 -0
  353. package/dist/ai/src/plugins/security/secret-detector.js +204 -0
  354. package/dist/ai/src/plugins/security/secret-detector.js.map +1 -0
  355. package/dist/ai/src/plugins/security/signature-verifier.d.ts +21 -0
  356. package/dist/ai/src/plugins/security/signature-verifier.d.ts.map +1 -0
  357. package/dist/ai/src/plugins/security/signature-verifier.js +75 -0
  358. package/dist/ai/src/plugins/security/signature-verifier.js.map +1 -0
  359. package/dist/ai/src/plugins/security/sonarcloud-client.d.ts +20 -0
  360. package/dist/ai/src/plugins/security/sonarcloud-client.d.ts.map +1 -0
  361. package/dist/ai/src/plugins/security/sonarcloud-client.js +106 -0
  362. package/dist/ai/src/plugins/security/sonarcloud-client.js.map +1 -0
  363. package/dist/ai/src/plugins/security/trust-score.d.ts +58 -0
  364. package/dist/ai/src/plugins/security/trust-score.d.ts.map +1 -0
  365. package/dist/ai/src/plugins/security/trust-score.js +173 -0
  366. package/dist/ai/src/plugins/security/trust-score.js.map +1 -0
  367. package/dist/ai/src/plugins/security/types.d.ts +220 -0
  368. package/dist/ai/src/plugins/security/types.d.ts.map +1 -0
  369. package/dist/ai/src/plugins/security/types.js +12 -0
  370. package/dist/ai/src/plugins/security/types.js.map +1 -0
  371. package/dist/ai/src/plugins/security/vulnerability-scanner.d.ts +22 -0
  372. package/dist/ai/src/plugins/security/vulnerability-scanner.d.ts.map +1 -0
  373. package/dist/ai/src/plugins/security/vulnerability-scanner.js +109 -0
  374. package/dist/ai/src/plugins/security/vulnerability-scanner.js.map +1 -0
  375. package/dist/ai/src/plugins/tlp/index.d.ts +17 -0
  376. package/dist/ai/src/plugins/tlp/index.d.ts.map +1 -0
  377. package/dist/ai/src/plugins/tlp/index.js +17 -0
  378. package/dist/ai/src/plugins/tlp/index.js.map +1 -0
  379. package/dist/ai/src/plugins/tlp/tlp-classifier.d.ts +55 -0
  380. package/dist/ai/src/plugins/tlp/tlp-classifier.d.ts.map +1 -0
  381. package/dist/ai/src/plugins/tlp/tlp-classifier.js +232 -0
  382. package/dist/ai/src/plugins/tlp/tlp-classifier.js.map +1 -0
  383. package/dist/ai/src/plugins/tlp/tlp-validator.d.ts +97 -0
  384. package/dist/ai/src/plugins/tlp/tlp-validator.d.ts.map +1 -0
  385. package/dist/ai/src/plugins/tlp/tlp-validator.js +120 -0
  386. package/dist/ai/src/plugins/tlp/tlp-validator.js.map +1 -0
  387. package/dist/ai/src/plugins/tlp/types.d.ts +84 -0
  388. package/dist/ai/src/plugins/tlp/types.d.ts.map +1 -0
  389. package/dist/ai/src/plugins/tlp/types.js +20 -0
  390. package/dist/ai/src/plugins/tlp/types.js.map +1 -0
  391. package/dist/ai/src/resource-monitor.d.ts +1 -1
  392. package/dist/ai/src/resource-monitor.d.ts.map +1 -1
  393. package/dist/ai/src/resource-monitor.js +4 -3
  394. package/dist/ai/src/resource-monitor.js.map +1 -1
  395. package/dist/ai/src/runtime/agent-runtime.d.ts +77 -0
  396. package/dist/ai/src/runtime/agent-runtime.d.ts.map +1 -1
  397. package/dist/ai/src/runtime/agent-runtime.js +138 -2
  398. package/dist/ai/src/runtime/agent-runtime.js.map +1 -1
  399. package/dist/ai/src/scheduler/agent-scheduler.d.ts +365 -0
  400. package/dist/ai/src/scheduler/agent-scheduler.d.ts.map +1 -0
  401. package/dist/ai/src/scheduler/agent-scheduler.js +610 -0
  402. package/dist/ai/src/scheduler/agent-scheduler.js.map +1 -0
  403. package/dist/ai/src/scheduler/index.d.ts +6 -0
  404. package/dist/ai/src/scheduler/index.d.ts.map +1 -0
  405. package/dist/ai/src/scheduler/index.js +6 -0
  406. package/dist/ai/src/scheduler/index.js.map +1 -0
  407. package/dist/ai/src/session/index.d.ts +6 -0
  408. package/dist/ai/src/session/index.d.ts.map +1 -0
  409. package/dist/ai/src/session/index.js +6 -0
  410. package/dist/ai/src/session/index.js.map +1 -0
  411. package/dist/ai/src/session/session-manager.d.ts +380 -0
  412. package/dist/ai/src/session/session-manager.d.ts.map +1 -0
  413. package/dist/ai/src/session/session-manager.js +625 -0
  414. package/dist/ai/src/session/session-manager.js.map +1 -0
  415. package/dist/ai/src/skills/index.d.ts +10 -0
  416. package/dist/ai/src/skills/index.d.ts.map +1 -0
  417. package/dist/ai/src/skills/index.js +10 -0
  418. package/dist/ai/src/skills/index.js.map +1 -0
  419. package/dist/ai/src/skills/skill-registry.d.ts +181 -0
  420. package/dist/ai/src/skills/skill-registry.d.ts.map +1 -0
  421. package/dist/ai/src/skills/skill-registry.js +465 -0
  422. package/dist/ai/src/skills/skill-registry.js.map +1 -0
  423. package/dist/ai/src/telemetry/delegation-telemetry.d.ts.map +1 -1
  424. package/dist/ai/src/telemetry/delegation-telemetry.js +1 -0
  425. package/dist/ai/src/telemetry/delegation-telemetry.js.map +1 -1
  426. package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts +1 -1
  427. package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts.map +1 -1
  428. package/dist/ai/src/telemetry/runtime-telemetry-integration.js +3 -2
  429. package/dist/ai/src/telemetry/runtime-telemetry-integration.js.map +1 -1
  430. package/dist/ai/src/telemetry/telemetry-utils.d.ts.map +1 -1
  431. package/dist/ai/src/telemetry/telemetry-utils.js +1 -0
  432. package/dist/ai/src/telemetry/telemetry-utils.js.map +1 -1
  433. package/dist/ai/src/types/agent-capabilities.d.ts.map +1 -1
  434. package/dist/ai/src/types/agent-capabilities.js +1 -0
  435. package/dist/ai/src/types/agent-capabilities.js.map +1 -1
  436. package/dist/ai/src/types/delegation-contracts.d.ts +92 -0
  437. package/dist/ai/src/types/delegation-contracts.d.ts.map +1 -1
  438. package/dist/ai/src/types/delegation-contracts.js.map +1 -1
  439. package/dist/ai/src/validation-pipeline-integration.d.ts.map +1 -1
  440. package/dist/ai/src/validation-pipeline-integration.js +1 -2
  441. package/dist/ai/src/validation-pipeline-integration.js.map +1 -1
  442. package/dist/ai/src/verification/multi-modal-formatters.d.ts +1 -1
  443. package/dist/ai/src/verification/multi-modal-formatters.d.ts.map +1 -1
  444. package/dist/ai/src/verification/multi-modal-formatters.js +3 -2
  445. package/dist/ai/src/verification/multi-modal-formatters.js.map +1 -1
  446. package/dist/ai/src/verification/output-formatter.d.ts +1 -1
  447. package/dist/ai/src/verification/output-formatter.d.ts.map +1 -1
  448. package/dist/ai/src/verification/output-formatter.js +2 -1
  449. package/dist/ai/src/verification/output-formatter.js.map +1 -1
  450. package/dist/ai/src/verification/parser-integration.d.ts.map +1 -1
  451. package/dist/ai/src/verification/parser-integration.js.map +1 -1
  452. package/dist/ai/types/agent-capabilities.d.ts +7 -0
  453. package/dist/ai/types/agent-capabilities.d.ts.map +1 -1
  454. package/dist/ai/types/delegation-contracts.d.ts +75 -0
  455. package/dist/ai/types/delegation-contracts.d.ts.map +1 -1
  456. package/dist/ai/types/index.d.ts +3 -3
  457. package/dist/ai/types/index.d.ts.map +1 -1
  458. package/dist/ai/types/index.js.map +1 -1
  459. package/dist/ai/types/permission-tokens.d.ts +23 -0
  460. package/dist/ai/types/permission-tokens.d.ts.map +1 -1
  461. package/dist/ai/types/permission-tokens.js +65 -1
  462. package/dist/ai/types/permission-tokens.js.map +1 -1
  463. package/dist/ai/validation/validation-framework.d.ts.map +1 -1
  464. package/dist/ai/verification/policy-framework.d.ts +1 -1
  465. package/dist/ai/verification/policy-framework.d.ts.map +1 -1
  466. package/dist/ai/verification/policy-framework.js +4 -4
  467. package/dist/ai/verification/policy-framework.js.map +1 -1
  468. package/package.json +38 -9
@@ -0,0 +1,630 @@
1
+ /**
2
+ * @module compaction/memory-compaction
3
+ * @description Memory compaction utilities for FileMemoryAdapter.
4
+ *
5
+ * Extends context compaction to:
6
+ * 1. Deduplicate entries across file-based and mem0 backends
7
+ * 2. Use hybrid search (BM25 + vector) for dedup when SQLite index available
8
+ * 3. Consolidate conversation files >N days old into monthly summaries
9
+ * 4. Archive contradicted/stale facts instead of deleting
10
+ *
11
+ * @license MIT
12
+ * @copyright DCYFR Labs (https://www.dcyfr.ai)
13
+ */
14
+ import { createHash } from 'node:crypto';
15
+ import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, renameSync } from 'node:fs';
16
+ import { join } from 'node:path';
17
+ /* ------------------------------------------------------------------ */
18
+ /* Constants */
19
+ /* ------------------------------------------------------------------ */
20
+ const FACT_ARCHIVE_FILENAME = 'facts-archived.md';
21
+ const FACTS_FILENAME = 'facts.md';
22
+ const CONVERSATIONS_DIR = 'conversations';
23
+ const SUMMARIES_DIR = 'summaries';
24
+ const CONTRADICTION_SYSTEM_PROMPT = `You are a fact contradiction detector. Given a list of facts, identify pairs that contradict each other.
25
+
26
+ Return JSON:
27
+ {
28
+ "contradictions": [
29
+ {
30
+ "factId1": "id-of-first-fact",
31
+ "factId2": "id-of-second-fact",
32
+ "reason": "brief explanation of contradiction",
33
+ "keepId": "id-of-fact-to-keep (more recent or more accurate)"
34
+ }
35
+ ]
36
+ }
37
+
38
+ Rules:
39
+ - Only report genuine contradictions, not complementary facts
40
+ - Prefer keeping the more recent fact
41
+ - If both are equally valid, keep the one with more detail`;
42
+ const SUMMARY_SYSTEM_PROMPT = `You are a conversation summarizer. Given multiple conversation transcripts from a time period, create a concise monthly summary.
43
+
44
+ Return a Markdown document with:
45
+ 1. Key topics discussed
46
+ 2. Decisions made
47
+ 3. Action items identified
48
+ 4. Notable facts learned
49
+
50
+ Be concise. Target 200-500 words.`;
51
+ /* ------------------------------------------------------------------ */
52
+ /* Helpers */
53
+ /* ------------------------------------------------------------------ */
54
+ function sha256(text) {
55
+ return createHash('sha256').update(text).digest('hex');
56
+ }
57
+ /**
58
+ * Compute BM25-style similarity between two texts.
59
+ * Returns 0-1 where 1 is identical.
60
+ */
61
+ function textSimilarity(a, b) {
62
+ const tokensA = tokenize(a);
63
+ const tokensB = tokenize(b);
64
+ if (tokensA.length === 0 || tokensB.length === 0)
65
+ return 0;
66
+ const setA = new Set(tokensA);
67
+ const setB = new Set(tokensB);
68
+ let intersection = 0;
69
+ for (const t of setA) {
70
+ if (setB.has(t))
71
+ intersection++;
72
+ }
73
+ // Jaccard similarity
74
+ const union = new Set([...tokensA, ...tokensB]).size;
75
+ return union === 0 ? 0 : intersection / union;
76
+ }
77
+ function tokenize(text) {
78
+ return text
79
+ .toLowerCase()
80
+ .replace(/[^\w\s]/g, ' ')
81
+ .split(/\s+/)
82
+ .filter(t => t.length > 1);
83
+ }
84
+ /**
85
+ * Cosine similarity between two vectors
86
+ */
87
+ function cosineSimilarity(a, b) {
88
+ if (a.length !== b.length || a.length === 0)
89
+ return 0;
90
+ let dotProduct = 0;
91
+ let normA = 0;
92
+ let normB = 0;
93
+ for (let i = 0; i < a.length; i++) {
94
+ dotProduct += a[i] * b[i];
95
+ normA += a[i] * a[i];
96
+ normB += b[i] * b[i];
97
+ }
98
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
99
+ return denominator === 0 ? 0 : dotProduct / denominator;
100
+ }
101
+ /**
102
+ * Parse a Markdown memory file into entries.
103
+ */
104
+ function parseMemoryFile(content, source) {
105
+ const entries = [];
106
+ const sections = content.split(/^### /m).filter(s => s.trim());
107
+ for (const section of sections) {
108
+ const lines = section.split('\n');
109
+ const id = lines[0]?.trim() ?? '';
110
+ if (!id)
111
+ continue;
112
+ // Extract metadata
113
+ let owner;
114
+ let timestamp = new Date().toISOString();
115
+ let topic;
116
+ const contentLines = [];
117
+ let inContent = false;
118
+ for (let i = 1; i < lines.length; i++) {
119
+ const line = lines[i];
120
+ if (line.startsWith('- **Owner:**')) {
121
+ const match = /- \*\*Owner:\*\* (.+?) \(/.exec(line);
122
+ if (match)
123
+ owner = match[1];
124
+ }
125
+ else if (line.startsWith('- **Timestamp:**')) {
126
+ const match = /- \*\*Timestamp:\*\* (.+)/.exec(line);
127
+ if (match)
128
+ timestamp = match[1].trim();
129
+ }
130
+ else if (line.startsWith('- **Topic:**')) {
131
+ const match = /- \*\*Topic:\*\* (.+)/.exec(line);
132
+ if (match)
133
+ topic = match[1].trim();
134
+ }
135
+ else if (line === '---') {
136
+ break;
137
+ }
138
+ else if (!line.startsWith('- **') && line.trim() !== '') {
139
+ inContent = true;
140
+ contentLines.push(line);
141
+ }
142
+ else if (inContent) {
143
+ contentLines.push(line);
144
+ }
145
+ }
146
+ const entryContent = contentLines.join('\n').trim();
147
+ if (entryContent) {
148
+ entries.push({
149
+ id,
150
+ content: entryContent,
151
+ source,
152
+ hash: sha256(entryContent),
153
+ timestamp,
154
+ topic,
155
+ owner,
156
+ });
157
+ }
158
+ }
159
+ return entries;
160
+ }
161
+ /**
162
+ * Format a MemoryEntry back to Markdown
163
+ */
164
+ function formatEntry(entry) {
165
+ const lines = [
166
+ `### ${entry.id}`,
167
+ '',
168
+ ];
169
+ if (entry.owner)
170
+ lines.push(`- **Owner:** ${entry.owner} (agent)`);
171
+ lines.push(`- **Timestamp:** ${entry.timestamp}`);
172
+ if (entry.topic)
173
+ lines.push(`- **Topic:** ${entry.topic}`);
174
+ lines.push('', entry.content, '', '---', '');
175
+ return lines.join('\n');
176
+ }
177
+ /**
178
+ * Parse conversation file date from filename.
179
+ * Expected formats: YYYY-MM-DD-session.md, session-{id}.md with date prefix
180
+ */
181
+ function parseFileDate(filename) {
182
+ const dateMatch = /(\d{4}-\d{2}-\d{2})/.exec(filename);
183
+ if (dateMatch) {
184
+ const d = new Date(dateMatch[1]);
185
+ return Number.isNaN(d.getTime()) ? null : d;
186
+ }
187
+ return null;
188
+ }
189
+ /* ------------------------------------------------------------------ */
190
+ /* MemoryCompaction */
191
+ /* ------------------------------------------------------------------ */
192
+ export class MemoryCompaction {
193
+ rootDir;
194
+ agentId;
195
+ dedupThreshold;
196
+ retentionDays;
197
+ llmCall;
198
+ embedFn;
199
+ debug;
200
+ constructor(config) {
201
+ this.rootDir = config.rootDir;
202
+ this.agentId = config.agentId;
203
+ this.dedupThreshold = config.dedupThreshold ?? 0.85;
204
+ this.retentionDays = config.retentionDays ?? 30;
205
+ this.llmCall = config.llmCall;
206
+ this.embedFn = config.embedFn;
207
+ this.debug = config.debug ?? false;
208
+ }
209
+ /* ---- Task 9.1: Cross-backend Deduplication ---------------------- */
210
+ /**
211
+ * Deduplicate memory entries across file and mem0 backends.
212
+ *
213
+ * Algorithm:
214
+ * 1. Collect all entries from file backend
215
+ * 2. Collect all entries from mem0 backend (if provided)
216
+ * 3. Hash-based exact dedup (O(n))
217
+ * 4. Similarity-based fuzzy dedup (O(n²) but typically small n)
218
+ * 5. Keep file-backend entries over mem0 (file is source of truth)
219
+ */
220
+ deduplicateEntries(fileEntries, mem0Entries = []) {
221
+ const allEntries = [...fileEntries, ...mem0Entries];
222
+ const totalBefore = allEntries.length;
223
+ // Phase 1: Exact hash dedup
224
+ const seenHashes = new Map();
225
+ const afterHashDedup = [];
226
+ const duplicatePairs = [];
227
+ for (const entry of allEntries) {
228
+ const existing = seenHashes.get(entry.hash);
229
+ if (existing) {
230
+ // Prefer file over mem0
231
+ const kept = existing.source === 'file' ? existing : entry;
232
+ const removed = existing.source === 'file' ? entry : existing;
233
+ duplicatePairs.push({
234
+ kept: kept.id,
235
+ removed: removed.id,
236
+ similarity: 1.0,
237
+ });
238
+ if (kept !== existing) {
239
+ // Replace in seenHashes
240
+ seenHashes.set(entry.hash, entry);
241
+ const idx = afterHashDedup.indexOf(existing);
242
+ if (idx >= 0)
243
+ afterHashDedup[idx] = entry;
244
+ }
245
+ }
246
+ else {
247
+ seenHashes.set(entry.hash, entry);
248
+ afterHashDedup.push(entry);
249
+ }
250
+ }
251
+ // Phase 2: Fuzzy similarity dedup
252
+ const kept = new Set();
253
+ const removed = new Set();
254
+ for (let i = 0; i < afterHashDedup.length; i++) {
255
+ if (removed.has(i))
256
+ continue;
257
+ kept.add(i);
258
+ for (let j = i + 1; j < afterHashDedup.length; j++) {
259
+ if (removed.has(j))
260
+ continue;
261
+ const similarity = textSimilarity(afterHashDedup[i].content, afterHashDedup[j].content);
262
+ if (similarity >= this.dedupThreshold) {
263
+ // Prefer file over mem0, then prefer more recent
264
+ const entryI = afterHashDedup[i];
265
+ const entryJ = afterHashDedup[j];
266
+ let keepIdx = i;
267
+ let removeIdx = j;
268
+ if (entryI.source === 'mem0' && entryJ.source === 'file') {
269
+ keepIdx = j;
270
+ removeIdx = i;
271
+ }
272
+ else if (entryI.timestamp < entryJ.timestamp && entryI.source === entryJ.source) {
273
+ keepIdx = j;
274
+ removeIdx = i;
275
+ }
276
+ removed.add(removeIdx);
277
+ duplicatePairs.push({
278
+ kept: afterHashDedup[keepIdx].id,
279
+ removed: afterHashDedup[removeIdx].id,
280
+ similarity,
281
+ });
282
+ }
283
+ }
284
+ }
285
+ const dedupedEntries = afterHashDedup.filter((_, i) => !removed.has(i));
286
+ if (this.debug) {
287
+ console.log(`[MemoryCompaction] dedup: ${totalBefore} → ${dedupedEntries.length} (removed ${totalBefore - dedupedEntries.length})`);
288
+ }
289
+ return {
290
+ totalBefore,
291
+ totalAfter: dedupedEntries.length,
292
+ duplicatesRemoved: totalBefore - dedupedEntries.length,
293
+ entries: dedupedEntries,
294
+ duplicatePairs,
295
+ };
296
+ }
297
+ /* ---- Task 9.2: Hybrid Search Dedup ------------------------------ */
298
+ /**
299
+ * Enhanced deduplication using vector embeddings when available.
300
+ * Falls back to BM25-only (textSimilarity) when embeddings unavailable.
301
+ */
302
+ async deduplicateWithHybridSearch(entries) {
303
+ if (!this.embedFn) {
304
+ // Fallback to text-only dedup
305
+ return this.deduplicateEntries(entries);
306
+ }
307
+ const totalBefore = entries.length;
308
+ const duplicatePairs = [];
309
+ // Phase 1: Hash dedup (same as above)
310
+ const seenHashes = new Map();
311
+ const uniqueByHash = [];
312
+ for (const entry of entries) {
313
+ const existingIdx = seenHashes.get(entry.hash);
314
+ if (existingIdx !== undefined) {
315
+ duplicatePairs.push({
316
+ kept: uniqueByHash[existingIdx].id,
317
+ removed: entry.id,
318
+ similarity: 1.0,
319
+ });
320
+ }
321
+ else {
322
+ seenHashes.set(entry.hash, uniqueByHash.length);
323
+ uniqueByHash.push(entry);
324
+ }
325
+ }
326
+ // Phase 2: Compute embeddings
327
+ const embeddings = [];
328
+ for (const entry of uniqueByHash) {
329
+ try {
330
+ const embedding = await this.embedFn(entry.content);
331
+ embeddings.push(embedding);
332
+ }
333
+ catch {
334
+ // If embedding fails, use empty vector (will have 0 cosine similarity)
335
+ embeddings.push([]);
336
+ }
337
+ }
338
+ // Phase 3: Hybrid similarity (BM25 + cosine) dedup
339
+ const removed = new Set();
340
+ for (let i = 0; i < uniqueByHash.length; i++) {
341
+ if (removed.has(i))
342
+ continue;
343
+ for (let j = i + 1; j < uniqueByHash.length; j++) {
344
+ if (removed.has(j))
345
+ continue;
346
+ const bm25Sim = textSimilarity(uniqueByHash[i].content, uniqueByHash[j].content);
347
+ const vectorSim = (embeddings[i].length > 0 && embeddings[j].length > 0)
348
+ ? cosineSimilarity(embeddings[i], embeddings[j])
349
+ : 0;
350
+ // RRF-style combination: weight BM25 at 0.4, vector at 0.6
351
+ const hybridSim = vectorSim > 0
352
+ ? (0.4 * bm25Sim + 0.6 * vectorSim)
353
+ : bm25Sim;
354
+ if (hybridSim >= this.dedupThreshold) {
355
+ // Prefer more recent
356
+ const keepIdx = uniqueByHash[i].timestamp >= uniqueByHash[j].timestamp ? i : j;
357
+ const removeIdx = keepIdx === i ? j : i;
358
+ removed.add(removeIdx);
359
+ duplicatePairs.push({
360
+ kept: uniqueByHash[keepIdx].id,
361
+ removed: uniqueByHash[removeIdx].id,
362
+ similarity: hybridSim,
363
+ });
364
+ }
365
+ }
366
+ }
367
+ const dedupedEntries = uniqueByHash.filter((_, i) => !removed.has(i));
368
+ return {
369
+ totalBefore,
370
+ totalAfter: dedupedEntries.length,
371
+ duplicatesRemoved: totalBefore - dedupedEntries.length,
372
+ entries: dedupedEntries,
373
+ duplicatePairs,
374
+ };
375
+ }
376
+ /* ---- Task 9.3: Conversation Summary Compaction ------------------ */
377
+ /**
378
+ * Consolidate conversation files older than retentionDays into monthly summaries.
379
+ *
380
+ * 1. Scan conversations directory for files older than threshold
381
+ * 2. Group by month
382
+ * 3. Generate summary per month (LLM if available, else concatenate)
383
+ * 4. Write summary to summaries directory
384
+ * 5. Move original files to archive
385
+ */
386
+ async compactConversations() {
387
+ const conversationsDir = join(this.rootDir, this.agentId, CONVERSATIONS_DIR);
388
+ const summariesDir = join(this.rootDir, this.agentId, SUMMARIES_DIR);
389
+ const archiveDir = join(conversationsDir, 'archive');
390
+ // Ensure directories exist
391
+ for (const dir of [conversationsDir, summariesDir, archiveDir]) {
392
+ if (!existsSync(dir)) {
393
+ mkdirSync(dir, { recursive: true });
394
+ }
395
+ }
396
+ const cutoffDate = new Date();
397
+ cutoffDate.setDate(cutoffDate.getDate() - this.retentionDays);
398
+ // Scan for old conversation files
399
+ const files = readdirSync(conversationsDir)
400
+ .filter(f => f.endsWith('.md') && !f.startsWith('.'));
401
+ // Group by month
402
+ const monthGroups = new Map();
403
+ for (const filename of files) {
404
+ const fileDate = parseFileDate(filename);
405
+ if (!fileDate || fileDate >= cutoffDate)
406
+ continue;
407
+ // Use UTC methods — parseFileDate parses "YYYY-MM-DD" as UTC midnight,
408
+ // so we must use getUTCFullYear/getUTCMonth to stay consistent across timezones.
409
+ const monthKey = `${fileDate.getUTCFullYear()}-${String(fileDate.getUTCMonth() + 1).padStart(2, '0')}`;
410
+ const filePath = join(conversationsDir, filename);
411
+ const content = readFileSync(filePath, 'utf-8');
412
+ const group = monthGroups.get(monthKey) ?? [];
413
+ group.push({ filename, content, date: fileDate });
414
+ monthGroups.set(monthKey, group);
415
+ }
416
+ const summaryPaths = [];
417
+ const archivedPaths = [];
418
+ // Generate summaries per month
419
+ for (const [monthKey, group] of monthGroups) {
420
+ // Sort by date
421
+ group.sort((a, b) => a.date.getTime() - b.date.getTime());
422
+ const combinedContent = group
423
+ .map(g => `## ${g.filename}\n\n${g.content}`)
424
+ .join('\n\n---\n\n');
425
+ let summaryContent;
426
+ if (this.llmCall) {
427
+ try {
428
+ summaryContent = await this.llmCall(`Summarize these conversations from ${monthKey}:\n\n${combinedContent.slice(0, 50_000)}`, SUMMARY_SYSTEM_PROMPT);
429
+ }
430
+ catch {
431
+ // Fallback: truncated concatenation
432
+ summaryContent = this._fallbackSummary(monthKey, group);
433
+ }
434
+ }
435
+ else {
436
+ summaryContent = this._fallbackSummary(monthKey, group);
437
+ }
438
+ // Write summary
439
+ const summaryPath = join(summariesDir, `${monthKey}-summary.md`);
440
+ const header = [
441
+ `# Monthly Summary: ${monthKey}`,
442
+ '',
443
+ `Generated: ${new Date().toISOString()}`,
444
+ `Files consolidated: ${group.length}`,
445
+ '',
446
+ '---',
447
+ '',
448
+ ].join('\n');
449
+ writeFileSync(summaryPath, header + summaryContent, 'utf-8');
450
+ summaryPaths.push(summaryPath);
451
+ // Archive originals
452
+ for (const file of group) {
453
+ const srcPath = join(conversationsDir, file.filename);
454
+ const destPath = join(archiveDir, file.filename);
455
+ renameSync(srcPath, destPath);
456
+ archivedPaths.push(destPath);
457
+ }
458
+ if (this.debug) {
459
+ console.log(`[MemoryCompaction] Created summary: ${summaryPath} (${group.length} files)`);
460
+ }
461
+ }
462
+ return {
463
+ filesProcessed: archivedPaths.length,
464
+ summariesCreated: summaryPaths.length,
465
+ summaryPaths,
466
+ archivedPaths,
467
+ };
468
+ }
469
+ /* ---- Task 9.4: Stale Fact Archival ------------------------------ */
470
+ /**
471
+ * Archive stale or contradicted facts to facts-archived.md.
472
+ *
473
+ * Strategy:
474
+ * 1. Read all facts from facts.md
475
+ * 2. Detect contradictions (LLM-powered when available)
476
+ * 3. Move stale/contradicted facts to facts-archived.md
477
+ * 4. Rewrite facts.md without archived entries
478
+ */
479
+ async archiveStaleFacts() {
480
+ const agentDir = join(this.rootDir, this.agentId);
481
+ const factsPath = join(agentDir, FACTS_FILENAME);
482
+ const archivePath = join(agentDir, FACT_ARCHIVE_FILENAME);
483
+ if (!existsSync(factsPath)) {
484
+ return {
485
+ factsEvaluated: 0,
486
+ factsArchived: 0,
487
+ archivedFacts: [],
488
+ archivePath,
489
+ };
490
+ }
491
+ const factsContent = readFileSync(factsPath, 'utf-8');
492
+ const entries = parseMemoryFile(factsContent, 'file');
493
+ if (entries.length === 0) {
494
+ return {
495
+ factsEvaluated: 0,
496
+ factsArchived: 0,
497
+ archivedFacts: [],
498
+ archivePath,
499
+ };
500
+ }
501
+ // Detect contradictions
502
+ const contradictions = await this._detectContradictions(entries);
503
+ if (contradictions.length === 0) {
504
+ return {
505
+ factsEvaluated: entries.length,
506
+ factsArchived: 0,
507
+ archivedFacts: [],
508
+ archivePath,
509
+ };
510
+ }
511
+ // Determine which facts to archive
512
+ const archiveIds = new Set(contradictions.map(c => c.removeId));
513
+ const archivedFacts = [];
514
+ const keptEntries = [];
515
+ for (const entry of entries) {
516
+ if (archiveIds.has(entry.id)) {
517
+ const contradiction = contradictions.find(c => c.removeId === entry.id);
518
+ archivedFacts.push({
519
+ id: entry.id,
520
+ content: entry.content,
521
+ reason: contradiction?.reason ?? 'Contradicted by newer fact',
522
+ });
523
+ }
524
+ else {
525
+ keptEntries.push(entry);
526
+ }
527
+ }
528
+ // Write archived facts
529
+ const archiveHeader = existsSync(archivePath)
530
+ ? readFileSync(archivePath, 'utf-8')
531
+ : `# Archived Facts\n\nFacts moved here due to contradiction or staleness.\n\n---\n\n`;
532
+ const archiveAdditions = archivedFacts
533
+ .map(af => {
534
+ return [
535
+ `### ${af.id}`,
536
+ '',
537
+ `- **Archived:** ${new Date().toISOString()}`,
538
+ `- **Reason:** ${af.reason}`,
539
+ '',
540
+ af.content,
541
+ '',
542
+ '---',
543
+ '',
544
+ ].join('\n');
545
+ })
546
+ .join('');
547
+ writeFileSync(archivePath, archiveHeader + archiveAdditions, 'utf-8');
548
+ // Rewrite facts.md without archived entries
549
+ const factsHeader = `# Agent Facts\n\nAutomatically maintained fact store.\n\n---\n\n`;
550
+ const remainingContent = keptEntries.map(e => formatEntry(e)).join('');
551
+ writeFileSync(factsPath, factsHeader + remainingContent, 'utf-8');
552
+ if (this.debug) {
553
+ console.log(`[MemoryCompaction] Archived ${archivedFacts.length} stale facts`);
554
+ }
555
+ return {
556
+ factsEvaluated: entries.length,
557
+ factsArchived: archivedFacts.length,
558
+ archivedFacts,
559
+ archivePath,
560
+ };
561
+ }
562
+ /* ---- Private Helpers ------------------------------------------- */
563
+ _fallbackSummary(monthKey, group) {
564
+ const lines = [
565
+ `Conversations from ${monthKey}:`,
566
+ '',
567
+ ];
568
+ for (const file of group) {
569
+ lines.push(`### ${file.filename}`);
570
+ lines.push('');
571
+ // Take first 500 chars of each conversation
572
+ lines.push(file.content.slice(0, 500));
573
+ if (file.content.length > 500)
574
+ lines.push('...');
575
+ lines.push('');
576
+ }
577
+ return lines.join('\n');
578
+ }
579
+ async _detectContradictions(entries) {
580
+ if (this.llmCall && entries.length >= 2) {
581
+ return this._detectContradictionsWithLLM(entries);
582
+ }
583
+ return this._detectContradictionsHeuristic(entries);
584
+ }
585
+ async _detectContradictionsWithLLM(entries) {
586
+ const factsList = entries
587
+ .map(e => `[${e.id}] (${e.timestamp}): ${e.content}`)
588
+ .join('\n');
589
+ try {
590
+ const response = await this.llmCall(`Analyze these facts for contradictions:\n\n${factsList}`, CONTRADICTION_SYSTEM_PROMPT);
591
+ const jsonMatch = /\{[\s\S]*\}/.exec(response);
592
+ if (jsonMatch) {
593
+ const parsed = JSON.parse(jsonMatch[0]);
594
+ if (Array.isArray(parsed.contradictions)) {
595
+ return parsed.contradictions.map((c) => ({
596
+ removeId: c.factId1 === c.keepId ? c.factId2 : c.factId1,
597
+ reason: c.reason ?? 'LLM-detected contradiction',
598
+ }));
599
+ }
600
+ }
601
+ }
602
+ catch {
603
+ if (this.debug) {
604
+ console.warn('[MemoryCompaction] LLM contradiction detection failed, falling back to heuristic');
605
+ }
606
+ }
607
+ return this._detectContradictionsHeuristic(entries);
608
+ }
609
+ _detectContradictionsHeuristic(entries) {
610
+ const results = [];
611
+ // Heuristic: entries with very high text similarity but different content
612
+ // are likely updated versions of each other. Archive the older one.
613
+ for (let i = 0; i < entries.length; i++) {
614
+ for (let j = i + 1; j < entries.length; j++) {
615
+ const sim = textSimilarity(entries[i].content, entries[j].content);
616
+ // High similarity (>0.7) but not exact (not 1.0) suggests contradiction/update
617
+ if (sim > 0.7 && sim < 1.0) {
618
+ // Archive the older one
619
+ const older = entries[i].timestamp <= entries[j].timestamp ? entries[i] : entries[j];
620
+ results.push({
621
+ removeId: older.id,
622
+ reason: `Superseded by similar fact (similarity: ${sim.toFixed(2)})`,
623
+ });
624
+ }
625
+ }
626
+ }
627
+ return results;
628
+ }
629
+ }
630
+ //# sourceMappingURL=memory-compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-compaction.js","sourceRoot":"","sources":["../../../../packages/ai/src/compaction/memory-compaction.ts"],"names":[],"mappings":"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"}