@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,232 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { clsx } from "clsx";
6
+ import { twMerge } from "tailwind-merge";
7
+ import { DEFAULT_CONFIG } from "../lib/constants.js";
8
+ export function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+ // ==================== Label Styling ====================
12
+ // Special colors for difficulty labels only
13
+ // Light mode: subtle backgrounds with darker text
14
+ // Dark mode: darker backgrounds with lighter text
15
+ const DIFFICULTY_LABEL_COLORS = {
16
+ 'difficulty:Easy': 'bg-blue-100 text-blue-800 border-blue-300 dark:bg-blue-900/30 dark:text-opensearch-blue dark:border-blue-800',
17
+ 'difficulty:Medium': 'bg-amber-100 text-amber-800 border-amber-300 dark:bg-yellow-900/30 dark:text-yellow-400 dark:border-yellow-800',
18
+ 'difficulty:Hard': 'bg-red-100 text-red-800 border-red-300 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800',
19
+ };
20
+ // Generic label color palette (used for all other labels, hash-based)
21
+ // OpenSearch UI inspired colors for light mode
22
+ const LABEL_COLOR_PALETTE = [
23
+ 'bg-blue-100 text-blue-800 border-blue-300 dark:bg-blue-900/20 dark:text-blue-300 dark:border-blue-700',
24
+ 'bg-purple-100 text-purple-800 border-purple-300 dark:bg-purple-900/30 dark:text-purple-400 dark:border-purple-800',
25
+ 'bg-cyan-100 text-cyan-800 border-cyan-300 dark:bg-cyan-900/30 dark:text-cyan-400 dark:border-cyan-800',
26
+ 'bg-pink-100 text-pink-800 border-pink-300 dark:bg-pink-900/30 dark:text-pink-400 dark:border-pink-800',
27
+ 'bg-orange-100 text-orange-800 border-orange-300 dark:bg-orange-900/30 dark:text-orange-400 dark:border-orange-800',
28
+ 'bg-teal-100 text-teal-800 border-teal-300 dark:bg-teal-900/30 dark:text-teal-400 dark:border-teal-800',
29
+ 'bg-indigo-100 text-indigo-800 border-indigo-300 dark:bg-indigo-900/30 dark:text-indigo-400 dark:border-indigo-800',
30
+ 'bg-gray-100 text-gray-800 border-gray-300 dark:bg-muted dark:text-muted-foreground dark:border-border',
31
+ ];
32
+ /**
33
+ * Returns Tailwind classes for styling label badges
34
+ * Only difficulty:Easy/Medium/Hard get special colors; all others use hash-based palette
35
+ */
36
+ export const getLabelColor = (label) => {
37
+ // Check exact match for difficulty labels
38
+ if (DIFFICULTY_LABEL_COLORS[label]) {
39
+ return DIFFICULTY_LABEL_COLORS[label];
40
+ }
41
+ // All other labels use hash-based color assignment for consistency
42
+ const hash = label.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0);
43
+ return LABEL_COLOR_PALETTE[hash % LABEL_COLOR_PALETTE.length];
44
+ };
45
+ // Mapping from difficulty value to full label for backward compat
46
+ const DIFFICULTY_VALUE_COLORS = {
47
+ 'Easy': 'bg-blue-100 text-blue-800 border-blue-300 dark:bg-blue-900/30 dark:text-opensearch-blue dark:border-blue-800',
48
+ 'Medium': 'bg-amber-100 text-amber-800 border-amber-300 dark:bg-yellow-900/30 dark:text-yellow-400 dark:border-yellow-800',
49
+ 'Hard': 'bg-red-100 text-red-800 border-red-300 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800',
50
+ };
51
+ /**
52
+ * Returns Tailwind classes for styling difficulty badges
53
+ * @deprecated Use getLabelColor with difficulty: prefixed labels instead
54
+ */
55
+ export const getDifficultyColor = (difficulty) => {
56
+ return DIFFICULTY_VALUE_COLORS[difficulty] || DIFFICULTY_VALUE_COLORS['Medium'];
57
+ };
58
+ // ==================== Date Formatting ====================
59
+ /**
60
+ * Formats a timestamp string to a localized date string
61
+ * @param timestamp - ISO timestamp string
62
+ * @param variant - 'date' (date only), 'datetime' (default, with time), 'detailed' (with seconds)
63
+ */
64
+ export const formatDate = (timestamp, variant = 'datetime') => {
65
+ const date = new Date(timestamp);
66
+ const options = {
67
+ month: 'short',
68
+ day: 'numeric',
69
+ year: 'numeric',
70
+ };
71
+ if (variant === 'datetime' || variant === 'detailed') {
72
+ options.hour = '2-digit';
73
+ options.minute = '2-digit';
74
+ }
75
+ if (variant === 'detailed') {
76
+ options.second = '2-digit';
77
+ }
78
+ return date.toLocaleString('en-US', options);
79
+ };
80
+ /**
81
+ * Formats a timestamp to relative time (e.g., "5m ago", "2h ago")
82
+ * Falls back to formatDate for timestamps older than 7 days
83
+ */
84
+ export const formatRelativeTime = (timestamp) => {
85
+ const date = new Date(timestamp);
86
+ const now = new Date();
87
+ const diffMs = now.getTime() - date.getTime();
88
+ const diffMins = Math.floor(diffMs / 60000);
89
+ const diffHours = Math.floor(diffMs / 3600000);
90
+ const diffDays = Math.floor(diffMs / 86400000);
91
+ if (diffMins < 1)
92
+ return 'Just now';
93
+ if (diffMins < 60)
94
+ return `${diffMins}m ago`;
95
+ if (diffHours < 24)
96
+ return `${diffHours}h ago`;
97
+ if (diffDays < 7)
98
+ return `${diffDays}d ago`;
99
+ return formatDate(timestamp);
100
+ };
101
+ // ==================== Model Utilities ====================
102
+ /**
103
+ * Gets the display name for a model ID from config
104
+ */
105
+ export const getModelName = (modelId) => {
106
+ const model = DEFAULT_CONFIG.models[modelId];
107
+ return model?.display_name || modelId;
108
+ };
109
+ // ==================== Run Utilities ====================
110
+ /**
111
+ * Returns a short, stable suffix for a TestCaseRun id, suitable for embedding
112
+ * in an auto-generated run name. Run ids are shaped
113
+ * `report-<timestamp>-<random>` (file adapter) or arbitrary keys (OpenSearch),
114
+ * so we take the trailing 6 characters which gives a recognizable yet compact
115
+ * label without exposing the full id. Falls back to the full id for very short
116
+ * ids (e.g. legacy data).
117
+ */
118
+ export const getRunShortId = (runId) => {
119
+ if (!runId)
120
+ return '';
121
+ return runId.length > 6 ? runId.slice(-6) : runId;
122
+ };
123
+ /**
124
+ * Resolves the display name for a TestCaseRun.
125
+ *
126
+ * Prefers the persisted `name` field (set from the run config dialog or
127
+ * auto-generated server-side). Falls back to `Run <short-id>` for older
128
+ * runs that pre-date the field, so every row in the runs list has a
129
+ * recognizable label instead of a raw id slice.
130
+ */
131
+ export const getRunDisplayName = (run) => {
132
+ if (run.name && run.name.trim())
133
+ return run.name.trim();
134
+ return `Run ${getRunShortId(run.id)}`;
135
+ };
136
+ /**
137
+ * Computes a single "overall score" percentage to display next to a run in
138
+ * a list, from whatever metrics that run happens to carry.
139
+ *
140
+ * Why this is non-trivial:
141
+ * - Only the *RCA Default* system evaluator emits a metric named `accuracy`.
142
+ * Other system evaluators (Factuality, Tool Use, Reasoning, Safety) and
143
+ * any custom evaluator emit completely different metric names like
144
+ * `tool_selection_accuracy`, `reasoning_coherence`, `bias_detection`, etc.
145
+ * - The runs list used to hardcode `run.metrics?.accuracy ?? 0`, which made
146
+ * every non-RCA run display `0%` even when the judge had passed it.
147
+ *
148
+ * The fix is to take the **arithmetic mean of all populated numeric metrics**
149
+ * on the run. This works for any evaluator without having to look up its
150
+ * `scoringConfig`, gives a reasonable summary number, and degrades to `null`
151
+ * (rendered as `—`) when no metrics are present — the only honest answer
152
+ * for runs whose judge call hasn't completed or which were never scored.
153
+ *
154
+ * Returns `null` when there are no numeric metrics; otherwise an integer
155
+ * percentage rounded to the nearest whole number.
156
+ */
157
+ export const getRunOverallScore = (metrics) => {
158
+ if (!metrics)
159
+ return null;
160
+ const values = [];
161
+ for (const v of Object.values(metrics)) {
162
+ if (typeof v === 'number' && Number.isFinite(v))
163
+ values.push(v);
164
+ }
165
+ if (values.length === 0)
166
+ return null;
167
+ const sum = values.reduce((a, b) => a + b, 0);
168
+ return Math.round(sum / values.length);
169
+ };
170
+ // ==================== Status Colors ====================
171
+ /**
172
+ * Returns theme-aware Tailwind classes for pass rate badges
173
+ * Light mode: More saturated backgrounds with darker text for better visibility
174
+ * Dark mode: Lighter text on dark backgrounds
175
+ */
176
+ export const getPassRateColor = (passRate) => {
177
+ if (passRate >= 80) {
178
+ // Success/Pass - Green with more saturated background
179
+ return 'bg-green-100 text-green-800 border-green-300 dark:bg-green-900/30 dark:text-green-400 dark:border-green-800';
180
+ }
181
+ else if (passRate >= 50) {
182
+ // Warning - Amber with more saturated background
183
+ return 'bg-amber-100 text-amber-800 border-amber-300 dark:bg-amber-900/30 dark:text-amber-400 dark:border-amber-800';
184
+ }
185
+ else {
186
+ // Danger/Fail - Red with more saturated background
187
+ return 'bg-red-100 text-red-800 border-red-300 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800';
188
+ }
189
+ };
190
+ /**
191
+ * Returns theme-aware Tailwind classes for status indicators
192
+ * Used for success/error/warning/info states
193
+ * Light mode: More saturated backgrounds (100 shade) for better visibility
194
+ * Dark mode: Semi-transparent darker backgrounds with lighter text
195
+ */
196
+ export const getStatusColor = (status) => {
197
+ const colors = {
198
+ success: 'bg-green-100 text-green-800 border-green-300 dark:bg-green-900/30 dark:text-green-400 dark:border-green-800',
199
+ error: 'bg-red-100 text-red-800 border-red-300 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800',
200
+ warning: 'bg-amber-100 text-amber-800 border-amber-300 dark:bg-amber-900/30 dark:text-amber-400 dark:border-amber-800',
201
+ info: 'bg-blue-100 text-blue-800 border-blue-300 dark:bg-blue-900/30 dark:text-blue-400 dark:border-blue-800',
202
+ neutral: 'bg-gray-100 text-gray-800 border-gray-300 dark:bg-gray-800/30 dark:text-gray-400 dark:border-gray-700',
203
+ };
204
+ return colors[status];
205
+ };
206
+ /**
207
+ * Returns theme-aware text color classes for metrics
208
+ * Used for displaying metric values in stats cards
209
+ * Light mode: Darker colors for WCAG AA compliance (4.5:1 contrast ratio)
210
+ * Dark mode: Lighter colors for visibility on dark backgrounds
211
+ */
212
+ export const getMetricTextColor = (type) => {
213
+ const colors = {
214
+ primary: 'text-blue-700 dark:text-blue-400',
215
+ success: 'text-green-700 dark:text-green-400',
216
+ error: 'text-red-700 dark:text-red-400',
217
+ warning: 'text-amber-700 dark:text-amber-400',
218
+ info: 'text-purple-700 dark:text-purple-400',
219
+ secondary: 'text-cyan-700 dark:text-cyan-400',
220
+ };
221
+ return colors[type];
222
+ };
223
+ // ==================== Text Utilities ====================
224
+ /**
225
+ * Truncates text to a specified length with ellipsis
226
+ */
227
+ export const truncate = (text, length) => {
228
+ if (text.length <= length)
229
+ return text;
230
+ return text.substring(0, length).trim() + '...';
231
+ };
232
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED,0DAA0D;AAE1D,4CAA4C;AAC5C,kDAAkD;AAClD,kDAAkD;AAClD,MAAM,uBAAuB,GAA2B;IACtD,iBAAiB,EAAE,8GAA8G;IACjI,mBAAmB,EAAE,gHAAgH;IACrI,iBAAiB,EAAE,iGAAiG;CACrH,CAAC;AAEF,sEAAsE;AACtE,+CAA+C;AAC/C,MAAM,mBAAmB,GAAG;IAC1B,uGAAuG;IACvG,mHAAmH;IACnH,uGAAuG;IACvG,uGAAuG;IACvG,mHAAmH;IACnH,uGAAuG;IACvG,mHAAmH;IACnH,uGAAuG;CACxG,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IACrD,0CAA0C;IAC1C,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,mEAAmE;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,mBAAmB,CAAC,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,kEAAkE;AAClE,MAAM,uBAAuB,GAA2B;IACtD,MAAM,EAAE,8GAA8G;IACtH,QAAQ,EAAE,gHAAgH;IAC1H,MAAM,EAAE,iGAAiG;CAC1G,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAsB,EAAU,EAAE;IACnE,OAAO,uBAAuB,CAAC,UAAU,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,4DAA4D;AAE5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,SAAiB,EACjB,UAA6B,UAAU,EAC/B,EAAE;IACV,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,OAAO,GAA+B;QAC1C,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;KAChB,CAAC;IAEF,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAU,EAAE;IAC9D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IAE/C,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACpC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC7C,IAAI,SAAS,GAAG,EAAE;QAAE,OAAO,GAAG,SAAS,OAAO,CAAC;IAC/C,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC5C,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,4DAA4D;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE;IACtD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,KAAK,EAAE,YAAY,IAAI,OAAO,CAAC;AACxC,CAAC,CAAC;AAEF,0DAA0D;AAE1D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAkC,EAAU,EAAE;IAC9E,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACxD,OAAO,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAA8D,EAC/C,EAAE;IACjB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,0DAA0D;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC3D,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACnB,sDAAsD;QACtD,OAAO,6GAA6G,CAAC;IACvH,CAAC;SAAM,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC1B,iDAAiD;QACjD,OAAO,6GAA6G,CAAC;IACvH,CAAC;SAAM,CAAC;QACN,mDAAmD;QACnD,OAAO,iGAAiG,CAAC;IAC3G,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAA4D,EAAU,EAAE;IACrG,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,6GAA6G;QACtH,KAAK,EAAE,iGAAiG;QACxG,OAAO,EAAE,6GAA6G;QACtH,IAAI,EAAE,uGAAuG;QAC7G,OAAO,EAAE,uGAAuG;KACjH,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAwE,EAAU,EAAE;IACrH,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,oCAAoC;QAC7C,KAAK,EAAE,gCAAgC;QACvC,OAAO,EAAE,oCAAoC;QAC7C,IAAI,EAAE,sCAAsC;QAC5C,SAAS,EAAE,kCAAkC;KAC9C,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,2DAA2D;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,MAAc,EAAU,EAAE;IAC/D,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;AAClD,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * consolidate() — cluster staged fixes by signature so a run raises ONE PR per
3
+ * fix-class instead of one per ticket.
4
+ *
5
+ * This is intentionally conservative: it groups only on an exact signature
6
+ * match. Loose clustering risks merging two genuinely-different bugs into one
7
+ * confused PR, so the default bias is split-not-merge. Swap in an embedding /
8
+ * correlation backend later without changing the workflow surface.
9
+ */
10
+ import type { Cluster, StagedItem } from './types.js';
11
+ export declare function consolidate(staged: StagedItem[]): Promise<Cluster[]>;
12
+ //# sourceMappingURL=consolidate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../../workflow/consolidate.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA8B1E"}
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export async function consolidate(staged) {
6
+ const bySignature = new Map();
7
+ for (const s of staged) {
8
+ const key = s.signature || 'unknown';
9
+ const bucket = bySignature.get(key) ?? [];
10
+ bucket.push(s);
11
+ bySignature.set(key, bucket);
12
+ }
13
+ const clusters = [];
14
+ for (const [signature, items] of bySignature) {
15
+ const tickets = items.map((i) => i.item);
16
+ const traceIds = [...new Set(items.flatMap((i) => i.run.traceIds))];
17
+ clusters.push({
18
+ label: signature,
19
+ signature,
20
+ items,
21
+ tickets,
22
+ traceIds,
23
+ fix: {
24
+ summary: `Candidate fix for "${signature}" derived from ${tickets.length} ` +
25
+ `ticket(s): ${tickets.map((t) => t.id).join(', ')}.`,
26
+ },
27
+ });
28
+ }
29
+ // Largest clusters first — the highest-leverage fixes surface at the top.
30
+ clusters.sort((a, b) => b.items.length - a.items.length);
31
+ return clusters;
32
+ }
33
+ //# sourceMappingURL=consolidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../../workflow/consolidate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAoB;IACpD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC;QACrC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpE,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,SAAS;YAChB,SAAS;YACT,KAAK;YACL,OAAO;YACP,QAAQ;YACR,GAAG,EAAE;gBACH,OAAO,EACL,sBAAsB,SAAS,kBAAkB,OAAO,CAAC,MAAM,GAAG;oBAClE,cAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;aACvD;SACF,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Workflow SDK public surface. */
2
+ export { source, getSource, listSources, clearSources } from './source.js';
3
+ export { workflow } from './workflow.js';
4
+ export { FeedbackLedger } from './ledger.js';
5
+ export { consolidate } from './consolidate.js';
6
+ export { mapPool } from './pool.js';
7
+ export { profileSpans, buildAgentEditsPrompt, parseAgentEdits, deriveAgentEdits, defaultReason, } from './stepB.js';
8
+ export type { WorkItem, SourceFetchFn, SourceHandle, AgentRunResult, StagedItem, Cluster, WritesMode, RunAgentOptions, WorkflowConfig, PRRequest, } from './types.js';
9
+ export type { LedgerEntry } from './ledger.js';
10
+ export type { PoolStats } from './pool.js';
11
+ export type { SessionProfile, AgentEdit, ReasonFn } from './stepB.js';
12
+ export type { Workflow, WorkflowContext, WorkflowRunOptions, WorkflowResult, ForEachOptions, } from './workflow.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../workflow/index.ts"],"names":[],"mappings":"AAKA,mCAAmC;AAEnC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,EACV,eAAe,EACf,cAAc,EACd,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtE,YAAY,EACV,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /** Workflow SDK public surface. */
6
+ export { source, getSource, listSources, clearSources } from './source.js';
7
+ export { workflow } from './workflow.js';
8
+ export { FeedbackLedger } from './ledger.js';
9
+ export { consolidate } from './consolidate.js';
10
+ export { mapPool } from './pool.js';
11
+ export { profileSpans, buildAgentEditsPrompt, parseAgentEdits, deriveAgentEdits, defaultReason, } from './stepB.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../workflow/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mCAAmC;AAEnC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * FeedbackLedger — cumulative, append-only human steering for one workflow run.
3
+ *
4
+ * This is the upgrade over a single-shot `--feedback` flag: a correction given
5
+ * on ticket #3 is appended here and injected into the agent's context for
6
+ * tickets #4..#N (steering compounds), and the whole ledger is embedded into
7
+ * the consolidated PR bodies as rationale.
8
+ */
9
+ export interface LedgerEntry {
10
+ at: string;
11
+ text: string;
12
+ ticketId?: string;
13
+ source: 'human' | 'signal' | 'system';
14
+ }
15
+ export declare class FeedbackLedger {
16
+ private entries;
17
+ /** Append a correction. Defaults to a human-sourced entry. */
18
+ append(text: string, opts?: {
19
+ ticketId?: string;
20
+ source?: LedgerEntry['source'];
21
+ }): void;
22
+ all(): readonly LedgerEntry[];
23
+ get size(): number;
24
+ /**
25
+ * Rendered block — injected into each subsequent agent run as context and
26
+ * embedded into PR bodies. Empty string when there's nothing to say.
27
+ */
28
+ render(): string;
29
+ }
30
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../workflow/ledger.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACvC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAqB;IAEpC,8DAA8D;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;KAAO,GAAG,IAAI;IAW5F,GAAG,IAAI,SAAS,WAAW,EAAE;IAI7B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,MAAM,IAAI,MAAM;CAQjB"}
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export class FeedbackLedger {
6
+ constructor() {
7
+ this.entries = [];
8
+ }
9
+ /** Append a correction. Defaults to a human-sourced entry. */
10
+ append(text, opts = {}) {
11
+ const trimmed = text?.trim();
12
+ if (!trimmed)
13
+ return;
14
+ this.entries.push({
15
+ at: new Date().toISOString(),
16
+ text: trimmed,
17
+ ticketId: opts.ticketId,
18
+ source: opts.source ?? 'human',
19
+ });
20
+ }
21
+ all() {
22
+ return this.entries;
23
+ }
24
+ get size() {
25
+ return this.entries.length;
26
+ }
27
+ /**
28
+ * Rendered block — injected into each subsequent agent run as context and
29
+ * embedded into PR bodies. Empty string when there's nothing to say.
30
+ */
31
+ render() {
32
+ if (this.entries.length === 0)
33
+ return '';
34
+ const lines = this.entries.map((e, i) => {
35
+ const tag = e.ticketId ? `[${e.ticketId}] ` : '';
36
+ return `${i + 1}. ${tag}${e.text}`;
37
+ });
38
+ return ['## Cumulative feedback (steers this run)', ...lines].join('\n');
39
+ }
40
+ }
41
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../workflow/ledger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,MAAM,OAAO,cAAc;IAA3B;QACU,YAAO,GAAkB,EAAE,CAAC;IAkCtC,CAAC;IAhCC,8DAA8D;IAC9D,MAAM,CAAC,IAAY,EAAE,OAA8D,EAAE;QACnF,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,0CAA0C,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * mapPool — run an async fn over items with bounded concurrency.
3
+ *
4
+ * The concurrency cap is the workflow's primary cost + blast-radius control:
5
+ * in `new` mode it bounds how many live agent investigations run at once.
6
+ * Returns results in input order; rejects on the first error.
7
+ */
8
+ export interface PoolStats {
9
+ /** Highest number of simultaneously-active tasks observed. */
10
+ peakConcurrency: number;
11
+ }
12
+ export declare function mapPool<T, R>(items: readonly T[], limit: number, fn: (item: T, index: number) => Promise<R>, stats?: PoolStats): Promise<R[]>;
13
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../workflow/pool.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH,MAAM,WAAW,SAAS;IACxB,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,CAAC,EAAE,CAAC,CAoCd"}
@@ -0,0 +1,44 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export async function mapPool(items, limit, fn, stats) {
6
+ // Guard non-finite / non-positive limits (e.g. NaN from a bad CLI parse) so the
7
+ // scheduler can never deadlock by never starting any task.
8
+ const max = Number.isFinite(limit) && limit >= 1 ? Math.floor(limit) : 1;
9
+ const results = new Array(items.length);
10
+ let next = 0;
11
+ let active = 0;
12
+ let settled = 0;
13
+ let rejected = false;
14
+ return new Promise((resolve, reject) => {
15
+ if (items.length === 0)
16
+ return resolve(results);
17
+ const pump = () => {
18
+ if (rejected)
19
+ return;
20
+ while (active < max && next < items.length) {
21
+ const i = next++;
22
+ active++;
23
+ if (stats)
24
+ stats.peakConcurrency = Math.max(stats.peakConcurrency, active);
25
+ Promise.resolve(fn(items[i], i))
26
+ .then((r) => {
27
+ results[i] = r;
28
+ active--;
29
+ settled++;
30
+ if (settled === items.length)
31
+ resolve(results);
32
+ else
33
+ pump();
34
+ })
35
+ .catch((err) => {
36
+ rejected = true;
37
+ reject(err);
38
+ });
39
+ }
40
+ };
41
+ pump();
42
+ });
43
+ }
44
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../workflow/pool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAmB,EACnB,KAAa,EACb,EAA0C,EAC1C,KAAiB;IAEjB,gFAAgF;IAChF,2DAA2D;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,QAAQ;gBAAE,OAAO;YACrB,OAAO,MAAM,GAAG,GAAG,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;gBACjB,MAAM,EAAE,CAAC;gBACT,IAAI,KAAK;oBAAE,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC3E,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBACV,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACf,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,CAAC;oBACV,IAAI,OAAO,KAAK,KAAK,CAAC,MAAM;wBAAE,OAAO,CAAC,OAAO,CAAC,CAAC;;wBAC1C,IAAI,EAAE,CAAC;gBACd,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;YACP,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * source() — register a work source from a plain .ts file. No interface to
3
+ * implement: the fetch fn returns duck-typed { id, prompt, meta } objects.
4
+ * Mirrors the test() registrar so source files feel like eval files.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * export const queue = source('dp-oncall-queue', async ({ since }) => {
9
+ * const tickets = await sim.queryFolder(MY_FOLDER, { since, open: true });
10
+ * return tickets.map(t => ({ id: t.id, prompt: t.url, meta: { cti: t.cti } }));
11
+ * });
12
+ * ```
13
+ */
14
+ import type { SourceFetchFn, SourceHandle } from './types.js';
15
+ export declare function source(name: string, fetch: SourceFetchFn): SourceHandle;
16
+ /** Look up a registered source by name (used by the workflow runtime / loaders). */
17
+ export declare function getSource(name: string): SourceHandle | undefined;
18
+ /** List registered source names. */
19
+ export declare function listSources(): string[];
20
+ /** Test seam — drop all registrations. */
21
+ export declare function clearSources(): void;
22
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../workflow/source.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI9D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,CAUvE;AAED,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEhE;AAED,oCAAoC;AACpC,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,0CAA0C;AAC1C,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ const registry = new Map();
6
+ export function source(name, fetch) {
7
+ if (!name || typeof name !== 'string') {
8
+ throw new Error('source(name, fetch): name must be a non-empty string');
9
+ }
10
+ if (typeof fetch !== 'function') {
11
+ throw new Error(`source('${name}', fetch): fetch must be a function`);
12
+ }
13
+ const handle = { name, fetch };
14
+ registry.set(name, handle);
15
+ return handle;
16
+ }
17
+ /** Look up a registered source by name (used by the workflow runtime / loaders). */
18
+ export function getSource(name) {
19
+ return registry.get(name);
20
+ }
21
+ /** List registered source names. */
22
+ export function listSources() {
23
+ return [...registry.keys()];
24
+ }
25
+ /** Test seam — drop all registrations. */
26
+ export function clearSources() {
27
+ registry.clear();
28
+ }
29
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../../workflow/source.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEjD,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,KAAoB;IACvD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,qCAAqC,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,MAAM,GAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC7C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,YAAY;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Step B — improve-the-agent from its own guided sessions.
3
+ *
4
+ * This is the successor half of the workflow that builds on the agent-profiling
5
+ * primitives (#267): profile a session's traces against an evaluator rubric,
6
+ * fold in the cumulative FeedbackLedger, and derive concrete edits to the
7
+ * agent's OWN repo (prompt / skills / SOPs) — terminating in an improvement PR.
8
+ *
9
+ * The reasoning node (`deriveAgentEdits`) is the only stochastic part; the
10
+ * profiling is deterministic (reuses `spansToTrajectory` + `scanSessionSignals`
11
+ * from #267). Both the span source and the reasoner are injectable seams so the
12
+ * core is unit-testable without a live server or a real `claude` process.
13
+ */
14
+ import type { Span, TrajectoryStep } from '../../types/index.js';
15
+ import { type SessionSignal } from '../../services/traces/spansToTrajectory.js';
16
+ import type { FeedbackLedger } from './ledger.js';
17
+ /** A profiled session — the deterministic half of Step B. */
18
+ export interface SessionProfile {
19
+ sessionId: string;
20
+ serviceName?: string;
21
+ trajectory: TrajectoryStep[];
22
+ signals: SessionSignal[];
23
+ evaluator?: {
24
+ id: string;
25
+ systemPrompt?: string;
26
+ };
27
+ traceIds: string[];
28
+ }
29
+ /** A single proposed edit to the agent's repo. */
30
+ export interface AgentEdit {
31
+ file: string;
32
+ change: string;
33
+ why: string;
34
+ priority: 'high' | 'medium' | 'low';
35
+ evidence?: string[];
36
+ }
37
+ /** Reasoner seam: prompt → raw model text. Default spawns `claude -p`. */
38
+ export type ReasonFn = (prompt: string) => Promise<string>;
39
+ /**
40
+ * Profile a session from its spans — deterministic, reuses #267 primitives.
41
+ * Pass `spans` directly (unit-testable) or resolve them via a seam upstream.
42
+ */
43
+ export declare function profileSpans(sessionId: string, spans: Span[], opts?: {
44
+ serviceName?: string;
45
+ evaluator?: {
46
+ id: string;
47
+ systemPrompt?: string;
48
+ };
49
+ }): SessionProfile;
50
+ /**
51
+ * Build the reasoner prompt from profiles + the cumulative ledger. Pure, so the
52
+ * exact instruction surface is unit-testable and reviewable.
53
+ */
54
+ export declare function buildAgentEditsPrompt(profiles: SessionProfile[], opts?: {
55
+ repo?: string;
56
+ ledger?: FeedbackLedger;
57
+ }): string;
58
+ /** Default reasoner: spawn `claude -p <prompt>` and return stdout. */
59
+ export declare const defaultReason: ReasonFn;
60
+ /** Parse the reasoner output into AgentEdits (tolerant of fenced JSON). */
61
+ export declare function parseAgentEdits(raw: string): AgentEdit[];
62
+ /**
63
+ * Derive concrete agent-repo edits from session profiles + the cumulative
64
+ * ledger. `reason` is injectable (defaults to `claude -p`).
65
+ */
66
+ export declare function deriveAgentEdits(profiles: SessionProfile[], opts?: {
67
+ repo?: string;
68
+ ledger?: FeedbackLedger;
69
+ reason?: ReasonFn;
70
+ }): Promise<AgentEdit[]>;
71
+ //# sourceMappingURL=stepB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepB.d.ts","sourceRoot":"","sources":["../../../workflow/stepB.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACnH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,kDAAkD;AAClD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,IAAI,EAAE,EACb,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,GACrF,cAAc,CAYhB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EAAE,EAC1B,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAA;CAAO,GACpD,MAAM,CAwBR;AAED,sEAAsE;AACtE,eAAO,MAAM,aAAa,EAAE,QAW3B,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAqBxD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,cAAc,EAAE,EAC1B,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,QAAQ,CAAA;CAAO,GACvE,OAAO,CAAC,SAAS,EAAE,CAAC,CAMtB"}