@mobrienv/autoloop 0.4.0 → 0.7.1

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 (441) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -14
  3. package/bin/autoloop +1 -1
  4. package/dist/index.d.ts +6 -0
  5. package/dist/index.js +19 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/testing/mock-backend.js +3 -5
  8. package/dist/testing/mock-backend.js.map +1 -1
  9. package/package.json +32 -23
  10. package/plugins/autoloop/.claude-plugin/plugin.json +1 -1
  11. package/dist/agent-map.d.ts +0 -10
  12. package/dist/agent-map.js +0 -58
  13. package/dist/agent-map.js.map +0 -1
  14. package/dist/backend/acp-client.d.ts +0 -38
  15. package/dist/backend/acp-client.js +0 -293
  16. package/dist/backend/acp-client.js.map +0 -1
  17. package/dist/backend/index.d.ts +0 -10
  18. package/dist/backend/index.js +0 -71
  19. package/dist/backend/index.js.map +0 -1
  20. package/dist/backend/kiro-bridge.d.ts +0 -19
  21. package/dist/backend/kiro-bridge.js +0 -114
  22. package/dist/backend/kiro-bridge.js.map +0 -1
  23. package/dist/backend/kiro-worker.d.ts +0 -1
  24. package/dist/backend/kiro-worker.js +0 -96
  25. package/dist/backend/kiro-worker.js.map +0 -1
  26. package/dist/backend/run-command.d.ts +0 -7
  27. package/dist/backend/run-command.js +0 -50
  28. package/dist/backend/run-command.js.map +0 -1
  29. package/dist/backend/run-kiro.d.ts +0 -3
  30. package/dist/backend/run-kiro.js +0 -16
  31. package/dist/backend/run-kiro.js.map +0 -1
  32. package/dist/backend/run-mock.d.ts +0 -1
  33. package/dist/backend/run-mock.js +0 -6
  34. package/dist/backend/run-mock.js.map +0 -1
  35. package/dist/backend/run-pi.d.ts +0 -5
  36. package/dist/backend/run-pi.js +0 -5
  37. package/dist/backend/run-pi.js.map +0 -1
  38. package/dist/backend/types.d.ts +0 -21
  39. package/dist/backend/types.js +0 -2
  40. package/dist/backend/types.js.map +0 -1
  41. package/dist/chains/budget.d.ts +0 -7
  42. package/dist/chains/budget.js +0 -54
  43. package/dist/chains/budget.js.map +0 -1
  44. package/dist/chains/load.d.ts +0 -18
  45. package/dist/chains/load.js +0 -129
  46. package/dist/chains/load.js.map +0 -1
  47. package/dist/chains/render.d.ts +0 -2
  48. package/dist/chains/render.js +0 -74
  49. package/dist/chains/render.js.map +0 -1
  50. package/dist/chains/run.d.ts +0 -17
  51. package/dist/chains/run.js +0 -260
  52. package/dist/chains/run.js.map +0 -1
  53. package/dist/chains/types.d.ts +0 -38
  54. package/dist/chains/types.js +0 -2
  55. package/dist/chains/types.js.map +0 -1
  56. package/dist/chains.d.ts +0 -6
  57. package/dist/chains.js +0 -5
  58. package/dist/chains.js.map +0 -1
  59. package/dist/cli/color.d.ts +0 -6
  60. package/dist/cli/color.js +0 -40
  61. package/dist/cli/color.js.map +0 -1
  62. package/dist/commands/chain.d.ts +0 -1
  63. package/dist/commands/chain.js +0 -53
  64. package/dist/commands/chain.js.map +0 -1
  65. package/dist/commands/config.d.ts +0 -1
  66. package/dist/commands/config.js +0 -74
  67. package/dist/commands/config.js.map +0 -1
  68. package/dist/commands/dashboard.d.ts +0 -1
  69. package/dist/commands/dashboard.js +0 -68
  70. package/dist/commands/dashboard.js.map +0 -1
  71. package/dist/commands/guide.d.ts +0 -1
  72. package/dist/commands/guide.js +0 -33
  73. package/dist/commands/guide.js.map +0 -1
  74. package/dist/commands/inspect.d.ts +0 -1
  75. package/dist/commands/inspect.js +0 -243
  76. package/dist/commands/inspect.js.map +0 -1
  77. package/dist/commands/list.d.ts +0 -1
  78. package/dist/commands/list.js +0 -15
  79. package/dist/commands/list.js.map +0 -1
  80. package/dist/commands/loops.d.ts +0 -1
  81. package/dist/commands/loops.js +0 -72
  82. package/dist/commands/loops.js.map +0 -1
  83. package/dist/commands/memory.d.ts +0 -1
  84. package/dist/commands/memory.js +0 -65
  85. package/dist/commands/memory.js.map +0 -1
  86. package/dist/commands/pi-adapter.d.ts +0 -1
  87. package/dist/commands/pi-adapter.js +0 -6
  88. package/dist/commands/pi-adapter.js.map +0 -1
  89. package/dist/commands/run.d.ts +0 -1
  90. package/dist/commands/run.js +0 -292
  91. package/dist/commands/run.js.map +0 -1
  92. package/dist/commands/runs.d.ts +0 -1
  93. package/dist/commands/runs.js +0 -50
  94. package/dist/commands/runs.js.map +0 -1
  95. package/dist/commands/task.d.ts +0 -1
  96. package/dist/commands/task.js +0 -74
  97. package/dist/commands/task.js.map +0 -1
  98. package/dist/commands/worktree.d.ts +0 -1
  99. package/dist/commands/worktree.js +0 -162
  100. package/dist/commands/worktree.js.map +0 -1
  101. package/dist/config.d.ts +0 -31
  102. package/dist/config.js +0 -261
  103. package/dist/config.js.map +0 -1
  104. package/dist/dashboard/app.d.ts +0 -12
  105. package/dist/dashboard/app.js +0 -23
  106. package/dist/dashboard/app.js.map +0 -1
  107. package/dist/dashboard/routes/api.d.ts +0 -3
  108. package/dist/dashboard/routes/api.js +0 -186
  109. package/dist/dashboard/routes/api.js.map +0 -1
  110. package/dist/dashboard/routes/pages.d.ts +0 -2
  111. package/dist/dashboard/routes/pages.js +0 -16
  112. package/dist/dashboard/routes/pages.js.map +0 -1
  113. package/dist/dashboard/views/alpine-vendor.d.ts +0 -1
  114. package/dist/dashboard/views/alpine-vendor.js +0 -10
  115. package/dist/dashboard/views/alpine-vendor.js.map +0 -1
  116. package/dist/dashboard/views/shell.d.ts +0 -1
  117. package/dist/dashboard/views/shell.js +0 -1062
  118. package/dist/dashboard/views/shell.js.map +0 -1
  119. package/dist/events/decode.d.ts +0 -2
  120. package/dist/events/decode.js +0 -45
  121. package/dist/events/decode.js.map +0 -1
  122. package/dist/events/encode.d.ts +0 -2
  123. package/dist/events/encode.js +0 -33
  124. package/dist/events/encode.js.map +0 -1
  125. package/dist/events/guards.d.ts +0 -5
  126. package/dist/events/guards.js +0 -42
  127. package/dist/events/guards.js.map +0 -1
  128. package/dist/events/types.d.ts +0 -27
  129. package/dist/events/types.js +0 -2
  130. package/dist/events/types.js.map +0 -1
  131. package/dist/harness/artifacts.d.ts +0 -50
  132. package/dist/harness/artifacts.js +0 -333
  133. package/dist/harness/artifacts.js.map +0 -1
  134. package/dist/harness/config-helpers.d.ts +0 -35
  135. package/dist/harness/config-helpers.js +0 -409
  136. package/dist/harness/config-helpers.js.map +0 -1
  137. package/dist/harness/coordination.d.ts +0 -1
  138. package/dist/harness/coordination.js +0 -127
  139. package/dist/harness/coordination.js.map +0 -1
  140. package/dist/harness/display.d.ts +0 -21
  141. package/dist/harness/display.js +0 -176
  142. package/dist/harness/display.js.map +0 -1
  143. package/dist/harness/emit.d.ts +0 -15
  144. package/dist/harness/emit.js +0 -240
  145. package/dist/harness/emit.js.map +0 -1
  146. package/dist/harness/index.d.ts +0 -20
  147. package/dist/harness/index.js +0 -311
  148. package/dist/harness/index.js.map +0 -1
  149. package/dist/harness/iteration.d.ts +0 -16
  150. package/dist/harness/iteration.js +0 -131
  151. package/dist/harness/iteration.js.map +0 -1
  152. package/dist/harness/journal-format.d.ts +0 -25
  153. package/dist/harness/journal-format.js +0 -153
  154. package/dist/harness/journal-format.js.map +0 -1
  155. package/dist/harness/journal.d.ts +0 -31
  156. package/dist/harness/journal.js +0 -178
  157. package/dist/harness/journal.js.map +0 -1
  158. package/dist/harness/metareview.d.ts +0 -4
  159. package/dist/harness/metareview.js +0 -48
  160. package/dist/harness/metareview.js.map +0 -1
  161. package/dist/harness/metrics.d.ts +0 -12
  162. package/dist/harness/metrics.js +0 -180
  163. package/dist/harness/metrics.js.map +0 -1
  164. package/dist/harness/parallel.d.ts +0 -37
  165. package/dist/harness/parallel.js +0 -237
  166. package/dist/harness/parallel.js.map +0 -1
  167. package/dist/harness/prompt.d.ts +0 -46
  168. package/dist/harness/prompt.js +0 -403
  169. package/dist/harness/prompt.js.map +0 -1
  170. package/dist/harness/scratchpad.d.ts +0 -2
  171. package/dist/harness/scratchpad.js +0 -67
  172. package/dist/harness/scratchpad.js.map +0 -1
  173. package/dist/harness/stop.d.ts +0 -5
  174. package/dist/harness/stop.js +0 -70
  175. package/dist/harness/stop.js.map +0 -1
  176. package/dist/harness/tools.d.ts +0 -3
  177. package/dist/harness/tools.js +0 -65
  178. package/dist/harness/tools.js.map +0 -1
  179. package/dist/harness/types.d.ts +0 -110
  180. package/dist/harness/types.js +0 -2
  181. package/dist/harness/types.js.map +0 -1
  182. package/dist/harness/wave/finalize-wave.d.ts +0 -9
  183. package/dist/harness/wave/finalize-wave.js +0 -87
  184. package/dist/harness/wave/finalize-wave.js.map +0 -1
  185. package/dist/harness/wave/launch-branches.d.ts +0 -6
  186. package/dist/harness/wave/launch-branches.js +0 -314
  187. package/dist/harness/wave/launch-branches.js.map +0 -1
  188. package/dist/harness/wave/parse-objectives.d.ts +0 -3
  189. package/dist/harness/wave/parse-objectives.js +0 -32
  190. package/dist/harness/wave/parse-objectives.js.map +0 -1
  191. package/dist/harness/wave/types.d.ts +0 -43
  192. package/dist/harness/wave/types.js +0 -2
  193. package/dist/harness/wave/types.js.map +0 -1
  194. package/dist/harness/wave.d.ts +0 -6
  195. package/dist/harness/wave.js +0 -159
  196. package/dist/harness/wave.js.map +0 -1
  197. package/dist/isolation/index.d.ts +0 -4
  198. package/dist/isolation/index.js +0 -3
  199. package/dist/isolation/index.js.map +0 -1
  200. package/dist/isolation/resolve.d.ts +0 -39
  201. package/dist/isolation/resolve.js +0 -118
  202. package/dist/isolation/resolve.js.map +0 -1
  203. package/dist/isolation/run-scope.d.ts +0 -21
  204. package/dist/isolation/run-scope.js +0 -50
  205. package/dist/isolation/run-scope.js.map +0 -1
  206. package/dist/json.d.ts +0 -8
  207. package/dist/json.js +0 -82
  208. package/dist/json.js.map +0 -1
  209. package/dist/loops/health.d.ts +0 -17
  210. package/dist/loops/health.js +0 -152
  211. package/dist/loops/health.js.map +0 -1
  212. package/dist/loops/list.d.ts +0 -6
  213. package/dist/loops/list.js +0 -21
  214. package/dist/loops/list.js.map +0 -1
  215. package/dist/loops/policy.d.ts +0 -6
  216. package/dist/loops/policy.js +0 -41
  217. package/dist/loops/policy.js.map +0 -1
  218. package/dist/loops/render.d.ts +0 -19
  219. package/dist/loops/render.js +0 -100
  220. package/dist/loops/render.js.map +0 -1
  221. package/dist/loops/show.d.ts +0 -8
  222. package/dist/loops/show.js +0 -31
  223. package/dist/loops/show.js.map +0 -1
  224. package/dist/loops/watch.d.ts +0 -14
  225. package/dist/loops/watch.js +0 -143
  226. package/dist/loops/watch.js.map +0 -1
  227. package/dist/main.d.ts +0 -1
  228. package/dist/main.js +0 -148
  229. package/dist/main.js.map +0 -1
  230. package/dist/markdown.d.ts +0 -10
  231. package/dist/markdown.js +0 -66
  232. package/dist/markdown.js.map +0 -1
  233. package/dist/memory-render.d.ts +0 -6
  234. package/dist/memory-render.js +0 -81
  235. package/dist/memory-render.js.map +0 -1
  236. package/dist/memory.d.ts +0 -22
  237. package/dist/memory.js +0 -318
  238. package/dist/memory.js.map +0 -1
  239. package/dist/pi-adapter.d.ts +0 -1
  240. package/dist/pi-adapter.js +0 -220
  241. package/dist/pi-adapter.js.map +0 -1
  242. package/dist/profiles.d.ts +0 -12
  243. package/dist/profiles.js +0 -71
  244. package/dist/profiles.js.map +0 -1
  245. package/dist/registry/derive.d.ts +0 -8
  246. package/dist/registry/derive.js +0 -88
  247. package/dist/registry/derive.js.map +0 -1
  248. package/dist/registry/discover.d.ts +0 -20
  249. package/dist/registry/discover.js +0 -98
  250. package/dist/registry/discover.js.map +0 -1
  251. package/dist/registry/harness.d.ts +0 -7
  252. package/dist/registry/harness.js +0 -63
  253. package/dist/registry/harness.js.map +0 -1
  254. package/dist/registry/index.d.ts +0 -6
  255. package/dist/registry/index.js +0 -6
  256. package/dist/registry/index.js.map +0 -1
  257. package/dist/registry/read.d.ts +0 -11
  258. package/dist/registry/read.js +0 -50
  259. package/dist/registry/read.js.map +0 -1
  260. package/dist/registry/rebuild.d.ts +0 -5
  261. package/dist/registry/rebuild.js +0 -22
  262. package/dist/registry/rebuild.js.map +0 -1
  263. package/dist/registry/types.d.ts +0 -28
  264. package/dist/registry/types.js +0 -2
  265. package/dist/registry/types.js.map +0 -1
  266. package/dist/registry/update.d.ts +0 -2
  267. package/dist/registry/update.js +0 -7
  268. package/dist/registry/update.js.map +0 -1
  269. package/dist/tasks-render.d.ts +0 -2
  270. package/dist/tasks-render.js +0 -44
  271. package/dist/tasks-render.js.map +0 -1
  272. package/dist/tasks.d.ts +0 -24
  273. package/dist/tasks.js +0 -184
  274. package/dist/tasks.js.map +0 -1
  275. package/dist/topology.d.ts +0 -31
  276. package/dist/topology.js +0 -309
  277. package/dist/topology.js.map +0 -1
  278. package/dist/usage.d.ts +0 -9
  279. package/dist/usage.js +0 -160
  280. package/dist/usage.js.map +0 -1
  281. package/dist/utils.d.ts +0 -21
  282. package/dist/utils.js +0 -349
  283. package/dist/utils.js.map +0 -1
  284. package/dist/worktree/clean.d.ts +0 -12
  285. package/dist/worktree/clean.js +0 -113
  286. package/dist/worktree/clean.js.map +0 -1
  287. package/dist/worktree/create.d.ts +0 -14
  288. package/dist/worktree/create.js +0 -71
  289. package/dist/worktree/create.js.map +0 -1
  290. package/dist/worktree/index.d.ts +0 -10
  291. package/dist/worktree/index.js +0 -6
  292. package/dist/worktree/index.js.map +0 -1
  293. package/dist/worktree/list.d.ts +0 -9
  294. package/dist/worktree/list.js +0 -24
  295. package/dist/worktree/list.js.map +0 -1
  296. package/dist/worktree/merge.d.ts +0 -11
  297. package/dist/worktree/merge.js +0 -129
  298. package/dist/worktree/merge.js.map +0 -1
  299. package/dist/worktree/meta.d.ts +0 -17
  300. package/dist/worktree/meta.js +0 -34
  301. package/dist/worktree/meta.js.map +0 -1
  302. package/presets/autocode/README.md +0 -81
  303. package/presets/autocode/autoloops.toml +0 -30
  304. package/presets/autocode/harness.md +0 -26
  305. package/presets/autocode/miniloops.toml +0 -22
  306. package/presets/autocode/roles/build.md +0 -34
  307. package/presets/autocode/roles/critic.md +0 -40
  308. package/presets/autocode/roles/finalizer.md +0 -43
  309. package/presets/autocode/roles/planner.md +0 -40
  310. package/presets/autocode/topology.toml +0 -32
  311. package/presets/autodebug/README.md +0 -50
  312. package/presets/autodebug/autoloops.toml +0 -18
  313. package/presets/autodebug/harness.md +0 -31
  314. package/presets/autodebug/roles/fixer.md +0 -58
  315. package/presets/autodebug/roles/investigator.md +0 -52
  316. package/presets/autodebug/roles/strategist.md +0 -45
  317. package/presets/autodebug/roles/verifier.md +0 -66
  318. package/presets/autodebug/topology.toml +0 -34
  319. package/presets/autodoc/README.md +0 -42
  320. package/presets/autodoc/autoloops.toml +0 -21
  321. package/presets/autodoc/harness.md +0 -19
  322. package/presets/autodoc/miniloops.toml +0 -21
  323. package/presets/autodoc/roles/auditor.md +0 -39
  324. package/presets/autodoc/roles/checker.md +0 -43
  325. package/presets/autodoc/roles/publisher.md +0 -51
  326. package/presets/autodoc/roles/writer.md +0 -37
  327. package/presets/autodoc/topology.toml +0 -31
  328. package/presets/autofix/README.md +0 -56
  329. package/presets/autofix/autoloops.toml +0 -24
  330. package/presets/autofix/harness.md +0 -25
  331. package/presets/autofix/miniloops.toml +0 -21
  332. package/presets/autofix/roles/closer.md +0 -48
  333. package/presets/autofix/roles/diagnoser.md +0 -43
  334. package/presets/autofix/roles/fixer.md +0 -28
  335. package/presets/autofix/roles/verifier.md +0 -31
  336. package/presets/autofix/topology.toml +0 -33
  337. package/presets/autoideas/README.md +0 -73
  338. package/presets/autoideas/autoloops.toml +0 -18
  339. package/presets/autoideas/harness.md +0 -31
  340. package/presets/autoideas/miniloops.toml +0 -18
  341. package/presets/autoideas/roles/analyst.md +0 -32
  342. package/presets/autoideas/roles/reviewer.md +0 -36
  343. package/presets/autoideas/roles/scanner.md +0 -26
  344. package/presets/autoideas/roles/synthesizer.md +0 -61
  345. package/presets/autoideas/topology.toml +0 -32
  346. package/presets/automerge/README.md +0 -3
  347. package/presets/automerge/autoloops.toml +0 -12
  348. package/presets/automerge/harness.md +0 -10
  349. package/presets/automerge/miniloops.toml +0 -12
  350. package/presets/automerge/roles/merge.md +0 -10
  351. package/presets/automerge/topology.toml +0 -10
  352. package/presets/autoperf/README.md +0 -56
  353. package/presets/autoperf/autoloops.toml +0 -21
  354. package/presets/autoperf/harness.md +0 -21
  355. package/presets/autoperf/miniloops.toml +0 -21
  356. package/presets/autoperf/roles/judge.md +0 -38
  357. package/presets/autoperf/roles/measurer.md +0 -36
  358. package/presets/autoperf/roles/optimizer.md +0 -35
  359. package/presets/autoperf/roles/profiler.md +0 -38
  360. package/presets/autoperf/topology.toml +0 -32
  361. package/presets/autopr/README.md +0 -99
  362. package/presets/autopr/autoloops.toml +0 -22
  363. package/presets/autopr/harness.md +0 -27
  364. package/presets/autopr/miniloops.toml +0 -22
  365. package/presets/autopr/roles/collector.md +0 -55
  366. package/presets/autopr/roles/drafter.md +0 -38
  367. package/presets/autopr/roles/publisher.md +0 -28
  368. package/presets/autopr/roles/validator.md +0 -31
  369. package/presets/autopr/topology.toml +0 -32
  370. package/presets/autopreset/README.md +0 -35
  371. package/presets/autopreset/autoloops.toml +0 -18
  372. package/presets/autopreset/harness.md +0 -38
  373. package/presets/autopreset/roles/designer.md +0 -33
  374. package/presets/autopreset/roles/finalizer.md +0 -23
  375. package/presets/autopreset/roles/generator.md +0 -34
  376. package/presets/autopreset/roles/validator.md +0 -31
  377. package/presets/autopreset/topology.toml +0 -32
  378. package/presets/autoqa/README.md +0 -105
  379. package/presets/autoqa/autoloops.toml +0 -21
  380. package/presets/autoqa/harness.md +0 -52
  381. package/presets/autoqa/miniloops.toml +0 -21
  382. package/presets/autoqa/roles/executor.md +0 -96
  383. package/presets/autoqa/roles/inspector.md +0 -100
  384. package/presets/autoqa/roles/planner.md +0 -87
  385. package/presets/autoqa/roles/reporter.md +0 -117
  386. package/presets/autoqa/topology.toml +0 -31
  387. package/presets/autoresearch/README.md +0 -63
  388. package/presets/autoresearch/autoloops.toml +0 -18
  389. package/presets/autoresearch/harness.md +0 -28
  390. package/presets/autoresearch/miniloops.toml +0 -18
  391. package/presets/autoresearch/roles/benchmarker.md +0 -34
  392. package/presets/autoresearch/roles/evaluator.md +0 -33
  393. package/presets/autoresearch/roles/implementer.md +0 -26
  394. package/presets/autoresearch/roles/strategist.md +0 -43
  395. package/presets/autoresearch/topology.toml +0 -31
  396. package/presets/autoreview/README.md +0 -51
  397. package/presets/autoreview/autoloops.toml +0 -21
  398. package/presets/autoreview/harness.md +0 -20
  399. package/presets/autoreview/miniloops.toml +0 -21
  400. package/presets/autoreview/roles/checker.md +0 -36
  401. package/presets/autoreview/roles/reader.md +0 -33
  402. package/presets/autoreview/roles/suggester.md +0 -26
  403. package/presets/autoreview/roles/summarizer.md +0 -57
  404. package/presets/autoreview/topology.toml +0 -31
  405. package/presets/autosec/README.md +0 -51
  406. package/presets/autosec/autoloops.toml +0 -21
  407. package/presets/autosec/harness.md +0 -20
  408. package/presets/autosec/miniloops.toml +0 -21
  409. package/presets/autosec/roles/analyst.md +0 -38
  410. package/presets/autosec/roles/hardener.md +0 -36
  411. package/presets/autosec/roles/reporter.md +0 -63
  412. package/presets/autosec/roles/scanner.md +0 -38
  413. package/presets/autosec/topology.toml +0 -31
  414. package/presets/autosimplify/README.md +0 -83
  415. package/presets/autosimplify/autoloops.toml +0 -26
  416. package/presets/autosimplify/harness.md +0 -25
  417. package/presets/autosimplify/miniloops.toml +0 -22
  418. package/presets/autosimplify/roles/reviewer.md +0 -38
  419. package/presets/autosimplify/roles/scoper.md +0 -42
  420. package/presets/autosimplify/roles/simplifier.md +0 -51
  421. package/presets/autosimplify/roles/verifier.md +0 -40
  422. package/presets/autosimplify/topology.toml +0 -32
  423. package/presets/autospec/README.md +0 -84
  424. package/presets/autospec/autoloops.toml +0 -21
  425. package/presets/autospec/harness.md +0 -23
  426. package/presets/autospec/miniloops.toml +0 -21
  427. package/presets/autospec/roles/clarifier.md +0 -39
  428. package/presets/autospec/roles/critic.md +0 -41
  429. package/presets/autospec/roles/designer.md +0 -37
  430. package/presets/autospec/roles/planner.md +0 -38
  431. package/presets/autospec/roles/researcher.md +0 -33
  432. package/presets/autospec/topology.toml +0 -38
  433. package/presets/autotest/README.md +0 -55
  434. package/presets/autotest/autoloops.toml +0 -21
  435. package/presets/autotest/harness.md +0 -21
  436. package/presets/autotest/miniloops.toml +0 -21
  437. package/presets/autotest/roles/assessor.md +0 -57
  438. package/presets/autotest/roles/runner.md +0 -31
  439. package/presets/autotest/roles/surveyor.md +0 -39
  440. package/presets/autotest/roles/writer.md +0 -37
  441. package/presets/autotest/topology.toml +0 -32
@@ -1,153 +0,0 @@
1
- /**
2
- * Journal timeline formatting utilities.
3
- * Converts raw journal events into a filterable, color-coded terminal timeline.
4
- */
5
- import { color } from "../cli/color.js";
6
- import { decodeEvent } from "../events/decode.js";
7
- import { extractField } from "../json.js";
8
- /** Category-to-color mapping per RFC */
9
- const CATEGORY_COLORS = {
10
- loop: ["cyan"],
11
- iteration: ["yellow"],
12
- backend: ["dim", "gray"],
13
- review: ["magenta"],
14
- coordination: ["blue"],
15
- operator: ["brightRed"],
16
- routing: ["dimBlue"],
17
- error: ["red", "bold"],
18
- };
19
- /** Map a topic string to its category name. */
20
- export function topicCategory(topic) {
21
- if (topic === "event.invalid" || topic === "loop.stop")
22
- return "error";
23
- const prefix = topic.split(".")[0];
24
- switch (prefix) {
25
- case "loop":
26
- return "loop";
27
- case "iteration":
28
- return "iteration";
29
- case "backend":
30
- return "backend";
31
- case "review":
32
- return "review";
33
- case "issue":
34
- case "slice":
35
- case "context":
36
- case "chain":
37
- case "artifact":
38
- return "coordination";
39
- case "operator":
40
- return "operator";
41
- case "wave":
42
- return "routing";
43
- default:
44
- return "routing";
45
- }
46
- }
47
- /**
48
- * Check if a topic matches a filter pattern.
49
- * Supports exact match, category prefix, and glob with `*`.
50
- */
51
- export function topicMatchesFilter(topic, pattern) {
52
- if (topic === pattern)
53
- return true;
54
- // Category match: bare category name like "loop" matches "loop.*"
55
- if (!pattern.includes(".") && !pattern.includes("*")) {
56
- return topicCategory(topic) === pattern || topic.startsWith(`${pattern}.`);
57
- }
58
- // Glob: convert * to regex
59
- if (pattern.includes("*")) {
60
- const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
61
- const re = new RegExp(`^${escaped.replace(/\*/g, ".*")}$`);
62
- return re.test(topic);
63
- }
64
- return false;
65
- }
66
- /** Extract a one-line summary from a decoded event. */
67
- function eventSummary(event, maxLen) {
68
- if (event.shape === "payload") {
69
- const text = event.payload.replace(/\n/g, " ").trim();
70
- return text.length > maxLen ? `${text.slice(0, maxLen - 3)}...` : text;
71
- }
72
- // fields event: join key=value pairs
73
- const pairs = Object.entries(event.fields)
74
- .filter(([k]) => k !== "ts" && k !== "timestamp")
75
- .map(([k, v]) => `${k}=${v}`)
76
- .join(", ");
77
- return pairs.length > maxLen ? `${pairs.slice(0, maxLen - 3)}...` : pairs;
78
- }
79
- /** Extract timestamp from a raw JSON line (not decoded event). */
80
- function extractTimestamp(line) {
81
- return extractField(line, "timestamp") || extractField(line, "ts") || "";
82
- }
83
- /** Format an ISO timestamp to HH:MM:SS local time. */
84
- function formatTime(isoTs) {
85
- if (!isoTs)
86
- return "--:--:--";
87
- try {
88
- const d = new Date(isoTs);
89
- if (Number.isNaN(d.getTime()))
90
- return "--:--:--";
91
- return d.toLocaleTimeString("en-GB", {
92
- hour: "2-digit",
93
- minute: "2-digit",
94
- second: "2-digit",
95
- hour12: false,
96
- });
97
- }
98
- catch {
99
- return "--:--:--";
100
- }
101
- }
102
- /** Format a single event into a one-line string with color. */
103
- export function eventOneLiner(line, event, maxWidth = 120) {
104
- const ts = formatTime(extractTimestamp(line));
105
- const cat = topicCategory(event.topic);
106
- const colors = CATEGORY_COLORS[cat] ?? ["dim"];
107
- const topicStr = event.topic.padEnd(20);
108
- const summaryBudget = Math.max(20, maxWidth - 10 - 20 - 4);
109
- const summary = eventSummary(event, summaryBudget);
110
- return ` ${color(ts, "dim")} ${color(topicStr, ...colors)} ${summary}`;
111
- }
112
- /**
113
- * Format an array of raw journal lines into a grouped, colored timeline string.
114
- * Groups events by iteration, with separator lines.
115
- */
116
- export function formatTimeline(lines, opts = {}) {
117
- const { topics, iterFilter, maxWidth = 120 } = opts;
118
- const output = [];
119
- let currentIter = "";
120
- let matched = 0;
121
- for (const line of lines) {
122
- const event = decodeEvent(line);
123
- if (!event)
124
- continue;
125
- // Apply topic filter
126
- if (topics && topics.length > 0) {
127
- if (!topics.some((t) => topicMatchesFilter(event.topic, t)))
128
- continue;
129
- }
130
- // Apply iteration filter
131
- const iter = event.iteration ?? "";
132
- if (iterFilter && iter !== iterFilter)
133
- continue;
134
- // Iteration grouping header
135
- const iterLabel = iter || "system";
136
- if (iterLabel !== currentIter) {
137
- currentIter = iterLabel;
138
- const sep = `\u2500\u2500 iter ${iterLabel} `.padEnd(60, "\u2500");
139
- output.push("");
140
- output.push(color(sep, "dim"));
141
- }
142
- output.push(eventOneLiner(line, event, maxWidth));
143
- matched++;
144
- }
145
- if (matched === 0) {
146
- if (topics || iterFilter) {
147
- return "No events match the given filters.";
148
- }
149
- return "No journal events found.";
150
- }
151
- return output.join("\n");
152
- }
153
- //# sourceMappingURL=journal-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"journal-format.js","sourceRoot":"","sources":["../../src/harness/journal-format.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- export declare function appendEvent(path: string, runId: string, iteration: string, topic: string, fieldsJson: string): void;
2
- export declare function appendAgentEvent(path: string, runId: string, iteration: string, topic: string, payload: string): void;
3
- export declare function appendHarnessEvent(path: string, runId: string, iteration: string, topic: string, payload: string): void;
4
- export declare function appendOperatorEvent(path: string, runId: string, iteration: string, topic: string, payload: string): void;
5
- export declare function readLines(path: string): string[];
6
- export declare function readRunLines(path: string, runId: string): string[];
7
- export declare function extractTopic(line: string): string;
8
- export declare function extractField(line: string, key: string): string;
9
- export declare function extractRun(line: string): string;
10
- export declare function extractIteration(line: string): string;
11
- export declare function latestRunId(path: string): string;
12
- export declare function latestIterationForRun(path: string, runId: string): string;
13
- /**
14
- * Merge journals from the top-level file, per-run journals under runs/,
15
- * and worktree journals under worktrees/<id>/tree/<stateDirName>/.
16
- * Returns all lines sorted by timestamp.
17
- */
18
- export declare function readAllJournals(baseStateDir: string): string[];
19
- /**
20
- * Resolve the journal file path for a specific run within a state directory.
21
- * Checks run-scoped (runs/<runId>/journal.jsonl) and worktree paths first.
22
- * Returns null if no run-specific journal exists.
23
- */
24
- export declare function resolveRunJournalPath(baseStateDir: string, runId: string): string | null;
25
- /**
26
- * Read journal lines for a specific run.
27
- * Checks run-scoped and worktree paths via resolveRunJournalPath.
28
- */
29
- export declare function readRunJournal(baseStateDir: string, runId: string): string[];
30
- export declare function appendText(path: string, content: string): void;
31
- export declare function readIfExists(path: string): string;
@@ -1,178 +0,0 @@
1
- import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, } from "node:fs";
2
- import { basename, dirname, join } from "node:path";
3
- import { encodeEvent } from "../events/encode.js";
4
- import { extractField as jsonExtractField, extractTopic as jsonExtractTopic, } from "../json.js";
5
- import { lineSep } from "../utils.js";
6
- export function appendEvent(path, runId, iteration, topic, fieldsJson) {
7
- appendText(path, encodeEvent({
8
- shape: "fields",
9
- run: runId,
10
- iteration: iteration || undefined,
11
- topic,
12
- fields: parsedFields(fieldsJson),
13
- rawFields: parsedFieldsRaw(fieldsJson),
14
- }));
15
- }
16
- export function appendAgentEvent(path, runId, iteration, topic, payload) {
17
- appendEmittedEvent(path, runId, iteration, topic, payload, "agent");
18
- }
19
- export function appendHarnessEvent(path, runId, iteration, topic, payload) {
20
- appendEmittedEvent(path, runId, iteration, topic, payload, "harness");
21
- }
22
- export function appendOperatorEvent(path, runId, iteration, topic, payload) {
23
- appendEmittedEvent(path, runId, iteration, topic, payload, "operator");
24
- }
25
- function appendEmittedEvent(path, runId, iteration, topic, payload, source) {
26
- appendText(path, encodeEvent({
27
- shape: "payload",
28
- run: runId,
29
- iteration: iteration || undefined,
30
- topic,
31
- payload,
32
- source,
33
- }));
34
- }
35
- function parsedFields(fieldsJson) {
36
- const parsed = parsedFieldsRaw(fieldsJson);
37
- const result = {};
38
- for (const [key, value] of Object.entries(parsed)) {
39
- result[key] = String(value ?? "");
40
- }
41
- return result;
42
- }
43
- function parsedFieldsRaw(fieldsJson) {
44
- if (!fieldsJson.trim())
45
- return {};
46
- try {
47
- return JSON.parse(`{${fieldsJson}}`);
48
- }
49
- catch {
50
- return {};
51
- }
52
- }
53
- export function readLines(path) {
54
- const text = readIfExists(path);
55
- return text
56
- .split(lineSep())
57
- .map((l) => l.trim())
58
- .filter((l) => l !== "");
59
- }
60
- export function readRunLines(path, runId) {
61
- return readLines(path).filter((line) => extractRun(line) === runId);
62
- }
63
- export function extractTopic(line) {
64
- return jsonExtractTopic(line);
65
- }
66
- export function extractField(line, key) {
67
- return jsonExtractField(line, key);
68
- }
69
- export function extractRun(line) {
70
- return extractField(line, "run");
71
- }
72
- export function extractIteration(line) {
73
- return extractField(line, "iteration");
74
- }
75
- export function latestRunId(path) {
76
- const lines = readLines(path);
77
- let current = "";
78
- for (const line of lines) {
79
- if (extractTopic(line) === "loop.start") {
80
- const run = extractRun(line);
81
- if (run)
82
- current = run;
83
- }
84
- }
85
- return current;
86
- }
87
- export function latestIterationForRun(path, runId) {
88
- const lines = readRunLines(path, runId);
89
- let current = "";
90
- for (const line of lines) {
91
- if (extractTopic(line) === "iteration.start") {
92
- const iter = extractIteration(line);
93
- if (iter)
94
- current = iter;
95
- }
96
- }
97
- return current;
98
- }
99
- /**
100
- * Merge journals from the top-level file, per-run journals under runs/,
101
- * and worktree journals under worktrees/<id>/tree/<stateDirName>/.
102
- * Returns all lines sorted by timestamp.
103
- */
104
- export function readAllJournals(baseStateDir) {
105
- const allLines = [];
106
- // Top-level journal
107
- const topLevel = join(baseStateDir, "journal.jsonl");
108
- if (existsSync(topLevel))
109
- allLines.push(...readLines(topLevel));
110
- // Per-run journals under runs/*/journal.jsonl
111
- const runsDir = join(baseStateDir, "runs");
112
- if (existsSync(runsDir)) {
113
- const entries = readdirSync(runsDir, { withFileTypes: true });
114
- for (const entry of entries) {
115
- if (!entry.isDirectory())
116
- continue;
117
- const runJournal = join(runsDir, entry.name, "journal.jsonl");
118
- if (existsSync(runJournal))
119
- allLines.push(...readLines(runJournal));
120
- }
121
- }
122
- // Worktree journals under worktrees/<id>/tree/<stateDirName>/journal.jsonl
123
- const stateDirName = basename(baseStateDir);
124
- const wtDir = join(baseStateDir, "worktrees");
125
- if (existsSync(wtDir)) {
126
- const entries = readdirSync(wtDir, { withFileTypes: true });
127
- for (const entry of entries) {
128
- if (!entry.isDirectory())
129
- continue;
130
- const wtJournal = join(wtDir, entry.name, "tree", stateDirName, "journal.jsonl");
131
- if (existsSync(wtJournal))
132
- allLines.push(...readLines(wtJournal));
133
- }
134
- }
135
- // Sort by timestamp field if present
136
- return allLines.sort((a, b) => {
137
- const tsA = extractTimestamp(a);
138
- const tsB = extractTimestamp(b);
139
- return tsA.localeCompare(tsB);
140
- });
141
- }
142
- /**
143
- * Resolve the journal file path for a specific run within a state directory.
144
- * Checks run-scoped (runs/<runId>/journal.jsonl) and worktree paths first.
145
- * Returns null if no run-specific journal exists.
146
- */
147
- export function resolveRunJournalPath(baseStateDir, runId) {
148
- const runJournal = join(baseStateDir, "runs", runId, "journal.jsonl");
149
- if (existsSync(runJournal))
150
- return runJournal;
151
- const stateDirName = basename(baseStateDir);
152
- const wtJournal = join(baseStateDir, "worktrees", runId, "tree", stateDirName, "journal.jsonl");
153
- if (existsSync(wtJournal))
154
- return wtJournal;
155
- return null;
156
- }
157
- /**
158
- * Read journal lines for a specific run.
159
- * Checks run-scoped and worktree paths via resolveRunJournalPath.
160
- */
161
- export function readRunJournal(baseStateDir, runId) {
162
- const path = resolveRunJournalPath(baseStateDir, runId);
163
- return path ? readLines(path) : [];
164
- }
165
- function extractTimestamp(line) {
166
- return extractField(line, "timestamp") || extractField(line, "ts") || "";
167
- }
168
- export function appendText(path, content) {
169
- const dir = dirname(path);
170
- mkdirSync(dir, { recursive: true });
171
- appendFileSync(path, content, "utf-8");
172
- }
173
- export function readIfExists(path) {
174
- if (!existsSync(path))
175
- return "";
176
- return readFileSync(path, "utf-8");
177
- }
178
- //# sourceMappingURL=journal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/harness/journal.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { LoopContext } from "./types.js";
2
- export declare function maybeRunMetareview(loop: LoopContext, iteration: number): LoopContext;
3
- export declare function shouldRunMetareview(loop: LoopContext, iteration: number): boolean;
4
- export declare function runMetareviewReview(loop: LoopContext, iteration: number): void;
@@ -1,48 +0,0 @@
1
- import { runKiroIterationSync } from "../backend/kiro-bridge.js";
2
- import { jsonBool, jsonField, jsonFieldRaw } from "../json.js";
3
- import { reloadLoop } from "./config-helpers.js";
4
- import { printReviewBanner } from "./display.js";
5
- import { appendEvent, readRunLines } from "./journal.js";
6
- import { buildReviewCommand, runProcess } from "./parallel.js";
7
- import { renderReviewPromptText } from "./prompt.js";
8
- export function maybeRunMetareview(loop, iteration) {
9
- if (shouldRunMetareview(loop, iteration)) {
10
- runMetareviewReview(loop, iteration);
11
- const reloaded = reloadLoop(loop);
12
- reloaded.kiroSession = loop.kiroSession;
13
- return reloaded;
14
- }
15
- return loop;
16
- }
17
- export function shouldRunMetareview(loop, iteration) {
18
- return (loop.review.enabled &&
19
- iteration > 1 &&
20
- (iteration - 1) % loop.review.every === 0);
21
- }
22
- export function runMetareviewReview(loop, iteration) {
23
- printReviewBanner(iteration);
24
- const runLines = readRunLines(loop.paths.journalFile, loop.runtime.runId);
25
- const reviewPrompt = renderReviewPromptText(loop, iteration, runLines);
26
- appendEvent(loop.paths.journalFile, loop.runtime.runId, String(iteration), "review.start", jsonField("kind", "metareview") +
27
- ", " +
28
- jsonField("backend_kind", loop.review.kind) +
29
- ", " +
30
- jsonField("command", loop.review.command) +
31
- ", " +
32
- jsonField("prompt_mode", loop.review.promptMode) +
33
- ", " +
34
- jsonField("prompt", reviewPrompt) +
35
- ", " +
36
- jsonField("timeout_ms", String(loop.review.timeoutMs)));
37
- const { output, exitCode, timedOut } = loop.review.kind === "kiro" && loop.kiroSession
38
- ? runKiroIterationSync(loop.kiroSession, reviewPrompt, loop.review.timeoutMs)
39
- : runProcess(buildReviewCommand(loop, iteration, reviewPrompt), loop.review.timeoutMs, loop.review.kind);
40
- appendEvent(loop.paths.journalFile, loop.runtime.runId, String(iteration), "review.finish", jsonField("kind", "metareview") +
41
- ", " +
42
- jsonField("exit_code", String(exitCode)) +
43
- ", " +
44
- jsonFieldRaw("timed_out", jsonBool(timedOut)) +
45
- ", " +
46
- jsonField("output", output));
47
- }
48
- //# sourceMappingURL=metareview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metareview.js","sourceRoot":"","sources":["../../src/harness/metareview.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- interface MetricsRow {
2
- iteration: string;
3
- role: string;
4
- event: string;
5
- elapsedS: string;
6
- exitCode: string;
7
- timedOut: string;
8
- outcome: string;
9
- }
10
- export declare function collectMetricsRows(lines: string[]): MetricsRow[];
11
- export declare function formatMetrics(rows: MetricsRow[], format: string): string;
12
- export {};
@@ -1,180 +0,0 @@
1
- import { decodeEvent } from "../events/decode.js";
2
- import { isSystemEvent } from "../events/guards.js";
3
- import { jsonField } from "../json.js";
4
- import { table } from "../markdown.js";
5
- export function collectMetricsRows(lines) {
6
- const rows = [];
7
- for (const line of lines) {
8
- const event = decodeEvent(line);
9
- if (!event)
10
- continue;
11
- if (event.topic === "iteration.start" && event.shape === "fields") {
12
- const roles = event.fields.suggested_roles ?? "";
13
- const role = firstCsvValue(roles);
14
- rows.push({
15
- iteration: event.iteration ?? "",
16
- role,
17
- event: "none",
18
- elapsedS: "",
19
- exitCode: "",
20
- timedOut: "false",
21
- outcome: "continue",
22
- });
23
- continue;
24
- }
25
- if (event.topic === "iteration.finish" && event.shape === "fields") {
26
- const iter = event.iteration ?? "";
27
- for (let i = rows.length - 1; i >= 0; i--) {
28
- if (rows[i].iteration === iter) {
29
- rows[i].exitCode = event.fields.exit_code ?? "";
30
- rows[i].timedOut = event.fields.timed_out ?? "";
31
- rows[i].elapsedS = event.fields.elapsed_s ?? "";
32
- rows[i].outcome = computeOutcome(rows[i].exitCode, rows[i].timedOut, rows[i].event);
33
- break;
34
- }
35
- }
36
- continue;
37
- }
38
- if (!isSystemEvent(event)) {
39
- const iter = event.iteration ?? "";
40
- for (let i = rows.length - 1; i >= 0; i--) {
41
- if (rows[i].iteration === iter) {
42
- rows[i].event = String(event.topic);
43
- break;
44
- }
45
- }
46
- }
47
- }
48
- return rows;
49
- }
50
- export function formatMetrics(rows, format) {
51
- switch (format) {
52
- case "csv":
53
- return formatMetricsCsv(rows);
54
- case "json":
55
- return formatMetricsJson(rows);
56
- default:
57
- return formatMetricsMd(rows);
58
- }
59
- }
60
- function formatMetricsMd(rows) {
61
- if (rows.length === 0)
62
- return "No metrics data available.";
63
- const headers = [
64
- "iteration",
65
- "role",
66
- "event",
67
- "elapsed_s",
68
- "exit_code",
69
- "timed_out",
70
- "outcome",
71
- ];
72
- const tableRows = rows.map((r) => [
73
- r.iteration,
74
- r.role,
75
- r.event,
76
- r.elapsedS,
77
- r.exitCode,
78
- r.timedOut,
79
- r.outcome,
80
- ]);
81
- return `${table(headers, tableRows)}\n\n${metricsSummary(rows)}`;
82
- }
83
- function metricsSummary(rows) {
84
- const total = rows.length;
85
- const elapsed = sumElapsed(rows);
86
- const distinct = countDistinctEvents(rows);
87
- return ("**Summary:** " +
88
- total +
89
- " iterations, " +
90
- elapsed +
91
- "s total elapsed, " +
92
- distinct +
93
- " distinct events");
94
- }
95
- function sumElapsed(rows) {
96
- let sum = 0;
97
- for (const row of rows) {
98
- if (row.elapsedS) {
99
- const val = parseFloat(row.elapsedS);
100
- if (!Number.isNaN(val))
101
- sum += val;
102
- }
103
- }
104
- return String(sum);
105
- }
106
- function countDistinctEvents(rows) {
107
- const seen = new Set();
108
- for (const row of rows) {
109
- if (row.event !== "none")
110
- seen.add(row.event);
111
- }
112
- return seen.size;
113
- }
114
- function formatMetricsCsv(rows) {
115
- const header = "iteration,role,event,elapsed_s,exit_code,timed_out,outcome";
116
- if (rows.length === 0)
117
- return header;
118
- const csvRows = rows.map((r) => csvQuote(r.iteration) +
119
- "," +
120
- csvQuote(r.role) +
121
- "," +
122
- csvQuote(r.event) +
123
- "," +
124
- csvQuote(r.elapsedS) +
125
- "," +
126
- csvQuote(r.exitCode) +
127
- "," +
128
- csvQuote(r.timedOut) +
129
- "," +
130
- csvQuote(r.outcome));
131
- return `${header}\n${csvRows.join("\n")}`;
132
- }
133
- function csvQuote(value) {
134
- if (value.includes(",") || value.includes('"') || value.includes("\n")) {
135
- return `"${value.replace(/"/g, '""')}"`;
136
- }
137
- return value;
138
- }
139
- function formatMetricsJson(rows) {
140
- if (rows.length === 0)
141
- return "[]";
142
- const items = rows.map((r) => "{" +
143
- jsonNumberOrNull("iteration", r.iteration) +
144
- ", " +
145
- jsonField("role", r.role) +
146
- ", " +
147
- jsonField("event", r.event) +
148
- ", " +
149
- jsonNumberOrNull("elapsed_s", r.elapsedS) +
150
- ", " +
151
- jsonNumberOrNull("exit_code", r.exitCode) +
152
- ", " +
153
- jsonBoolField("timed_out", r.timedOut) +
154
- ", " +
155
- jsonField("outcome", r.outcome) +
156
- "}");
157
- return `[${items.join(", ")}]`;
158
- }
159
- function jsonNumberOrNull(key, value) {
160
- if (!value)
161
- return `"${key}": null`;
162
- return `"${key}": ${value}`;
163
- }
164
- function jsonBoolField(key, value) {
165
- return `"${key}": ${value === "true" ? "true" : "false"}`;
166
- }
167
- function computeOutcome(exitCode, timedOut, event) {
168
- if (timedOut === "true")
169
- return "timeout";
170
- if (exitCode === "0")
171
- return event === "none" ? "continue" : "emitted";
172
- return "failed";
173
- }
174
- function firstCsvValue(csv) {
175
- if (!csv)
176
- return "";
177
- const first = csv.split(",")[0];
178
- return first?.trim() ?? "";
179
- }
180
- //# sourceMappingURL=metrics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/harness/metrics.ts"],"names":[],"mappings":"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"}