@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 @@
1
+ {"version":3,"file":"benchmarkVersionUtils.js","sourceRoot":"","sources":["../../benchmarkVersionUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * defineConfig Helper
3
+ * Provides type safety for agent-health.config.ts files
4
+ */
5
+ import type { UserConfig } from './types.js';
6
+ /**
7
+ * Define configuration with full type safety
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // agent-health.config.ts
12
+ * import { defineConfig } from '@opensearch-project/agent-health';
13
+ *
14
+ * export default defineConfig({
15
+ * agents: [
16
+ * {
17
+ * key: 'my-agent',
18
+ * name: 'My Agent',
19
+ * endpoint: 'https://api.example.com/chat',
20
+ * connectorType: 'rest',
21
+ * },
22
+ * ],
23
+ * });
24
+ * ```
25
+ */
26
+ export declare function defineConfig(config: UserConfig): UserConfig;
27
+ //# sourceMappingURL=defineConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineConfig.d.ts","sourceRoot":"","sources":["../../../config/defineConfig.ts"],"names":[],"mappings":"AAKA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D"}
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Define configuration with full type safety
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // agent-health.config.ts
11
+ * import { defineConfig } from '@opensearch-project/agent-health';
12
+ *
13
+ * export default defineConfig({
14
+ * agents: [
15
+ * {
16
+ * key: 'my-agent',
17
+ * name: 'My Agent',
18
+ * endpoint: 'https://api.example.com/chat',
19
+ * connectorType: 'rest',
20
+ * },
21
+ * ],
22
+ * });
23
+ * ```
24
+ */
25
+ export function defineConfig(config) {
26
+ return config;
27
+ }
28
+ //# sourceMappingURL=defineConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineConfig.js","sourceRoot":"","sources":["../../../config/defineConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Config Module
3
+ * Public exports for configuration system
4
+ */
5
+ export type { UserConfig, UserAgentConfig, UserModelConfig, ResolvedConfig, ConfigFileInfo, ReporterConfig, JudgeConfig, ServerConfig, ResolvedServerConfig, } from './types.js';
6
+ export type { AgentHooks, BeforeRequestContext } from '../../types/index.js';
7
+ export { defineConfig } from './defineConfig.js';
8
+ export { loadConfig, loadConfigSync, findConfigFile, getConfigFileInfo, clearConfigCache, DEFAULT_SERVER_CONFIG, } from './loader.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../config/index.ts"],"names":[],"mappings":"AAKA;;;GAGG;AAGH,YAAY,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ // Function exports
6
+ export { defineConfig } from './defineConfig.js';
7
+ export { loadConfig, loadConfigSync, findConfigFile, getConfigFileInfo, clearConfigCache, DEFAULT_SERVER_CONFIG, } from './loader.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { ResolvedConfig, ResolvedServerConfig, ConfigFileInfo } from './types.js';
2
+ /**
3
+ * Default server configuration
4
+ * Follows Playwright's webServer pattern
5
+ */
6
+ export declare const DEFAULT_SERVER_CONFIG: ResolvedServerConfig;
7
+ /**
8
+ * Runtime state file (config v2: `.agent-health/state.json`, user or project
9
+ * scope). Loaded by the *server services* (configService, customAgentStore,
10
+ * dataSourceConfig), not by this loader. We only probe for it so the startup
11
+ * log can tell the user whether on-disk runtime state is in effect (ui-first
12
+ * mode) instead of saying "No config file found".
13
+ */
14
+ export declare function hasServerJsonConfig(cwd?: string): boolean;
15
+ /**
16
+ * Find config file in the given directory
17
+ */
18
+ export declare function findConfigFile(cwd?: string): ConfigFileInfo | null;
19
+ /**
20
+ * Load and resolve configuration
21
+ *
22
+ * @param cwd - Working directory to search for config file
23
+ * @param force - Force reload even if cached
24
+ */
25
+ export declare function loadConfig(cwd?: string, force?: boolean): Promise<ResolvedConfig>;
26
+ /**
27
+ * Load config synchronously (for use in module initialization)
28
+ * Returns defaults if no config file or if loading fails
29
+ */
30
+ export declare function loadConfigSync(cwd?: string): ResolvedConfig;
31
+ /**
32
+ * Clear config cache (useful for testing)
33
+ */
34
+ export declare function clearConfigCache(): void;
35
+ /**
36
+ * Get config file info without loading
37
+ */
38
+ export declare function getConfigFileInfo(cwd?: string): ConfigFileInfo | null;
39
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../config/loader.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAIV,cAAc,EACd,oBAAoB,EACpB,cAAc,EAIf,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,oBAInC,CAAC;AAWF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAExE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,cAAc,GAAG,IAAI,CASjF;AAmJD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,GAAE,MAAsB,EAC3B,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAqCzB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,cAAc,CAmB1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,cAAc,GAAG,IAAI,CAEpF"}
@@ -0,0 +1,258 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Config Loader
7
+ * Loads and resolves agent-health.config.ts files
8
+ */
9
+ import { existsSync } from 'fs';
10
+ import { resolve } from 'path';
11
+ import { projectStatePath, userStatePath } from './statePaths.js';
12
+ import { logStartupDiagnostic } from '../../lib/diagnostics.js';
13
+ import { pathToFileURL } from 'url';
14
+ import { DEFAULT_CONFIG } from '../../lib/constants.js';
15
+ import { resolveBackendPort } from '../../lib/portConfig.js';
16
+ /**
17
+ * Default server configuration
18
+ * Follows Playwright's webServer pattern
19
+ */
20
+ export const DEFAULT_SERVER_CONFIG = {
21
+ port: resolveBackendPort(),
22
+ reuseExistingServer: !process.env.CI,
23
+ startTimeout: 30000,
24
+ };
25
+ /**
26
+ * Config file names to search for (in priority order)
27
+ */
28
+ const CONFIG_FILE_NAMES = [
29
+ 'agent-health.config.ts',
30
+ 'agent-health.config.js',
31
+ 'agent-health.config.mjs',
32
+ ];
33
+ /**
34
+ * Runtime state file (config v2: `.agent-health/state.json`, user or project
35
+ * scope). Loaded by the *server services* (configService, customAgentStore,
36
+ * dataSourceConfig), not by this loader. We only probe for it so the startup
37
+ * log can tell the user whether on-disk runtime state is in effect (ui-first
38
+ * mode) instead of saying "No config file found".
39
+ */
40
+ export function hasServerJsonConfig(cwd = process.cwd()) {
41
+ return existsSync(projectStatePath(cwd)) || existsSync(userStatePath());
42
+ }
43
+ /**
44
+ * Find config file in the given directory
45
+ */
46
+ export function findConfigFile(cwd = process.cwd()) {
47
+ for (const fileName of CONFIG_FILE_NAMES) {
48
+ const filePath = resolve(cwd, fileName);
49
+ if (existsSync(filePath)) {
50
+ const format = fileName.endsWith('.ts') ? 'typescript' : 'javascript';
51
+ return { path: filePath, format, exists: true };
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ /**
57
+ * Convert UserAgentConfig to AgentConfig
58
+ */
59
+ function toAgentConfig(userAgent) {
60
+ return {
61
+ key: userAgent.key,
62
+ name: userAgent.name,
63
+ endpoint: userAgent.endpoint,
64
+ description: userAgent.description,
65
+ enabled: userAgent.enabled ?? true,
66
+ headers: userAgent.headers ?? {},
67
+ useTraces: userAgent.useTraces ?? false,
68
+ connectorType: userAgent.connectorType,
69
+ connectorConfig: userAgent.connectorConfig,
70
+ hooks: userAgent.hooks,
71
+ };
72
+ }
73
+ /**
74
+ * Convert UserModelConfig to ModelConfig entry
75
+ */
76
+ function toModelConfig(userModel) {
77
+ return [
78
+ userModel.key,
79
+ {
80
+ model_id: userModel.model_id,
81
+ display_name: userModel.display_name,
82
+ provider: userModel.provider ?? 'bedrock',
83
+ context_window: userModel.context_window ?? 200000,
84
+ max_output_tokens: userModel.max_output_tokens ?? 4096,
85
+ },
86
+ ];
87
+ }
88
+ /**
89
+ * Merge user config with defaults
90
+ */
91
+ function mergeConfigs(userConfig, defaultConfig) {
92
+ const shouldExtend = userConfig.extends !== false;
93
+ // Merge agents
94
+ let agents;
95
+ if (shouldExtend) {
96
+ // Start with defaults, override/add user agents
97
+ const agentMap = new Map();
98
+ for (const agent of defaultConfig.agents) {
99
+ agentMap.set(agent.key, agent);
100
+ }
101
+ for (const userAgent of userConfig.agents ?? []) {
102
+ agentMap.set(userAgent.key, toAgentConfig(userAgent));
103
+ }
104
+ agents = Array.from(agentMap.values());
105
+ }
106
+ else {
107
+ // Only use user agents
108
+ agents = (userConfig.agents ?? []).map(toAgentConfig);
109
+ }
110
+ // Merge models
111
+ let models;
112
+ if (shouldExtend) {
113
+ models = { ...defaultConfig.models };
114
+ for (const userModel of userConfig.models ?? []) {
115
+ const [key, config] = toModelConfig(userModel);
116
+ models[key] = config;
117
+ }
118
+ }
119
+ else {
120
+ models = {};
121
+ for (const userModel of userConfig.models ?? []) {
122
+ const [key, config] = toModelConfig(userModel);
123
+ models[key] = config;
124
+ }
125
+ }
126
+ // Connectors (always additive)
127
+ const connectors = userConfig.connectors ?? [];
128
+ // Test cases
129
+ const testCases = userConfig.testCases
130
+ ? Array.isArray(userConfig.testCases)
131
+ ? userConfig.testCases
132
+ : [userConfig.testCases]
133
+ : [];
134
+ // Reporters
135
+ const reporters = userConfig.reporters ?? [['console']];
136
+ // Judge config
137
+ const judge = userConfig.judge ?? {
138
+ provider: 'bedrock',
139
+ model: 'claude-sonnet-4',
140
+ };
141
+ // Server config (merge user overrides with defaults)
142
+ const server = {
143
+ ...DEFAULT_SERVER_CONFIG,
144
+ ...userConfig.server,
145
+ };
146
+ // Telemetry config (user config overrides env vars, resolved at init time)
147
+ const telemetry = userConfig.telemetry ?? {};
148
+ return {
149
+ server,
150
+ agents,
151
+ models,
152
+ connectors,
153
+ testCases,
154
+ reporters,
155
+ judge,
156
+ telemetry,
157
+ // Cluster config authored in TS. Passed through verbatim; the server
158
+ // resolves it against JSON/env at startup (see resolveStorageConfig).
159
+ storage: userConfig.storage,
160
+ observability: userConfig.observability,
161
+ };
162
+ }
163
+ /**
164
+ * Load user config file
165
+ */
166
+ async function loadUserConfig(configPath) {
167
+ try {
168
+ // Use dynamic import with file URL for cross-platform compatibility
169
+ const fileUrl = pathToFileURL(configPath).href;
170
+ // For TypeScript files, we need tsx or ts-node to be available
171
+ // The CLI build process compiles TS, so this works in production
172
+ const module = await import(fileUrl);
173
+ return module.default ?? module;
174
+ }
175
+ catch (error) {
176
+ const message = error instanceof Error ? error.message : String(error);
177
+ throw new Error(`Failed to load config file ${configPath}: ${message}`);
178
+ }
179
+ }
180
+ /**
181
+ * Cached resolved config
182
+ */
183
+ let cachedConfig = null;
184
+ let cachedConfigPath = null;
185
+ /**
186
+ * Load and resolve configuration
187
+ *
188
+ * @param cwd - Working directory to search for config file
189
+ * @param force - Force reload even if cached
190
+ */
191
+ export async function loadConfig(cwd = process.cwd(), force = false) {
192
+ const configFile = findConfigFile(cwd);
193
+ // Return cached config if available and unchanged
194
+ if (!force && cachedConfig && cachedConfigPath === configFile?.path) {
195
+ return cachedConfig;
196
+ }
197
+ let userConfig = {};
198
+ if (configFile) {
199
+ logStartupDiagnostic(`[Config] Loading ${configFile.path}`);
200
+ userConfig = await loadUserConfig(configFile.path);
201
+ }
202
+ else if (hasServerJsonConfig(cwd)) {
203
+ // Code config absent, but server-side JSON config present — it's loaded
204
+ // by separate server services (storage / observability / custom agents).
205
+ // Be explicit so the user doesn't think *no* config is in effect.
206
+ logStartupDiagnostic(`[Config] No code config (agent-health.config.{ts,js,mjs}); ` +
207
+ `runtime state (.agent-health/state.json) detected and loaded by server ` +
208
+ `services (ui-first mode). Using built-in defaults for agents/models.`);
209
+ }
210
+ else {
211
+ // Truly no config file — env vars and built-in defaults only.
212
+ logStartupDiagnostic('[Config] No config file found, using defaults + environment variables');
213
+ }
214
+ // Merge with defaults
215
+ const resolved = mergeConfigs(userConfig, DEFAULT_CONFIG);
216
+ // Cache the result
217
+ cachedConfig = resolved;
218
+ cachedConfigPath = configFile?.path ?? null;
219
+ logStartupDiagnostic(`[Config] Loaded ${resolved.agents.length} agents, ${Object.keys(resolved.models).length} models`);
220
+ return resolved;
221
+ }
222
+ /**
223
+ * Load config synchronously (for use in module initialization)
224
+ * Returns defaults if no config file or if loading fails
225
+ */
226
+ export function loadConfigSync(cwd = process.cwd()) {
227
+ // Return cached if available
228
+ if (cachedConfig) {
229
+ return cachedConfig;
230
+ }
231
+ // Return defaults - async loading will update later
232
+ return {
233
+ server: DEFAULT_SERVER_CONFIG,
234
+ agents: DEFAULT_CONFIG.agents,
235
+ models: DEFAULT_CONFIG.models,
236
+ connectors: [],
237
+ testCases: [],
238
+ reporters: [['console']],
239
+ judge: { provider: 'bedrock', model: 'claude-sonnet-4' },
240
+ telemetry: {},
241
+ storage: undefined,
242
+ observability: undefined,
243
+ };
244
+ }
245
+ /**
246
+ * Clear config cache (useful for testing)
247
+ */
248
+ export function clearConfigCache() {
249
+ cachedConfig = null;
250
+ cachedConfigPath = null;
251
+ }
252
+ /**
253
+ * Get config file info without loading
254
+ */
255
+ export function getConfigFileInfo(cwd = process.cwd()) {
256
+ return findConfigFile(cwd);
257
+ }
258
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ export declare const STATE_DIRNAME = ".agent-health";
2
+ export declare const STATE_FILENAME = "state.json";
3
+ /**
4
+ * Generated data lives UNDER the app-managed state dir: `.agent-health/data/`
5
+ * (runs, benchmarks, test-cases, analytics, profiles, skill-evals,
6
+ * uploaded-skills). Combined with state.json so there is ONE app-managed,
7
+ * gitignored directory — not a second top-level `agent-health-data/`.
8
+ */
9
+ export declare const DATA_DIRNAME = "data";
10
+ /** Authored config filenames, in priority order (shared with lib/config/loader). */
11
+ export declare const AUTHORED_CONFIG_NAMES: string[];
12
+ /** Legacy single-file runtime config (pre config-v2); migrated to STATE_FILENAME. */
13
+ export declare const LEGACY_JSON_FILENAME = "agent-health.config.json";
14
+ export type StateScope = 'project' | 'user';
15
+ export declare function projectStateDir(cwd?: string): string;
16
+ export declare function userStateDir(): string;
17
+ export declare function projectStatePath(cwd?: string): string;
18
+ export declare function userStatePath(): string;
19
+ /** Generated-data dir, nested under the project state dir: `<cwd>/.agent-health/data`. */
20
+ export declare function projectDataDir(cwd?: string): string;
21
+ export declare function statePathForScope(scope: StateScope, cwd?: string): string;
22
+ /**
23
+ * Locate an authored config file (project scope first, then user scope).
24
+ * Returns its absolute path, or null if none exists.
25
+ */
26
+ export declare function findAuthoredConfig(cwd?: string): string | null;
27
+ export declare function hasAuthoredConfig(cwd?: string): boolean;
28
+ /**
29
+ * Code-first mode = an authored config file is present. In this mode the
30
+ * runtime state file is ignored entirely (strict rule, #271).
31
+ */
32
+ export declare function isCodeFirstMode(cwd?: string): boolean;
33
+ /**
34
+ * Read a single state file. Returns `{}` when missing/corrupt (safe to create);
35
+ * never throws.
36
+ */
37
+ export declare function readStateFile(path: string): Record<string, unknown>;
38
+ /**
39
+ * Layered runtime state: project overrides user, shallow per top-level key.
40
+ * Returns `{}` in code-first mode (state ignored).
41
+ */
42
+ export declare function readLayeredState(cwd?: string): Record<string, unknown>;
43
+ /**
44
+ * Which scope supplies a given top-level key, or null if absent / code-first.
45
+ * Used for UI source attribution.
46
+ */
47
+ export declare function stateKeyScope(key: string, cwd?: string): StateScope | null;
48
+ /**
49
+ * Read the raw state object for a single scope (no layering). Used by owners
50
+ * that need to merge against the exact file they will write back.
51
+ */
52
+ export declare function readStateScope(scope: StateScope, cwd?: string): Record<string, unknown>;
53
+ /**
54
+ * Merge `patch` into a scope's state file, preserving sibling keys. A key whose
55
+ * value is `undefined` is deleted. Creates the `.agent-health/` dir as needed.
56
+ *
57
+ * Throws in code-first mode — runtime state must not be written when an
58
+ * authored config file is present.
59
+ */
60
+ export declare function writeStateScope(patch: Record<string, unknown>, scope?: StateScope, cwd?: string): void;
61
+ //# sourceMappingURL=statePaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statePaths.d.ts","sourceRoot":"","sources":["../../../config/statePaths.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,SAAS,CAAC;AAEnC,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,UAIjC,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAI5C,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAEnE;AACD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AACD,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAEpE;AACD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AACD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAElE;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAExF;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAU7E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEpE;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAanE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKrF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,UAAU,GAAG,IAAI,CAKzF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtG;AAkBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,GAAE,UAAsB,EAC7B,GAAG,GAAE,MAAsB,GAC1B,IAAI,CAmBN"}
@@ -0,0 +1,188 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Config state paths + mode resolution (config v2, #271).
7
+ *
8
+ * Two modes, decided by the presence of an authored config file:
9
+ *
10
+ * - **code-first**: an `agent-health.config.{ts,js,mjs}` exists (project OR
11
+ * user scope). The authored file (+ `.env`) is the single source of truth;
12
+ * the runtime state file is **ignored entirely**, and the Settings UI write
13
+ * paths are disabled.
14
+ * - **ui-first**: no authored config file anywhere. Runtime state lives in
15
+ * `.agent-health/state.json`, written by the Settings UI / CLI.
16
+ *
17
+ * `.agent-health/` is scoped at both **user** (`~/.agent-health/`) and
18
+ * **project** (`<cwd>/.agent-health/`) level, project overriding user.
19
+ *
20
+ * This module is the single owner of those paths + the mode rule. All runtime
21
+ * state owners (configService, customAgentStore, debug, remoteServers) read and
22
+ * write through it so there is no split-brain across files.
23
+ */
24
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
25
+ import { homedir } from 'os';
26
+ import { resolve, join } from 'path';
27
+ export const STATE_DIRNAME = '.agent-health';
28
+ export const STATE_FILENAME = 'state.json';
29
+ /**
30
+ * Generated data lives UNDER the app-managed state dir: `.agent-health/data/`
31
+ * (runs, benchmarks, test-cases, analytics, profiles, skill-evals,
32
+ * uploaded-skills). Combined with state.json so there is ONE app-managed,
33
+ * gitignored directory — not a second top-level `agent-health-data/`.
34
+ */
35
+ export const DATA_DIRNAME = 'data';
36
+ /** Authored config filenames, in priority order (shared with lib/config/loader). */
37
+ export const AUTHORED_CONFIG_NAMES = [
38
+ 'agent-health.config.ts',
39
+ 'agent-health.config.js',
40
+ 'agent-health.config.mjs',
41
+ ];
42
+ /** Legacy single-file runtime config (pre config-v2); migrated to STATE_FILENAME. */
43
+ export const LEGACY_JSON_FILENAME = 'agent-health.config.json';
44
+ // ── Path helpers ────────────────────────────────────────────────────────────
45
+ export function projectStateDir(cwd = process.cwd()) {
46
+ return join(cwd, STATE_DIRNAME);
47
+ }
48
+ export function userStateDir() {
49
+ return join(homedir(), STATE_DIRNAME);
50
+ }
51
+ export function projectStatePath(cwd = process.cwd()) {
52
+ return join(projectStateDir(cwd), STATE_FILENAME);
53
+ }
54
+ export function userStatePath() {
55
+ return join(userStateDir(), STATE_FILENAME);
56
+ }
57
+ /** Generated-data dir, nested under the project state dir: `<cwd>/.agent-health/data`. */
58
+ export function projectDataDir(cwd = process.cwd()) {
59
+ return join(projectStateDir(cwd), DATA_DIRNAME);
60
+ }
61
+ export function statePathForScope(scope, cwd = process.cwd()) {
62
+ return scope === 'user' ? userStatePath() : projectStatePath(cwd);
63
+ }
64
+ // ── Mode detection ───────────────────────────────────────────────────────────
65
+ /**
66
+ * Locate an authored config file (project scope first, then user scope).
67
+ * Returns its absolute path, or null if none exists.
68
+ */
69
+ export function findAuthoredConfig(cwd = process.cwd()) {
70
+ for (const name of AUTHORED_CONFIG_NAMES) {
71
+ const p = resolve(cwd, name);
72
+ if (existsSync(p))
73
+ return p;
74
+ }
75
+ for (const name of AUTHORED_CONFIG_NAMES) {
76
+ const p = join(userStateDir(), name);
77
+ if (existsSync(p))
78
+ return p;
79
+ }
80
+ return null;
81
+ }
82
+ export function hasAuthoredConfig(cwd = process.cwd()) {
83
+ return findAuthoredConfig(cwd) !== null;
84
+ }
85
+ /**
86
+ * Code-first mode = an authored config file is present. In this mode the
87
+ * runtime state file is ignored entirely (strict rule, #271).
88
+ */
89
+ export function isCodeFirstMode(cwd = process.cwd()) {
90
+ return hasAuthoredConfig(cwd);
91
+ }
92
+ // ── State read/write ─────────────────────────────────────────────────────────
93
+ /**
94
+ * Read a single state file. Returns `{}` when missing/corrupt (safe to create);
95
+ * never throws.
96
+ */
97
+ export function readStateFile(path) {
98
+ try {
99
+ if (!existsSync(path))
100
+ return {};
101
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
102
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
103
+ console.warn(`[statePaths] ${path} is not a JSON object — ignoring`);
104
+ return {};
105
+ }
106
+ return parsed;
107
+ }
108
+ catch (err) {
109
+ console.warn(`[statePaths] Failed to read ${path}:`, err.message);
110
+ return {};
111
+ }
112
+ }
113
+ /**
114
+ * Layered runtime state: project overrides user, shallow per top-level key.
115
+ * Returns `{}` in code-first mode (state ignored).
116
+ */
117
+ export function readLayeredState(cwd = process.cwd()) {
118
+ if (isCodeFirstMode(cwd))
119
+ return {};
120
+ const user = readStateFile(userStatePath());
121
+ const project = readStateFile(projectStatePath(cwd));
122
+ return { ...user, ...project };
123
+ }
124
+ /**
125
+ * Which scope supplies a given top-level key, or null if absent / code-first.
126
+ * Used for UI source attribution.
127
+ */
128
+ export function stateKeyScope(key, cwd = process.cwd()) {
129
+ if (isCodeFirstMode(cwd))
130
+ return null;
131
+ if (key in readStateFile(projectStatePath(cwd)))
132
+ return 'project';
133
+ if (key in readStateFile(userStatePath()))
134
+ return 'user';
135
+ return null;
136
+ }
137
+ /**
138
+ * Read the raw state object for a single scope (no layering). Used by owners
139
+ * that need to merge against the exact file they will write back.
140
+ */
141
+ export function readStateScope(scope, cwd = process.cwd()) {
142
+ return readStateFile(statePathForScope(scope, cwd));
143
+ }
144
+ /**
145
+ * Strict read for the write path: returns `{}` when the file is missing (safe
146
+ * to create), `null` when it exists but is unreadable/corrupt (unsafe to
147
+ * overwrite — would clobber).
148
+ */
149
+ function readStateFileOrNull(path) {
150
+ if (!existsSync(path))
151
+ return {};
152
+ try {
153
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
154
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
155
+ return null;
156
+ return parsed;
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ }
162
+ /**
163
+ * Merge `patch` into a scope's state file, preserving sibling keys. A key whose
164
+ * value is `undefined` is deleted. Creates the `.agent-health/` dir as needed.
165
+ *
166
+ * Throws in code-first mode — runtime state must not be written when an
167
+ * authored config file is present.
168
+ */
169
+ export function writeStateScope(patch, scope = 'project', cwd = process.cwd()) {
170
+ if (isCodeFirstMode(cwd)) {
171
+ throw new Error('Cannot write runtime state: data sources are managed by agent-health.config.ts (code-first mode). ' +
172
+ 'Edit the config file and restart.');
173
+ }
174
+ const path = statePathForScope(scope, cwd);
175
+ const dir = scope === 'user' ? userStateDir() : projectStateDir(cwd);
176
+ const existing = readStateFileOrNull(path);
177
+ if (existing === null) {
178
+ throw new Error(`Cannot write runtime state: ${path} is unreadable or corrupt`);
179
+ }
180
+ const merged = { ...existing, ...patch };
181
+ for (const [k, v] of Object.entries(patch)) {
182
+ if (v === undefined)
183
+ delete merged[k];
184
+ }
185
+ mkdirSync(dir, { recursive: true });
186
+ writeFileSync(path, JSON.stringify(merged, null, 2) + '\n', 'utf-8');
187
+ }
188
+ //# sourceMappingURL=statePaths.js.map