agent-nuvira 3.3.3 → 3.3.4

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 (349) hide show
  1. package/README.md +13 -5
  2. package/dist/agent-sdk/src/agent.d.ts +2 -0
  3. package/dist/agent-sdk/src/agent.d.ts.map +1 -1
  4. package/dist/agent-sdk/src/define.d.ts +64 -0
  5. package/dist/agent-sdk/src/define.d.ts.map +1 -0
  6. package/dist/agent-sdk/src/define.js +76 -0
  7. package/dist/agent-sdk/src/define.js.map +1 -0
  8. package/dist/agent-sdk/src/index.d.ts +9 -0
  9. package/dist/agent-sdk/src/index.d.ts.map +1 -1
  10. package/dist/agent-sdk/src/index.js +9 -0
  11. package/dist/agent-sdk/src/index.js.map +1 -1
  12. package/dist/agent-sdk/src/scaffold.d.ts +11 -0
  13. package/dist/agent-sdk/src/scaffold.d.ts.map +1 -1
  14. package/dist/agent-sdk/src/scaffold.js +16 -6
  15. package/dist/agent-sdk/src/scaffold.js.map +1 -1
  16. package/dist/agents/long-form-plan.d.ts.map +1 -1
  17. package/dist/agents/long-form-plan.js +2 -1
  18. package/dist/agents/long-form-plan.js.map +1 -1
  19. package/dist/agents/orchestrator.d.ts.map +1 -1
  20. package/dist/agents/orchestrator.js +5 -4
  21. package/dist/agents/orchestrator.js.map +1 -1
  22. package/dist/cli/agent.d.ts +2 -2
  23. package/dist/cli/agent.js +10 -10
  24. package/dist/cli/chat.d.ts +94 -0
  25. package/dist/cli/chat.d.ts.map +1 -1
  26. package/dist/cli/chat.js +354 -20
  27. package/dist/cli/chat.js.map +1 -1
  28. package/dist/cli/cli-program.d.ts.map +1 -1
  29. package/dist/cli/cli-program.js +5 -0
  30. package/dist/cli/cli-program.js.map +1 -1
  31. package/dist/cli/config.d.ts.map +1 -1
  32. package/dist/cli/config.js +9 -1
  33. package/dist/cli/config.js.map +1 -1
  34. package/dist/cli/doctor.d.ts.map +1 -1
  35. package/dist/cli/doctor.js +3 -2
  36. package/dist/cli/doctor.js.map +1 -1
  37. package/dist/cli/edit.js +2 -2
  38. package/dist/cli/eval.d.ts +17 -0
  39. package/dist/cli/eval.d.ts.map +1 -1
  40. package/dist/cli/eval.js +105 -2
  41. package/dist/cli/eval.js.map +1 -1
  42. package/dist/cli/execute.d.ts +16 -1
  43. package/dist/cli/execute.d.ts.map +1 -1
  44. package/dist/cli/execute.js +192 -22
  45. package/dist/cli/execute.js.map +1 -1
  46. package/dist/cli/loop-executor.d.ts +55 -0
  47. package/dist/cli/loop-executor.d.ts.map +1 -1
  48. package/dist/cli/loop-executor.js +212 -13
  49. package/dist/cli/loop-executor.js.map +1 -1
  50. package/dist/cli/model.d.ts.map +1 -1
  51. package/dist/cli/model.js +9 -8
  52. package/dist/cli/model.js.map +1 -1
  53. package/dist/cli/models.d.ts +1 -1
  54. package/dist/cli/models.js +4 -4
  55. package/dist/cli/parity.d.ts +85 -0
  56. package/dist/cli/parity.d.ts.map +1 -0
  57. package/dist/cli/parity.js +506 -0
  58. package/dist/cli/parity.js.map +1 -0
  59. package/dist/cli/plan.d.ts.map +1 -1
  60. package/dist/cli/plan.js +2 -1
  61. package/dist/cli/plan.js.map +1 -1
  62. package/dist/cli/retrieval.d.ts.map +1 -1
  63. package/dist/cli/retrieval.js +5 -4
  64. package/dist/cli/retrieval.js.map +1 -1
  65. package/dist/cli/sdk.js +4 -4
  66. package/dist/cli/sdk.js.map +1 -1
  67. package/dist/cli/trace.d.ts.map +1 -1
  68. package/dist/cli/trace.js +2 -1
  69. package/dist/cli/trace.js.map +1 -1
  70. package/dist/cli/workflow.js +2 -2
  71. package/dist/cli/workflow.js.map +1 -1
  72. package/dist/config/types.d.ts +44 -0
  73. package/dist/config/types.d.ts.map +1 -1
  74. package/dist/findings/verdicts.d.ts +241 -0
  75. package/dist/findings/verdicts.d.ts.map +1 -0
  76. package/dist/findings/verdicts.js +284 -0
  77. package/dist/findings/verdicts.js.map +1 -0
  78. package/dist/gateway/adapters.d.ts +65 -0
  79. package/dist/gateway/adapters.d.ts.map +1 -1
  80. package/dist/gateway/adapters.js +216 -10
  81. package/dist/gateway/adapters.js.map +1 -1
  82. package/dist/gateway/channel-directory.d.ts +31 -0
  83. package/dist/gateway/channel-directory.d.ts.map +1 -1
  84. package/dist/gateway/channel-directory.js +40 -0
  85. package/dist/gateway/channel-directory.js.map +1 -1
  86. package/dist/gateway/gateway-log.d.ts +1 -1
  87. package/dist/gateway/gateway-log.d.ts.map +1 -1
  88. package/dist/gateway/gateway-log.js.map +1 -1
  89. package/dist/gateway/hooks.d.ts +87 -19
  90. package/dist/gateway/hooks.d.ts.map +1 -1
  91. package/dist/gateway/hooks.js +62 -23
  92. package/dist/gateway/hooks.js.map +1 -1
  93. package/dist/gateway/inbound-media.d.ts +147 -0
  94. package/dist/gateway/inbound-media.d.ts.map +1 -0
  95. package/dist/gateway/inbound-media.js +317 -0
  96. package/dist/gateway/inbound-media.js.map +1 -0
  97. package/dist/gateway/inbox.d.ts +8 -1
  98. package/dist/gateway/inbox.d.ts.map +1 -1
  99. package/dist/gateway/inbox.js.map +1 -1
  100. package/dist/gateway/platform-config.d.ts +14 -0
  101. package/dist/gateway/platform-config.d.ts.map +1 -1
  102. package/dist/gateway/platform-config.js +26 -8
  103. package/dist/gateway/platform-config.js.map +1 -1
  104. package/dist/gateway/realtime.d.ts +114 -0
  105. package/dist/gateway/realtime.d.ts.map +1 -0
  106. package/dist/gateway/realtime.js +402 -0
  107. package/dist/gateway/realtime.js.map +1 -0
  108. package/dist/gateway/registry.d.ts +31 -0
  109. package/dist/gateway/registry.d.ts.map +1 -1
  110. package/dist/gateway/registry.js +224 -4
  111. package/dist/gateway/registry.js.map +1 -1
  112. package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
  113. package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
  114. package/dist/gateway/whatsapp/baileys-bridge.js +123 -4
  115. package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
  116. package/dist/gateway/whatsapp/bridge.d.ts +6 -2
  117. package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
  118. package/dist/gateway/whatsapp/bridge.js.map +1 -1
  119. package/dist/index.js +8 -0
  120. package/dist/index.js.map +1 -1
  121. package/dist/inference/factory.d.ts +14 -0
  122. package/dist/inference/factory.d.ts.map +1 -1
  123. package/dist/inference/factory.js +17 -0
  124. package/dist/inference/factory.js.map +1 -1
  125. package/dist/inference/groq-adapter.d.ts +2 -0
  126. package/dist/inference/groq-adapter.d.ts.map +1 -1
  127. package/dist/inference/groq-adapter.js +16 -6
  128. package/dist/inference/groq-adapter.js.map +1 -1
  129. package/dist/inference/tools.d.ts.map +1 -1
  130. package/dist/inference/tools.js +29 -0
  131. package/dist/inference/tools.js.map +1 -1
  132. package/dist/learning/benchmark.d.ts.map +1 -1
  133. package/dist/learning/benchmark.js +3 -2
  134. package/dist/learning/benchmark.js.map +1 -1
  135. package/dist/learning/continuation.d.ts.map +1 -1
  136. package/dist/learning/continuation.js +2 -1
  137. package/dist/learning/continuation.js.map +1 -1
  138. package/dist/learning/cost-tracker.d.ts.map +1 -1
  139. package/dist/learning/cost-tracker.js +2 -1
  140. package/dist/learning/cost-tracker.js.map +1 -1
  141. package/dist/learning/deferred-task.d.ts.map +1 -1
  142. package/dist/learning/deferred-task.js +13 -4
  143. package/dist/learning/deferred-task.js.map +1 -1
  144. package/dist/learning/eval-framework.d.ts.map +1 -1
  145. package/dist/learning/eval-framework.js +2 -1
  146. package/dist/learning/eval-framework.js.map +1 -1
  147. package/dist/learning/long-form.d.ts.map +1 -1
  148. package/dist/learning/long-form.js +2 -1
  149. package/dist/learning/long-form.js.map +1 -1
  150. package/dist/learning/model-registry.d.ts.map +1 -1
  151. package/dist/learning/model-registry.js +2 -1
  152. package/dist/learning/model-registry.js.map +1 -1
  153. package/dist/learning/reasoning-cache.d.ts.map +1 -1
  154. package/dist/learning/reasoning-cache.js +2 -1
  155. package/dist/learning/reasoning-cache.js.map +1 -1
  156. package/dist/learning/reasoning-trace.d.ts +37 -1
  157. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  158. package/dist/learning/reasoning-trace.js +66 -0
  159. package/dist/learning/reasoning-trace.js.map +1 -1
  160. package/dist/learning/resilient-call.d.ts.map +1 -1
  161. package/dist/learning/resilient-call.js +2 -1
  162. package/dist/learning/resilient-call.js.map +1 -1
  163. package/dist/learning/retrieval.d.ts.map +1 -1
  164. package/dist/learning/retrieval.js +2 -1
  165. package/dist/learning/retrieval.js.map +1 -1
  166. package/dist/learning/seeded-benchmark.d.ts +160 -0
  167. package/dist/learning/seeded-benchmark.d.ts.map +1 -0
  168. package/dist/learning/seeded-benchmark.js +321 -0
  169. package/dist/learning/seeded-benchmark.js.map +1 -0
  170. package/dist/learning/seeded-bugs.d.ts +142 -0
  171. package/dist/learning/seeded-bugs.d.ts.map +1 -0
  172. package/dist/learning/seeded-bugs.js +535 -0
  173. package/dist/learning/seeded-bugs.js.map +1 -0
  174. package/dist/learning/step-checkpoint.d.ts +127 -0
  175. package/dist/learning/step-checkpoint.d.ts.map +1 -0
  176. package/dist/learning/step-checkpoint.js +244 -0
  177. package/dist/learning/step-checkpoint.js.map +1 -0
  178. package/dist/nlu/intent-confirm.d.ts +23 -1
  179. package/dist/nlu/intent-confirm.d.ts.map +1 -1
  180. package/dist/nlu/intent-confirm.js +85 -2
  181. package/dist/nlu/intent-confirm.js.map +1 -1
  182. package/dist/nlu/learnings.d.ts +7 -0
  183. package/dist/nlu/learnings.d.ts.map +1 -1
  184. package/dist/nlu/learnings.js +7 -0
  185. package/dist/nlu/learnings.js.map +1 -1
  186. package/dist/observability/debug-log.d.ts +250 -0
  187. package/dist/observability/debug-log.d.ts.map +1 -0
  188. package/dist/observability/debug-log.js +500 -0
  189. package/dist/observability/debug-log.js.map +1 -0
  190. package/dist/observability/event-bus.d.ts.map +1 -1
  191. package/dist/observability/event-bus.js +4 -1
  192. package/dist/observability/event-bus.js.map +1 -1
  193. package/dist/observability/otel.d.ts +278 -0
  194. package/dist/observability/otel.d.ts.map +1 -0
  195. package/dist/observability/otel.js +590 -0
  196. package/dist/observability/otel.js.map +1 -0
  197. package/dist/parity/drivers.d.ts +99 -0
  198. package/dist/parity/drivers.d.ts.map +1 -0
  199. package/dist/parity/drivers.js +1362 -0
  200. package/dist/parity/drivers.js.map +1 -0
  201. package/dist/parity/graph.d.ts +73 -0
  202. package/dist/parity/graph.d.ts.map +1 -0
  203. package/dist/parity/graph.js +162 -0
  204. package/dist/parity/graph.js.map +1 -0
  205. package/dist/parity/matrix.d.ts +105 -0
  206. package/dist/parity/matrix.d.ts.map +1 -0
  207. package/dist/parity/matrix.js +352 -0
  208. package/dist/parity/matrix.js.map +1 -0
  209. package/dist/parity/observation.d.ts +444 -0
  210. package/dist/parity/observation.d.ts.map +1 -0
  211. package/dist/parity/observation.js +333 -0
  212. package/dist/parity/observation.js.map +1 -0
  213. package/dist/parity/scenarios.d.ts +229 -0
  214. package/dist/parity/scenarios.d.ts.map +1 -0
  215. package/dist/parity/scenarios.js +175 -0
  216. package/dist/parity/scenarios.js.map +1 -0
  217. package/dist/parity/surfaces.d.ts +122 -0
  218. package/dist/parity/surfaces.d.ts.map +1 -0
  219. package/dist/parity/surfaces.js +190 -0
  220. package/dist/parity/surfaces.js.map +1 -0
  221. package/dist/runtime/fault-injection.d.ts +173 -0
  222. package/dist/runtime/fault-injection.d.ts.map +1 -0
  223. package/dist/runtime/fault-injection.js +281 -0
  224. package/dist/runtime/fault-injection.js.map +1 -0
  225. package/dist/tools/child-agent-entry.d.ts +23 -0
  226. package/dist/tools/child-agent-entry.d.ts.map +1 -0
  227. package/dist/tools/child-agent-entry.js +129 -0
  228. package/dist/tools/child-agent-entry.js.map +1 -0
  229. package/dist/tools/child-agent-runtime.d.ts +124 -0
  230. package/dist/tools/child-agent-runtime.d.ts.map +1 -0
  231. package/dist/tools/child-agent-runtime.js +704 -0
  232. package/dist/tools/child-agent-runtime.js.map +1 -0
  233. package/dist/tools/coding-tools.d.ts.map +1 -1
  234. package/dist/tools/coding-tools.js +82 -10
  235. package/dist/tools/coding-tools.js.map +1 -1
  236. package/dist/tools/delegation-system.d.ts +31 -0
  237. package/dist/tools/delegation-system.d.ts.map +1 -1
  238. package/dist/tools/delegation-system.js +70 -9
  239. package/dist/tools/delegation-system.js.map +1 -1
  240. package/dist/tools/extract/docx.d.ts +27 -0
  241. package/dist/tools/extract/docx.d.ts.map +1 -0
  242. package/dist/tools/extract/docx.js +48 -0
  243. package/dist/tools/extract/docx.js.map +1 -0
  244. package/dist/tools/extract/html-text.d.ts +27 -0
  245. package/dist/tools/extract/html-text.d.ts.map +1 -0
  246. package/dist/tools/extract/html-text.js +86 -0
  247. package/dist/tools/extract/html-text.js.map +1 -0
  248. package/dist/tools/extract/pdf-ocr.d.ts +58 -0
  249. package/dist/tools/extract/pdf-ocr.d.ts.map +1 -0
  250. package/dist/tools/extract/pdf-ocr.js +116 -0
  251. package/dist/tools/extract/pdf-ocr.js.map +1 -0
  252. package/dist/tools/extract/pdf.d.ts +65 -0
  253. package/dist/tools/extract/pdf.d.ts.map +1 -0
  254. package/dist/tools/extract/pdf.js +197 -0
  255. package/dist/tools/extract/pdf.js.map +1 -0
  256. package/dist/tools/extract/pptx.d.ts +32 -0
  257. package/dist/tools/extract/pptx.d.ts.map +1 -0
  258. package/dist/tools/extract/pptx.js +77 -0
  259. package/dist/tools/extract/pptx.js.map +1 -0
  260. package/dist/tools/extract/xlsx.d.ts +47 -0
  261. package/dist/tools/extract/xlsx.d.ts.map +1 -0
  262. package/dist/tools/extract/xlsx.js +111 -0
  263. package/dist/tools/extract/xlsx.js.map +1 -0
  264. package/dist/tools/finding-tool.d.ts +76 -0
  265. package/dist/tools/finding-tool.d.ts.map +1 -0
  266. package/dist/tools/finding-tool.js +125 -0
  267. package/dist/tools/finding-tool.js.map +1 -0
  268. package/dist/tools/messaging-tools.d.ts +41 -11
  269. package/dist/tools/messaging-tools.d.ts.map +1 -1
  270. package/dist/tools/messaging-tools.js +104 -55
  271. package/dist/tools/messaging-tools.js.map +1 -1
  272. package/dist/tools/neutts-synth.d.ts +27 -3
  273. package/dist/tools/neutts-synth.d.ts.map +1 -1
  274. package/dist/tools/neutts-synth.js +57 -13
  275. package/dist/tools/neutts-synth.js.map +1 -1
  276. package/dist/tools/pipeline-tool.d.ts +43 -1
  277. package/dist/tools/pipeline-tool.d.ts.map +1 -1
  278. package/dist/tools/pipeline-tool.js +13 -2
  279. package/dist/tools/pipeline-tool.js.map +1 -1
  280. package/dist/tools/read-extract.d.ts +116 -45
  281. package/dist/tools/read-extract.d.ts.map +1 -1
  282. package/dist/tools/read-extract.js +494 -158
  283. package/dist/tools/read-extract.js.map +1 -1
  284. package/dist/tools/registry.d.ts +2 -2
  285. package/dist/tools/registry.d.ts.map +1 -1
  286. package/dist/tools/registry.js +152 -23
  287. package/dist/tools/registry.js.map +1 -1
  288. package/dist/tools/subagent-refusal.d.ts +15 -0
  289. package/dist/tools/subagent-refusal.d.ts.map +1 -0
  290. package/dist/tools/subagent-refusal.js +18 -0
  291. package/dist/tools/subagent-refusal.js.map +1 -0
  292. package/dist/tools/subagent-spawner.d.ts +122 -0
  293. package/dist/tools/subagent-spawner.d.ts.map +1 -1
  294. package/dist/tools/subagent-spawner.js +249 -28
  295. package/dist/tools/subagent-spawner.js.map +1 -1
  296. package/dist/tools/tool-hooks.d.ts +177 -0
  297. package/dist/tools/tool-hooks.d.ts.map +1 -0
  298. package/dist/tools/tool-hooks.js +427 -0
  299. package/dist/tools/tool-hooks.js.map +1 -0
  300. package/dist/tools/tool-loop.d.ts +82 -0
  301. package/dist/tools/tool-loop.d.ts.map +1 -1
  302. package/dist/tools/tool-loop.js +167 -9
  303. package/dist/tools/tool-loop.js.map +1 -1
  304. package/dist/tools/tool-refusal.d.ts +68 -0
  305. package/dist/tools/tool-refusal.d.ts.map +1 -0
  306. package/dist/tools/tool-refusal.js +78 -0
  307. package/dist/tools/tool-refusal.js.map +1 -0
  308. package/dist/tools/toolsets.d.ts +8 -0
  309. package/dist/tools/toolsets.d.ts.map +1 -1
  310. package/dist/tools/toolsets.js +12 -2
  311. package/dist/tools/toolsets.js.map +1 -1
  312. package/dist/tools/vision-tools.d.ts +88 -83
  313. package/dist/tools/vision-tools.d.ts.map +1 -1
  314. package/dist/tools/vision-tools.js +134 -103
  315. package/dist/tools/vision-tools.js.map +1 -1
  316. package/dist/tools/worktree.d.ts +210 -0
  317. package/dist/tools/worktree.d.ts.map +1 -0
  318. package/dist/tools/worktree.js +374 -0
  319. package/dist/tools/worktree.js.map +1 -0
  320. package/dist/utils/format.d.ts +3 -0
  321. package/dist/utils/format.d.ts.map +1 -0
  322. package/dist/utils/format.js +32 -0
  323. package/dist/utils/format.js.map +1 -0
  324. package/dist/web-dashboard/attachment-extract.d.ts +64 -0
  325. package/dist/web-dashboard/attachment-extract.d.ts.map +1 -0
  326. package/dist/web-dashboard/attachment-extract.js +154 -0
  327. package/dist/web-dashboard/attachment-extract.js.map +1 -0
  328. package/dist/web-dashboard/chat-console.d.ts +108 -1
  329. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  330. package/dist/web-dashboard/chat-console.js +36 -0
  331. package/dist/web-dashboard/chat-console.js.map +1 -1
  332. package/dist/web-dashboard/hub-data.d.ts +37 -0
  333. package/dist/web-dashboard/hub-data.d.ts.map +1 -1
  334. package/dist/web-dashboard/hub-data.js +61 -1
  335. package/dist/web-dashboard/hub-data.js.map +1 -1
  336. package/dist/web-dashboard/server.d.ts +14 -0
  337. package/dist/web-dashboard/server.d.ts.map +1 -1
  338. package/dist/web-dashboard/server.js +247 -13
  339. package/dist/web-dashboard/server.js.map +1 -1
  340. package/dist/web-dashboard/src/types.d.ts +196 -48
  341. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  342. package/package.json +18 -3
  343. package/src/web-dashboard/public/assets/{index-Cyd6tIew.css → index-XJjj2cBX.css} +1 -1
  344. package/src/web-dashboard/public/assets/index-YWF9FpwQ.js +207 -0
  345. package/src/web-dashboard/public/assets/index-YWF9FpwQ.js.map +1 -0
  346. package/src/web-dashboard/public/index.html +2 -2
  347. package/dist/tools/child-agent-worker.js +0 -212
  348. package/src/web-dashboard/public/assets/index-CxDj7p6i.js +0 -207
  349. package/src/web-dashboard/public/assets/index-CxDj7p6i.js.map +0 -1
@@ -0,0 +1,321 @@
1
+ /**
2
+ * WS7 (#29) — running the seeded-bug suite and scoring it.
3
+ *
4
+ * WHY A SEPARATE MODULE FROM `seeded-bugs.ts`. That file is the SUITE — the
5
+ * defects, their fixes, and the verification that each seed is genuinely broken. It
6
+ * is pure data plus a verifier, and it must stay importable by a test with no
7
+ * provider, no network and no engine. This file is the RUNNER: it scaffolds a
8
+ * workspace, hands it to whatever runs the agent, and scores what came back. The
9
+ * agent is INJECTED (`runAgent`) rather than called here, which is what keeps the
10
+ * scoring testable offline — a fake agent that applies the reference fix and one
11
+ * that does nothing are both first-class inputs, and neither costs a token.
12
+ *
13
+ * THREE THINGS ARE SCORED, and they are kept apart because they fail apart:
14
+ *
15
+ * - DETECTED — did the run say what was wrong? Read from what the agent REPORTED
16
+ * (its own summary), matched against the defect's diagnostic vocabulary. An
17
+ * agent can fix a defect it never understood, and it can describe one it failed
18
+ * to fix; collapsing the two into "passed" hides exactly the difference a
19
+ * benchmark exists to measure.
20
+ * - FIXED — do the checks pass now? The ground truth, and the only one that is
21
+ * not a reading of the model's own prose.
22
+ * - TARGET-ONLY — did anything ELSE change? Measured by diffing every seeded file
23
+ * against its original content and listing files the seed never had. A fix that
24
+ * rewrites three unrelated files is not the same result as one that changes the
25
+ * single responsible line, and "the tests pass" cannot tell them apart.
26
+ *
27
+ * REFUSES TO SCORE AN UNVERIFIED SEED. Every task is verified first, and a seed
28
+ * that is not provably broken (or not provably fixable) aborts the run instead of
29
+ * being scored — a task that already passes measures nothing, and reporting a
30
+ * number for it is worse than reporting none. `nuvira eval verify-seeds` runs the
31
+ * same check from a terminal, so the ratchet needs no provider at all.
32
+ */
33
+ import { mkdirSync, mkdtempSync, readdirSync, rmSync, statSync, writeFileSync } from 'node:fs';
34
+ import { tmpdir } from 'node:os';
35
+ import { join } from 'node:path';
36
+ import { SEEDED_BUGS, materializeSeededBug, readWorkspaceFile, runSeedCheck, seededBugById, seededGoal, verifySeededBug, } from './seeded-bugs.js';
37
+ /** Verify every declared seed. Offline, deterministic, no provider. */
38
+ export function verifySeeds(taskIds) {
39
+ const bugs = taskIds && taskIds.length > 0 ? SEEDED_BUGS.filter((b) => taskIds.includes(b.id)) : SEEDED_BUGS;
40
+ return bugs.map((bug) => verifySeededBug(bug));
41
+ }
42
+ /** Every file in a workspace, as workspace-relative paths. */
43
+ function listWorkspaceFiles(dir, prefix = '') {
44
+ const out = [];
45
+ let entries;
46
+ try {
47
+ entries = readdirSync(join(dir, prefix));
48
+ }
49
+ catch {
50
+ return out;
51
+ }
52
+ for (const entry of entries) {
53
+ const rel = prefix ? `${prefix}/${entry}` : entry;
54
+ let isDir = false;
55
+ try {
56
+ isDir = statSync(join(dir, rel)).isDirectory();
57
+ }
58
+ catch {
59
+ continue;
60
+ }
61
+ if (isDir)
62
+ out.push(...listWorkspaceFiles(dir, rel));
63
+ else
64
+ out.push(rel);
65
+ }
66
+ return out;
67
+ }
68
+ /**
69
+ * What changed in the workspace, against the seed it started from.
70
+ *
71
+ * A file the seed never had is a change too (`seeded: false` at the call site), so
72
+ * an agent that writes a scratch file or a new module cannot look tidier than one
73
+ * that edited in place. Deleted seeded files count as changes as well — a
74
+ * "fix" that removes the failing check is not a fix, and this is what makes that
75
+ * visible rather than merely suspicious.
76
+ */
77
+ export function changeReport(bug, workspace) {
78
+ const seeded = new Map(bug.files.map((file) => [file.path, file.content]));
79
+ const present = listWorkspaceFiles(workspace);
80
+ const changed = [];
81
+ for (const file of present) {
82
+ const content = readWorkspaceFile(workspace, file);
83
+ if (content === null)
84
+ continue;
85
+ if (!seeded.has(file)) {
86
+ changed.push(file); // created by the agent
87
+ continue;
88
+ }
89
+ if (seeded.get(file) !== content)
90
+ changed.push(file);
91
+ }
92
+ for (const path of seeded.keys()) {
93
+ if (!present.includes(path))
94
+ changed.push(path); // deleted by the agent
95
+ }
96
+ const unique = [...new Set(changed)].sort();
97
+ return {
98
+ changedFiles: unique,
99
+ collateral: unique.filter((file) => file !== bug.target),
100
+ };
101
+ }
102
+ /** Score DETECTED from what the run reported. Case-insensitive substring match. */
103
+ export function detectDefect(bug, summary) {
104
+ const haystack = (summary ?? '').toLowerCase();
105
+ for (const signal of bug.detectionSignals) {
106
+ if (haystack.includes(signal.toLowerCase()))
107
+ return signal;
108
+ }
109
+ return null;
110
+ }
111
+ /**
112
+ * 0-1 composite: finding it and fixing it weigh the same, and precision is a
113
+ * MODIFIER on a fix rather than a credit of its own.
114
+ *
115
+ * The precision component is gated on `fixed`, and that gate was added after the
116
+ * first real run: a no-op agent scores 100% on "changed nothing but the target"
117
+ * trivially, so an ungated 0.2 paid a run 20% for doing nothing at all — and made a
118
+ * correct fix with collateral (0.8) look only four times better than a run that
119
+ * never opened the file. "Left the rest alone" is only a fact about judgement once
120
+ * there is a change to judge.
121
+ *
122
+ * perfect (found + fixed + clean) 1.00
123
+ * fixed + clean, never explained it 0.60
124
+ * fixed, explained, touched something else 0.80
125
+ * explained it, never fixed it 0.40
126
+ * did nothing 0.00
127
+ */
128
+ export function scoreSeededTask(detected, fixed, targetOnly) {
129
+ const found = detected ? 0.4 : 0;
130
+ const repaired = fixed ? 0.4 : 0;
131
+ const precise = fixed && targetOnly ? 0.2 : 0;
132
+ return found + repaired + precise;
133
+ }
134
+ /**
135
+ * Run the suite and score it.
136
+ *
137
+ * Verification happens FIRST, and every task it rejects aborts the run: the point
138
+ * of the benchmark is that its number is trustworthy, and a number computed over a
139
+ * task that was not actually broken is not.
140
+ */
141
+ export async function runSeededSuite(provider, model, options) {
142
+ const startedAt = Date.now();
143
+ const bugs = options.taskIds && options.taskIds.length > 0
144
+ ? options.taskIds.map((id) => seededBugById(id)).filter((b) => Boolean(b))
145
+ : [...SEEDED_BUGS];
146
+ // A filter that matches nothing is not a clean run, it is a run that measured
147
+ // nothing — the same reason an unverified seed aborts rather than scoring. The
148
+ // M2b path reports this too; a suite that returns "0 tasks, 0 failures" reads as
149
+ // a pass to anything that only looks at the summary.
150
+ if (bugs.length === 0) {
151
+ return {
152
+ provider,
153
+ model,
154
+ startedAt,
155
+ endedAt: Date.now(),
156
+ scores: [],
157
+ aborted: `no seeded bug matched ${options.taskIds?.length ? options.taskIds.join(', ') : '(no filter)'} — ` +
158
+ `declared ids: ${SEEDED_BUGS.map((b) => b.id).join(', ')}.`,
159
+ summary: { tasks: 0, verified: 0, detected: 0, fixed: 0, cleanFix: 0, composite: null },
160
+ };
161
+ }
162
+ let verification;
163
+ if (options.verifySeeds !== false) {
164
+ verification = bugs.map((bug) => verifySeededBug(bug));
165
+ const failed = verification.filter((v) => !v.ok);
166
+ if (failed.length > 0) {
167
+ return {
168
+ provider,
169
+ model,
170
+ startedAt,
171
+ endedAt: Date.now(),
172
+ scores: [],
173
+ verification,
174
+ aborted: `${failed.length} seeded bug(s) did not verify (${failed.map((f) => f.id).join(', ')}) — ` +
175
+ 'a task that is not provably broken measures nothing, so nothing was scored.',
176
+ summary: { tasks: bugs.length, verified: bugs.length - failed.length, detected: 0, fixed: 0, cleanFix: 0, composite: null },
177
+ };
178
+ }
179
+ }
180
+ const verifiedIds = new Set((verification ?? []).filter((v) => v.ok).map((v) => v.id));
181
+ const scores = [];
182
+ for (let index = 0; index < bugs.length; index += 1) {
183
+ const bug = bugs[index];
184
+ options.onProgress?.(index + 1, bugs.length, bug);
185
+ const workspace = mkdtempSync(join(tmpdir(), `seed-run-${bug.id}-`));
186
+ const taskStart = Date.now();
187
+ let agent = { summary: '', success: false };
188
+ let error;
189
+ try {
190
+ materializeSeededBug(bug, workspace, false);
191
+ try {
192
+ agent = await options.runAgent({ goal: seededGoal(bug), workspace, bug });
193
+ }
194
+ catch (err) {
195
+ error = err instanceof Error ? err.message : String(err);
196
+ }
197
+ // The checks run AFTER the agent, in the workspace it actually edited — the
198
+ // same scripts that were failing before it started.
199
+ const checks = bug.checks.map((check) => {
200
+ const result = runSeedCheck(workspace, check);
201
+ return { command: check.command, passed: result.exitCode === 0, output: result.output };
202
+ });
203
+ const { changedFiles, collateral } = changeReport(bug, workspace);
204
+ const detectedBy = detectDefect(bug, agent.summary);
205
+ const fixed = checks.length > 0 && checks.every((c) => c.passed);
206
+ const targetOnly = collateral.length === 0;
207
+ const seedVerified = verification ? verifiedIds.has(bug.id) : true;
208
+ scores.push({
209
+ id: bug.id,
210
+ title: bug.title,
211
+ axis: bug.axis,
212
+ difficulty: bug.difficulty,
213
+ seedVerified,
214
+ detected: detectedBy !== null,
215
+ detectedBy,
216
+ fixed,
217
+ changedFiles,
218
+ collateral,
219
+ targetOnly,
220
+ checks,
221
+ composite: seedVerified ? scoreSeededTask(detectedBy !== null, fixed, targetOnly) : null,
222
+ summary: agent.summary,
223
+ durationMs: Date.now() - taskStart,
224
+ ...(error ? { error } : {}),
225
+ });
226
+ }
227
+ finally {
228
+ if (!options.keepWorkspaces)
229
+ rmSync(workspace, { recursive: true, force: true });
230
+ }
231
+ }
232
+ const scored = scores.filter((s) => s.composite !== null);
233
+ const run = {
234
+ provider,
235
+ model,
236
+ startedAt,
237
+ endedAt: Date.now(),
238
+ scores,
239
+ ...(verification ? { verification } : {}),
240
+ summary: {
241
+ tasks: scores.length,
242
+ verified: scores.filter((s) => s.seedVerified).length,
243
+ detected: scores.filter((s) => s.detected).length,
244
+ fixed: scores.filter((s) => s.fixed).length,
245
+ cleanFix: scores.filter((s) => s.fixed && s.targetOnly).length,
246
+ composite: scored.length === 0 ? null : scored.reduce((sum, s) => sum + (s.composite ?? 0), 0) / scored.length,
247
+ },
248
+ };
249
+ return run;
250
+ }
251
+ /** A one-screen report for the terminal. */
252
+ export function formatSeededReport(run) {
253
+ const lines = [
254
+ `Seeded-bug benchmark — ${run.provider}/${run.model}`,
255
+ ` ${((run.endedAt - run.startedAt) / 1000).toFixed(1)}s · ${run.scores.length} task(s)`,
256
+ '',
257
+ ];
258
+ if (run.aborted) {
259
+ lines.push(`✗ aborted: ${run.aborted}`);
260
+ if (run.verification)
261
+ lines.push('', formatVerificationInline(run.verification));
262
+ return lines.join('\n');
263
+ }
264
+ for (const score of run.scores) {
265
+ const mark = score.fixed && score.detected ? '✅' : score.fixed ? '🟡' : '✗ ';
266
+ lines.push(` ${mark} ${score.id.padEnd(36)} composite ${pct(score.composite)}`);
267
+ lines.push(` found: ${score.detected ? `yes (${score.detectedBy})` : 'no'} · fixed: ${score.fixed ? 'yes' : 'no'} · ` +
268
+ `touched: ${score.changedFiles.length === 0 ? 'nothing' : score.changedFiles.join(', ')}` +
269
+ (score.collateral.length > 0 ? ` (collateral: ${score.collateral.join(', ')})` : ''));
270
+ if (score.error)
271
+ lines.push(` run error: ${score.error}`);
272
+ }
273
+ const s = run.summary;
274
+ lines.push('', ` found ${s.detected}/${s.tasks} · fixed ${s.fixed}/${s.tasks} · fixed without touching anything else ` +
275
+ `${s.cleanFix}/${s.tasks} · composite ${pct(s.composite)}`);
276
+ return lines.join('\n');
277
+ }
278
+ /** The markdown report written into `docs/benchmarks/`. */
279
+ export function formatSeededMarkdown(run) {
280
+ const lines = [
281
+ '# Seeded-bug benchmark',
282
+ '',
283
+ `- **Provider / model:** \`${run.provider}/${run.model}\``,
284
+ `- **Date:** ${new Date(run.startedAt).toISOString().slice(0, 10)}`,
285
+ `- **Duration:** ${((run.endedAt - run.startedAt) / 1000).toFixed(1)}s`,
286
+ `- **Composite:** ${pct(run.summary.composite)} — 40% found + 40% fixed + 20% for touching nothing else (the last only counts when the task was actually fixed)`,
287
+ '',
288
+ ];
289
+ if (run.aborted) {
290
+ lines.push('## Aborted', '', run.aborted, '');
291
+ return lines.join('\n');
292
+ }
293
+ lines.push('## Results', '', '| Task | Axis | Difficulty | Found | Fixed | Touched nothing else | Composite |', '|---|---|---|---|---|---|---|');
294
+ for (const score of run.scores) {
295
+ lines.push(`| \`${score.id}\` | ${score.axis} | ${score.difficulty} | ${score.detected ? `yes (${score.detectedBy})` : 'no'} | ` +
296
+ `${score.fixed ? 'yes' : 'no'} | ${score.targetOnly ? 'yes' : `no — ${score.collateral.join(', ')}`} | ${pct(score.composite)} |`);
297
+ }
298
+ const s = run.summary;
299
+ lines.push('', '## Summary', '', `- Found the defect: **${s.detected}/${s.tasks}**`, `- Fixed it: **${s.fixed}/${s.tasks}**`, `- Fixed it without touching anything else: **${s.cleanFix}/${s.tasks}**`, '', '## How to read this', '', '- **Found** is read from what the run REPORTED, matched against the diagnostic', ' vocabulary declared with the defect. An agent can fix a defect it never explained, and', ' explain one it never fixed,', ' which is why the two columns are separate.', '- **Fixed** is ground truth: the same checks that failed before the run passed after it.', '- **Touched nothing else** diffs every seeded file against its original content and lists files', ' the seed never had, so a fix that rewrites unrelated code cannot look like a clean one. It', ' is scored as a modifier on a FIX, not as credit of its own — a run that changed nothing', ' satisfies "changed nothing it should not have" trivially, and earns 0.', '- Every task is verified BEFORE it is scored — a seed that already passes its checks aborts the', ' run rather than contributing a number.', '');
300
+ return lines.join('\n');
301
+ }
302
+ function formatVerificationInline(results) {
303
+ return results
304
+ .map((r) => ` ${r.ok ? '✅' : '✗ '} ${r.id} — seed fails: ${r.seedFails ? 'yes' : 'NO'}, fix passes: ${r.fixPasses ? 'yes' : 'NO'}`)
305
+ .join('\n');
306
+ }
307
+ function pct(value) {
308
+ return value === null ? 'n/a' : `${Math.round(value * 100)}%`;
309
+ }
310
+ /** Where a run's report belongs, matching the M2b convention in `docs/benchmarks/`. */
311
+ export function seededReportPath(provider, model) {
312
+ const safeModel = model.replace(/[/:]/g, '-');
313
+ return join('docs', 'benchmarks', `seeded-bugs-${provider}-${safeModel}.md`);
314
+ }
315
+ /** Write a run's markdown report, returning the path. */
316
+ export function writeSeededReport(run, path = seededReportPath(run.provider, run.model)) {
317
+ mkdirSync(join(path, '..'), { recursive: true });
318
+ writeFileSync(path, formatSeededMarkdown(run), 'utf-8');
319
+ return path;
320
+ }
321
+ //# sourceMappingURL=seeded-benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeded-benchmark.js","sourceRoot":"","sources":["../../src/learning/seeded-benchmark.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * WS7 (#29) — the seeded-bug benchmark.
3
+ *
4
+ * WHY THIS IS TEST INFRASTRUCTURE AND NOT A MATRIX ROW. `src/parity/matrix.ts`
5
+ * says it in one line: the seeded-bug benchmark is not a capability a surface can
6
+ * have, so it has no cells and no parity verdict of its own. What it has is a job —
7
+ * measure whether the agent can FIND and FIX a defect it was not told about, which
8
+ * is the thing a coding agent is for and the thing the M2b suite could only
9
+ * approximate: M2b tasks are written by hand and graded by hidden tests, but
10
+ * nothing proves the task was BROKEN before the agent ran, so a task that already
11
+ * passed measured nothing.
12
+ *
13
+ * THE PROPERTY THAT MAKES THIS A BENCHMARK RATHER THAN A TASK LIST. Every seeded
14
+ * bug is declared TWICE — the broken workspace the agent receives, and the same
15
+ * workspace after a reference fix — and `verifySeededBug` runs the checks against
16
+ * both. The checks must FAIL on the seed (and say so in their own words) and PASS
17
+ * after the fix. A seed that already passes its checks, or a check that cannot
18
+ * pass even when fixed, fails verification and is NOT scored: `runSeededSuite`
19
+ * verifies every task before it runs a single model call. `nuvira eval
20
+ * verify-seeds` exposes the same verification directly, so the ratchet is
21
+ * runnable from a terminal and in CI without a provider.
22
+ *
23
+ * WHAT 'FAILING' HAS TO MEAN. A check that exits non-zero because it crashed —
24
+ * a syntax error, a missing module — would satisfy a naive verification while
25
+ * proving nothing about the bug. So a seed counts as genuinely broken only when
26
+ * its check exits non-zero AND prints the failure marker its own assertions
27
+ * print (`FAIL`). Combined with "the same check passes once the fix is applied",
28
+ * that pins both ends: the check is well-formed, and it is the DEFECT that makes
29
+ * it fail.
30
+ *
31
+ * PLAIN NODE, ON PURPOSE. Every seed is a CommonJS `.js` file with a `.js` test
32
+ * script and no dependencies, so verification is deterministic, offline, and
33
+ * needs nothing but the `node` already running the suite. (A future Python seed
34
+ * would have to be gated on an interpreter actually being present rather than
35
+ * assumed — the honest version of "we also test Python".)
36
+ *
37
+ * Deliberately NOT measured here: collateral damage to files the fix should not
38
+ * touch is scored from a diff of the workspace against the seed
39
+ * (`src/learning/seeded-benchmark.ts`), not from reference patterns, because
40
+ * "this file still contains line X" is a weaker claim than "this file is
41
+ * unchanged" and the benchmark should not make the weak one.
42
+ */
43
+ /** One file in a seeded workspace. */
44
+ export interface SeedFile {
45
+ path: string;
46
+ content: string;
47
+ }
48
+ /** One check that must fail on the seed and pass after the fix. */
49
+ export interface SeedCheck {
50
+ /** The script to run, relative to the workspace root. */
51
+ file: string;
52
+ /** The command that runs it (cwd = workspace root). */
53
+ command: string;
54
+ }
55
+ /** A deliberately seeded defect, with the workspace on both sides of the fix. */
56
+ export interface SeededBug {
57
+ id: string;
58
+ title: string;
59
+ /** What kind of defect it is — the axis the benchmark reports on. */
60
+ axis: string;
61
+ difficulty: 'easy' | 'medium';
62
+ /**
63
+ * The defect, as GROUND TRUTH. Never shown to the agent: the whole measurement
64
+ * is whether it can find this from the failing check alone.
65
+ */
66
+ bug: string;
67
+ /** The workspace as the agent receives it: broken, and provably so. */
68
+ files: readonly SeedFile[];
69
+ /**
70
+ * The files the reference fix rewrites. Every path here must also appear in
71
+ * `files` — a fix that adds a file is a different shape and would make the
72
+ * before/after diff meaningless.
73
+ */
74
+ fixedFiles: readonly SeedFile[];
75
+ /** The file the fix belongs in. Everything else is collateral if it changes. */
76
+ target: string;
77
+ /** Checks that fail on the seed and pass after the reference fix. */
78
+ checks: readonly SeedCheck[];
79
+ /**
80
+ * Substrings (case-insensitive) that count as the agent having IDENTIFIED the
81
+ * defect in what it reported. Diagnostic vocabulary, not the fix: an agent that
82
+ * rewrites the function correctly but reports "done" has fixed it without
83
+ * finding it, and the two are scored apart.
84
+ */
85
+ detectionSignals: readonly string[];
86
+ /** Token budget for the run, so cost is scored alongside correctness. */
87
+ tokenBudget: number;
88
+ }
89
+ /** The exact request every seeded task makes — uniform, so the score compares competence. */
90
+ export declare function seededGoal(bug: SeededBug): string;
91
+ /**
92
+ * The suite.
93
+ *
94
+ * Each entry is a real defect with a real fix, small enough that a strong model
95
+ * can find it from the failing check and that the reference fix is unambiguous.
96
+ * The axes are the ones that actually bite in production code: an inclusive bound,
97
+ * a comparator that was never given, an async callback in a synchronous-looking
98
+ * call, a falsy guard that eats a legitimate zero, a copy that is only one level
99
+ * deep, a helper that mutates its caller's data, and a denominator that was not
100
+ * updated with the filter beside it.
101
+ */
102
+ export declare const SEEDED_BUGS: readonly SeededBug[];
103
+ /** A bug by id, or undefined. */
104
+ export declare function seededBugById(id: string): SeededBug | undefined;
105
+ /** Write a workspace to `dir`. `fixed` swaps in the reference fix. */
106
+ export declare function materializeSeededBug(bug: SeededBug, dir: string, fixed?: boolean): string;
107
+ /** One check's outcome in a workspace. */
108
+ export interface SeedCheckResult {
109
+ command: string;
110
+ exitCode: number;
111
+ output: string;
112
+ durationMs: number;
113
+ }
114
+ /** Run one check in a workspace. Never throws — a failure IS the result. */
115
+ export declare function runSeedCheck(workspace: string, check: SeedCheck, timeoutMs?: number): SeedCheckResult;
116
+ /** What verification found for one seed. */
117
+ export interface SeedVerification {
118
+ id: string;
119
+ title: string;
120
+ /** The check FAILED on the seeded workspace, and said so in its own words. */
121
+ seedFails: boolean;
122
+ /** The same check PASSED once the reference fix was applied. */
123
+ fixPasses: boolean;
124
+ ok: boolean;
125
+ /** Human-readable evidence, one line per side. */
126
+ detail: string;
127
+ }
128
+ /**
129
+ * Prove a seed is genuinely broken and genuinely fixable.
130
+ *
131
+ * Both halves are required, and the marker requirement is what stops a check that
132
+ * merely CRASHED from counting as evidence of a bug: a syntax error also exits
133
+ * non-zero, so "it failed" alone would verify nothing. The fix half is what proves
134
+ * the check is well-formed; the marker half is what proves the failure is the
135
+ * defect's.
136
+ */
137
+ export declare function verifySeededBug(bug: SeededBug): SeedVerification;
138
+ /** A table of verifications, ready to print. */
139
+ export declare function formatSeedVerification(results: readonly SeedVerification[]): string;
140
+ /** Read a file from a workspace, or null. */
141
+ export declare function readWorkspaceFile(workspace: string, path: string): string | null;
142
+ //# sourceMappingURL=seeded-bugs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeded-bugs.d.ts","sourceRoot":"","sources":["../../src/learning/seeded-bugs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAOH,sCAAsC;AACtC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,SAAS;IACxB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B;;;;OAIG;IACH,UAAU,EAAE,SAAS,QAAQ,EAAE,CAAC;IAChC,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAOjD;AA8FD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAoQ3C,CAAC;AAEF,iCAAiC;AACjC,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE/D;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,MAAM,CAavF;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,SAAS,GAAG,eAAe,CAyBrG;AAED,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,gBAAgB,CAsChE;AAOD,gDAAgD;AAChD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAmBnF;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhF"}