governance-sdk 0.5.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 (387) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +559 -0
  3. package/dist/agent-identity-ed25519.d.ts +80 -0
  4. package/dist/agent-identity-ed25519.d.ts.map +1 -0
  5. package/dist/agent-identity-ed25519.js +134 -0
  6. package/dist/agent-identity-ed25519.js.map +1 -0
  7. package/dist/agent-identity.d.ts +65 -0
  8. package/dist/agent-identity.d.ts.map +1 -0
  9. package/dist/agent-identity.js +85 -0
  10. package/dist/agent-identity.js.map +1 -0
  11. package/dist/audit-integrity.d.ts +78 -0
  12. package/dist/audit-integrity.d.ts.map +1 -0
  13. package/dist/audit-integrity.js +173 -0
  14. package/dist/audit-integrity.js.map +1 -0
  15. package/dist/behavioral-scorer.d.ts +72 -0
  16. package/dist/behavioral-scorer.d.ts.map +1 -0
  17. package/dist/behavioral-scorer.js +223 -0
  18. package/dist/behavioral-scorer.js.map +1 -0
  19. package/dist/cli/init.d.ts +11 -0
  20. package/dist/cli/init.d.ts.map +1 -0
  21. package/dist/cli/init.js +217 -0
  22. package/dist/cli/init.js.map +1 -0
  23. package/dist/compliance-articles.d.ts +71 -0
  24. package/dist/compliance-articles.d.ts.map +1 -0
  25. package/dist/compliance-articles.js +201 -0
  26. package/dist/compliance-articles.js.map +1 -0
  27. package/dist/compliance.d.ts +24 -0
  28. package/dist/compliance.d.ts.map +1 -0
  29. package/dist/compliance.js +183 -0
  30. package/dist/compliance.js.map +1 -0
  31. package/dist/conditions/builtins.d.ts +17 -0
  32. package/dist/conditions/builtins.d.ts.map +1 -0
  33. package/dist/conditions/builtins.js +213 -0
  34. package/dist/conditions/builtins.js.map +1 -0
  35. package/dist/conditions/postprocess.d.ts +12 -0
  36. package/dist/conditions/postprocess.d.ts.map +1 -0
  37. package/dist/conditions/postprocess.js +33 -0
  38. package/dist/conditions/postprocess.js.map +1 -0
  39. package/dist/conditions/preprocess.d.ts +12 -0
  40. package/dist/conditions/preprocess.d.ts.map +1 -0
  41. package/dist/conditions/preprocess.js +47 -0
  42. package/dist/conditions/preprocess.js.map +1 -0
  43. package/dist/conditions/process.d.ts +14 -0
  44. package/dist/conditions/process.d.ts.map +1 -0
  45. package/dist/conditions/process.js +78 -0
  46. package/dist/conditions/process.js.map +1 -0
  47. package/dist/conditions/sensitive-patterns.d.ts +13 -0
  48. package/dist/conditions/sensitive-patterns.d.ts.map +1 -0
  49. package/dist/conditions/sensitive-patterns.js +42 -0
  50. package/dist/conditions/sensitive-patterns.js.map +1 -0
  51. package/dist/dry-run.d.ts +85 -0
  52. package/dist/dry-run.d.ts.map +1 -0
  53. package/dist/dry-run.js +132 -0
  54. package/dist/dry-run.js.map +1 -0
  55. package/dist/eval-red-team.d.ts +69 -0
  56. package/dist/eval-red-team.d.ts.map +1 -0
  57. package/dist/eval-red-team.js +205 -0
  58. package/dist/eval-red-team.js.map +1 -0
  59. package/dist/eval-scorer.d.ts +56 -0
  60. package/dist/eval-scorer.d.ts.map +1 -0
  61. package/dist/eval-scorer.js +148 -0
  62. package/dist/eval-scorer.js.map +1 -0
  63. package/dist/eval-trace.d.ts +30 -0
  64. package/dist/eval-trace.d.ts.map +1 -0
  65. package/dist/eval-trace.js +129 -0
  66. package/dist/eval-trace.js.map +1 -0
  67. package/dist/eval-types.d.ts +108 -0
  68. package/dist/eval-types.d.ts.map +1 -0
  69. package/dist/eval-types.js +14 -0
  70. package/dist/eval-types.js.map +1 -0
  71. package/dist/events.d.ts +57 -0
  72. package/dist/events.d.ts.map +1 -0
  73. package/dist/events.js +81 -0
  74. package/dist/events.js.map +1 -0
  75. package/dist/federation-types.d.ts +58 -0
  76. package/dist/federation-types.d.ts.map +1 -0
  77. package/dist/federation-types.js +8 -0
  78. package/dist/federation-types.js.map +1 -0
  79. package/dist/federation.d.ts +42 -0
  80. package/dist/federation.d.ts.map +1 -0
  81. package/dist/federation.js +158 -0
  82. package/dist/federation.js.map +1 -0
  83. package/dist/index.d.ts +142 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +273 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/injection-benchmark.d.ts +62 -0
  88. package/dist/injection-benchmark.d.ts.map +1 -0
  89. package/dist/injection-benchmark.js +201 -0
  90. package/dist/injection-benchmark.js.map +1 -0
  91. package/dist/injection-classifier.d.ts +69 -0
  92. package/dist/injection-classifier.d.ts.map +1 -0
  93. package/dist/injection-classifier.js +98 -0
  94. package/dist/injection-classifier.js.map +1 -0
  95. package/dist/injection-detect.d.ts +59 -0
  96. package/dist/injection-detect.d.ts.map +1 -0
  97. package/dist/injection-detect.js +175 -0
  98. package/dist/injection-detect.js.map +1 -0
  99. package/dist/injection-patterns-ext.d.ts +7 -0
  100. package/dist/injection-patterns-ext.d.ts.map +1 -0
  101. package/dist/injection-patterns-ext.js +71 -0
  102. package/dist/injection-patterns-ext.js.map +1 -0
  103. package/dist/injection-patterns.d.ts +15 -0
  104. package/dist/injection-patterns.d.ts.map +1 -0
  105. package/dist/injection-patterns.js +361 -0
  106. package/dist/injection-patterns.js.map +1 -0
  107. package/dist/iso-42001-articles.d.ts +34 -0
  108. package/dist/iso-42001-articles.d.ts.map +1 -0
  109. package/dist/iso-42001-articles.js +147 -0
  110. package/dist/iso-42001-articles.js.map +1 -0
  111. package/dist/iso-42001.d.ts +18 -0
  112. package/dist/iso-42001.d.ts.map +1 -0
  113. package/dist/iso-42001.js +156 -0
  114. package/dist/iso-42001.js.map +1 -0
  115. package/dist/kill-switch.d.ts +56 -0
  116. package/dist/kill-switch.d.ts.map +1 -0
  117. package/dist/kill-switch.js +173 -0
  118. package/dist/kill-switch.js.map +1 -0
  119. package/dist/metrics.d.ts +58 -0
  120. package/dist/metrics.d.ts.map +1 -0
  121. package/dist/metrics.js +81 -0
  122. package/dist/metrics.js.map +1 -0
  123. package/dist/monorepo-detect.d.ts +30 -0
  124. package/dist/monorepo-detect.d.ts.map +1 -0
  125. package/dist/monorepo-detect.js +107 -0
  126. package/dist/monorepo-detect.js.map +1 -0
  127. package/dist/nist-ai-rmf-articles.d.ts +40 -0
  128. package/dist/nist-ai-rmf-articles.d.ts.map +1 -0
  129. package/dist/nist-ai-rmf-articles.js +156 -0
  130. package/dist/nist-ai-rmf-articles.js.map +1 -0
  131. package/dist/nist-ai-rmf.d.ts +20 -0
  132. package/dist/nist-ai-rmf.d.ts.map +1 -0
  133. package/dist/nist-ai-rmf.js +176 -0
  134. package/dist/nist-ai-rmf.js.map +1 -0
  135. package/dist/otel-hooks.d.ts +67 -0
  136. package/dist/otel-hooks.d.ts.map +1 -0
  137. package/dist/otel-hooks.js +100 -0
  138. package/dist/otel-hooks.js.map +1 -0
  139. package/dist/owasp-agentic-articles.d.ts +42 -0
  140. package/dist/owasp-agentic-articles.d.ts.map +1 -0
  141. package/dist/owasp-agentic-articles.js +236 -0
  142. package/dist/owasp-agentic-articles.js.map +1 -0
  143. package/dist/owasp-agentic.d.ts +20 -0
  144. package/dist/owasp-agentic.d.ts.map +1 -0
  145. package/dist/owasp-agentic.js +205 -0
  146. package/dist/owasp-agentic.js.map +1 -0
  147. package/dist/plugins/a2a-types.d.ts +241 -0
  148. package/dist/plugins/a2a-types.d.ts.map +1 -0
  149. package/dist/plugins/a2a-types.js +14 -0
  150. package/dist/plugins/a2a-types.js.map +1 -0
  151. package/dist/plugins/a2a.d.ts +37 -0
  152. package/dist/plugins/a2a.d.ts.map +1 -0
  153. package/dist/plugins/a2a.js +160 -0
  154. package/dist/plugins/a2a.js.map +1 -0
  155. package/dist/plugins/anthropic-types.d.ts +188 -0
  156. package/dist/plugins/anthropic-types.d.ts.map +1 -0
  157. package/dist/plugins/anthropic-types.js +8 -0
  158. package/dist/plugins/anthropic-types.js.map +1 -0
  159. package/dist/plugins/anthropic.d.ts +32 -0
  160. package/dist/plugins/anthropic.d.ts.map +1 -0
  161. package/dist/plugins/anthropic.js +131 -0
  162. package/dist/plugins/anthropic.js.map +1 -0
  163. package/dist/plugins/autogen-types.d.ts +121 -0
  164. package/dist/plugins/autogen-types.d.ts.map +1 -0
  165. package/dist/plugins/autogen-types.js +13 -0
  166. package/dist/plugins/autogen-types.js.map +1 -0
  167. package/dist/plugins/autogen.d.ts +41 -0
  168. package/dist/plugins/autogen.d.ts.map +1 -0
  169. package/dist/plugins/autogen.js +131 -0
  170. package/dist/plugins/autogen.js.map +1 -0
  171. package/dist/plugins/bedrock-types.d.ts +246 -0
  172. package/dist/plugins/bedrock-types.d.ts.map +1 -0
  173. package/dist/plugins/bedrock-types.js +8 -0
  174. package/dist/plugins/bedrock-types.js.map +1 -0
  175. package/dist/plugins/bedrock.d.ts +43 -0
  176. package/dist/plugins/bedrock.d.ts.map +1 -0
  177. package/dist/plugins/bedrock.js +155 -0
  178. package/dist/plugins/bedrock.js.map +1 -0
  179. package/dist/plugins/cloudflare-ai-types.d.ts +85 -0
  180. package/dist/plugins/cloudflare-ai-types.d.ts.map +1 -0
  181. package/dist/plugins/cloudflare-ai-types.js +10 -0
  182. package/dist/plugins/cloudflare-ai-types.js.map +1 -0
  183. package/dist/plugins/cloudflare-ai.d.ts +32 -0
  184. package/dist/plugins/cloudflare-ai.d.ts.map +1 -0
  185. package/dist/plugins/cloudflare-ai.js +108 -0
  186. package/dist/plugins/cloudflare-ai.js.map +1 -0
  187. package/dist/plugins/composio-types.d.ts +96 -0
  188. package/dist/plugins/composio-types.d.ts.map +1 -0
  189. package/dist/plugins/composio-types.js +13 -0
  190. package/dist/plugins/composio-types.js.map +1 -0
  191. package/dist/plugins/composio.d.ts +37 -0
  192. package/dist/plugins/composio.d.ts.map +1 -0
  193. package/dist/plugins/composio.js +118 -0
  194. package/dist/plugins/composio.js.map +1 -0
  195. package/dist/plugins/crewai-types.d.ts +153 -0
  196. package/dist/plugins/crewai-types.d.ts.map +1 -0
  197. package/dist/plugins/crewai-types.js +10 -0
  198. package/dist/plugins/crewai-types.js.map +1 -0
  199. package/dist/plugins/crewai.d.ts +37 -0
  200. package/dist/plugins/crewai.d.ts.map +1 -0
  201. package/dist/plugins/crewai.js +127 -0
  202. package/dist/plugins/crewai.js.map +1 -0
  203. package/dist/plugins/deno-types.d.ts +68 -0
  204. package/dist/plugins/deno-types.d.ts.map +1 -0
  205. package/dist/plugins/deno-types.js +8 -0
  206. package/dist/plugins/deno-types.js.map +1 -0
  207. package/dist/plugins/deno.d.ts +37 -0
  208. package/dist/plugins/deno.d.ts.map +1 -0
  209. package/dist/plugins/deno.js +129 -0
  210. package/dist/plugins/deno.js.map +1 -0
  211. package/dist/plugins/e2b-types.d.ts +140 -0
  212. package/dist/plugins/e2b-types.d.ts.map +1 -0
  213. package/dist/plugins/e2b-types.js +8 -0
  214. package/dist/plugins/e2b-types.js.map +1 -0
  215. package/dist/plugins/e2b.d.ts +43 -0
  216. package/dist/plugins/e2b.d.ts.map +1 -0
  217. package/dist/plugins/e2b.js +157 -0
  218. package/dist/plugins/e2b.js.map +1 -0
  219. package/dist/plugins/genkit-types.d.ts +88 -0
  220. package/dist/plugins/genkit-types.d.ts.map +1 -0
  221. package/dist/plugins/genkit-types.js +11 -0
  222. package/dist/plugins/genkit-types.js.map +1 -0
  223. package/dist/plugins/genkit.d.ts +35 -0
  224. package/dist/plugins/genkit.d.ts.map +1 -0
  225. package/dist/plugins/genkit.js +143 -0
  226. package/dist/plugins/genkit.js.map +1 -0
  227. package/dist/plugins/langchain.d.ts +130 -0
  228. package/dist/plugins/langchain.d.ts.map +1 -0
  229. package/dist/plugins/langchain.js +172 -0
  230. package/dist/plugins/langchain.js.map +1 -0
  231. package/dist/plugins/llamaindex-types.d.ts +86 -0
  232. package/dist/plugins/llamaindex-types.d.ts.map +1 -0
  233. package/dist/plugins/llamaindex-types.js +11 -0
  234. package/dist/plugins/llamaindex-types.js.map +1 -0
  235. package/dist/plugins/llamaindex.d.ts +36 -0
  236. package/dist/plugins/llamaindex.d.ts.map +1 -0
  237. package/dist/plugins/llamaindex.js +131 -0
  238. package/dist/plugins/llamaindex.js.map +1 -0
  239. package/dist/plugins/mastra-processor-types.d.ts +126 -0
  240. package/dist/plugins/mastra-processor-types.d.ts.map +1 -0
  241. package/dist/plugins/mastra-processor-types.js +11 -0
  242. package/dist/plugins/mastra-processor-types.js.map +1 -0
  243. package/dist/plugins/mastra-processor.d.ts +32 -0
  244. package/dist/plugins/mastra-processor.d.ts.map +1 -0
  245. package/dist/plugins/mastra-processor.js +126 -0
  246. package/dist/plugins/mastra-processor.js.map +1 -0
  247. package/dist/plugins/mastra.d.ts +100 -0
  248. package/dist/plugins/mastra.d.ts.map +1 -0
  249. package/dist/plugins/mastra.js +143 -0
  250. package/dist/plugins/mastra.js.map +1 -0
  251. package/dist/plugins/mcp-annotations.d.ts +54 -0
  252. package/dist/plugins/mcp-annotations.d.ts.map +1 -0
  253. package/dist/plugins/mcp-annotations.js +110 -0
  254. package/dist/plugins/mcp-annotations.js.map +1 -0
  255. package/dist/plugins/mcp-chain-audit.d.ts +74 -0
  256. package/dist/plugins/mcp-chain-audit.d.ts.map +1 -0
  257. package/dist/plugins/mcp-chain-audit.js +134 -0
  258. package/dist/plugins/mcp-chain-audit.js.map +1 -0
  259. package/dist/plugins/mcp-trust.d.ts +59 -0
  260. package/dist/plugins/mcp-trust.d.ts.map +1 -0
  261. package/dist/plugins/mcp-trust.js +100 -0
  262. package/dist/plugins/mcp-trust.js.map +1 -0
  263. package/dist/plugins/mcp-types.d.ts +183 -0
  264. package/dist/plugins/mcp-types.d.ts.map +1 -0
  265. package/dist/plugins/mcp-types.js +12 -0
  266. package/dist/plugins/mcp-types.js.map +1 -0
  267. package/dist/plugins/mcp.d.ts +41 -0
  268. package/dist/plugins/mcp.d.ts.map +1 -0
  269. package/dist/plugins/mcp.js +228 -0
  270. package/dist/plugins/mcp.js.map +1 -0
  271. package/dist/plugins/mistral-types.d.ts +72 -0
  272. package/dist/plugins/mistral-types.d.ts.map +1 -0
  273. package/dist/plugins/mistral-types.js +8 -0
  274. package/dist/plugins/mistral-types.js.map +1 -0
  275. package/dist/plugins/mistral.d.ts +32 -0
  276. package/dist/plugins/mistral.d.ts.map +1 -0
  277. package/dist/plugins/mistral.js +133 -0
  278. package/dist/plugins/mistral.js.map +1 -0
  279. package/dist/plugins/ollama-types.d.ts +76 -0
  280. package/dist/plugins/ollama-types.d.ts.map +1 -0
  281. package/dist/plugins/ollama-types.js +8 -0
  282. package/dist/plugins/ollama-types.js.map +1 -0
  283. package/dist/plugins/ollama.d.ts +32 -0
  284. package/dist/plugins/ollama.d.ts.map +1 -0
  285. package/dist/plugins/ollama.js +130 -0
  286. package/dist/plugins/ollama.js.map +1 -0
  287. package/dist/plugins/openai-agents-types.d.ts +130 -0
  288. package/dist/plugins/openai-agents-types.d.ts.map +1 -0
  289. package/dist/plugins/openai-agents-types.js +12 -0
  290. package/dist/plugins/openai-agents-types.js.map +1 -0
  291. package/dist/plugins/openai-agents.d.ts +37 -0
  292. package/dist/plugins/openai-agents.d.ts.map +1 -0
  293. package/dist/plugins/openai-agents.js +151 -0
  294. package/dist/plugins/openai-agents.js.map +1 -0
  295. package/dist/plugins/semantic-kernel-types.d.ts +103 -0
  296. package/dist/plugins/semantic-kernel-types.d.ts.map +1 -0
  297. package/dist/plugins/semantic-kernel-types.js +13 -0
  298. package/dist/plugins/semantic-kernel-types.js.map +1 -0
  299. package/dist/plugins/semantic-kernel.d.ts +37 -0
  300. package/dist/plugins/semantic-kernel.d.ts.map +1 -0
  301. package/dist/plugins/semantic-kernel.js +149 -0
  302. package/dist/plugins/semantic-kernel.js.map +1 -0
  303. package/dist/plugins/vercel-ai.d.ts +134 -0
  304. package/dist/plugins/vercel-ai.d.ts.map +1 -0
  305. package/dist/plugins/vercel-ai.js +130 -0
  306. package/dist/plugins/vercel-ai.js.map +1 -0
  307. package/dist/policy-builder.d.ts +52 -0
  308. package/dist/policy-builder.d.ts.map +1 -0
  309. package/dist/policy-builder.js +108 -0
  310. package/dist/policy-builder.js.map +1 -0
  311. package/dist/policy-compose-presets.d.ts +18 -0
  312. package/dist/policy-compose-presets.d.ts.map +1 -0
  313. package/dist/policy-compose-presets.js +52 -0
  314. package/dist/policy-compose-presets.js.map +1 -0
  315. package/dist/policy-compose.d.ts +66 -0
  316. package/dist/policy-compose.d.ts.map +1 -0
  317. package/dist/policy-compose.js +163 -0
  318. package/dist/policy-compose.js.map +1 -0
  319. package/dist/policy-presets-extended.d.ts +35 -0
  320. package/dist/policy-presets-extended.d.ts.map +1 -0
  321. package/dist/policy-presets-extended.js +137 -0
  322. package/dist/policy-presets-extended.js.map +1 -0
  323. package/dist/policy-presets.d.ts +77 -0
  324. package/dist/policy-presets.d.ts.map +1 -0
  325. package/dist/policy-presets.js +164 -0
  326. package/dist/policy-presets.js.map +1 -0
  327. package/dist/policy-stage-defaults.d.ts +8 -0
  328. package/dist/policy-stage-defaults.d.ts.map +1 -0
  329. package/dist/policy-stage-defaults.js +34 -0
  330. package/dist/policy-stage-defaults.js.map +1 -0
  331. package/dist/policy-yaml.d.ts +23 -0
  332. package/dist/policy-yaml.d.ts.map +1 -0
  333. package/dist/policy-yaml.js +216 -0
  334. package/dist/policy-yaml.js.map +1 -0
  335. package/dist/policy.d.ts +124 -0
  336. package/dist/policy.d.ts.map +1 -0
  337. package/dist/policy.js +161 -0
  338. package/dist/policy.js.map +1 -0
  339. package/dist/remote-enforce.d.ts +44 -0
  340. package/dist/remote-enforce.d.ts.map +1 -0
  341. package/dist/remote-enforce.js +99 -0
  342. package/dist/remote-enforce.js.map +1 -0
  343. package/dist/repo-patterns.d.ts +32 -0
  344. package/dist/repo-patterns.d.ts.map +1 -0
  345. package/dist/repo-patterns.js +222 -0
  346. package/dist/repo-patterns.js.map +1 -0
  347. package/dist/sandbox.d.ts +68 -0
  348. package/dist/sandbox.d.ts.map +1 -0
  349. package/dist/sandbox.js +124 -0
  350. package/dist/sandbox.js.map +1 -0
  351. package/dist/scorer-dimensions.d.ts +10 -0
  352. package/dist/scorer-dimensions.d.ts.map +1 -0
  353. package/dist/scorer-dimensions.js +184 -0
  354. package/dist/scorer-dimensions.js.map +1 -0
  355. package/dist/scorer.d.ts +27 -0
  356. package/dist/scorer.d.ts.map +1 -0
  357. package/dist/scorer.js +138 -0
  358. package/dist/scorer.js.map +1 -0
  359. package/dist/storage-postgres-schema.d.ts +47 -0
  360. package/dist/storage-postgres-schema.d.ts.map +1 -0
  361. package/dist/storage-postgres-schema.js +134 -0
  362. package/dist/storage-postgres-schema.js.map +1 -0
  363. package/dist/storage-postgres.d.ts +41 -0
  364. package/dist/storage-postgres.d.ts.map +1 -0
  365. package/dist/storage-postgres.js +180 -0
  366. package/dist/storage-postgres.js.map +1 -0
  367. package/dist/storage.d.ts +65 -0
  368. package/dist/storage.d.ts.map +1 -0
  369. package/dist/storage.js +85 -0
  370. package/dist/storage.js.map +1 -0
  371. package/dist/supply-chain-sbom.d.ts +72 -0
  372. package/dist/supply-chain-sbom.d.ts.map +1 -0
  373. package/dist/supply-chain-sbom.js +73 -0
  374. package/dist/supply-chain-sbom.js.map +1 -0
  375. package/dist/supply-chain.d.ts +61 -0
  376. package/dist/supply-chain.d.ts.map +1 -0
  377. package/dist/supply-chain.js +95 -0
  378. package/dist/supply-chain.js.map +1 -0
  379. package/dist/token-types.d.ts +77 -0
  380. package/dist/token-types.d.ts.map +1 -0
  381. package/dist/token-types.js +31 -0
  382. package/dist/token-types.js.map +1 -0
  383. package/dist/types.d.ts +71 -0
  384. package/dist/types.d.ts.map +1 -0
  385. package/dist/types.js +6 -0
  386. package/dist/types.js.map +1 -0
  387. package/package.json +361 -0
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Behavioral Scoring — adjusts governance scores using observed audit data.
3
+ *
4
+ * Three signal categories:
5
+ * 1. Enforcement signals — block rate, approval rate, rule triggers
6
+ * 2. Activity signals — event volume, tool diversity, injection hits
7
+ * 3. Drift signals — declared vs observed tool usage
8
+ *
9
+ * Returns per-dimension adjustments (-20 to +20) and evidence.
10
+ */
11
+ const MAX_ADJUSTMENT = 20;
12
+ const MIN_ADJUSTMENT = -20;
13
+ function clampAdj(v) {
14
+ return Math.max(MIN_ADJUSTMENT, Math.min(MAX_ADJUSTMENT, Math.round(v)));
15
+ }
16
+ /**
17
+ * Extract behavioral signals from audit events.
18
+ * Uses recency-weighted block rate: recent events count more than old ones.
19
+ */
20
+ export function computeSignals(input) {
21
+ const { events, declaredTools, config } = input;
22
+ const windowSize = config?.windowSize ?? 200;
23
+ const recencyBias = config?.recencyBias ?? 0.7;
24
+ if (events.length === 0) {
25
+ return {
26
+ totalEvents: 0, blockRate: 0, approvalRate: 0, injectionHits: 0,
27
+ uniqueToolsObserved: [], undeclaredTools: [], eventFrequency: 0,
28
+ lastActivityAt: null,
29
+ };
30
+ }
31
+ // Window: only consider the most recent N events
32
+ const sortedByTime = [...events].sort((a, b) => a.createdAt.localeCompare(b.createdAt));
33
+ const windowed = sortedByTime.slice(-windowSize);
34
+ // Recency-weighted block rate: more recent events have higher weight.
35
+ // With recencyBias=0.7, the most recent event has 1.0 weight,
36
+ // the oldest has 0.3 weight. This makes the score responsive to
37
+ // recent behavior changes without ignoring history entirely.
38
+ let weightedBlocked = 0;
39
+ let totalWeight = 0;
40
+ for (let i = 0; i < windowed.length; i++) {
41
+ const position = i / Math.max(1, windowed.length - 1); // 0 (oldest) to 1 (newest)
42
+ const weight = (1 - recencyBias) + recencyBias * position;
43
+ totalWeight += weight;
44
+ if (windowed[i].outcome === "blocked")
45
+ weightedBlocked += weight;
46
+ }
47
+ const blockRate = totalWeight > 0 ? weightedBlocked / totalWeight : 0;
48
+ const approvals = windowed.filter((e) => e.outcome === "require_approval").length;
49
+ const injections = windowed.filter((e) => e.eventType === "injection_detected" ||
50
+ e.detail?.outcome === "detected").length;
51
+ // Tool diversity from event details
52
+ const observedTools = new Set();
53
+ for (const e of windowed) {
54
+ const detail = e.detail;
55
+ if (detail?.tool && typeof detail.tool === "string") {
56
+ observedTools.add(detail.tool);
57
+ }
58
+ }
59
+ const declaredSet = new Set(declaredTools);
60
+ const undeclared = [...observedTools].filter((t) => !declaredSet.has(t));
61
+ // Event frequency (events per day)
62
+ const first = new Date(windowed[0].createdAt).getTime();
63
+ const last = new Date(windowed[windowed.length - 1].createdAt).getTime();
64
+ const daySpan = Math.max(1, (last - first) / (1000 * 60 * 60 * 24));
65
+ const frequency = windowed.length / daySpan;
66
+ return {
67
+ totalEvents: windowed.length,
68
+ blockRate,
69
+ approvalRate: windowed.length > 0 ? approvals / windowed.length : 0,
70
+ injectionHits: injections,
71
+ uniqueToolsObserved: [...observedTools],
72
+ undeclaredTools: undeclared,
73
+ eventFrequency: Math.round(frequency * 10) / 10,
74
+ lastActivityAt: windowed[windowed.length - 1].createdAt,
75
+ };
76
+ }
77
+ /** Compute per-dimension behavioral adjustments from audit signals. */
78
+ export function computeBehavioralAdjustments(input) {
79
+ const signals = computeSignals(input);
80
+ const adjustments = [];
81
+ // Block rate threshold — below this is considered "clean enough"
82
+ const threshold = input.config?.blockRateThreshold ?? 0.05;
83
+ const isClean = signals.blockRate <= threshold;
84
+ const isConcerning = signals.blockRate > threshold * 3; // 3x threshold = concerning
85
+ // ── Identity ──────────────────────────────────────────────────
86
+ let identityAdj = 0;
87
+ if (signals.totalEvents > 0 && isClean) {
88
+ identityAdj = signals.totalEvents > 10 ? 5 : 2;
89
+ }
90
+ else if (isConcerning) {
91
+ identityAdj = -5;
92
+ }
93
+ adjustments.push({
94
+ dimension: "identity",
95
+ adjustment: clampAdj(identityAdj),
96
+ evidence: { totalEvents: signals.totalEvents, hasActivity: signals.totalEvents > 0 },
97
+ });
98
+ // ── Permissions ───────────────────────────────────────────────
99
+ let permAdj = 0;
100
+ if (signals.undeclaredTools.length > 0) {
101
+ permAdj -= Math.min(15, signals.undeclaredTools.length * 5);
102
+ }
103
+ if (signals.totalEvents > 5) {
104
+ if (isClean) {
105
+ permAdj += 5;
106
+ }
107
+ else {
108
+ permAdj -= Math.min(15, Math.round(signals.blockRate * 30));
109
+ }
110
+ }
111
+ adjustments.push({
112
+ dimension: "permissions",
113
+ adjustment: clampAdj(permAdj),
114
+ evidence: {
115
+ undeclaredToolCount: signals.undeclaredTools.length,
116
+ blockRate: Math.round(signals.blockRate * 100),
117
+ observedTools: signals.uniqueToolsObserved.length,
118
+ },
119
+ });
120
+ // ── Observability ─────────────────────────────────────────────
121
+ let obsAdj = 0;
122
+ if (isClean && signals.totalEvents > 50)
123
+ obsAdj += 10;
124
+ else if (isClean && signals.totalEvents > 10)
125
+ obsAdj += 5;
126
+ else if (isConcerning)
127
+ obsAdj -= 5;
128
+ adjustments.push({
129
+ dimension: "observability",
130
+ adjustment: clampAdj(obsAdj),
131
+ evidence: { eventFrequency: signals.eventFrequency, totalEvents: signals.totalEvents },
132
+ });
133
+ // ── Guardrails ────────────────────────────────────────────────
134
+ let guardAdj = 0;
135
+ if (signals.totalEvents > 5 && isClean && signals.injectionHits === 0) {
136
+ guardAdj += 10;
137
+ }
138
+ if (!isClean) {
139
+ guardAdj -= Math.min(15, Math.round(signals.blockRate * 30));
140
+ }
141
+ if (signals.injectionHits > 0) {
142
+ guardAdj -= Math.min(10, signals.injectionHits * 3);
143
+ }
144
+ adjustments.push({
145
+ dimension: "guardrails",
146
+ adjustment: clampAdj(guardAdj),
147
+ evidence: {
148
+ blockRate: Math.round(signals.blockRate * 100),
149
+ injectionHits: signals.injectionHits,
150
+ },
151
+ });
152
+ // ── Auditability ──────────────────────────────────────────────
153
+ let auditAdj = 0;
154
+ if (isClean && signals.totalEvents > 20)
155
+ auditAdj += 10;
156
+ else if (isClean && signals.totalEvents > 5)
157
+ auditAdj += 5;
158
+ else if (isConcerning)
159
+ auditAdj -= 5;
160
+ if (signals.lastActivityAt) {
161
+ const daysSince = (Date.now() - new Date(signals.lastActivityAt).getTime()) / (1000 * 60 * 60 * 24);
162
+ if (daysSince > 30)
163
+ auditAdj -= 5; // stale — no recent audit data
164
+ }
165
+ adjustments.push({
166
+ dimension: "auditability",
167
+ adjustment: clampAdj(auditAdj),
168
+ evidence: { totalEvents: signals.totalEvents, lastActivityAt: signals.lastActivityAt ?? "never" },
169
+ });
170
+ // ── Compliance ────────────────────────────────────────────────
171
+ let compAdj = 0;
172
+ if (signals.totalEvents > 5 && isClean) {
173
+ compAdj += 10;
174
+ }
175
+ if (!isClean) {
176
+ compAdj -= Math.min(15, Math.round(signals.blockRate * 30));
177
+ }
178
+ adjustments.push({
179
+ dimension: "compliance",
180
+ adjustment: clampAdj(compAdj),
181
+ evidence: {
182
+ blockRate: Math.round(signals.blockRate * 100),
183
+ totalEvents: signals.totalEvents,
184
+ },
185
+ });
186
+ // ── Lifecycle ─────────────────────────────────────────────────
187
+ let lifeAdj = 0;
188
+ if (signals.lastActivityAt) {
189
+ const daysSince = (Date.now() - new Date(signals.lastActivityAt).getTime()) / (1000 * 60 * 60 * 24);
190
+ if (daysSince < 7 && isClean)
191
+ lifeAdj += 5;
192
+ else if (daysSince < 7 && isConcerning)
193
+ lifeAdj -= 5;
194
+ else if (daysSince > 30)
195
+ lifeAdj -= 10;
196
+ }
197
+ adjustments.push({
198
+ dimension: "lifecycle",
199
+ adjustment: clampAdj(lifeAdj),
200
+ evidence: { lastActivityAt: signals.lastActivityAt ?? "never", eventFrequency: signals.eventFrequency },
201
+ });
202
+ return { adjustments, signals };
203
+ }
204
+ /** Apply behavioral adjustments to base dimension scores. */
205
+ export function applyBehavioralAdjustments(baseDimensions, adjustments) {
206
+ const adjMap = new Map(adjustments.map((a) => [a.dimension, a]));
207
+ return baseDimensions.map((dim) => {
208
+ const adj = adjMap.get(dim.dimension);
209
+ if (!adj || adj.adjustment === 0)
210
+ return dim;
211
+ const adjustedScore = Math.max(0, Math.min(100, dim.score + adj.adjustment));
212
+ return {
213
+ ...dim,
214
+ score: adjustedScore,
215
+ evidence: {
216
+ ...dim.evidence,
217
+ behavioralAdjustment: adj.adjustment,
218
+ ...Object.fromEntries(Object.entries(adj.evidence).map(([k, v]) => [`behavioral_${k}`, v])),
219
+ },
220
+ };
221
+ });
222
+ }
223
+ //# sourceMappingURL=behavioral-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavioral-scorer.js","sourceRoot":"","sources":["../src/behavioral-scorer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * governance-sdk CLI — Interactive project setup
4
+ *
5
+ * Usage: npx governance-sdk init
6
+ *
7
+ * Generates a governance.config.ts file with sensible defaults
8
+ * and prints a quickstart guide.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * governance-sdk CLI — Interactive project setup
4
+ *
5
+ * Usage: npx governance-sdk init
6
+ *
7
+ * Generates a governance.config.ts file with sensible defaults
8
+ * and prints a quickstart guide.
9
+ */
10
+ import { writeFileSync, existsSync } from "node:fs";
11
+ import { resolve } from "node:path";
12
+ import { createInterface } from "node:readline";
13
+ const RESET = "\x1b[0m";
14
+ const BOLD = "\x1b[1m";
15
+ const DIM = "\x1b[2m";
16
+ const GREEN = "\x1b[32m";
17
+ const CYAN = "\x1b[36m";
18
+ const YELLOW = "\x1b[33m";
19
+ const RED = "\x1b[31m";
20
+ const MAGENTA = "\x1b[35m";
21
+ function print(msg) {
22
+ process.stdout.write(msg + "\n");
23
+ }
24
+ function ask(question, defaultVal) {
25
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
26
+ const prompt = defaultVal
27
+ ? `${CYAN}?${RESET} ${question} ${DIM}(${defaultVal})${RESET} `
28
+ : `${CYAN}?${RESET} ${question} `;
29
+ return new Promise((resolve) => {
30
+ rl.question(prompt, (answer) => {
31
+ rl.close();
32
+ resolve(answer.trim() || defaultVal || "");
33
+ });
34
+ });
35
+ }
36
+ function banner() {
37
+ print("");
38
+ print(`${BOLD}${MAGENTA} governance-sdk${RESET}`);
39
+ print(`${DIM} Runtime governance for TypeScript AI agents${RESET}`);
40
+ print(`${DIM} Policy enforcement · Audit trails · Fleet scoring${RESET}`);
41
+ print("");
42
+ }
43
+ function generateConfigFile(config) {
44
+ const imports = [
45
+ "createGovernance",
46
+ "blockTools",
47
+ ];
48
+ const rules = [];
49
+ if (config.blockDangerous) {
50
+ rules.push(` blockTools([\n 'shell_exec', 'rm_rf', 'database_drop',\n 'file_delete', 'process_kill',\n ]),`);
51
+ }
52
+ if (config.requireApproval) {
53
+ imports.push("requireApproval");
54
+ rules.push(` requireApproval(['data_export', 'email_send', 'payment_process']),`);
55
+ }
56
+ if (config.tokenLimit > 0) {
57
+ imports.push("tokenBudget");
58
+ rules.push(` tokenBudget(${config.tokenLimit.toLocaleString().replace(/,/g, "_")}),`);
59
+ }
60
+ const importLine = `import { ${imports.join(", ")} } from 'governance-sdk';`;
61
+ let processorSection = "";
62
+ if (config.useProcessor) {
63
+ processorSection = `
64
+ // ─── Mastra Processor (framework-level governance) ──────────
65
+ // Pass this processor to agent.generate() to govern ALL tool calls
66
+ // automatically — no per-tool wrapping needed.
67
+
68
+ import { GovernanceProcessor } from 'governance-sdk/plugins/mastra-processor';
69
+
70
+ export const processor = new GovernanceProcessor(governance, {
71
+ agentName: '${config.agentName}',
72
+ owner: '${config.owner}',
73
+ framework: '${config.framework}',
74
+ retryOnBlock: true, // Let the LLM try a different approach
75
+ maxRetries: 2,
76
+ });
77
+
78
+ // Usage:
79
+ // const result = await agent.generate(prompt, { processor });
80
+ `;
81
+ }
82
+ return `/**
83
+ * governance-sdk configuration
84
+ * Generated by: npx governance-sdk init
85
+ *
86
+ * Docs: https://heylua.ai/governance
87
+ * GitHub: https://github.com/lua-ai-global/governance
88
+ */
89
+
90
+ ${importLine}
91
+
92
+ // ─── Governance Instance ────────────────────────────────────
93
+ // Central governance configuration for your agent fleet.
94
+ // All agents registered here share the same policy rules.
95
+
96
+ export const governance = createGovernance({
97
+ rules: [
98
+ ${rules.join("\n")}
99
+ ],
100
+ });
101
+
102
+ // ─── Register Your Agent ────────────────────────────────────
103
+ // Call this at agent startup. Returns { id, score, level }.
104
+
105
+ export async function registerAgent() {
106
+ return governance.register({
107
+ name: '${config.agentName}',
108
+ framework: '${config.framework}',
109
+ owner: '${config.owner}',
110
+ hasAuth: false, // Set true when you add auth
111
+ hasGuardrails: true, // You have governance now!
112
+ hasObservability: false,
113
+ hasAuditLog: true, // Governance provides audit
114
+ });
115
+ }
116
+ ${processorSection}
117
+ // ─── Enforce Before Actions ─────────────────────────────────
118
+ // Call gov.enforce() before any sensitive operation.
119
+ //
120
+ // const decision = await governance.enforce({
121
+ // agentId: agent.id,
122
+ // agentName: '${config.agentName}',
123
+ // agentLevel: agent.level,
124
+ // action: 'tool_call',
125
+ // tool: 'shell_exec',
126
+ // });
127
+ //
128
+ // if (decision.blocked) {
129
+ // console.log('Blocked:', decision.reason);
130
+ // }
131
+ `;
132
+ }
133
+ async function main() {
134
+ const args = process.argv.slice(2);
135
+ const command = args[0];
136
+ if (command !== "init") {
137
+ print(`${BOLD}governance-sdk${RESET} — Runtime governance for TypeScript AI agents\n`);
138
+ print(`${BOLD}Usage:${RESET}`);
139
+ print(` npx governance-sdk init Set up governance in your project`);
140
+ print(` npx governance-sdk --help Show this help message\n`);
141
+ print(`${BOLD}Docs:${RESET} https://heylua.ai/governance`);
142
+ print(`${BOLD}GitHub:${RESET} https://github.com/lua-ai-global/governance\n`);
143
+ return;
144
+ }
145
+ banner();
146
+ // Check if config already exists
147
+ const configPath = resolve(process.cwd(), "governance.config.ts");
148
+ if (existsSync(configPath)) {
149
+ print(`${YELLOW}!${RESET} governance.config.ts already exists.`);
150
+ const overwrite = await ask("Overwrite?", "no");
151
+ if (!overwrite.toLowerCase().startsWith("y")) {
152
+ print(`${DIM} Aborted.${RESET}\n`);
153
+ return;
154
+ }
155
+ }
156
+ // Interactive setup
157
+ print(`${BOLD} Let's set up governance for your project.${RESET}\n`);
158
+ const agentName = await ask("Agent name", "my-agent");
159
+ const owner = await ask("Team/owner", "engineering");
160
+ const frameworkChoice = await ask("Framework (mastra/langchain/vercel-ai/custom)", "mastra");
161
+ const framework = ["mastra", "langchain", "vercel-ai", "openai", "custom"].includes(frameworkChoice)
162
+ ? frameworkChoice
163
+ : "custom";
164
+ const blockDangerous = (await ask("Block dangerous tools? (shell, rm, db drop)", "yes"))
165
+ .toLowerCase().startsWith("y");
166
+ const requireApprovalAnswer = (await ask("Require approval for sensitive actions?", "yes"))
167
+ .toLowerCase().startsWith("y");
168
+ const tokenLimitStr = await ask("Per-session token budget (0 = unlimited)", "100000");
169
+ const tokenLimit = parseInt(tokenLimitStr, 10) || 0;
170
+ const useProcessor = framework === "mastra" &&
171
+ (await ask("Use native Mastra Processor? (recommended)", "yes"))
172
+ .toLowerCase().startsWith("y");
173
+ print("");
174
+ // Generate config
175
+ const config = {
176
+ agentName,
177
+ owner,
178
+ framework,
179
+ blockDangerous,
180
+ requireApproval: requireApprovalAnswer,
181
+ tokenLimit,
182
+ useProcessor,
183
+ };
184
+ const fileContent = generateConfigFile(config);
185
+ writeFileSync(configPath, fileContent, "utf-8");
186
+ // Success output
187
+ print(`${GREEN}✓${RESET} Created ${BOLD}governance.config.ts${RESET}\n`);
188
+ print(`${BOLD} Next steps:${RESET}\n`);
189
+ print(` ${CYAN}1.${RESET} Import governance in your agent:`);
190
+ print(` ${DIM}import { governance, registerAgent } from './governance.config';${RESET}`);
191
+ print("");
192
+ print(` ${CYAN}2.${RESET} Register your agent at startup:`);
193
+ print(` ${DIM}const agent = await registerAgent();${RESET}`);
194
+ print(` ${DIM}// → { id, score: 42, level: 1 }${RESET}`);
195
+ print("");
196
+ if (useProcessor) {
197
+ print(` ${CYAN}3.${RESET} Pass the processor to agent.generate():`);
198
+ print(` ${DIM}import { processor } from './governance.config';${RESET}`);
199
+ print(` ${DIM}const result = await agent.generate(prompt, { processor });${RESET}`);
200
+ print(` ${DIM}// Every tool call is now governed automatically${RESET}`);
201
+ }
202
+ else {
203
+ print(` ${CYAN}3.${RESET} Enforce before sensitive actions:`);
204
+ print(` ${DIM}const decision = await governance.enforce({${RESET}`);
205
+ print(` ${DIM} agentId: agent.id, action: 'tool_call', tool: 'shell_exec',${RESET}`);
206
+ print(` ${DIM}});${RESET}`);
207
+ }
208
+ print("");
209
+ print(` ${BOLD}Docs:${RESET} https://heylua.ai/governance`);
210
+ print(` ${BOLD}GitHub:${RESET} https://github.com/lua-ai-global/governance`);
211
+ print("");
212
+ }
213
+ main().catch((e) => {
214
+ print(`${RED}Error: ${e instanceof Error ? e.message : String(e)}${RESET}`);
215
+ process.exit(1);
216
+ });
217
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * EU AI Act Article Definitions
3
+ *
4
+ * Static article and requirement definitions for the 6 EU AI Act
5
+ * articles tracked by governance-sdk. Separated from assessment
6
+ * logic to keep files under 300 LOC.
7
+ */
8
+ /** EU AI Act article with requirements and SDK feature mapping */
9
+ export interface EuAiActArticle {
10
+ /** Article number */
11
+ article: string;
12
+ /** Article title */
13
+ title: string;
14
+ /** Brief description of the requirement */
15
+ description: string;
16
+ /** Enforcement deadline */
17
+ deadline: string;
18
+ /** Maximum fine */
19
+ maxFine: string;
20
+ /** Specific requirements that can be checked */
21
+ requirements: ArticleRequirement[];
22
+ }
23
+ /** A specific checkable requirement within an article */
24
+ export interface ArticleRequirement {
25
+ /** Unique requirement ID (e.g., "art9-risk-classification") */
26
+ id: string;
27
+ /** What the law requires */
28
+ requirement: string;
29
+ /** How governance-sdk addresses this */
30
+ sdkFeature: string;
31
+ /** What to check for compliance */
32
+ checkDescription: string;
33
+ /** Whether this is automatically checkable by the SDK */
34
+ automatable: boolean;
35
+ }
36
+ /** Compliance status for a single requirement */
37
+ export type ComplianceStatus = "compliant" | "partial" | "non-compliant" | "not-applicable";
38
+ /** Assessment result for a single requirement */
39
+ export interface RequirementAssessment {
40
+ requirementId: string;
41
+ status: ComplianceStatus;
42
+ evidence: string;
43
+ remediation?: string;
44
+ }
45
+ /** Assessment result for a full article */
46
+ export interface ArticleAssessment {
47
+ article: string;
48
+ title: string;
49
+ coverage: ComplianceStatus;
50
+ score: number;
51
+ requirements: RequirementAssessment[];
52
+ deadline: string;
53
+ maxFine: string;
54
+ }
55
+ /** Full compliance report */
56
+ export interface ComplianceReport {
57
+ overallScore: number;
58
+ status: ComplianceStatus;
59
+ articles: ArticleAssessment[];
60
+ agentsAssessed: number;
61
+ criticalGaps: string[];
62
+ recommendations: string[];
63
+ generatedAt: string;
64
+ daysUntilDeadline: number;
65
+ }
66
+ export declare const EU_AI_ACT_ARTICLES: EuAiActArticle[];
67
+ /** Get the list of EU AI Act articles tracked by this module */
68
+ export declare function getArticles(): EuAiActArticle[];
69
+ /** Get days until EU AI Act enforcement deadline */
70
+ export declare function getDaysUntilDeadline(): number;
71
+ //# sourceMappingURL=compliance-articles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-articles.d.ts","sourceRoot":"","sources":["../src/compliance-articles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE5F,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAID,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAqL9C,CAAC;AAEF,gEAAgE;AAChE,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAE9C;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C"}