@opensearch-project/agent-health 0.3.0 → 0.5.2

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 (518) hide show
  1. package/README.md +77 -6
  2. package/cli/dist/index.js +10072 -4502
  3. package/deployment/cloudformation/agent-health-observability.yaml +762 -0
  4. package/dist/assets/index-CCQRDlO0.js +243 -0
  5. package/dist/assets/index-CNHQVbcj.css +1 -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 +431 -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 +390 -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 +577 -0
  22. package/docs/SKILLS.md +264 -0
  23. package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
  24. package/docs/blogs/getting-started-blog.md +608 -0
  25. package/docs/diagrams/Agent-health.excalidraw +5656 -0
  26. package/docs/diagrams/architecture.png +0 -0
  27. package/docs/plans/field-redesign.md +468 -0
  28. package/docs/rfcs/001-coding-agent-analytics.md +374 -0
  29. package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
  30. package/docs/rfcs/003-remote-aggregation.md +146 -0
  31. package/docs/rfcs/004-test-sdk-v2.md +599 -0
  32. package/docs/skills/AGENT_HEALTH.md +598 -0
  33. package/docs/skills/AGENT_PROFILE.md +191 -0
  34. package/docs/skills/add-connector/SKILL.md +68 -0
  35. package/docs/skills/agent-health-profile/SKILL.md +40 -0
  36. package/docs/skills/config-auth/SKILL.md +194 -0
  37. package/docs/skills/config-auth/evals/evals.json +35 -0
  38. package/docs/skills/create-pr/SKILL.md +73 -0
  39. package/docs/skills/instrument-otel/SKILL.md +84 -0
  40. package/docs/skills/write-test/SKILL.md +124 -0
  41. package/docs/ui prd.md +376 -0
  42. package/examples/README.md +53 -0
  43. package/examples/config/agent-health.config.example.ts +155 -0
  44. package/examples/connectors/echo-connector.ts +131 -0
  45. package/examples/eval-files/demo.eval.js +128 -0
  46. package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
  47. package/examples/pi-profiling/README.md +77 -0
  48. package/examples/pi-profiling/agent-health-profile.ts +417 -0
  49. package/lib/dist/lib/agentUtils.d.ts +29 -0
  50. package/lib/dist/lib/agentUtils.d.ts.map +1 -0
  51. package/lib/dist/lib/agentUtils.js +43 -0
  52. package/lib/dist/lib/agentUtils.js.map +1 -0
  53. package/lib/dist/lib/benchmarkExport.d.ts +14 -0
  54. package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
  55. package/lib/dist/lib/benchmarkExport.js +41 -0
  56. package/lib/dist/lib/benchmarkExport.js.map +1 -0
  57. package/lib/dist/lib/benchmarkVersionUtils.d.ts +37 -0
  58. package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
  59. package/lib/dist/lib/benchmarkVersionUtils.js +68 -0
  60. package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
  61. package/lib/dist/lib/config/defineConfig.d.ts +27 -0
  62. package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
  63. package/lib/dist/lib/config/defineConfig.js +28 -0
  64. package/lib/dist/lib/config/defineConfig.js.map +1 -0
  65. package/lib/dist/lib/config/index.d.ts +9 -0
  66. package/lib/dist/lib/config/index.d.ts.map +1 -0
  67. package/lib/dist/lib/config/index.js +8 -0
  68. package/lib/dist/lib/config/index.js.map +1 -0
  69. package/lib/dist/lib/config/loader.d.ts +39 -0
  70. package/lib/dist/lib/config/loader.d.ts.map +1 -0
  71. package/lib/dist/lib/config/loader.js +258 -0
  72. package/lib/dist/lib/config/loader.js.map +1 -0
  73. package/lib/dist/lib/config/statePaths.d.ts +61 -0
  74. package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
  75. package/lib/dist/lib/config/statePaths.js +188 -0
  76. package/lib/dist/lib/config/statePaths.js.map +1 -0
  77. package/lib/dist/lib/config/types.d.ts +231 -0
  78. package/lib/dist/lib/config/types.d.ts.map +1 -0
  79. package/lib/dist/lib/config/types.js +6 -0
  80. package/lib/dist/lib/config/types.js.map +1 -0
  81. package/lib/dist/lib/config.d.ts +39 -0
  82. package/lib/dist/lib/config.d.ts.map +1 -0
  83. package/lib/dist/lib/config.js +118 -0
  84. package/lib/dist/lib/config.js.map +1 -0
  85. package/lib/dist/lib/constants.d.ts +70 -0
  86. package/lib/dist/lib/constants.d.ts.map +1 -0
  87. package/lib/dist/lib/constants.js +365 -0
  88. package/lib/dist/lib/constants.js.map +1 -0
  89. package/lib/dist/lib/contextUtilization.d.ts +23 -0
  90. package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
  91. package/lib/dist/lib/contextUtilization.js +72 -0
  92. package/lib/dist/lib/contextUtilization.js.map +1 -0
  93. package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
  94. package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
  95. package/lib/dist/lib/dashboardMetrics.js +242 -0
  96. package/lib/dist/lib/dashboardMetrics.js.map +1 -0
  97. package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
  98. package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
  99. package/lib/dist/lib/dataSourceConfig.js +166 -0
  100. package/lib/dist/lib/dataSourceConfig.js.map +1 -0
  101. package/lib/dist/lib/debug.d.ts +26 -0
  102. package/lib/dist/lib/debug.d.ts.map +1 -0
  103. package/lib/dist/lib/debug.js +132 -0
  104. package/lib/dist/lib/debug.js.map +1 -0
  105. package/lib/dist/lib/diagnostics.d.ts +28 -0
  106. package/lib/dist/lib/diagnostics.d.ts.map +1 -0
  107. package/lib/dist/lib/diagnostics.js +65 -0
  108. package/lib/dist/lib/diagnostics.js.map +1 -0
  109. package/lib/dist/lib/envCompat.d.ts +27 -0
  110. package/lib/dist/lib/envCompat.d.ts.map +1 -0
  111. package/lib/dist/lib/envCompat.js +73 -0
  112. package/lib/dist/lib/envCompat.js.map +1 -0
  113. package/lib/dist/lib/findPackageRoot.d.ts +7 -0
  114. package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
  115. package/lib/dist/lib/findPackageRoot.js +57 -0
  116. package/lib/dist/lib/findPackageRoot.js.map +1 -0
  117. package/lib/dist/lib/hooks.d.ts +36 -0
  118. package/lib/dist/lib/hooks.d.ts.map +1 -0
  119. package/lib/dist/lib/hooks.js +112 -0
  120. package/lib/dist/lib/hooks.js.map +1 -0
  121. package/lib/dist/lib/index.d.ts +47 -0
  122. package/lib/dist/lib/index.d.ts.map +1 -0
  123. package/lib/dist/lib/index.js +62 -0
  124. package/lib/dist/lib/index.js.map +1 -0
  125. package/lib/dist/lib/labels.d.ts +90 -0
  126. package/lib/dist/lib/labels.d.ts.map +1 -0
  127. package/lib/dist/lib/labels.js +158 -0
  128. package/lib/dist/lib/labels.js.map +1 -0
  129. package/lib/dist/lib/markdown.d.ts +16 -0
  130. package/lib/dist/lib/markdown.d.ts.map +1 -0
  131. package/lib/dist/lib/markdown.js +42 -0
  132. package/lib/dist/lib/markdown.js.map +1 -0
  133. package/lib/dist/lib/matchers/expect.d.ts +3 -0
  134. package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
  135. package/lib/dist/lib/matchers/expect.js +225 -0
  136. package/lib/dist/lib/matchers/expect.js.map +1 -0
  137. package/lib/dist/lib/matchers/index.d.ts +8 -0
  138. package/lib/dist/lib/matchers/index.d.ts.map +1 -0
  139. package/lib/dist/lib/matchers/index.js +9 -0
  140. package/lib/dist/lib/matchers/index.js.map +1 -0
  141. package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
  142. package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
  143. package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
  144. package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
  145. package/lib/dist/lib/matchers/session.d.ts +39 -0
  146. package/lib/dist/lib/matchers/session.d.ts.map +1 -0
  147. package/lib/dist/lib/matchers/session.js +116 -0
  148. package/lib/dist/lib/matchers/session.js.map +1 -0
  149. package/lib/dist/lib/matchers/traces.d.ts +55 -0
  150. package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
  151. package/lib/dist/lib/matchers/traces.js +116 -0
  152. package/lib/dist/lib/matchers/traces.js.map +1 -0
  153. package/lib/dist/lib/matchers/types.d.ts +75 -0
  154. package/lib/dist/lib/matchers/types.d.ts.map +1 -0
  155. package/lib/dist/lib/matchers/types.js +6 -0
  156. package/lib/dist/lib/matchers/types.js.map +1 -0
  157. package/lib/dist/lib/packagePaths.d.ts +29 -0
  158. package/lib/dist/lib/packagePaths.d.ts.map +1 -0
  159. package/lib/dist/lib/packagePaths.js +63 -0
  160. package/lib/dist/lib/packagePaths.js.map +1 -0
  161. package/lib/dist/lib/performance.d.ts +51 -0
  162. package/lib/dist/lib/performance.d.ts.map +1 -0
  163. package/lib/dist/lib/performance.js +159 -0
  164. package/lib/dist/lib/performance.js.map +1 -0
  165. package/lib/dist/lib/portConfig.d.ts +29 -0
  166. package/lib/dist/lib/portConfig.d.ts.map +1 -0
  167. package/lib/dist/lib/portConfig.js +64 -0
  168. package/lib/dist/lib/portConfig.js.map +1 -0
  169. package/lib/dist/lib/preferences.d.ts +63 -0
  170. package/lib/dist/lib/preferences.d.ts.map +1 -0
  171. package/lib/dist/lib/preferences.js +117 -0
  172. package/lib/dist/lib/preferences.js.map +1 -0
  173. package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
  174. package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
  175. package/lib/dist/lib/resolveAgentModel.js +37 -0
  176. package/lib/dist/lib/resolveAgentModel.js.map +1 -0
  177. package/lib/dist/lib/runStats.d.ts +92 -0
  178. package/lib/dist/lib/runStats.d.ts.map +1 -0
  179. package/lib/dist/lib/runStats.js +160 -0
  180. package/lib/dist/lib/runStats.js.map +1 -0
  181. package/lib/dist/lib/telemetry/constants.d.ts +60 -0
  182. package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
  183. package/lib/dist/lib/telemetry/constants.js +87 -0
  184. package/lib/dist/lib/telemetry/constants.js.map +1 -0
  185. package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
  186. package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
  187. package/lib/dist/lib/telemetry/evalSpans.js +254 -0
  188. package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
  189. package/lib/dist/lib/telemetry/index.d.ts +11 -0
  190. package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
  191. package/lib/dist/lib/telemetry/index.js +15 -0
  192. package/lib/dist/lib/telemetry/index.js.map +1 -0
  193. package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
  194. package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
  195. package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
  196. package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
  197. package/lib/dist/lib/telemetry/provider.d.ts +55 -0
  198. package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
  199. package/lib/dist/lib/telemetry/provider.js +140 -0
  200. package/lib/dist/lib/telemetry/provider.js.map +1 -0
  201. package/lib/dist/lib/testCaseLabels.d.ts +34 -0
  202. package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
  203. package/lib/dist/lib/testCaseLabels.js +88 -0
  204. package/lib/dist/lib/testCaseLabels.js.map +1 -0
  205. package/lib/dist/lib/testCaseValidation.d.ts +140 -0
  206. package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
  207. package/lib/dist/lib/testCaseValidation.js +162 -0
  208. package/lib/dist/lib/testCaseValidation.js.map +1 -0
  209. package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
  210. package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
  211. package/lib/dist/lib/testCases/agentFixture.js +43 -0
  212. package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
  213. package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
  214. package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
  215. package/lib/dist/lib/testCases/authoringSurface.js +54 -0
  216. package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
  217. package/lib/dist/lib/testCases/codemod.d.ts +13 -0
  218. package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
  219. package/lib/dist/lib/testCases/codemod.js +169 -0
  220. package/lib/dist/lib/testCases/codemod.js.map +1 -0
  221. package/lib/dist/lib/testCases/define.d.ts +114 -0
  222. package/lib/dist/lib/testCases/define.d.ts.map +1 -0
  223. package/lib/dist/lib/testCases/define.js +253 -0
  224. package/lib/dist/lib/testCases/define.js.map +1 -0
  225. package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
  226. package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
  227. package/lib/dist/lib/testCases/evaluators.js +105 -0
  228. package/lib/dist/lib/testCases/evaluators.js.map +1 -0
  229. package/lib/dist/lib/testCases/index.d.ts +14 -0
  230. package/lib/dist/lib/testCases/index.d.ts.map +1 -0
  231. package/lib/dist/lib/testCases/index.js +12 -0
  232. package/lib/dist/lib/testCases/index.js.map +1 -0
  233. package/lib/dist/lib/testCases/judge.d.ts +165 -0
  234. package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
  235. package/lib/dist/lib/testCases/judge.js +359 -0
  236. package/lib/dist/lib/testCases/judge.js.map +1 -0
  237. package/lib/dist/lib/testCases/loader.d.ts +26 -0
  238. package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
  239. package/lib/dist/lib/testCases/loader.js +149 -0
  240. package/lib/dist/lib/testCases/loader.js.map +1 -0
  241. package/lib/dist/lib/testCases/types.d.ts +242 -0
  242. package/lib/dist/lib/testCases/types.d.ts.map +1 -0
  243. package/lib/dist/lib/testCases/types.js +6 -0
  244. package/lib/dist/lib/testCases/types.js.map +1 -0
  245. package/lib/dist/lib/theme.d.ts +6 -0
  246. package/lib/dist/lib/theme.d.ts.map +1 -0
  247. package/lib/dist/lib/theme.js +36 -0
  248. package/lib/dist/lib/theme.js.map +1 -0
  249. package/lib/dist/lib/uiTelemetry.d.ts +7 -0
  250. package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
  251. package/lib/dist/lib/uiTelemetry.js +25 -0
  252. package/lib/dist/lib/uiTelemetry.js.map +1 -0
  253. package/lib/dist/lib/utils.d.ts +96 -0
  254. package/lib/dist/lib/utils.d.ts.map +1 -0
  255. package/lib/dist/lib/utils.js +232 -0
  256. package/lib/dist/lib/utils.js.map +1 -0
  257. package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
  258. package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
  259. package/lib/dist/lib/workflow/consolidate.js +33 -0
  260. package/lib/dist/lib/workflow/consolidate.js.map +1 -0
  261. package/lib/dist/lib/workflow/index.d.ts +13 -0
  262. package/lib/dist/lib/workflow/index.d.ts.map +1 -0
  263. package/lib/dist/lib/workflow/index.js +12 -0
  264. package/lib/dist/lib/workflow/index.js.map +1 -0
  265. package/lib/dist/lib/workflow/ledger.d.ts +30 -0
  266. package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
  267. package/lib/dist/lib/workflow/ledger.js +41 -0
  268. package/lib/dist/lib/workflow/ledger.js.map +1 -0
  269. package/lib/dist/lib/workflow/pool.d.ts +13 -0
  270. package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
  271. package/lib/dist/lib/workflow/pool.js +44 -0
  272. package/lib/dist/lib/workflow/pool.js.map +1 -0
  273. package/lib/dist/lib/workflow/source.d.ts +22 -0
  274. package/lib/dist/lib/workflow/source.d.ts.map +1 -0
  275. package/lib/dist/lib/workflow/source.js +29 -0
  276. package/lib/dist/lib/workflow/source.js.map +1 -0
  277. package/lib/dist/lib/workflow/stepB.d.ts +71 -0
  278. package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
  279. package/lib/dist/lib/workflow/stepB.js +99 -0
  280. package/lib/dist/lib/workflow/stepB.js.map +1 -0
  281. package/lib/dist/lib/workflow/types.d.ts +86 -0
  282. package/lib/dist/lib/workflow/types.d.ts.map +1 -0
  283. package/lib/dist/lib/workflow/types.js +6 -0
  284. package/lib/dist/lib/workflow/types.js.map +1 -0
  285. package/lib/dist/lib/workflow/workflow.d.ts +119 -0
  286. package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
  287. package/lib/dist/lib/workflow/workflow.js +195 -0
  288. package/lib/dist/lib/workflow/workflow.js.map +1 -0
  289. package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
  290. package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
  291. package/lib/dist/services/agent/aguiConverter.js +449 -0
  292. package/lib/dist/services/agent/aguiConverter.js.map +1 -0
  293. package/lib/dist/services/agent/index.d.ts +10 -0
  294. package/lib/dist/services/agent/index.d.ts.map +1 -0
  295. package/lib/dist/services/agent/index.js +12 -0
  296. package/lib/dist/services/agent/index.js.map +1 -0
  297. package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
  298. package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
  299. package/lib/dist/services/agent/payloadBuilder.js +75 -0
  300. package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
  301. package/lib/dist/services/agent/sseStream.d.ts +43 -0
  302. package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
  303. package/lib/dist/services/agent/sseStream.js +223 -0
  304. package/lib/dist/services/agent/sseStream.js.map +1 -0
  305. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
  306. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
  307. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
  308. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
  309. package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
  310. package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
  311. package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
  312. package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
  313. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +116 -0
  314. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
  315. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +403 -0
  316. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
  317. package/lib/dist/services/connectors/index.d.ts +13 -0
  318. package/lib/dist/services/connectors/index.d.ts.map +1 -0
  319. package/lib/dist/services/connectors/index.js +32 -0
  320. package/lib/dist/services/connectors/index.js.map +1 -0
  321. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
  322. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
  323. package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
  324. package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
  325. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
  326. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
  327. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
  328. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
  329. package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
  330. package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
  331. package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
  332. package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
  333. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
  334. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
  335. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
  336. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
  337. package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
  338. package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
  339. package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
  340. package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
  341. package/lib/dist/services/connectors/registry.d.ts +57 -0
  342. package/lib/dist/services/connectors/registry.d.ts.map +1 -0
  343. package/lib/dist/services/connectors/registry.js +106 -0
  344. package/lib/dist/services/connectors/registry.js.map +1 -0
  345. package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
  346. package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
  347. package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
  348. package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
  349. package/lib/dist/services/connectors/server.d.ts +13 -0
  350. package/lib/dist/services/connectors/server.d.ts.map +1 -0
  351. package/lib/dist/services/connectors/server.js +34 -0
  352. package/lib/dist/services/connectors/server.js.map +1 -0
  353. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
  354. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
  355. package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
  356. package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
  357. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
  358. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
  359. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +418 -0
  360. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
  361. package/lib/dist/services/connectors/types.d.ts +213 -0
  362. package/lib/dist/services/connectors/types.d.ts.map +1 -0
  363. package/lib/dist/services/connectors/types.js +6 -0
  364. package/lib/dist/services/connectors/types.js.map +1 -0
  365. package/lib/dist/services/evaluation/bedrockJudge.d.ts +64 -0
  366. package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
  367. package/lib/dist/services/evaluation/bedrockJudge.js +167 -0
  368. package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
  369. package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
  370. package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
  371. package/lib/dist/services/evaluation/evaluatorError.js +56 -0
  372. package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
  373. package/lib/dist/services/evaluation/index.d.ts +106 -0
  374. package/lib/dist/services/evaluation/index.d.ts.map +1 -0
  375. package/lib/dist/services/evaluation/index.js +684 -0
  376. package/lib/dist/services/evaluation/index.js.map +1 -0
  377. package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
  378. package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
  379. package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
  380. package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
  381. package/lib/dist/services/opensearch/client.d.ts +26 -0
  382. package/lib/dist/services/opensearch/client.d.ts.map +1 -0
  383. package/lib/dist/services/opensearch/client.js +131 -0
  384. package/lib/dist/services/opensearch/client.js.map +1 -0
  385. package/lib/dist/services/opensearch/index.d.ts +16 -0
  386. package/lib/dist/services/opensearch/index.d.ts.map +1 -0
  387. package/lib/dist/services/opensearch/index.js +25 -0
  388. package/lib/dist/services/opensearch/index.js.map +1 -0
  389. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
  390. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
  391. package/lib/dist/services/storage/asyncBenchmarkStorage.js +429 -0
  392. package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
  393. package/lib/dist/services/storage/asyncRunStorage.d.ts +127 -0
  394. package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
  395. package/lib/dist/services/storage/asyncRunStorage.js +448 -0
  396. package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
  397. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +156 -0
  398. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
  399. package/lib/dist/services/storage/asyncTestCaseStorage.js +285 -0
  400. package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
  401. package/lib/dist/services/storage/index.d.ts +17 -0
  402. package/lib/dist/services/storage/index.d.ts.map +1 -0
  403. package/lib/dist/services/storage/index.js +20 -0
  404. package/lib/dist/services/storage/index.js.map +1 -0
  405. package/lib/dist/services/storage/migration.d.ts +54 -0
  406. package/lib/dist/services/storage/migration.d.ts.map +1 -0
  407. package/lib/dist/services/storage/migration.js +296 -0
  408. package/lib/dist/services/storage/migration.js.map +1 -0
  409. package/lib/dist/services/storage/opensearchClient.d.ts +924 -0
  410. package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
  411. package/lib/dist/services/storage/opensearchClient.js +435 -0
  412. package/lib/dist/services/storage/opensearchClient.js.map +1 -0
  413. package/lib/dist/services/traces/browserRecovery.d.ts +26 -0
  414. package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
  415. package/lib/dist/services/traces/browserRecovery.js +81 -0
  416. package/lib/dist/services/traces/browserRecovery.js.map +1 -0
  417. package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
  418. package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
  419. package/lib/dist/services/traces/categoryStyles.js +56 -0
  420. package/lib/dist/services/traces/categoryStyles.js.map +1 -0
  421. package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
  422. package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
  423. package/lib/dist/services/traces/executionOrderTransform.js +313 -0
  424. package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
  425. package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
  426. package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
  427. package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
  428. package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
  429. package/lib/dist/services/traces/flowTransform.d.ts +24 -0
  430. package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
  431. package/lib/dist/services/traces/flowTransform.js +228 -0
  432. package/lib/dist/services/traces/flowTransform.js.map +1 -0
  433. package/lib/dist/services/traces/index.d.ts +121 -0
  434. package/lib/dist/services/traces/index.d.ts.map +1 -0
  435. package/lib/dist/services/traces/index.js +255 -0
  436. package/lib/dist/services/traces/index.js.map +1 -0
  437. package/lib/dist/services/traces/intentTransform.d.ts +20 -0
  438. package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
  439. package/lib/dist/services/traces/intentTransform.js +131 -0
  440. package/lib/dist/services/traces/intentTransform.js.map +1 -0
  441. package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
  442. package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
  443. package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
  444. package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
  445. package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
  446. package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
  447. package/lib/dist/services/traces/messageExtraction.js +251 -0
  448. package/lib/dist/services/traces/messageExtraction.js.map +1 -0
  449. package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
  450. package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
  451. package/lib/dist/services/traces/spanCategorization.js +276 -0
  452. package/lib/dist/services/traces/spanCategorization.js.map +1 -0
  453. package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
  454. package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
  455. package/lib/dist/services/traces/spanPreprocessing.js +102 -0
  456. package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
  457. package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
  458. package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
  459. package/lib/dist/services/traces/spansToTrajectory.js +387 -0
  460. package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
  461. package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
  462. package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
  463. package/lib/dist/services/traces/toolSimilarity.js +203 -0
  464. package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
  465. package/lib/dist/services/traces/traceComparison.d.ts +31 -0
  466. package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
  467. package/lib/dist/services/traces/traceComparison.js +318 -0
  468. package/lib/dist/services/traces/traceComparison.js.map +1 -0
  469. package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
  470. package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
  471. package/lib/dist/services/traces/traceGrouping.js +107 -0
  472. package/lib/dist/services/traces/traceGrouping.js.map +1 -0
  473. package/lib/dist/services/traces/tracePoller.d.ts +84 -0
  474. package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
  475. package/lib/dist/services/traces/tracePoller.js +309 -0
  476. package/lib/dist/services/traces/tracePoller.js.map +1 -0
  477. package/lib/dist/services/traces/traceStats.d.ts +45 -0
  478. package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
  479. package/lib/dist/services/traces/traceStats.js +114 -0
  480. package/lib/dist/services/traces/traceStats.js.map +1 -0
  481. package/lib/dist/services/traces/traceSummary.d.ts +47 -0
  482. package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
  483. package/lib/dist/services/traces/traceSummary.js +68 -0
  484. package/lib/dist/services/traces/traceSummary.js.map +1 -0
  485. package/lib/dist/services/traces/utils.d.ts +33 -0
  486. package/lib/dist/services/traces/utils.d.ts.map +1 -0
  487. package/lib/dist/services/traces/utils.js +114 -0
  488. package/lib/dist/services/traces/utils.js.map +1 -0
  489. package/lib/dist/types/agui.d.ts +13 -0
  490. package/lib/dist/types/agui.d.ts.map +1 -0
  491. package/lib/dist/types/agui.js +16 -0
  492. package/lib/dist/types/agui.js.map +1 -0
  493. package/lib/dist/types/index.d.ts +1175 -0
  494. package/lib/dist/types/index.d.ts.map +1 -0
  495. package/lib/dist/types/index.js +12 -0
  496. package/lib/dist/types/index.js.map +1 -0
  497. package/lib/dist/types/skills.d.ts +146 -0
  498. package/lib/dist/types/skills.d.ts.map +1 -0
  499. package/lib/dist/types/skills.js +6 -0
  500. package/lib/dist/types/skills.js.map +1 -0
  501. package/observio-sample-agent/pi-package/README.md +112 -0
  502. package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
  503. package/observio-sample-agent/pi-package/package.json +17 -0
  504. package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
  505. package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
  506. package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
  507. package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
  508. package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
  509. package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
  510. package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
  511. package/package.json +64 -13
  512. package/server/dist/app.js +32651 -17637
  513. package/server/dist/index.js +29875 -14638
  514. package/tsconfig.lib.json +71 -0
  515. package/dist/assets/index-EvPLSTAS.js +0 -267
  516. package/dist/assets/index-RXasQKUs.css +0 -1
  517. package/lib/dist/config/index.js +0 -404
  518. package/lib/dist/index.js +0 -1665
@@ -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;IA6N7B;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,418 @@
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
+ AGENT_EVAL_RUN_ID: runId,
109
+ };
110
+ return new Promise((resolve, reject) => {
111
+ const trajectory = [];
112
+ const rawOutput = [];
113
+ let stdout = '';
114
+ let stderr = '';
115
+ let settled = false;
116
+ // Build final args (add input as argument if inputMode is 'arg').
117
+ //
118
+ // We spawn with `shell: false` (the default) and pass `args` as an
119
+ // array. The OS exec syscall delivers each array element as a separate
120
+ // argv slot to the child binary verbatim, with NO shell interpretation
121
+ // — so spaces, slashes, quotes, backticks, `$()`, `;`, `&`, and other
122
+ // shell metacharacters in the prompt are passed through as literal
123
+ // bytes instead of being evaluated. This is the only safe way to pass
124
+ // user-controlled prompt strings to spawn().
125
+ //
126
+ // Historical note: an earlier version used `shell: true` and a
127
+ // hand-rolled `shellQuote` that only escaped single quotes. That left
128
+ // a command-injection hole — a prompt containing `'$(rm -rf ~)'` would
129
+ // get evaluated by /bin/sh. Switching to `shell: false` removes the
130
+ // attack surface entirely; quoting is no longer the connector's job.
131
+ const finalArgs = this.config.inputMode === 'arg'
132
+ ? [...args, input]
133
+ : args;
134
+ this.debug('Spawning process...');
135
+ this.debug('Full command:', command, finalArgs.join(' '));
136
+ const proc = spawn(command, finalArgs, {
137
+ env,
138
+ cwd: this.config.workingDir,
139
+ shell: false,
140
+ });
141
+ this.debug('Process spawned, PID:', proc.pid);
142
+ // Set timeout
143
+ const timeoutId = setTimeout(() => {
144
+ if (settled)
145
+ return;
146
+ settled = true;
147
+ this.debug('TIMEOUT reached, killing process');
148
+ proc.kill('SIGTERM');
149
+ reject(new Error(`Subprocess timed out after ${this.config.timeout}ms`));
150
+ }, this.config.timeout);
151
+ // Send input via stdin if inputMode is 'stdin'
152
+ if (this.config.inputMode === 'stdin') {
153
+ this.debug('Writing input to stdin...');
154
+ proc.stdin.write(input);
155
+ proc.stdin.end();
156
+ this.debug('stdin closed');
157
+ }
158
+ // Handle stdout
159
+ proc.stdout.on('data', (data) => {
160
+ const chunk = data.toString();
161
+ this.debug('stdout received:', chunk.length, 'bytes');
162
+ this.debug('stdout preview:', chunk.substring(0, 200));
163
+ stdout += chunk;
164
+ rawOutput.push({ type: 'stdout', data: chunk, timestamp: Date.now() });
165
+ onRawEvent?.({ type: 'stdout', data: chunk });
166
+ // For streaming mode, try to parse and emit steps
167
+ if (this.config.outputParser === 'streaming') {
168
+ this.parseStreamingOutput(chunk, trajectory, onProgress);
169
+ }
170
+ });
171
+ // Handle stderr.
172
+ //
173
+ // We push stderr chunks into rawOutput (alongside stdout) so the saved
174
+ // benchmark report retains them. Without this, agents that emit
175
+ // structured tool events on stderr (e.g. kiro-cli's `[tool] Running:`
176
+ // markers) leave no audit trail in the persisted run, and the LLM judge
177
+ // is forced to grade the agent's narrative alone.
178
+ //
179
+ // We also delegate streaming-mode subclasses a hook (`parseStderrChunk`)
180
+ // so they can convert stderr-borne events into trajectory steps in
181
+ // real time. The default implementation is a no-op for connectors
182
+ // (claude-code, plain text CLIs) that don't carry events on stderr.
183
+ proc.stderr.on('data', (data) => {
184
+ const chunk = data.toString();
185
+ this.debug('stderr received:', chunk.length, 'bytes');
186
+ this.debug('stderr:', chunk);
187
+ stderr += chunk;
188
+ rawOutput.push({ type: 'stderr', data: chunk, timestamp: Date.now() });
189
+ onRawEvent?.({ type: 'stderr', data: chunk });
190
+ if (this.config.outputParser === 'streaming') {
191
+ this.parseStderrChunk(chunk, trajectory, onProgress);
192
+ }
193
+ });
194
+ // Handle process exit
195
+ proc.on('close', (code, signal) => {
196
+ this.debug('Process closed with code:', code, 'signal:', signal);
197
+ clearTimeout(timeoutId);
198
+ if (settled)
199
+ return;
200
+ settled = true;
201
+ if (code !== 0) {
202
+ // Non-zero exit code - create error response but don't reject
203
+ this.debug('Non-zero exit code:', code);
204
+ this.error(`Process exited with code ${code}`);
205
+ this.error('stderr:', stderr);
206
+ }
207
+ // Flush subclass buffers before finalizing streaming trajectory
208
+ if (this.config.outputParser === 'streaming') {
209
+ this.onBeforeStreamEnd(trajectory, onProgress);
210
+ // Surface error when streaming produced no steps
211
+ if (code !== 0 && trajectory.length === 0) {
212
+ const errorContent = stderr.trim()
213
+ ? `Error: Process exited with code ${code}. ${stderr.trim()}`
214
+ : `Error: Process exited with code ${code}`;
215
+ const errorStep = this.createStep('tool_result', errorContent, {
216
+ status: ToolCallStatus.FAILURE,
217
+ });
218
+ trajectory.push(errorStep);
219
+ onProgress?.(errorStep);
220
+ }
221
+ }
222
+ // Parse final output
223
+ const finalTrajectory = this.config.outputParser === 'streaming'
224
+ ? trajectory
225
+ : this.parseResponse({ stdout, stderr, exitCode: code });
226
+ // Emit steps if not already streamed
227
+ if (this.config.outputParser !== 'streaming') {
228
+ finalTrajectory.forEach(step => onProgress?.(step));
229
+ }
230
+ this.debug('Resolving with trajectory of', finalTrajectory.length, 'steps');
231
+ resolve({
232
+ trajectory: finalTrajectory,
233
+ runId,
234
+ rawEvents: rawOutput,
235
+ metadata: {
236
+ command,
237
+ args: finalArgs,
238
+ exitCode: code,
239
+ stderr: stderr || undefined,
240
+ ...this.extraResultMetadata(),
241
+ },
242
+ });
243
+ });
244
+ // Handle errors
245
+ proc.on('error', (error) => {
246
+ this.debug('ERROR event:', error.message);
247
+ clearTimeout(timeoutId);
248
+ if (settled)
249
+ return;
250
+ settled = true;
251
+ // Provide more helpful error messages for common failures
252
+ let errorMsg = `Failed to spawn subprocess: ${error.message}`;
253
+ if (error.message.includes('ENOENT')) {
254
+ errorMsg = `Command '${command}' not found. Is it installed and in PATH?`;
255
+ console.error(`[Subprocess] ENOENT error - command '${command}' not found in PATH`);
256
+ }
257
+ else if (error.message.includes('EACCES')) {
258
+ errorMsg = `Permission denied executing '${command}'. Check file permissions.`;
259
+ console.error(`[Subprocess] EACCES error - permission denied for '${command}'`);
260
+ }
261
+ else if (error.message.includes('EPERM')) {
262
+ errorMsg = `Operation not permitted for '${command}'. May require elevated privileges.`;
263
+ console.error(`[Subprocess] EPERM error - operation not permitted`);
264
+ }
265
+ reject(new Error(errorMsg));
266
+ });
267
+ });
268
+ this.debug('========== execute() COMPLETED ==========');
269
+ }
270
+ /**
271
+ * Parse a stderr chunk in streaming mode. Default is a no-op.
272
+ *
273
+ * Override in subclasses for CLIs that carry tool-event markers on stderr.
274
+ * Implementations should buffer partial lines (chunks rarely align with
275
+ * line boundaries) and emit steps via `onProgress` AND push them onto
276
+ * `trajectory` so they appear in the final response.
277
+ */
278
+ parseStderrChunk(_chunk, _trajectory, _onProgress) {
279
+ // No-op by default; KiroConnector overrides this.
280
+ }
281
+ /**
282
+ * Subclass hook: extra protocol-specific fields to merge into the
283
+ * connector result `metadata`. Default: none. Claude Code overrides this to
284
+ * surface the captured `sessionId` (Strategy D trace correlation).
285
+ */
286
+ extraResultMetadata() {
287
+ return {};
288
+ }
289
+ /**
290
+ * Parse streaming output and emit steps in real-time.
291
+ *
292
+ * For plain-text CLIs (Kiro etc.) we:
293
+ * 1. strip ANSI escape codes (color, cursor moves, spinner frames)
294
+ * 2. drop lines that are empty / pure control characters / spinner glyphs
295
+ * 3. emit each surviving line as an `assistant` step immediately
296
+ * 4. buffer the cleaned text so `onBeforeStreamEnd()` can emit a final
297
+ * `response` step containing the full coherent answer (good for the
298
+ * judge) — without losing the live stream.
299
+ */
300
+ parseStreamingOutput(chunk, trajectory, onProgress) {
301
+ // Strip ANSI: CSI sequences (\x1b[...m, cursor moves, etc.) and OSC
302
+ const stripped = chunk
303
+ .replace(/\x1b\][^\x07\x1b]*(\x07|\x1b\\)/g, '') // OSC ... BEL
304
+ .replace(/\x1b\[[0-9;?]*[A-Za-z]/g, '') // CSI
305
+ .replace(/\x1b[=>NOP\\]/g, '') // single-char escapes
306
+ .replace(/\r/g, '\n'); // normalize CR to NL
307
+ const lines = stripped.split('\n');
308
+ for (const raw of lines) {
309
+ // Drop control chars, BEL, spinner braille glyphs, and trim
310
+ const line = raw.replace(/[\x00-\x08\x0b-\x1f\x7f]/g, '').trim();
311
+ if (!line)
312
+ continue;
313
+ // Skip pure-spinner lines (just braille dots / progress glyphs)
314
+ if (/^[⠁-⣿\s]+$/.test(line))
315
+ continue;
316
+ // Skip very short lines that are likely artifacts
317
+ if (line.length < 2 && !/[A-Za-z0-9]/.test(line))
318
+ continue;
319
+ this.streamBuffer.push(line);
320
+ const step = this.createStep('assistant', line);
321
+ trajectory.push(step);
322
+ onProgress?.(step);
323
+ }
324
+ }
325
+ /**
326
+ * On stream end: emit a consolidated `response` step containing the full
327
+ * clean output. Streaming gave the user real-time visibility; this final
328
+ * step gives the judge a single coherent answer to grade against.
329
+ */
330
+ onBeforeStreamEnd(trajectory, onProgress) {
331
+ if (this.streamBuffer.length > 0) {
332
+ const finalText = this.streamBuffer.join('\n').trim();
333
+ this.streamBuffer = [];
334
+ if (finalText) {
335
+ const step = this.createStep('response', finalText);
336
+ trajectory.push(step);
337
+ onProgress?.(step);
338
+ }
339
+ }
340
+ }
341
+ /**
342
+ * Parse final subprocess output
343
+ */
344
+ parseResponse(data) {
345
+ const steps = [];
346
+ if (this.config.outputParser === 'json') {
347
+ // Try to parse as JSON
348
+ try {
349
+ const parsed = JSON.parse(data.stdout);
350
+ return this.parseJsonOutput(parsed);
351
+ }
352
+ catch {
353
+ // Fall back to text parsing
354
+ this.debug('Failed to parse JSON output, falling back to text');
355
+ }
356
+ }
357
+ // Text parsing - treat entire output as response (only on success)
358
+ if (data.stdout.trim() && data.exitCode === 0) {
359
+ steps.push(this.createStep('response', data.stdout.trim()));
360
+ }
361
+ // Add error if non-zero exit code
362
+ if (data.exitCode !== 0) {
363
+ const errorContent = data.stderr.trim()
364
+ ? `Error: Process exited with code ${data.exitCode}. ${data.stderr.trim()}`
365
+ : data.stdout.trim()
366
+ ? `Error: Process exited with code ${data.exitCode}. stdout: ${data.stdout.trim()}`
367
+ : `Error: Process exited with code ${data.exitCode} (no output)`;
368
+ steps.push(this.createStep('tool_result', errorContent, {
369
+ status: ToolCallStatus.FAILURE,
370
+ }));
371
+ }
372
+ return steps;
373
+ }
374
+ /**
375
+ * Parse JSON output into trajectory steps
376
+ */
377
+ parseJsonOutput(data) {
378
+ const steps = [];
379
+ if (data.thinking) {
380
+ steps.push(this.createStep('thinking', data.thinking));
381
+ }
382
+ if (data.steps && Array.isArray(data.steps)) {
383
+ for (const step of data.steps) {
384
+ steps.push(this.createStep(step.type || 'assistant', step.content, {
385
+ toolName: step.toolName,
386
+ toolArgs: step.toolArgs,
387
+ }));
388
+ }
389
+ }
390
+ if (data.response || data.answer || data.content) {
391
+ steps.push(this.createStep('response', data.response || data.answer || data.content));
392
+ }
393
+ return steps;
394
+ }
395
+ /**
396
+ * Health check - verify command exists
397
+ */
398
+ async healthCheck(endpoint, auth) {
399
+ const command = endpoint || this.config.command;
400
+ if (!command)
401
+ return false;
402
+ return new Promise((resolve) => {
403
+ // shell: false to avoid metacharacter expansion on the command name.
404
+ // `which` itself is invoked from PATH; a malicious endpoint string
405
+ // (e.g. `kiro-cli; rm -rf ~`) would have been evaluated under shell:
406
+ // true, but here it's passed as a literal argv slot to `which` which
407
+ // will simply return non-zero for a name that doesn't exist on PATH.
408
+ const proc = spawn('which', [command], { shell: false });
409
+ proc.on('close', (code) => resolve(code === 0));
410
+ proc.on('error', () => resolve(false));
411
+ });
412
+ }
413
+ }
414
+ /**
415
+ * Default instance for convenience
416
+ */
417
+ export const subprocessConnector = new SubprocessConnector();
418
+ //# sourceMappingURL=SubprocessConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubprocessConnector.js","sourceRoot":"","sources":["../../../../../services/connectors/subprocess/SubprocessConnector.ts"],"names":[],"mappings":"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"}