@dcyfr/ai 1.0.4 → 2.1.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 (411) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +381 -9
  3. package/dist/ai/agents/agent-loader.d.ts +12 -0
  4. package/dist/ai/agents/agent-loader.d.ts.map +1 -1
  5. package/dist/ai/agents/agent-loader.js +74 -65
  6. package/dist/ai/agents/agent-loader.js.map +1 -1
  7. package/dist/ai/agents/agent-registry.d.ts +2 -0
  8. package/dist/ai/agents/agent-registry.d.ts.map +1 -1
  9. package/dist/ai/agents/agent-registry.js +15 -14
  10. package/dist/ai/agents/agent-registry.js.map +1 -1
  11. package/dist/ai/agents/agent-router.d.ts +20 -5
  12. package/dist/ai/agents/agent-router.d.ts.map +1 -1
  13. package/dist/ai/agents/agent-router.js +89 -43
  14. package/dist/ai/agents/agent-router.js.map +1 -1
  15. package/dist/ai/agents/index.d.ts +6 -1
  16. package/dist/ai/agents/index.d.ts.map +1 -1
  17. package/dist/ai/agents/index.js +9 -3
  18. package/dist/ai/agents/index.js.map +1 -1
  19. package/dist/ai/agents/instruction-template.d.ts +45 -0
  20. package/dist/ai/agents/instruction-template.d.ts.map +1 -0
  21. package/dist/ai/agents/instruction-template.js +197 -0
  22. package/dist/ai/agents/instruction-template.js.map +1 -0
  23. package/dist/ai/agents/persona-resolver.d.ts +90 -0
  24. package/dist/ai/agents/persona-resolver.d.ts.map +1 -0
  25. package/dist/ai/agents/persona-resolver.js +121 -0
  26. package/dist/ai/agents/persona-resolver.js.map +1 -0
  27. package/dist/ai/agents/schema.d.ts +166 -0
  28. package/dist/ai/agents/schema.d.ts.map +1 -0
  29. package/dist/ai/agents/schema.js +94 -0
  30. package/dist/ai/agents/schema.js.map +1 -0
  31. package/dist/ai/agents/types.d.ts +102 -0
  32. package/dist/ai/agents/types.d.ts.map +1 -1
  33. package/dist/ai/agents-builtin/architecture/index.js +3 -3
  34. package/dist/ai/agents-builtin/content/index.js +1 -1
  35. package/dist/ai/agents-builtin/data/index.js +1 -1
  36. package/dist/ai/agents-builtin/development/index.js +4 -4
  37. package/dist/ai/agents-builtin/devops/index.js +1 -1
  38. package/dist/ai/agents-builtin/index.js +33 -33
  39. package/dist/ai/agents-builtin/performance/index.js +1 -1
  40. package/dist/ai/agents-builtin/research/index.js +1 -1
  41. package/dist/ai/agents-builtin/security/index.js +1 -1
  42. package/dist/ai/agents-builtin/testing/index.js +2 -2
  43. package/dist/ai/config/loader.d.ts.map +1 -1
  44. package/dist/ai/config/loader.js +6 -3
  45. package/dist/ai/config/loader.js.map +1 -1
  46. package/dist/ai/config/schema.d.ts +242 -1156
  47. package/dist/ai/config/schema.d.ts.map +1 -1
  48. package/dist/ai/config/schema.js +69 -20
  49. package/dist/ai/config/schema.js.map +1 -1
  50. package/dist/ai/core/provider-registry.d.ts +32 -0
  51. package/dist/ai/core/provider-registry.d.ts.map +1 -1
  52. package/dist/ai/core/provider-registry.js +189 -14
  53. package/dist/ai/core/provider-registry.js.map +1 -1
  54. package/dist/ai/core/telemetry-engine.d.ts +26 -0
  55. package/dist/ai/core/telemetry-engine.d.ts.map +1 -1
  56. package/dist/ai/core/telemetry-engine.js +81 -1
  57. package/dist/ai/core/telemetry-engine.js.map +1 -1
  58. package/dist/ai/delegation/agent-registry.d.ts +143 -0
  59. package/dist/ai/delegation/agent-registry.d.ts.map +1 -0
  60. package/dist/ai/delegation/agent-registry.js +231 -0
  61. package/dist/ai/delegation/agent-registry.js.map +1 -0
  62. package/dist/ai/delegation/blast-radius-tracker.d.ts +65 -0
  63. package/dist/ai/delegation/blast-radius-tracker.d.ts.map +1 -0
  64. package/dist/ai/delegation/blast-radius-tracker.js +81 -0
  65. package/dist/ai/delegation/blast-radius-tracker.js.map +1 -0
  66. package/dist/ai/delegation/capability-bootstrap.d.ts +40 -0
  67. package/dist/ai/delegation/capability-bootstrap.d.ts.map +1 -0
  68. package/dist/ai/delegation/capability-bootstrap.js +431 -0
  69. package/dist/ai/delegation/capability-bootstrap.js.map +1 -0
  70. package/dist/ai/delegation/capability-registry.d.ts +81 -0
  71. package/dist/ai/delegation/capability-registry.d.ts.map +1 -0
  72. package/dist/ai/delegation/capability-registry.js +339 -0
  73. package/dist/ai/delegation/capability-registry.js.map +1 -0
  74. package/dist/ai/delegation/chain-tracker.d.ts +152 -0
  75. package/dist/ai/delegation/chain-tracker.d.ts.map +1 -0
  76. package/dist/ai/delegation/chain-tracker.js +336 -0
  77. package/dist/ai/delegation/chain-tracker.js.map +1 -0
  78. package/dist/ai/delegation/circuit-breaker.d.ts +59 -0
  79. package/dist/ai/delegation/circuit-breaker.d.ts.map +1 -0
  80. package/dist/ai/delegation/circuit-breaker.js +153 -0
  81. package/dist/ai/delegation/circuit-breaker.js.map +1 -0
  82. package/dist/ai/delegation/contract-manager.d.ts +415 -0
  83. package/dist/ai/delegation/contract-manager.d.ts.map +1 -0
  84. package/dist/ai/delegation/contract-manager.js +1258 -0
  85. package/dist/ai/delegation/contract-manager.js.map +1 -0
  86. package/dist/ai/delegation/delegation-manager.d.ts +505 -0
  87. package/dist/ai/delegation/delegation-manager.d.ts.map +1 -0
  88. package/dist/ai/delegation/delegation-manager.js +773 -0
  89. package/dist/ai/delegation/delegation-manager.js.map +1 -0
  90. package/dist/ai/delegation/event-schemas.d.ts +101 -0
  91. package/dist/ai/delegation/event-schemas.d.ts.map +1 -0
  92. package/dist/ai/delegation/event-schemas.js +59 -0
  93. package/dist/ai/delegation/event-schemas.js.map +1 -0
  94. package/dist/ai/delegation/execution-mode-dashboard.d.ts +109 -0
  95. package/dist/ai/delegation/execution-mode-dashboard.d.ts.map +1 -0
  96. package/dist/ai/delegation/execution-mode-dashboard.js +167 -0
  97. package/dist/ai/delegation/execution-mode-dashboard.js.map +1 -0
  98. package/dist/ai/delegation/feature-flags.d.ts +191 -0
  99. package/dist/ai/delegation/feature-flags.d.ts.map +1 -0
  100. package/dist/ai/delegation/feature-flags.js +332 -0
  101. package/dist/ai/delegation/feature-flags.js.map +1 -0
  102. package/dist/ai/delegation/index.d.ts +51 -0
  103. package/dist/ai/delegation/index.d.ts.map +1 -0
  104. package/dist/ai/delegation/index.js +39 -0
  105. package/dist/ai/delegation/index.js.map +1 -0
  106. package/dist/ai/delegation/middleware/chain-depth-middleware.d.ts +39 -0
  107. package/dist/ai/delegation/middleware/chain-depth-middleware.d.ts.map +1 -0
  108. package/dist/ai/delegation/middleware/chain-depth-middleware.js +77 -0
  109. package/dist/ai/delegation/middleware/chain-depth-middleware.js.map +1 -0
  110. package/dist/ai/delegation/middleware/chain-tracker-middleware.d.ts +46 -0
  111. package/dist/ai/delegation/middleware/chain-tracker-middleware.d.ts.map +1 -0
  112. package/dist/ai/delegation/middleware/chain-tracker-middleware.js +89 -0
  113. package/dist/ai/delegation/middleware/chain-tracker-middleware.js.map +1 -0
  114. package/dist/ai/delegation/middleware/content-policy-middleware.d.ts +31 -0
  115. package/dist/ai/delegation/middleware/content-policy-middleware.d.ts.map +1 -0
  116. package/dist/ai/delegation/middleware/content-policy-middleware.js +82 -0
  117. package/dist/ai/delegation/middleware/content-policy-middleware.js.map +1 -0
  118. package/dist/ai/delegation/middleware/feature-flag-middleware.d.ts +46 -0
  119. package/dist/ai/delegation/middleware/feature-flag-middleware.d.ts.map +1 -0
  120. package/dist/ai/delegation/middleware/feature-flag-middleware.js +59 -0
  121. package/dist/ai/delegation/middleware/feature-flag-middleware.js.map +1 -0
  122. package/dist/ai/delegation/middleware/identity-middleware.d.ts +23 -0
  123. package/dist/ai/delegation/middleware/identity-middleware.d.ts.map +1 -0
  124. package/dist/ai/delegation/middleware/identity-middleware.js +64 -0
  125. package/dist/ai/delegation/middleware/identity-middleware.js.map +1 -0
  126. package/dist/ai/delegation/middleware/permissions-middleware.d.ts +48 -0
  127. package/dist/ai/delegation/middleware/permissions-middleware.d.ts.map +1 -0
  128. package/dist/ai/delegation/middleware/permissions-middleware.js +107 -0
  129. package/dist/ai/delegation/middleware/permissions-middleware.js.map +1 -0
  130. package/dist/ai/delegation/middleware/rate-limiter-middleware.d.ts +38 -0
  131. package/dist/ai/delegation/middleware/rate-limiter-middleware.d.ts.map +1 -0
  132. package/dist/ai/delegation/middleware/rate-limiter-middleware.js +65 -0
  133. package/dist/ai/delegation/middleware/rate-limiter-middleware.js.map +1 -0
  134. package/dist/ai/delegation/middleware/reputation-middleware.d.ts +39 -0
  135. package/dist/ai/delegation/middleware/reputation-middleware.d.ts.map +1 -0
  136. package/dist/ai/delegation/middleware/reputation-middleware.js +75 -0
  137. package/dist/ai/delegation/middleware/reputation-middleware.js.map +1 -0
  138. package/dist/ai/delegation/middleware/resource-limiter-middleware.d.ts +52 -0
  139. package/dist/ai/delegation/middleware/resource-limiter-middleware.d.ts.map +1 -0
  140. package/dist/ai/delegation/middleware/resource-limiter-middleware.js +112 -0
  141. package/dist/ai/delegation/middleware/resource-limiter-middleware.js.map +1 -0
  142. package/dist/ai/delegation/middleware/threat-validator-middleware.d.ts +23 -0
  143. package/dist/ai/delegation/middleware/threat-validator-middleware.d.ts.map +1 -0
  144. package/dist/ai/delegation/middleware/threat-validator-middleware.js +83 -0
  145. package/dist/ai/delegation/middleware/threat-validator-middleware.js.map +1 -0
  146. package/dist/ai/delegation/middleware/tlp-middleware.d.ts +23 -0
  147. package/dist/ai/delegation/middleware/tlp-middleware.d.ts.map +1 -0
  148. package/dist/ai/delegation/middleware/tlp-middleware.js +59 -0
  149. package/dist/ai/delegation/middleware/tlp-middleware.js.map +1 -0
  150. package/dist/ai/delegation/monitoring.d.ts +298 -0
  151. package/dist/ai/delegation/monitoring.d.ts.map +1 -0
  152. package/dist/ai/delegation/monitoring.js +584 -0
  153. package/dist/ai/delegation/monitoring.js.map +1 -0
  154. package/dist/ai/delegation/security-middleware-chain.d.ts +71 -0
  155. package/dist/ai/delegation/security-middleware-chain.d.ts.map +1 -0
  156. package/dist/ai/delegation/security-middleware-chain.js +163 -0
  157. package/dist/ai/delegation/security-middleware-chain.js.map +1 -0
  158. package/dist/ai/delegation/session-checkpoint.d.ts +77 -0
  159. package/dist/ai/delegation/session-checkpoint.d.ts.map +1 -0
  160. package/dist/ai/delegation/session-checkpoint.js +131 -0
  161. package/dist/ai/delegation/session-checkpoint.js.map +1 -0
  162. package/dist/ai/delegation/session-manager.d.ts +131 -0
  163. package/dist/ai/delegation/session-manager.d.ts.map +1 -0
  164. package/dist/ai/delegation/session-manager.js +243 -0
  165. package/dist/ai/delegation/session-manager.js.map +1 -0
  166. package/dist/ai/delegation/session-queue.d.ts +95 -0
  167. package/dist/ai/delegation/session-queue.d.ts.map +1 -0
  168. package/dist/ai/delegation/session-queue.js +136 -0
  169. package/dist/ai/delegation/session-queue.js.map +1 -0
  170. package/dist/ai/delegation/timeout-watchdog.d.ts +60 -0
  171. package/dist/ai/delegation/timeout-watchdog.d.ts.map +1 -0
  172. package/dist/ai/delegation/timeout-watchdog.js +100 -0
  173. package/dist/ai/delegation/timeout-watchdog.js.map +1 -0
  174. package/dist/ai/examples/integration-demo.d.ts +27 -0
  175. package/dist/ai/examples/integration-demo.d.ts.map +1 -0
  176. package/dist/ai/examples/integration-demo.js +536 -0
  177. package/dist/ai/examples/integration-demo.js.map +1 -0
  178. package/dist/ai/index.d.ts +25 -0
  179. package/dist/ai/index.d.ts.map +1 -1
  180. package/dist/ai/index.js +31 -11
  181. package/dist/ai/index.js.map +1 -1
  182. package/dist/ai/mcp/servers/analytics/index.js +67 -11
  183. package/dist/ai/mcp/servers/analytics/index.js.map +1 -1
  184. package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -1
  185. package/dist/ai/mcp/servers/content-manager/index.js +50 -4
  186. package/dist/ai/mcp/servers/content-manager/index.js.map +1 -1
  187. package/dist/ai/mcp/servers/delegation-monitor/index.d.ts +36 -0
  188. package/dist/ai/mcp/servers/delegation-monitor/index.d.ts.map +1 -0
  189. package/dist/ai/mcp/servers/delegation-monitor/index.js +757 -0
  190. package/dist/ai/mcp/servers/delegation-monitor/index.js.map +1 -0
  191. package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -1
  192. package/dist/ai/mcp/servers/design-tokens/index.js +62 -39
  193. package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -1
  194. package/dist/ai/mcp/servers/promptintel/index.js +15 -3
  195. package/dist/ai/mcp/servers/promptintel/index.js.map +1 -1
  196. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -1
  197. package/dist/ai/mcp/servers/shared/rate-limiter.js +3 -1
  198. package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -1
  199. package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -1
  200. package/dist/ai/mcp/servers/shared/redis-client.js +54 -47
  201. package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -1
  202. package/dist/ai/mcp/servers/shared/types.d.ts +9 -0
  203. package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -1
  204. package/dist/ai/mcp/servers/shared/utils.d.ts +9 -1
  205. package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -1
  206. package/dist/ai/mcp/servers/shared/utils.js +52 -2
  207. package/dist/ai/mcp/servers/shared/utils.js.map +1 -1
  208. package/dist/ai/memory/config.d.ts +18 -3
  209. package/dist/ai/memory/config.d.ts.map +1 -1
  210. package/dist/ai/memory/config.js +61 -15
  211. package/dist/ai/memory/config.js.map +1 -1
  212. package/dist/ai/memory/dcyfr-memory.d.ts +4 -0
  213. package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -1
  214. package/dist/ai/memory/dcyfr-memory.js +44 -6
  215. package/dist/ai/memory/dcyfr-memory.js.map +1 -1
  216. package/dist/ai/memory/mem0-client.d.ts.map +1 -1
  217. package/dist/ai/memory/mem0-client.js +53 -14
  218. package/dist/ai/memory/mem0-client.js.map +1 -1
  219. package/dist/ai/permissions/attenuation-engine.d.ts +159 -0
  220. package/dist/ai/permissions/attenuation-engine.d.ts.map +1 -0
  221. package/dist/ai/permissions/attenuation-engine.js +511 -0
  222. package/dist/ai/permissions/attenuation-engine.js.map +1 -0
  223. package/dist/ai/plugins/plugin-loader.d.ts +4 -0
  224. package/dist/ai/plugins/plugin-loader.d.ts.map +1 -1
  225. package/dist/ai/plugins/plugin-loader.js +28 -28
  226. package/dist/ai/plugins/plugin-loader.js.map +1 -1
  227. package/dist/ai/reputation/execution-mode-reputation.d.ts +104 -0
  228. package/dist/ai/reputation/execution-mode-reputation.d.ts.map +1 -0
  229. package/dist/ai/reputation/execution-mode-reputation.js +142 -0
  230. package/dist/ai/reputation/execution-mode-reputation.js.map +1 -0
  231. package/dist/ai/reputation/reputation-engine.d.ts +204 -0
  232. package/dist/ai/reputation/reputation-engine.d.ts.map +1 -0
  233. package/dist/ai/reputation/reputation-engine.js +426 -0
  234. package/dist/ai/reputation/reputation-engine.js.map +1 -0
  235. package/dist/ai/runtime/agent-runtime.d.ts +193 -0
  236. package/dist/ai/runtime/agent-runtime.d.ts.map +1 -0
  237. package/dist/ai/runtime/agent-runtime.js +1009 -0
  238. package/dist/ai/runtime/agent-runtime.js.map +1 -0
  239. package/dist/ai/runtime/index.d.ts +11 -0
  240. package/dist/ai/runtime/index.d.ts.map +1 -0
  241. package/dist/ai/runtime/index.js +9 -0
  242. package/dist/ai/runtime/index.js.map +1 -0
  243. package/dist/ai/runtime/telemetry-schema.d.ts +192 -0
  244. package/dist/ai/runtime/telemetry-schema.d.ts.map +1 -0
  245. package/dist/ai/runtime/telemetry-schema.js +200 -0
  246. package/dist/ai/runtime/telemetry-schema.js.map +1 -0
  247. package/dist/ai/runtime/types.d.ts +236 -0
  248. package/dist/ai/runtime/types.d.ts.map +1 -0
  249. package/dist/ai/runtime/types.js +10 -0
  250. package/dist/ai/runtime/types.js.map +1 -0
  251. package/dist/ai/src/batch-processor.d.ts +298 -0
  252. package/dist/ai/src/batch-processor.d.ts.map +1 -0
  253. package/dist/ai/src/batch-processor.js +520 -0
  254. package/dist/ai/src/batch-processor.js.map +1 -0
  255. package/dist/ai/src/capability-bootstrap.d.ts +222 -0
  256. package/dist/ai/src/capability-bootstrap.d.ts.map +1 -0
  257. package/dist/ai/src/capability-bootstrap.js +421 -0
  258. package/dist/ai/src/capability-bootstrap.js.map +1 -0
  259. package/dist/ai/src/capability-manifest-generator.d.ts +52 -0
  260. package/dist/ai/src/capability-manifest-generator.d.ts.map +1 -0
  261. package/dist/ai/src/capability-manifest-generator.js +691 -0
  262. package/dist/ai/src/capability-manifest-generator.js.map +1 -0
  263. package/dist/ai/src/capability-registry.d.ts +157 -0
  264. package/dist/ai/src/capability-registry.d.ts.map +1 -0
  265. package/dist/ai/src/capability-registry.js +577 -0
  266. package/dist/ai/src/capability-registry.js.map +1 -0
  267. package/dist/ai/src/cli/telemetry-dashboard.d.ts +132 -0
  268. package/dist/ai/src/cli/telemetry-dashboard.d.ts.map +1 -0
  269. package/dist/ai/src/cli/telemetry-dashboard.js +565 -0
  270. package/dist/ai/src/cli/telemetry-dashboard.js.map +1 -0
  271. package/dist/ai/src/delegation/feature-flags.d.ts +213 -0
  272. package/dist/ai/src/delegation/feature-flags.d.ts.map +1 -0
  273. package/dist/ai/src/delegation/feature-flags.js +395 -0
  274. package/dist/ai/src/delegation/feature-flags.js.map +1 -0
  275. package/dist/ai/src/delegation/liability-firebreak.d.ts +303 -0
  276. package/dist/ai/src/delegation/liability-firebreak.d.ts.map +1 -0
  277. package/dist/ai/src/delegation/liability-firebreak.js +643 -0
  278. package/dist/ai/src/delegation/liability-firebreak.js.map +1 -0
  279. package/dist/ai/src/delegation/security-threat-model.d.ts +171 -0
  280. package/dist/ai/src/delegation/security-threat-model.d.ts.map +1 -0
  281. package/dist/ai/src/delegation/security-threat-model.js +723 -0
  282. package/dist/ai/src/delegation/security-threat-model.js.map +1 -0
  283. package/dist/ai/src/delegation/tlp-enforcement.d.ts +146 -0
  284. package/dist/ai/src/delegation/tlp-enforcement.d.ts.map +1 -0
  285. package/dist/ai/src/delegation/tlp-enforcement.js +382 -0
  286. package/dist/ai/src/delegation/tlp-enforcement.js.map +1 -0
  287. package/dist/ai/src/delegation-capability-integration.d.ts +154 -0
  288. package/dist/ai/src/delegation-capability-integration.d.ts.map +1 -0
  289. package/dist/ai/src/delegation-capability-integration.js +351 -0
  290. package/dist/ai/src/delegation-capability-integration.js.map +1 -0
  291. package/dist/ai/src/end-to-end-workflow-orchestrator.d.ts +325 -0
  292. package/dist/ai/src/end-to-end-workflow-orchestrator.d.ts.map +1 -0
  293. package/dist/ai/src/end-to-end-workflow-orchestrator.js +801 -0
  294. package/dist/ai/src/end-to-end-workflow-orchestrator.js.map +1 -0
  295. package/dist/ai/src/enhanced-capability-detection.d.ts +237 -0
  296. package/dist/ai/src/enhanced-capability-detection.d.ts.map +1 -0
  297. package/dist/ai/src/enhanced-capability-detection.js +448 -0
  298. package/dist/ai/src/enhanced-capability-detection.js.map +1 -0
  299. package/dist/ai/src/intelligent-cache-manager.d.ts +327 -0
  300. package/dist/ai/src/intelligent-cache-manager.d.ts.map +1 -0
  301. package/dist/ai/src/intelligent-cache-manager.js +634 -0
  302. package/dist/ai/src/intelligent-cache-manager.js.map +1 -0
  303. package/dist/ai/src/mcp-auto-configuration.d.ts +232 -0
  304. package/dist/ai/src/mcp-auto-configuration.d.ts.map +1 -0
  305. package/dist/ai/src/mcp-auto-configuration.js +445 -0
  306. package/dist/ai/src/mcp-auto-configuration.js.map +1 -0
  307. package/dist/ai/src/performance-profiler.d.ts +351 -0
  308. package/dist/ai/src/performance-profiler.d.ts.map +1 -0
  309. package/dist/ai/src/performance-profiler.js +475 -0
  310. package/dist/ai/src/performance-profiler.js.map +1 -0
  311. package/dist/ai/src/personas/hooks/before-llm-call.d.ts +96 -0
  312. package/dist/ai/src/personas/hooks/before-llm-call.d.ts.map +1 -0
  313. package/dist/ai/src/personas/hooks/before-llm-call.js +83 -0
  314. package/dist/ai/src/personas/hooks/before-llm-call.js.map +1 -0
  315. package/dist/ai/src/personas/index.d.ts +10 -0
  316. package/dist/ai/src/personas/index.d.ts.map +1 -0
  317. package/dist/ai/src/personas/index.js +10 -0
  318. package/dist/ai/src/personas/index.js.map +1 -0
  319. package/dist/ai/src/personas/persona-loader.d.ts +42 -0
  320. package/dist/ai/src/personas/persona-loader.d.ts.map +1 -0
  321. package/dist/ai/src/personas/persona-loader.js +162 -0
  322. package/dist/ai/src/personas/persona-loader.js.map +1 -0
  323. package/dist/ai/src/personas/types.d.ts +199 -0
  324. package/dist/ai/src/personas/types.d.ts.map +1 -0
  325. package/dist/ai/src/personas/types.js +7 -0
  326. package/dist/ai/src/personas/types.js.map +1 -0
  327. package/dist/ai/src/personas/voice-resolver.d.ts +40 -0
  328. package/dist/ai/src/personas/voice-resolver.d.ts.map +1 -0
  329. package/dist/ai/src/personas/voice-resolver.js +201 -0
  330. package/dist/ai/src/personas/voice-resolver.js.map +1 -0
  331. package/dist/ai/src/resource-monitor.d.ts +311 -0
  332. package/dist/ai/src/resource-monitor.d.ts.map +1 -0
  333. package/dist/ai/src/resource-monitor.js +475 -0
  334. package/dist/ai/src/resource-monitor.js.map +1 -0
  335. package/dist/ai/src/runtime/agent-runtime.d.ts +340 -0
  336. package/dist/ai/src/runtime/agent-runtime.d.ts.map +1 -0
  337. package/dist/ai/src/runtime/agent-runtime.js +1084 -0
  338. package/dist/ai/src/runtime/agent-runtime.js.map +1 -0
  339. package/dist/ai/src/telemetry/delegation-telemetry.d.ts +287 -0
  340. package/dist/ai/src/telemetry/delegation-telemetry.d.ts.map +1 -0
  341. package/dist/ai/src/telemetry/delegation-telemetry.js +389 -0
  342. package/dist/ai/src/telemetry/delegation-telemetry.js.map +1 -0
  343. package/dist/ai/src/telemetry/index.d.ts +48 -0
  344. package/dist/ai/src/telemetry/index.d.ts.map +1 -0
  345. package/dist/ai/src/telemetry/index.js +48 -0
  346. package/dist/ai/src/telemetry/index.js.map +1 -0
  347. package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts +67 -0
  348. package/dist/ai/src/telemetry/runtime-telemetry-integration.d.ts.map +1 -0
  349. package/dist/ai/src/telemetry/runtime-telemetry-integration.js +415 -0
  350. package/dist/ai/src/telemetry/runtime-telemetry-integration.js.map +1 -0
  351. package/dist/ai/src/telemetry/telemetry-utils.d.ts +119 -0
  352. package/dist/ai/src/telemetry/telemetry-utils.d.ts.map +1 -0
  353. package/dist/ai/src/telemetry/telemetry-utils.js +250 -0
  354. package/dist/ai/src/telemetry/telemetry-utils.js.map +1 -0
  355. package/dist/ai/src/types/agent-capabilities.d.ts +227 -0
  356. package/dist/ai/src/types/agent-capabilities.d.ts.map +1 -0
  357. package/dist/ai/src/types/agent-capabilities.js +11 -0
  358. package/dist/ai/src/types/agent-capabilities.js.map +1 -0
  359. package/dist/ai/src/types/context-verification.d.ts +158 -0
  360. package/dist/ai/src/types/context-verification.d.ts.map +1 -0
  361. package/dist/ai/src/types/context-verification.js +73 -0
  362. package/dist/ai/src/types/context-verification.js.map +1 -0
  363. package/dist/ai/src/types/delegation-contracts.d.ts +296 -0
  364. package/dist/ai/src/types/delegation-contracts.d.ts.map +1 -0
  365. package/dist/ai/src/types/delegation-contracts.js +17 -0
  366. package/dist/ai/src/types/delegation-contracts.js.map +1 -0
  367. package/dist/ai/src/validation-pipeline-integration.d.ts +266 -0
  368. package/dist/ai/src/validation-pipeline-integration.d.ts.map +1 -0
  369. package/dist/ai/src/validation-pipeline-integration.js +695 -0
  370. package/dist/ai/src/validation-pipeline-integration.js.map +1 -0
  371. package/dist/ai/src/verification/multi-modal-formatters.d.ts +57 -0
  372. package/dist/ai/src/verification/multi-modal-formatters.d.ts.map +1 -0
  373. package/dist/ai/src/verification/multi-modal-formatters.js +655 -0
  374. package/dist/ai/src/verification/multi-modal-formatters.js.map +1 -0
  375. package/dist/ai/src/verification/output-formatter.d.ts +186 -0
  376. package/dist/ai/src/verification/output-formatter.d.ts.map +1 -0
  377. package/dist/ai/src/verification/output-formatter.js +296 -0
  378. package/dist/ai/src/verification/output-formatter.js.map +1 -0
  379. package/dist/ai/src/verification/parser-integration.d.ts +137 -0
  380. package/dist/ai/src/verification/parser-integration.d.ts.map +1 -0
  381. package/dist/ai/src/verification/parser-integration.js +273 -0
  382. package/dist/ai/src/verification/parser-integration.js.map +1 -0
  383. package/dist/ai/types/agent-capabilities.d.ts +387 -0
  384. package/dist/ai/types/agent-capabilities.d.ts.map +1 -0
  385. package/dist/ai/types/agent-capabilities.js +32 -0
  386. package/dist/ai/types/agent-capabilities.js.map +1 -0
  387. package/dist/ai/types/delegation-contracts.d.ts +291 -0
  388. package/dist/ai/types/delegation-contracts.d.ts.map +1 -0
  389. package/dist/ai/types/delegation-contracts.js +14 -0
  390. package/dist/ai/types/delegation-contracts.js.map +1 -0
  391. package/dist/ai/types/index.d.ts +4 -1
  392. package/dist/ai/types/index.d.ts.map +1 -1
  393. package/dist/ai/types/index.js +4 -1
  394. package/dist/ai/types/index.js.map +1 -1
  395. package/dist/ai/types/permission-tokens.d.ts +365 -0
  396. package/dist/ai/types/permission-tokens.d.ts.map +1 -0
  397. package/dist/ai/types/permission-tokens.js +13 -0
  398. package/dist/ai/types/permission-tokens.js.map +1 -0
  399. package/dist/ai/types/security-middleware.d.ts +130 -0
  400. package/dist/ai/types/security-middleware.d.ts.map +1 -0
  401. package/dist/ai/types/security-middleware.js +13 -0
  402. package/dist/ai/types/security-middleware.js.map +1 -0
  403. package/dist/ai/utils/storage.d.ts.map +1 -1
  404. package/dist/ai/utils/storage.js +6 -3
  405. package/dist/ai/utils/storage.js.map +1 -1
  406. package/dist/ai/validation/validation-framework.js +1 -1
  407. package/dist/ai/verification/policy-framework.d.ts +161 -0
  408. package/dist/ai/verification/policy-framework.d.ts.map +1 -0
  409. package/dist/ai/verification/policy-framework.js +436 -0
  410. package/dist/ai/verification/policy-framework.js.map +1 -0
  411. package/package.json +35 -7
@@ -0,0 +1,336 @@
1
+ /**
2
+ * DCYFR Delegation Chain Tracker
3
+ * TLP:AMBER - Internal Use Only
4
+ *
5
+ * Tracks multi-hop delegation chains with loop detection and liability firebreaks.
6
+ * Implements accountability boundaries to prevent unlimited delegation depth.
7
+ *
8
+ * @module delegation/chain-tracker
9
+ * @version 1.0.0
10
+ * @date 2026-02-13
11
+ */
12
+ /**
13
+ * Delegation Chain Tracker
14
+ *
15
+ * Builds and analyzes delegation chains with loop detection and firebreak identification.
16
+ */
17
+ export class DelegationChainTracker {
18
+ config;
19
+ contractManager;
20
+ constructor(contractManager, config = {}) {
21
+ this.contractManager = contractManager;
22
+ this.config = {
23
+ maxChainDepth: 10,
24
+ debug: false,
25
+ ...config,
26
+ };
27
+ }
28
+ /**
29
+ * Build a delegation chain from a contract
30
+ */
31
+ async buildChain(contractId) {
32
+ const chain = [];
33
+ const visited = new Set();
34
+ let current = this.contractManager.getContract(contractId);
35
+ if (!current) {
36
+ throw new Error(`Contract not found: ${contractId}`);
37
+ }
38
+ // Build chain from leaf to root
39
+ while (current) {
40
+ if (visited.has(current.contract_id)) {
41
+ // Loop detected
42
+ break;
43
+ }
44
+ chain.unshift(current); // Add to beginning (root to leaf order)
45
+ visited.add(current.contract_id);
46
+ if (current.parent_contract_id) {
47
+ current = this.contractManager.getContract(current.parent_contract_id);
48
+ }
49
+ else {
50
+ break; // Reached root
51
+ }
52
+ }
53
+ const hasLoops = await this.detectLoops(chain);
54
+ const firebreakContracts = this.identifyFirebreaks(chain);
55
+ return {
56
+ chain_id: `chain-${contractId}`,
57
+ contracts: chain,
58
+ depth: chain.length,
59
+ has_loops: hasLoops,
60
+ firebreak_contracts: firebreakContracts,
61
+ created_at: new Date().toISOString(),
62
+ };
63
+ }
64
+ /**
65
+ * Analyze a delegation chain for validity
66
+ */
67
+ async analyzeChain(contractId) {
68
+ const errors = [];
69
+ const warnings = [];
70
+ const contractIds = [];
71
+ try {
72
+ const chain = await this.buildChain(contractId);
73
+ // Track all contract IDs
74
+ chain.contracts.forEach(c => contractIds.push(c.contract_id));
75
+ // Check max depth
76
+ if (chain.depth > (this.config.maxChainDepth ?? 10)) {
77
+ errors.push(`Chain depth ${chain.depth} exceeds maximum ${this.config.maxChainDepth}`);
78
+ }
79
+ // Detect loops
80
+ const loops = await this.findLoops(chain.contracts);
81
+ const hasLoops = loops.length > 0;
82
+ if (hasLoops) {
83
+ errors.push(`Chain contains ${loops.length} loop(s)`);
84
+ }
85
+ // Identify firebreaks
86
+ const firebreakContracts = this.identifyFirebreaks(chain.contracts);
87
+ // Validate delegation depth consistency
88
+ for (let i = 0; i < chain.contracts.length; i++) {
89
+ const contract = chain.contracts[i];
90
+ if (contract.delegation_depth !== i) {
91
+ warnings.push(`Contract ${contract.contract_id} has incorrect depth ${contract.delegation_depth}, expected ${i}`);
92
+ }
93
+ }
94
+ // Check for permission attenuation
95
+ const permissionViolations = this.checkPermissionAttenuation(chain.contracts);
96
+ if (permissionViolations.length > 0) {
97
+ warnings.push(...permissionViolations);
98
+ }
99
+ if (this.config.debug) {
100
+ console.log(`[ChainTracker] Analyzed chain ${chain.chain_id}: depth=${chain.depth}, loops=${hasLoops}, firebreaks=${firebreakContracts.length}`);
101
+ }
102
+ return {
103
+ valid: errors.length === 0,
104
+ depth: chain.depth,
105
+ has_loops: hasLoops,
106
+ loops: hasLoops ? loops : undefined,
107
+ firebreak_contracts: firebreakContracts,
108
+ contract_ids: contractIds,
109
+ errors: errors.length > 0 ? errors : undefined,
110
+ warnings: warnings.length > 0 ? warnings : undefined,
111
+ };
112
+ }
113
+ catch (error) {
114
+ const errorMessage = error instanceof Error ? error.message : String(error);
115
+ return {
116
+ valid: false,
117
+ depth: 0,
118
+ has_loops: false,
119
+ firebreak_contracts: [],
120
+ contract_ids: contractIds,
121
+ errors: [errorMessage],
122
+ };
123
+ }
124
+ }
125
+ /**
126
+ * Detect if a chain contains loops
127
+ */
128
+ async detectLoops(contracts) {
129
+ const seen = new Set();
130
+ for (const contract of contracts) {
131
+ if (seen.has(contract.contract_id)) {
132
+ return true; // Loop detected
133
+ }
134
+ seen.add(contract.contract_id);
135
+ }
136
+ return false;
137
+ }
138
+ /**
139
+ * Find all loops in a chain
140
+ */
141
+ async findLoops(contracts) {
142
+ const loops = [];
143
+ const agentsSeen = new Map(); // agent_id -> first occurrence index
144
+ for (let i = 0; i < contracts.length; i++) {
145
+ const contract = contracts[i];
146
+ const delegatee = contract.delegatee.agent_id;
147
+ // Check if this delegatee has already appeared as a delegator or delegatee earlier in the chain
148
+ if (agentsSeen.has(delegatee)) {
149
+ // Loop detected - agent is reappearing
150
+ const loopStart = agentsSeen.get(delegatee);
151
+ const loopContracts = contracts.slice(loopStart, i + 1).map(c => c.contract_id);
152
+ loops.push({
153
+ contracts: loopContracts,
154
+ entry_contract_id: contracts[loopStart].contract_id,
155
+ description: `Agent loop detected: ${delegatee} reappears in delegation chain`,
156
+ });
157
+ }
158
+ // Track both delegator and delegatee
159
+ agentsSeen.set(contract.delegator.agent_id, i);
160
+ agentsSeen.set(delegatee, i);
161
+ }
162
+ return loops;
163
+ }
164
+ /**
165
+ * Identify liability firebreak contracts
166
+ *
167
+ * Firebreaks are accountability boundaries where delegation chains
168
+ * should have heightened verification or require human approval.
169
+ */
170
+ identifyFirebreaks(contracts) {
171
+ const firebreaks = [];
172
+ for (let i = 0; i < contracts.length; i++) {
173
+ const contract = contracts[i];
174
+ // Criteria for firebreaks:
175
+ // 1. Human verification required
176
+ if (contract.verification_policy === 'human_required') {
177
+ firebreaks.push(contract.contract_id);
178
+ continue;
179
+ }
180
+ // 2. TLP:AMBER or TLP:RED classification
181
+ if (contract.tlp_classification === 'AMBER' || contract.tlp_classification === 'RED') {
182
+ firebreaks.push(contract.contract_id);
183
+ continue;
184
+ }
185
+ // 3. Depth threshold (every 3rd level)
186
+ if ((contract.delegation_depth || 0) > 0 && (contract.delegation_depth || 0) % 3 === 0) {
187
+ firebreaks.push(contract.contract_id);
188
+ continue;
189
+ }
190
+ // 4. Critical verification policies
191
+ if (contract.verification_policy === 'cryptographic_proof') {
192
+ firebreaks.push(contract.contract_id);
193
+ continue;
194
+ }
195
+ }
196
+ return firebreaks;
197
+ }
198
+ /**
199
+ * Check for proper permission attenuation in chain
200
+ *
201
+ * Permissions should only decrease (or stay the same) as delegation depth increases.
202
+ */
203
+ isScopeGrantedByParent(scope, parentScopes) {
204
+ for (const parentScope of parentScopes) {
205
+ if (scope.startsWith(parentScope) || scope === parentScope) {
206
+ return true;
207
+ }
208
+ }
209
+ return false;
210
+ }
211
+ checkPermissionAttenuation(contracts) {
212
+ const violations = [];
213
+ for (let i = 1; i < contracts.length; i++) {
214
+ const parent = contracts[i - 1];
215
+ const child = contracts[i];
216
+ // Check if child has more permissions than parent
217
+ const parentTokens = parent.permission_tokens;
218
+ const childTokens = child.permission_tokens;
219
+ if (parentTokens && parentTokens.length > 0 && childTokens && childTokens.length > 0) {
220
+ const parentScopes = new Set(parentTokens[0].scopes || []);
221
+ const childScopes = childTokens[0].scopes || [];
222
+ for (const scope of childScopes) {
223
+ if (!this.isScopeGrantedByParent(scope, parentScopes)) {
224
+ violations.push(`Contract ${child.contract_id} has scope '${scope}' not granted by parent ${parent.contract_id}`);
225
+ }
226
+ }
227
+ }
228
+ }
229
+ return violations;
230
+ }
231
+ /**
232
+ * Get all descendant contracts from a given contract
233
+ */
234
+ async getDescendants(contractId) {
235
+ const descendants = [];
236
+ const queue = [contractId];
237
+ const visited = new Set();
238
+ while (queue.length > 0) {
239
+ const currentId = queue.shift();
240
+ if (visited.has(currentId)) {
241
+ continue; // Skip visited to prevent infinite loops
242
+ }
243
+ visited.add(currentId);
244
+ // Find all contracts that have this as parent
245
+ const children = this.contractManager.queryContracts({
246
+ parent_contract_id: currentId,
247
+ });
248
+ descendants.push(...children);
249
+ queue.push(...children.map((c) => c.contract_id));
250
+ }
251
+ return descendants;
252
+ }
253
+ /**
254
+ * Get all ancestor contracts from a given contract
255
+ */
256
+ async getAncestors(contractId) {
257
+ const ancestors = [];
258
+ const visited = new Set();
259
+ let current = this.contractManager.getContract(contractId);
260
+ while (current && current.parent_contract_id) {
261
+ if (visited.has(current.parent_contract_id)) {
262
+ break; // Loop detected
263
+ }
264
+ visited.add(current.parent_contract_id);
265
+ const parent = this.contractManager.getContract(current.parent_contract_id);
266
+ if (parent) {
267
+ ancestors.unshift(parent); // Add to beginning (root to current order)
268
+ current = parent;
269
+ }
270
+ else {
271
+ break;
272
+ }
273
+ }
274
+ return ancestors;
275
+ }
276
+ /**
277
+ * Validate that adding a new child contract won't create loops
278
+ */
279
+ async validateNewChild(parentId, childContractData) {
280
+ // Get parent contract
281
+ const parent = this.contractManager.getContract(parentId);
282
+ if (!parent) {
283
+ return { valid: false, reason: 'Parent contract not found' };
284
+ }
285
+ // Check if delegatee is in parent chain (would create loop)
286
+ const ancestors = await this.getAncestors(parentId);
287
+ const ancestorAgents = new Set([
288
+ parent.delegator.agent_id,
289
+ parent.delegatee.agent_id,
290
+ ...ancestors.map(a => a.delegator.agent_id),
291
+ ...ancestors.map(a => a.delegatee.agent_id),
292
+ ]);
293
+ if (ancestorAgents.has(childContractData.delegatee.agent_id)) {
294
+ return {
295
+ valid: false,
296
+ reason: `Agent ${childContractData.delegatee.agent_id} is already in the delegation chain, would create a loop`,
297
+ };
298
+ }
299
+ // Check depth limit
300
+ const newDepth = (parent.delegation_depth || 0) + 1;
301
+ if (newDepth >= (this.config.maxChainDepth ?? 10)) {
302
+ return {
303
+ valid: false,
304
+ reason: `New child would exceed maximum chain depth ${this.config.maxChainDepth}`,
305
+ };
306
+ }
307
+ return { valid: true };
308
+ }
309
+ /**
310
+ * Get chain statistics
311
+ */
312
+ async getChainStatistics(contractId) {
313
+ const chain = await this.buildChain(contractId);
314
+ const descendants = await this.getDescendants(contractId);
315
+ const totalContracts = chain.contracts.length + descendants.length;
316
+ const maxDepth = Math.max(chain.depth, ...descendants.map(d => d.delegation_depth || 0));
317
+ const uniqueAgents = new Set([
318
+ ...chain.contracts.flatMap(c => [c.delegator.agent_id, c.delegatee.agent_id]),
319
+ ...descendants.flatMap(d => [d.delegator.agent_id, d.delegatee.agent_id]),
320
+ ]);
321
+ // Count firebreaks in chain
322
+ const chainFirebreaks = chain.firebreak_contracts?.length ?? 0;
323
+ // Count firebreaks in descendants
324
+ const descendantFirebreaks = this.identifyFirebreaks(descendants);
325
+ const totalFirebreaks = chainFirebreaks + descendantFirebreaks.length;
326
+ return {
327
+ total_contracts: totalContracts,
328
+ chain_depth: chain.depth,
329
+ max_depth: maxDepth,
330
+ unique_agents: uniqueAgents.size,
331
+ firebreak_count: totalFirebreaks,
332
+ has_loops: chain.has_loops,
333
+ };
334
+ }
335
+ }
336
+ //# sourceMappingURL=chain-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-tracker.js","sourceRoot":"","sources":["../../../packages/ai/delegation/chain-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Circuit Breaker — per-agent failure state machine
3
+ * TLP:AMBER - Internal Use Only
4
+ *
5
+ * Design decision D6: Circuit breaker with cascading revocation.
6
+ *
7
+ * States: closed (normal) → open (blocked) ↔ half-open (probe allowed)
8
+ *
9
+ * The companion CircuitBreakerMiddleware wraps this as a SecurityMiddleware
10
+ * that can be inserted into the SecurityMiddlewareChain.
11
+ *
12
+ * @module delegation/circuit-breaker
13
+ * @version 1.0.0
14
+ * @date 2026-02-24
15
+ */
16
+ import { EventEmitter } from 'events';
17
+ import type { SecurityMiddleware, SecurityContext, SecurityVerdict, SecurityOperationType } from '../types/security-middleware.js';
18
+ export type CircuitState = 'closed' | 'half-open' | 'open';
19
+ export interface CircuitBreakerConfig {
20
+ /** Number of failures within windowMs before opening. Default: 5 */
21
+ failureThreshold?: number;
22
+ /** Sliding window for counting failures. Default: 60 000 ms */
23
+ windowMs?: number;
24
+ /** How long to stay open before testing with half-open. Default: 30 000 ms */
25
+ cooldownMs?: number;
26
+ }
27
+ /**
28
+ * CircuitBreaker emits:
29
+ * - `circuit_opened` when an agent circuit trips open
30
+ * - `circuit_half_opened` when cooldown expires and probe is allowed
31
+ * - `circuit_closed` when a probe succeeds and circuit resets
32
+ */
33
+ export declare class CircuitBreaker extends EventEmitter {
34
+ private readonly failureThreshold;
35
+ private readonly windowMs;
36
+ private readonly cooldownMs;
37
+ private readonly circuits;
38
+ constructor(config?: CircuitBreakerConfig);
39
+ /**
40
+ * Returns true if the agent may proceed; false if the circuit is open.
41
+ * Transitions open → half-open when cooldown expires.
42
+ */
43
+ canProceed(agentId: string): boolean;
44
+ recordSuccess(agentId: string): void;
45
+ recordFailure(agentId: string): void;
46
+ getState(agentId: string): CircuitState;
47
+ /** Force-reset a circuit (e.g., after manual review). */
48
+ reset(agentId: string): void;
49
+ private getOrCreate;
50
+ }
51
+ export declare class CircuitBreakerMiddleware implements SecurityMiddleware {
52
+ private readonly breaker;
53
+ readonly name = "circuit-breaker";
54
+ readonly featureFlag = "security_monitoring";
55
+ readonly appliesTo: SecurityOperationType[];
56
+ constructor(breaker: CircuitBreaker);
57
+ evaluate(context: SecurityContext): Promise<SecurityVerdict>;
58
+ }
59
+ //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../../packages/ai/delegation/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAMnI,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;gBAEhD,MAAM,GAAE,oBAAyB;IAW7C;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAuBpC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAcpC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAyBpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IAIvC,yDAAyD;IACzD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ5B,OAAO,CAAC,WAAW;CAQpB;AAMD,qBAAa,wBAAyB,YAAW,kBAAkB;IAKrD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,yBAAyB;IAC7C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAc;gBAE5B,OAAO,EAAE,cAAc;IAE9C,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CAyBnE"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Circuit Breaker — per-agent failure state machine
3
+ * TLP:AMBER - Internal Use Only
4
+ *
5
+ * Design decision D6: Circuit breaker with cascading revocation.
6
+ *
7
+ * States: closed (normal) → open (blocked) ↔ half-open (probe allowed)
8
+ *
9
+ * The companion CircuitBreakerMiddleware wraps this as a SecurityMiddleware
10
+ * that can be inserted into the SecurityMiddlewareChain.
11
+ *
12
+ * @module delegation/circuit-breaker
13
+ * @version 1.0.0
14
+ * @date 2026-02-24
15
+ */
16
+ import { EventEmitter } from 'events';
17
+ // ──────────────────────────────────────────────────────────────────────────
18
+ // CircuitBreaker
19
+ // ──────────────────────────────────────────────────────────────────────────
20
+ /**
21
+ * CircuitBreaker emits:
22
+ * - `circuit_opened` when an agent circuit trips open
23
+ * - `circuit_half_opened` when cooldown expires and probe is allowed
24
+ * - `circuit_closed` when a probe succeeds and circuit resets
25
+ */
26
+ export class CircuitBreaker extends EventEmitter {
27
+ failureThreshold;
28
+ windowMs;
29
+ cooldownMs;
30
+ circuits = new Map();
31
+ constructor(config = {}) {
32
+ super();
33
+ this.failureThreshold = config.failureThreshold ?? 5;
34
+ this.windowMs = config.windowMs ?? 60_000;
35
+ this.cooldownMs = config.cooldownMs ?? 30_000;
36
+ }
37
+ // ──────────────────────────────────────────────────────────────────────────
38
+ // Public API
39
+ // ──────────────────────────────────────────────────────────────────────────
40
+ /**
41
+ * Returns true if the agent may proceed; false if the circuit is open.
42
+ * Transitions open → half-open when cooldown expires.
43
+ */
44
+ canProceed(agentId) {
45
+ const circuit = this.getOrCreate(agentId);
46
+ const now = Date.now();
47
+ switch (circuit.state) {
48
+ case 'closed':
49
+ return true;
50
+ case 'open': {
51
+ if (now - circuit.openedAt >= this.cooldownMs) {
52
+ circuit.state = 'half-open';
53
+ circuit.probeAllowed = true;
54
+ this.emit('circuit_half_opened', { agent_id: agentId });
55
+ }
56
+ return circuit.state === 'half-open' && circuit.probeAllowed;
57
+ }
58
+ case 'half-open':
59
+ // Only allow one probe at a time
60
+ return circuit.probeAllowed;
61
+ }
62
+ }
63
+ recordSuccess(agentId) {
64
+ const circuit = this.circuits.get(agentId);
65
+ if (!circuit)
66
+ return;
67
+ if (circuit.state === 'half-open') {
68
+ circuit.state = 'closed';
69
+ circuit.failures = [];
70
+ circuit.openedAt = 0;
71
+ circuit.probeAllowed = false;
72
+ this.emit('circuit_closed', { agent_id: agentId });
73
+ }
74
+ // No-op for closed circuits — do not penalise successes
75
+ }
76
+ recordFailure(agentId) {
77
+ const circuit = this.getOrCreate(agentId);
78
+ const now = Date.now();
79
+ const cutoff = now - this.windowMs;
80
+ // Prune old failures
81
+ circuit.failures = circuit.failures.filter(t => t > cutoff);
82
+ circuit.failures.push(now);
83
+ if (circuit.state === 'half-open') {
84
+ // Probe failed — reopen immediately
85
+ circuit.state = 'open';
86
+ circuit.openedAt = now;
87
+ circuit.probeAllowed = false;
88
+ this.emit('circuit_opened', { agent_id: agentId, failure_count: circuit.failures.length });
89
+ return;
90
+ }
91
+ if (circuit.state === 'closed' && circuit.failures.length >= this.failureThreshold) {
92
+ circuit.state = 'open';
93
+ circuit.openedAt = now;
94
+ this.emit('circuit_opened', { agent_id: agentId, failure_count: circuit.failures.length });
95
+ }
96
+ }
97
+ getState(agentId) {
98
+ return this.circuits.get(agentId)?.state ?? 'closed';
99
+ }
100
+ /** Force-reset a circuit (e.g., after manual review). */
101
+ reset(agentId) {
102
+ this.circuits.delete(agentId);
103
+ }
104
+ // ──────────────────────────────────────────────────────────────────────────
105
+ // Internal helpers
106
+ // ──────────────────────────────────────────────────────────────────────────
107
+ getOrCreate(agentId) {
108
+ let circuit = this.circuits.get(agentId);
109
+ if (!circuit) {
110
+ circuit = { state: 'closed', failures: [], openedAt: 0, probeAllowed: false };
111
+ this.circuits.set(agentId, circuit);
112
+ }
113
+ return circuit;
114
+ }
115
+ }
116
+ // ──────────────────────────────────────────────────────────────────────────
117
+ // CircuitBreakerMiddleware — SecurityMiddleware adapter
118
+ // ──────────────────────────────────────────────────────────────────────────
119
+ export class CircuitBreakerMiddleware {
120
+ breaker;
121
+ name = 'circuit-breaker';
122
+ featureFlag = 'security_monitoring';
123
+ appliesTo = ['create'];
124
+ constructor(breaker) {
125
+ this.breaker = breaker;
126
+ }
127
+ async evaluate(context) {
128
+ // Check both delegator and delegatee circuits
129
+ const idsToCheck = [];
130
+ const delegatorId = context.delegator_auth?.agent_id ?? context.contract.delegator?.agent_id;
131
+ const delegateeId = context.delegatee_auth?.agent_id ?? context.contract.delegatee?.agent_id;
132
+ if (delegatorId)
133
+ idsToCheck.push(delegatorId);
134
+ if (delegateeId)
135
+ idsToCheck.push(delegateeId);
136
+ for (const agentId of idsToCheck) {
137
+ if (!this.breaker.canProceed(agentId)) {
138
+ return {
139
+ action: 'block',
140
+ reason: `Circuit breaker is open for agent '${agentId}'. Too many recent failures.`,
141
+ threat_type: 'circuit_open',
142
+ severity: 'critical',
143
+ evidence: {
144
+ agent_id: agentId,
145
+ circuit_state: this.breaker.getState(agentId),
146
+ },
147
+ };
148
+ }
149
+ }
150
+ return { action: 'allow' };
151
+ }
152
+ }
153
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../packages/ai/delegation/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAyBtC,6EAA6E;AAC7E,iBAAiB;AACjB,6EAA6E;AAE7E;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC7B,gBAAgB,CAAS;IACzB,QAAQ,CAAS;IACjB,UAAU,CAAS;IAEnB,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE5D,YAAY,SAA+B,EAAE;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;IAChD,CAAC;IAED,6EAA6E;IAC7E,aAAa;IACb,6EAA6E;IAE7E;;;OAGG;IACH,UAAU,CAAC,OAAe;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC;YAEd,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC9C,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;oBAC5B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,OAAO,OAAO,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;YAC/D,CAAC;YAED,KAAK,WAAW;gBACd,iCAAiC;gBACjC,OAAO,OAAO,CAAC,YAAY,CAAC;QAChC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;YACzB,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;YACtB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,wDAAwD;IAC1D,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEnC,qBAAqB;QACrB,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAClC,oCAAoC;YACpC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;YACvB,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;YACvB,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;YACvB,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC;IACvD,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,OAAe;QACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,6EAA6E;IAC7E,mBAAmB;IACnB,6EAA6E;IAErE,WAAW,CAAC,OAAe;QACjC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,6EAA6E;AAC7E,wDAAwD;AACxD,6EAA6E;AAE7E,MAAM,OAAO,wBAAwB;IAKN;IAJpB,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,qBAAqB,CAAC;IACpC,SAAS,GAA4B,CAAC,QAAQ,CAAC,CAAC;IAEzD,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,8CAA8C;QAC9C,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC7F,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC7F,IAAI,WAAW;YAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,WAAW;YAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9C,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,sCAAsC,OAAO,8BAA8B;oBACnF,WAAW,EAAE,cAAc;oBAC3B,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE;wBACR,QAAQ,EAAE,OAAO;wBACjB,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;qBAC9C;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF"}