@dcyfr/ai 1.0.4 → 2.1.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 (411) hide show
  1. package/CHANGELOG.md +116 -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 +34 -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 +61 -0
  260. package/dist/ai/src/capability-manifest-generator.d.ts.map +1 -0
  261. package/dist/ai/src/capability-manifest-generator.js +700 -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 +36 -8
@@ -0,0 +1,511 @@
1
+ /**
2
+ * DCYFR Permission Attenuation Engine
3
+ * TLP:AMBER - Internal Use Only
4
+ *
5
+ * Implements hierarchical permission token attenuation with least-privilege enforcement.
6
+ * Ensures delegated permissions are always a proper subset of parent permissions.
7
+ *
8
+ * @module permissions/attenuation-engine
9
+ * @version 1.0.0
10
+ * @date 2026-02-13
11
+ */
12
+ import { randomUUID } from 'crypto';
13
+ /**
14
+ * Permission Attenuation Engine
15
+ *
16
+ * Enforces least-privilege principle by ensuring delegated permissions
17
+ * are always strictly reduced from parent permissions.
18
+ */
19
+ export class PermissionAttenuationEngine {
20
+ debugMode;
21
+ constructor(options = {}) {
22
+ this.debugMode = options.debug ?? false;
23
+ }
24
+ /**
25
+ * Attenuate a permission token to create a child token with reduced permissions
26
+ *
27
+ * @param parentToken - The parent token to attenuate
28
+ * @param request - Attenuation request parameters
29
+ * @returns Attenuated child token
30
+ * @throws Error if attenuation violates least-privilege constraints
31
+ */
32
+ async attenuate(parentToken, request) {
33
+ this.log(`Attenuating token ${parentToken.token_id} for ${request.new_holder}`);
34
+ // Validate parent token is active and delegatable
35
+ this.validateParentToken(parentToken);
36
+ // Validate attenuation request
37
+ const validation = this.validateAttenuation(parentToken, request);
38
+ if (!validation.valid) {
39
+ throw new Error(`Attenuation validation failed: ${validation.errors.join(', ')}`);
40
+ }
41
+ // Log warnings
42
+ validation.warnings.forEach(warning => this.log(`Warning: ${warning}`));
43
+ // Create attenuated child token
44
+ const childToken = this.createChildToken(parentToken, request);
45
+ this.log(`Created child token ${childToken.token_id} with depth ${childToken.delegation_depth}`);
46
+ return childToken;
47
+ }
48
+ /**
49
+ * Validate parent token is suitable for attenuation
50
+ */
51
+ validateParentToken(token) {
52
+ if (token.status !== 'active') {
53
+ throw new Error(`Cannot attenuate ${token.status} token`);
54
+ }
55
+ if (!token.delegatable) {
56
+ throw new Error('Token is not delegatable');
57
+ }
58
+ if (token.delegation_depth >= token.max_delegation_depth) {
59
+ throw new Error(`Maximum delegation depth ${token.max_delegation_depth} reached`);
60
+ }
61
+ // Check if token has expired
62
+ if (token.expires_at && new Date(token.expires_at) < new Date()) {
63
+ throw new Error('Token has expired');
64
+ }
65
+ // Check count constraints
66
+ const countConstraint = token.constraints?.find(c => c.type === 'count');
67
+ if (countConstraint) {
68
+ const params = countConstraint.parameters;
69
+ if (params.current_uses !== undefined && params.current_uses >= params.max_uses) {
70
+ throw new Error('Token usage limit exhausted');
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Validate attenuation request follows least-privilege principles
76
+ */
77
+ validateAttenuation(parentToken, request) {
78
+ const errors = [];
79
+ const warnings = [];
80
+ // Validate scopes are subset or more specific
81
+ const scopeValidation = this.validateScopeAttenuation(parentToken.scopes, request.scopes);
82
+ if (!scopeValidation.valid) {
83
+ errors.push(...scopeValidation.errors);
84
+ }
85
+ warnings.push(...scopeValidation.warnings);
86
+ // Validate actions are subset
87
+ const actionValidation = this.validateActionAttenuation(parentToken.actions, request.actions || parentToken.actions);
88
+ if (!actionValidation.valid) {
89
+ errors.push(...actionValidation.errors);
90
+ }
91
+ // Validate resources are subset
92
+ const resourceValidation = this.validateResourceAttenuation(parentToken.resources, parentToken.resource_patterns, request.resources);
93
+ if (!resourceValidation.valid) {
94
+ errors.push(...resourceValidation.errors);
95
+ }
96
+ // Validate constraints are more restrictive
97
+ const constraintValidation = this.validateConstraintAttenuation(parentToken.constraints, request.additional_constraints);
98
+ if (!constraintValidation.valid) {
99
+ errors.push(...constraintValidation.errors);
100
+ }
101
+ // Validate delegation depth
102
+ const depthValid = this.validateDelegationDepth(parentToken);
103
+ if (!depthValid) {
104
+ errors.push(`Delegation depth limit reached (${parentToken.max_delegation_depth})`);
105
+ }
106
+ // Validate expiration
107
+ const expirationValidation = this.validateExpiration(parentToken.expires_at, request.expires_at);
108
+ if (!expirationValidation.valid) {
109
+ errors.push(...expirationValidation.errors);
110
+ }
111
+ warnings.push(...expirationValidation.warnings);
112
+ return {
113
+ valid: errors.length === 0,
114
+ errors,
115
+ warnings,
116
+ field_validations: {
117
+ scopes: scopeValidation.valid,
118
+ actions: actionValidation.valid,
119
+ resources: resourceValidation.valid,
120
+ constraints: constraintValidation.valid,
121
+ delegation_depth: depthValid,
122
+ expiration: expirationValidation.valid,
123
+ },
124
+ };
125
+ }
126
+ /**
127
+ * Validate scope attenuation (hierarchical)
128
+ *
129
+ * Child scopes must be equal to or more specific than parent scopes.
130
+ * Examples:
131
+ * - "workspace.read" → "workspace.read.code" ✓
132
+ * - "workspace.read.code" → "workspace.read" ✗
133
+ * - "workspace.read" → "workspace.write" ✗
134
+ */
135
+ validateScopeAttenuation(parentScopes, childScopes) {
136
+ const errors = [];
137
+ const warnings = [];
138
+ if (childScopes.length === 0) {
139
+ errors.push('Child scopes cannot be empty');
140
+ return { valid: false, errors, warnings };
141
+ }
142
+ for (const childScope of childScopes) {
143
+ // Check if child scope is covered by at least one parent scope
144
+ const isCovered = parentScopes.some(parentScope => this.isScopeAttenuation(parentScope, childScope));
145
+ if (!isCovered) {
146
+ errors.push(`Scope '${childScope}' is not covered by parent scopes: ${parentScopes.join(', ')}`);
147
+ }
148
+ }
149
+ // Warn if significantly reducing scopes
150
+ if (childScopes.length < parentScopes.length / 2) {
151
+ warnings.push(`Significantly reducing scopes from ${parentScopes.length} to ${childScopes.length}`);
152
+ }
153
+ return { valid: errors.length === 0, errors, warnings };
154
+ }
155
+ /**
156
+ * Check if childScope is a valid attenuation of parentScope
157
+ *
158
+ * Valid attenuations:
159
+ * - Exact match: "workspace.read" === "workspace.read"
160
+ * - More specific: "workspace.read.code" extends "workspace.read"
161
+ */
162
+ isScopeAttenuation(parentScope, childScope) {
163
+ // Exact match is valid
164
+ if (parentScope === childScope) {
165
+ return true;
166
+ }
167
+ // Child must be more specific (longer hierarchical path)
168
+ // Example: parent "workspace.read", child "workspace.read.code" ✓
169
+ if (childScope.startsWith(parentScope + '.')) {
170
+ return true;
171
+ }
172
+ // Wildcard support: "workspace.*" covers "workspace.read"
173
+ if (parentScope.endsWith('.*')) {
174
+ const baseScope = parentScope.slice(0, -2);
175
+ return childScope.startsWith(baseScope);
176
+ }
177
+ return false;
178
+ }
179
+ /**
180
+ * Validate action attenuation
181
+ *
182
+ * Child actions must be a subset of parent actions.
183
+ * Action hierarchy: manage > create/delete > write > read/execute
184
+ */
185
+ validateActionAttenuation(parentActions, childActions) {
186
+ const errors = [];
187
+ if (childActions.length === 0) {
188
+ errors.push('Child actions cannot be empty');
189
+ return { valid: false, errors };
190
+ }
191
+ for (const childAction of childActions) {
192
+ if (!parentActions.includes(childAction)) {
193
+ // Check if parent has a higher-level action that implies this action
194
+ const impliedByParent = this.actionImpliedBy(childAction, parentActions);
195
+ if (!impliedByParent) {
196
+ errors.push(`Action '${childAction}' not permitted by parent actions: ${parentActions.join(', ')}`);
197
+ }
198
+ }
199
+ }
200
+ return { valid: errors.length === 0, errors };
201
+ }
202
+ /**
203
+ * Check if an action is implied by higher-level actions
204
+ *
205
+ * Example: 'manage' implies all actions EXCEPT 'delegate'
206
+ * 'delegate' requires explicit granting for security
207
+ */
208
+ actionImpliedBy(action, parentActions) {
209
+ // 'delegate' requires explicit granting (never implied)
210
+ if (action === 'delegate') {
211
+ return parentActions.includes('delegate');
212
+ }
213
+ // 'manage' implies all other actions (except delegate, handled above)
214
+ if (parentActions.includes('manage')) {
215
+ return true;
216
+ }
217
+ // 'write' implies 'read'
218
+ if (action === 'read' && parentActions.includes('write')) {
219
+ return true;
220
+ }
221
+ // 'delete' implies 'write'
222
+ if (action === 'write' && parentActions.includes('delete')) {
223
+ return true;
224
+ }
225
+ // 'create' implies 'write'
226
+ if (action === 'write' && parentActions.includes('create')) {
227
+ return true;
228
+ }
229
+ return false;
230
+ }
231
+ /**
232
+ * Validate resource attenuation
233
+ *
234
+ * Child resources must be a subset of parent resources or match patterns.
235
+ */
236
+ validateResourceAttenuation(parentResources, parentPatterns, childResources) {
237
+ const errors = [];
238
+ // If parent has no resource restrictions, child can specify any
239
+ if (!parentResources && !parentPatterns) {
240
+ return { valid: true, errors };
241
+ }
242
+ // If child has no resources, it inherits parent's (valid)
243
+ if (!childResources) {
244
+ return { valid: true, errors };
245
+ }
246
+ // Check each child resource is covered by parent
247
+ for (const childResource of childResources) {
248
+ const covered = (parentResources && parentResources.includes(childResource)) ||
249
+ (parentResources && this.matchesPatterns(childResource, parentResources)) ||
250
+ (parentPatterns && this.matchesPatterns(childResource, parentPatterns));
251
+ if (!covered) {
252
+ errors.push(`Resource '${childResource}' not covered by parent resources/patterns`);
253
+ }
254
+ }
255
+ return { valid: errors.length === 0, errors };
256
+ }
257
+ /**
258
+ * Check if a resource matches any of the given patterns
259
+ *
260
+ * Supports glob-style patterns: *, **, ?
261
+ * Also supports hierarchical path matching (e.g., /src/** matches /src/utils/**)
262
+ */
263
+ matchesPatterns(resource, patterns) {
264
+ return patterns.some(pattern => {
265
+ // Special case: /path/** should match /path/anything/nested/**
266
+ if (pattern.endsWith('/**')) {
267
+ const basePath = pattern.slice(0, -3);
268
+ if (resource.startsWith(basePath + '/')) {
269
+ return true;
270
+ }
271
+ }
272
+ // Convert glob pattern to regex
273
+ const regexPattern = pattern
274
+ .replace(/\*\*/g, '.*') // ** matches any path
275
+ .replace(/\*/g, '[^/]*') // * matches any non-slash
276
+ .replace(/\?/g, '.'); // ? matches single char
277
+ const regex = new RegExp(`^${regexPattern}$`);
278
+ return regex.test(resource);
279
+ });
280
+ }
281
+ /**
282
+ * Validate constraint attenuation
283
+ *
284
+ * Additional constraints can only make permissions MORE restrictive.
285
+ */
286
+ validateConstraintAttenuation(parentConstraints, additionalConstraints) {
287
+ const errors = [];
288
+ // Additional constraints are always valid (they only restrict further)
289
+ // However, we validate they don't contradict existing constraints
290
+ if (!additionalConstraints || additionalConstraints.length === 0) {
291
+ return { valid: true, errors };
292
+ }
293
+ // Check for contradictory constraints
294
+ for (const newConstraint of additionalConstraints) {
295
+ const existing = parentConstraints?.find(c => c.type === newConstraint.type);
296
+ if (existing) {
297
+ // Validate new constraint is more restrictive
298
+ const moreRestrictive = this.isMoreRestrictive(existing, newConstraint);
299
+ if (!moreRestrictive) {
300
+ errors.push(`New ${newConstraint.type} constraint is less restrictive than parent constraint`);
301
+ }
302
+ }
303
+ }
304
+ return { valid: errors.length === 0, errors };
305
+ }
306
+ /**
307
+ * Check if new constraint is more restrictive than existing
308
+ */
309
+ isMoreRestrictive(existing, newConstraint) {
310
+ switch (existing.type) {
311
+ case 'count': {
312
+ const existingMax = existing.parameters.max_uses;
313
+ const newMax = newConstraint.parameters.max_uses;
314
+ return newMax <= existingMax;
315
+ }
316
+ case 'rate': {
317
+ const existingRate = existing.parameters.max_operations;
318
+ const newRate = newConstraint.parameters.max_operations;
319
+ return newRate <= existingRate;
320
+ }
321
+ case 'size': {
322
+ const existingSize = existing.parameters.max_size_bytes;
323
+ const newSize = newConstraint.parameters.max_size_bytes;
324
+ return newSize <= existingSize;
325
+ }
326
+ case 'time': {
327
+ const existingEnd = existing.parameters.end_time;
328
+ const newEnd = newConstraint.parameters.end_time;
329
+ if (!existingEnd || !newEnd) {
330
+ return true; // Can't compare, assume valid
331
+ }
332
+ return new Date(newEnd) <= new Date(existingEnd);
333
+ }
334
+ default:
335
+ // Custom constraints - assume valid
336
+ return true;
337
+ }
338
+ }
339
+ /**
340
+ * Validate delegation depth
341
+ */
342
+ validateDelegationDepth(parentToken) {
343
+ return parentToken.delegation_depth + 1 <= parentToken.max_delegation_depth;
344
+ }
345
+ /**
346
+ * Validate expiration time
347
+ */
348
+ validateExpiration(parentExpiration, childExpiration) {
349
+ const errors = [];
350
+ const warnings = [];
351
+ // If parent has no expiration, child can set any
352
+ if (!parentExpiration) {
353
+ return { valid: true, errors, warnings };
354
+ }
355
+ // If child has no expiration, it inherits parent's
356
+ if (!childExpiration) {
357
+ return { valid: true, errors, warnings };
358
+ }
359
+ // Child expiration cannot exceed parent
360
+ const parentDate = new Date(parentExpiration);
361
+ const childDate = new Date(childExpiration);
362
+ if (childDate > parentDate) {
363
+ errors.push(`Child expiration (${childExpiration}) exceeds parent expiration (${parentExpiration})`);
364
+ }
365
+ // Warn if child expiration is very close to parent
366
+ const timeDiff = parentDate.getTime() - childDate.getTime();
367
+ if (timeDiff < 60000) { // Less than 1 minute difference
368
+ warnings.push('Child expiration is very close to parent expiration');
369
+ }
370
+ return { valid: errors.length === 0, errors, warnings };
371
+ }
372
+ /**
373
+ * Create child token from parent and request
374
+ */
375
+ createChildToken(parentToken, request) {
376
+ const childTokenId = randomUUID();
377
+ const now = new Date().toISOString();
378
+ // Merge constraints: parent + additional
379
+ const mergedConstraints = [
380
+ ...(parentToken.constraints || []),
381
+ ...(request.additional_constraints || []),
382
+ ];
383
+ // Merge revocation conditions
384
+ const mergedRevocationConditions = [
385
+ ...(parentToken.revocation_conditions || []),
386
+ ...(request.additional_revocation_conditions || []),
387
+ ];
388
+ const childToken = {
389
+ token_id: childTokenId,
390
+ version: '1.0.0',
391
+ status: 'active',
392
+ holder: request.new_holder,
393
+ issuer: parentToken.holder, // Parent holder becomes issuer
394
+ scopes: request.scopes,
395
+ actions: request.actions || parentToken.actions,
396
+ resource_types: parentToken.resource_types,
397
+ resources: request.resources || parentToken.resources,
398
+ resource_patterns: parentToken.resource_patterns,
399
+ constraints: mergedConstraints.length > 0 ? mergedConstraints : undefined,
400
+ revocation_conditions: mergedRevocationConditions.length > 0 ? mergedRevocationConditions : undefined,
401
+ expires_at: request.expires_at || parentToken.expires_at,
402
+ delegatable: request.delegatable ?? false, // Default to non-delegatable for safety
403
+ max_delegation_depth: parentToken.max_delegation_depth,
404
+ delegation_depth: parentToken.delegation_depth + 1,
405
+ parent_token_id: parentToken.token_id,
406
+ grant: {
407
+ granted_by: parentToken.holder,
408
+ granted_at: now,
409
+ reason: request.reason,
410
+ authorization_source: parentToken.token_id,
411
+ },
412
+ metadata: request.metadata,
413
+ created_at: now,
414
+ };
415
+ return childToken;
416
+ }
417
+ /**
418
+ * Check if a permission hierarchy is valid (all tokens properly attenuated)
419
+ *
420
+ * @param tokens - Array of tokens from root to leaf
421
+ * @returns Validation result with any violations
422
+ */
423
+ validateHierarchy(tokens) {
424
+ const violations = [];
425
+ for (let i = 1; i < tokens.length; i++) {
426
+ const parent = tokens[i - 1];
427
+ const child = tokens[i];
428
+ // Verify parent-child relationship
429
+ if (child.parent_token_id !== parent.token_id) {
430
+ violations.push({
431
+ tokenIndex: i,
432
+ error: `Token ${child.token_id} parent_token_id mismatch`,
433
+ });
434
+ }
435
+ // Verify delegation depth increases
436
+ if (child.delegation_depth !== parent.delegation_depth + 1) {
437
+ violations.push({
438
+ tokenIndex: i,
439
+ error: `Invalid delegation depth: parent=${parent.delegation_depth}, child=${child.delegation_depth}`,
440
+ });
441
+ }
442
+ // Verify scopes are properly attenuated
443
+ const scopeValidation = this.validateScopeAttenuation(parent.scopes, child.scopes);
444
+ if (!scopeValidation.valid) {
445
+ violations.push({
446
+ tokenIndex: i,
447
+ error: `Scope violation: ${scopeValidation.errors.join(', ')}`,
448
+ });
449
+ }
450
+ }
451
+ return {
452
+ valid: violations.length === 0,
453
+ violations,
454
+ };
455
+ }
456
+ /**
457
+ * Calculate effective permissions for a token (considering all parent constraints)
458
+ *
459
+ * @param token - Token to analyze
460
+ * @param parentTokens - Array of parent tokens (from root to immediate parent)
461
+ * @returns Effective permissions merging all hierarchical constraints
462
+ */
463
+ calculateEffectivePermissions(token, parentTokens) {
464
+ // Start with token's own permissions
465
+ let effectiveScopes = [...token.scopes];
466
+ let effectiveActions = [...token.actions];
467
+ let effectiveResources = [...(token.resources || [])];
468
+ const effectiveConstraints = [...(token.constraints || [])];
469
+ // Apply each parent's restrictions
470
+ for (const parent of parentTokens) {
471
+ // Intersect scopes (keep only scopes covered by parent)
472
+ effectiveScopes = effectiveScopes.filter(childScope => parent.scopes.some(parentScope => this.isScopeAttenuation(parentScope, childScope)));
473
+ // Intersect actions
474
+ effectiveActions = effectiveActions.filter(action => parent.actions.includes(action) || this.actionImpliedBy(action, parent.actions));
475
+ // Intersect resources
476
+ if (parent.resources && parent.resources.length > 0) {
477
+ effectiveResources = effectiveResources.filter(resource => parent.resources.includes(resource) ||
478
+ (parent.resource_patterns &&
479
+ this.matchesPatterns(resource, parent.resource_patterns)));
480
+ }
481
+ // Merge constraints (most restrictive wins)
482
+ for (const parentConstraint of parent.constraints || []) {
483
+ const existingIndex = effectiveConstraints.findIndex(c => c.type === parentConstraint.type);
484
+ if (existingIndex >= 0) {
485
+ // Keep more restrictive constraint
486
+ if (!this.isMoreRestrictive(parentConstraint, effectiveConstraints[existingIndex])) {
487
+ effectiveConstraints[existingIndex] = parentConstraint;
488
+ }
489
+ }
490
+ else {
491
+ effectiveConstraints.push(parentConstraint);
492
+ }
493
+ }
494
+ }
495
+ return {
496
+ effectiveScopes,
497
+ effectiveActions,
498
+ effectiveResources,
499
+ effectiveConstraints,
500
+ };
501
+ }
502
+ /**
503
+ * Log debug messages
504
+ */
505
+ log(message) {
506
+ if (this.debugMode) {
507
+ console.log(`[AttenuationEngine] ${message}`);
508
+ }
509
+ }
510
+ }
511
+ //# sourceMappingURL=attenuation-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attenuation-engine.js","sourceRoot":"","sources":["../../../packages/ai/permissions/attenuation-engine.ts"],"names":[],"mappings":"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"}
@@ -63,6 +63,10 @@ export declare class PluginLoader {
63
63
  private plugins;
64
64
  private config;
65
65
  constructor(config?: PluginLoaderConfig);
66
+ /** Resolve plugin from path string (dynamic import) or direct object reference */
67
+ private resolvePlugin;
68
+ /** Validate, deduplicate, initialize, and store a loaded plugin instance */
69
+ private registerPlugin;
66
70
  /**
67
71
  * Load a plugin by module path or object
68
72
  */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../../packages/ai/plugins/plugin-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5F;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACJ,UAAU,EAAE,MAAM;IAAS,KAAK,CAAC,EAAE,KAAK;gBAAhE,OAAO,EAAE,MAAM,EAAS,UAAU,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,KAAK,YAAA;CAI7E;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IACV,UAAU,EAAE,MAAM;gBAA1C,OAAO,EAAE,MAAM,EAAS,UAAU,EAAE,MAAM;CAIvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,GAAE,kBAAuB;IAS3C;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0D5D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQtC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmCxE;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IA2C5B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;YACW,kBAAkB;IAahC;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBrB;AAOD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAK/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
1
+ {"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../../packages/ai/plugins/plugin-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5F;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACJ,UAAU,EAAE,MAAM;IAAS,KAAK,CAAC,EAAE,KAAK;gBAAhE,OAAO,EAAE,MAAM,EAAS,UAAU,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,KAAK,YAAA;CAI7E;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IACV,UAAU,EAAE,MAAM;gBAA1C,OAAO,EAAE,MAAM,EAAS,UAAU,EAAE,MAAM;CAIvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,GAAE,kBAAuB;IAS3C,kFAAkF;YACpE,aAAa;IAQ3B,4EAA4E;YAC9D,cAAc;IAyB5B;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB5D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQtC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmCxE;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IA2C5B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;YACW,kBAAkB;IAahC;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBrB;AAOD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAK/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
@@ -60,39 +60,39 @@ export class PluginLoader {
60
60
  ...config,
61
61
  };
62
62
  }
63
+ /** Resolve plugin from path string (dynamic import) or direct object reference */
64
+ async resolvePlugin(pluginPath) {
65
+ if (typeof pluginPath === 'string') {
66
+ const module = await import(pluginPath);
67
+ return module.default || module;
68
+ }
69
+ return pluginPath;
70
+ }
71
+ /** Validate, deduplicate, initialize, and store a loaded plugin instance */
72
+ async registerPlugin(plugin) {
73
+ this.validateManifest(plugin.manifest);
74
+ if (this.plugins.has(plugin.manifest.name)) {
75
+ throw new PluginValidationError(`Plugin '${plugin.manifest.name}' is already loaded`, plugin.manifest.name);
76
+ }
77
+ if (plugin.onLoad) {
78
+ await this.executeWithTimeout(() => plugin.onLoad(), this.config.timeout, `onLoad hook for ${plugin.manifest.name}`);
79
+ }
80
+ this.plugins.set(plugin.manifest.name, {
81
+ name: plugin.manifest.name,
82
+ manifest: plugin.manifest,
83
+ plugin,
84
+ loaded: new Date(),
85
+ enabled: true,
86
+ });
87
+ console.log(`✅ Loaded plugin: ${plugin.manifest.name} v${plugin.manifest.version}`);
88
+ }
63
89
  /**
64
90
  * Load a plugin by module path or object
65
91
  */
66
92
  async loadPlugin(pluginPath) {
67
93
  try {
68
- let plugin;
69
- if (typeof pluginPath === 'string') {
70
- // Dynamic import
71
- const module = await import(pluginPath);
72
- plugin = module.default || module;
73
- }
74
- else {
75
- plugin = pluginPath;
76
- }
77
- // Validate manifest
78
- this.validateManifest(plugin.manifest);
79
- // Check for duplicates
80
- if (this.plugins.has(plugin.manifest.name)) {
81
- throw new PluginValidationError(`Plugin '${plugin.manifest.name}' is already loaded`, plugin.manifest.name);
82
- }
83
- // Call onLoad hook if present
84
- if (plugin.onLoad) {
85
- await this.executeWithTimeout(() => plugin.onLoad(), this.config.timeout, `onLoad hook for ${plugin.manifest.name}`);
86
- }
87
- // Store plugin
88
- this.plugins.set(plugin.manifest.name, {
89
- name: plugin.manifest.name,
90
- manifest: plugin.manifest,
91
- plugin,
92
- loaded: new Date(),
93
- enabled: true,
94
- });
95
- console.log(`✅ Loaded plugin: ${plugin.manifest.name} v${plugin.manifest.version}`);
94
+ const plugin = await this.resolvePlugin(pluginPath);
95
+ await this.registerPlugin(plugin);
96
96
  }
97
97
  catch (error) {
98
98
  const pluginName = typeof pluginPath === 'string' ? pluginPath : 'unknown';