@evalops/maestro 0.10.18 → 0.10.20

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 (922) hide show
  1. package/README.md +56 -1
  2. package/dist/agent/action-approval.d.ts +12 -2
  3. package/dist/agent/action-approval.d.ts.map +1 -1
  4. package/dist/agent/action-approval.js +19 -32
  5. package/dist/agent/action-approval.js.map +1 -1
  6. package/dist/agent/agent.d.ts +1 -0
  7. package/dist/agent/agent.d.ts.map +1 -1
  8. package/dist/agent/agent.js +26 -0
  9. package/dist/agent/agent.js.map +1 -1
  10. package/dist/agent/compaction.d.ts +2 -0
  11. package/dist/agent/compaction.d.ts.map +1 -1
  12. package/dist/agent/compaction.js +4 -2
  13. package/dist/agent/compaction.js.map +1 -1
  14. package/dist/agent/index.d.ts +1 -1
  15. package/dist/agent/index.d.ts.map +1 -1
  16. package/dist/agent/index.js +1 -1
  17. package/dist/agent/index.js.map +1 -1
  18. package/dist/agent/modes.d.ts +56 -4
  19. package/dist/agent/modes.d.ts.map +1 -1
  20. package/dist/agent/modes.js +163 -2
  21. package/dist/agent/modes.js.map +1 -1
  22. package/dist/agent/prompt-recovery.d.ts.map +1 -1
  23. package/dist/agent/prompt-recovery.js +1 -3
  24. package/dist/agent/prompt-recovery.js.map +1 -1
  25. package/dist/agent/providers/anthropic.d.ts.map +1 -1
  26. package/dist/agent/providers/anthropic.js +9 -1
  27. package/dist/agent/providers/anthropic.js.map +1 -1
  28. package/dist/agent/providers/codex-app-server.d.ts +12 -0
  29. package/dist/agent/providers/codex-app-server.d.ts.map +1 -0
  30. package/dist/agent/providers/codex-app-server.js +788 -0
  31. package/dist/agent/providers/codex-app-server.js.map +1 -0
  32. package/dist/agent/providers/google-gemini-cli.js +14 -3
  33. package/dist/agent/providers/google.js +22 -3
  34. package/dist/agent/providers/scripted.d.ts +11 -0
  35. package/dist/agent/providers/scripted.d.ts.map +1 -0
  36. package/dist/agent/providers/scripted.js +399 -0
  37. package/dist/agent/providers/scripted.js.map +1 -0
  38. package/dist/agent/providers/vertex.js +14 -3
  39. package/dist/agent/scenario-source.d.ts +19 -0
  40. package/dist/agent/scenario-source.d.ts.map +1 -0
  41. package/dist/agent/scenario-source.js +112 -0
  42. package/dist/agent/scenario-source.js.map +1 -0
  43. package/dist/agent/subagent-specs.d.ts +1 -1
  44. package/dist/agent/subagent-specs.js +1 -1
  45. package/dist/agent/subagent-specs.js.map +1 -1
  46. package/dist/agent/swarm/executor.d.ts +25 -0
  47. package/dist/agent/swarm/executor.d.ts.map +1 -1
  48. package/dist/agent/swarm/executor.js +795 -20
  49. package/dist/agent/swarm/executor.js.map +1 -1
  50. package/dist/agent/swarm/runtime-events.d.ts +11 -0
  51. package/dist/agent/swarm/runtime-events.d.ts.map +1 -0
  52. package/dist/agent/swarm/runtime-events.js +26 -0
  53. package/dist/agent/swarm/runtime-events.js.map +1 -0
  54. package/dist/agent/swarm/types.d.ts +78 -0
  55. package/dist/agent/swarm/types.d.ts.map +1 -1
  56. package/dist/agent/swarm/types.js.map +1 -1
  57. package/dist/agent/tracing.d.ts +1 -1
  58. package/dist/agent/tracing.d.ts.map +1 -1
  59. package/dist/agent/tracing.js +17 -9
  60. package/dist/agent/tracing.js.map +1 -1
  61. package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
  62. package/dist/agent/transport/create-provider-stream.js +14 -0
  63. package/dist/agent/transport/create-provider-stream.js.map +1 -1
  64. package/dist/agent/transport/stable-stringify.d.ts +2 -0
  65. package/dist/agent/transport/stable-stringify.d.ts.map +1 -0
  66. package/dist/agent/transport/stable-stringify.js +14 -0
  67. package/dist/agent/transport/stable-stringify.js.map +1 -0
  68. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  69. package/dist/agent/transport/tool-execution-bridge.js +2 -15
  70. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  71. package/dist/agent/transport/tool-safety-pipeline.d.ts +5 -1
  72. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  73. package/dist/agent/transport/tool-safety-pipeline.js +184 -36
  74. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  75. package/dist/agent/transport.d.ts +8 -0
  76. package/dist/agent/transport.d.ts.map +1 -1
  77. package/dist/agent/transport.js +1613 -68
  78. package/dist/agent/transport.js.map +1 -1
  79. package/dist/agent/types.d.ts +170 -2
  80. package/dist/agent/types.d.ts.map +1 -1
  81. package/dist/agent/types.js.map +1 -1
  82. package/dist/api/enterprise-routes.d.ts.map +1 -1
  83. package/dist/api/enterprise-routes.js +34 -3
  84. package/dist/api/enterprise-routes.js.map +1 -1
  85. package/dist/app-server/in-process-client.d.ts +32 -0
  86. package/dist/app-server/in-process-client.d.ts.map +1 -0
  87. package/dist/app-server/in-process-client.js +73 -0
  88. package/dist/app-server/in-process-client.js.map +1 -0
  89. package/dist/app-server/session-api.d.ts +36 -0
  90. package/dist/app-server/session-api.d.ts.map +1 -0
  91. package/dist/app-server/session-api.js +713 -0
  92. package/dist/app-server/session-api.js.map +1 -0
  93. package/dist/approvals/platform-action-approval.d.ts +3 -1
  94. package/dist/approvals/platform-action-approval.d.ts.map +1 -1
  95. package/dist/approvals/platform-action-approval.js +16 -9
  96. package/dist/approvals/platform-action-approval.js.map +1 -1
  97. package/dist/approvals/service-client.d.ts.map +1 -1
  98. package/dist/approvals/service-client.js +7 -7
  99. package/dist/approvals/service-client.js.map +1 -1
  100. package/dist/audit/logger.d.ts +4 -4
  101. package/dist/bootstrap/agent-creation-setup.d.ts +4 -0
  102. package/dist/bootstrap/agent-creation-setup.d.ts.map +1 -1
  103. package/dist/bootstrap/agent-creation-setup.js +3 -1
  104. package/dist/bootstrap/agent-creation-setup.js.map +1 -1
  105. package/dist/bootstrap/auth-setup.js +1 -1
  106. package/dist/bootstrap/auth-setup.js.map +1 -1
  107. package/dist/bootstrap/event-subscriptions-setup.d.ts +6 -0
  108. package/dist/bootstrap/event-subscriptions-setup.d.ts.map +1 -1
  109. package/dist/bootstrap/event-subscriptions-setup.js +26 -2
  110. package/dist/bootstrap/event-subscriptions-setup.js.map +1 -1
  111. package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
  112. package/dist/bootstrap/model-resolution-setup.js +4 -1
  113. package/dist/bootstrap/model-resolution-setup.js.map +1 -1
  114. package/dist/bootstrap/tools-setup.d.ts +2 -1
  115. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  116. package/dist/bootstrap/tools-setup.js +5 -1
  117. package/dist/bootstrap/tools-setup.js.map +1 -1
  118. package/dist/cli/args.d.ts +9 -1
  119. package/dist/cli/args.d.ts.map +1 -1
  120. package/dist/cli/args.js +130 -5
  121. package/dist/cli/args.js.map +1 -1
  122. package/dist/cli/commands/a2a.d.ts +9 -0
  123. package/dist/cli/commands/a2a.d.ts.map +1 -0
  124. package/dist/cli/commands/a2a.js +1714 -0
  125. package/dist/cli/commands/a2a.js.map +1 -0
  126. package/dist/cli/commands/agents.d.ts +16 -2
  127. package/dist/cli/commands/agents.d.ts.map +1 -1
  128. package/dist/cli/commands/agents.js +223 -35
  129. package/dist/cli/commands/agents.js.map +1 -1
  130. package/dist/cli/commands/codex.d.ts +1 -1
  131. package/dist/cli/commands/codex.d.ts.map +1 -1
  132. package/dist/cli/commands/codex.js +145 -39
  133. package/dist/cli/commands/codex.js.map +1 -1
  134. package/dist/cli/commands/context.d.ts +10 -0
  135. package/dist/cli/commands/context.d.ts.map +1 -0
  136. package/dist/cli/commands/context.js +176 -0
  137. package/dist/cli/commands/context.js.map +1 -0
  138. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  139. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  140. package/dist/cli/commands/hosted-runner.js +9 -1
  141. package/dist/cli/commands/hosted-runner.js.map +1 -1
  142. package/dist/cli/commands/modes.d.ts +8 -0
  143. package/dist/cli/commands/modes.d.ts.map +1 -0
  144. package/dist/cli/commands/modes.js +151 -0
  145. package/dist/cli/commands/modes.js.map +1 -0
  146. package/dist/cli/commands/operating-plane.d.ts +14 -0
  147. package/dist/cli/commands/operating-plane.d.ts.map +1 -0
  148. package/dist/cli/commands/operating-plane.js +160 -0
  149. package/dist/cli/commands/operating-plane.js.map +1 -0
  150. package/dist/cli/commands/run.d.ts +87 -0
  151. package/dist/cli/commands/run.d.ts.map +1 -0
  152. package/dist/cli/commands/run.js +356 -0
  153. package/dist/cli/commands/run.js.map +1 -0
  154. package/dist/cli/commands/scenario.d.ts +7 -0
  155. package/dist/cli/commands/scenario.d.ts.map +1 -0
  156. package/dist/cli/commands/scenario.js +195 -0
  157. package/dist/cli/commands/scenario.js.map +1 -0
  158. package/dist/cli/commands/skill.d.ts +7 -0
  159. package/dist/cli/commands/skill.d.ts.map +1 -0
  160. package/dist/cli/commands/skill.js +286 -0
  161. package/dist/cli/commands/skill.js.map +1 -0
  162. package/dist/cli/headless-protocol.d.ts +55 -1
  163. package/dist/cli/headless-protocol.d.ts.map +1 -1
  164. package/dist/cli/headless-protocol.js +446 -7
  165. package/dist/cli/headless-protocol.js.map +1 -1
  166. package/dist/cli/headless-runtime-selection.d.ts +38 -0
  167. package/dist/cli/headless-runtime-selection.d.ts.map +1 -0
  168. package/dist/cli/headless-runtime-selection.js +48 -0
  169. package/dist/cli/headless-runtime-selection.js.map +1 -0
  170. package/dist/cli/headless.d.ts +5 -1
  171. package/dist/cli/headless.d.ts.map +1 -1
  172. package/dist/cli/headless.js +11 -1
  173. package/dist/cli/headless.js.map +1 -1
  174. package/dist/cli/help.d.ts +3 -1
  175. package/dist/cli/help.d.ts.map +1 -1
  176. package/dist/cli/help.js +135 -30
  177. package/dist/cli/help.js.map +1 -1
  178. package/dist/cli/system-prompt.d.ts +22 -4
  179. package/dist/cli/system-prompt.d.ts.map +1 -1
  180. package/dist/cli/system-prompt.js +224 -127
  181. package/dist/cli/system-prompt.js.map +1 -1
  182. package/dist/cli-tui/commands/a2a-handlers.d.ts +7 -0
  183. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -0
  184. package/dist/cli-tui/commands/a2a-handlers.js +160 -0
  185. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -0
  186. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  187. package/dist/cli-tui/commands/command-catalog.js +15 -0
  188. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  189. package/dist/cli-tui/commands/command-registry-adapter.js +10 -1
  190. package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -1
  191. package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +1 -1
  192. package/dist/cli-tui/commands/handlers/mode-handler.js +22 -10
  193. package/dist/cli-tui/commands/handlers/mode-handler.js.map +1 -1
  194. package/dist/cli-tui/commands/mcp-handlers.d.ts.map +1 -1
  195. package/dist/cli-tui/commands/mcp-handlers.js +6 -5
  196. package/dist/cli-tui/commands/mcp-handlers.js.map +1 -1
  197. package/dist/cli-tui/commands/types.d.ts +1 -0
  198. package/dist/cli-tui/commands/types.d.ts.map +1 -1
  199. package/dist/cli-tui/commands/types.js.map +1 -1
  200. package/dist/cli-tui/commands/utility-handlers.d.ts +4 -0
  201. package/dist/cli-tui/commands/utility-handlers.d.ts.map +1 -1
  202. package/dist/cli-tui/commands/utility-handlers.js +45 -6
  203. package/dist/cli-tui/commands/utility-handlers.js.map +1 -1
  204. package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
  205. package/dist/cli-tui/run/run-shell-command.js +14 -5
  206. package/dist/cli-tui/run/run-shell-command.js.map +1 -1
  207. package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
  208. package/dist/cli-tui/run/streaming-shell-command.js +14 -5
  209. package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
  210. package/dist/cli-tui/selectors/model-selector.d.ts +1 -0
  211. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  212. package/dist/cli-tui/selectors/model-selector.js +6 -2
  213. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  214. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
  215. package/dist/cli-tui/tui-renderer/command-registry-options.js +5 -0
  216. package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
  217. package/dist/cli-tui/utils/commands/review-prompt.d.ts +1 -1
  218. package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +1 -1
  219. package/dist/cli-tui/utils/commands/review-prompt.js +8 -3
  220. package/dist/cli-tui/utils/commands/review-prompt.js.map +1 -1
  221. package/dist/cli-tui/utils/runtime-badges.d.ts +1 -0
  222. package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
  223. package/dist/cli-tui/utils/runtime-badges.js +7 -0
  224. package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
  225. package/dist/cli-tui/utils/text-formatting.d.ts +1 -0
  226. package/dist/cli-tui/utils/text-formatting.d.ts.map +1 -1
  227. package/dist/cli-tui/utils/text-formatting.js +5 -0
  228. package/dist/cli-tui/utils/text-formatting.js.map +1 -1
  229. package/dist/cli.js +49158 -26161
  230. package/dist/cli.js.map +1 -1
  231. package/dist/codex/app-server-client.d.ts +139 -0
  232. package/dist/codex/app-server-client.d.ts.map +1 -0
  233. package/dist/codex/app-server-client.js +352 -0
  234. package/dist/codex/app-server-client.js.map +1 -0
  235. package/dist/codex/compatibility.d.ts +48 -0
  236. package/dist/codex/compatibility.d.ts.map +1 -0
  237. package/dist/codex/compatibility.js +344 -0
  238. package/dist/codex/compatibility.js.map +1 -0
  239. package/dist/codex/subagent-dispatch-table.d.ts +66 -0
  240. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -0
  241. package/dist/codex/subagent-dispatch-table.js +127 -0
  242. package/dist/codex/subagent-dispatch-table.js.map +1 -0
  243. package/dist/codex/subagent-workgraph.d.ts +56 -0
  244. package/dist/codex/subagent-workgraph.d.ts.map +1 -0
  245. package/dist/codex/subagent-workgraph.js +89 -0
  246. package/dist/codex/subagent-workgraph.js.map +1 -0
  247. package/dist/config/constants.d.ts +3 -1
  248. package/dist/config/constants.d.ts.map +1 -1
  249. package/dist/config/constants.js +9 -0
  250. package/dist/config/constants.js.map +1 -1
  251. package/dist/config/feature-flags.d.ts +10 -1
  252. package/dist/config/feature-flags.d.ts.map +1 -1
  253. package/dist/config/feature-flags.js +17 -6
  254. package/dist/config/feature-flags.js.map +1 -1
  255. package/dist/config/index.d.ts +1 -1
  256. package/dist/config/index.d.ts.map +1 -1
  257. package/dist/config/index.js +1 -1
  258. package/dist/config/index.js.map +1 -1
  259. package/dist/config/toml-config.d.ts +32 -0
  260. package/dist/config/toml-config.d.ts.map +1 -1
  261. package/dist/config/toml-config.js +152 -43
  262. package/dist/config/toml-config.js.map +1 -1
  263. package/dist/connectors/service-client.d.ts.map +1 -1
  264. package/dist/connectors/service-client.js +4 -7
  265. package/dist/connectors/service-client.js.map +1 -1
  266. package/dist/context/manifest-types.d.ts +59 -0
  267. package/dist/context/manifest-types.d.ts.map +1 -0
  268. package/dist/context/manifest-types.js +2 -0
  269. package/dist/context/manifest-types.js.map +1 -0
  270. package/dist/context/manifest.d.ts +16 -0
  271. package/dist/context/manifest.d.ts.map +1 -0
  272. package/dist/context/manifest.js +503 -0
  273. package/dist/context/manifest.js.map +1 -0
  274. package/dist/db/schema.d.ts +10 -1
  275. package/dist/db/schema.d.ts.map +1 -1
  276. package/dist/db/schema.js.map +1 -1
  277. package/dist/evalops/env-aliases.d.ts +13 -0
  278. package/dist/evalops/env-aliases.d.ts.map +1 -0
  279. package/dist/evalops/env-aliases.js +60 -0
  280. package/dist/evalops/env-aliases.js.map +1 -0
  281. package/dist/evalops/managed-context.d.ts.map +1 -1
  282. package/dist/evalops/managed-context.js +28 -62
  283. package/dist/evalops/managed-context.js.map +1 -1
  284. package/dist/guardian/config.d.ts.map +1 -1
  285. package/dist/guardian/config.js +1 -0
  286. package/dist/guardian/config.js.map +1 -1
  287. package/dist/guardian/runner.d.ts +2 -0
  288. package/dist/guardian/runner.d.ts.map +1 -1
  289. package/dist/guardian/runner.js +105 -2
  290. package/dist/guardian/runner.js.map +1 -1
  291. package/dist/guardian/types.d.ts +1 -0
  292. package/dist/guardian/types.d.ts.map +1 -1
  293. package/dist/guardian/types.js.map +1 -1
  294. package/dist/index.d.ts +5 -1
  295. package/dist/index.d.ts.map +1 -1
  296. package/dist/index.js +5 -1
  297. package/dist/index.js.map +1 -1
  298. package/dist/main.d.ts.map +1 -1
  299. package/dist/main.js +267 -55
  300. package/dist/main.js.map +1 -1
  301. package/dist/mcp/config.d.ts.map +1 -1
  302. package/dist/mcp/config.js +89 -7
  303. package/dist/mcp/config.js.map +1 -1
  304. package/dist/mcp/manager.d.ts +5 -1
  305. package/dist/mcp/manager.d.ts.map +1 -1
  306. package/dist/mcp/manager.js +159 -4
  307. package/dist/mcp/manager.js.map +1 -1
  308. package/dist/mcp/platform-plugin.d.ts.map +1 -1
  309. package/dist/mcp/platform-plugin.js +9 -26
  310. package/dist/mcp/platform-plugin.js.map +1 -1
  311. package/dist/mcp/schema.d.ts +15 -0
  312. package/dist/mcp/schema.d.ts.map +1 -1
  313. package/dist/mcp/schema.js +24 -0
  314. package/dist/mcp/schema.js.map +1 -1
  315. package/dist/mcp/tool-bridge.d.ts +39 -10
  316. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  317. package/dist/mcp/tool-bridge.js +101 -24
  318. package/dist/mcp/tool-bridge.js.map +1 -1
  319. package/dist/mcp/types.d.ts +27 -0
  320. package/dist/mcp/types.d.ts.map +1 -1
  321. package/dist/mcp/types.js.map +1 -1
  322. package/dist/mcp/workspace-trust.d.ts +10 -0
  323. package/dist/mcp/workspace-trust.d.ts.map +1 -0
  324. package/dist/mcp/workspace-trust.js +295 -0
  325. package/dist/mcp/workspace-trust.js.map +1 -0
  326. package/dist/memory/service-client.d.ts +1 -0
  327. package/dist/memory/service-client.d.ts.map +1 -1
  328. package/dist/memory/service-client.js +194 -9
  329. package/dist/memory/service-client.js.map +1 -1
  330. package/dist/models/builtin.d.ts.map +1 -1
  331. package/dist/models/builtin.js +66 -25
  332. package/dist/models/builtin.js.map +1 -1
  333. package/dist/models/config-loader.d.ts +10 -10
  334. package/dist/models/config-loader.d.ts.map +1 -1
  335. package/dist/models/config-loader.js +2 -0
  336. package/dist/models/config-loader.js.map +1 -1
  337. package/dist/models/registry.d.ts +1 -0
  338. package/dist/models/registry.d.ts.map +1 -1
  339. package/dist/models/registry.js +1 -0
  340. package/dist/models/registry.js.map +1 -1
  341. package/dist/oauth/device-identity.d.ts.map +1 -1
  342. package/dist/oauth/device-identity.js +1 -3
  343. package/dist/oauth/device-identity.js.map +1 -1
  344. package/dist/oauth/evalops.d.ts.map +1 -1
  345. package/dist/oauth/evalops.js +2 -5
  346. package/dist/oauth/evalops.js.map +1 -1
  347. package/dist/opentelemetry.d.ts.map +1 -1
  348. package/dist/opentelemetry.js +12 -12
  349. package/dist/opentelemetry.js.map +1 -1
  350. package/dist/package-version.d.ts +2 -0
  351. package/dist/package-version.d.ts.map +1 -0
  352. package/dist/package-version.js +11 -0
  353. package/dist/package-version.js.map +1 -0
  354. package/dist/packages/constants.d.ts +3 -0
  355. package/dist/packages/constants.d.ts.map +1 -0
  356. package/dist/packages/constants.js +3 -0
  357. package/dist/packages/constants.js.map +1 -0
  358. package/dist/packages/inspection.d.ts.map +1 -1
  359. package/dist/packages/inspection.js +2 -1
  360. package/dist/packages/inspection.js.map +1 -1
  361. package/dist/packages/search.d.ts.map +1 -1
  362. package/dist/packages/search.js +1 -1
  363. package/dist/packages/search.js.map +1 -1
  364. package/dist/platform/a2a-capability-market.d.ts +21 -0
  365. package/dist/platform/a2a-capability-market.d.ts.map +1 -0
  366. package/dist/platform/a2a-capability-market.js +176 -0
  367. package/dist/platform/a2a-capability-market.js.map +1 -0
  368. package/dist/platform/a2a-client.d.ts +119 -0
  369. package/dist/platform/a2a-client.d.ts.map +1 -1
  370. package/dist/platform/a2a-client.js +413 -24
  371. package/dist/platform/a2a-client.js.map +1 -1
  372. package/dist/platform/a2a-fleet.d.ts +41 -0
  373. package/dist/platform/a2a-fleet.d.ts.map +1 -0
  374. package/dist/platform/a2a-fleet.js +109 -0
  375. package/dist/platform/a2a-fleet.js.map +1 -0
  376. package/dist/platform/a2a-maestro-peer.d.ts +20 -0
  377. package/dist/platform/a2a-maestro-peer.d.ts.map +1 -0
  378. package/dist/platform/a2a-maestro-peer.js +176 -0
  379. package/dist/platform/a2a-maestro-peer.js.map +1 -0
  380. package/dist/platform/a2a-peer-pairing.d.ts +107 -0
  381. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -0
  382. package/dist/platform/a2a-peer-pairing.js +489 -0
  383. package/dist/platform/a2a-peer-pairing.js.map +1 -0
  384. package/dist/platform/a2a-peer-registry.d.ts +68 -0
  385. package/dist/platform/a2a-peer-registry.d.ts.map +1 -0
  386. package/dist/platform/a2a-peer-registry.js +320 -0
  387. package/dist/platform/a2a-peer-registry.js.map +1 -0
  388. package/dist/platform/a2a-task-ledger.d.ts +86 -0
  389. package/dist/platform/a2a-task-ledger.d.ts.map +1 -0
  390. package/dist/platform/a2a-task-ledger.js +546 -0
  391. package/dist/platform/a2a-task-ledger.js.map +1 -0
  392. package/dist/platform/a2a-work-graph.d.ts +43 -0
  393. package/dist/platform/a2a-work-graph.d.ts.map +1 -0
  394. package/dist/platform/a2a-work-graph.js +267 -0
  395. package/dist/platform/a2a-work-graph.js.map +1 -0
  396. package/dist/platform/agent-registry-client.d.ts +327 -0
  397. package/dist/platform/agent-registry-client.d.ts.map +1 -0
  398. package/dist/platform/agent-registry-client.js +803 -0
  399. package/dist/platform/agent-registry-client.js.map +1 -0
  400. package/dist/platform/agent-runtime-client.d.ts +135 -1
  401. package/dist/platform/agent-runtime-client.d.ts.map +1 -1
  402. package/dist/platform/agent-runtime-client.js +467 -10
  403. package/dist/platform/agent-runtime-client.js.map +1 -1
  404. package/dist/platform/cerebro-facts-client.d.ts.map +1 -1
  405. package/dist/platform/cerebro-facts-client.js +4 -7
  406. package/dist/platform/cerebro-facts-client.js.map +1 -1
  407. package/dist/platform/client.d.ts.map +1 -1
  408. package/dist/platform/client.js +3 -12
  409. package/dist/platform/client.js.map +1 -1
  410. package/dist/platform/core-services.d.ts +68 -0
  411. package/dist/platform/core-services.d.ts.map +1 -1
  412. package/dist/platform/core-services.js +68 -0
  413. package/dist/platform/core-services.js.map +1 -1
  414. package/dist/platform/fermata-eval-client.d.ts +195 -0
  415. package/dist/platform/fermata-eval-client.d.ts.map +1 -0
  416. package/dist/platform/fermata-eval-client.js +146 -0
  417. package/dist/platform/fermata-eval-client.js.map +1 -0
  418. package/dist/platform/fermata-scenario-suite.d.ts +99 -0
  419. package/dist/platform/fermata-scenario-suite.d.ts.map +1 -0
  420. package/dist/platform/fermata-scenario-suite.js +459 -0
  421. package/dist/platform/fermata-scenario-suite.js.map +1 -0
  422. package/dist/platform/maestro-timeline-client.d.ts.map +1 -1
  423. package/dist/platform/maestro-timeline-client.js +5 -11
  424. package/dist/platform/maestro-timeline-client.js.map +1 -1
  425. package/dist/platform/operating-plane-client.d.ts +156 -0
  426. package/dist/platform/operating-plane-client.d.ts.map +1 -0
  427. package/dist/platform/operating-plane-client.js +131 -0
  428. package/dist/platform/operating-plane-client.js.map +1 -0
  429. package/dist/platform/operating-plane-summary.d.ts +47 -0
  430. package/dist/platform/operating-plane-summary.d.ts.map +1 -0
  431. package/dist/platform/operating-plane-summary.js +209 -0
  432. package/dist/platform/operating-plane-summary.js.map +1 -0
  433. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  434. package/dist/platform/tool-execution-client.js +4 -11
  435. package/dist/platform/tool-execution-client.js.map +1 -1
  436. package/dist/prompts/service-client.d.ts.map +1 -1
  437. package/dist/prompts/service-client.js +3 -5
  438. package/dist/prompts/service-client.js.map +1 -1
  439. package/dist/prompts/system-prompt.d.ts +3 -0
  440. package/dist/prompts/system-prompt.d.ts.map +1 -1
  441. package/dist/prompts/system-prompt.js +13 -3
  442. package/dist/prompts/system-prompt.js.map +1 -1
  443. package/dist/prompts/types.d.ts +2 -0
  444. package/dist/prompts/types.d.ts.map +1 -1
  445. package/dist/prompts/types.js.map +1 -1
  446. package/dist/providers/api-keys.d.ts +1 -1
  447. package/dist/providers/api-keys.d.ts.map +1 -1
  448. package/dist/providers/api-keys.js +2 -1
  449. package/dist/providers/api-keys.js.map +1 -1
  450. package/dist/providers/auth.d.ts.map +1 -1
  451. package/dist/providers/auth.js +48 -25
  452. package/dist/providers/auth.js.map +1 -1
  453. package/dist/remote-runner/attach-client.d.ts.map +1 -1
  454. package/dist/remote-runner/attach-client.js +1 -0
  455. package/dist/remote-runner/attach-client.js.map +1 -1
  456. package/dist/remote-runner/client.d.ts.map +1 -1
  457. package/dist/remote-runner/client.js +4 -7
  458. package/dist/remote-runner/client.js.map +1 -1
  459. package/dist/rpc/rpc-types.d.ts.map +1 -1
  460. package/dist/rpc/rpc-types.js +1 -0
  461. package/dist/rpc/rpc-types.js.map +1 -1
  462. package/dist/safety/action-firewall.d.ts.map +1 -1
  463. package/dist/safety/action-firewall.js +69 -6
  464. package/dist/safety/action-firewall.js.map +1 -1
  465. package/dist/safety/attack-patterns.d.ts.map +1 -1
  466. package/dist/safety/attack-patterns.js +31 -14
  467. package/dist/safety/attack-patterns.js.map +1 -1
  468. package/dist/safety/bash-parser.d.ts.map +1 -1
  469. package/dist/safety/bash-parser.js +4 -3
  470. package/dist/safety/bash-parser.js.map +1 -1
  471. package/dist/safety/execpolicy.d.ts +15 -3
  472. package/dist/safety/execpolicy.d.ts.map +1 -1
  473. package/dist/safety/execpolicy.js +248 -37
  474. package/dist/safety/execpolicy.js.map +1 -1
  475. package/dist/safety/governance-service-client.d.ts.map +1 -1
  476. package/dist/safety/governance-service-client.js +4 -7
  477. package/dist/safety/governance-service-client.js.map +1 -1
  478. package/dist/safety/guarded-files.d.ts +34 -0
  479. package/dist/safety/guarded-files.d.ts.map +1 -0
  480. package/dist/safety/guarded-files.js +372 -0
  481. package/dist/safety/guarded-files.js.map +1 -0
  482. package/dist/safety/loop-detector.d.ts.map +1 -1
  483. package/dist/safety/loop-detector.js +6 -1
  484. package/dist/safety/loop-detector.js.map +1 -1
  485. package/dist/safety/permission-profile.d.ts +47 -0
  486. package/dist/safety/permission-profile.d.ts.map +1 -0
  487. package/dist/safety/permission-profile.js +349 -0
  488. package/dist/safety/permission-profile.js.map +1 -0
  489. package/dist/safety/safety-middleware.d.ts +5 -1
  490. package/dist/safety/safety-middleware.d.ts.map +1 -1
  491. package/dist/safety/safety-middleware.js +3 -2
  492. package/dist/safety/safety-middleware.js.map +1 -1
  493. package/dist/safety/suspicious-patterns.d.ts.map +1 -1
  494. package/dist/safety/suspicious-patterns.js +12 -7
  495. package/dist/safety/suspicious-patterns.js.map +1 -1
  496. package/dist/safety/tool-categorization.js +1 -1
  497. package/dist/safety/tool-categorization.js.map +1 -1
  498. package/dist/safety/validators/path-policy-validator.d.ts.map +1 -1
  499. package/dist/safety/validators/path-policy-validator.js +7 -0
  500. package/dist/safety/validators/path-policy-validator.js.map +1 -1
  501. package/dist/sandbox/index.d.ts +6 -1
  502. package/dist/sandbox/index.d.ts.map +1 -1
  503. package/dist/sandbox/index.js +30 -4
  504. package/dist/sandbox/index.js.map +1 -1
  505. package/dist/sandbox/native-sandbox.d.ts +3 -0
  506. package/dist/sandbox/native-sandbox.d.ts.map +1 -1
  507. package/dist/sandbox/native-sandbox.js +139 -18
  508. package/dist/sandbox/native-sandbox.js.map +1 -1
  509. package/dist/sentry.d.ts +17 -0
  510. package/dist/sentry.d.ts.map +1 -0
  511. package/dist/sentry.js +91 -0
  512. package/dist/sentry.js.map +1 -0
  513. package/dist/server/agent-runtime-ledger.d.ts +141 -0
  514. package/dist/server/agent-runtime-ledger.d.ts.map +1 -0
  515. package/dist/server/agent-runtime-ledger.js +334 -0
  516. package/dist/server/agent-runtime-ledger.js.map +1 -0
  517. package/dist/server/agent-trajectory-inspection.d.ts +104 -0
  518. package/dist/server/agent-trajectory-inspection.d.ts.map +1 -0
  519. package/dist/server/agent-trajectory-inspection.js +168 -0
  520. package/dist/server/agent-trajectory-inspection.js.map +1 -0
  521. package/dist/server/agent-trajectory-replay.d.ts +56 -0
  522. package/dist/server/agent-trajectory-replay.d.ts.map +1 -0
  523. package/dist/server/agent-trajectory-replay.js +214 -0
  524. package/dist/server/agent-trajectory-replay.js.map +1 -0
  525. package/dist/server/agent-trajectory-scenarios.d.ts +109 -0
  526. package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -0
  527. package/dist/server/agent-trajectory-scenarios.js +822 -0
  528. package/dist/server/agent-trajectory-scenarios.js.map +1 -0
  529. package/dist/server/agent-trajectory-scorers.d.ts +61 -0
  530. package/dist/server/agent-trajectory-scorers.d.ts.map +1 -0
  531. package/dist/server/agent-trajectory-scorers.js +162 -0
  532. package/dist/server/agent-trajectory-scorers.js.map +1 -0
  533. package/dist/server/agent-trajectory-validation.d.ts +7 -0
  534. package/dist/server/agent-trajectory-validation.d.ts.map +1 -0
  535. package/dist/server/agent-trajectory-validation.js +101 -0
  536. package/dist/server/agent-trajectory-validation.js.map +1 -0
  537. package/dist/server/agent-trajectory.d.ts +50 -0
  538. package/dist/server/agent-trajectory.d.ts.map +1 -0
  539. package/dist/server/agent-trajectory.js +159 -0
  540. package/dist/server/agent-trajectory.js.map +1 -0
  541. package/dist/server/app-context.d.ts +18 -0
  542. package/dist/server/app-context.d.ts.map +1 -1
  543. package/dist/server/app-context.js.map +1 -1
  544. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  545. package/dist/server/handlers/headless-sessions.js +64 -27
  546. package/dist/server/handlers/headless-sessions.js.map +1 -1
  547. package/dist/server/handlers/health.d.ts +6 -0
  548. package/dist/server/handlers/health.d.ts.map +1 -1
  549. package/dist/server/handlers/health.js +6 -0
  550. package/dist/server/handlers/health.js.map +1 -1
  551. package/dist/server/handlers/hosted-runner-drain.d.ts +69 -1
  552. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  553. package/dist/server/handlers/hosted-runner-drain.js +309 -18
  554. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  555. package/dist/server/handlers/hosted-runner-identity.d.ts +16 -0
  556. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  557. package/dist/server/handlers/hosted-runner-identity.js +43 -0
  558. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  559. package/dist/server/handlers/mode.d.ts.map +1 -1
  560. package/dist/server/handlers/mode.js +3 -1
  561. package/dist/server/handlers/mode.js.map +1 -1
  562. package/dist/server/handlers/pending-requests.d.ts.map +1 -1
  563. package/dist/server/handlers/pending-requests.js +336 -51
  564. package/dist/server/handlers/pending-requests.js.map +1 -1
  565. package/dist/server/handlers/platform-a2a-push.d.ts +6 -0
  566. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -0
  567. package/dist/server/handlers/platform-a2a-push.js +136 -0
  568. package/dist/server/handlers/platform-a2a-push.js.map +1 -0
  569. package/dist/server/handlers/sessions.d.ts.map +1 -1
  570. package/dist/server/handlers/sessions.js +21 -1
  571. package/dist/server/handlers/sessions.js.map +1 -1
  572. package/dist/server/headless-runtime-service.d.ts +9 -2
  573. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  574. package/dist/server/headless-runtime-service.js +39 -0
  575. package/dist/server/headless-runtime-service.js.map +1 -1
  576. package/dist/server/hosted-agent-runtime-progress.d.ts +144 -0
  577. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -0
  578. package/dist/server/hosted-agent-runtime-progress.js +1650 -0
  579. package/dist/server/hosted-agent-runtime-progress.js.map +1 -0
  580. package/dist/server/hosted-runner-lease.d.ts +41 -0
  581. package/dist/server/hosted-runner-lease.d.ts.map +1 -0
  582. package/dist/server/hosted-runner-lease.js +140 -0
  583. package/dist/server/hosted-runner-lease.js.map +1 -0
  584. package/dist/server/hosted-session-manager.d.ts +16 -8
  585. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  586. package/dist/server/hosted-session-manager.js +98 -76
  587. package/dist/server/hosted-session-manager.js.map +1 -1
  588. package/dist/server/junit-xml.d.ts +2 -0
  589. package/dist/server/junit-xml.d.ts.map +1 -0
  590. package/dist/server/junit-xml.js +9 -0
  591. package/dist/server/junit-xml.js.map +1 -0
  592. package/dist/server/routes.d.ts.map +1 -1
  593. package/dist/server/routes.js +6 -0
  594. package/dist/server/routes.js.map +1 -1
  595. package/dist/server/scenario-recorder.d.ts +56 -0
  596. package/dist/server/scenario-recorder.d.ts.map +1 -0
  597. package/dist/server/scenario-recorder.js +109 -0
  598. package/dist/server/scenario-recorder.js.map +1 -0
  599. package/dist/server/scripted-scenario-runner.d.ts +46 -0
  600. package/dist/server/scripted-scenario-runner.d.ts.map +1 -0
  601. package/dist/server/scripted-scenario-runner.js +190 -0
  602. package/dist/server/scripted-scenario-runner.js.map +1 -0
  603. package/dist/server/server-middlewares.d.ts +6 -2
  604. package/dist/server/server-middlewares.d.ts.map +1 -1
  605. package/dist/server/server-middlewares.js +8 -2
  606. package/dist/server/server-middlewares.js.map +1 -1
  607. package/dist/server/server-request-manager.d.ts +9 -1
  608. package/dist/server/server-request-manager.d.ts.map +1 -1
  609. package/dist/server/server-request-manager.js +49 -4
  610. package/dist/server/server-request-manager.js.map +1 -1
  611. package/dist/services/intelligent-router/service.d.ts +2 -0
  612. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  613. package/dist/services/intelligent-router/service.js +4 -0
  614. package/dist/services/intelligent-router/service.js.map +1 -1
  615. package/dist/services/service-authority.d.ts +25 -0
  616. package/dist/services/service-authority.d.ts.map +1 -0
  617. package/dist/services/service-authority.js +143 -0
  618. package/dist/services/service-authority.js.map +1 -0
  619. package/dist/services/workspace-config/service.d.ts +2 -0
  620. package/dist/services/workspace-config/service.d.ts.map +1 -1
  621. package/dist/services/workspace-config/service.js +4 -0
  622. package/dist/services/workspace-config/service.js.map +1 -1
  623. package/dist/session/manager.d.ts +8 -2
  624. package/dist/session/manager.d.ts.map +1 -1
  625. package/dist/session/manager.js +19 -4
  626. package/dist/session/manager.js.map +1 -1
  627. package/dist/session/session-branch.d.ts.map +1 -1
  628. package/dist/session/session-branch.js +5 -1
  629. package/dist/session/session-branch.js.map +1 -1
  630. package/dist/session/session-catalog.d.ts +7 -2
  631. package/dist/session/session-catalog.d.ts.map +1 -1
  632. package/dist/session/session-catalog.js +13 -2
  633. package/dist/session/session-catalog.js.map +1 -1
  634. package/dist/session/session-context.d.ts +6 -2
  635. package/dist/session/session-context.d.ts.map +1 -1
  636. package/dist/session/session-context.js +44 -4
  637. package/dist/session/session-context.js.map +1 -1
  638. package/dist/session/session-graph-projection.d.ts +32 -0
  639. package/dist/session/session-graph-projection.d.ts.map +1 -0
  640. package/dist/session/session-graph-projection.js +133 -0
  641. package/dist/session/session-graph-projection.js.map +1 -0
  642. package/dist/session/types.d.ts +18 -0
  643. package/dist/session/types.d.ts.map +1 -1
  644. package/dist/session/types.js +8 -0
  645. package/dist/session/types.js.map +1 -1
  646. package/dist/session/wire-format.generated.d.ts +3 -0
  647. package/dist/session/wire-format.generated.d.ts.map +1 -1
  648. package/dist/session/wire-format.generated.js +20 -0
  649. package/dist/session/wire-format.generated.js.map +1 -1
  650. package/dist/skills/eval-harness.d.ts +38 -0
  651. package/dist/skills/eval-harness.d.ts.map +1 -0
  652. package/dist/skills/eval-harness.js +112 -0
  653. package/dist/skills/eval-harness.js.map +1 -0
  654. package/dist/skills/index.d.ts +5 -1
  655. package/dist/skills/index.d.ts.map +1 -1
  656. package/dist/skills/index.js +5 -1
  657. package/dist/skills/index.js.map +1 -1
  658. package/dist/skills/linter.d.ts +36 -0
  659. package/dist/skills/linter.d.ts.map +1 -0
  660. package/dist/skills/linter.js +398 -0
  661. package/dist/skills/linter.js.map +1 -0
  662. package/dist/skills/loader.d.ts +36 -6
  663. package/dist/skills/loader.d.ts.map +1 -1
  664. package/dist/skills/loader.js +169 -86
  665. package/dist/skills/loader.js.map +1 -1
  666. package/dist/skills/package-contract.d.ts +45 -0
  667. package/dist/skills/package-contract.d.ts.map +1 -0
  668. package/dist/skills/package-contract.js +153 -0
  669. package/dist/skills/package-contract.js.map +1 -0
  670. package/dist/skills/runtime-activation.d.ts +68 -0
  671. package/dist/skills/runtime-activation.d.ts.map +1 -0
  672. package/dist/skills/runtime-activation.js +228 -0
  673. package/dist/skills/runtime-activation.js.map +1 -0
  674. package/dist/skills/service-client.d.ts.map +1 -1
  675. package/dist/skills/service-client.js +3 -4
  676. package/dist/skills/service-client.js.map +1 -1
  677. package/dist/skills/tool.d.ts.map +1 -1
  678. package/dist/skills/tool.js +2 -0
  679. package/dist/skills/tool.js.map +1 -1
  680. package/dist/skills/types.d.ts +14 -0
  681. package/dist/skills/types.d.ts.map +1 -1
  682. package/dist/skills/types.js.map +1 -1
  683. package/dist/telemetry/agent-operating-plane-context.d.ts +24 -0
  684. package/dist/telemetry/agent-operating-plane-context.d.ts.map +1 -0
  685. package/dist/telemetry/agent-operating-plane-context.js +54 -0
  686. package/dist/telemetry/agent-operating-plane-context.js.map +1 -0
  687. package/dist/telemetry/beacon.d.ts +24 -0
  688. package/dist/telemetry/beacon.d.ts.map +1 -0
  689. package/dist/telemetry/beacon.js +115 -0
  690. package/dist/telemetry/beacon.js.map +1 -0
  691. package/dist/telemetry/cli-command-aggregator.d.ts +36 -0
  692. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -0
  693. package/dist/telemetry/cli-command-aggregator.js +251 -0
  694. package/dist/telemetry/cli-command-aggregator.js.map +1 -0
  695. package/dist/telemetry/cli-startup.d.ts +21 -0
  696. package/dist/telemetry/cli-startup.d.ts.map +1 -0
  697. package/dist/telemetry/cli-startup.js +83 -0
  698. package/dist/telemetry/cli-startup.js.map +1 -0
  699. package/dist/telemetry/disablement.d.ts +13 -0
  700. package/dist/telemetry/disablement.d.ts.map +1 -0
  701. package/dist/telemetry/disablement.js +19 -0
  702. package/dist/telemetry/disablement.js.map +1 -0
  703. package/dist/telemetry/index.d.ts +6 -2
  704. package/dist/telemetry/index.d.ts.map +1 -1
  705. package/dist/telemetry/index.js +6 -2
  706. package/dist/telemetry/index.js.map +1 -1
  707. package/dist/telemetry/maestro-event-bus.d.ts +52 -0
  708. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  709. package/dist/telemetry/maestro-event-bus.js +179 -3
  710. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  711. package/dist/telemetry/maestro-event-catalog.d.ts +3 -1
  712. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  713. package/dist/telemetry/maestro-event-catalog.js +2 -0
  714. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  715. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  716. package/dist/telemetry/maestro-platform-replay-fixture.js +74 -9
  717. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  718. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +1 -1
  719. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -1
  720. package/dist/telemetry/maestro-publisher-conformance-fixture.js +46 -11
  721. package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
  722. package/dist/telemetry/mcp-beacon.d.ts +20 -0
  723. package/dist/telemetry/mcp-beacon.d.ts.map +1 -0
  724. package/dist/telemetry/mcp-beacon.js +54 -0
  725. package/dist/telemetry/mcp-beacon.js.map +1 -0
  726. package/dist/telemetry/metadata-normalization.d.ts +7 -0
  727. package/dist/telemetry/metadata-normalization.d.ts.map +1 -0
  728. package/dist/telemetry/metadata-normalization.js +189 -0
  729. package/dist/telemetry/metadata-normalization.js.map +1 -0
  730. package/dist/telemetry/meter-service-client.d.ts.map +1 -1
  731. package/dist/telemetry/meter-service-client.js +5 -10
  732. package/dist/telemetry/meter-service-client.js.map +1 -1
  733. package/dist/telemetry/metrics.d.ts +123 -0
  734. package/dist/telemetry/metrics.d.ts.map +1 -0
  735. package/dist/telemetry/metrics.js +184 -0
  736. package/dist/telemetry/metrics.js.map +1 -0
  737. package/dist/telemetry/turn-tracker.d.ts +1 -0
  738. package/dist/telemetry/turn-tracker.d.ts.map +1 -1
  739. package/dist/telemetry/turn-tracker.js +22 -1
  740. package/dist/telemetry/turn-tracker.js.map +1 -1
  741. package/dist/telemetry/wide-events.d.ts +31 -1
  742. package/dist/telemetry/wide-events.d.ts.map +1 -1
  743. package/dist/telemetry/wide-events.js +229 -1
  744. package/dist/telemetry/wide-events.js.map +1 -1
  745. package/dist/telemetry.d.ts +39 -3
  746. package/dist/telemetry.d.ts.map +1 -1
  747. package/dist/telemetry.js +160 -3
  748. package/dist/telemetry.js.map +1 -1
  749. package/dist/testing/test-verification-hook.d.ts.map +1 -1
  750. package/dist/testing/test-verification-hook.js +34 -21
  751. package/dist/testing/test-verification-hook.js.map +1 -1
  752. package/dist/tools/apply-patch-parser.d.ts +26 -0
  753. package/dist/tools/apply-patch-parser.d.ts.map +1 -0
  754. package/dist/tools/apply-patch-parser.js +146 -0
  755. package/dist/tools/apply-patch-parser.js.map +1 -0
  756. package/dist/tools/apply-patch.d.ts +42 -0
  757. package/dist/tools/apply-patch.d.ts.map +1 -0
  758. package/dist/tools/apply-patch.js +648 -0
  759. package/dist/tools/apply-patch.js.map +1 -0
  760. package/dist/tools/ask-user.d.ts +1 -0
  761. package/dist/tools/ask-user.d.ts.map +1 -1
  762. package/dist/tools/background/tool-handler.d.ts +1 -0
  763. package/dist/tools/background/tool-handler.d.ts.map +1 -1
  764. package/dist/tools/bash.d.ts +1 -0
  765. package/dist/tools/bash.d.ts.map +1 -1
  766. package/dist/tools/codesearch.d.ts +1 -0
  767. package/dist/tools/codesearch.d.ts.map +1 -1
  768. package/dist/tools/conductor-client.d.ts +1 -0
  769. package/dist/tools/conductor-client.d.ts.map +1 -1
  770. package/dist/tools/conductor-client.js +63 -0
  771. package/dist/tools/conductor-client.js.map +1 -1
  772. package/dist/tools/diff.d.ts +1 -0
  773. package/dist/tools/diff.d.ts.map +1 -1
  774. package/dist/tools/edit.d.ts +1 -0
  775. package/dist/tools/edit.d.ts.map +1 -1
  776. package/dist/tools/extract-document.d.ts +1 -0
  777. package/dist/tools/extract-document.d.ts.map +1 -1
  778. package/dist/tools/find.d.ts +10 -0
  779. package/dist/tools/find.d.ts.map +1 -1
  780. package/dist/tools/find.js +236 -27
  781. package/dist/tools/find.js.map +1 -1
  782. package/dist/tools/gh.d.ts +3 -0
  783. package/dist/tools/gh.d.ts.map +1 -1
  784. package/dist/tools/index.d.ts +50 -0
  785. package/dist/tools/index.d.ts.map +1 -1
  786. package/dist/tools/index.js +4 -0
  787. package/dist/tools/index.js.map +1 -1
  788. package/dist/tools/list.d.ts +1 -0
  789. package/dist/tools/list.d.ts.map +1 -1
  790. package/dist/tools/notebook.d.ts +1 -0
  791. package/dist/tools/notebook.d.ts.map +1 -1
  792. package/dist/tools/oracle.d.ts +1 -0
  793. package/dist/tools/oracle.d.ts.map +1 -1
  794. package/dist/tools/oracle.js +17 -32
  795. package/dist/tools/oracle.js.map +1 -1
  796. package/dist/tools/parallel-execution.d.ts +13 -2
  797. package/dist/tools/parallel-execution.d.ts.map +1 -1
  798. package/dist/tools/parallel-execution.js +178 -7
  799. package/dist/tools/parallel-execution.js.map +1 -1
  800. package/dist/tools/parallel-ripgrep.d.ts +1 -0
  801. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  802. package/dist/tools/pipeline.d.ts +4 -0
  803. package/dist/tools/pipeline.d.ts.map +1 -1
  804. package/dist/tools/read.d.ts +1 -0
  805. package/dist/tools/read.d.ts.map +1 -1
  806. package/dist/tools/search.d.ts +1 -0
  807. package/dist/tools/search.d.ts.map +1 -1
  808. package/dist/tools/status.d.ts +1 -0
  809. package/dist/tools/status.d.ts.map +1 -1
  810. package/dist/tools/todo.d.ts +1 -0
  811. package/dist/tools/todo.d.ts.map +1 -1
  812. package/dist/tools/tool-dsl.d.ts +5 -1
  813. package/dist/tools/tool-dsl.d.ts.map +1 -1
  814. package/dist/tools/tool-dsl.js +1 -0
  815. package/dist/tools/tool-dsl.js.map +1 -1
  816. package/dist/tools/tool-result-cache.d.ts.map +1 -1
  817. package/dist/tools/tool-result-cache.js +1 -0
  818. package/dist/tools/tool-result-cache.js.map +1 -1
  819. package/dist/tools/typebox-tool.d.ts.map +1 -1
  820. package/dist/tools/typebox-tool.js +3 -0
  821. package/dist/tools/typebox-tool.js.map +1 -1
  822. package/dist/tools/webfetch.d.ts +1 -0
  823. package/dist/tools/webfetch.d.ts.map +1 -1
  824. package/dist/tools/websearch.d.ts +1 -0
  825. package/dist/tools/websearch.d.ts.map +1 -1
  826. package/dist/tools/write.d.ts +1 -0
  827. package/dist/tools/write.d.ts.map +1 -1
  828. package/dist/utils/abort-error.d.ts +2 -0
  829. package/dist/utils/abort-error.d.ts.map +1 -0
  830. package/dist/utils/abort-error.js +7 -0
  831. package/dist/utils/abort-error.js.map +1 -0
  832. package/dist/utils/downstream.d.ts.map +1 -1
  833. package/dist/utils/downstream.js +4 -0
  834. package/dist/utils/downstream.js.map +1 -1
  835. package/dist/utils/logger.d.ts +3 -0
  836. package/dist/utils/logger.d.ts.map +1 -1
  837. package/dist/utils/logger.js +14 -3
  838. package/dist/utils/logger.js.map +1 -1
  839. package/dist/utils/path-containment.d.ts +2 -0
  840. package/dist/utils/path-containment.d.ts.map +1 -0
  841. package/dist/utils/path-containment.js +14 -0
  842. package/dist/utils/path-containment.js.map +1 -0
  843. package/dist/utils/prompt-safe-text.d.ts +7 -0
  844. package/dist/utils/prompt-safe-text.d.ts.map +1 -0
  845. package/dist/utils/prompt-safe-text.js +44 -0
  846. package/dist/utils/prompt-safe-text.js.map +1 -0
  847. package/dist/version.json +2 -2
  848. package/dist/web-server.d.ts.map +1 -1
  849. package/dist/web-server.js +32 -7
  850. package/dist/web-server.js.map +1 -1
  851. package/dist/workspace/root-resolver.d.ts +4 -1
  852. package/dist/workspace/root-resolver.d.ts.map +1 -1
  853. package/dist/workspace/root-resolver.js +16 -6
  854. package/dist/workspace/root-resolver.js.map +1 -1
  855. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts +8 -0
  856. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts.map +1 -0
  857. package/node_modules/@evalops/contracts/dist/advisor-effort.js +35 -0
  858. package/node_modules/@evalops/contracts/dist/advisor-effort.js.map +1 -0
  859. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts +10 -0
  860. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts.map +1 -0
  861. package/node_modules/@evalops/contracts/dist/delegation-prompt.js +48 -0
  862. package/node_modules/@evalops/contracts/dist/delegation-prompt.js.map +1 -0
  863. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts +20 -0
  864. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts.map +1 -0
  865. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js +147 -0
  866. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js.map +1 -0
  867. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts +2 -0
  868. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts.map +1 -1
  869. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js +1 -0
  870. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js.map +1 -1
  871. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +280 -5
  872. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
  873. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +36 -1
  874. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
  875. package/node_modules/@evalops/contracts/dist/index.d.ts +15 -1
  876. package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  877. package/node_modules/@evalops/contracts/dist/index.js +6 -0
  878. package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  879. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +593 -0
  880. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -0
  881. package/node_modules/@evalops/contracts/dist/maestro-app-server.js +218 -0
  882. package/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -0
  883. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +91 -0
  884. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
  885. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +92 -61
  886. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
  887. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +3 -0
  888. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -1
  889. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts +28 -0
  890. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts.map +1 -0
  891. package/node_modules/@evalops/contracts/dist/runtime-constraints.js +71 -0
  892. package/node_modules/@evalops/contracts/dist/runtime-constraints.js.map +1 -0
  893. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +7 -0
  894. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -1
  895. package/node_modules/@evalops/contracts/dist/runtime-server-request.js +2 -0
  896. package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -1
  897. package/node_modules/@evalops/contracts/dist/scenario.d.ts +191 -0
  898. package/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -0
  899. package/node_modules/@evalops/contracts/dist/scenario.js +4 -0
  900. package/node_modules/@evalops/contracts/dist/scenario.js.map +1 -0
  901. package/node_modules/@evalops/contracts/dist/schemas.d.ts +17 -3
  902. package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
  903. package/node_modules/@evalops/contracts/dist/schemas.js +16 -0
  904. package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
  905. package/node_modules/@evalops/contracts/package.json +1 -1
  906. package/node_modules/@evalops/tui/package.json +1 -1
  907. package/package.json +41 -7
  908. package/skills/incident-triage/SKILL.md +40 -0
  909. package/skills/incident-triage/mcp.json +14 -0
  910. package/skills/incident-triage/reference/triage.md +20 -0
  911. package/skills/incident-triage/toolbox/incident-timeline +22 -0
  912. package/skills/incident-triage/toolbox/incident-timeline.cmd +16 -0
  913. package/skills/pr-review/SKILL.md +40 -0
  914. package/skills/pr-review/mcp.json +14 -0
  915. package/skills/pr-review/reference/rubric.md +20 -0
  916. package/skills/pr-review/toolbox/review-summary +20 -0
  917. package/skills/pr-review/toolbox/review-summary.cmd +14 -0
  918. package/skills/release-verification/SKILL.md +40 -0
  919. package/skills/release-verification/mcp.json +15 -0
  920. package/skills/release-verification/reference/checklist.md +21 -0
  921. package/skills/release-verification/toolbox/release-readiness +18 -0
  922. package/skills/release-verification/toolbox/release-readiness.cmd +12 -0
package/dist/telemetry.js CHANGED
@@ -3,11 +3,15 @@ import { dirname } from "node:path";
3
3
  import { SpanStatusCode } from "@opentelemetry/api";
4
4
  import { PATHS } from "./config/constants.js";
5
5
  import { getTelemetryTracer, isOpenTelemetryEnabled, } from "./opentelemetry.js";
6
+ import { isInternalTelemetryDisabled } from "./telemetry/disablement.js";
6
7
  import { mirrorTelemetryToMaestroEventBus, resolveMaestroEventBusConfig, } from "./telemetry/maestro-event-bus.js";
8
+ import { normalizeTelemetryMetadataInputs } from "./telemetry/metadata-normalization.js";
7
9
  import { hasRemoteMeterDestination, mirrorCanonicalTurnEventToMeter, } from "./telemetry/meter-service-client.js";
10
+ import { recordCompactionMetric, recordSubagentDispatchMetric, recordToolInvocationMetric, } from "./telemetry/metrics.js";
8
11
  import { setDefaultTelemetryRecorder, } from "./telemetry/wide-events.js";
9
12
  import { resolveEnvPath } from "./utils/path-expansion.js";
10
13
  import { sanitizeOptionalWithStaticMask, sanitizeWithStaticMask, } from "./utils/secret-redactor.js";
14
+ export { splitTelemetryMetadata } from "./telemetry/metadata-normalization.js";
11
15
  const telemetryFlag = process.env.MAESTRO_TELEMETRY ?? process.env.PLAYWRIGHT_TELEMETRY;
12
16
  const telemetryFileEnv = resolveEnvPath(process.env.MAESTRO_TELEMETRY_FILE) ??
13
17
  resolveEnvPath(process.env.PLAYWRIGHT_TELEMETRY_FILE);
@@ -84,6 +88,32 @@ export function setTelemetryRuntimeOverride(enabled, reason) {
84
88
  telemetryOverrideReason = reason;
85
89
  telemetryEnabled = enabled === null ? initialTelemetryEnabled : enabled;
86
90
  }
91
+ function normalizeTelemetryEventMetadata(event) {
92
+ if (!("metadata" in event) && !("sensitiveMetadata" in event)) {
93
+ return event;
94
+ }
95
+ const existingMetadata = "metadata" in event ? stringRecord(event.metadata) : undefined;
96
+ const existingSensitiveMetadata = "sensitiveMetadata" in event
97
+ ? stringRecord(event.sensitiveMetadata)
98
+ : undefined;
99
+ const { metadata, sensitiveMetadata } = normalizeTelemetryMetadataInputs(existingMetadata, existingSensitiveMetadata);
100
+ const normalized = { ...event };
101
+ if ("metadata" in normalized) {
102
+ if (metadata) {
103
+ normalized.metadata = metadata;
104
+ }
105
+ else {
106
+ delete normalized.metadata;
107
+ }
108
+ }
109
+ if (sensitiveMetadata) {
110
+ normalized.sensitiveMetadata = sensitiveMetadata;
111
+ }
112
+ else {
113
+ delete normalized.sensitiveMetadata;
114
+ }
115
+ return normalized;
116
+ }
87
117
  function isCanonicalTurnTelemetryEvent(event) {
88
118
  return (event.type === "canonical-turn" && "model" in event && "tokens" in event);
89
119
  }
@@ -195,6 +225,17 @@ function recordOpenTelemetrySpan(event) {
195
225
  }
196
226
  span.setStatus({ code: SpanStatusCode.OK });
197
227
  break;
228
+ case "staged-rollout-surface":
229
+ span.setAttributes({
230
+ "maestro.staged_rollout.event": event.event,
231
+ "maestro.staged_rollout.surface_id": event.surfaceId,
232
+ "maestro.staged_rollout.surface_type": event.surfaceType,
233
+ });
234
+ if (event.metadata?.owner) {
235
+ span.setAttribute("maestro.staged_rollout.owner", String(event.metadata.owner));
236
+ }
237
+ span.setStatus({ code: SpanStatusCode.OK });
238
+ break;
198
239
  case "sandbox-violation":
199
240
  span.setAttributes({
200
241
  "maestro.sandbox.event": event.event,
@@ -211,6 +252,22 @@ function recordOpenTelemetrySpan(event) {
211
252
  : SpanStatusCode.OK,
212
253
  });
213
254
  break;
255
+ case "subagent-dispatch":
256
+ span.setAttributes({
257
+ "maestro.subagent.event": event.event,
258
+ "maestro.subagent.mode": event.mode,
259
+ "maestro.subagent.type": event.subagentType,
260
+ "maestro.subagent.reasoning_effort": event.reasoningEffort,
261
+ "maestro.subagent.source": event.source ?? "unknown",
262
+ "maestro.subagent.success": event.success,
263
+ "maestro.subagent.latency_ms": event.latencyMs,
264
+ "llm.model.id": event.model,
265
+ "llm.model.provider": event.provider,
266
+ });
267
+ span.setStatus({
268
+ code: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,
269
+ });
270
+ break;
214
271
  case "canonical-turn": {
215
272
  const canonicalTurn = isCanonicalTurnTelemetryEvent(event)
216
273
  ? event
@@ -256,11 +313,64 @@ function recordOpenTelemetrySpan(event) {
256
313
  // Never let tracing failures affect runtime
257
314
  }
258
315
  }
316
+ function recordOpenTelemetryMetric(event) {
317
+ try {
318
+ switch (event.type) {
319
+ case "tool-execution":
320
+ recordToolInvocationMetric({
321
+ toolName: event.toolName,
322
+ durationMs: event.durationMs,
323
+ success: event.success,
324
+ agentRunId: metadataString(event.metadata, [
325
+ "agentRunId",
326
+ "agent_run_id",
327
+ ]),
328
+ skillName: skillNameFromMetadata(event.metadata),
329
+ });
330
+ break;
331
+ case "business-metric":
332
+ if (event.metric === "compaction.triggered") {
333
+ recordCompactionMetric({
334
+ "maestro.session_id": event.metadata?.sessionId,
335
+ "llm.model.id": event.metadata?.model,
336
+ "llm.model.provider": event.metadata?.provider,
337
+ });
338
+ }
339
+ break;
340
+ case "subagent-dispatch":
341
+ recordSubagentDispatchMetric({
342
+ mode: event.mode,
343
+ subagentType: event.subagentType,
344
+ provider: event.provider,
345
+ model: event.model,
346
+ reasoningEffort: event.reasoningEffort,
347
+ source: event.source,
348
+ success: event.success,
349
+ latencyMs: event.latencyMs,
350
+ agentRunId: metadataString(event.metadata, [
351
+ "agentRunId",
352
+ "agent_run_id",
353
+ ]),
354
+ });
355
+ break;
356
+ default:
357
+ break;
358
+ }
359
+ }
360
+ catch {
361
+ // Never let metric recording affect runtime behavior.
362
+ }
363
+ }
259
364
  function stringRecord(value) {
260
365
  return value && typeof value === "object" && !Array.isArray(value)
261
366
  ? value
262
367
  : undefined;
263
368
  }
369
+ function skillNameFromMetadata(metadata) {
370
+ return (metadataString(metadata, ["skillName", "skill_name"]) ??
371
+ metadataString(stringRecord(metadata?.skillMetadata), ["name"]) ??
372
+ metadataString(stringRecord(metadata?.skill_metadata), ["name"]));
373
+ }
264
374
  function metadataString(record, keys) {
265
375
  for (const key of keys) {
266
376
  const value = record?.[key];
@@ -303,8 +413,21 @@ function eventCorrelationOverrides(event) {
303
413
  "tool_call_id",
304
414
  ]),
305
415
  agent_id: metadataString(metadata, ["agentId", "agent_id"]),
416
+ actor_id: metadataString(metadata, ["actorId", "actor_id"]),
417
+ principal_id: metadataString(metadata, ["principalId", "principal_id"]),
306
418
  trace_id: topLevelTraceId ?? metadataString(metadata, ["traceId", "trace_id"]),
419
+ traceparent: metadataString(metadata, ["traceparent", "trace_parent"]),
420
+ tracestate: metadataString(metadata, ["tracestate", "trace_state"]),
307
421
  request_id: metadataString(metadata, ["requestId", "request_id"]),
422
+ remote_runner_session_id: metadataString(metadata, [
423
+ "remoteRunnerSessionId",
424
+ "remote_runner_session_id",
425
+ ]),
426
+ objective_id: metadataString(metadata, ["objectiveId", "objective_id"]),
427
+ conversation_id: metadataString(metadata, [
428
+ "conversationId",
429
+ "conversation_id",
430
+ ]),
308
431
  };
309
432
  }
310
433
  function maestroCorrelationSpanAttributes(event) {
@@ -325,10 +448,17 @@ function maestroCorrelationSpanAttributes(event) {
325
448
  "evalops.workspace_id": correlation.workspace_id ?? principal?.workspace_id,
326
449
  "maestro.session_id": correlation.session_id,
327
450
  "agent.id": correlation.agent_id,
451
+ "agent.actor.id": correlation.actor_id,
452
+ "evalops.principal_id": correlation.principal_id,
328
453
  "maestro.agent_run_id": correlation.agent_run_id,
329
454
  "maestro.agent_run_step_id": correlation.agent_run_step_id,
330
455
  "trace.id": correlation.trace_id,
456
+ traceparent: correlation.traceparent,
457
+ tracestate: correlation.tracestate,
331
458
  "request.id": correlation.request_id,
459
+ "evalops.remote_runner_session_id": correlation.remote_runner_session_id,
460
+ "evalops.objective_id": correlation.objective_id,
461
+ "evalops.conversation_id": correlation.conversation_id,
332
462
  "maestro.surface": config.defaultSurface,
333
463
  };
334
464
  return Object.fromEntries(Object.entries(attributes).filter((entry) => typeof entry[1] === "string" &&
@@ -375,11 +505,16 @@ export function getBackgroundTaskHistory(limit = 10) {
375
505
  .map((entry) => cloneBackgroundTaskTelemetry(entry));
376
506
  }
377
507
  export async function recordTelemetry(event) {
508
+ if (isInternalTelemetryDisabled()) {
509
+ return;
510
+ }
511
+ const normalizedEvent = normalizeTelemetryEventMetadata(event);
378
512
  const openTelemetryEnabled = isOpenTelemetryEnabled();
379
513
  if (openTelemetryEnabled) {
380
- recordOpenTelemetrySpan(event);
514
+ recordOpenTelemetrySpan(normalizedEvent);
515
+ recordOpenTelemetryMetric(normalizedEvent);
381
516
  }
382
- const eventBusTask = mirrorTelemetryToMaestroEventBus(event);
517
+ const eventBusTask = mirrorTelemetryToMaestroEventBus(normalizedEvent);
383
518
  const legacyEnabled = telemetryEnabled && samplingRate > 0;
384
519
  if (!legacyEnabled) {
385
520
  await eventBusTask;
@@ -390,7 +525,7 @@ export async function recordTelemetry(event) {
390
525
  return;
391
526
  }
392
527
  try {
393
- await Promise.all([persistTelemetry(event), eventBusTask]);
528
+ await Promise.all([persistTelemetry(normalizedEvent), eventBusTask]);
394
529
  }
395
530
  catch (_error) {
396
531
  // Ignore telemetry persistence failures
@@ -552,6 +687,28 @@ export function recordModelSwitch(sessionId, fromModel, toModel, metadata) {
552
687
  previousModel: fromModel,
553
688
  });
554
689
  }
690
+ export function recordStagedRolloutSurfaceUsage(event, options) {
691
+ return recordTelemetry({
692
+ type: "staged-rollout-surface",
693
+ timestamp: new Date().toISOString(),
694
+ event,
695
+ surfaceId: options.surfaceId,
696
+ surfaceType: options.surfaceType,
697
+ metadata: {
698
+ ...options.metadata,
699
+ owner: options.owner,
700
+ source: options.source,
701
+ },
702
+ });
703
+ }
704
+ export function recordSubagentDispatch(event) {
705
+ void recordTelemetry({
706
+ ...event,
707
+ type: "subagent-dispatch",
708
+ event: "subagent_dispatched",
709
+ timestamp: new Date().toISOString(),
710
+ });
711
+ }
555
712
  /**
556
713
  * Record session migration stats.
557
714
  */
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import { appendFile, mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { PATHS } from \"./config/constants.js\";\nimport {\n\tgetTelemetryTracer,\n\tinitOpenTelemetry,\n\tisOpenTelemetryEnabled,\n} from \"./opentelemetry.js\";\nimport {\n\ttype MaestroCorrelation,\n\tmirrorTelemetryToMaestroEventBus,\n\tresolveMaestroEventBusConfig,\n} from \"./telemetry/maestro-event-bus.js\";\nimport {\n\thasRemoteMeterDestination,\n\tmirrorCanonicalTurnEventToMeter,\n} from \"./telemetry/meter-service-client.js\";\nimport {\n\ttype CanonicalTurnEvent,\n\tsetDefaultTelemetryRecorder,\n} from \"./telemetry/wide-events.js\";\nimport { resolveEnvPath } from \"./utils/path-expansion.js\";\nimport {\n\tsanitizeOptionalWithStaticMask,\n\tsanitizeWithStaticMask,\n} from \"./utils/secret-redactor.js\";\n\ntype BaseTelemetryEvent = {\n\ttype:\n\t\t| \"tool-execution\"\n\t\t| \"evaluation\"\n\t\t| \"loader-stage\"\n\t\t| \"sse\"\n\t\t| \"background-task\"\n\t\t| \"api-request\"\n\t\t| \"business-metric\"\n\t\t| \"sandbox-violation\";\n\ttimestamp: string;\n};\n\nexport interface ApiRequestTelemetry extends BaseTelemetryEvent {\n\ttype: \"api-request\";\n\tmethod: string;\n\tpath: string;\n\tstatusCode: number;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface ToolExecutionTelemetry extends BaseTelemetryEvent {\n\ttype: \"tool-execution\";\n\ttoolName: string;\n\tsuccess: boolean;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface EvaluationTelemetry extends BaseTelemetryEvent {\n\ttype: \"evaluation\";\n\tscenario: string;\n\tsuccess: boolean;\n\tdetails?: Record<string, unknown>;\n}\n\nexport interface LoaderStageTelemetry extends BaseTelemetryEvent {\n\ttype: \"loader-stage\";\n\tstage: string;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SseTelemetry extends BaseTelemetryEvent {\n\ttype: \"sse\";\n\tevent: \"skip\";\n\tsent: number;\n\tskipped: number;\n\tmetadata?: Record<string, unknown>;\n}\n\ntype BackgroundTaskStatusTelemetry =\n\t| \"running\"\n\t| \"restarting\"\n\t| \"failed\"\n\t| \"exited\"\n\t| \"stopped\";\n\nexport interface BackgroundTaskTelemetry extends BaseTelemetryEvent {\n\ttype: \"background-task\";\n\tevent: \"started\" | \"restarted\" | \"exited\" | \"failed\" | \"stopped\";\n\ttaskId: string;\n\tstatus: BackgroundTaskStatusTelemetry;\n\tcommand: string;\n\tshellMode: \"shell\" | \"exec\";\n\tcwd?: string;\n\trestartAttempts: number;\n\tlogTruncated: boolean;\n\texitCode?: number | null;\n\tsignal?: string | null;\n\tresourceUsage?: {\n\t\tmaxRssKb?: number;\n\t\tuserMs?: number;\n\t\tsystemMs?: number;\n\t};\n\tfailureReason?: string;\n\tlimitBreach?: {\n\t\tkind: \"memory\" | \"cpu\";\n\t\tlimit: number;\n\t\tactual: number;\n\t};\n}\n\n/**\n * Business metrics for tracking usage patterns.\n * Inspired by Claude Code's telemetry events.\n */\nexport interface BusinessMetricTelemetry extends BaseTelemetryEvent {\n\ttype: \"business-metric\";\n\tmetric:\n\t\t| \"session.count\"\n\t\t| \"session.duration\"\n\t\t| \"session.migration\"\n\t\t| \"lines_of_code.count\"\n\t\t| \"tokens.input\"\n\t\t| \"tokens.output\"\n\t\t| \"tokens.cache_read\"\n\t\t| \"tokens.cache_write\"\n\t\t| \"cost.usd\"\n\t\t| \"compaction.triggered\"\n\t\t| \"model.switch\";\n\tvalue: number;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tmodel?: string;\n\t\tprovider?: string;\n\t\tgitBranch?: string;\n\t\tgitCommitSha?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Sandbox violation tracking for security auditing.\n */\nexport interface SandboxViolationTelemetry extends BaseTelemetryEvent {\n\ttype: \"sandbox-violation\";\n\tevent: \"blocked\" | \"warned\" | \"allowed\";\n\ttool: string;\n\taction: string;\n\treason: string;\n\tpath?: string;\n\tcommand?: string;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tuserId?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Canonical Turn Event - Wide event emitted once per agent turn.\n * Re-exported from telemetry/wide-events.ts for type union.\n */\nexport interface CanonicalTurnEventBase {\n\ttype: \"canonical-turn\";\n\ttimestamp: string;\n\tsessionId: string;\n\tturnId: string;\n\tturnNumber: number;\n\t[key: string]: unknown;\n}\n\ntype TelemetryEvent =\n\t| ToolExecutionTelemetry\n\t| EvaluationTelemetry\n\t| LoaderStageTelemetry\n\t| SseTelemetry\n\t| BackgroundTaskTelemetry\n\t| ApiRequestTelemetry\n\t| BusinessMetricTelemetry\n\t| SandboxViolationTelemetry\n\t| CanonicalTurnEventBase\n\t| CanonicalTurnEvent;\n\nconst telemetryFlag =\n\tprocess.env.MAESTRO_TELEMETRY ?? process.env.PLAYWRIGHT_TELEMETRY;\n\nconst telemetryFileEnv =\n\tresolveEnvPath(process.env.MAESTRO_TELEMETRY_FILE) ??\n\tresolveEnvPath(process.env.PLAYWRIGHT_TELEMETRY_FILE);\n\nconst telemetryEndpointEnv =\n\tprocess.env.MAESTRO_TELEMETRY_ENDPOINT ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_ENDPOINT;\n\nconst telemetrySampleEnv =\n\tprocess.env.MAESTRO_TELEMETRY_SAMPLE ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_SAMPLE;\n\nconst shouldEnableTelemetry = (): boolean => {\n\tconst flag = telemetryFlag?.toLowerCase();\n\tif (flag === \"0\" || flag === \"false\") {\n\t\treturn false;\n\t}\n\tif (flag === \"1\" || flag === \"true\") {\n\t\treturn true;\n\t}\n\treturn Boolean(\n\t\ttelemetryEndpointEnv || telemetryFileEnv || hasRemoteMeterDestination(),\n\t);\n};\nconst initialTelemetryEnabled = shouldEnableTelemetry();\nlet telemetryEnabled = initialTelemetryEnabled;\nlet telemetryOverride: boolean | null = null;\nlet telemetryOverrideReason: string | undefined;\n\nconst parseSamplingRate = (): number => {\n\tconst raw = telemetrySampleEnv;\n\tif (!raw) {\n\t\treturn 1;\n\t}\n\tconst rate = Number.parseFloat(raw);\n\tif (Number.isNaN(rate)) {\n\t\treturn 1;\n\t}\n\treturn Math.min(Math.max(rate, 0), 1);\n};\n\nconst samplingRate = parseSamplingRate();\n\nconst defaultTelemetryFile = PATHS.TELEMETRY_LOG;\nconst toolFailureLogFile = PATHS.TOOL_FAILURE_LOG;\nconst BACKGROUND_TASK_HISTORY_LIMIT = 50;\nconst backgroundTaskHistory: BackgroundTaskTelemetry[] = [];\n\nexport interface TelemetryStatus {\n\tenabled: boolean;\n\treason: string;\n\tendpoint?: string;\n\tfilePath?: string;\n\tsampleRate: number;\n\tflagValue?: string;\n\truntimeOverride?: \"enabled\" | \"disabled\";\n\toverrideReason?: string;\n}\n\nexport function getTelemetryStatus(): TelemetryStatus {\n\tlet reason = \"disabled\";\n\tconst baseEnabled = initialTelemetryEnabled && samplingRate > 0;\n\tif (!shouldEnableTelemetry()) {\n\t\treason = \"flag disabled\";\n\t} else if (samplingRate === 0) {\n\t\treason = \"sampling=0\";\n\t} else if (telemetryEndpointEnv) {\n\t\treason = \"endpoint\";\n\t} else if (hasRemoteMeterDestination()) {\n\t\treason = \"meter\";\n\t} else if (telemetryFileEnv || baseEnabled) {\n\t\treason = \"file\";\n\t}\n\tconst runtimeOverride =\n\t\ttelemetryOverride === null\n\t\t\t? undefined\n\t\t\t: telemetryOverride\n\t\t\t\t? \"enabled\"\n\t\t\t\t: \"disabled\";\n\n\treturn {\n\t\tenabled: telemetryEnabled && samplingRate > 0,\n\t\treason,\n\t\tendpoint: telemetryEndpointEnv,\n\t\tfilePath: telemetryFileEnv || defaultTelemetryFile,\n\t\tsampleRate: samplingRate,\n\t\tflagValue: telemetryFlag,\n\t\truntimeOverride,\n\t\toverrideReason: telemetryOverrideReason,\n\t};\n}\n\nexport function setTelemetryRuntimeOverride(\n\tenabled: boolean | null,\n\treason?: string,\n): void {\n\ttelemetryOverride = enabled;\n\ttelemetryOverrideReason = reason;\n\ttelemetryEnabled = enabled === null ? initialTelemetryEnabled : enabled;\n}\n\nfunction isCanonicalTurnTelemetryEvent(\n\tevent: TelemetryEvent,\n): event is CanonicalTurnEvent {\n\treturn (\n\t\tevent.type === \"canonical-turn\" && \"model\" in event && \"tokens\" in event\n\t);\n}\n\nasync function writeToFile(payload: string) {\n\tconst filePath = telemetryFileEnv || defaultTelemetryFile;\n\tawait mkdir(dirname(filePath), { recursive: true });\n\tawait appendFile(filePath, `${payload}\\n`, \"utf-8\");\n}\n\nasync function appendToolFailure(payload: string): Promise<void> {\n\tawait mkdir(dirname(toolFailureLogFile), { recursive: true });\n\tawait appendFile(toolFailureLogFile, `${payload}\\n`, \"utf-8\");\n}\n\nasync function postToEndpoint(payload: string) {\n\tconst endpoint = telemetryEndpointEnv;\n\tif (!endpoint) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait fetch(endpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: payload,\n\t\t});\n\t} catch (_error) {\n\t\t// Swallow telemetry transport errors\n\t}\n}\n\nfunction recordOpenTelemetrySpan(event: TelemetryEvent): void {\n\ttry {\n\t\tconst correlationAttributes = maestroCorrelationSpanAttributes(event);\n\t\tconst tracer = getTelemetryTracer();\n\t\ttracer.startActiveSpan(`telemetry.${event.type}`, (span: Span) => {\n\t\t\tspan.setAttributes({\n\t\t\t\t...correlationAttributes,\n\t\t\t\t\"maestro.telemetry.type\": event.type,\n\t\t\t\t\"maestro.telemetry.timestamp\": event.timestamp,\n\t\t\t});\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"tool-execution\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.tool.name\": event.toolName,\n\t\t\t\t\t\t\"maestro.tool.success\": event.success,\n\t\t\t\t\t\t\"maestro.tool.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"evaluation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.eval.scenario\": event.scenario,\n\t\t\t\t\t\t\"maestro.eval.success\": event.success,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"loader-stage\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.loader.stage\": event.stage,\n\t\t\t\t\t\t\"maestro.loader.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sse\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sse.sent\": event.sent,\n\t\t\t\t\t\t\"maestro.sse.skipped\": event.skipped,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"background-task\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.background.id\": event.taskId,\n\t\t\t\t\t\t\"maestro.background.event\": event.event,\n\t\t\t\t\t\t\"maestro.background.status\": event.status,\n\t\t\t\t\t\t\"maestro.background.restart_attempts\": event.restartAttempts,\n\t\t\t\t\t\t\"maestro.background.exit_code\": event.exitCode ?? -1,\n\t\t\t\t\t\t\"maestro.background.shell_mode\": event.shellMode,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus(\n\t\t\t\t\t\tevent.failureReason || event.status === \"failed\"\n\t\t\t\t\t\t\t? { code: SpanStatusCode.ERROR, message: event.failureReason }\n\t\t\t\t\t\t\t: { code: SpanStatusCode.OK },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"api-request\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"http.method\": event.method,\n\t\t\t\t\t\t\"http.route\": event.path,\n\t\t\t\t\t\t\"http.status_code\": event.statusCode,\n\t\t\t\t\t\t\"maestro.api.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.statusCode >= 500\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"business-metric\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.metric.name\": event.metric,\n\t\t\t\t\t\t\"maestro.metric.value\": event.value,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.metadata?.model) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.metric.model\", event.metadata.model);\n\t\t\t\t\t}\n\t\t\t\t\tif (event.metadata?.provider) {\n\t\t\t\t\t\tspan.setAttribute(\n\t\t\t\t\t\t\t\"maestro.metric.provider\",\n\t\t\t\t\t\t\tevent.metadata.provider,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sandbox-violation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sandbox.event\": event.event,\n\t\t\t\t\t\t\"maestro.sandbox.tool\": event.tool,\n\t\t\t\t\t\t\"maestro.sandbox.action\": event.action,\n\t\t\t\t\t\t\"maestro.sandbox.reason\": event.reason,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.path) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.sandbox.path\", event.path);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.event === \"blocked\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"canonical-turn\": {\n\t\t\t\t\tconst canonicalTurn = isCanonicalTurnTelemetryEvent(event)\n\t\t\t\t\t\t? event\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.turn.id\": event.turnId,\n\t\t\t\t\t\t\"maestro.turn.number\": event.turnNumber,\n\t\t\t\t\t\t\"maestro.turn.session_id\": event.sessionId,\n\t\t\t\t\t\t\"agent.session.id\": event.sessionId,\n\t\t\t\t\t\t...(canonicalTurn\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\"llm.model.id\": canonicalTurn.model.id,\n\t\t\t\t\t\t\t\t\t\"llm.model.provider\": canonicalTurn.model.provider,\n\t\t\t\t\t\t\t\t\t\"llm.usage.input_tokens\": canonicalTurn.tokens.input,\n\t\t\t\t\t\t\t\t\t\"llm.usage.output_tokens\": canonicalTurn.tokens.output,\n\t\t\t\t\t\t\t\t\t\"llm.usage.cache_read_tokens\": canonicalTurn.tokens.cacheRead,\n\t\t\t\t\t\t\t\t\t\"llm.usage.cache_write_tokens\":\n\t\t\t\t\t\t\t\t\t\tcanonicalTurn.tokens.cacheWrite,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\"maestro.turn.status\": String(\n\t\t\t\t\t\t\t\"status\" in event ? event.status : \"unknown\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.tool_count\": Number(\n\t\t\t\t\t\t\t\"toolCount\" in event ? event.toolCount : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.total_duration_ms\": Number(\n\t\t\t\t\t\t\t\"totalDurationMs\" in event ? event.totalDurationMs : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.cost_usd\": Number(\n\t\t\t\t\t\t\t\"costUsd\" in event ? event.costUsd : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.sampled\": Boolean(\n\t\t\t\t\t\t\t\"sampled\" in event ? event.sampled : true,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\t\"status\" in event && event.status === \"error\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.UNSET });\n\t\t\t}\n\n\t\t\tif (\"metadata\" in event && event.metadata) {\n\t\t\t\tspan.setAttributes({ \"maestro.telemetry.has_metadata\": true });\n\t\t\t}\n\n\t\t\tspan.end();\n\t\t});\n\t} catch {\n\t\t// Never let tracing failures affect runtime\n\t}\n}\n\nfunction stringRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction metadataString(\n\trecord: Record<string, unknown> | undefined,\n\tkeys: string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = record?.[key];\n\t\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction eventCorrelationOverrides(\n\tevent: TelemetryEvent,\n): Partial<MaestroCorrelation> {\n\tconst metadata = stringRecord(\n\t\t\"metadata\" in event ? event.metadata : undefined,\n\t);\n\tconst topLevelTraceId =\n\t\t\"traceId\" in event &&\n\t\ttypeof event.traceId === \"string\" &&\n\t\tevent.traceId.trim().length > 0\n\t\t\t? event.traceId\n\t\t\t: undefined;\n\treturn {\n\t\torganization_id: metadataString(metadata, [\n\t\t\t\"organizationId\",\n\t\t\t\"organization_id\",\n\t\t\t\"orgId\",\n\t\t\t\"org_id\",\n\t\t]),\n\t\tuser_id: metadataString(metadata, [\"userId\", \"user_id\"]),\n\t\tworkspace_id: metadataString(metadata, [\"workspaceId\", \"workspace_id\"]),\n\t\tsession_id:\n\t\t\t(\"sessionId\" in event && typeof event.sessionId === \"string\"\n\t\t\t\t? event.sessionId\n\t\t\t\t: undefined) ??\n\t\t\tmetadataString(metadata, [\n\t\t\t\t\"sessionId\",\n\t\t\t\t\"session_id\",\n\t\t\t\t\"maestroSessionId\",\n\t\t\t\t\"maestro_session_id\",\n\t\t\t]),\n\t\tagent_run_id: metadataString(metadata, [\"agentRunId\", \"agent_run_id\"]),\n\t\tagent_run_step_id: metadataString(metadata, [\n\t\t\t\"agentRunStepId\",\n\t\t\t\"agent_run_step_id\",\n\t\t\t\"toolCallId\",\n\t\t\t\"tool_call_id\",\n\t\t]),\n\t\tagent_id: metadataString(metadata, [\"agentId\", \"agent_id\"]),\n\t\ttrace_id:\n\t\t\ttopLevelTraceId ?? metadataString(metadata, [\"traceId\", \"trace_id\"]),\n\t\trequest_id: metadataString(metadata, [\"requestId\", \"request_id\"]),\n\t};\n}\n\nfunction maestroCorrelationSpanAttributes(\n\tevent: TelemetryEvent,\n): Record<string, string> {\n\tconst config = resolveMaestroEventBusConfig();\n\tconst overrides = eventCorrelationOverrides(event);\n\tconst correlation = {\n\t\t...config.defaultCorrelation,\n\t\t...Object.fromEntries(\n\t\t\tObject.entries(overrides).filter(([, value]) => value !== undefined),\n\t\t),\n\t};\n\tconst principal = config.defaultPrincipal;\n\tconst attributes: Record<string, string | undefined> = {\n\t\t\"enduser.id\": correlation.user_id ?? principal?.user_id,\n\t\t\"user.id\": correlation.user_id ?? principal?.user_id,\n\t\t\"agent.user.id\": correlation.user_id ?? principal?.user_id,\n\t\t\"organization.id\":\n\t\t\tcorrelation.organization_id ?? principal?.organization_id,\n\t\t\"evalops.organization_id\":\n\t\t\tcorrelation.organization_id ?? principal?.organization_id,\n\t\t\"workspace.id\": correlation.workspace_id ?? principal?.workspace_id,\n\t\t\"evalops.workspace_id\": correlation.workspace_id ?? principal?.workspace_id,\n\t\t\"maestro.session_id\": correlation.session_id,\n\t\t\"agent.id\": correlation.agent_id,\n\t\t\"maestro.agent_run_id\": correlation.agent_run_id,\n\t\t\"maestro.agent_run_step_id\": correlation.agent_run_step_id,\n\t\t\"trace.id\": correlation.trace_id,\n\t\t\"request.id\": correlation.request_id,\n\t\t\"maestro.surface\": config.defaultSurface,\n\t};\n\n\treturn Object.fromEntries(\n\t\tObject.entries(attributes).filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\ttypeof entry[1] === \"string\" &&\n\t\t\t\tentry[1].trim().length > 0 &&\n\t\t\t\tentry[1] !== \"unknown\",\n\t\t),\n\t);\n}\n\nasync function persistTelemetry(event: TelemetryEvent) {\n\tconst payload = JSON.stringify(event);\n\tconst tasks: Promise<void>[] = [];\n\n\tif (isCanonicalTurnTelemetryEvent(event)) {\n\t\ttasks.push(mirrorCanonicalTurnEventToMeter(event).then(() => undefined));\n\t}\n\n\tif (telemetryEndpointEnv) {\n\t\ttasks.push(postToEndpoint(payload));\n\t}\n\n\tif (telemetryEndpointEnv === undefined) {\n\t\t// Default to file storage when no endpoint is configured\n\t\ttasks.push(writeToFile(payload));\n\t} else if (telemetryFileEnv) {\n\t\ttasks.push(writeToFile(payload));\n\t}\n\n\tawait Promise.all(tasks);\n}\n\nfunction cloneBackgroundTaskTelemetry(\n\tevent: BackgroundTaskTelemetry,\n): BackgroundTaskTelemetry {\n\treturn {\n\t\t...event,\n\t\tresourceUsage: event.resourceUsage ? { ...event.resourceUsage } : undefined,\n\t\tlimitBreach: event.limitBreach ? { ...event.limitBreach } : undefined,\n\t};\n}\n\nfunction recordBackgroundHistory(event: BackgroundTaskTelemetry): void {\n\tbackgroundTaskHistory.push(cloneBackgroundTaskTelemetry(event));\n\tif (backgroundTaskHistory.length > BACKGROUND_TASK_HISTORY_LIMIT) {\n\t\tbackgroundTaskHistory.shift();\n\t}\n}\n\nexport function getBackgroundTaskHistory(\n\tlimit = 10,\n): BackgroundTaskTelemetry[] {\n\tif (limit <= 0) {\n\t\treturn [];\n\t}\n\treturn backgroundTaskHistory\n\t\t.slice(-limit)\n\t\t.map((entry) => cloneBackgroundTaskTelemetry(entry));\n}\n\nexport async function recordTelemetry(event: TelemetryEvent): Promise<void> {\n\tconst openTelemetryEnabled = isOpenTelemetryEnabled();\n\tif (openTelemetryEnabled) {\n\t\trecordOpenTelemetrySpan(event);\n\t}\n\tconst eventBusTask = mirrorTelemetryToMaestroEventBus(event);\n\n\tconst legacyEnabled = telemetryEnabled && samplingRate > 0;\n\tif (!legacyEnabled) {\n\t\tawait eventBusTask;\n\t\treturn;\n\t}\n\n\tif (samplingRate < 1 && Math.random() > samplingRate) {\n\t\tawait eventBusTask;\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait Promise.all([persistTelemetry(event), eventBusTask]);\n\t} catch (_error) {\n\t\t// Ignore telemetry persistence failures\n\t}\n}\n\nexport function recordToolExecution(\n\ttoolName: string,\n\tsuccess: boolean,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"tool-execution\",\n\t\ttimestamp: new Date().toISOString(),\n\t\ttoolName,\n\t\tsuccess,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordEvaluationResult(\n\tscenario: string,\n\tsuccess: boolean,\n\tdetails?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"evaluation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tscenario,\n\t\tsuccess,\n\t\tdetails,\n\t});\n}\n\nexport function recordLoaderStage(\n\tstage: string,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"loader-stage\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tstage,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordSseSkip(\n\tsent: number,\n\tskipped: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sse\",\n\t\tevent: \"skip\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tsent,\n\t\tskipped,\n\t\tmetadata,\n\t});\n}\n\nexport function logToolFailure(\n\ttoolName: string,\n\terrorMessage: string,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tconst payload = {\n\t\ttool: toolName,\n\t\terror: errorMessage,\n\t\tmetadata,\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\tvoid appendToolFailure(JSON.stringify(payload));\n}\n\nexport function recordBackgroundTaskEvent(\n\tevent: Omit<BackgroundTaskTelemetry, \"type\" | \"timestamp\">,\n): void {\n\tconst sanitizedCommand = sanitizeWithStaticMask(event.command);\n\tconst sanitizedFailure = sanitizeOptionalWithStaticMask(event.failureReason);\n\tconst payload: BackgroundTaskTelemetry = {\n\t\t...event,\n\t\tcommand: sanitizedCommand,\n\t\tfailureReason: sanitizedFailure,\n\t\ttype: \"background-task\",\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\trecordBackgroundHistory(payload);\n\tvoid recordTelemetry(payload);\n}\n\nexport function recordApiRequest(\n\tmethod: string,\n\tpath: string,\n\tstatusCode: number,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"api-request\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmethod,\n\t\tpath,\n\t\tstatusCode,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record a business metric for usage tracking.\n */\nexport function recordBusinessMetric(\n\tmetric: BusinessMetricTelemetry[\"metric\"],\n\tvalue: number,\n\tmetadata?: BusinessMetricTelemetry[\"metadata\"],\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"business-metric\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmetric,\n\t\tvalue,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record session start.\n */\nexport function recordSessionStart(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"session.count\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record session duration on end.\n */\nexport function recordSessionDuration(\n\tsessionId: string,\n\tdurationMs: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): Promise<void> {\n\treturn recordTelemetry({\n\t\ttype: \"business-metric\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmetric: \"session.duration\",\n\t\tvalue: durationMs,\n\t\tmetadata: {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t},\n\t});\n}\n\n/**\n * Record token usage metrics.\n */\nexport function recordTokenUsage(\n\tsessionId: string,\n\ttokens: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t},\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\tif (tokens.input !== undefined && tokens.input > 0) {\n\t\trecordBusinessMetric(\"tokens.input\", tokens.input, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.output !== undefined && tokens.output > 0) {\n\t\trecordBusinessMetric(\"tokens.output\", tokens.output, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheRead !== undefined && tokens.cacheRead > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_read\", tokens.cacheRead, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheWrite !== undefined && tokens.cacheWrite > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_write\", tokens.cacheWrite, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n}\n\n/**\n * Record cost in USD.\n */\nexport function recordCost(\n\tsessionId: string,\n\tcostUsd: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"cost.usd\", costUsd, { ...metadata, sessionId });\n}\n\n/**\n * Record compaction event.\n */\nexport function recordCompaction(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"compaction.triggered\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record model switch.\n */\nexport function recordModelSwitch(\n\tsessionId: string,\n\tfromModel: string,\n\ttoModel: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"model.switch\", 1, {\n\t\t...metadata,\n\t\tsessionId,\n\t\tmodel: toModel,\n\t\tpreviousModel: fromModel,\n\t});\n}\n\n/**\n * Record session migration stats.\n */\nexport function recordSessionMigration(stats: {\n\ttotal: number;\n\tmigrated: number;\n\tskipped: number;\n\tfailures: number;\n\tversion: number;\n}): void {\n\trecordBusinessMetric(\"session.migration\", stats.total, {\n\t\tmigrated: stats.migrated,\n\t\tskipped: stats.skipped,\n\t\tfailures: stats.failures,\n\t\tversion: stats.version,\n\t});\n}\n\n/**\n * Record a sandbox violation event.\n */\nexport function recordSandboxViolation(\n\tevent: SandboxViolationTelemetry[\"event\"],\n\ttool: string,\n\taction: string,\n\treason: string,\n\toptions?: {\n\t\tpath?: string;\n\t\tcommand?: string;\n\t\tsessionId?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t},\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sandbox-violation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tevent,\n\t\ttool,\n\t\taction,\n\t\treason,\n\t\tpath: options?.path,\n\t\tcommand: options?.command\n\t\t\t? sanitizeWithStaticMask(options.command)\n\t\t\t: undefined,\n\t\tmetadata: options?.metadata\n\t\t\t? { ...options.metadata, sessionId: options.sessionId }\n\t\t\t: options?.sessionId\n\t\t\t\t? { sessionId: options.sessionId }\n\t\t\t\t: undefined,\n\t});\n}\n\n// Initialize the wide-events telemetry recorder to break circular dependency\nsetDefaultTelemetryRecorder(recordTelemetry);\n"]}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import { appendFile, mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { PATHS } from \"./config/constants.js\";\nimport {\n\tgetTelemetryTracer,\n\tinitOpenTelemetry,\n\tisOpenTelemetryEnabled,\n} from \"./opentelemetry.js\";\nimport { isInternalTelemetryDisabled } from \"./telemetry/disablement.js\";\nimport {\n\ttype MaestroCorrelation,\n\tmirrorTelemetryToMaestroEventBus,\n\tresolveMaestroEventBusConfig,\n} from \"./telemetry/maestro-event-bus.js\";\nimport { normalizeTelemetryMetadataInputs } from \"./telemetry/metadata-normalization.js\";\nimport {\n\thasRemoteMeterDestination,\n\tmirrorCanonicalTurnEventToMeter,\n} from \"./telemetry/meter-service-client.js\";\nimport {\n\trecordCompactionMetric,\n\trecordSubagentDispatchMetric,\n\trecordToolInvocationMetric,\n} from \"./telemetry/metrics.js\";\nimport {\n\ttype CanonicalTurnEvent,\n\tsetDefaultTelemetryRecorder,\n} from \"./telemetry/wide-events.js\";\nimport { resolveEnvPath } from \"./utils/path-expansion.js\";\nimport {\n\tsanitizeOptionalWithStaticMask,\n\tsanitizeWithStaticMask,\n} from \"./utils/secret-redactor.js\";\n\nexport { splitTelemetryMetadata } from \"./telemetry/metadata-normalization.js\";\n\ntype BaseTelemetryEvent = {\n\ttype:\n\t\t| \"tool-execution\"\n\t\t| \"evaluation\"\n\t\t| \"loader-stage\"\n\t\t| \"sse\"\n\t\t| \"background-task\"\n\t\t| \"api-request\"\n\t\t| \"business-metric\"\n\t\t| \"staged-rollout-surface\"\n\t\t| \"sandbox-violation\"\n\t\t| \"subagent-dispatch\";\n\ttimestamp: string;\n\tsensitiveMetadata?: Record<string, unknown>;\n};\n\nexport interface ApiRequestTelemetry extends BaseTelemetryEvent {\n\ttype: \"api-request\";\n\tmethod: string;\n\tpath: string;\n\tstatusCode: number;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface ToolExecutionTelemetry extends BaseTelemetryEvent {\n\ttype: \"tool-execution\";\n\ttoolName: string;\n\tsuccess: boolean;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface EvaluationTelemetry extends BaseTelemetryEvent {\n\ttype: \"evaluation\";\n\tscenario: string;\n\tsuccess: boolean;\n\tdetails?: Record<string, unknown>;\n}\n\nexport interface LoaderStageTelemetry extends BaseTelemetryEvent {\n\ttype: \"loader-stage\";\n\tstage: string;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SseTelemetry extends BaseTelemetryEvent {\n\ttype: \"sse\";\n\tevent: \"skip\";\n\tsent: number;\n\tskipped: number;\n\tmetadata?: Record<string, unknown>;\n}\n\ntype BackgroundTaskStatusTelemetry =\n\t| \"running\"\n\t| \"restarting\"\n\t| \"failed\"\n\t| \"exited\"\n\t| \"stopped\";\n\nexport interface BackgroundTaskTelemetry extends BaseTelemetryEvent {\n\ttype: \"background-task\";\n\tevent: \"started\" | \"restarted\" | \"exited\" | \"failed\" | \"stopped\";\n\ttaskId: string;\n\tstatus: BackgroundTaskStatusTelemetry;\n\tcommand: string;\n\tshellMode: \"shell\" | \"exec\";\n\tcwd?: string;\n\trestartAttempts: number;\n\tlogTruncated: boolean;\n\texitCode?: number | null;\n\tsignal?: string | null;\n\tresourceUsage?: {\n\t\tmaxRssKb?: number;\n\t\tuserMs?: number;\n\t\tsystemMs?: number;\n\t};\n\tfailureReason?: string;\n\tlimitBreach?: {\n\t\tkind: \"memory\" | \"cpu\";\n\t\tlimit: number;\n\t\tactual: number;\n\t};\n}\n\n/**\n * Business metrics for tracking usage patterns.\n * Inspired by Claude Code's telemetry events.\n */\nexport interface BusinessMetricTelemetry extends BaseTelemetryEvent {\n\ttype: \"business-metric\";\n\tmetric:\n\t\t| \"session.count\"\n\t\t| \"session.duration\"\n\t\t| \"session.migration\"\n\t\t| \"lines_of_code.count\"\n\t\t| \"tokens.input\"\n\t\t| \"tokens.output\"\n\t\t| \"tokens.cache_read\"\n\t\t| \"tokens.cache_write\"\n\t\t| \"cost.usd\"\n\t\t| \"compaction.triggered\"\n\t\t| \"model.switch\";\n\tvalue: number;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tmodel?: string;\n\t\tprovider?: string;\n\t\tgitBranch?: string;\n\t\tgitCommitSha?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\nexport interface StagedRolloutSurfaceTelemetry extends BaseTelemetryEvent {\n\ttype: \"staged-rollout-surface\";\n\tevent: \"hidden_flag_used\" | \"hidden_mode_used\" | \"internal_gate_used\";\n\tsurfaceId: string;\n\tsurfaceType: \"cli_flag\" | \"mode\" | \"internal_gate\" | \"protocol_capability\";\n\tmetadata?: {\n\t\towner?: string;\n\t\tsource?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Sandbox violation tracking for security auditing.\n */\nexport interface SandboxViolationTelemetry extends BaseTelemetryEvent {\n\ttype: \"sandbox-violation\";\n\tevent: \"blocked\" | \"warned\" | \"allowed\";\n\ttool: string;\n\taction: string;\n\treason: string;\n\tpath?: string;\n\tcommand?: string;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tuserId?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Subagent dispatch tracking for multi-agent routing and audit.\n */\nexport interface SubagentDispatchTelemetry extends BaseTelemetryEvent {\n\ttype: \"subagent-dispatch\";\n\tevent: \"subagent_dispatched\";\n\tmode: string;\n\tsubagentType: string;\n\tmodel: string;\n\tprovider: string;\n\treasoningEffort: string;\n\tlatencyMs: number;\n\tsuccess: boolean;\n\tsource?: string;\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Canonical Turn Event - Wide event emitted once per agent turn.\n * Re-exported from telemetry/wide-events.ts for type union.\n */\nexport interface CanonicalTurnEventBase {\n\ttype: \"canonical-turn\";\n\ttimestamp: string;\n\tsessionId: string;\n\tturnId: string;\n\tturnNumber: number;\n\t[key: string]: unknown;\n}\n\ntype TelemetryEvent =\n\t| ToolExecutionTelemetry\n\t| EvaluationTelemetry\n\t| LoaderStageTelemetry\n\t| SseTelemetry\n\t| BackgroundTaskTelemetry\n\t| ApiRequestTelemetry\n\t| BusinessMetricTelemetry\n\t| StagedRolloutSurfaceTelemetry\n\t| SandboxViolationTelemetry\n\t| SubagentDispatchTelemetry\n\t| CanonicalTurnEventBase\n\t| CanonicalTurnEvent;\n\nconst telemetryFlag =\n\tprocess.env.MAESTRO_TELEMETRY ?? process.env.PLAYWRIGHT_TELEMETRY;\n\nconst telemetryFileEnv =\n\tresolveEnvPath(process.env.MAESTRO_TELEMETRY_FILE) ??\n\tresolveEnvPath(process.env.PLAYWRIGHT_TELEMETRY_FILE);\n\nconst telemetryEndpointEnv =\n\tprocess.env.MAESTRO_TELEMETRY_ENDPOINT ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_ENDPOINT;\n\nconst telemetrySampleEnv =\n\tprocess.env.MAESTRO_TELEMETRY_SAMPLE ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_SAMPLE;\n\nconst shouldEnableTelemetry = (): boolean => {\n\tconst flag = telemetryFlag?.toLowerCase();\n\tif (flag === \"0\" || flag === \"false\") {\n\t\treturn false;\n\t}\n\tif (flag === \"1\" || flag === \"true\") {\n\t\treturn true;\n\t}\n\treturn Boolean(\n\t\ttelemetryEndpointEnv || telemetryFileEnv || hasRemoteMeterDestination(),\n\t);\n};\nconst initialTelemetryEnabled = shouldEnableTelemetry();\nlet telemetryEnabled = initialTelemetryEnabled;\nlet telemetryOverride: boolean | null = null;\nlet telemetryOverrideReason: string | undefined;\n\nconst parseSamplingRate = (): number => {\n\tconst raw = telemetrySampleEnv;\n\tif (!raw) {\n\t\treturn 1;\n\t}\n\tconst rate = Number.parseFloat(raw);\n\tif (Number.isNaN(rate)) {\n\t\treturn 1;\n\t}\n\treturn Math.min(Math.max(rate, 0), 1);\n};\n\nconst samplingRate = parseSamplingRate();\n\nconst defaultTelemetryFile = PATHS.TELEMETRY_LOG;\nconst toolFailureLogFile = PATHS.TOOL_FAILURE_LOG;\nconst BACKGROUND_TASK_HISTORY_LIMIT = 50;\nconst backgroundTaskHistory: BackgroundTaskTelemetry[] = [];\n\nexport interface TelemetryStatus {\n\tenabled: boolean;\n\treason: string;\n\tendpoint?: string;\n\tfilePath?: string;\n\tsampleRate: number;\n\tflagValue?: string;\n\truntimeOverride?: \"enabled\" | \"disabled\";\n\toverrideReason?: string;\n}\n\nexport function getTelemetryStatus(): TelemetryStatus {\n\tlet reason = \"disabled\";\n\tconst baseEnabled = initialTelemetryEnabled && samplingRate > 0;\n\tif (!shouldEnableTelemetry()) {\n\t\treason = \"flag disabled\";\n\t} else if (samplingRate === 0) {\n\t\treason = \"sampling=0\";\n\t} else if (telemetryEndpointEnv) {\n\t\treason = \"endpoint\";\n\t} else if (hasRemoteMeterDestination()) {\n\t\treason = \"meter\";\n\t} else if (telemetryFileEnv || baseEnabled) {\n\t\treason = \"file\";\n\t}\n\tconst runtimeOverride =\n\t\ttelemetryOverride === null\n\t\t\t? undefined\n\t\t\t: telemetryOverride\n\t\t\t\t? \"enabled\"\n\t\t\t\t: \"disabled\";\n\n\treturn {\n\t\tenabled: telemetryEnabled && samplingRate > 0,\n\t\treason,\n\t\tendpoint: telemetryEndpointEnv,\n\t\tfilePath: telemetryFileEnv || defaultTelemetryFile,\n\t\tsampleRate: samplingRate,\n\t\tflagValue: telemetryFlag,\n\t\truntimeOverride,\n\t\toverrideReason: telemetryOverrideReason,\n\t};\n}\n\nexport function setTelemetryRuntimeOverride(\n\tenabled: boolean | null,\n\treason?: string,\n): void {\n\ttelemetryOverride = enabled;\n\ttelemetryOverrideReason = reason;\n\ttelemetryEnabled = enabled === null ? initialTelemetryEnabled : enabled;\n}\n\nfunction normalizeTelemetryEventMetadata(\n\tevent: TelemetryEvent,\n): TelemetryEvent {\n\tif (!(\"metadata\" in event) && !(\"sensitiveMetadata\" in event)) {\n\t\treturn event;\n\t}\n\tconst existingMetadata =\n\t\t\"metadata\" in event ? stringRecord(event.metadata) : undefined;\n\tconst existingSensitiveMetadata =\n\t\t\"sensitiveMetadata\" in event\n\t\t\t? stringRecord(event.sensitiveMetadata)\n\t\t\t: undefined;\n\tconst { metadata, sensitiveMetadata } = normalizeTelemetryMetadataInputs(\n\t\texistingMetadata,\n\t\texistingSensitiveMetadata,\n\t);\n\tconst normalized = { ...event };\n\tif (\"metadata\" in normalized) {\n\t\tif (metadata) {\n\t\t\tnormalized.metadata = metadata;\n\t\t} else {\n\t\t\tdelete normalized.metadata;\n\t\t}\n\t}\n\tif (sensitiveMetadata) {\n\t\tnormalized.sensitiveMetadata = sensitiveMetadata;\n\t} else {\n\t\tdelete normalized.sensitiveMetadata;\n\t}\n\treturn normalized;\n}\n\nfunction isCanonicalTurnTelemetryEvent(\n\tevent: TelemetryEvent,\n): event is CanonicalTurnEvent {\n\treturn (\n\t\tevent.type === \"canonical-turn\" && \"model\" in event && \"tokens\" in event\n\t);\n}\n\nasync function writeToFile(payload: string) {\n\tconst filePath = telemetryFileEnv || defaultTelemetryFile;\n\tawait mkdir(dirname(filePath), { recursive: true });\n\tawait appendFile(filePath, `${payload}\\n`, \"utf-8\");\n}\n\nasync function appendToolFailure(payload: string): Promise<void> {\n\tawait mkdir(dirname(toolFailureLogFile), { recursive: true });\n\tawait appendFile(toolFailureLogFile, `${payload}\\n`, \"utf-8\");\n}\n\nasync function postToEndpoint(payload: string) {\n\tconst endpoint = telemetryEndpointEnv;\n\tif (!endpoint) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait fetch(endpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: payload,\n\t\t});\n\t} catch (_error) {\n\t\t// Swallow telemetry transport errors\n\t}\n}\n\nfunction recordOpenTelemetrySpan(event: TelemetryEvent): void {\n\ttry {\n\t\tconst correlationAttributes = maestroCorrelationSpanAttributes(event);\n\t\tconst tracer = getTelemetryTracer();\n\t\ttracer.startActiveSpan(`telemetry.${event.type}`, (span: Span) => {\n\t\t\tspan.setAttributes({\n\t\t\t\t...correlationAttributes,\n\t\t\t\t\"maestro.telemetry.type\": event.type,\n\t\t\t\t\"maestro.telemetry.timestamp\": event.timestamp,\n\t\t\t});\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"tool-execution\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.tool.name\": event.toolName,\n\t\t\t\t\t\t\"maestro.tool.success\": event.success,\n\t\t\t\t\t\t\"maestro.tool.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"evaluation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.eval.scenario\": event.scenario,\n\t\t\t\t\t\t\"maestro.eval.success\": event.success,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"loader-stage\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.loader.stage\": event.stage,\n\t\t\t\t\t\t\"maestro.loader.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sse\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sse.sent\": event.sent,\n\t\t\t\t\t\t\"maestro.sse.skipped\": event.skipped,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"background-task\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.background.id\": event.taskId,\n\t\t\t\t\t\t\"maestro.background.event\": event.event,\n\t\t\t\t\t\t\"maestro.background.status\": event.status,\n\t\t\t\t\t\t\"maestro.background.restart_attempts\": event.restartAttempts,\n\t\t\t\t\t\t\"maestro.background.exit_code\": event.exitCode ?? -1,\n\t\t\t\t\t\t\"maestro.background.shell_mode\": event.shellMode,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus(\n\t\t\t\t\t\tevent.failureReason || event.status === \"failed\"\n\t\t\t\t\t\t\t? { code: SpanStatusCode.ERROR, message: event.failureReason }\n\t\t\t\t\t\t\t: { code: SpanStatusCode.OK },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"api-request\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"http.method\": event.method,\n\t\t\t\t\t\t\"http.route\": event.path,\n\t\t\t\t\t\t\"http.status_code\": event.statusCode,\n\t\t\t\t\t\t\"maestro.api.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.statusCode >= 500\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"business-metric\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.metric.name\": event.metric,\n\t\t\t\t\t\t\"maestro.metric.value\": event.value,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.metadata?.model) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.metric.model\", event.metadata.model);\n\t\t\t\t\t}\n\t\t\t\t\tif (event.metadata?.provider) {\n\t\t\t\t\t\tspan.setAttribute(\n\t\t\t\t\t\t\t\"maestro.metric.provider\",\n\t\t\t\t\t\t\tevent.metadata.provider,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"staged-rollout-surface\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.staged_rollout.event\": event.event,\n\t\t\t\t\t\t\"maestro.staged_rollout.surface_id\": event.surfaceId,\n\t\t\t\t\t\t\"maestro.staged_rollout.surface_type\": event.surfaceType,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.metadata?.owner) {\n\t\t\t\t\t\tspan.setAttribute(\n\t\t\t\t\t\t\t\"maestro.staged_rollout.owner\",\n\t\t\t\t\t\t\tString(event.metadata.owner),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sandbox-violation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sandbox.event\": event.event,\n\t\t\t\t\t\t\"maestro.sandbox.tool\": event.tool,\n\t\t\t\t\t\t\"maestro.sandbox.action\": event.action,\n\t\t\t\t\t\t\"maestro.sandbox.reason\": event.reason,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.path) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.sandbox.path\", event.path);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.event === \"blocked\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"subagent-dispatch\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.subagent.event\": event.event,\n\t\t\t\t\t\t\"maestro.subagent.mode\": event.mode,\n\t\t\t\t\t\t\"maestro.subagent.type\": event.subagentType,\n\t\t\t\t\t\t\"maestro.subagent.reasoning_effort\": event.reasoningEffort,\n\t\t\t\t\t\t\"maestro.subagent.source\": event.source ?? \"unknown\",\n\t\t\t\t\t\t\"maestro.subagent.success\": event.success,\n\t\t\t\t\t\t\"maestro.subagent.latency_ms\": event.latencyMs,\n\t\t\t\t\t\t\"llm.model.id\": event.model,\n\t\t\t\t\t\t\"llm.model.provider\": event.provider,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"canonical-turn\": {\n\t\t\t\t\tconst canonicalTurn = isCanonicalTurnTelemetryEvent(event)\n\t\t\t\t\t\t? event\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.turn.id\": event.turnId,\n\t\t\t\t\t\t\"maestro.turn.number\": event.turnNumber,\n\t\t\t\t\t\t\"maestro.turn.session_id\": event.sessionId,\n\t\t\t\t\t\t\"agent.session.id\": event.sessionId,\n\t\t\t\t\t\t...(canonicalTurn\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\"llm.model.id\": canonicalTurn.model.id,\n\t\t\t\t\t\t\t\t\t\"llm.model.provider\": canonicalTurn.model.provider,\n\t\t\t\t\t\t\t\t\t\"llm.usage.input_tokens\": canonicalTurn.tokens.input,\n\t\t\t\t\t\t\t\t\t\"llm.usage.output_tokens\": canonicalTurn.tokens.output,\n\t\t\t\t\t\t\t\t\t\"llm.usage.cache_read_tokens\": canonicalTurn.tokens.cacheRead,\n\t\t\t\t\t\t\t\t\t\"llm.usage.cache_write_tokens\":\n\t\t\t\t\t\t\t\t\t\tcanonicalTurn.tokens.cacheWrite,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\"maestro.turn.status\": String(\n\t\t\t\t\t\t\t\"status\" in event ? event.status : \"unknown\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.tool_count\": Number(\n\t\t\t\t\t\t\t\"toolCount\" in event ? event.toolCount : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.total_duration_ms\": Number(\n\t\t\t\t\t\t\t\"totalDurationMs\" in event ? event.totalDurationMs : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.cost_usd\": Number(\n\t\t\t\t\t\t\t\"costUsd\" in event ? event.costUsd : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.sampled\": Boolean(\n\t\t\t\t\t\t\t\"sampled\" in event ? event.sampled : true,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\t\"status\" in event && event.status === \"error\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.UNSET });\n\t\t\t}\n\n\t\t\tif (\"metadata\" in event && event.metadata) {\n\t\t\t\tspan.setAttributes({ \"maestro.telemetry.has_metadata\": true });\n\t\t\t}\n\n\t\t\tspan.end();\n\t\t});\n\t} catch {\n\t\t// Never let tracing failures affect runtime\n\t}\n}\n\nfunction recordOpenTelemetryMetric(event: TelemetryEvent): void {\n\ttry {\n\t\tswitch (event.type) {\n\t\t\tcase \"tool-execution\":\n\t\t\t\trecordToolInvocationMetric({\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\tdurationMs: event.durationMs,\n\t\t\t\t\tsuccess: event.success,\n\t\t\t\t\tagentRunId: metadataString(event.metadata, [\n\t\t\t\t\t\t\"agentRunId\",\n\t\t\t\t\t\t\"agent_run_id\",\n\t\t\t\t\t]),\n\t\t\t\t\tskillName: skillNameFromMetadata(event.metadata),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"business-metric\":\n\t\t\t\tif (event.metric === \"compaction.triggered\") {\n\t\t\t\t\trecordCompactionMetric({\n\t\t\t\t\t\t\"maestro.session_id\": event.metadata?.sessionId,\n\t\t\t\t\t\t\"llm.model.id\": event.metadata?.model,\n\t\t\t\t\t\t\"llm.model.provider\": event.metadata?.provider,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"subagent-dispatch\":\n\t\t\t\trecordSubagentDispatchMetric({\n\t\t\t\t\tmode: event.mode,\n\t\t\t\t\tsubagentType: event.subagentType,\n\t\t\t\t\tprovider: event.provider,\n\t\t\t\t\tmodel: event.model,\n\t\t\t\t\treasoningEffort: event.reasoningEffort,\n\t\t\t\t\tsource: event.source,\n\t\t\t\t\tsuccess: event.success,\n\t\t\t\t\tlatencyMs: event.latencyMs,\n\t\t\t\t\tagentRunId: metadataString(event.metadata, [\n\t\t\t\t\t\t\"agentRunId\",\n\t\t\t\t\t\t\"agent_run_id\",\n\t\t\t\t\t]),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t} catch {\n\t\t// Never let metric recording affect runtime behavior.\n\t}\n}\n\nfunction stringRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction skillNameFromMetadata(\n\tmetadata: Record<string, unknown> | undefined,\n): string | undefined {\n\treturn (\n\t\tmetadataString(metadata, [\"skillName\", \"skill_name\"]) ??\n\t\tmetadataString(stringRecord(metadata?.skillMetadata), [\"name\"]) ??\n\t\tmetadataString(stringRecord(metadata?.skill_metadata), [\"name\"])\n\t);\n}\n\nfunction metadataString(\n\trecord: Record<string, unknown> | undefined,\n\tkeys: string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = record?.[key];\n\t\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction eventCorrelationOverrides(\n\tevent: TelemetryEvent,\n): Partial<MaestroCorrelation> {\n\tconst metadata = stringRecord(\n\t\t\"metadata\" in event ? event.metadata : undefined,\n\t);\n\tconst topLevelTraceId =\n\t\t\"traceId\" in event &&\n\t\ttypeof event.traceId === \"string\" &&\n\t\tevent.traceId.trim().length > 0\n\t\t\t? event.traceId\n\t\t\t: undefined;\n\treturn {\n\t\torganization_id: metadataString(metadata, [\n\t\t\t\"organizationId\",\n\t\t\t\"organization_id\",\n\t\t\t\"orgId\",\n\t\t\t\"org_id\",\n\t\t]),\n\t\tuser_id: metadataString(metadata, [\"userId\", \"user_id\"]),\n\t\tworkspace_id: metadataString(metadata, [\"workspaceId\", \"workspace_id\"]),\n\t\tsession_id:\n\t\t\t(\"sessionId\" in event && typeof event.sessionId === \"string\"\n\t\t\t\t? event.sessionId\n\t\t\t\t: undefined) ??\n\t\t\tmetadataString(metadata, [\n\t\t\t\t\"sessionId\",\n\t\t\t\t\"session_id\",\n\t\t\t\t\"maestroSessionId\",\n\t\t\t\t\"maestro_session_id\",\n\t\t\t]),\n\t\tagent_run_id: metadataString(metadata, [\"agentRunId\", \"agent_run_id\"]),\n\t\tagent_run_step_id: metadataString(metadata, [\n\t\t\t\"agentRunStepId\",\n\t\t\t\"agent_run_step_id\",\n\t\t\t\"toolCallId\",\n\t\t\t\"tool_call_id\",\n\t\t]),\n\t\tagent_id: metadataString(metadata, [\"agentId\", \"agent_id\"]),\n\t\tactor_id: metadataString(metadata, [\"actorId\", \"actor_id\"]),\n\t\tprincipal_id: metadataString(metadata, [\"principalId\", \"principal_id\"]),\n\t\ttrace_id:\n\t\t\ttopLevelTraceId ?? metadataString(metadata, [\"traceId\", \"trace_id\"]),\n\t\ttraceparent: metadataString(metadata, [\"traceparent\", \"trace_parent\"]),\n\t\ttracestate: metadataString(metadata, [\"tracestate\", \"trace_state\"]),\n\t\trequest_id: metadataString(metadata, [\"requestId\", \"request_id\"]),\n\t\tremote_runner_session_id: metadataString(metadata, [\n\t\t\t\"remoteRunnerSessionId\",\n\t\t\t\"remote_runner_session_id\",\n\t\t]),\n\t\tobjective_id: metadataString(metadata, [\"objectiveId\", \"objective_id\"]),\n\t\tconversation_id: metadataString(metadata, [\n\t\t\t\"conversationId\",\n\t\t\t\"conversation_id\",\n\t\t]),\n\t};\n}\n\nfunction maestroCorrelationSpanAttributes(\n\tevent: TelemetryEvent,\n): Record<string, string> {\n\tconst config = resolveMaestroEventBusConfig();\n\tconst overrides = eventCorrelationOverrides(event);\n\tconst correlation = {\n\t\t...config.defaultCorrelation,\n\t\t...Object.fromEntries(\n\t\t\tObject.entries(overrides).filter(([, value]) => value !== undefined),\n\t\t),\n\t};\n\tconst principal = config.defaultPrincipal;\n\tconst attributes: Record<string, string | undefined> = {\n\t\t\"enduser.id\": correlation.user_id ?? principal?.user_id,\n\t\t\"user.id\": correlation.user_id ?? principal?.user_id,\n\t\t\"agent.user.id\": correlation.user_id ?? principal?.user_id,\n\t\t\"organization.id\":\n\t\t\tcorrelation.organization_id ?? principal?.organization_id,\n\t\t\"evalops.organization_id\":\n\t\t\tcorrelation.organization_id ?? principal?.organization_id,\n\t\t\"workspace.id\": correlation.workspace_id ?? principal?.workspace_id,\n\t\t\"evalops.workspace_id\": correlation.workspace_id ?? principal?.workspace_id,\n\t\t\"maestro.session_id\": correlation.session_id,\n\t\t\"agent.id\": correlation.agent_id,\n\t\t\"agent.actor.id\": correlation.actor_id,\n\t\t\"evalops.principal_id\": correlation.principal_id,\n\t\t\"maestro.agent_run_id\": correlation.agent_run_id,\n\t\t\"maestro.agent_run_step_id\": correlation.agent_run_step_id,\n\t\t\"trace.id\": correlation.trace_id,\n\t\ttraceparent: correlation.traceparent,\n\t\ttracestate: correlation.tracestate,\n\t\t\"request.id\": correlation.request_id,\n\t\t\"evalops.remote_runner_session_id\": correlation.remote_runner_session_id,\n\t\t\"evalops.objective_id\": correlation.objective_id,\n\t\t\"evalops.conversation_id\": correlation.conversation_id,\n\t\t\"maestro.surface\": config.defaultSurface,\n\t};\n\n\treturn Object.fromEntries(\n\t\tObject.entries(attributes).filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\ttypeof entry[1] === \"string\" &&\n\t\t\t\tentry[1].trim().length > 0 &&\n\t\t\t\tentry[1] !== \"unknown\",\n\t\t),\n\t);\n}\n\nasync function persistTelemetry(event: TelemetryEvent) {\n\tconst payload = JSON.stringify(event);\n\tconst tasks: Promise<void>[] = [];\n\n\tif (isCanonicalTurnTelemetryEvent(event)) {\n\t\ttasks.push(mirrorCanonicalTurnEventToMeter(event).then(() => undefined));\n\t}\n\n\tif (telemetryEndpointEnv) {\n\t\ttasks.push(postToEndpoint(payload));\n\t}\n\n\tif (telemetryEndpointEnv === undefined) {\n\t\t// Default to file storage when no endpoint is configured\n\t\ttasks.push(writeToFile(payload));\n\t} else if (telemetryFileEnv) {\n\t\ttasks.push(writeToFile(payload));\n\t}\n\n\tawait Promise.all(tasks);\n}\n\nfunction cloneBackgroundTaskTelemetry(\n\tevent: BackgroundTaskTelemetry,\n): BackgroundTaskTelemetry {\n\treturn {\n\t\t...event,\n\t\tresourceUsage: event.resourceUsage ? { ...event.resourceUsage } : undefined,\n\t\tlimitBreach: event.limitBreach ? { ...event.limitBreach } : undefined,\n\t};\n}\n\nfunction recordBackgroundHistory(event: BackgroundTaskTelemetry): void {\n\tbackgroundTaskHistory.push(cloneBackgroundTaskTelemetry(event));\n\tif (backgroundTaskHistory.length > BACKGROUND_TASK_HISTORY_LIMIT) {\n\t\tbackgroundTaskHistory.shift();\n\t}\n}\n\nexport function getBackgroundTaskHistory(\n\tlimit = 10,\n): BackgroundTaskTelemetry[] {\n\tif (limit <= 0) {\n\t\treturn [];\n\t}\n\treturn backgroundTaskHistory\n\t\t.slice(-limit)\n\t\t.map((entry) => cloneBackgroundTaskTelemetry(entry));\n}\n\nexport async function recordTelemetry(event: TelemetryEvent): Promise<void> {\n\tif (isInternalTelemetryDisabled()) {\n\t\treturn;\n\t}\n\n\tconst normalizedEvent = normalizeTelemetryEventMetadata(event);\n\tconst openTelemetryEnabled = isOpenTelemetryEnabled();\n\tif (openTelemetryEnabled) {\n\t\trecordOpenTelemetrySpan(normalizedEvent);\n\t\trecordOpenTelemetryMetric(normalizedEvent);\n\t}\n\tconst eventBusTask = mirrorTelemetryToMaestroEventBus(normalizedEvent);\n\n\tconst legacyEnabled = telemetryEnabled && samplingRate > 0;\n\tif (!legacyEnabled) {\n\t\tawait eventBusTask;\n\t\treturn;\n\t}\n\n\tif (samplingRate < 1 && Math.random() > samplingRate) {\n\t\tawait eventBusTask;\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait Promise.all([persistTelemetry(normalizedEvent), eventBusTask]);\n\t} catch (_error) {\n\t\t// Ignore telemetry persistence failures\n\t}\n}\n\nexport function recordToolExecution(\n\ttoolName: string,\n\tsuccess: boolean,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"tool-execution\",\n\t\ttimestamp: new Date().toISOString(),\n\t\ttoolName,\n\t\tsuccess,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordEvaluationResult(\n\tscenario: string,\n\tsuccess: boolean,\n\tdetails?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"evaluation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tscenario,\n\t\tsuccess,\n\t\tdetails,\n\t});\n}\n\nexport function recordLoaderStage(\n\tstage: string,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"loader-stage\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tstage,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordSseSkip(\n\tsent: number,\n\tskipped: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sse\",\n\t\tevent: \"skip\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tsent,\n\t\tskipped,\n\t\tmetadata,\n\t});\n}\n\nexport function logToolFailure(\n\ttoolName: string,\n\terrorMessage: string,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tconst payload = {\n\t\ttool: toolName,\n\t\terror: errorMessage,\n\t\tmetadata,\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\tvoid appendToolFailure(JSON.stringify(payload));\n}\n\nexport function recordBackgroundTaskEvent(\n\tevent: Omit<BackgroundTaskTelemetry, \"type\" | \"timestamp\">,\n): void {\n\tconst sanitizedCommand = sanitizeWithStaticMask(event.command);\n\tconst sanitizedFailure = sanitizeOptionalWithStaticMask(event.failureReason);\n\tconst payload: BackgroundTaskTelemetry = {\n\t\t...event,\n\t\tcommand: sanitizedCommand,\n\t\tfailureReason: sanitizedFailure,\n\t\ttype: \"background-task\",\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\trecordBackgroundHistory(payload);\n\tvoid recordTelemetry(payload);\n}\n\nexport function recordApiRequest(\n\tmethod: string,\n\tpath: string,\n\tstatusCode: number,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"api-request\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmethod,\n\t\tpath,\n\t\tstatusCode,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record a business metric for usage tracking.\n */\nexport function recordBusinessMetric(\n\tmetric: BusinessMetricTelemetry[\"metric\"],\n\tvalue: number,\n\tmetadata?: BusinessMetricTelemetry[\"metadata\"],\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"business-metric\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmetric,\n\t\tvalue,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record session start.\n */\nexport function recordSessionStart(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"session.count\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record session duration on end.\n */\nexport function recordSessionDuration(\n\tsessionId: string,\n\tdurationMs: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): Promise<void> {\n\treturn recordTelemetry({\n\t\ttype: \"business-metric\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmetric: \"session.duration\",\n\t\tvalue: durationMs,\n\t\tmetadata: {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t},\n\t});\n}\n\n/**\n * Record token usage metrics.\n */\nexport function recordTokenUsage(\n\tsessionId: string,\n\ttokens: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t},\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\tif (tokens.input !== undefined && tokens.input > 0) {\n\t\trecordBusinessMetric(\"tokens.input\", tokens.input, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.output !== undefined && tokens.output > 0) {\n\t\trecordBusinessMetric(\"tokens.output\", tokens.output, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheRead !== undefined && tokens.cacheRead > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_read\", tokens.cacheRead, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheWrite !== undefined && tokens.cacheWrite > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_write\", tokens.cacheWrite, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n}\n\n/**\n * Record cost in USD.\n */\nexport function recordCost(\n\tsessionId: string,\n\tcostUsd: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"cost.usd\", costUsd, { ...metadata, sessionId });\n}\n\n/**\n * Record compaction event.\n */\nexport function recordCompaction(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"compaction.triggered\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record model switch.\n */\nexport function recordModelSwitch(\n\tsessionId: string,\n\tfromModel: string,\n\ttoModel: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"model.switch\", 1, {\n\t\t...metadata,\n\t\tsessionId,\n\t\tmodel: toModel,\n\t\tpreviousModel: fromModel,\n\t});\n}\n\nexport function recordStagedRolloutSurfaceUsage(\n\tevent: StagedRolloutSurfaceTelemetry[\"event\"],\n\toptions: {\n\t\tsurfaceId: string;\n\t\tsurfaceType: StagedRolloutSurfaceTelemetry[\"surfaceType\"];\n\t\towner?: string;\n\t\tsource?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t},\n): Promise<void> {\n\treturn recordTelemetry({\n\t\ttype: \"staged-rollout-surface\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tevent,\n\t\tsurfaceId: options.surfaceId,\n\t\tsurfaceType: options.surfaceType,\n\t\tmetadata: {\n\t\t\t...options.metadata,\n\t\t\towner: options.owner,\n\t\t\tsource: options.source,\n\t\t},\n\t});\n}\n\nexport function recordSubagentDispatch(\n\tevent: Omit<SubagentDispatchTelemetry, \"type\" | \"timestamp\" | \"event\">,\n): void {\n\tvoid recordTelemetry({\n\t\t...event,\n\t\ttype: \"subagent-dispatch\",\n\t\tevent: \"subagent_dispatched\",\n\t\ttimestamp: new Date().toISOString(),\n\t});\n}\n\n/**\n * Record session migration stats.\n */\nexport function recordSessionMigration(stats: {\n\ttotal: number;\n\tmigrated: number;\n\tskipped: number;\n\tfailures: number;\n\tversion: number;\n}): void {\n\trecordBusinessMetric(\"session.migration\", stats.total, {\n\t\tmigrated: stats.migrated,\n\t\tskipped: stats.skipped,\n\t\tfailures: stats.failures,\n\t\tversion: stats.version,\n\t});\n}\n\n/**\n * Record a sandbox violation event.\n */\nexport function recordSandboxViolation(\n\tevent: SandboxViolationTelemetry[\"event\"],\n\ttool: string,\n\taction: string,\n\treason: string,\n\toptions?: {\n\t\tpath?: string;\n\t\tcommand?: string;\n\t\tsessionId?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t},\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sandbox-violation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tevent,\n\t\ttool,\n\t\taction,\n\t\treason,\n\t\tpath: options?.path,\n\t\tcommand: options?.command\n\t\t\t? sanitizeWithStaticMask(options.command)\n\t\t\t: undefined,\n\t\tmetadata: options?.metadata\n\t\t\t? { ...options.metadata, sessionId: options.sessionId }\n\t\t\t: options?.sessionId\n\t\t\t\t? { sessionId: options.sessionId }\n\t\t\t\t: undefined,\n\t});\n}\n\n// Initialize the wide-events telemetry recorder to break circular dependency\nsetDefaultTelemetryRecorder(recordTelemetry);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"test-verification-hook.d.ts","sourceRoot":"","sources":["../../src/testing/test-verification-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAMf,MAAM,kBAAkB,CAAC;AA6F1B;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,2BAA2B;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,mCAAmC;IACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC5C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,2BAAgC,GACvC,iBAAiB,CA6CnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,4BAA4B;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AASD;;;;;GAKG;AACH,wBAAgB,kCAAkC,CACjD,OAAO,EAAE,iBAAiB,GACxB;IACF,QAAQ,IAAI,qBAAqB,CAAC;IAClC,OAAO,IAAI,IAAI,CAAC;CAChB,CAiCA;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,qBAAqB,GAC1B,MAAM,GAAG,IAAI,CAiBf"}
1
+ {"version":3,"file":"test-verification-hook.d.ts","sourceRoot":"","sources":["../../src/testing/test-verification-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAMf,MAAM,kBAAkB,CAAC;AA4G1B;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,2BAA2B;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,mCAAmC;IACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC5C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,2BAAgC,GACvC,iBAAiB,CA6CnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,4BAA4B;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AASD;;;;;GAKG;AACH,wBAAgB,kCAAkC,CACjD,OAAO,EAAE,iBAAiB,GACxB;IACF,QAAQ,IAAI,qBAAqB,CAAC;IAClC,OAAO,IAAI,IAAI,CAAC;CAChB,CAiCA;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,qBAAqB,GAC1B,MAAM,GAAG,IAAI,CAiBf"}
@@ -13,13 +13,19 @@
13
13
  */
14
14
  import { isAbsolute, join } from "node:path";
15
15
  import { registerHook } from "../hooks/config.js";
16
+ import { parseApplyPatchPaths } from "../tools/apply-patch-parser.js";
16
17
  import { createLogger } from "../utils/logger.js";
17
18
  import { createAutoVerifyService, getAutoVerifyConfig, } from "./auto-verify.js";
18
19
  const logger = createLogger("test-verification-hook");
19
20
  /**
20
21
  * Tools that modify files and should trigger test verification.
21
22
  */
22
- const FILE_MODIFYING_TOOLS = new Set(["edit", "write", "notebook_edit"]);
23
+ const FILE_MODIFYING_TOOLS = new Set([
24
+ "apply_patch",
25
+ "edit",
26
+ "write",
27
+ "notebook_edit",
28
+ ]);
23
29
  let registeredTestVerificationHookUnregisters = [];
24
30
  let registeredTestVerificationService = null;
25
31
  function clearRegisteredTestVerificationHooks() {
@@ -33,22 +39,27 @@ function clearRegisteredTestVerificationHooks() {
33
39
  /**
34
40
  * Extract file path from tool input based on tool type.
35
41
  */
36
- function extractFilePath(toolName, toolInput) {
42
+ function extractFilePaths(toolName, toolInput) {
37
43
  switch (toolName) {
38
44
  case "edit":
39
45
  return typeof toolInput.file_path === "string"
40
- ? toolInput.file_path
41
- : null;
46
+ ? [toolInput.file_path]
47
+ : [];
48
+ case "apply_patch":
49
+ if (typeof toolInput.patch !== "string") {
50
+ return [];
51
+ }
52
+ return parseApplyPatchPaths(toolInput.patch);
42
53
  case "write":
43
54
  return typeof toolInput.file_path === "string"
44
- ? toolInput.file_path
45
- : null;
55
+ ? [toolInput.file_path]
56
+ : [];
46
57
  case "notebook_edit":
47
58
  return typeof toolInput.notebook_path === "string"
48
- ? toolInput.notebook_path
49
- : null;
59
+ ? [toolInput.notebook_path]
60
+ : [];
50
61
  default:
51
- return null;
62
+ return [];
52
63
  }
53
64
  }
54
65
  /**
@@ -69,20 +80,22 @@ function createTestVerificationCallback(service) {
69
80
  if (postInput.is_error) {
70
81
  return null;
71
82
  }
72
- // Extract file path from tool input
73
- const filePath = extractFilePath(postInput.tool_name, postInput.tool_input);
74
- if (!filePath) {
83
+ // Extract file paths from tool input
84
+ const filePaths = extractFilePaths(postInput.tool_name, postInput.tool_input);
85
+ if (filePaths.length === 0) {
75
86
  return null;
76
87
  }
77
- // Record the file change (this will debounce and eventually trigger tests)
78
- const absolutePath = isAbsolute(filePath)
79
- ? filePath
80
- : join(postInput.cwd, filePath);
81
- logger.debug("Recording file change from tool", {
82
- tool: postInput.tool_name,
83
- filePath: absolutePath,
84
- });
85
- service.recordFileChange(absolutePath);
88
+ for (const filePath of filePaths) {
89
+ // Record the file change (this will debounce and eventually trigger tests)
90
+ const absolutePath = isAbsolute(filePath)
91
+ ? filePath
92
+ : join(postInput.cwd, filePath);
93
+ logger.debug("Recording file change from tool", {
94
+ tool: postInput.tool_name,
95
+ filePath: absolutePath,
96
+ });
97
+ service.recordFileChange(absolutePath);
98
+ }
86
99
  // Return null to not interfere with the hook flow
87
100
  // Tests will run asynchronously after debounce period
88
101
  return null;