@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,610 @@
1
+ /**
2
+ * DCYFR Agent Scheduler
3
+ * TLP:AMBER - Internal Use Only
4
+ *
5
+ * Provides time-based, webhook-based, and event-based task scheduling for
6
+ * autonomous agents. Features:
7
+ * - Cron-style scheduling with built-in cron expression parser
8
+ * - Webhook endpoints with secret-based authentication
9
+ * - Event subscription with payload filtering
10
+ * - Heartbeat health checks with quiet hours
11
+ * - Telemetry integration (started/completed/failed events)
12
+ * - All scheduled tasks default to readonly trust level
13
+ *
14
+ * @module scheduler/agent-scheduler
15
+ * @version 1.0.0
16
+ * @date 2026-03-01
17
+ */
18
+ import { EventEmitter } from 'node:events';
19
+ import { randomUUID, timingSafeEqual } from 'node:crypto';
20
+ // ─────────────────────────────────────────────────────────────────────────────
21
+ // Cron Parser (lightweight, built-in)
22
+ // ─────────────────────────────────────────────────────────────────────────────
23
+ /**
24
+ * Add a range of values to the set
25
+ */
26
+ function addRange(values, start, end, step = 1) {
27
+ for (let i = start; i <= end; i += step)
28
+ values.add(i);
29
+ }
30
+ /**
31
+ * Parse a step expression (range/step format)
32
+ */
33
+ function parseStepPart(range, stepStr, min, max, values) {
34
+ const step = Number.parseInt(stepStr, 10);
35
+ let start = min;
36
+ let end = max;
37
+ if (range !== '*') {
38
+ const parsed = parseRangeBounds(range);
39
+ start = parsed.start;
40
+ end = parsed.end ?? max;
41
+ }
42
+ addRange(values, start, end, step);
43
+ }
44
+ /**
45
+ * Parse range bounds from a string (e.g., "1-10" → { start: 1, end: 10 })
46
+ */
47
+ function parseRangeBounds(s) {
48
+ if (s.includes('-')) {
49
+ const [a, b] = s.split('-').map(Number);
50
+ return { start: a, end: b };
51
+ }
52
+ return { start: Number.parseInt(s, 10) };
53
+ }
54
+ /**
55
+ * Parse a single comma-separated part of a cron field
56
+ */
57
+ function parseCronPart(part, min, max, values) {
58
+ if (part === '*') {
59
+ addRange(values, min, max);
60
+ }
61
+ else if (part.includes('/')) {
62
+ const [range, stepStr] = part.split('/');
63
+ parseStepPart(range, stepStr, min, max, values);
64
+ }
65
+ else if (part.includes('-')) {
66
+ const { start, end } = parseRangeBounds(part);
67
+ addRange(values, start, end ?? max);
68
+ }
69
+ else {
70
+ values.add(Number.parseInt(part, 10));
71
+ }
72
+ }
73
+ /**
74
+ * Parse a cron field into a set of matching values
75
+ * Supports: *, N, N-M, N/step, asterisk/step, comma-separated
76
+ */
77
+ function parseCronField(field, min, max) {
78
+ const values = new Set();
79
+ for (const part of field.split(',')) {
80
+ parseCronPart(part, min, max, values);
81
+ }
82
+ return values;
83
+ }
84
+ /**
85
+ * Check if a Date matches a 5-field cron expression
86
+ * Format: minute hour day-of-month month day-of-week
87
+ */
88
+ export function matchesCron(cronExpr, date) {
89
+ const fields = cronExpr.trim().split(/\s+/);
90
+ if (fields.length !== 5) {
91
+ throw new Error(`Invalid cron expression: expected 5 fields, got ${fields.length}`);
92
+ }
93
+ const [minField, hourField, domField, monthField, dowField] = fields;
94
+ const minute = parseCronField(minField, 0, 59);
95
+ const hour = parseCronField(hourField, 0, 23);
96
+ const dom = parseCronField(domField, 1, 31);
97
+ const month = parseCronField(monthField, 1, 12);
98
+ const dow = parseCronField(dowField, 0, 6);
99
+ return (minute.has(date.getMinutes()) &&
100
+ hour.has(date.getHours()) &&
101
+ dom.has(date.getDate()) &&
102
+ month.has(date.getMonth() + 1) &&
103
+ dow.has(date.getDay()));
104
+ }
105
+ /**
106
+ * Calculate next matching time for a cron expression (within 48 hours)
107
+ */
108
+ export function nextCronMatch(cronExpr, after = new Date()) {
109
+ const check = new Date(after);
110
+ // Round up to next minute
111
+ check.setSeconds(0, 0);
112
+ check.setMinutes(check.getMinutes() + 1);
113
+ // Search up to 48 hours ahead
114
+ const maxCheck = new Date(check.getTime() + 48 * 60 * 60_000);
115
+ while (check <= maxCheck) {
116
+ if (matchesCron(cronExpr, check)) {
117
+ return check;
118
+ }
119
+ check.setMinutes(check.getMinutes() + 1);
120
+ }
121
+ return null;
122
+ }
123
+ /**
124
+ * Agent Scheduler
125
+ *
126
+ * Provides cron, webhook, and event-based task scheduling for autonomous agents.
127
+ *
128
+ * Emits:
129
+ * - `scheduler.task.started` — Task execution started
130
+ * - `scheduler.task.completed` — Task execution completed successfully
131
+ * - `scheduler.task.failed` — Task execution failed
132
+ * - `scheduler.heartbeat` — Heartbeat health report generated
133
+ * - `scheduler.webhook.received` — Webhook request received
134
+ */
135
+ export class AgentScheduler extends EventEmitter {
136
+ cronJobs = new Map();
137
+ webhooks = new Map();
138
+ subscriptions = new Map();
139
+ executor;
140
+ cronCheckIntervalMs;
141
+ defaultTrustLevel;
142
+ cronTimer = null;
143
+ heartbeatTimer = null;
144
+ heartbeatConfig = null;
145
+ running = false;
146
+ constructor(config = {}) {
147
+ super();
148
+ this.executor = config.executor ?? defaultExecutor;
149
+ this.cronCheckIntervalMs = config.cronCheckIntervalMs ?? 60_000;
150
+ this.defaultTrustLevel = config.defaultTrustLevel ?? 'readonly';
151
+ }
152
+ // ─────────────── Cron Scheduling ───────────────
153
+ /**
154
+ * Schedule a recurring task using a cron expression.
155
+ *
156
+ * @param cronExpr - 5-field cron expression (minute hour dom month dow)
157
+ * @param taskConfig - Task configuration
158
+ * @returns Job ID
159
+ */
160
+ schedule(cronExpr, taskConfig) {
161
+ // Validate cron expression
162
+ try {
163
+ matchesCron(cronExpr, new Date());
164
+ }
165
+ catch (e) {
166
+ throw new Error(`Invalid cron expression '${cronExpr}': ${e.message}`);
167
+ }
168
+ const id = randomUUID();
169
+ const job = {
170
+ id,
171
+ cronExpr,
172
+ taskConfig: {
173
+ ...taskConfig,
174
+ trustLevel: taskConfig.trustLevel ?? this.defaultTrustLevel,
175
+ },
176
+ active: true,
177
+ nextRunAt: nextCronMatch(cronExpr) ?? undefined,
178
+ runCount: 0,
179
+ errorCount: 0,
180
+ };
181
+ this.cronJobs.set(id, job);
182
+ // Start cron timer if not already running
183
+ if (!this.cronTimer && this.running) {
184
+ this._startCronTimer();
185
+ }
186
+ return id;
187
+ }
188
+ /**
189
+ * Remove a cron job
190
+ */
191
+ unschedule(jobId) {
192
+ return this.cronJobs.delete(jobId);
193
+ }
194
+ /**
195
+ * Get all registered cron jobs
196
+ */
197
+ getJobs() {
198
+ return Array.from(this.cronJobs.values());
199
+ }
200
+ /**
201
+ * Get a specific cron job
202
+ */
203
+ getJob(jobId) {
204
+ return this.cronJobs.get(jobId);
205
+ }
206
+ // ─────────────── Webhooks ───────────────
207
+ /**
208
+ * Register a webhook endpoint.
209
+ *
210
+ * @param route - Route path (e.g., '/webhook/deploy')
211
+ * @param taskTemplate - Task config template (payload merged at trigger time)
212
+ * @param secret - Secret for X-Webhook-Secret header validation
213
+ * @returns Webhook ID
214
+ */
215
+ webhook(route, taskTemplate, secret) {
216
+ if (!secret || secret.length < 8) {
217
+ throw new Error('Webhook secret must be at least 8 characters');
218
+ }
219
+ const id = randomUUID();
220
+ const endpoint = {
221
+ id,
222
+ route,
223
+ taskTemplate: {
224
+ ...taskTemplate,
225
+ trustLevel: taskTemplate.trustLevel ?? this.defaultTrustLevel,
226
+ },
227
+ secret,
228
+ active: true,
229
+ triggerCount: 0,
230
+ };
231
+ this.webhooks.set(id, endpoint);
232
+ return id;
233
+ }
234
+ /**
235
+ * Handle an incoming webhook request.
236
+ * Validates X-Webhook-Secret header and triggers the associated task.
237
+ *
238
+ * @param request - Webhook request
239
+ * @returns Task execution result
240
+ * @throws Error if route not found or secret invalid
241
+ */
242
+ async handleWebhook(request) {
243
+ // Find matching webhook
244
+ const endpoint = Array.from(this.webhooks.values()).find(w => w.route === request.route && w.active);
245
+ if (!endpoint) {
246
+ throw new Error(`No active webhook registered for route: ${request.route}`);
247
+ }
248
+ // Validate secret
249
+ const providedSecret = request.headers['x-webhook-secret'] ?? request.headers['X-Webhook-Secret'];
250
+ if (!providedSecret) {
251
+ throw new Error('Missing X-Webhook-Secret header');
252
+ }
253
+ if (!safeCompare(providedSecret, endpoint.secret)) {
254
+ throw new Error('Invalid webhook secret');
255
+ }
256
+ endpoint.triggerCount++;
257
+ this.emit('scheduler.webhook.received', {
258
+ type: 'scheduler.webhook.received',
259
+ data: {
260
+ webhookId: endpoint.id,
261
+ route: endpoint.route,
262
+ triggerCount: endpoint.triggerCount,
263
+ },
264
+ timestamp: new Date(),
265
+ });
266
+ // Execute task
267
+ return this._executeTask(endpoint.taskTemplate, {
268
+ trigger: 'webhook',
269
+ triggerId: endpoint.id,
270
+ webhookPayload: request.body,
271
+ });
272
+ }
273
+ /**
274
+ * Remove a webhook
275
+ */
276
+ removeWebhook(webhookId) {
277
+ return this.webhooks.delete(webhookId);
278
+ }
279
+ /**
280
+ * Get all registered webhooks
281
+ */
282
+ getWebhooks() {
283
+ return Array.from(this.webhooks.values());
284
+ }
285
+ // ─────────────── Event Subscriptions ───────────────
286
+ /**
287
+ * Subscribe to a runtime event. When the event fires and passes the filter,
288
+ * the associated task is executed.
289
+ *
290
+ * @param eventName - Event to listen for
291
+ * @param filter - Optional filter function on event payload
292
+ * @param taskConfig - Task configuration
293
+ * @returns Subscription ID
294
+ */
295
+ subscribe(eventName, filter, taskConfig) {
296
+ const id = randomUUID();
297
+ const sub = {
298
+ id,
299
+ eventName,
300
+ filter: filter ?? undefined,
301
+ taskConfig: {
302
+ ...taskConfig,
303
+ trustLevel: taskConfig.trustLevel ?? this.defaultTrustLevel,
304
+ },
305
+ active: true,
306
+ triggerCount: 0,
307
+ };
308
+ this.subscriptions.set(id, sub);
309
+ return id;
310
+ }
311
+ /**
312
+ * Emit an event to the scheduler. All matching subscriptions will be triggered.
313
+ *
314
+ * @param eventName - Event name
315
+ * @param payload - Event payload
316
+ * @returns Array of execution results
317
+ */
318
+ async triggerEvent(eventName, payload) {
319
+ const matching = Array.from(this.subscriptions.values()).filter(sub => sub.active && sub.eventName === eventName &&
320
+ (!sub.filter || sub.filter(payload)));
321
+ const results = [];
322
+ for (const sub of matching) {
323
+ sub.triggerCount++;
324
+ const result = await this._executeTask(sub.taskConfig, {
325
+ trigger: 'event',
326
+ triggerId: sub.id,
327
+ eventPayload: payload,
328
+ });
329
+ results.push(result);
330
+ }
331
+ return results;
332
+ }
333
+ /**
334
+ * Remove an event subscription
335
+ */
336
+ unsubscribe(subscriptionId) {
337
+ return this.subscriptions.delete(subscriptionId);
338
+ }
339
+ /**
340
+ * Get all event subscriptions
341
+ */
342
+ getSubscriptions() {
343
+ return Array.from(this.subscriptions.values());
344
+ }
345
+ // ─────────────── Heartbeat ───────────────
346
+ /**
347
+ * Start a heartbeat health check. Runs checks at the specified interval,
348
+ * respecting quiet hours. Emits 'scheduler.heartbeat' with HealthReport.
349
+ *
350
+ * @param config - Heartbeat configuration
351
+ */
352
+ heartbeat(config) {
353
+ this.heartbeatConfig = config;
354
+ if (this.heartbeatTimer) {
355
+ clearInterval(this.heartbeatTimer);
356
+ }
357
+ this.heartbeatTimer = setInterval(async () => {
358
+ // Check quiet hours
359
+ if (config.quietHours && isInQuietHours(config.quietHours)) {
360
+ return;
361
+ }
362
+ const report = await this.runHealthChecks();
363
+ this.emit('scheduler.heartbeat', {
364
+ type: 'scheduler.heartbeat',
365
+ data: report,
366
+ timestamp: new Date(),
367
+ });
368
+ }, config.intervalMs);
369
+ if (typeof this.heartbeatTimer.unref === 'function') {
370
+ this.heartbeatTimer.unref();
371
+ }
372
+ }
373
+ /**
374
+ * Run all health checks manually and return the report
375
+ */
376
+ async runHealthChecks() {
377
+ if (!this.heartbeatConfig) {
378
+ return {
379
+ healthy: true,
380
+ timestamp: new Date(),
381
+ checks: [],
382
+ healthyCount: 0,
383
+ unhealthyCount: 0,
384
+ };
385
+ }
386
+ const checks = [];
387
+ for (const checkFn of this.heartbeatConfig.checks) {
388
+ const start = Date.now();
389
+ try {
390
+ const result = await checkFn();
391
+ result.durationMs = Date.now() - start;
392
+ checks.push(result);
393
+ }
394
+ catch (e) {
395
+ checks.push({
396
+ name: 'unknown',
397
+ healthy: false,
398
+ details: e.message,
399
+ durationMs: Date.now() - start,
400
+ });
401
+ }
402
+ }
403
+ const healthyCount = checks.filter(c => c.healthy).length;
404
+ const unhealthyCount = checks.filter(c => !c.healthy).length;
405
+ return {
406
+ healthy: unhealthyCount === 0,
407
+ timestamp: new Date(),
408
+ checks,
409
+ healthyCount,
410
+ unhealthyCount,
411
+ };
412
+ }
413
+ // ─────────────── Lifecycle ───────────────
414
+ /**
415
+ * Start the scheduler — begins cron checking
416
+ */
417
+ start() {
418
+ if (this.running)
419
+ return;
420
+ this.running = true;
421
+ if (this.cronJobs.size > 0) {
422
+ this._startCronTimer();
423
+ }
424
+ }
425
+ /**
426
+ * Stop the scheduler — halts all timers
427
+ */
428
+ stop() {
429
+ this.running = false;
430
+ this._stopCronTimer();
431
+ if (this.heartbeatTimer) {
432
+ clearInterval(this.heartbeatTimer);
433
+ this.heartbeatTimer = null;
434
+ }
435
+ }
436
+ /**
437
+ * Dispose of all resources
438
+ */
439
+ dispose() {
440
+ this.stop();
441
+ this.cronJobs.clear();
442
+ this.webhooks.clear();
443
+ this.subscriptions.clear();
444
+ this.removeAllListeners();
445
+ }
446
+ /**
447
+ * Get scheduler status
448
+ */
449
+ getStatus() {
450
+ return {
451
+ running: this.running,
452
+ cronJobs: this.cronJobs.size,
453
+ webhooks: this.webhooks.size,
454
+ subscriptions: this.subscriptions.size,
455
+ heartbeatActive: this.heartbeatTimer !== null,
456
+ };
457
+ }
458
+ // ─────────────── Private ───────────────
459
+ _startCronTimer() {
460
+ if (this.cronTimer)
461
+ return;
462
+ this.cronTimer = setInterval(() => {
463
+ void this._checkCronJobs();
464
+ }, this.cronCheckIntervalMs);
465
+ if (typeof this.cronTimer.unref === 'function') {
466
+ this.cronTimer.unref();
467
+ }
468
+ }
469
+ _stopCronTimer() {
470
+ if (this.cronTimer) {
471
+ clearInterval(this.cronTimer);
472
+ this.cronTimer = null;
473
+ }
474
+ }
475
+ async _checkCronJobs() {
476
+ const now = new Date();
477
+ for (const job of this.cronJobs.values()) {
478
+ if (!job.active)
479
+ continue;
480
+ if (matchesCron(job.cronExpr, now)) {
481
+ job.lastRunAt = now;
482
+ job.runCount++;
483
+ job.nextRunAt = nextCronMatch(job.cronExpr, now) ?? undefined;
484
+ // Fire and forget — don't block the timer
485
+ void this._executeTask(job.taskConfig, {
486
+ trigger: 'cron',
487
+ triggerId: job.id,
488
+ }).catch(() => {
489
+ job.errorCount++;
490
+ });
491
+ }
492
+ }
493
+ }
494
+ async _executeTask(taskConfig, partialCtx) {
495
+ const executionId = randomUUID();
496
+ const context = {
497
+ ...partialCtx,
498
+ executionId,
499
+ timestamp: new Date(),
500
+ };
501
+ // Emit started
502
+ this.emit('scheduler.task.started', {
503
+ type: 'scheduler.task.started',
504
+ data: {
505
+ executionId,
506
+ taskName: taskConfig.name,
507
+ trigger: context.trigger,
508
+ triggerId: context.triggerId,
509
+ trustLevel: taskConfig.trustLevel,
510
+ },
511
+ timestamp: context.timestamp,
512
+ });
513
+ const startMs = Date.now();
514
+ try {
515
+ const result = await this.executor(taskConfig, context);
516
+ // Emit completed or failed
517
+ if (result.success) {
518
+ this.emit('scheduler.task.completed', {
519
+ type: 'scheduler.task.completed',
520
+ data: {
521
+ executionId,
522
+ taskName: taskConfig.name,
523
+ trigger: context.trigger,
524
+ durationMs: result.durationMs,
525
+ },
526
+ timestamp: new Date(),
527
+ });
528
+ }
529
+ else {
530
+ this.emit('scheduler.task.failed', {
531
+ type: 'scheduler.task.failed',
532
+ data: {
533
+ executionId,
534
+ taskName: taskConfig.name,
535
+ trigger: context.trigger,
536
+ error: result.error,
537
+ durationMs: result.durationMs,
538
+ },
539
+ timestamp: new Date(),
540
+ });
541
+ }
542
+ return result;
543
+ }
544
+ catch (e) {
545
+ const durationMs = Date.now() - startMs;
546
+ const errorMessage = e.message;
547
+ this.emit('scheduler.task.failed', {
548
+ type: 'scheduler.task.failed',
549
+ data: {
550
+ executionId,
551
+ taskName: taskConfig.name,
552
+ trigger: context.trigger,
553
+ error: errorMessage,
554
+ durationMs,
555
+ },
556
+ timestamp: new Date(),
557
+ });
558
+ return {
559
+ success: false,
560
+ error: errorMessage,
561
+ durationMs,
562
+ };
563
+ }
564
+ }
565
+ }
566
+ // ─────────────────────────────────────────────────────────────────────────────
567
+ // Helper Functions
568
+ // ─────────────────────────────────────────────────────────────────────────────
569
+ /**
570
+ * Default task executor — returns success immediately
571
+ * Replace with actual AgentRuntime integration
572
+ */
573
+ function defaultExecutor(_taskConfig, _context) {
574
+ return Promise.resolve({
575
+ success: true,
576
+ durationMs: 0,
577
+ });
578
+ }
579
+ /**
580
+ * Timing-safe string comparison for webhook secrets
581
+ */
582
+ function safeCompare(a, b) {
583
+ if (a.length !== b.length)
584
+ return false;
585
+ try {
586
+ const bufA = Buffer.from(a, 'utf8');
587
+ const bufB = Buffer.from(b, 'utf8');
588
+ return timingSafeEqual(bufA, bufB);
589
+ }
590
+ catch {
591
+ return false;
592
+ }
593
+ }
594
+ /**
595
+ * Check if current time is within quiet hours
596
+ */
597
+ export function isInQuietHours(quietHours) {
598
+ const now = new Date();
599
+ const offset = quietHours.timezoneOffsetHours ?? 0;
600
+ const currentHour = (now.getUTCHours() + offset + 24) % 24;
601
+ if (quietHours.startHour <= quietHours.endHour) {
602
+ // Simple range: e.g., 22-06 won't hit this
603
+ return currentHour >= quietHours.startHour && currentHour < quietHours.endHour;
604
+ }
605
+ else {
606
+ // Wrapping range: e.g., 22-06 means 22,23,0,1,2,3,4,5
607
+ return currentHour >= quietHours.startHour || currentHour < quietHours.endHour;
608
+ }
609
+ }
610
+ //# sourceMappingURL=agent-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-scheduler.js","sourceRoot":"","sources":["../../../../packages/ai/src/scheduler/agent-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Scheduler Module
3
+ * @module scheduler
4
+ */
5
+ export { AgentScheduler, matchesCron, nextCronMatch, isInQuietHours, type SchedulerTrustLevel, type ScheduledTaskConfig, type CronJob, type WebhookEndpoint, type EventSubscription, type HealthCheckFn, type HealthCheckResult, type HealthReport, type QuietHours, type HeartbeatConfig, type TaskExecutor, type TaskExecutionContext, type TaskExecutionResult, type SchedulerTelemetryEvent, type WebhookRequest, type AgentSchedulerConfig, } from './agent-scheduler.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/ai/src/scheduler/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Scheduler Module
3
+ * @module scheduler
4
+ */
5
+ export { AgentScheduler, matchesCron, nextCronMatch, isInQuietHours, } from './agent-scheduler.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/ai/src/scheduler/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GAiBf,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Session Management Module
3
+ * @module session
4
+ */
5
+ export { SessionManager, OverlayMemory, TLPSessionMiddleware, RateLimiterSessionMiddleware, TrustLevelViolation, trustLevelToPolicy, isToolAllowed, type TrustLevel, type ToolPolicyMode, type SessionTool, type ToolPolicy, type SessionConfig, type SessionLifecycle, type ManagedAgentSession, type SessionMetadata, type SessionQuery, type IdleQueryOptions, type SecurityEvaluation, type SessionSecurityMiddleware, type SharedKnowledgeBase, type SessionManagerConfig, } from './session-manager.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/ai/src/session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Session Management Module
3
+ * @module session
4
+ */
5
+ export { SessionManager, OverlayMemory, TLPSessionMiddleware, RateLimiterSessionMiddleware, TrustLevelViolation, trustLevelToPolicy, isToolAllowed, } from './session-manager.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/ai/src/session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,GAed,MAAM,sBAAsB,CAAC"}