@dcyfr/ai 2.1.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +81 -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 +33 -4
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Plugin Reputation Engine
3
+ *
4
+ * Manages plugin trust scores with SQLite persistence, weekly registry sync,
5
+ * and maintenance-score decay.
6
+ *
7
+ * Key features:
8
+ * • CRUD: upsert scan results, record incidents, query scores
9
+ * • Trust score storage & retrieval (task 7.3)
10
+ * • Weekly sync from central registry (task 7.4)
11
+ * • Decay algorithm: maintenance -5 per 90d without a new scan (task 7.5)
12
+ * • Query API: getScore(), getTopPlugins() (task 7.6)
13
+ *
14
+ * @module plugins/reputation/plugin-reputation-engine
15
+ * @version 1.0.0
16
+ * @date 2026-02-28
17
+ * @license MIT
18
+ */
19
+ import type { PluginReputationEngineConfig, PluginReputationRecord, PluginIncidentRecord, PluginAuditRecord, PluginScoreResult, TopPluginResult, UpsertScanInput, AuditEventType, IncidentSeverity, RegistryReputationEntry, PluginTrustScore } from './types.js';
20
+ export type { PluginReputationEngineConfig, PluginReputationRecord, PluginIncidentRecord, PluginAuditRecord, PluginScoreResult, TopPluginResult, UpsertScanInput, AuditEventType, IncidentSeverity, RegistryReputationEntry, PluginTrustScore, };
21
+ /**
22
+ * Plugin Reputation Engine
23
+ *
24
+ * Single-instance, synchronous (except for the async `syncFromRegistry()`).
25
+ * Uses better-sqlite3's synchronous API for all DB operations.
26
+ */
27
+ export declare class PluginReputationEngine {
28
+ private db;
29
+ private registryUrl;
30
+ private decayIntervalDays;
31
+ private decayAmount;
32
+ private decayFloor;
33
+ private debug;
34
+ constructor(config?: PluginReputationEngineConfig);
35
+ /** Close the database connection. Call when the engine is no longer needed. */
36
+ close(): void;
37
+ /**
38
+ * Upsert a plugin scan result.
39
+ * Creates a new row on first scan; updates existing row on re-scan.
40
+ * Increments `scan_count` and writes an audit entry.
41
+ */
42
+ upsertScan(input: UpsertScanInput): void;
43
+ /**
44
+ * Delete a plugin and all its associated incidents / audits.
45
+ * Foreign-key cascade handles child rows.
46
+ */
47
+ deletePlugin(pluginId: string): boolean;
48
+ /**
49
+ * Store / update a trust score for a plugin that already exists.
50
+ * Use `upsertScan` for new scans; this is for score-only patches
51
+ * (e.g. after a registry merge).
52
+ */
53
+ updateScore(pluginId: string, trustScore: PluginTrustScore): void;
54
+ /**
55
+ * Retrieve the trust score for a plugin.
56
+ * Returns null if the plugin is not in the database.
57
+ */
58
+ getScore(pluginId: string): PluginScoreResult | null;
59
+ /**
60
+ * Record a security or compliance incident for a plugin.
61
+ * Returns the newly created incident's row ID.
62
+ */
63
+ recordIncident(pluginId: string, severity: IncidentSeverity, description: string): number;
64
+ /**
65
+ * Mark an existing incident as resolved.
66
+ * Returns `true` if a row was updated.
67
+ */
68
+ resolveIncident(incidentId: number): boolean;
69
+ /** List all incidents for a plugin, newest first. */
70
+ listIncidents(pluginId: string, includeResolved?: boolean): PluginIncidentRecord[];
71
+ /**
72
+ * Return the top-N plugins by trust score.
73
+ *
74
+ * @param capability - Optional capability filter (e.g. `"git"`).
75
+ * Matches plugins whose capabilities_json array contains the given string.
76
+ * @param limit - Maximum number of results to return (default 10).
77
+ */
78
+ getTopPlugins(capability?: string, limit?: number): TopPluginResult[];
79
+ /** List all plugins, ordered by trust_score descending. */
80
+ listAll(): PluginScoreResult[];
81
+ /**
82
+ * Apply maintenance-score decay to plugins that haven't been scanned
83
+ * within the configured `decayIntervalDays`.
84
+ *
85
+ * For each qualifying plugin, `maintenance` dimension is decreased by
86
+ * `decayAmount` (default 5), clamped at `decayFloor` (default 0),
87
+ * and the overall trust score is recalculated proportionally.
88
+ *
89
+ * Returns the number of plugins that had decay applied.
90
+ */
91
+ applyDecay(): number;
92
+ /**
93
+ * Download the central registry's `reputation.json` and merge entries
94
+ * into the local database.
95
+ *
96
+ * Registry data takes precedence over local scores for `approved_at` and
97
+ * `trust_score`, but local scans preserve their `scan_count`.
98
+ *
99
+ * Returns `{ added, updated, skipped }` counts.
100
+ */
101
+ syncFromRegistry(overrideUrl?: string, fetchFn?: typeof fetch): Promise<{
102
+ added: number;
103
+ updated: number;
104
+ skipped: number;
105
+ }>;
106
+ /** List audit events for a plugin, newest first. */
107
+ listAudits(pluginId: string, limit?: number): PluginAuditRecord[];
108
+ /** Return total plugin count in the database. */
109
+ count(): number;
110
+ private _appendAudit;
111
+ private _scoreToRecommendation;
112
+ private _parseRegistryPayload;
113
+ private _log;
114
+ }
115
+ //# sourceMappingURL=plugin-reputation-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-reputation-engine.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/reputation/plugin-reputation-engine.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EACV,4BAA4B,EAC5B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,4BAA4B,EAC5B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,GACjB,CAAC;AAeF;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,GAAE,4BAAiC;IAYrD,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAMb;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAsFxC;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAiBvC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAsBjE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IA6BpD;;;OAGG;IACH,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,GAClB,MAAM;IAeT;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAqB5C,qDAAqD;IACrD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,UAAO,GAAG,oBAAoB,EAAE;IAS/E;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,eAAe,EAAE;IAgCjE,2DAA2D;IAC3D,OAAO,IAAI,iBAAiB,EAAE;IAyB9B;;;;;;;;;OASG;IACH,UAAU,IAAI,MAAM;IAwEpB;;;;;;;;OAQG;IACG,gBAAgB,CACpB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAwG/D,oDAAoD;IACpD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,iBAAiB,EAAE;IAQ7D,iDAAiD;IACjD,KAAK,IAAI,MAAM;IASf,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,IAAI;CAKb"}
@@ -0,0 +1,528 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /**
3
+ * Plugin Reputation Engine
4
+ *
5
+ * Manages plugin trust scores with SQLite persistence, weekly registry sync,
6
+ * and maintenance-score decay.
7
+ *
8
+ * Key features:
9
+ * • CRUD: upsert scan results, record incidents, query scores
10
+ * • Trust score storage & retrieval (task 7.3)
11
+ * • Weekly sync from central registry (task 7.4)
12
+ * • Decay algorithm: maintenance -5 per 90d without a new scan (task 7.5)
13
+ * • Query API: getScore(), getTopPlugins() (task 7.6)
14
+ *
15
+ * @module plugins/reputation/plugin-reputation-engine
16
+ * @version 1.0.0
17
+ * @date 2026-02-28
18
+ * @license MIT
19
+ */
20
+ import { openReputationDb, DEFAULT_DB_PATH } from './plugin-reputation-db.js';
21
+ // ---------------------------------------------------------------------------
22
+ // Constants
23
+ // ---------------------------------------------------------------------------
24
+ const DEFAULT_REGISTRY_URL = 'https://registry.dcyfr.ai/reputation.json';
25
+ const DEFAULT_DECAY_INTERVAL_DAYS = 90;
26
+ const DEFAULT_DECAY_AMOUNT = 5;
27
+ const DEFAULT_DECAY_FLOOR = 0;
28
+ // ---------------------------------------------------------------------------
29
+ // Engine
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Plugin Reputation Engine
33
+ *
34
+ * Single-instance, synchronous (except for the async `syncFromRegistry()`).
35
+ * Uses better-sqlite3's synchronous API for all DB operations.
36
+ */
37
+ export class PluginReputationEngine {
38
+ db;
39
+ registryUrl;
40
+ decayIntervalDays;
41
+ decayAmount;
42
+ decayFloor;
43
+ debug;
44
+ constructor(config = {}) {
45
+ const dbPath = config.databasePath ?? DEFAULT_DB_PATH;
46
+ this.db = openReputationDb(dbPath);
47
+ this.registryUrl = config.registryUrl ?? DEFAULT_REGISTRY_URL;
48
+ this.decayIntervalDays = config.decayIntervalDays ?? DEFAULT_DECAY_INTERVAL_DAYS;
49
+ this.decayAmount = config.decayAmount ?? DEFAULT_DECAY_AMOUNT;
50
+ this.decayFloor = config.decayFloor ?? DEFAULT_DECAY_FLOOR;
51
+ this.debug = config.debug ?? false;
52
+ }
53
+ // ── Lifecycle ──────────────────────────────────────────────────────────────
54
+ /** Close the database connection. Call when the engine is no longer needed. */
55
+ close() {
56
+ this.db.close();
57
+ }
58
+ // ── CRUD ───────────────────────────────────────────────────────────────────
59
+ /**
60
+ * Upsert a plugin scan result.
61
+ * Creates a new row on first scan; updates existing row on re-scan.
62
+ * Increments `scan_count` and writes an audit entry.
63
+ */
64
+ upsertScan(input) {
65
+ const now = new Date().toISOString();
66
+ const capabilitiesJson = JSON.stringify(input.capabilities ?? []);
67
+ const dimensionsJson = JSON.stringify(input.trustScore.dimensions);
68
+ const approvedAt = input.approved ? now : null;
69
+ const registrySource = input.registrySource ?? 'local';
70
+ this.db.transaction(() => {
71
+ const existing = this.db
72
+ .prepare('SELECT scan_count, created_at, approved_at FROM plugins WHERE plugin_id = ?')
73
+ .get(input.plugin_id);
74
+ if (existing) {
75
+ this.db
76
+ .prepare(/* sql */ `
77
+ UPDATE plugins SET
78
+ name = @name,
79
+ version = @version,
80
+ capabilities_json = @capabilitiesJson,
81
+ trust_score = @trustScore,
82
+ trust_dimensions_json = @dimensionsJson,
83
+ last_scanned_at = @now,
84
+ scan_count = @scanCount,
85
+ approved_at = COALESCE(@approvedAt, approved_at),
86
+ registry_source = @registrySource,
87
+ updated_at = @now
88
+ WHERE plugin_id = @pluginId
89
+ `)
90
+ .run({
91
+ name: input.name,
92
+ version: input.version,
93
+ capabilitiesJson,
94
+ trustScore: input.trustScore.overall,
95
+ dimensionsJson,
96
+ now,
97
+ scanCount: existing.scan_count + 1,
98
+ approvedAt: approvedAt ?? null,
99
+ registrySource,
100
+ pluginId: input.plugin_id,
101
+ });
102
+ }
103
+ else {
104
+ this.db
105
+ .prepare(/* sql */ `
106
+ INSERT INTO plugins (
107
+ plugin_id, name, version, capabilities_json,
108
+ trust_score, trust_dimensions_json, last_scanned_at,
109
+ scan_count, approved_at, registry_source,
110
+ created_at, updated_at
111
+ ) VALUES (
112
+ @pluginId, @name, @version, @capabilitiesJson,
113
+ @trustScore, @dimensionsJson, @now,
114
+ 1, @approvedAt, @registrySource,
115
+ @now, @now
116
+ )
117
+ `)
118
+ .run({
119
+ pluginId: input.plugin_id,
120
+ name: input.name,
121
+ version: input.version,
122
+ capabilitiesJson,
123
+ trustScore: input.trustScore.overall,
124
+ dimensionsJson,
125
+ now,
126
+ approvedAt: approvedAt ?? null,
127
+ registrySource,
128
+ });
129
+ }
130
+ this._appendAudit(input.plugin_id, 'scan_completed', {
131
+ version: input.version,
132
+ trust_score: input.trustScore.overall,
133
+ recommendation: this._scoreToRecommendation(input.trustScore.overall),
134
+ });
135
+ if (input.approved) {
136
+ this._appendAudit(input.plugin_id, 'plugin_approved', {
137
+ trust_score: input.trustScore.overall,
138
+ });
139
+ }
140
+ })();
141
+ this._log(`upsertScan: ${input.plugin_id} → score=${input.trustScore.overall}`);
142
+ }
143
+ /**
144
+ * Delete a plugin and all its associated incidents / audits.
145
+ * Foreign-key cascade handles child rows.
146
+ */
147
+ deletePlugin(pluginId) {
148
+ const result = this.db
149
+ .prepare('DELETE FROM plugins WHERE plugin_id = ?')
150
+ .run(pluginId);
151
+ if (result.changes > 0) {
152
+ // Audits for deleted plugins are kept (no FK ref) — just orphaned
153
+ // Clean them up manually
154
+ this.db.prepare('DELETE FROM audits WHERE plugin_id = ?').run(pluginId);
155
+ this._log(`deletePlugin: removed ${pluginId}`);
156
+ return true;
157
+ }
158
+ return false;
159
+ }
160
+ // ── Trust score ────────────────────────────────────────────────────────────
161
+ /**
162
+ * Store / update a trust score for a plugin that already exists.
163
+ * Use `upsertScan` for new scans; this is for score-only patches
164
+ * (e.g. after a registry merge).
165
+ */
166
+ updateScore(pluginId, trustScore) {
167
+ const now = new Date().toISOString();
168
+ const dimensionsJson = JSON.stringify(trustScore.dimensions);
169
+ const result = this.db
170
+ .prepare(/* sql */ `
171
+ UPDATE plugins SET
172
+ trust_score = @score,
173
+ trust_dimensions_json = @dimensionsJson,
174
+ updated_at = @now
175
+ WHERE plugin_id = @pluginId
176
+ `)
177
+ .run({ score: trustScore.overall, dimensionsJson, now, pluginId });
178
+ if (result.changes === 0) {
179
+ throw new Error(`Plugin not found: ${pluginId}`);
180
+ }
181
+ this._appendAudit(pluginId, 'score_updated', { trust_score: trustScore.overall });
182
+ this._log(`updateScore: ${pluginId} → ${trustScore.overall}`);
183
+ }
184
+ /**
185
+ * Retrieve the trust score for a plugin.
186
+ * Returns null if the plugin is not in the database.
187
+ */
188
+ getScore(pluginId) {
189
+ const row = this.db
190
+ .prepare(/* sql */ `
191
+ SELECT
192
+ plugin_id, name, version, trust_score,
193
+ trust_dimensions_json, scan_count, last_scanned_at, approved_at
194
+ FROM plugins
195
+ WHERE plugin_id = ?
196
+ `)
197
+ .get(pluginId);
198
+ if (!row)
199
+ return null;
200
+ return {
201
+ plugin_id: row.plugin_id,
202
+ name: row.name,
203
+ version: row.version,
204
+ trust_score: row.trust_score,
205
+ dimensions: JSON.parse(row.trust_dimensions_json),
206
+ scan_count: row.scan_count,
207
+ last_scanned_at: row.last_scanned_at,
208
+ approved_at: row.approved_at,
209
+ };
210
+ }
211
+ // ── Incidents ──────────────────────────────────────────────────────────────
212
+ /**
213
+ * Record a security or compliance incident for a plugin.
214
+ * Returns the newly created incident's row ID.
215
+ */
216
+ recordIncident(pluginId, severity, description) {
217
+ const now = new Date().toISOString();
218
+ const result = this.db
219
+ .prepare(/* sql */ `
220
+ INSERT INTO incidents (plugin_id, severity, description, detected_at)
221
+ VALUES (?, ?, ?, ?)
222
+ `)
223
+ .run(pluginId, severity, description, now);
224
+ this._appendAudit(pluginId, 'incident_recorded', { severity, description });
225
+ this._log(`recordIncident: ${pluginId} [${severity}] — ${description}`);
226
+ return result.lastInsertRowid;
227
+ }
228
+ /**
229
+ * Mark an existing incident as resolved.
230
+ * Returns `true` if a row was updated.
231
+ */
232
+ resolveIncident(incidentId) {
233
+ const now = new Date().toISOString();
234
+ const result = this.db
235
+ .prepare('UPDATE incidents SET resolved_at = ? WHERE id = ? AND resolved_at IS NULL')
236
+ .run(now, incidentId);
237
+ if (result.changes > 0) {
238
+ // Look up plugin_id for the audit entry
239
+ const inc = this.db
240
+ .prepare('SELECT plugin_id, severity FROM incidents WHERE id = ?')
241
+ .get(incidentId);
242
+ if (inc) {
243
+ this._appendAudit(inc.plugin_id, 'incident_resolved', { incident_id: incidentId });
244
+ }
245
+ return true;
246
+ }
247
+ return false;
248
+ }
249
+ /** List all incidents for a plugin, newest first. */
250
+ listIncidents(pluginId, includeResolved = true) {
251
+ const sql = includeResolved
252
+ ? 'SELECT * FROM incidents WHERE plugin_id = ? ORDER BY detected_at DESC'
253
+ : 'SELECT * FROM incidents WHERE plugin_id = ? AND resolved_at IS NULL ORDER BY detected_at DESC';
254
+ return this.db.prepare(sql).all(pluginId);
255
+ }
256
+ // ── Query API (task 7.6) ──────────────────────────────────────────────────
257
+ /**
258
+ * Return the top-N plugins by trust score.
259
+ *
260
+ * @param capability - Optional capability filter (e.g. `"git"`).
261
+ * Matches plugins whose capabilities_json array contains the given string.
262
+ * @param limit - Maximum number of results to return (default 10).
263
+ */
264
+ getTopPlugins(capability, limit = 10) {
265
+ const allRows = this.db
266
+ .prepare(/* sql */ `
267
+ SELECT
268
+ plugin_id, name, version, trust_score,
269
+ trust_dimensions_json, capabilities_json,
270
+ scan_count, last_scanned_at, approved_at
271
+ FROM plugins
272
+ ORDER BY trust_score DESC
273
+ `)
274
+ .all();
275
+ const matched = capability
276
+ ? allRows.filter((r) => {
277
+ const caps = JSON.parse(r.capabilities_json);
278
+ return caps.includes(capability);
279
+ })
280
+ : allRows;
281
+ return matched.slice(0, limit).map((r) => ({
282
+ plugin_id: r.plugin_id,
283
+ name: r.name,
284
+ version: r.version,
285
+ trust_score: r.trust_score,
286
+ dimensions: JSON.parse(r.trust_dimensions_json),
287
+ capabilities: JSON.parse(r.capabilities_json),
288
+ scan_count: r.scan_count,
289
+ last_scanned_at: r.last_scanned_at,
290
+ approved_at: r.approved_at,
291
+ }));
292
+ }
293
+ /** List all plugins, ordered by trust_score descending. */
294
+ listAll() {
295
+ const rows = this.db
296
+ .prepare(/* sql */ `
297
+ SELECT
298
+ plugin_id, name, version, trust_score,
299
+ trust_dimensions_json, scan_count, last_scanned_at, approved_at
300
+ FROM plugins
301
+ ORDER BY trust_score DESC
302
+ `)
303
+ .all();
304
+ return rows.map((r) => ({
305
+ plugin_id: r.plugin_id,
306
+ name: r.name,
307
+ version: r.version,
308
+ trust_score: r.trust_score,
309
+ dimensions: JSON.parse(r.trust_dimensions_json),
310
+ scan_count: r.scan_count,
311
+ last_scanned_at: r.last_scanned_at,
312
+ approved_at: r.approved_at,
313
+ }));
314
+ }
315
+ // ── Decay algorithm (task 7.5) ─────────────────────────────────────────────
316
+ /**
317
+ * Apply maintenance-score decay to plugins that haven't been scanned
318
+ * within the configured `decayIntervalDays`.
319
+ *
320
+ * For each qualifying plugin, `maintenance` dimension is decreased by
321
+ * `decayAmount` (default 5), clamped at `decayFloor` (default 0),
322
+ * and the overall trust score is recalculated proportionally.
323
+ *
324
+ * Returns the number of plugins that had decay applied.
325
+ */
326
+ applyDecay() {
327
+ const cutoff = new Date();
328
+ cutoff.setDate(cutoff.getDate() - this.decayIntervalDays);
329
+ const cutoffIso = cutoff.toISOString();
330
+ const stale = this.db
331
+ .prepare(/* sql */ `
332
+ SELECT plugin_id, trust_score, trust_dimensions_json
333
+ FROM plugins
334
+ WHERE last_scanned_at < ?
335
+ `)
336
+ .all(cutoffIso);
337
+ let count = 0;
338
+ const now = new Date().toISOString();
339
+ for (const row of stale) {
340
+ const dims = JSON.parse(row.trust_dimensions_json);
341
+ const oldMaintenance = dims.maintenance;
342
+ const newMaintenance = Math.max(this.decayFloor, oldMaintenance - this.decayAmount);
343
+ if (newMaintenance === oldMaintenance)
344
+ continue; // already at floor
345
+ const decayedDims = { ...dims, maintenance: newMaintenance };
346
+ // Recalculate overall score with same weights as TrustScore calculation
347
+ // (security 40%, community 30%, maintenance 20%, transparency 10%)
348
+ const newOverall = Math.round(decayedDims.security * 0.4 +
349
+ decayedDims.community * 0.3 +
350
+ decayedDims.maintenance * 0.2 +
351
+ decayedDims.transparency * 0.1);
352
+ this.db
353
+ .prepare(/* sql */ `
354
+ UPDATE plugins SET
355
+ trust_score = @overall,
356
+ trust_dimensions_json = @dimensionsJson,
357
+ updated_at = @now
358
+ WHERE plugin_id = @pluginId
359
+ `)
360
+ .run({
361
+ overall: newOverall,
362
+ dimensionsJson: JSON.stringify(decayedDims),
363
+ now,
364
+ pluginId: row.plugin_id,
365
+ });
366
+ this._appendAudit(row.plugin_id, 'decay_applied', {
367
+ old_maintenance: oldMaintenance,
368
+ new_maintenance: newMaintenance,
369
+ old_score: row.trust_score,
370
+ new_score: newOverall,
371
+ decay_amount: this.decayAmount,
372
+ });
373
+ count++;
374
+ this._log(`applyDecay: ${row.plugin_id} maintenance ${oldMaintenance}→${newMaintenance}, score ${row.trust_score}→${newOverall}`);
375
+ }
376
+ return count;
377
+ }
378
+ // ── Registry sync (task 7.4) ──────────────────────────────────────────────
379
+ /**
380
+ * Download the central registry's `reputation.json` and merge entries
381
+ * into the local database.
382
+ *
383
+ * Registry data takes precedence over local scores for `approved_at` and
384
+ * `trust_score`, but local scans preserve their `scan_count`.
385
+ *
386
+ * Returns `{ added, updated, skipped }` counts.
387
+ */
388
+ async syncFromRegistry(overrideUrl, fetchFn = globalThis.fetch) {
389
+ const url = overrideUrl ?? this.registryUrl;
390
+ let entries;
391
+ try {
392
+ const response = await fetchFn(url, {
393
+ headers: { 'Accept': 'application/json', 'User-Agent': '@dcyfr/ai plugin-reputation-engine' },
394
+ signal: AbortSignal.timeout(15_000),
395
+ });
396
+ if (!response.ok) {
397
+ throw new Error(`HTTP ${response.status} from ${url}`);
398
+ }
399
+ const json = await response.json();
400
+ entries = this._parseRegistryPayload(json);
401
+ }
402
+ catch (err) {
403
+ this._log(`syncFromRegistry error: ${err.message}`);
404
+ throw err;
405
+ }
406
+ let added = 0;
407
+ let updated = 0;
408
+ const skipped = 0;
409
+ const now = new Date().toISOString();
410
+ for (const entry of entries) {
411
+ const existing = this.db
412
+ .prepare('SELECT scan_count, approved_at FROM plugins WHERE plugin_id = ?')
413
+ .get(entry.plugin_id);
414
+ const dimensionsJson = JSON.stringify(entry.dimensions);
415
+ const capabilitiesJson = JSON.stringify(entry.capabilities ?? []);
416
+ if (existing) {
417
+ this.db
418
+ .prepare(/* sql */ `
419
+ UPDATE plugins SET
420
+ name = @name,
421
+ version = @version,
422
+ capabilities_json = @capabilitiesJson,
423
+ trust_score = @trustScore,
424
+ trust_dimensions_json = @dimensionsJson,
425
+ last_scanned_at = @lastUpdated,
426
+ registry_source = 'registry',
427
+ updated_at = @now
428
+ WHERE plugin_id = @pluginId
429
+ `)
430
+ .run({
431
+ name: entry.name,
432
+ version: entry.version,
433
+ capabilitiesJson,
434
+ trustScore: entry.trust_score,
435
+ dimensionsJson,
436
+ lastUpdated: entry.last_updated,
437
+ now,
438
+ pluginId: entry.plugin_id,
439
+ });
440
+ updated++;
441
+ }
442
+ else {
443
+ this.db
444
+ .prepare(/* sql */ `
445
+ INSERT INTO plugins (
446
+ plugin_id, name, version, capabilities_json,
447
+ trust_score, trust_dimensions_json,
448
+ last_scanned_at, scan_count,
449
+ approved_at, registry_source,
450
+ created_at, updated_at
451
+ ) VALUES (
452
+ @pluginId, @name, @version, @capabilitiesJson,
453
+ @trustScore, @dimensionsJson,
454
+ @lastUpdated, 0,
455
+ NULL, 'registry',
456
+ @now, @now
457
+ )
458
+ `)
459
+ .run({
460
+ pluginId: entry.plugin_id,
461
+ name: entry.name,
462
+ version: entry.version,
463
+ capabilitiesJson,
464
+ trustScore: entry.trust_score,
465
+ dimensionsJson,
466
+ lastUpdated: entry.last_updated,
467
+ now,
468
+ });
469
+ added++;
470
+ }
471
+ this._appendAudit(entry.plugin_id, 'registry_sync', {
472
+ version: entry.version,
473
+ trust_score: entry.trust_score,
474
+ action: existing ? 'updated' : 'added',
475
+ });
476
+ }
477
+ this._log(`syncFromRegistry: added=${added} updated=${updated} skipped=${skipped}`);
478
+ return { added, updated, skipped };
479
+ }
480
+ // ── Audit log ──────────────────────────────────────────────────────────────
481
+ /** List audit events for a plugin, newest first. */
482
+ listAudits(pluginId, limit = 50) {
483
+ return this.db
484
+ .prepare('SELECT * FROM audits WHERE plugin_id = ? ORDER BY created_at DESC LIMIT ?')
485
+ .all(pluginId, limit);
486
+ }
487
+ /** Return total plugin count in the database. */
488
+ count() {
489
+ const row = this.db
490
+ .prepare('SELECT COUNT(*) AS n FROM plugins')
491
+ .get();
492
+ return row.n;
493
+ }
494
+ // ── Private helpers ────────────────────────────────────────────────────────
495
+ _appendAudit(pluginId, eventType, data = {}) {
496
+ const now = new Date().toISOString();
497
+ this.db
498
+ .prepare(/* sql */ `
499
+ INSERT INTO audits (plugin_id, event_type, event_data_json, created_at)
500
+ VALUES (?, ?, ?, ?)
501
+ `)
502
+ .run(pluginId, eventType, JSON.stringify(data), now);
503
+ }
504
+ _scoreToRecommendation(score) {
505
+ if (score >= 80)
506
+ return 'approve';
507
+ if (score >= 65)
508
+ return 'approve-with-warnings';
509
+ if (score >= 50)
510
+ return 'require-review';
511
+ return 'reject';
512
+ }
513
+ _parseRegistryPayload(json) {
514
+ // Registry payload may be `{ plugins: [...] }` or a bare array
515
+ if (Array.isArray(json))
516
+ return json;
517
+ if (json && typeof json === 'object' && 'plugins' in json) {
518
+ return json.plugins;
519
+ }
520
+ throw new Error('Unrecognised registry payload format');
521
+ }
522
+ _log(msg) {
523
+ if (this.debug) {
524
+ console.debug(`[PluginReputationEngine] ${msg}`);
525
+ }
526
+ }
527
+ }
528
+ //# sourceMappingURL=plugin-reputation-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-reputation-engine.js","sourceRoot":"","sources":["../../../../../packages/ai/src/plugins/reputation/plugin-reputation-engine.ts"],"names":[],"mappings":"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"}