@opensearch-project/agent-health 0.4.0 → 0.6.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 (551) hide show
  1. package/README.md +36 -5
  2. package/cli/dist/index.js +8292 -2938
  3. package/deployment/cloudformation/agent-health-observability.yaml +223 -32
  4. package/dist/assets/index-BfxtxmKc.css +1 -0
  5. package/dist/assets/index-CrjAfDHu.js +243 -0
  6. package/dist/index.html +2 -2
  7. package/docs/ARCHITECTURE.md +450 -0
  8. package/docs/BACKEND_JOB_QUEUE.md +405 -0
  9. package/docs/CLAUDE_CODE_TELEMETRY.md +283 -0
  10. package/docs/CLI.md +474 -0
  11. package/docs/CODING_AGENT_ANALYTICS.md +298 -0
  12. package/docs/CONFIGURATION.md +388 -0
  13. package/docs/CONNECTORS.md +536 -0
  14. package/docs/INSTRUMENT_WITH_OTEL.md +397 -0
  15. package/docs/ML-COMMONS-SETUP.md +289 -0
  16. package/docs/NPX_PACKAGING.md +195 -0
  17. package/docs/PERFORMANCE-MONITORING.md +200 -0
  18. package/docs/PERFORMANCE.md +390 -0
  19. package/docs/PI_PROFILING.md +169 -0
  20. package/docs/PLAN-non-agui-agent-support.md +525 -0
  21. package/docs/SDK.md +626 -0
  22. package/docs/SKILLS.md +264 -0
  23. package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -0
  24. package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
  25. package/docs/blogs/getting-started-blog.md +608 -0
  26. package/docs/diagrams/Agent-health.excalidraw +5656 -0
  27. package/docs/diagrams/architecture.png +0 -0
  28. package/docs/plans/field-redesign.md +468 -0
  29. package/docs/rfcs/001-coding-agent-analytics.md +374 -0
  30. package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
  31. package/docs/rfcs/003-remote-aggregation.md +146 -0
  32. package/docs/rfcs/004-test-sdk-v2.md +599 -0
  33. package/docs/skills/AGENT_HEALTH.md +652 -0
  34. package/docs/skills/AGENT_PROFILE.md +191 -0
  35. package/docs/skills/add-connector/SKILL.md +68 -0
  36. package/docs/skills/agent-health-profile/SKILL.md +40 -0
  37. package/docs/skills/config-auth/SKILL.md +194 -0
  38. package/docs/skills/config-auth/evals/evals.json +35 -0
  39. package/docs/skills/create-pr/SKILL.md +73 -0
  40. package/docs/skills/instrument-otel/SKILL.md +84 -0
  41. package/docs/skills/write-test/SKILL.md +124 -0
  42. package/docs/ui prd.md +376 -0
  43. package/examples/README.md +53 -0
  44. package/examples/config/agent-health.config.example.ts +155 -0
  45. package/examples/connectors/echo-connector.ts +131 -0
  46. package/examples/eval-files/demo.eval.js +128 -0
  47. package/examples/eval-files/ops-rca-classification.eval.js +71 -0
  48. package/examples/eval-files/ops-rca-evaluator.json +15 -0
  49. package/examples/eval-files/sdk-demo.eval.js +72 -0
  50. package/examples/eval-files/sdk-describe-demo.eval.js +50 -0
  51. package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
  52. package/examples/pi-profiling/README.md +77 -0
  53. package/examples/pi-profiling/agent-health-profile.ts +417 -0
  54. package/lib/dist/lib/agentUtils.d.ts +29 -0
  55. package/lib/dist/lib/agentUtils.d.ts.map +1 -0
  56. package/lib/dist/lib/agentUtils.js +43 -0
  57. package/lib/dist/lib/agentUtils.js.map +1 -0
  58. package/lib/dist/lib/bedrockCompat.d.ts +27 -0
  59. package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
  60. package/lib/dist/lib/bedrockCompat.js +83 -0
  61. package/lib/dist/lib/bedrockCompat.js.map +1 -0
  62. package/lib/dist/lib/benchmarkExport.d.ts +14 -0
  63. package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
  64. package/lib/dist/lib/benchmarkExport.js +41 -0
  65. package/lib/dist/lib/benchmarkExport.js.map +1 -0
  66. package/lib/dist/lib/benchmarkImage.d.ts +52 -0
  67. package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
  68. package/lib/dist/lib/benchmarkImage.js +113 -0
  69. package/lib/dist/lib/benchmarkImage.js.map +1 -0
  70. package/lib/dist/lib/benchmarkVersionUtils.d.ts +50 -0
  71. package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
  72. package/lib/dist/lib/benchmarkVersionUtils.js +89 -0
  73. package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
  74. package/lib/dist/lib/chunkedFetch.d.ts +18 -0
  75. package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
  76. package/lib/dist/lib/chunkedFetch.js +40 -0
  77. package/lib/dist/lib/chunkedFetch.js.map +1 -0
  78. package/lib/dist/lib/comparisonInsights.d.ts +104 -0
  79. package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
  80. package/lib/dist/lib/comparisonInsights.js +212 -0
  81. package/lib/dist/lib/comparisonInsights.js.map +1 -0
  82. package/lib/dist/lib/config/defineConfig.d.ts +27 -0
  83. package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
  84. package/lib/dist/lib/config/defineConfig.js +28 -0
  85. package/lib/dist/lib/config/defineConfig.js.map +1 -0
  86. package/lib/dist/lib/config/index.d.ts +9 -0
  87. package/lib/dist/lib/config/index.d.ts.map +1 -0
  88. package/lib/dist/lib/config/index.js +8 -0
  89. package/lib/dist/lib/config/index.js.map +1 -0
  90. package/lib/dist/lib/config/loader.d.ts +39 -0
  91. package/lib/dist/lib/config/loader.d.ts.map +1 -0
  92. package/lib/dist/lib/config/loader.js +263 -0
  93. package/lib/dist/lib/config/loader.js.map +1 -0
  94. package/lib/dist/lib/config/statePaths.d.ts +61 -0
  95. package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
  96. package/lib/dist/lib/config/statePaths.js +188 -0
  97. package/lib/dist/lib/config/statePaths.js.map +1 -0
  98. package/lib/dist/lib/config/types.d.ts +245 -0
  99. package/lib/dist/lib/config/types.d.ts.map +1 -0
  100. package/lib/dist/lib/config/types.js +6 -0
  101. package/lib/dist/lib/config/types.js.map +1 -0
  102. package/lib/dist/lib/config.d.ts +39 -0
  103. package/lib/dist/lib/config.d.ts.map +1 -0
  104. package/lib/dist/lib/config.js +118 -0
  105. package/lib/dist/lib/config.js.map +1 -0
  106. package/lib/dist/lib/constants.d.ts +81 -0
  107. package/lib/dist/lib/constants.d.ts.map +1 -0
  108. package/lib/dist/lib/constants.js +374 -0
  109. package/lib/dist/lib/constants.js.map +1 -0
  110. package/lib/dist/lib/contextFormat.d.ts +26 -0
  111. package/lib/dist/lib/contextFormat.d.ts.map +1 -0
  112. package/lib/dist/lib/contextFormat.js +28 -0
  113. package/lib/dist/lib/contextFormat.js.map +1 -0
  114. package/lib/dist/lib/contextUtilization.d.ts +23 -0
  115. package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
  116. package/lib/dist/lib/contextUtilization.js +72 -0
  117. package/lib/dist/lib/contextUtilization.js.map +1 -0
  118. package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
  119. package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
  120. package/lib/dist/lib/dashboardMetrics.js +242 -0
  121. package/lib/dist/lib/dashboardMetrics.js.map +1 -0
  122. package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
  123. package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
  124. package/lib/dist/lib/dataSourceConfig.js +166 -0
  125. package/lib/dist/lib/dataSourceConfig.js.map +1 -0
  126. package/lib/dist/lib/debug.d.ts +26 -0
  127. package/lib/dist/lib/debug.d.ts.map +1 -0
  128. package/lib/dist/lib/debug.js +132 -0
  129. package/lib/dist/lib/debug.js.map +1 -0
  130. package/lib/dist/lib/diagnostics.d.ts +28 -0
  131. package/lib/dist/lib/diagnostics.d.ts.map +1 -0
  132. package/lib/dist/lib/diagnostics.js +65 -0
  133. package/lib/dist/lib/diagnostics.js.map +1 -0
  134. package/lib/dist/lib/envCompat.d.ts +27 -0
  135. package/lib/dist/lib/envCompat.d.ts.map +1 -0
  136. package/lib/dist/lib/envCompat.js +82 -0
  137. package/lib/dist/lib/envCompat.js.map +1 -0
  138. package/lib/dist/lib/evaluationRerun.d.ts +63 -0
  139. package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
  140. package/lib/dist/lib/evaluationRerun.js +85 -0
  141. package/lib/dist/lib/evaluationRerun.js.map +1 -0
  142. package/lib/dist/lib/findPackageRoot.d.ts +7 -0
  143. package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
  144. package/lib/dist/lib/findPackageRoot.js +57 -0
  145. package/lib/dist/lib/findPackageRoot.js.map +1 -0
  146. package/lib/dist/lib/hooks.d.ts +36 -0
  147. package/lib/dist/lib/hooks.d.ts.map +1 -0
  148. package/lib/dist/lib/hooks.js +112 -0
  149. package/lib/dist/lib/hooks.js.map +1 -0
  150. package/lib/dist/lib/index.d.ts +47 -0
  151. package/lib/dist/lib/index.d.ts.map +1 -0
  152. package/lib/dist/lib/index.js +62 -0
  153. package/lib/dist/lib/index.js.map +1 -0
  154. package/lib/dist/lib/labels.d.ts +90 -0
  155. package/lib/dist/lib/labels.d.ts.map +1 -0
  156. package/lib/dist/lib/labels.js +158 -0
  157. package/lib/dist/lib/labels.js.map +1 -0
  158. package/lib/dist/lib/markdown.d.ts +16 -0
  159. package/lib/dist/lib/markdown.d.ts.map +1 -0
  160. package/lib/dist/lib/markdown.js +42 -0
  161. package/lib/dist/lib/markdown.js.map +1 -0
  162. package/lib/dist/lib/matchers/expect.d.ts +3 -0
  163. package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
  164. package/lib/dist/lib/matchers/expect.js +225 -0
  165. package/lib/dist/lib/matchers/expect.js.map +1 -0
  166. package/lib/dist/lib/matchers/index.d.ts +8 -0
  167. package/lib/dist/lib/matchers/index.d.ts.map +1 -0
  168. package/lib/dist/lib/matchers/index.js +9 -0
  169. package/lib/dist/lib/matchers/index.js.map +1 -0
  170. package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
  171. package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
  172. package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
  173. package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
  174. package/lib/dist/lib/matchers/session.d.ts +39 -0
  175. package/lib/dist/lib/matchers/session.d.ts.map +1 -0
  176. package/lib/dist/lib/matchers/session.js +116 -0
  177. package/lib/dist/lib/matchers/session.js.map +1 -0
  178. package/lib/dist/lib/matchers/traces.d.ts +70 -0
  179. package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
  180. package/lib/dist/lib/matchers/traces.js +236 -0
  181. package/lib/dist/lib/matchers/traces.js.map +1 -0
  182. package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
  183. package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
  184. package/lib/dist/lib/matchers/tracesPricing.js +64 -0
  185. package/lib/dist/lib/matchers/tracesPricing.js.map +1 -0
  186. package/lib/dist/lib/matchers/types.d.ts +75 -0
  187. package/lib/dist/lib/matchers/types.d.ts.map +1 -0
  188. package/lib/dist/lib/matchers/types.js +6 -0
  189. package/lib/dist/lib/matchers/types.js.map +1 -0
  190. package/lib/dist/lib/packagePaths.d.ts +29 -0
  191. package/lib/dist/lib/packagePaths.d.ts.map +1 -0
  192. package/lib/dist/lib/packagePaths.js +63 -0
  193. package/lib/dist/lib/packagePaths.js.map +1 -0
  194. package/lib/dist/lib/performance.d.ts +51 -0
  195. package/lib/dist/lib/performance.d.ts.map +1 -0
  196. package/lib/dist/lib/performance.js +159 -0
  197. package/lib/dist/lib/performance.js.map +1 -0
  198. package/lib/dist/lib/portConfig.d.ts +29 -0
  199. package/lib/dist/lib/portConfig.d.ts.map +1 -0
  200. package/lib/dist/lib/portConfig.js +64 -0
  201. package/lib/dist/lib/portConfig.js.map +1 -0
  202. package/lib/dist/lib/preferences.d.ts +63 -0
  203. package/lib/dist/lib/preferences.d.ts.map +1 -0
  204. package/lib/dist/lib/preferences.js +117 -0
  205. package/lib/dist/lib/preferences.js.map +1 -0
  206. package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
  207. package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
  208. package/lib/dist/lib/resolveAgentModel.js +37 -0
  209. package/lib/dist/lib/resolveAgentModel.js.map +1 -0
  210. package/lib/dist/lib/runStats.d.ts +116 -0
  211. package/lib/dist/lib/runStats.d.ts.map +1 -0
  212. package/lib/dist/lib/runStats.js +192 -0
  213. package/lib/dist/lib/runStats.js.map +1 -0
  214. package/lib/dist/lib/telemetry/constants.d.ts +60 -0
  215. package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
  216. package/lib/dist/lib/telemetry/constants.js +87 -0
  217. package/lib/dist/lib/telemetry/constants.js.map +1 -0
  218. package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
  219. package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
  220. package/lib/dist/lib/telemetry/evalSpans.js +254 -0
  221. package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
  222. package/lib/dist/lib/telemetry/index.d.ts +11 -0
  223. package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
  224. package/lib/dist/lib/telemetry/index.js +15 -0
  225. package/lib/dist/lib/telemetry/index.js.map +1 -0
  226. package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
  227. package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
  228. package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
  229. package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
  230. package/lib/dist/lib/telemetry/provider.d.ts +55 -0
  231. package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
  232. package/lib/dist/lib/telemetry/provider.js +140 -0
  233. package/lib/dist/lib/telemetry/provider.js.map +1 -0
  234. package/lib/dist/lib/testCaseLabels.d.ts +34 -0
  235. package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
  236. package/lib/dist/lib/testCaseLabels.js +88 -0
  237. package/lib/dist/lib/testCaseLabels.js.map +1 -0
  238. package/lib/dist/lib/testCaseValidation.d.ts +140 -0
  239. package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
  240. package/lib/dist/lib/testCaseValidation.js +162 -0
  241. package/lib/dist/lib/testCaseValidation.js.map +1 -0
  242. package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
  243. package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
  244. package/lib/dist/lib/testCases/agentFixture.js +43 -0
  245. package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
  246. package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
  247. package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
  248. package/lib/dist/lib/testCases/authoringSurface.js +54 -0
  249. package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
  250. package/lib/dist/lib/testCases/codemod.d.ts +13 -0
  251. package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
  252. package/lib/dist/lib/testCases/codemod.js +169 -0
  253. package/lib/dist/lib/testCases/codemod.js.map +1 -0
  254. package/lib/dist/lib/testCases/define.d.ts +114 -0
  255. package/lib/dist/lib/testCases/define.d.ts.map +1 -0
  256. package/lib/dist/lib/testCases/define.js +253 -0
  257. package/lib/dist/lib/testCases/define.js.map +1 -0
  258. package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
  259. package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
  260. package/lib/dist/lib/testCases/evaluators.js +105 -0
  261. package/lib/dist/lib/testCases/evaluators.js.map +1 -0
  262. package/lib/dist/lib/testCases/index.d.ts +14 -0
  263. package/lib/dist/lib/testCases/index.d.ts.map +1 -0
  264. package/lib/dist/lib/testCases/index.js +12 -0
  265. package/lib/dist/lib/testCases/index.js.map +1 -0
  266. package/lib/dist/lib/testCases/judge.d.ts +165 -0
  267. package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
  268. package/lib/dist/lib/testCases/judge.js +359 -0
  269. package/lib/dist/lib/testCases/judge.js.map +1 -0
  270. package/lib/dist/lib/testCases/loader.d.ts +36 -0
  271. package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
  272. package/lib/dist/lib/testCases/loader.js +179 -0
  273. package/lib/dist/lib/testCases/loader.js.map +1 -0
  274. package/lib/dist/lib/testCases/types.d.ts +242 -0
  275. package/lib/dist/lib/testCases/types.d.ts.map +1 -0
  276. package/lib/dist/lib/testCases/types.js +6 -0
  277. package/lib/dist/lib/testCases/types.js.map +1 -0
  278. package/lib/dist/lib/theme.d.ts +6 -0
  279. package/lib/dist/lib/theme.d.ts.map +1 -0
  280. package/lib/dist/lib/theme.js +36 -0
  281. package/lib/dist/lib/theme.js.map +1 -0
  282. package/lib/dist/lib/uiTelemetry.d.ts +7 -0
  283. package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
  284. package/lib/dist/lib/uiTelemetry.js +25 -0
  285. package/lib/dist/lib/uiTelemetry.js.map +1 -0
  286. package/lib/dist/lib/utils.d.ts +111 -0
  287. package/lib/dist/lib/utils.d.ts.map +1 -0
  288. package/lib/dist/lib/utils.js +254 -0
  289. package/lib/dist/lib/utils.js.map +1 -0
  290. package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
  291. package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
  292. package/lib/dist/lib/workflow/consolidate.js +33 -0
  293. package/lib/dist/lib/workflow/consolidate.js.map +1 -0
  294. package/lib/dist/lib/workflow/index.d.ts +13 -0
  295. package/lib/dist/lib/workflow/index.d.ts.map +1 -0
  296. package/lib/dist/lib/workflow/index.js +12 -0
  297. package/lib/dist/lib/workflow/index.js.map +1 -0
  298. package/lib/dist/lib/workflow/ledger.d.ts +30 -0
  299. package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
  300. package/lib/dist/lib/workflow/ledger.js +41 -0
  301. package/lib/dist/lib/workflow/ledger.js.map +1 -0
  302. package/lib/dist/lib/workflow/pool.d.ts +13 -0
  303. package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
  304. package/lib/dist/lib/workflow/pool.js +44 -0
  305. package/lib/dist/lib/workflow/pool.js.map +1 -0
  306. package/lib/dist/lib/workflow/source.d.ts +22 -0
  307. package/lib/dist/lib/workflow/source.d.ts.map +1 -0
  308. package/lib/dist/lib/workflow/source.js +29 -0
  309. package/lib/dist/lib/workflow/source.js.map +1 -0
  310. package/lib/dist/lib/workflow/stepB.d.ts +71 -0
  311. package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
  312. package/lib/dist/lib/workflow/stepB.js +99 -0
  313. package/lib/dist/lib/workflow/stepB.js.map +1 -0
  314. package/lib/dist/lib/workflow/types.d.ts +86 -0
  315. package/lib/dist/lib/workflow/types.d.ts.map +1 -0
  316. package/lib/dist/lib/workflow/types.js +6 -0
  317. package/lib/dist/lib/workflow/types.js.map +1 -0
  318. package/lib/dist/lib/workflow/workflow.d.ts +119 -0
  319. package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
  320. package/lib/dist/lib/workflow/workflow.js +195 -0
  321. package/lib/dist/lib/workflow/workflow.js.map +1 -0
  322. package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
  323. package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
  324. package/lib/dist/services/agent/aguiConverter.js +449 -0
  325. package/lib/dist/services/agent/aguiConverter.js.map +1 -0
  326. package/lib/dist/services/agent/index.d.ts +10 -0
  327. package/lib/dist/services/agent/index.d.ts.map +1 -0
  328. package/lib/dist/services/agent/index.js +12 -0
  329. package/lib/dist/services/agent/index.js.map +1 -0
  330. package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
  331. package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
  332. package/lib/dist/services/agent/payloadBuilder.js +75 -0
  333. package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
  334. package/lib/dist/services/agent/sseStream.d.ts +43 -0
  335. package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
  336. package/lib/dist/services/agent/sseStream.js +223 -0
  337. package/lib/dist/services/agent/sseStream.js.map +1 -0
  338. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
  339. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
  340. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
  341. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
  342. package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
  343. package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
  344. package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
  345. package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
  346. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +126 -0
  347. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
  348. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +417 -0
  349. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
  350. package/lib/dist/services/connectors/index.d.ts +13 -0
  351. package/lib/dist/services/connectors/index.d.ts.map +1 -0
  352. package/lib/dist/services/connectors/index.js +32 -0
  353. package/lib/dist/services/connectors/index.js.map +1 -0
  354. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
  355. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
  356. package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
  357. package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
  358. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
  359. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
  360. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
  361. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
  362. package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
  363. package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
  364. package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
  365. package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
  366. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
  367. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
  368. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
  369. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
  370. package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
  371. package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
  372. package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
  373. package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
  374. package/lib/dist/services/connectors/registry.d.ts +57 -0
  375. package/lib/dist/services/connectors/registry.d.ts.map +1 -0
  376. package/lib/dist/services/connectors/registry.js +106 -0
  377. package/lib/dist/services/connectors/registry.js.map +1 -0
  378. package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
  379. package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
  380. package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
  381. package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
  382. package/lib/dist/services/connectors/server.d.ts +13 -0
  383. package/lib/dist/services/connectors/server.d.ts.map +1 -0
  384. package/lib/dist/services/connectors/server.js +34 -0
  385. package/lib/dist/services/connectors/server.js.map +1 -0
  386. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
  387. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
  388. package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
  389. package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
  390. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
  391. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
  392. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +426 -0
  393. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
  394. package/lib/dist/services/connectors/types.d.ts +213 -0
  395. package/lib/dist/services/connectors/types.d.ts.map +1 -0
  396. package/lib/dist/services/connectors/types.js +6 -0
  397. package/lib/dist/services/connectors/types.js.map +1 -0
  398. package/lib/dist/services/evaluation/bedrockJudge.d.ts +71 -0
  399. package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
  400. package/lib/dist/services/evaluation/bedrockJudge.js +169 -0
  401. package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
  402. package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
  403. package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
  404. package/lib/dist/services/evaluation/evaluatorError.js +56 -0
  405. package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
  406. package/lib/dist/services/evaluation/index.d.ts +106 -0
  407. package/lib/dist/services/evaluation/index.d.ts.map +1 -0
  408. package/lib/dist/services/evaluation/index.js +684 -0
  409. package/lib/dist/services/evaluation/index.js.map +1 -0
  410. package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
  411. package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
  412. package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
  413. package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
  414. package/lib/dist/services/opensearch/client.d.ts +26 -0
  415. package/lib/dist/services/opensearch/client.d.ts.map +1 -0
  416. package/lib/dist/services/opensearch/client.js +131 -0
  417. package/lib/dist/services/opensearch/client.js.map +1 -0
  418. package/lib/dist/services/opensearch/index.d.ts +16 -0
  419. package/lib/dist/services/opensearch/index.d.ts.map +1 -0
  420. package/lib/dist/services/opensearch/index.js +25 -0
  421. package/lib/dist/services/opensearch/index.js.map +1 -0
  422. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
  423. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
  424. package/lib/dist/services/storage/asyncBenchmarkStorage.js +440 -0
  425. package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
  426. package/lib/dist/services/storage/asyncRunStorage.d.ts +135 -0
  427. package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
  428. package/lib/dist/services/storage/asyncRunStorage.js +524 -0
  429. package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
  430. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +170 -0
  431. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
  432. package/lib/dist/services/storage/asyncTestCaseStorage.js +301 -0
  433. package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
  434. package/lib/dist/services/storage/index.d.ts +17 -0
  435. package/lib/dist/services/storage/index.d.ts.map +1 -0
  436. package/lib/dist/services/storage/index.js +20 -0
  437. package/lib/dist/services/storage/index.js.map +1 -0
  438. package/lib/dist/services/storage/migration.d.ts +54 -0
  439. package/lib/dist/services/storage/migration.d.ts.map +1 -0
  440. package/lib/dist/services/storage/migration.js +296 -0
  441. package/lib/dist/services/storage/migration.js.map +1 -0
  442. package/lib/dist/services/storage/opensearchClient.d.ts +947 -0
  443. package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
  444. package/lib/dist/services/storage/opensearchClient.js +442 -0
  445. package/lib/dist/services/storage/opensearchClient.js.map +1 -0
  446. package/lib/dist/services/traces/browserRecovery.d.ts +37 -0
  447. package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
  448. package/lib/dist/services/traces/browserRecovery.js +108 -0
  449. package/lib/dist/services/traces/browserRecovery.js.map +1 -0
  450. package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
  451. package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
  452. package/lib/dist/services/traces/categoryStyles.js +56 -0
  453. package/lib/dist/services/traces/categoryStyles.js.map +1 -0
  454. package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
  455. package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
  456. package/lib/dist/services/traces/executionOrderTransform.js +313 -0
  457. package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
  458. package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
  459. package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
  460. package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
  461. package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
  462. package/lib/dist/services/traces/flowTransform.d.ts +24 -0
  463. package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
  464. package/lib/dist/services/traces/flowTransform.js +228 -0
  465. package/lib/dist/services/traces/flowTransform.js.map +1 -0
  466. package/lib/dist/services/traces/index.d.ts +121 -0
  467. package/lib/dist/services/traces/index.d.ts.map +1 -0
  468. package/lib/dist/services/traces/index.js +255 -0
  469. package/lib/dist/services/traces/index.js.map +1 -0
  470. package/lib/dist/services/traces/intentTransform.d.ts +20 -0
  471. package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
  472. package/lib/dist/services/traces/intentTransform.js +131 -0
  473. package/lib/dist/services/traces/intentTransform.js.map +1 -0
  474. package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
  475. package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
  476. package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
  477. package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
  478. package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
  479. package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
  480. package/lib/dist/services/traces/messageExtraction.js +313 -0
  481. package/lib/dist/services/traces/messageExtraction.js.map +1 -0
  482. package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
  483. package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
  484. package/lib/dist/services/traces/spanCategorization.js +276 -0
  485. package/lib/dist/services/traces/spanCategorization.js.map +1 -0
  486. package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
  487. package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
  488. package/lib/dist/services/traces/spanPreprocessing.js +102 -0
  489. package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
  490. package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
  491. package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
  492. package/lib/dist/services/traces/spansToTrajectory.js +425 -0
  493. package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
  494. package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
  495. package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
  496. package/lib/dist/services/traces/toolSimilarity.js +203 -0
  497. package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
  498. package/lib/dist/services/traces/traceComparison.d.ts +31 -0
  499. package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
  500. package/lib/dist/services/traces/traceComparison.js +318 -0
  501. package/lib/dist/services/traces/traceComparison.js.map +1 -0
  502. package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
  503. package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
  504. package/lib/dist/services/traces/traceGrouping.js +107 -0
  505. package/lib/dist/services/traces/traceGrouping.js.map +1 -0
  506. package/lib/dist/services/traces/tracePoller.d.ts +108 -0
  507. package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
  508. package/lib/dist/services/traces/tracePoller.js +475 -0
  509. package/lib/dist/services/traces/tracePoller.js.map +1 -0
  510. package/lib/dist/services/traces/traceStats.d.ts +45 -0
  511. package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
  512. package/lib/dist/services/traces/traceStats.js +114 -0
  513. package/lib/dist/services/traces/traceStats.js.map +1 -0
  514. package/lib/dist/services/traces/traceSummary.d.ts +47 -0
  515. package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
  516. package/lib/dist/services/traces/traceSummary.js +68 -0
  517. package/lib/dist/services/traces/traceSummary.js.map +1 -0
  518. package/lib/dist/services/traces/utils.d.ts +33 -0
  519. package/lib/dist/services/traces/utils.d.ts.map +1 -0
  520. package/lib/dist/services/traces/utils.js +114 -0
  521. package/lib/dist/services/traces/utils.js.map +1 -0
  522. package/lib/dist/types/agui.d.ts +13 -0
  523. package/lib/dist/types/agui.d.ts.map +1 -0
  524. package/lib/dist/types/agui.js +16 -0
  525. package/lib/dist/types/agui.js.map +1 -0
  526. package/lib/dist/types/index.d.ts +1229 -0
  527. package/lib/dist/types/index.d.ts.map +1 -0
  528. package/lib/dist/types/index.js +12 -0
  529. package/lib/dist/types/index.js.map +1 -0
  530. package/lib/dist/types/skills.d.ts +146 -0
  531. package/lib/dist/types/skills.d.ts.map +1 -0
  532. package/lib/dist/types/skills.js +6 -0
  533. package/lib/dist/types/skills.js.map +1 -0
  534. package/observio-sample-agent/pi-package/README.md +112 -0
  535. package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
  536. package/observio-sample-agent/pi-package/package.json +17 -0
  537. package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
  538. package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
  539. package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
  540. package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
  541. package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
  542. package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
  543. package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
  544. package/package.json +45 -9
  545. package/server/dist/app.js +34031 -18731
  546. package/server/dist/index.js +30737 -15338
  547. package/tsconfig.lib.json +71 -0
  548. package/dist/assets/index-BOIP5L7h.js +0 -246
  549. package/dist/assets/index-CU9YKpAL.css +0 -1
  550. package/lib/dist/config/index.js +0 -452
  551. package/lib/dist/index.js +0 -1725
@@ -0,0 +1,88 @@
1
+ import type { TrajectoryStep } from '../../../types/index.js';
2
+ import { BaseConnector } from '../../../services/connectors/base/BaseConnector.js';
3
+ import type { ConnectorAuth, ConnectorRequest, ConnectorResponse, ConnectorProgressCallback, ConnectorRawEventCallback, SubprocessConfig, ConnectorProtocol } from '../../../services/connectors/types.js';
4
+ /**
5
+ * Subprocess Connector for CLI tools
6
+ * Spawns a child process and captures output
7
+ */
8
+ export declare class SubprocessConnector extends BaseConnector {
9
+ readonly type: ConnectorProtocol;
10
+ readonly name: string;
11
+ readonly supportsStreaming = true;
12
+ /**
13
+ * Default trace-context strategy for subprocess agents: propagate via the
14
+ * W3C TRACEPARENT env var. Subclasses (Claude Code, Kiro, Pi) override
15
+ * `serviceName` to point at their OpenSearch service.name for Strategy C.
16
+ */
17
+ traceContext: {
18
+ propagateEnv: boolean;
19
+ };
20
+ protected config: SubprocessConfig;
21
+ constructor(config?: Partial<SubprocessConfig>);
22
+ /**
23
+ * Build input for the subprocess
24
+ */
25
+ buildPayload(request: ConnectorRequest): string;
26
+ /**
27
+ * Execute subprocess and capture output
28
+ */
29
+ execute(endpoint: string, // For subprocess, this is the command name
30
+ request: ConnectorRequest, auth: ConnectorAuth, onProgress?: ConnectorProgressCallback, onRawEvent?: ConnectorRawEventCallback): Promise<ConnectorResponse>;
31
+ /** Buffer of clean stdout lines accumulated during streaming.
32
+ * Used by onBeforeStreamEnd() to emit a consolidated `response` step. */
33
+ private streamBuffer;
34
+ /**
35
+ * Parse a stderr chunk in streaming mode. Default is a no-op.
36
+ *
37
+ * Override in subclasses for CLIs that carry tool-event markers on stderr.
38
+ * Implementations should buffer partial lines (chunks rarely align with
39
+ * line boundaries) and emit steps via `onProgress` AND push them onto
40
+ * `trajectory` so they appear in the final response.
41
+ */
42
+ protected parseStderrChunk(_chunk: string, _trajectory: TrajectoryStep[], _onProgress?: ConnectorProgressCallback): void;
43
+ /**
44
+ * Subclass hook: extra protocol-specific fields to merge into the
45
+ * connector result `metadata`. Default: none. Claude Code overrides this to
46
+ * surface the captured `sessionId` (Strategy D trace correlation).
47
+ */
48
+ protected extraResultMetadata(): Record<string, any>;
49
+ /**
50
+ * Parse streaming output and emit steps in real-time.
51
+ *
52
+ * For plain-text CLIs (Kiro etc.) we:
53
+ * 1. strip ANSI escape codes (color, cursor moves, spinner frames)
54
+ * 2. drop lines that are empty / pure control characters / spinner glyphs
55
+ * 3. emit each surviving line as an `assistant` step immediately
56
+ * 4. buffer the cleaned text so `onBeforeStreamEnd()` can emit a final
57
+ * `response` step containing the full coherent answer (good for the
58
+ * judge) — without losing the live stream.
59
+ */
60
+ protected parseStreamingOutput(chunk: string, trajectory: TrajectoryStep[], onProgress?: ConnectorProgressCallback): void;
61
+ /**
62
+ * On stream end: emit a consolidated `response` step containing the full
63
+ * clean output. Streaming gave the user real-time visibility; this final
64
+ * step gives the judge a single coherent answer to grade against.
65
+ */
66
+ protected onBeforeStreamEnd(trajectory: TrajectoryStep[], onProgress?: ConnectorProgressCallback): void;
67
+ /**
68
+ * Parse final subprocess output
69
+ */
70
+ parseResponse(data: {
71
+ stdout: string;
72
+ stderr: string;
73
+ exitCode: number;
74
+ }): TrajectoryStep[];
75
+ /**
76
+ * Parse JSON output into trajectory steps
77
+ */
78
+ protected parseJsonOutput(data: any): TrajectoryStep[];
79
+ /**
80
+ * Health check - verify command exists
81
+ */
82
+ healthCheck(endpoint: string, auth: ConnectorAuth): Promise<boolean>;
83
+ }
84
+ /**
85
+ * Default instance for convenience
86
+ */
87
+ export declare const subprocessConnector: SubprocessConnector;
88
+ //# sourceMappingURL=SubprocessConnector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubprocessConnector.d.ts","sourceRoot":"","sources":["../../../../../services/connectors/subprocess/SubprocessConnector.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAcrC;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAgB;IAChD,SAAkB,IAAI,EAAE,MAAM,CAAsB;IACpD,QAAQ,CAAC,iBAAiB,QAAQ;IAElC;;;;OAIG;IACM,YAAY;;MAA0B;IAE/C,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBAEvB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAK9C;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAe/C;;OAEG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAAE,2CAA2C;IAC7D,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,aAAa,EACnB,UAAU,CAAC,EAAE,yBAAyB,EACtC,UAAU,CAAC,EAAE,yBAAyB,GACrC,OAAO,CAAC,iBAAiB,CAAC;IAqO7B;8EAC0E;IAC1E,OAAO,CAAC,YAAY,CAAgB;IAEpC;;;;;;;OAOG;IACH,SAAS,CAAC,gBAAgB,CACxB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,EAAE,EAC7B,WAAW,CAAC,EAAE,yBAAyB,GACtC,IAAI;IAIP;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIpD;;;;;;;;;;OAUG;IACH,SAAS,CAAC,oBAAoB,CAC5B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,cAAc,EAAE,EAC5B,UAAU,CAAC,EAAE,yBAAyB,GACrC,IAAI;IAyBP;;;;OAIG;IACH,SAAS,CAAC,iBAAiB,CACzB,UAAU,EAAE,cAAc,EAAE,EAC5B,UAAU,CAAC,EAAE,yBAAyB,GACrC,IAAI;IAYP;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,EAAE;IAkC3F;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,EAAE;IAuBtD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAe3E;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
@@ -0,0 +1,426 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Subprocess Connector
7
+ * Handles communication with CLI tools by spawning child processes
8
+ */
9
+ import { spawn } from 'child_process';
10
+ import { ToolCallStatus } from '../../../types/index.js';
11
+ import { BaseConnector } from '../../../services/connectors/base/BaseConnector.js';
12
+ /**
13
+ * Default subprocess configuration
14
+ */
15
+ const DEFAULT_SUBPROCESS_CONFIG = {
16
+ command: '',
17
+ args: [],
18
+ env: {},
19
+ inputMode: 'stdin',
20
+ outputParser: 'text',
21
+ timeout: 300000, // 5 minutes
22
+ };
23
+ /**
24
+ * Subprocess Connector for CLI tools
25
+ * Spawns a child process and captures output
26
+ */
27
+ export class SubprocessConnector extends BaseConnector {
28
+ constructor(config) {
29
+ super();
30
+ this.type = 'subprocess';
31
+ this.name = 'Subprocess (CLI)';
32
+ this.supportsStreaming = true;
33
+ /**
34
+ * Default trace-context strategy for subprocess agents: propagate via the
35
+ * W3C TRACEPARENT env var. Subclasses (Claude Code, Kiro, Pi) override
36
+ * `serviceName` to point at their OpenSearch service.name for Strategy C.
37
+ */
38
+ this.traceContext = { propagateEnv: true };
39
+ /** Buffer of clean stdout lines accumulated during streaming.
40
+ * Used by onBeforeStreamEnd() to emit a consolidated `response` step. */
41
+ this.streamBuffer = [];
42
+ this.config = { ...DEFAULT_SUBPROCESS_CONFIG, ...config };
43
+ }
44
+ /**
45
+ * Build input for the subprocess
46
+ */
47
+ buildPayload(request) {
48
+ // Build a simple prompt string for CLI tools
49
+ let prompt = request.testCase.initialPrompt;
50
+ // Add context if available
51
+ if (request.testCase.context && request.testCase.context.length > 0) {
52
+ const contextStr = request.testCase.context
53
+ .map(c => `${c.description}: ${c.value}`)
54
+ .join('\n');
55
+ prompt = `Context:\n${contextStr}\n\nQuestion: ${prompt}`;
56
+ }
57
+ return prompt;
58
+ }
59
+ /**
60
+ * Execute subprocess and capture output
61
+ */
62
+ async execute(endpoint, // For subprocess, this is the command name
63
+ request, auth, onProgress, onRawEvent) {
64
+ this.debug('========== execute() STARTED ==========');
65
+ // Reset per-run streaming state so consecutive calls don't bleed.
66
+ this.streamBuffer = [];
67
+ // Apply per-request connectorConfig overrides (from agent-health.config.ts).
68
+ // The base SubprocessConnector previously ignored these and only used the
69
+ // constructor defaults. Specialized subclasses (ClaudeCode, Pi) already do
70
+ // this — we replicate the pattern here so any agent registered with
71
+ // connectorType: 'subprocess' can specify command/args/inputMode/etc.
72
+ const cfgOverride = (request.connectorConfig || {});
73
+ if (cfgOverride.command !== undefined)
74
+ this.config.command = cfgOverride.command;
75
+ if (cfgOverride.args !== undefined)
76
+ this.config.args = cfgOverride.args;
77
+ if (cfgOverride.env !== undefined)
78
+ this.config.env = { ...(this.config.env || {}), ...cfgOverride.env };
79
+ if (cfgOverride.inputMode !== undefined)
80
+ this.config.inputMode = cfgOverride.inputMode;
81
+ if (cfgOverride.outputParser !== undefined)
82
+ this.config.outputParser = cfgOverride.outputParser;
83
+ if (cfgOverride.timeout !== undefined)
84
+ this.config.timeout = cfgOverride.timeout;
85
+ if (cfgOverride.workingDir !== undefined)
86
+ this.config.workingDir = cfgOverride.workingDir;
87
+ const command = endpoint || this.config.command;
88
+ const args = this.config.args || [];
89
+ // Use pre-built payload from hook if available, otherwise build fresh
90
+ const input = request.payload || this.buildPayload(request);
91
+ // Generate runId before spawning so the subprocess can include it in OTel spans
92
+ const runId = `subprocess-${Date.now()}`;
93
+ this.debug('Command:', command);
94
+ this.debug('Args:', args);
95
+ this.debug('Input mode:', this.config.inputMode);
96
+ this.debug('Output parser:', this.config.outputParser);
97
+ this.debug('Timeout:', this.config.timeout);
98
+ this.debug('Input (first 500 chars):', input.substring(0, 500));
99
+ this.debug('Working dir:', this.config.workingDir || process.cwd());
100
+ this.debug('Run ID:', runId);
101
+ // Merge environment variables.
102
+ // AGENT_EVAL_RUN_ID is passed so the subprocess can set gen_ai.request.id
103
+ // in its OTel spans, enabling trace correlation in the traces view.
104
+ const env = {
105
+ ...process.env,
106
+ ...this.buildAuthEnv(auth),
107
+ ...this.config.env,
108
+ // W3C trace context (Strategy A): TRACEPARENT/TRACESTATE from the active
109
+ // eval `test_case` span. Agents whose OTel SDK honors TRACEPARENT (pi —
110
+ // verified) emit their spans under the eval span's traceId, giving the
111
+ // trace poller an exact, window-free correlator. Despite the
112
+ // `traceContext.propagateEnv` contract, this helper was never actually
113
+ // wired into the spawn env before — subprocess agents silently ran
114
+ // without trace context.
115
+ ...this.buildTraceparentEnv(),
116
+ AGENT_EVAL_RUN_ID: runId,
117
+ };
118
+ return new Promise((resolve, reject) => {
119
+ const trajectory = [];
120
+ const rawOutput = [];
121
+ let stdout = '';
122
+ let stderr = '';
123
+ let settled = false;
124
+ // Build final args (add input as argument if inputMode is 'arg').
125
+ //
126
+ // We spawn with `shell: false` (the default) and pass `args` as an
127
+ // array. The OS exec syscall delivers each array element as a separate
128
+ // argv slot to the child binary verbatim, with NO shell interpretation
129
+ // — so spaces, slashes, quotes, backticks, `$()`, `;`, `&`, and other
130
+ // shell metacharacters in the prompt are passed through as literal
131
+ // bytes instead of being evaluated. This is the only safe way to pass
132
+ // user-controlled prompt strings to spawn().
133
+ //
134
+ // Historical note: an earlier version used `shell: true` and a
135
+ // hand-rolled `shellQuote` that only escaped single quotes. That left
136
+ // a command-injection hole — a prompt containing `'$(rm -rf ~)'` would
137
+ // get evaluated by /bin/sh. Switching to `shell: false` removes the
138
+ // attack surface entirely; quoting is no longer the connector's job.
139
+ const finalArgs = this.config.inputMode === 'arg'
140
+ ? [...args, input]
141
+ : args;
142
+ this.debug('Spawning process...');
143
+ this.debug('Full command:', command, finalArgs.join(' '));
144
+ const proc = spawn(command, finalArgs, {
145
+ env,
146
+ cwd: this.config.workingDir,
147
+ shell: false,
148
+ });
149
+ this.debug('Process spawned, PID:', proc.pid);
150
+ // Set timeout
151
+ const timeoutId = setTimeout(() => {
152
+ if (settled)
153
+ return;
154
+ settled = true;
155
+ this.debug('TIMEOUT reached, killing process');
156
+ proc.kill('SIGTERM');
157
+ reject(new Error(`Subprocess timed out after ${this.config.timeout}ms`));
158
+ }, this.config.timeout);
159
+ // Send input via stdin if inputMode is 'stdin'
160
+ if (this.config.inputMode === 'stdin') {
161
+ this.debug('Writing input to stdin...');
162
+ proc.stdin.write(input);
163
+ proc.stdin.end();
164
+ this.debug('stdin closed');
165
+ }
166
+ // Handle stdout
167
+ proc.stdout.on('data', (data) => {
168
+ const chunk = data.toString();
169
+ this.debug('stdout received:', chunk.length, 'bytes');
170
+ this.debug('stdout preview:', chunk.substring(0, 200));
171
+ stdout += chunk;
172
+ rawOutput.push({ type: 'stdout', data: chunk, timestamp: Date.now() });
173
+ onRawEvent?.({ type: 'stdout', data: chunk });
174
+ // For streaming mode, try to parse and emit steps
175
+ if (this.config.outputParser === 'streaming') {
176
+ this.parseStreamingOutput(chunk, trajectory, onProgress);
177
+ }
178
+ });
179
+ // Handle stderr.
180
+ //
181
+ // We push stderr chunks into rawOutput (alongside stdout) so the saved
182
+ // benchmark report retains them. Without this, agents that emit
183
+ // structured tool events on stderr (e.g. kiro-cli's `[tool] Running:`
184
+ // markers) leave no audit trail in the persisted run, and the LLM judge
185
+ // is forced to grade the agent's narrative alone.
186
+ //
187
+ // We also delegate streaming-mode subclasses a hook (`parseStderrChunk`)
188
+ // so they can convert stderr-borne events into trajectory steps in
189
+ // real time. The default implementation is a no-op for connectors
190
+ // (claude-code, plain text CLIs) that don't carry events on stderr.
191
+ proc.stderr.on('data', (data) => {
192
+ const chunk = data.toString();
193
+ this.debug('stderr received:', chunk.length, 'bytes');
194
+ this.debug('stderr:', chunk);
195
+ stderr += chunk;
196
+ rawOutput.push({ type: 'stderr', data: chunk, timestamp: Date.now() });
197
+ onRawEvent?.({ type: 'stderr', data: chunk });
198
+ if (this.config.outputParser === 'streaming') {
199
+ this.parseStderrChunk(chunk, trajectory, onProgress);
200
+ }
201
+ });
202
+ // Handle process exit
203
+ proc.on('close', (code, signal) => {
204
+ this.debug('Process closed with code:', code, 'signal:', signal);
205
+ clearTimeout(timeoutId);
206
+ if (settled)
207
+ return;
208
+ settled = true;
209
+ if (code !== 0) {
210
+ // Non-zero exit code - create error response but don't reject
211
+ this.debug('Non-zero exit code:', code);
212
+ this.error(`Process exited with code ${code}`);
213
+ this.error('stderr:', stderr);
214
+ }
215
+ // Flush subclass buffers before finalizing streaming trajectory
216
+ if (this.config.outputParser === 'streaming') {
217
+ this.onBeforeStreamEnd(trajectory, onProgress);
218
+ // Surface error when streaming produced no steps
219
+ if (code !== 0 && trajectory.length === 0) {
220
+ const errorContent = stderr.trim()
221
+ ? `Error: Process exited with code ${code}. ${stderr.trim()}`
222
+ : `Error: Process exited with code ${code}`;
223
+ const errorStep = this.createStep('tool_result', errorContent, {
224
+ status: ToolCallStatus.FAILURE,
225
+ });
226
+ trajectory.push(errorStep);
227
+ onProgress?.(errorStep);
228
+ }
229
+ }
230
+ // Parse final output
231
+ const finalTrajectory = this.config.outputParser === 'streaming'
232
+ ? trajectory
233
+ : this.parseResponse({ stdout, stderr, exitCode: code });
234
+ // Emit steps if not already streamed
235
+ if (this.config.outputParser !== 'streaming') {
236
+ finalTrajectory.forEach(step => onProgress?.(step));
237
+ }
238
+ this.debug('Resolving with trajectory of', finalTrajectory.length, 'steps');
239
+ resolve({
240
+ trajectory: finalTrajectory,
241
+ runId,
242
+ rawEvents: rawOutput,
243
+ metadata: {
244
+ command,
245
+ args: finalArgs,
246
+ exitCode: code,
247
+ stderr: stderr || undefined,
248
+ ...this.extraResultMetadata(),
249
+ },
250
+ });
251
+ });
252
+ // Handle errors
253
+ proc.on('error', (error) => {
254
+ this.debug('ERROR event:', error.message);
255
+ clearTimeout(timeoutId);
256
+ if (settled)
257
+ return;
258
+ settled = true;
259
+ // Provide more helpful error messages for common failures
260
+ let errorMsg = `Failed to spawn subprocess: ${error.message}`;
261
+ if (error.message.includes('ENOENT')) {
262
+ errorMsg = `Command '${command}' not found. Is it installed and in PATH?`;
263
+ console.error(`[Subprocess] ENOENT error - command '${command}' not found in PATH`);
264
+ }
265
+ else if (error.message.includes('EACCES')) {
266
+ errorMsg = `Permission denied executing '${command}'. Check file permissions.`;
267
+ console.error(`[Subprocess] EACCES error - permission denied for '${command}'`);
268
+ }
269
+ else if (error.message.includes('EPERM')) {
270
+ errorMsg = `Operation not permitted for '${command}'. May require elevated privileges.`;
271
+ console.error(`[Subprocess] EPERM error - operation not permitted`);
272
+ }
273
+ reject(new Error(errorMsg));
274
+ });
275
+ });
276
+ this.debug('========== execute() COMPLETED ==========');
277
+ }
278
+ /**
279
+ * Parse a stderr chunk in streaming mode. Default is a no-op.
280
+ *
281
+ * Override in subclasses for CLIs that carry tool-event markers on stderr.
282
+ * Implementations should buffer partial lines (chunks rarely align with
283
+ * line boundaries) and emit steps via `onProgress` AND push them onto
284
+ * `trajectory` so they appear in the final response.
285
+ */
286
+ parseStderrChunk(_chunk, _trajectory, _onProgress) {
287
+ // No-op by default; KiroConnector overrides this.
288
+ }
289
+ /**
290
+ * Subclass hook: extra protocol-specific fields to merge into the
291
+ * connector result `metadata`. Default: none. Claude Code overrides this to
292
+ * surface the captured `sessionId` (Strategy D trace correlation).
293
+ */
294
+ extraResultMetadata() {
295
+ return {};
296
+ }
297
+ /**
298
+ * Parse streaming output and emit steps in real-time.
299
+ *
300
+ * For plain-text CLIs (Kiro etc.) we:
301
+ * 1. strip ANSI escape codes (color, cursor moves, spinner frames)
302
+ * 2. drop lines that are empty / pure control characters / spinner glyphs
303
+ * 3. emit each surviving line as an `assistant` step immediately
304
+ * 4. buffer the cleaned text so `onBeforeStreamEnd()` can emit a final
305
+ * `response` step containing the full coherent answer (good for the
306
+ * judge) — without losing the live stream.
307
+ */
308
+ parseStreamingOutput(chunk, trajectory, onProgress) {
309
+ // Strip ANSI: CSI sequences (\x1b[...m, cursor moves, etc.) and OSC
310
+ const stripped = chunk
311
+ .replace(/\x1b\][^\x07\x1b]*(\x07|\x1b\\)/g, '') // OSC ... BEL
312
+ .replace(/\x1b\[[0-9;?]*[A-Za-z]/g, '') // CSI
313
+ .replace(/\x1b[=>NOP\\]/g, '') // single-char escapes
314
+ .replace(/\r/g, '\n'); // normalize CR to NL
315
+ const lines = stripped.split('\n');
316
+ for (const raw of lines) {
317
+ // Drop control chars, BEL, spinner braille glyphs, and trim
318
+ const line = raw.replace(/[\x00-\x08\x0b-\x1f\x7f]/g, '').trim();
319
+ if (!line)
320
+ continue;
321
+ // Skip pure-spinner lines (just braille dots / progress glyphs)
322
+ if (/^[⠁-⣿\s]+$/.test(line))
323
+ continue;
324
+ // Skip very short lines that are likely artifacts
325
+ if (line.length < 2 && !/[A-Za-z0-9]/.test(line))
326
+ continue;
327
+ this.streamBuffer.push(line);
328
+ const step = this.createStep('assistant', line);
329
+ trajectory.push(step);
330
+ onProgress?.(step);
331
+ }
332
+ }
333
+ /**
334
+ * On stream end: emit a consolidated `response` step containing the full
335
+ * clean output. Streaming gave the user real-time visibility; this final
336
+ * step gives the judge a single coherent answer to grade against.
337
+ */
338
+ onBeforeStreamEnd(trajectory, onProgress) {
339
+ if (this.streamBuffer.length > 0) {
340
+ const finalText = this.streamBuffer.join('\n').trim();
341
+ this.streamBuffer = [];
342
+ if (finalText) {
343
+ const step = this.createStep('response', finalText);
344
+ trajectory.push(step);
345
+ onProgress?.(step);
346
+ }
347
+ }
348
+ }
349
+ /**
350
+ * Parse final subprocess output
351
+ */
352
+ parseResponse(data) {
353
+ const steps = [];
354
+ if (this.config.outputParser === 'json') {
355
+ // Try to parse as JSON
356
+ try {
357
+ const parsed = JSON.parse(data.stdout);
358
+ return this.parseJsonOutput(parsed);
359
+ }
360
+ catch {
361
+ // Fall back to text parsing
362
+ this.debug('Failed to parse JSON output, falling back to text');
363
+ }
364
+ }
365
+ // Text parsing - treat entire output as response (only on success)
366
+ if (data.stdout.trim() && data.exitCode === 0) {
367
+ steps.push(this.createStep('response', data.stdout.trim()));
368
+ }
369
+ // Add error if non-zero exit code
370
+ if (data.exitCode !== 0) {
371
+ const errorContent = data.stderr.trim()
372
+ ? `Error: Process exited with code ${data.exitCode}. ${data.stderr.trim()}`
373
+ : data.stdout.trim()
374
+ ? `Error: Process exited with code ${data.exitCode}. stdout: ${data.stdout.trim()}`
375
+ : `Error: Process exited with code ${data.exitCode} (no output)`;
376
+ steps.push(this.createStep('tool_result', errorContent, {
377
+ status: ToolCallStatus.FAILURE,
378
+ }));
379
+ }
380
+ return steps;
381
+ }
382
+ /**
383
+ * Parse JSON output into trajectory steps
384
+ */
385
+ parseJsonOutput(data) {
386
+ const steps = [];
387
+ if (data.thinking) {
388
+ steps.push(this.createStep('thinking', data.thinking));
389
+ }
390
+ if (data.steps && Array.isArray(data.steps)) {
391
+ for (const step of data.steps) {
392
+ steps.push(this.createStep(step.type || 'assistant', step.content, {
393
+ toolName: step.toolName,
394
+ toolArgs: step.toolArgs,
395
+ }));
396
+ }
397
+ }
398
+ if (data.response || data.answer || data.content) {
399
+ steps.push(this.createStep('response', data.response || data.answer || data.content));
400
+ }
401
+ return steps;
402
+ }
403
+ /**
404
+ * Health check - verify command exists
405
+ */
406
+ async healthCheck(endpoint, auth) {
407
+ const command = endpoint || this.config.command;
408
+ if (!command)
409
+ return false;
410
+ return new Promise((resolve) => {
411
+ // shell: false to avoid metacharacter expansion on the command name.
412
+ // `which` itself is invoked from PATH; a malicious endpoint string
413
+ // (e.g. `kiro-cli; rm -rf ~`) would have been evaluated under shell:
414
+ // true, but here it's passed as a literal argv slot to `which` which
415
+ // will simply return non-zero for a name that doesn't exist on PATH.
416
+ const proc = spawn('which', [command], { shell: false });
417
+ proc.on('close', (code) => resolve(code === 0));
418
+ proc.on('error', () => resolve(false));
419
+ });
420
+ }
421
+ }
422
+ /**
423
+ * Default instance for convenience
424
+ */
425
+ export const subprocessConnector = new SubprocessConnector();
426
+ //# sourceMappingURL=SubprocessConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubprocessConnector.js","sourceRoot":"","sources":["../../../../../services/connectors/subprocess/SubprocessConnector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAWzE;;GAEG;AACH,MAAM,yBAAyB,GAAqB;IAClD,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,SAAS,EAAE,OAAO;IAClB,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM,EAAE,YAAY;CAC9B,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAcpD,YAAY,MAAkC;QAC5C,KAAK,EAAE,CAAC;QAdD,SAAI,GAAsB,YAAY,CAAC;QAC9B,SAAI,GAAW,kBAAkB,CAAC;QAC3C,sBAAiB,GAAG,IAAI,CAAC;QAElC;;;;WAIG;QACM,iBAAY,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAyQ/C;kFAC0E;QAClE,iBAAY,GAAa,EAAE,CAAC;QArQlC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,yBAAyB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAyB;QACpC,6CAA6C;QAC7C,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAE5C,2BAA2B;QAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO;iBACxC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;iBACxC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,GAAG,aAAa,UAAU,iBAAiB,MAAM,EAAE,CAAC;QAC5D,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,QAAgB,EAAE,2CAA2C;IAC7D,OAAyB,EACzB,IAAmB,EACnB,UAAsC,EACtC,UAAsC;QAEtC,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAEtD,kEAAkE;QAClE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,6EAA6E;QAC7E,0EAA0E;QAC1E,2EAA2E;QAC3E,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAA8B,CAAC;QACjF,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC,OAAiB,CAAC;QAC3F,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,IAAgB,CAAC;QACpF,IAAI,WAAW,CAAC,GAAG,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAI,WAAW,CAAC,GAA8B,EAAE,CAAC;QACpI,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC,SAAgB,CAAC;QAC9F,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC,YAAmB,CAAC;QACvG,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC,OAAiB,CAAC;QAC3F,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,UAAoB,CAAC;QAEpG,MAAM,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACpC,sEAAsE;QACtE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE5D,gFAAgF;QAChF,MAAM,KAAK,GAAG,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAE7B,+BAA+B;QAC/B,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,GAAG,GAAG;YACV,GAAG,OAAO,CAAC,GAAG;YACd,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAC1B,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;YAClB,yEAAyE;YACzE,wEAAwE;YACxE,uEAAuE;YACvE,6DAA6D;YAC7D,uEAAuE;YACvE,mEAAmE;YACnE,yBAAyB;YACzB,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAC7B,iBAAiB,EAAE,KAAK;SACzB,CAAC;QAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,UAAU,GAAqB,EAAE,CAAC;YACxC,MAAM,SAAS,GAA6D,EAAE,CAAC;YAC/E,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,kEAAkE;YAClE,EAAE;YACF,mEAAmE;YACnE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,mEAAmE;YACnE,sEAAsE;YACtE,6CAA6C;YAC7C,EAAE;YACF,+DAA+D;YAC/D,sEAAsE;YACtE,uEAAuE;YACvE,oEAAoE;YACpE,qEAAqE;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK;gBAC/C,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC;gBAClB,CAAC,CAAC,IAAI,CAAC;YAET,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE;gBACrC,GAAG;gBACH,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBAC3B,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAE9C,cAAc;YACd,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAC3E,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAExB,+CAA+C;YAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC7B,CAAC;YAED,gBAAgB;YAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC;gBAChB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACvE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAE9C,kDAAkD;gBAClD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;oBAC7C,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,iBAAiB;YACjB,EAAE;YACF,uEAAuE;YACvE,gEAAgE;YAChE,sEAAsE;YACtE,wEAAwE;YACxE,kDAAkD;YAClD,EAAE;YACF,yEAAyE;YACzE,mEAAmE;YACnE,kEAAkE;YAClE,oEAAoE;YACpE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC;gBAChB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACvE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAE9C,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;oBAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;gBAChD,IAAI,CAAC,KAAK,CAAC,2BAA2B,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACjE,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBAEf,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,8DAA8D;oBAC9D,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;oBAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAED,gEAAgE;gBAChE,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;oBAC7C,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBAE/C,iDAAiD;oBACjD,IAAI,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE;4BAChC,CAAC,CAAC,mCAAmC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;4BAC7D,CAAC,CAAC,mCAAmC,IAAI,EAAE,CAAC;wBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,EAAE;4BAC7D,MAAM,EAAE,cAAc,CAAC,OAAO;yBAC/B,CAAC,CAAC;wBACH,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC3B,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBAED,qBAAqB;gBACrB,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,WAAW;oBAC9D,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAE3D,qCAAqC;gBACrC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;oBAC7C,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtD,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,8BAA8B,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC5E,OAAO,CAAC;oBACN,UAAU,EAAE,eAAe;oBAC3B,KAAK;oBACL,SAAS,EAAE,SAAS;oBACpB,QAAQ,EAAE;wBACR,OAAO;wBACP,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,MAAM,IAAI,SAAS;wBAC3B,GAAG,IAAI,CAAC,mBAAmB,EAAE;qBAC9B;iBACF,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,gBAAgB;YAChB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;gBAChC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1C,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBAEf,0DAA0D;gBAC1D,IAAI,QAAQ,GAAG,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrC,QAAQ,GAAG,YAAY,OAAO,2CAA2C,CAAC;oBAC1E,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,qBAAqB,CAAC,CAAC;gBACtF,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5C,QAAQ,GAAG,gCAAgC,OAAO,4BAA4B,CAAC;oBAC/E,OAAO,CAAC,KAAK,CAAC,sDAAsD,OAAO,GAAG,CAAC,CAAC;gBAClF,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3C,QAAQ,GAAG,gCAAgC,OAAO,qCAAqC,CAAC;oBACxF,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACtE,CAAC;gBAED,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC1D,CAAC;IAMD;;;;;;;OAOG;IACO,gBAAgB,CACxB,MAAc,EACd,WAA6B,EAC7B,WAAuC;QAEvC,kDAAkD;IACpD,CAAC;IAED;;;;OAIG;IACO,mBAAmB;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;;;;OAUG;IACO,oBAAoB,CAC5B,KAAa,EACb,UAA4B,EAC5B,UAAsC;QAEtC,oEAAoE;QACpE,MAAM,QAAQ,GAAG,KAAK;aACnB,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAG,cAAc;aAChE,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAY,MAAM;aACxD,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAqB,sBAAsB;aACxE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAA6B,qBAAqB;QAE1E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,4DAA4D;YAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,gEAAgE;YAChE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtC,kDAAkD;YAClD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACO,iBAAiB,CACzB,UAA4B,EAC5B,UAAsC;QAEtC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBACpD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAA0D;QACtE,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACxC,uBAAuB;YACvB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;gBAC5B,IAAI,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACrC,CAAC,CAAC,mCAAmC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;gBAC3E,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;oBAClB,CAAC,CAAC,mCAAmC,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;oBACnF,CAAC,CAAC,mCAAmC,IAAI,CAAC,QAAQ,cAAc,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,EAAE;gBACtD,MAAM,EAAE,cAAc,CAAC,OAAO;aAC/B,CAAC,CAAC,CAAC;QACN,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,IAAS;QACjC,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE;oBACjE,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,IAAmB;QACrD,MAAM,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,qEAAqE;YACrE,mEAAmE;YACnE,qEAAqE;YACrE,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}