@evalops/maestro 0.10.50 → 0.10.51

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 (406) hide show
  1. package/dist/agent/agent-outcome.d.ts +54 -0
  2. package/dist/agent/agent-outcome.d.ts.map +1 -0
  3. package/dist/agent/agent-outcome.js +142 -0
  4. package/dist/agent/agent-outcome.js.map +1 -0
  5. package/dist/agent/agent-resume.d.ts.map +1 -1
  6. package/dist/agent/agent-resume.js +3 -3
  7. package/dist/agent/agent-resume.js.map +1 -1
  8. package/dist/agent/agent-run-summary.d.ts +37 -0
  9. package/dist/agent/agent-run-summary.d.ts.map +1 -0
  10. package/dist/agent/agent-run-summary.js +15 -0
  11. package/dist/agent/agent-run-summary.js.map +1 -0
  12. package/dist/agent/agent-work-board.d.ts +82 -0
  13. package/dist/agent/agent-work-board.d.ts.map +1 -0
  14. package/dist/agent/agent-work-board.js +312 -0
  15. package/dist/agent/agent-work-board.js.map +1 -0
  16. package/dist/agent/auto-compaction.d.ts +7 -2
  17. package/dist/agent/auto-compaction.d.ts.map +1 -1
  18. package/dist/agent/auto-compaction.js +23 -10
  19. package/dist/agent/auto-compaction.js.map +1 -1
  20. package/dist/agent/mission-artifacts.d.ts +62 -0
  21. package/dist/agent/mission-artifacts.d.ts.map +1 -0
  22. package/dist/agent/mission-artifacts.js +438 -0
  23. package/dist/agent/mission-artifacts.js.map +1 -0
  24. package/dist/agent/mission-manifest.d.ts +139 -3
  25. package/dist/agent/mission-manifest.d.ts.map +1 -1
  26. package/dist/agent/mission-manifest.js +549 -3
  27. package/dist/agent/mission-manifest.js.map +1 -1
  28. package/dist/agent/mission-store.d.ts +80 -0
  29. package/dist/agent/mission-store.d.ts.map +1 -0
  30. package/dist/agent/mission-store.js +603 -0
  31. package/dist/agent/mission-store.js.map +1 -0
  32. package/dist/agent/modes.d.ts +2 -2
  33. package/dist/agent/modes.d.ts.map +1 -1
  34. package/dist/agent/modes.js +10 -3
  35. package/dist/agent/modes.js.map +1 -1
  36. package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
  37. package/dist/agent/providers/codex-app-server.js +1 -3
  38. package/dist/agent/providers/codex-app-server.js.map +1 -1
  39. package/dist/agent/providers/google-gemini-cli.js +203 -107
  40. package/dist/agent/providers/google.js +100 -41
  41. package/dist/agent/providers/scripted.d.ts.map +1 -1
  42. package/dist/agent/providers/scripted.js +1 -3
  43. package/dist/agent/providers/scripted.js.map +1 -1
  44. package/dist/agent/providers/validation.d.ts.map +1 -1
  45. package/dist/agent/providers/validation.js +1 -3
  46. package/dist/agent/providers/validation.js.map +1 -1
  47. package/dist/agent/providers/vertex.js +203 -107
  48. package/dist/agent/snapshot-store.d.ts +32 -0
  49. package/dist/agent/snapshot-store.d.ts.map +1 -0
  50. package/dist/agent/snapshot-store.js +195 -0
  51. package/dist/agent/snapshot-store.js.map +1 -0
  52. package/dist/agent/specialist-profiles.d.ts +36 -0
  53. package/dist/agent/specialist-profiles.d.ts.map +1 -0
  54. package/dist/agent/specialist-profiles.js +159 -0
  55. package/dist/agent/specialist-profiles.js.map +1 -0
  56. package/dist/agent/subagent-specs.d.ts +4 -1
  57. package/dist/agent/subagent-specs.d.ts.map +1 -1
  58. package/dist/agent/subagent-specs.js +81 -8
  59. package/dist/agent/subagent-specs.js.map +1 -1
  60. package/dist/agent/swarm/coverage-gate.d.ts +37 -0
  61. package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
  62. package/dist/agent/swarm/coverage-gate.js +48 -0
  63. package/dist/agent/swarm/coverage-gate.js.map +1 -0
  64. package/dist/agent/swarm/executor.d.ts +1 -0
  65. package/dist/agent/swarm/executor.d.ts.map +1 -1
  66. package/dist/agent/swarm/executor.js +151 -15
  67. package/dist/agent/swarm/executor.js.map +1 -1
  68. package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
  69. package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
  70. package/dist/agent/swarm/orchestrator-prompt.js +48 -0
  71. package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
  72. package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
  73. package/dist/agent/swarm/plan-parser.js +27 -2
  74. package/dist/agent/swarm/plan-parser.js.map +1 -1
  75. package/dist/agent/swarm/types.d.ts +17 -0
  76. package/dist/agent/swarm/types.d.ts.map +1 -1
  77. package/dist/agent/swarm/types.js.map +1 -1
  78. package/dist/agent/swarm/validation-directive.d.ts +21 -0
  79. package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
  80. package/dist/agent/swarm/validation-directive.js +25 -0
  81. package/dist/agent/swarm/validation-directive.js.map +1 -0
  82. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  83. package/dist/agent/transport/tool-execution-bridge.js +4 -1
  84. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  85. package/dist/api/enterprise-routes.d.ts.map +1 -1
  86. package/dist/api/enterprise-routes.js +87 -10
  87. package/dist/api/enterprise-routes.js.map +1 -1
  88. package/dist/api/org-settings-merge.d.ts +12 -0
  89. package/dist/api/org-settings-merge.d.ts.map +1 -0
  90. package/dist/api/org-settings-merge.js +38 -0
  91. package/dist/api/org-settings-merge.js.map +1 -0
  92. package/dist/api/user-settings-merge.d.ts +16 -0
  93. package/dist/api/user-settings-merge.d.ts.map +1 -0
  94. package/dist/api/user-settings-merge.js +37 -0
  95. package/dist/api/user-settings-merge.js.map +1 -0
  96. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
  97. package/dist/app-server/daemon-lifecycle-api.js +1 -3
  98. package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
  99. package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
  100. package/dist/app-server/external-agent-import-api.js +1 -3
  101. package/dist/app-server/external-agent-import-api.js.map +1 -1
  102. package/dist/app-server/network-governance-api.d.ts.map +1 -1
  103. package/dist/app-server/network-governance-api.js +1 -3
  104. package/dist/app-server/network-governance-api.js.map +1 -1
  105. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
  106. package/dist/app-server/plugin-bundle-api.js +1 -3
  107. package/dist/app-server/plugin-bundle-api.js.map +1 -1
  108. package/dist/app-server/policy-control-api.d.ts.map +1 -1
  109. package/dist/app-server/policy-control-api.js +1 -3
  110. package/dist/app-server/policy-control-api.js.map +1 -1
  111. package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
  112. package/dist/app-server/protocol-modes-api.js +1 -3
  113. package/dist/app-server/protocol-modes-api.js.map +1 -1
  114. package/dist/cli/args.d.ts +2 -0
  115. package/dist/cli/args.d.ts.map +1 -1
  116. package/dist/cli/args.js +15 -0
  117. package/dist/cli/args.js.map +1 -1
  118. package/dist/cli/commands/a2a.d.ts.map +1 -1
  119. package/dist/cli/commands/a2a.js +1 -3
  120. package/dist/cli/commands/a2a.js.map +1 -1
  121. package/dist/cli/commands/agents.d.ts +4 -0
  122. package/dist/cli/commands/agents.d.ts.map +1 -1
  123. package/dist/cli/commands/agents.js +149 -0
  124. package/dist/cli/commands/agents.js.map +1 -1
  125. package/dist/cli/commands/mission.d.ts +4 -0
  126. package/dist/cli/commands/mission.d.ts.map +1 -0
  127. package/dist/cli/commands/mission.js +196 -0
  128. package/dist/cli/commands/mission.js.map +1 -0
  129. package/dist/cli/commands/value.d.ts +10 -0
  130. package/dist/cli/commands/value.d.ts.map +1 -0
  131. package/dist/cli/commands/value.js +33 -0
  132. package/dist/cli/commands/value.js.map +1 -0
  133. package/dist/cli/headless-protocol.d.ts.map +1 -1
  134. package/dist/cli/headless-protocol.js +1 -3
  135. package/dist/cli/headless-protocol.js.map +1 -1
  136. package/dist/cli/help.d.ts.map +1 -1
  137. package/dist/cli/help.js +10 -0
  138. package/dist/cli/help.js.map +1 -1
  139. package/dist/cli/system-prompt.d.ts.map +1 -1
  140. package/dist/cli/system-prompt.js +38 -7
  141. package/dist/cli/system-prompt.js.map +1 -1
  142. package/dist/cli-runtime.js +7756 -2800
  143. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  144. package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
  145. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  146. package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
  147. package/dist/cli-tui/commands/undo-handlers.js +7 -2
  148. package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
  149. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
  150. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
  151. package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
  152. package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
  153. package/dist/codex/app-server-client.d.ts.map +1 -1
  154. package/dist/codex/app-server-client.js +1 -3
  155. package/dist/codex/app-server-client.js.map +1 -1
  156. package/dist/codex/compatibility.d.ts.map +1 -1
  157. package/dist/codex/compatibility.js +1 -3
  158. package/dist/codex/compatibility.js.map +1 -1
  159. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  160. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  161. package/dist/codex/subagent-dispatch-table.js +23 -0
  162. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  163. package/dist/context/manifest.d.ts.map +1 -1
  164. package/dist/context/manifest.js +1 -3
  165. package/dist/context/manifest.js.map +1 -1
  166. package/dist/conversation/render-model.d.ts +0 -36
  167. package/dist/conversation/render-model.d.ts.map +1 -1
  168. package/dist/conversation/render-model.js +1 -3
  169. package/dist/conversation/render-model.js.map +1 -1
  170. package/dist/customer-value/ambient-learning.d.ts +75 -0
  171. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  172. package/dist/customer-value/ambient-learning.js +472 -0
  173. package/dist/customer-value/ambient-learning.js.map +1 -0
  174. package/dist/customer-value/internal-helpers.d.ts +13 -0
  175. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  176. package/dist/customer-value/internal-helpers.js +70 -0
  177. package/dist/customer-value/internal-helpers.js.map +1 -0
  178. package/dist/customer-value/report.d.ts +282 -0
  179. package/dist/customer-value/report.d.ts.map +1 -0
  180. package/dist/customer-value/report.js +2085 -0
  181. package/dist/customer-value/report.js.map +1 -0
  182. package/dist/db/schema.d.ts +5 -1
  183. package/dist/db/schema.d.ts.map +1 -1
  184. package/dist/db/schema.js.map +1 -1
  185. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  186. package/dist/evalops/agent-bootstrap.js +1 -3
  187. package/dist/evalops/agent-bootstrap.js.map +1 -1
  188. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  189. package/dist/evalops/agent-mcp-metadata.js +1 -3
  190. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  191. package/dist/index.d.ts +1 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +1 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  196. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  197. package/dist/installers/maestro-review-workflow.js +163 -0
  198. package/dist/installers/maestro-review-workflow.js.map +1 -0
  199. package/dist/load-env.d.ts.map +1 -1
  200. package/dist/load-env.js +2 -1
  201. package/dist/load-env.js.map +1 -1
  202. package/dist/main.d.ts.map +1 -1
  203. package/dist/main.js +92 -3
  204. package/dist/main.js.map +1 -1
  205. package/dist/mcp/config.d.ts.map +1 -1
  206. package/dist/mcp/config.js +1 -3
  207. package/dist/mcp/config.js.map +1 -1
  208. package/dist/mcp/elicitation.d.ts.map +1 -1
  209. package/dist/mcp/elicitation.js +1 -3
  210. package/dist/mcp/elicitation.js.map +1 -1
  211. package/dist/mcp/official-registry.d.ts.map +1 -1
  212. package/dist/mcp/official-registry.js +1 -3
  213. package/dist/mcp/official-registry.js.map +1 -1
  214. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  215. package/dist/mcp/workspace-trust.js +1 -3
  216. package/dist/mcp/workspace-trust.js.map +1 -1
  217. package/dist/memory/service-client.d.ts.map +1 -1
  218. package/dist/memory/service-client.js +1 -3
  219. package/dist/memory/service-client.js.map +1 -1
  220. package/dist/models/config-loader.d.ts.map +1 -1
  221. package/dist/models/config-loader.js +1 -3
  222. package/dist/models/config-loader.js.map +1 -1
  223. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  224. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  225. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  226. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  227. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  228. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  229. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  230. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  231. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  232. package/dist/node_modules/@evalops/tui/package.json +1 -1
  233. package/dist/oauth/connectors.d.ts.map +1 -1
  234. package/dist/oauth/connectors.js +1 -3
  235. package/dist/oauth/connectors.js.map +1 -1
  236. package/dist/oauth/evalops.d.ts.map +1 -1
  237. package/dist/oauth/evalops.js +1 -3
  238. package/dist/oauth/evalops.js.map +1 -1
  239. package/dist/platform/a2a-client.d.ts.map +1 -1
  240. package/dist/platform/a2a-client.js +1 -3
  241. package/dist/platform/a2a-client.js.map +1 -1
  242. package/dist/platform/a2a-cockpit.d.ts +1 -0
  243. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  244. package/dist/platform/a2a-cockpit.js +42 -11
  245. package/dist/platform/a2a-cockpit.js.map +1 -1
  246. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  247. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  248. package/dist/platform/a2a-completion-audit.js +7 -11
  249. package/dist/platform/a2a-completion-audit.js.map +1 -1
  250. package/dist/platform/a2a-maestro-peer.js +16 -0
  251. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  252. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  253. package/dist/platform/a2a-peer-pairing.js +1 -3
  254. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  255. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  256. package/dist/platform/a2a-peer-registry.js +1 -3
  257. package/dist/platform/a2a-peer-registry.js.map +1 -1
  258. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  259. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  260. package/dist/platform/a2a-task-ledger.js +207 -11
  261. package/dist/platform/a2a-task-ledger.js.map +1 -1
  262. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  263. package/dist/platform/a2a-work-graph.js +1 -3
  264. package/dist/platform/a2a-work-graph.js.map +1 -1
  265. package/dist/platform/operating-layer.d.ts.map +1 -1
  266. package/dist/platform/operating-layer.js +14 -8
  267. package/dist/platform/operating-layer.js.map +1 -1
  268. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  269. package/dist/platform/tool-execution-client.js +19 -2
  270. package/dist/platform/tool-execution-client.js.map +1 -1
  271. package/dist/providers/auth.d.ts.map +1 -1
  272. package/dist/providers/auth.js +1 -3
  273. package/dist/providers/auth.js.map +1 -1
  274. package/dist/runtime/env.d.ts +9 -1
  275. package/dist/runtime/env.d.ts.map +1 -1
  276. package/dist/runtime/env.js +63 -1
  277. package/dist/runtime/env.js.map +1 -1
  278. package/dist/safety/policy.d.ts.map +1 -1
  279. package/dist/safety/policy.js +1 -4
  280. package/dist/safety/policy.js.map +1 -1
  281. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  282. package/dist/sandbox/docker-sandbox.js +6 -1
  283. package/dist/sandbox/docker-sandbox.js.map +1 -1
  284. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  285. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  286. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  287. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  288. package/dist/server/handlers/platform-a2a-push.js +53 -2
  289. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  290. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  291. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  292. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  293. package/dist/server/headless-runtime-service.d.ts +16 -0
  294. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  295. package/dist/server/headless-runtime-service.js +232 -206
  296. package/dist/server/headless-runtime-service.js.map +1 -1
  297. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  298. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  299. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  300. package/dist/server/pending-request-payload.d.ts.map +1 -1
  301. package/dist/server/pending-request-payload.js +1 -3
  302. package/dist/server/pending-request-payload.js.map +1 -1
  303. package/dist/server/route-auth.d.ts.map +1 -1
  304. package/dist/server/route-auth.js +2 -0
  305. package/dist/server/route-auth.js.map +1 -1
  306. package/dist/server/session-serialization.d.ts.map +1 -1
  307. package/dist/server/session-serialization.js +1 -3
  308. package/dist/server/session-serialization.js.map +1 -1
  309. package/dist/services/compliance/normalize.d.ts.map +1 -1
  310. package/dist/services/compliance/normalize.js +1 -3
  311. package/dist/services/compliance/normalize.js.map +1 -1
  312. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  313. package/dist/services/intelligent-router/normalize.js +1 -3
  314. package/dist/services/intelligent-router/normalize.js.map +1 -1
  315. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  316. package/dist/services/revenue-attribution/normalize.js +1 -3
  317. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  318. package/dist/services/traces/normalize.d.ts.map +1 -1
  319. package/dist/services/traces/normalize.js +1 -3
  320. package/dist/services/traces/normalize.js.map +1 -1
  321. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  322. package/dist/services/workspace-config/normalize.js +1 -3
  323. package/dist/services/workspace-config/normalize.js.map +1 -1
  324. package/dist/skills/composer.d.ts.map +1 -1
  325. package/dist/skills/composer.js +13 -1
  326. package/dist/skills/composer.js.map +1 -1
  327. package/dist/skills/index.d.ts +1 -0
  328. package/dist/skills/index.d.ts.map +1 -1
  329. package/dist/skills/index.js +1 -0
  330. package/dist/skills/index.js.map +1 -1
  331. package/dist/skills/learned-guidelines.d.ts +33 -0
  332. package/dist/skills/learned-guidelines.d.ts.map +1 -0
  333. package/dist/skills/learned-guidelines.js +291 -0
  334. package/dist/skills/learned-guidelines.js.map +1 -0
  335. package/dist/skills/linter.d.ts.map +1 -1
  336. package/dist/skills/linter.js +1 -3
  337. package/dist/skills/linter.js.map +1 -1
  338. package/dist/skills/runtime-activation.d.ts +1 -0
  339. package/dist/skills/runtime-activation.d.ts.map +1 -1
  340. package/dist/skills/runtime-activation.js +2 -3
  341. package/dist/skills/runtime-activation.js.map +1 -1
  342. package/dist/skills/tool.d.ts.map +1 -1
  343. package/dist/skills/tool.js +26 -21
  344. package/dist/skills/tool.js.map +1 -1
  345. package/dist/skills/trust-cache.d.ts +7 -0
  346. package/dist/skills/trust-cache.d.ts.map +1 -1
  347. package/dist/skills/trust-cache.js +16 -0
  348. package/dist/skills/trust-cache.js.map +1 -1
  349. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  350. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  351. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  352. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  353. package/dist/telemetry/maestro-event-bus.js +42 -81
  354. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  355. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  356. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  357. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  358. package/dist/telemetry.d.ts.map +1 -1
  359. package/dist/telemetry.js +54 -43
  360. package/dist/telemetry.js.map +1 -1
  361. package/dist/theme/theme-loader.d.ts.map +1 -1
  362. package/dist/theme/theme-loader.js +1 -3
  363. package/dist/theme/theme-loader.js.map +1 -1
  364. package/dist/tools/apply-patch.d.ts.map +1 -1
  365. package/dist/tools/apply-patch.js +76 -8
  366. package/dist/tools/apply-patch.js.map +1 -1
  367. package/dist/tools/diff-preview.d.ts.map +1 -1
  368. package/dist/tools/diff-preview.js +10 -1
  369. package/dist/tools/diff-preview.js.map +1 -1
  370. package/dist/tools/edit.d.ts.map +1 -1
  371. package/dist/tools/edit.js +17 -0
  372. package/dist/tools/edit.js.map +1 -1
  373. package/dist/tools/write.d.ts.map +1 -1
  374. package/dist/tools/write.js +9 -0
  375. package/dist/tools/write.js.map +1 -1
  376. package/dist/undo/tracker.d.ts +5 -0
  377. package/dist/undo/tracker.d.ts.map +1 -1
  378. package/dist/undo/tracker.js +13 -0
  379. package/dist/undo/tracker.js.map +1 -1
  380. package/dist/utils/fs.d.ts +1 -1
  381. package/dist/utils/fs.d.ts.map +1 -1
  382. package/dist/utils/fs.js +29 -2
  383. package/dist/utils/fs.js.map +1 -1
  384. package/dist/utils/git-stash.d.ts.map +1 -1
  385. package/dist/utils/git-stash.js +15 -8
  386. package/dist/utils/git-stash.js.map +1 -1
  387. package/dist/utils/json.d.ts +11 -0
  388. package/dist/utils/json.d.ts.map +1 -1
  389. package/dist/utils/json.js +9 -0
  390. package/dist/utils/json.js.map +1 -1
  391. package/dist/utils/shell-env.d.ts.map +1 -1
  392. package/dist/utils/shell-env.js +2 -0
  393. package/dist/utils/shell-env.js.map +1 -1
  394. package/dist/utils/url-extractor-git.d.ts +26 -0
  395. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  396. package/dist/utils/url-extractor-git.js +259 -0
  397. package/dist/utils/url-extractor-git.js.map +1 -0
  398. package/dist/utils/url-extractor.d.ts.map +1 -1
  399. package/dist/utils/url-extractor.js +23 -251
  400. package/dist/utils/url-extractor.js.map +1 -1
  401. package/dist/version.json +2 -2
  402. package/package.json +310 -306
  403. package/skills/incident-triage/SKILL.md +19 -1
  404. package/skills/install-code-review/SKILL.md +69 -0
  405. package/skills/security-review/SKILL.md +68 -0
  406. package/skills/security-review/reference/rubric.md +85 -0
@@ -0,0 +1,54 @@
1
+ import type { AgentMode, ModelProvider, ResolvedSubagentDispatch } from "./modes.js";
2
+ import type { SubagentType } from "./subagent-specs.js";
3
+ export declare const AGENT_OUTCOME_SCHEMA = "evalops.maestro.agent-outcome.v1";
4
+ export type AgentOutcomeSource = "github-agent" | "mission" | "a2a" | "ambient-agent" | "trajectory";
5
+ export type AgentOutcomeStatus = "succeeded" | "failed" | "changes_requested" | "merged" | "blocked";
6
+ export interface NormalizedAgentOutcome {
7
+ schemaVersion: typeof AGENT_OUTCOME_SCHEMA;
8
+ source: AgentOutcomeSource;
9
+ taskId: string;
10
+ repo?: string;
11
+ taskType?: string;
12
+ subagentType?: SubagentType;
13
+ mode?: AgentMode;
14
+ model?: string;
15
+ provider?: ModelProvider;
16
+ status: AgentOutcomeStatus;
17
+ confidence?: number;
18
+ durationMs?: number;
19
+ tokensUsed?: number;
20
+ costUsd?: number;
21
+ labels: string[];
22
+ failureReason?: string;
23
+ recordedAt: string;
24
+ }
25
+ export interface AgentOutcomeInput extends Omit<NormalizedAgentOutcome, "schemaVersion" | "labels" | "recordedAt"> {
26
+ labels?: string[];
27
+ recordedAt?: string;
28
+ }
29
+ export interface AgentOutcomeSummary {
30
+ total: number;
31
+ successes: number;
32
+ failures: number;
33
+ successRate: number;
34
+ bySubagent: Record<string, {
35
+ total: number;
36
+ successes: number;
37
+ failures: number;
38
+ successRate: number;
39
+ }>;
40
+ bestSubagent?: SubagentType;
41
+ needsEscalation: boolean;
42
+ }
43
+ export declare function normalizeAgentOutcome(input: AgentOutcomeInput): NormalizedAgentOutcome;
44
+ export declare function summarizeAgentOutcomes(outcomes: readonly NormalizedAgentOutcome[]): AgentOutcomeSummary;
45
+ export declare function resolveAdaptiveSubagentDispatch(input: {
46
+ mode: AgentMode;
47
+ subagentType: SubagentType;
48
+ provider?: ModelProvider;
49
+ outcomes?: readonly NormalizedAgentOutcome[];
50
+ }): ResolvedSubagentDispatch & {
51
+ outcomeSummary?: AgentOutcomeSummary;
52
+ adaptation: "none" | "escalated-mode" | "best-known-subagent" | "escalated-mode-and-best-known-subagent";
53
+ };
54
+ //# sourceMappingURL=agent-outcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-outcome.d.ts","sourceRoot":"","sources":["../../src/agent/agent-outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,aAAa,EACb,wBAAwB,EACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,oBAAoB,qCAAqC,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAC3B,cAAc,GACd,SAAS,GACT,KAAK,GACL,eAAe,GACf,YAAY,CAAC;AAEhB,MAAM,MAAM,kBAAkB,GAC3B,WAAW,GACX,QAAQ,GACR,mBAAmB,GACnB,QAAQ,GACR,SAAS,CAAC;AAEb,MAAM,WAAW,sBAAsB;IACtC,aAAa,EAAE,OAAO,oBAAoB,CAAC;IAC3C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAChB,SAAQ,IAAI,CACX,sBAAsB,EACtB,eAAe,GAAG,QAAQ,GAAG,YAAY,CACzC;IACD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CACjB,MAAM,EACN;QACC,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACpB,CACD,CAAC;IACF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;CACzB;AASD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,iBAAiB,GACtB,sBAAsB,CAOxB;AAED,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,GACzC,mBAAmB,CAuCrB;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACtD,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC7C,GAAG,wBAAwB,GAAG;IAC9B,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,UAAU,EACP,MAAM,GACN,gBAAgB,GAChB,qBAAqB,GACrB,wCAAwC,CAAC;CAC5C,CAuBA"}
@@ -0,0 +1,142 @@
1
+ import { resolveSubagentDispatch } from "./modes.js";
2
+ export const AGENT_OUTCOME_SCHEMA = "evalops.maestro.agent-outcome.v1";
3
+ export function normalizeAgentOutcome(input) {
4
+ return {
5
+ schemaVersion: AGENT_OUTCOME_SCHEMA,
6
+ ...input,
7
+ labels: uniqueStrings(input.labels ?? []),
8
+ recordedAt: input.recordedAt ?? new Date().toISOString(),
9
+ };
10
+ }
11
+ export function summarizeAgentOutcomes(outcomes) {
12
+ const total = outcomes.length;
13
+ const successes = outcomes.filter(isSuccessfulOutcome).length;
14
+ const failures = total - successes;
15
+ const bySubagent = new Map();
16
+ for (const outcome of outcomes) {
17
+ if (!outcome.subagentType)
18
+ continue;
19
+ const current = bySubagent.get(outcome.subagentType) ?? {
20
+ total: 0,
21
+ successes: 0,
22
+ failures: 0,
23
+ successRate: 0,
24
+ };
25
+ current.total += 1;
26
+ if (isSuccessfulOutcome(outcome)) {
27
+ current.successes += 1;
28
+ }
29
+ else {
30
+ current.failures += 1;
31
+ }
32
+ current.successRate = ratio(current.successes, current.total);
33
+ bySubagent.set(outcome.subagentType, current);
34
+ }
35
+ const ranked = [...bySubagent.entries()]
36
+ .filter(([, value]) => value.total >= 2)
37
+ .sort((left, right) => right[1].successRate - left[1].successRate ||
38
+ right[1].total - left[1].total ||
39
+ left[0].localeCompare(right[0]));
40
+ return {
41
+ total,
42
+ successes,
43
+ failures,
44
+ successRate: ratio(successes, total),
45
+ bySubagent: Object.fromEntries(bySubagent),
46
+ bestSubagent: ranked[0]?.[0],
47
+ needsEscalation: total >= 3 && ratio(successes, total) < 0.5,
48
+ };
49
+ }
50
+ export function resolveAdaptiveSubagentDispatch(input) {
51
+ const summary = input.outcomes
52
+ ? summarizeAgentOutcomes(input.outcomes)
53
+ : undefined;
54
+ const adaptedMode = summary?.needsEscalation === true && input.mode !== "frontier"
55
+ ? "frontier"
56
+ : input.mode;
57
+ const adaptedSubagent = comparableBestSubagent(input, summary) ?? input.subagentType;
58
+ const dispatch = resolveSubagentDispatch(adaptedMode, adaptedSubagent, input.provider);
59
+ return {
60
+ ...dispatch,
61
+ outcomeSummary: summary,
62
+ adaptation: resolveAdaptation({
63
+ modeChanged: adaptedMode !== input.mode,
64
+ subagentChanged: adaptedSubagent !== input.subagentType,
65
+ }),
66
+ };
67
+ }
68
+ function resolveAdaptation(input) {
69
+ if (input.modeChanged && input.subagentChanged) {
70
+ return "escalated-mode-and-best-known-subagent";
71
+ }
72
+ if (input.modeChanged)
73
+ return "escalated-mode";
74
+ if (input.subagentChanged)
75
+ return "best-known-subagent";
76
+ return "none";
77
+ }
78
+ function isSuccessfulOutcome(outcome) {
79
+ return outcome.status === "succeeded" || outcome.status === "merged";
80
+ }
81
+ function comparableBestSubagent(input, summary) {
82
+ if (!summary || !input.outcomes)
83
+ return undefined;
84
+ const currentLaneOutcomes = input.outcomes.filter((outcome) => outcome.subagentType === input.subagentType);
85
+ if (currentLaneOutcomes.length < 2)
86
+ return undefined;
87
+ const currentLaneFailures = currentLaneOutcomes.filter((outcome) => !isSuccessfulOutcome(outcome));
88
+ if (currentLaneFailures.length < 2)
89
+ return undefined;
90
+ const currentTaskTypes = new Set(currentLaneFailures
91
+ .map((outcome) => outcome.taskType?.trim())
92
+ .filter((taskType) => Boolean(taskType)));
93
+ if (currentTaskTypes.size === 0)
94
+ return undefined;
95
+ const currentComparableSummary = summarizeComparableOutcomes(input.outcomes, input.subagentType, currentTaskTypes);
96
+ if (currentComparableSummary.total === 0)
97
+ return undefined;
98
+ const comparableCandidates = new Set();
99
+ for (const outcome of input.outcomes) {
100
+ const taskType = outcome.taskType?.trim();
101
+ if (outcome.subagentType &&
102
+ outcome.subagentType !== input.subagentType &&
103
+ isSuccessfulOutcome(outcome) &&
104
+ taskType !== undefined &&
105
+ currentTaskTypes.has(taskType)) {
106
+ comparableCandidates.add(outcome.subagentType);
107
+ }
108
+ }
109
+ return [...comparableCandidates]
110
+ .map((subagentType) => ({
111
+ subagentType,
112
+ summary: summarizeComparableOutcomes(input.outcomes ?? [], subagentType, currentTaskTypes),
113
+ }))
114
+ .filter((candidate) => candidate.summary.successes > 0 &&
115
+ candidate.summary.successRate > currentComparableSummary.successRate)
116
+ .sort((left, right) => right.summary.successRate - left.summary.successRate ||
117
+ right.summary.total - left.summary.total ||
118
+ left.subagentType.localeCompare(right.subagentType))[0]?.subagentType;
119
+ }
120
+ function summarizeComparableOutcomes(outcomes, subagentType, taskTypes) {
121
+ const matching = outcomes.filter((outcome) => {
122
+ const taskType = outcome.taskType?.trim();
123
+ return (outcome.subagentType === subagentType &&
124
+ taskType !== undefined &&
125
+ taskTypes.has(taskType));
126
+ });
127
+ const successes = matching.filter(isSuccessfulOutcome).length;
128
+ const total = matching.length;
129
+ return {
130
+ total,
131
+ successes,
132
+ failures: total - successes,
133
+ successRate: ratio(successes, total),
134
+ };
135
+ }
136
+ function ratio(numerator, denominator) {
137
+ return denominator === 0 ? 0 : Number((numerator / denominator).toFixed(4));
138
+ }
139
+ function uniqueStrings(values) {
140
+ return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
141
+ }
142
+ //# sourceMappingURL=agent-outcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-outcome.js","sourceRoot":"","sources":["../../src/agent/agent-outcome.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAgentMode,\n\tModelProvider,\n\tResolvedSubagentDispatch,\n} from \"./modes.js\";\nimport { resolveSubagentDispatch } from \"./modes.js\";\nimport type { SubagentType } from \"./subagent-specs.js\";\n\nexport const AGENT_OUTCOME_SCHEMA = \"evalops.maestro.agent-outcome.v1\";\n\nexport type AgentOutcomeSource =\n\t| \"github-agent\"\n\t| \"mission\"\n\t| \"a2a\"\n\t| \"ambient-agent\"\n\t| \"trajectory\";\n\nexport type AgentOutcomeStatus =\n\t| \"succeeded\"\n\t| \"failed\"\n\t| \"changes_requested\"\n\t| \"merged\"\n\t| \"blocked\";\n\nexport interface NormalizedAgentOutcome {\n\tschemaVersion: typeof AGENT_OUTCOME_SCHEMA;\n\tsource: AgentOutcomeSource;\n\ttaskId: string;\n\trepo?: string;\n\ttaskType?: string;\n\tsubagentType?: SubagentType;\n\tmode?: AgentMode;\n\tmodel?: string;\n\tprovider?: ModelProvider;\n\tstatus: AgentOutcomeStatus;\n\tconfidence?: number;\n\tdurationMs?: number;\n\ttokensUsed?: number;\n\tcostUsd?: number;\n\tlabels: string[];\n\tfailureReason?: string;\n\trecordedAt: string;\n}\n\nexport interface AgentOutcomeInput\n\textends Omit<\n\t\tNormalizedAgentOutcome,\n\t\t\"schemaVersion\" | \"labels\" | \"recordedAt\"\n\t> {\n\tlabels?: string[];\n\trecordedAt?: string;\n}\n\nexport interface AgentOutcomeSummary {\n\ttotal: number;\n\tsuccesses: number;\n\tfailures: number;\n\tsuccessRate: number;\n\tbySubagent: Record<\n\t\tstring,\n\t\t{\n\t\t\ttotal: number;\n\t\t\tsuccesses: number;\n\t\t\tfailures: number;\n\t\t\tsuccessRate: number;\n\t\t}\n\t>;\n\tbestSubagent?: SubagentType;\n\tneedsEscalation: boolean;\n}\n\ninterface AgentOutcomeBucket {\n\ttotal: number;\n\tsuccesses: number;\n\tfailures: number;\n\tsuccessRate: number;\n}\n\nexport function normalizeAgentOutcome(\n\tinput: AgentOutcomeInput,\n): NormalizedAgentOutcome {\n\treturn {\n\t\tschemaVersion: AGENT_OUTCOME_SCHEMA,\n\t\t...input,\n\t\tlabels: uniqueStrings(input.labels ?? []),\n\t\trecordedAt: input.recordedAt ?? new Date().toISOString(),\n\t};\n}\n\nexport function summarizeAgentOutcomes(\n\toutcomes: readonly NormalizedAgentOutcome[],\n): AgentOutcomeSummary {\n\tconst total = outcomes.length;\n\tconst successes = outcomes.filter(isSuccessfulOutcome).length;\n\tconst failures = total - successes;\n\tconst bySubagent = new Map<string, AgentOutcomeBucket>();\n\tfor (const outcome of outcomes) {\n\t\tif (!outcome.subagentType) continue;\n\t\tconst current = bySubagent.get(outcome.subagentType) ?? {\n\t\t\ttotal: 0,\n\t\t\tsuccesses: 0,\n\t\t\tfailures: 0,\n\t\t\tsuccessRate: 0,\n\t\t};\n\t\tcurrent.total += 1;\n\t\tif (isSuccessfulOutcome(outcome)) {\n\t\t\tcurrent.successes += 1;\n\t\t} else {\n\t\t\tcurrent.failures += 1;\n\t\t}\n\t\tcurrent.successRate = ratio(current.successes, current.total);\n\t\tbySubagent.set(outcome.subagentType, current);\n\t}\n\tconst ranked = [...bySubagent.entries()]\n\t\t.filter(([, value]) => value.total >= 2)\n\t\t.sort(\n\t\t\t(left, right) =>\n\t\t\t\tright[1].successRate - left[1].successRate ||\n\t\t\t\tright[1].total - left[1].total ||\n\t\t\t\tleft[0].localeCompare(right[0]),\n\t\t);\n\treturn {\n\t\ttotal,\n\t\tsuccesses,\n\t\tfailures,\n\t\tsuccessRate: ratio(successes, total),\n\t\tbySubagent: Object.fromEntries(bySubagent),\n\t\tbestSubagent: ranked[0]?.[0] as SubagentType | undefined,\n\t\tneedsEscalation: total >= 3 && ratio(successes, total) < 0.5,\n\t};\n}\n\nexport function resolveAdaptiveSubagentDispatch(input: {\n\tmode: AgentMode;\n\tsubagentType: SubagentType;\n\tprovider?: ModelProvider;\n\toutcomes?: readonly NormalizedAgentOutcome[];\n}): ResolvedSubagentDispatch & {\n\toutcomeSummary?: AgentOutcomeSummary;\n\tadaptation:\n\t\t| \"none\"\n\t\t| \"escalated-mode\"\n\t\t| \"best-known-subagent\"\n\t\t| \"escalated-mode-and-best-known-subagent\";\n} {\n\tconst summary = input.outcomes\n\t\t? summarizeAgentOutcomes(input.outcomes)\n\t\t: undefined;\n\tconst adaptedMode =\n\t\tsummary?.needsEscalation === true && input.mode !== \"frontier\"\n\t\t\t? \"frontier\"\n\t\t\t: input.mode;\n\tconst adaptedSubagent =\n\t\tcomparableBestSubagent(input, summary) ?? input.subagentType;\n\tconst dispatch = resolveSubagentDispatch(\n\t\tadaptedMode,\n\t\tadaptedSubagent,\n\t\tinput.provider,\n\t);\n\treturn {\n\t\t...dispatch,\n\t\toutcomeSummary: summary,\n\t\tadaptation: resolveAdaptation({\n\t\t\tmodeChanged: adaptedMode !== input.mode,\n\t\t\tsubagentChanged: adaptedSubagent !== input.subagentType,\n\t\t}),\n\t};\n}\n\nfunction resolveAdaptation(input: {\n\tmodeChanged: boolean;\n\tsubagentChanged: boolean;\n}):\n\t| \"none\"\n\t| \"escalated-mode\"\n\t| \"best-known-subagent\"\n\t| \"escalated-mode-and-best-known-subagent\" {\n\tif (input.modeChanged && input.subagentChanged) {\n\t\treturn \"escalated-mode-and-best-known-subagent\";\n\t}\n\tif (input.modeChanged) return \"escalated-mode\";\n\tif (input.subagentChanged) return \"best-known-subagent\";\n\treturn \"none\";\n}\n\nfunction isSuccessfulOutcome(outcome: NormalizedAgentOutcome): boolean {\n\treturn outcome.status === \"succeeded\" || outcome.status === \"merged\";\n}\n\nfunction comparableBestSubagent(\n\tinput: {\n\t\tsubagentType: SubagentType;\n\t\toutcomes?: readonly NormalizedAgentOutcome[];\n\t},\n\tsummary: AgentOutcomeSummary | undefined,\n): SubagentType | undefined {\n\tif (!summary || !input.outcomes) return undefined;\n\n\tconst currentLaneOutcomes = input.outcomes.filter(\n\t\t(outcome) => outcome.subagentType === input.subagentType,\n\t);\n\tif (currentLaneOutcomes.length < 2) return undefined;\n\tconst currentLaneFailures = currentLaneOutcomes.filter(\n\t\t(outcome) => !isSuccessfulOutcome(outcome),\n\t);\n\tif (currentLaneFailures.length < 2) return undefined;\n\n\tconst currentTaskTypes = new Set(\n\t\tcurrentLaneFailures\n\t\t\t.map((outcome) => outcome.taskType?.trim())\n\t\t\t.filter((taskType): taskType is string => Boolean(taskType)),\n\t);\n\tif (currentTaskTypes.size === 0) return undefined;\n\tconst currentComparableSummary = summarizeComparableOutcomes(\n\t\tinput.outcomes,\n\t\tinput.subagentType,\n\t\tcurrentTaskTypes,\n\t);\n\tif (currentComparableSummary.total === 0) return undefined;\n\n\tconst comparableCandidates = new Set<SubagentType>();\n\tfor (const outcome of input.outcomes) {\n\t\tconst taskType = outcome.taskType?.trim();\n\t\tif (\n\t\t\toutcome.subagentType &&\n\t\t\toutcome.subagentType !== input.subagentType &&\n\t\t\tisSuccessfulOutcome(outcome) &&\n\t\t\ttaskType !== undefined &&\n\t\t\tcurrentTaskTypes.has(taskType)\n\t\t) {\n\t\t\tcomparableCandidates.add(outcome.subagentType);\n\t\t}\n\t}\n\n\treturn [...comparableCandidates]\n\t\t.map((subagentType) => ({\n\t\t\tsubagentType,\n\t\t\tsummary: summarizeComparableOutcomes(\n\t\t\t\tinput.outcomes ?? [],\n\t\t\t\tsubagentType,\n\t\t\t\tcurrentTaskTypes,\n\t\t\t),\n\t\t}))\n\t\t.filter(\n\t\t\t(candidate) =>\n\t\t\t\tcandidate.summary.successes > 0 &&\n\t\t\t\tcandidate.summary.successRate > currentComparableSummary.successRate,\n\t\t)\n\t\t.sort(\n\t\t\t(left, right) =>\n\t\t\t\tright.summary.successRate - left.summary.successRate ||\n\t\t\t\tright.summary.total - left.summary.total ||\n\t\t\t\tleft.subagentType.localeCompare(right.subagentType),\n\t\t)[0]?.subagentType;\n}\n\nfunction summarizeComparableOutcomes(\n\toutcomes: readonly NormalizedAgentOutcome[],\n\tsubagentType: SubagentType,\n\ttaskTypes: ReadonlySet<string>,\n): AgentOutcomeBucket {\n\tconst matching = outcomes.filter((outcome) => {\n\t\tconst taskType = outcome.taskType?.trim();\n\t\treturn (\n\t\t\toutcome.subagentType === subagentType &&\n\t\t\ttaskType !== undefined &&\n\t\t\ttaskTypes.has(taskType)\n\t\t);\n\t});\n\tconst successes = matching.filter(isSuccessfulOutcome).length;\n\tconst total = matching.length;\n\treturn {\n\t\ttotal,\n\t\tsuccesses,\n\t\tfailures: total - successes,\n\t\tsuccessRate: ratio(successes, total),\n\t};\n}\n\nfunction ratio(numerator: number, denominator: number): number {\n\treturn denominator === 0 ? 0 : Number((numerator / denominator).toFixed(4));\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n\treturn Array.from(\n\t\tnew Set(values.map((value) => value.trim()).filter(Boolean)),\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-resume.d.ts","sourceRoot":"","sources":["../../src/agent/agent-resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-resume.d.ts","sourceRoot":"","sources":["../../src/agent/agent-resume.ts"],"names":[],"mappings":"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"}
@@ -59,10 +59,10 @@ export class FileTranscriptStore {
59
59
  transcripts.push(transcript);
60
60
  }
61
61
  }
62
- if (transcripts.length >= limit)
63
- break;
64
62
  }
65
- // Sort by updatedAt descending
63
+ // Sort by updatedAt descending, then enforce the limit. Sorting must
64
+ // happen before slicing, otherwise `limit` truncates by readdir order
65
+ // (arbitrary) rather than by recency.
66
66
  transcripts.sort((a, b) => b.updatedAt - a.updatedAt);
67
67
  return transcripts.slice(0, limit);
68
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-resume.js","sourceRoot":"","sources":["../../src/agent/agent-resume.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Resume Capability\n *\n * Enables agents (particularly subagents) to be resumed from a previous execution\n * transcript. This is useful for:\n * - Continuing interrupted agent tasks\n * - Building on previous analysis\n * - Maintaining context across sessions\n */\n\nimport { constants, access, readFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { type Clock, systemClock } from \"../utils/clock.js\";\nimport { writeJsonFile } from \"../utils/fs.js\";\nimport { type IdGenerator, systemIdGenerator } from \"../utils/ids.js\";\nimport { getHomeDir, resolveEnvPath } from \"../utils/path-expansion.js\";\nimport type { AppMessage, Message } from \"./types.js\";\n\n/**\n * Represents a saved agent execution state.\n */\nexport interface AgentTranscript {\n\t/** Unique identifier for this transcript */\n\tid: string;\n\t/** Agent type (e.g., \"explore\", \"plan\", \"review\") */\n\tagentType: string;\n\t/** When the agent started */\n\tstartedAt: number;\n\t/** When the agent last updated */\n\tupdatedAt: number;\n\t/** The original task/prompt */\n\toriginalPrompt: string;\n\t/** System prompt used */\n\tsystemPrompt: string;\n\t/** Model used */\n\tmodel: string;\n\t/** Conversation messages */\n\tmessages: AppMessage[];\n\t/** Whether the agent completed its task */\n\tcompleted: boolean;\n\t/** Final result if completed */\n\tresult?: string;\n\t/** Error if failed */\n\terror?: string;\n\t/** Custom metadata */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Storage interface for agent transcripts.\n */\nexport interface TranscriptStore {\n\t/** Save a transcript */\n\tsave(transcript: AgentTranscript): Promise<void>;\n\t/** Load a transcript by ID */\n\tload(id: string): Promise<AgentTranscript | null>;\n\t/** List recent transcripts */\n\tlist(options?: { agentType?: string; limit?: number }): Promise<\n\t\tAgentTranscript[]\n\t>;\n\t/** Delete a transcript */\n\tdelete(id: string): Promise<void>;\n}\n\nexport interface TranscriptFactoryOptions {\n\tclock?: Clock;\n\tidGenerator?: IdGenerator;\n}\n\n/**\n * File-based transcript storage.\n */\nexport class FileTranscriptStore implements TranscriptStore {\n\tprivate baseDir: string;\n\n\tconstructor(baseDir?: string) {\n\t\tthis.baseDir =\n\t\t\tbaseDir ||\n\t\t\tjoin(\n\t\t\t\tresolveEnvPath(process.env.MAESTRO_DATA_DIR) ??\n\t\t\t\t\tresolveEnvPath(getHomeDir()) ??\n\t\t\t\t\ttmpdir(),\n\t\t\t\t\".maestro\",\n\t\t\t\t\"transcripts\",\n\t\t\t);\n\t}\n\n\tprivate getPath(id: string): string {\n\t\treturn join(this.baseDir, `${id}.json`);\n\t}\n\n\tasync save(transcript: AgentTranscript): Promise<void> {\n\t\tconst path = this.getPath(transcript.id);\n\t\twriteJsonFile(path, transcript);\n\t}\n\n\tasync load(id: string): Promise<AgentTranscript | null> {\n\t\tconst path = this.getPath(id);\n\t\ttry {\n\t\t\tawait access(path, constants.R_OK);\n\t\t\tconst content = await readFile(path, \"utf-8\");\n\t\t\treturn JSON.parse(content) as AgentTranscript;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync list(options?: { agentType?: string; limit?: number }): Promise<\n\t\tAgentTranscript[]\n\t> {\n\t\tconst { agentType, limit = 100 } = options || {};\n\t\tconst { readdir } = await import(\"node:fs/promises\");\n\n\t\ttry {\n\t\t\tconst files = await readdir(this.baseDir);\n\t\t\tconst transcripts: AgentTranscript[] = [];\n\n\t\t\tfor (const file of files) {\n\t\t\t\tif (!file.endsWith(\".json\")) continue;\n\t\t\t\tconst id = file.replace(\".json\", \"\");\n\t\t\t\tconst transcript = await this.load(id);\n\t\t\t\tif (transcript) {\n\t\t\t\t\tif (!agentType || transcript.agentType === agentType) {\n\t\t\t\t\t\ttranscripts.push(transcript);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (transcripts.length >= limit) break;\n\t\t\t}\n\n\t\t\t// Sort by updatedAt descending\n\t\t\ttranscripts.sort((a, b) => b.updatedAt - a.updatedAt);\n\t\t\treturn transcripts.slice(0, limit);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tasync delete(id: string): Promise<void> {\n\t\tconst { unlink } = await import(\"node:fs/promises\");\n\t\ttry {\n\t\t\tawait unlink(this.getPath(id));\n\t\t} catch {\n\t\t\t// Ignore if file doesn't exist\n\t\t}\n\t}\n}\n\n/**\n * In-memory transcript storage (useful for testing).\n */\nexport class MemoryTranscriptStore implements TranscriptStore {\n\tprivate transcripts: Map<string, AgentTranscript> = new Map();\n\n\tasync save(transcript: AgentTranscript): Promise<void> {\n\t\tthis.transcripts.set(transcript.id, { ...transcript });\n\t}\n\n\tasync load(id: string): Promise<AgentTranscript | null> {\n\t\tconst transcript = this.transcripts.get(id);\n\t\treturn transcript ? { ...transcript } : null;\n\t}\n\n\tasync list(options?: { agentType?: string; limit?: number }): Promise<\n\t\tAgentTranscript[]\n\t> {\n\t\tconst { agentType, limit = 100 } = options || {};\n\t\tlet results = Array.from(this.transcripts.values());\n\n\t\tif (agentType) {\n\t\t\tresults = results.filter((t) => t.agentType === agentType);\n\t\t}\n\n\t\tresults.sort((a, b) => b.updatedAt - a.updatedAt);\n\t\treturn results.slice(0, limit);\n\t}\n\n\tasync delete(id: string): Promise<void> {\n\t\tthis.transcripts.delete(id);\n\t}\n\n\tclear(): void {\n\t\tthis.transcripts.clear();\n\t}\n}\n\n/**\n * Create a new transcript for an agent execution.\n */\nexport function createTranscript(\n\tagentType: string,\n\tprompt: string,\n\tsystemPrompt: string,\n\tmodel: string,\n\tmetadata?: Record<string, unknown>,\n\toptions?: TranscriptFactoryOptions,\n): AgentTranscript {\n\tconst clock = options?.clock ?? systemClock;\n\tconst idGenerator = options?.idGenerator ?? systemIdGenerator;\n\tconst now = clock.now();\n\treturn {\n\t\tid: idGenerator.uuid(),\n\t\tagentType,\n\t\tstartedAt: now,\n\t\tupdatedAt: now,\n\t\toriginalPrompt: prompt,\n\t\tsystemPrompt,\n\t\tmodel,\n\t\tmessages: [],\n\t\tcompleted: false,\n\t\tmetadata,\n\t};\n}\n\n/**\n * Update a transcript with new messages.\n */\nexport function updateTranscript(\n\ttranscript: AgentTranscript,\n\tmessages: AppMessage[],\n\toptions?: Pick<TranscriptFactoryOptions, \"clock\">,\n): AgentTranscript {\n\treturn {\n\t\t...transcript,\n\t\tmessages,\n\t\tupdatedAt: (options?.clock ?? systemClock).now(),\n\t};\n}\n\n/**\n * Mark a transcript as completed.\n */\nexport function completeTranscript(\n\ttranscript: AgentTranscript,\n\tresult: string,\n\toptions?: Pick<TranscriptFactoryOptions, \"clock\">,\n): AgentTranscript {\n\treturn {\n\t\t...transcript,\n\t\tcompleted: true,\n\t\tresult,\n\t\tupdatedAt: (options?.clock ?? systemClock).now(),\n\t};\n}\n\n/**\n * Mark a transcript as failed.\n */\nexport function failTranscript(\n\ttranscript: AgentTranscript,\n\terror: string,\n\toptions?: Pick<TranscriptFactoryOptions, \"clock\">,\n): AgentTranscript {\n\treturn {\n\t\t...transcript,\n\t\tcompleted: true,\n\t\terror,\n\t\tupdatedAt: (options?.clock ?? systemClock).now(),\n\t};\n}\n\n/**\n * Extract a summary from a transcript for resumption context.\n */\nexport function getTranscriptSummary(transcript: AgentTranscript): string {\n\tconst lines: string[] = [];\n\n\tlines.push(`## Previous ${transcript.agentType} Agent Session`);\n\tlines.push(`Started: ${new Date(transcript.startedAt).toISOString()}`);\n\tlines.push(`Original Task: ${transcript.originalPrompt}`);\n\tlines.push(\"\");\n\n\tif (transcript.completed && transcript.result) {\n\t\tlines.push(\"### Previous Result:\");\n\t\tlines.push(transcript.result);\n\t\tlines.push(\"\");\n\t}\n\n\t// Add key messages (assistant responses, not tool results)\n\tconst keyMessages = transcript.messages.filter(\n\t\t(m) => m.role === \"assistant\" || m.role === \"user\",\n\t);\n\n\tif (keyMessages.length > 0) {\n\t\tlines.push(\"### Conversation History:\");\n\t\tfor (const msg of keyMessages.slice(-10)) {\n\t\t\t// Last 10 messages\n\t\t\tif (msg.role === \"user\" && typeof msg.content === \"string\") {\n\t\t\t\tlines.push(\n\t\t\t\t\t`**User:** ${msg.content.slice(0, 500)}${msg.content.length > 500 ? \"...\" : \"\"}`,\n\t\t\t\t);\n\t\t\t} else if (msg.role === \"assistant\") {\n\t\t\t\tconst text = msg.content\n\t\t\t\t\t.filter((c): c is { type: \"text\"; text: string } => c.type === \"text\")\n\t\t\t\t\t.map((c) => c.text)\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tif (text) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\t`**Assistant:** ${text.slice(0, 500)}${text.length > 500 ? \"...\" : \"\"}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Build a resume prompt from a transcript.\n */\nexport function buildResumePrompt(\n\ttranscript: AgentTranscript,\n\tnewPrompt: string,\n): string {\n\tconst summary = getTranscriptSummary(transcript);\n\n\treturn `${summary}\n\n---\n\n## Continuation Request\n\n${newPrompt}\n\nPlease continue from where the previous session left off, building on the previous analysis and context.`;\n}\n\n// Default store instance\nlet defaultStore: TranscriptStore | null = null;\n\n/**\n * Get the default transcript store.\n */\nexport function getDefaultTranscriptStore(): TranscriptStore {\n\tif (!defaultStore) {\n\t\tdefaultStore = new FileTranscriptStore();\n\t}\n\treturn defaultStore;\n}\n\n/**\n * Set the default transcript store.\n */\nexport function setDefaultTranscriptStore(store: TranscriptStore): void {\n\tdefaultStore = store;\n}\n"]}
1
+ {"version":3,"file":"agent-resume.js","sourceRoot":"","sources":["../../src/agent/agent-resume.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Resume Capability\n *\n * Enables agents (particularly subagents) to be resumed from a previous execution\n * transcript. This is useful for:\n * - Continuing interrupted agent tasks\n * - Building on previous analysis\n * - Maintaining context across sessions\n */\n\nimport { constants, access, readFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { type Clock, systemClock } from \"../utils/clock.js\";\nimport { writeJsonFile } from \"../utils/fs.js\";\nimport { type IdGenerator, systemIdGenerator } from \"../utils/ids.js\";\nimport { getHomeDir, resolveEnvPath } from \"../utils/path-expansion.js\";\nimport type { AppMessage, Message } from \"./types.js\";\n\n/**\n * Represents a saved agent execution state.\n */\nexport interface AgentTranscript {\n\t/** Unique identifier for this transcript */\n\tid: string;\n\t/** Agent type (e.g., \"explore\", \"plan\", \"review\") */\n\tagentType: string;\n\t/** When the agent started */\n\tstartedAt: number;\n\t/** When the agent last updated */\n\tupdatedAt: number;\n\t/** The original task/prompt */\n\toriginalPrompt: string;\n\t/** System prompt used */\n\tsystemPrompt: string;\n\t/** Model used */\n\tmodel: string;\n\t/** Conversation messages */\n\tmessages: AppMessage[];\n\t/** Whether the agent completed its task */\n\tcompleted: boolean;\n\t/** Final result if completed */\n\tresult?: string;\n\t/** Error if failed */\n\terror?: string;\n\t/** Custom metadata */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Storage interface for agent transcripts.\n */\nexport interface TranscriptStore {\n\t/** Save a transcript */\n\tsave(transcript: AgentTranscript): Promise<void>;\n\t/** Load a transcript by ID */\n\tload(id: string): Promise<AgentTranscript | null>;\n\t/** List recent transcripts */\n\tlist(options?: { agentType?: string; limit?: number }): Promise<\n\t\tAgentTranscript[]\n\t>;\n\t/** Delete a transcript */\n\tdelete(id: string): Promise<void>;\n}\n\nexport interface TranscriptFactoryOptions {\n\tclock?: Clock;\n\tidGenerator?: IdGenerator;\n}\n\n/**\n * File-based transcript storage.\n */\nexport class FileTranscriptStore implements TranscriptStore {\n\tprivate baseDir: string;\n\n\tconstructor(baseDir?: string) {\n\t\tthis.baseDir =\n\t\t\tbaseDir ||\n\t\t\tjoin(\n\t\t\t\tresolveEnvPath(process.env.MAESTRO_DATA_DIR) ??\n\t\t\t\t\tresolveEnvPath(getHomeDir()) ??\n\t\t\t\t\ttmpdir(),\n\t\t\t\t\".maestro\",\n\t\t\t\t\"transcripts\",\n\t\t\t);\n\t}\n\n\tprivate getPath(id: string): string {\n\t\treturn join(this.baseDir, `${id}.json`);\n\t}\n\n\tasync save(transcript: AgentTranscript): Promise<void> {\n\t\tconst path = this.getPath(transcript.id);\n\t\twriteJsonFile(path, transcript);\n\t}\n\n\tasync load(id: string): Promise<AgentTranscript | null> {\n\t\tconst path = this.getPath(id);\n\t\ttry {\n\t\t\tawait access(path, constants.R_OK);\n\t\t\tconst content = await readFile(path, \"utf-8\");\n\t\t\treturn JSON.parse(content) as AgentTranscript;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync list(options?: { agentType?: string; limit?: number }): Promise<\n\t\tAgentTranscript[]\n\t> {\n\t\tconst { agentType, limit = 100 } = options || {};\n\t\tconst { readdir } = await import(\"node:fs/promises\");\n\n\t\ttry {\n\t\t\tconst files = await readdir(this.baseDir);\n\t\t\tconst transcripts: AgentTranscript[] = [];\n\n\t\t\tfor (const file of files) {\n\t\t\t\tif (!file.endsWith(\".json\")) continue;\n\t\t\t\tconst id = file.replace(\".json\", \"\");\n\t\t\t\tconst transcript = await this.load(id);\n\t\t\t\tif (transcript) {\n\t\t\t\t\tif (!agentType || transcript.agentType === agentType) {\n\t\t\t\t\t\ttranscripts.push(transcript);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Sort by updatedAt descending, then enforce the limit. Sorting must\n\t\t\t// happen before slicing, otherwise `limit` truncates by readdir order\n\t\t\t// (arbitrary) rather than by recency.\n\t\t\ttranscripts.sort((a, b) => b.updatedAt - a.updatedAt);\n\t\t\treturn transcripts.slice(0, limit);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tasync delete(id: string): Promise<void> {\n\t\tconst { unlink } = await import(\"node:fs/promises\");\n\t\ttry {\n\t\t\tawait unlink(this.getPath(id));\n\t\t} catch {\n\t\t\t// Ignore if file doesn't exist\n\t\t}\n\t}\n}\n\n/**\n * In-memory transcript storage (useful for testing).\n */\nexport class MemoryTranscriptStore implements TranscriptStore {\n\tprivate transcripts: Map<string, AgentTranscript> = new Map();\n\n\tasync save(transcript: AgentTranscript): Promise<void> {\n\t\tthis.transcripts.set(transcript.id, { ...transcript });\n\t}\n\n\tasync load(id: string): Promise<AgentTranscript | null> {\n\t\tconst transcript = this.transcripts.get(id);\n\t\treturn transcript ? { ...transcript } : null;\n\t}\n\n\tasync list(options?: { agentType?: string; limit?: number }): Promise<\n\t\tAgentTranscript[]\n\t> {\n\t\tconst { agentType, limit = 100 } = options || {};\n\t\tlet results = Array.from(this.transcripts.values());\n\n\t\tif (agentType) {\n\t\t\tresults = results.filter((t) => t.agentType === agentType);\n\t\t}\n\n\t\tresults.sort((a, b) => b.updatedAt - a.updatedAt);\n\t\treturn results.slice(0, limit);\n\t}\n\n\tasync delete(id: string): Promise<void> {\n\t\tthis.transcripts.delete(id);\n\t}\n\n\tclear(): void {\n\t\tthis.transcripts.clear();\n\t}\n}\n\n/**\n * Create a new transcript for an agent execution.\n */\nexport function createTranscript(\n\tagentType: string,\n\tprompt: string,\n\tsystemPrompt: string,\n\tmodel: string,\n\tmetadata?: Record<string, unknown>,\n\toptions?: TranscriptFactoryOptions,\n): AgentTranscript {\n\tconst clock = options?.clock ?? systemClock;\n\tconst idGenerator = options?.idGenerator ?? systemIdGenerator;\n\tconst now = clock.now();\n\treturn {\n\t\tid: idGenerator.uuid(),\n\t\tagentType,\n\t\tstartedAt: now,\n\t\tupdatedAt: now,\n\t\toriginalPrompt: prompt,\n\t\tsystemPrompt,\n\t\tmodel,\n\t\tmessages: [],\n\t\tcompleted: false,\n\t\tmetadata,\n\t};\n}\n\n/**\n * Update a transcript with new messages.\n */\nexport function updateTranscript(\n\ttranscript: AgentTranscript,\n\tmessages: AppMessage[],\n\toptions?: Pick<TranscriptFactoryOptions, \"clock\">,\n): AgentTranscript {\n\treturn {\n\t\t...transcript,\n\t\tmessages,\n\t\tupdatedAt: (options?.clock ?? systemClock).now(),\n\t};\n}\n\n/**\n * Mark a transcript as completed.\n */\nexport function completeTranscript(\n\ttranscript: AgentTranscript,\n\tresult: string,\n\toptions?: Pick<TranscriptFactoryOptions, \"clock\">,\n): AgentTranscript {\n\treturn {\n\t\t...transcript,\n\t\tcompleted: true,\n\t\tresult,\n\t\tupdatedAt: (options?.clock ?? systemClock).now(),\n\t};\n}\n\n/**\n * Mark a transcript as failed.\n */\nexport function failTranscript(\n\ttranscript: AgentTranscript,\n\terror: string,\n\toptions?: Pick<TranscriptFactoryOptions, \"clock\">,\n): AgentTranscript {\n\treturn {\n\t\t...transcript,\n\t\tcompleted: true,\n\t\terror,\n\t\tupdatedAt: (options?.clock ?? systemClock).now(),\n\t};\n}\n\n/**\n * Extract a summary from a transcript for resumption context.\n */\nexport function getTranscriptSummary(transcript: AgentTranscript): string {\n\tconst lines: string[] = [];\n\n\tlines.push(`## Previous ${transcript.agentType} Agent Session`);\n\tlines.push(`Started: ${new Date(transcript.startedAt).toISOString()}`);\n\tlines.push(`Original Task: ${transcript.originalPrompt}`);\n\tlines.push(\"\");\n\n\tif (transcript.completed && transcript.result) {\n\t\tlines.push(\"### Previous Result:\");\n\t\tlines.push(transcript.result);\n\t\tlines.push(\"\");\n\t}\n\n\t// Add key messages (assistant responses, not tool results)\n\tconst keyMessages = transcript.messages.filter(\n\t\t(m) => m.role === \"assistant\" || m.role === \"user\",\n\t);\n\n\tif (keyMessages.length > 0) {\n\t\tlines.push(\"### Conversation History:\");\n\t\tfor (const msg of keyMessages.slice(-10)) {\n\t\t\t// Last 10 messages\n\t\t\tif (msg.role === \"user\" && typeof msg.content === \"string\") {\n\t\t\t\tlines.push(\n\t\t\t\t\t`**User:** ${msg.content.slice(0, 500)}${msg.content.length > 500 ? \"...\" : \"\"}`,\n\t\t\t\t);\n\t\t\t} else if (msg.role === \"assistant\") {\n\t\t\t\tconst text = msg.content\n\t\t\t\t\t.filter((c): c is { type: \"text\"; text: string } => c.type === \"text\")\n\t\t\t\t\t.map((c) => c.text)\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tif (text) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\t`**Assistant:** ${text.slice(0, 500)}${text.length > 500 ? \"...\" : \"\"}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Build a resume prompt from a transcript.\n */\nexport function buildResumePrompt(\n\ttranscript: AgentTranscript,\n\tnewPrompt: string,\n): string {\n\tconst summary = getTranscriptSummary(transcript);\n\n\treturn `${summary}\n\n---\n\n## Continuation Request\n\n${newPrompt}\n\nPlease continue from where the previous session left off, building on the previous analysis and context.`;\n}\n\n// Default store instance\nlet defaultStore: TranscriptStore | null = null;\n\n/**\n * Get the default transcript store.\n */\nexport function getDefaultTranscriptStore(): TranscriptStore {\n\tif (!defaultStore) {\n\t\tdefaultStore = new FileTranscriptStore();\n\t}\n\treturn defaultStore;\n}\n\n/**\n * Set the default transcript store.\n */\nexport function setDefaultTranscriptStore(store: TranscriptStore): void {\n\tdefaultStore = store;\n}\n"]}
@@ -0,0 +1,37 @@
1
+ export declare const AGENT_RUN_SUMMARY_SCHEMA = "evalops.maestro.agent-run-summary.v1";
2
+ export type AgentRunSummaryStatus = "queued" | "running" | "completed" | "failed" | "cancelled";
3
+ export interface AgentRunSummaryUsage {
4
+ inputTokens?: number;
5
+ outputTokens?: number;
6
+ cacheReadTokens?: number;
7
+ cacheWriteTokens?: number;
8
+ totalTokens?: number;
9
+ estimatedCostUsd?: number;
10
+ }
11
+ export interface AgentRunSummaryArtifact {
12
+ kind: string;
13
+ path?: string;
14
+ url?: string;
15
+ description?: string;
16
+ }
17
+ export interface AgentRunSummaryInput {
18
+ id: string;
19
+ status: AgentRunSummaryStatus;
20
+ startedAt?: string;
21
+ completedAt?: string;
22
+ durationMs?: number;
23
+ sessionId?: string;
24
+ transcriptPath?: string;
25
+ summary?: string;
26
+ result?: string;
27
+ error?: string;
28
+ usage?: AgentRunSummaryUsage;
29
+ artifacts?: AgentRunSummaryArtifact[];
30
+ truncated?: boolean;
31
+ rawOutputPath?: string;
32
+ }
33
+ export interface AgentRunSummary extends AgentRunSummaryInput {
34
+ schemaVersion: typeof AGENT_RUN_SUMMARY_SCHEMA;
35
+ }
36
+ export declare function buildAgentRunSummary(input: AgentRunSummaryInput): AgentRunSummary;
37
+ //# sourceMappingURL=agent-run-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run-summary.d.ts","sourceRoot":"","sources":["../../src/agent/agent-run-summary.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,yCAAyC,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAC9B,QAAQ,GACR,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEf,MAAM,WAAW,oBAAoB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,qBAAqB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,SAAS,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC5D,aAAa,EAAE,OAAO,wBAAwB,CAAC;CAC/C;AAED,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,oBAAoB,GACzB,eAAe,CAMjB"}
@@ -0,0 +1,15 @@
1
+ export const AGENT_RUN_SUMMARY_SCHEMA = "evalops.maestro.agent-run-summary.v1";
2
+ export function buildAgentRunSummary(input) {
3
+ return {
4
+ schemaVersion: AGENT_RUN_SUMMARY_SCHEMA,
5
+ ...input,
6
+ artifacts: input.artifacts?.filter(hasArtifactPointer),
7
+ };
8
+ }
9
+ function hasArtifactPointer(artifact) {
10
+ return Boolean(artifact.kind.trim() &&
11
+ (artifact.path?.trim() ||
12
+ artifact.url?.trim() ||
13
+ artifact.description?.trim()));
14
+ }
15
+ //# sourceMappingURL=agent-run-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run-summary.js","sourceRoot":"","sources":["../../src/agent/agent-run-summary.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,sCAAsC,CAAC;AA8C/E,MAAM,UAAU,oBAAoB,CACnC,KAA2B;IAE3B,OAAO;QACN,aAAa,EAAE,wBAAwB;QACvC,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC;KACtD,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAiC;IAC5D,OAAO,OAAO,CACb,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QACnB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE;YACrB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE;YACpB,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAC/B,CAAC;AACH,CAAC","sourcesContent":["export const AGENT_RUN_SUMMARY_SCHEMA = \"evalops.maestro.agent-run-summary.v1\";\n\nexport type AgentRunSummaryStatus =\n\t| \"queued\"\n\t| \"running\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"cancelled\";\n\nexport interface AgentRunSummaryUsage {\n\tinputTokens?: number;\n\toutputTokens?: number;\n\tcacheReadTokens?: number;\n\tcacheWriteTokens?: number;\n\ttotalTokens?: number;\n\testimatedCostUsd?: number;\n}\n\nexport interface AgentRunSummaryArtifact {\n\tkind: string;\n\tpath?: string;\n\turl?: string;\n\tdescription?: string;\n}\n\nexport interface AgentRunSummaryInput {\n\tid: string;\n\tstatus: AgentRunSummaryStatus;\n\tstartedAt?: string;\n\tcompletedAt?: string;\n\tdurationMs?: number;\n\tsessionId?: string;\n\ttranscriptPath?: string;\n\tsummary?: string;\n\tresult?: string;\n\terror?: string;\n\tusage?: AgentRunSummaryUsage;\n\tartifacts?: AgentRunSummaryArtifact[];\n\ttruncated?: boolean;\n\trawOutputPath?: string;\n}\n\nexport interface AgentRunSummary extends AgentRunSummaryInput {\n\tschemaVersion: typeof AGENT_RUN_SUMMARY_SCHEMA;\n}\n\nexport function buildAgentRunSummary(\n\tinput: AgentRunSummaryInput,\n): AgentRunSummary {\n\treturn {\n\t\tschemaVersion: AGENT_RUN_SUMMARY_SCHEMA,\n\t\t...input,\n\t\tartifacts: input.artifacts?.filter(hasArtifactPointer),\n\t};\n}\n\nfunction hasArtifactPointer(artifact: AgentRunSummaryArtifact): boolean {\n\treturn Boolean(\n\t\tartifact.kind.trim() &&\n\t\t\t(artifact.path?.trim() ||\n\t\t\t\tartifact.url?.trim() ||\n\t\t\t\tartifact.description?.trim()),\n\t);\n}\n"]}
@@ -0,0 +1,82 @@
1
+ import type { A2ACockpitSummary } from "../platform/a2a-cockpit.js";
2
+ import type { TodoStore } from "../tools/todo.js";
3
+ import type { MissionManifest } from "./mission-manifest.js";
4
+ import { type MissionStoreSnapshot } from "./mission-store.js";
5
+ export declare const AGENT_WORK_BOARD_SCHEMA = "evalops.maestro.agent-work-board.v1";
6
+ export type AgentWorkItemSource = "mission" | "a2a" | "todo" | "handoff" | "github";
7
+ export type AgentWorkItemStatus = "pending" | "running" | "waiting" | "completed" | "failed" | "blocked";
8
+ export interface AgentWorkItemEvidence {
9
+ kind: string;
10
+ label: string;
11
+ path?: string;
12
+ url?: string;
13
+ }
14
+ export interface AgentWorkItem {
15
+ id: string;
16
+ source: AgentWorkItemSource;
17
+ title: string;
18
+ status: AgentWorkItemStatus;
19
+ owner?: string;
20
+ priority: "high" | "medium" | "low";
21
+ updatedAt?: string;
22
+ blockers: string[];
23
+ nextAction?: {
24
+ label: string;
25
+ command?: string;
26
+ };
27
+ evidence: AgentWorkItemEvidence[];
28
+ }
29
+ export interface GitHubAgentWorkProjection {
30
+ id: string;
31
+ title: string;
32
+ status: AgentWorkItemStatus;
33
+ branch?: string;
34
+ prUrl?: string;
35
+ updatedAt?: string;
36
+ error?: string;
37
+ }
38
+ export interface AgentWorkBoardHandoffProjection {
39
+ sessionId: string;
40
+ title: string;
41
+ status: "delivered" | "needs-followup" | "blocked";
42
+ nextAction: string;
43
+ blockers: string[];
44
+ evidence: {
45
+ sessionPath: string;
46
+ updatedAt: string;
47
+ };
48
+ }
49
+ export interface AgentWorkBoardOpenWorkProjection {
50
+ goal: string;
51
+ id: string;
52
+ content: string;
53
+ status: "pending" | "in_progress";
54
+ priority: "high" | "medium" | "low";
55
+ updatedAt: string;
56
+ blockers: string[];
57
+ }
58
+ export interface BuildAgentWorkBoardInput {
59
+ missions?: readonly MissionManifest[];
60
+ missionSnapshots?: readonly MissionStoreSnapshot[];
61
+ a2a?: A2ACockpitSummary;
62
+ todos?: TodoStore;
63
+ handoffs?: readonly AgentWorkBoardHandoffProjection[];
64
+ openWork?: readonly AgentWorkBoardOpenWorkProjection[];
65
+ githubTasks?: readonly GitHubAgentWorkProjection[];
66
+ }
67
+ export interface AgentWorkBoard {
68
+ schemaVersion: typeof AGENT_WORK_BOARD_SCHEMA;
69
+ generatedAt: string;
70
+ counts: {
71
+ total: number;
72
+ pending: number;
73
+ running: number;
74
+ waiting: number;
75
+ completed: number;
76
+ failed: number;
77
+ blocked: number;
78
+ };
79
+ items: AgentWorkItem[];
80
+ }
81
+ export declare function buildAgentWorkBoard(input: BuildAgentWorkBoardInput, now?: Date): AgentWorkBoard;
82
+ //# sourceMappingURL=agent-work-board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-work-board.d.ts","sourceRoot":"","sources":["../../src/agent/agent-work-board.ts"],"names":[],"mappings":"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"}