@e2edev/e2e 0.2.0

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 (399) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/dist/agent/act-validation.d.ts +27 -0
  4. package/dist/agent/act-validation.d.ts.map +1 -0
  5. package/dist/agent/act-validation.js +121 -0
  6. package/dist/agent/act-validation.js.map +1 -0
  7. package/dist/agent/act.d.ts +27 -0
  8. package/dist/agent/act.d.ts.map +1 -0
  9. package/dist/agent/act.js +775 -0
  10. package/dist/agent/act.js.map +1 -0
  11. package/dist/agent/actions.d.ts +66 -0
  12. package/dist/agent/actions.d.ts.map +1 -0
  13. package/dist/agent/actions.js +82 -0
  14. package/dist/agent/actions.js.map +1 -0
  15. package/dist/agent/ai-sdk.d.ts +16 -0
  16. package/dist/agent/ai-sdk.d.ts.map +1 -0
  17. package/dist/agent/ai-sdk.js +59 -0
  18. package/dist/agent/ai-sdk.js.map +1 -0
  19. package/dist/agent/call-options.d.ts +10 -0
  20. package/dist/agent/call-options.d.ts.map +1 -0
  21. package/dist/agent/call-options.js +28 -0
  22. package/dist/agent/call-options.js.map +1 -0
  23. package/dist/agent/default-agent.d.ts +22 -0
  24. package/dist/agent/default-agent.d.ts.map +1 -0
  25. package/dist/agent/default-agent.js +354 -0
  26. package/dist/agent/default-agent.js.map +1 -0
  27. package/dist/agent/error.d.ts +53 -0
  28. package/dist/agent/error.d.ts.map +1 -0
  29. package/dist/agent/error.js +94 -0
  30. package/dist/agent/error.js.map +1 -0
  31. package/dist/agent/executor.d.ts +238 -0
  32. package/dist/agent/executor.d.ts.map +1 -0
  33. package/dist/agent/executor.js +56 -0
  34. package/dist/agent/executor.js.map +1 -0
  35. package/dist/agent/index.d.ts +15 -0
  36. package/dist/agent/index.d.ts.map +1 -0
  37. package/dist/agent/index.js +304 -0
  38. package/dist/agent/index.js.map +1 -0
  39. package/dist/agent/invocation.d.ts +194 -0
  40. package/dist/agent/invocation.d.ts.map +1 -0
  41. package/dist/agent/invocation.js +389 -0
  42. package/dist/agent/invocation.js.map +1 -0
  43. package/dist/agent/ledger.d.ts +24 -0
  44. package/dist/agent/ledger.d.ts.map +1 -0
  45. package/dist/agent/ledger.js +48 -0
  46. package/dist/agent/ledger.js.map +1 -0
  47. package/dist/agent/loop-guards.d.ts +35 -0
  48. package/dist/agent/loop-guards.d.ts.map +1 -0
  49. package/dist/agent/loop-guards.js +110 -0
  50. package/dist/agent/loop-guards.js.map +1 -0
  51. package/dist/agent/model/adapter.d.ts +97 -0
  52. package/dist/agent/model/adapter.d.ts.map +1 -0
  53. package/dist/agent/model/adapter.js +40 -0
  54. package/dist/agent/model/adapter.js.map +1 -0
  55. package/dist/agent/model/router.d.ts +36 -0
  56. package/dist/agent/model/router.d.ts.map +1 -0
  57. package/dist/agent/model/router.js +45 -0
  58. package/dist/agent/model/router.js.map +1 -0
  59. package/dist/agent/model/schema.d.ts +16 -0
  60. package/dist/agent/model/schema.d.ts.map +1 -0
  61. package/dist/agent/model/schema.js +37 -0
  62. package/dist/agent/model/schema.js.map +1 -0
  63. package/dist/agent/model/sdk.d.ts +28 -0
  64. package/dist/agent/model/sdk.d.ts.map +1 -0
  65. package/dist/agent/model/sdk.js +258 -0
  66. package/dist/agent/model/sdk.js.map +1 -0
  67. package/dist/agent/observation.d.ts +70 -0
  68. package/dist/agent/observation.d.ts.map +1 -0
  69. package/dist/agent/observation.js +174 -0
  70. package/dist/agent/observation.js.map +1 -0
  71. package/dist/agent/phases.d.ts +71 -0
  72. package/dist/agent/phases.d.ts.map +1 -0
  73. package/dist/agent/phases.js +124 -0
  74. package/dist/agent/phases.js.map +1 -0
  75. package/dist/agent/prompts.d.ts +40 -0
  76. package/dist/agent/prompts.d.ts.map +1 -0
  77. package/dist/agent/prompts.js +104 -0
  78. package/dist/agent/prompts.js.map +1 -0
  79. package/dist/agent/protocol.d.ts +31 -0
  80. package/dist/agent/protocol.d.ts.map +1 -0
  81. package/dist/agent/protocol.js +67 -0
  82. package/dist/agent/protocol.js.map +1 -0
  83. package/dist/agent/public.d.ts +12 -0
  84. package/dist/agent/public.d.ts.map +1 -0
  85. package/dist/agent/public.js +12 -0
  86. package/dist/agent/public.js.map +1 -0
  87. package/dist/agent/replay.d.ts +61 -0
  88. package/dist/agent/replay.d.ts.map +1 -0
  89. package/dist/agent/replay.js +185 -0
  90. package/dist/agent/replay.js.map +1 -0
  91. package/dist/agent/secrets.d.ts +22 -0
  92. package/dist/agent/secrets.d.ts.map +1 -0
  93. package/dist/agent/secrets.js +63 -0
  94. package/dist/agent/secrets.js.map +1 -0
  95. package/dist/agent/step-cache.d.ts +156 -0
  96. package/dist/agent/step-cache.d.ts.map +1 -0
  97. package/dist/agent/step-cache.js +301 -0
  98. package/dist/agent/step-cache.js.map +1 -0
  99. package/dist/agent/tool-loop.d.ts +51 -0
  100. package/dist/agent/tool-loop.d.ts.map +1 -0
  101. package/dist/agent/tool-loop.js +331 -0
  102. package/dist/agent/tool-loop.js.map +1 -0
  103. package/dist/agent/tool.d.ts +39 -0
  104. package/dist/agent/tool.d.ts.map +1 -0
  105. package/dist/agent/tool.js +52 -0
  106. package/dist/agent/tool.js.map +1 -0
  107. package/dist/backend/contract.d.ts +186 -0
  108. package/dist/backend/contract.d.ts.map +1 -0
  109. package/dist/backend/contract.js +65 -0
  110. package/dist/backend/contract.js.map +1 -0
  111. package/dist/backend/index.d.ts +316 -0
  112. package/dist/backend/index.d.ts.map +1 -0
  113. package/dist/backend/index.js +219 -0
  114. package/dist/backend/index.js.map +1 -0
  115. package/dist/backend/session.d.ts +23 -0
  116. package/dist/backend/session.d.ts.map +1 -0
  117. package/dist/backend/session.js +213 -0
  118. package/dist/backend/session.js.map +1 -0
  119. package/dist/backend/surface.d.ts +83 -0
  120. package/dist/backend/surface.d.ts.map +1 -0
  121. package/dist/backend/surface.js +11 -0
  122. package/dist/backend/surface.js.map +1 -0
  123. package/dist/cache/anchors.d.ts +37 -0
  124. package/dist/cache/anchors.d.ts.map +1 -0
  125. package/dist/cache/anchors.js +89 -0
  126. package/dist/cache/anchors.js.map +1 -0
  127. package/dist/cache/context.d.ts +74 -0
  128. package/dist/cache/context.d.ts.map +1 -0
  129. package/dist/cache/context.js +82 -0
  130. package/dist/cache/context.js.map +1 -0
  131. package/dist/cache/decide.d.ts +42 -0
  132. package/dist/cache/decide.d.ts.map +1 -0
  133. package/dist/cache/decide.js +47 -0
  134. package/dist/cache/decide.js.map +1 -0
  135. package/dist/cache/identity.d.ts +113 -0
  136. package/dist/cache/identity.d.ts.map +1 -0
  137. package/dist/cache/identity.js +109 -0
  138. package/dist/cache/identity.js.map +1 -0
  139. package/dist/cache/recorder.d.ts +76 -0
  140. package/dist/cache/recorder.d.ts.map +1 -0
  141. package/dist/cache/recorder.js +143 -0
  142. package/dist/cache/recorder.js.map +1 -0
  143. package/dist/cache/relocate.d.ts +69 -0
  144. package/dist/cache/relocate.d.ts.map +1 -0
  145. package/dist/cache/relocate.js +125 -0
  146. package/dist/cache/relocate.js.map +1 -0
  147. package/dist/cache/store.d.ts +68 -0
  148. package/dist/cache/store.d.ts.map +1 -0
  149. package/dist/cache/store.js +106 -0
  150. package/dist/cache/store.js.map +1 -0
  151. package/dist/cache/trace.d.ts +146 -0
  152. package/dist/cache/trace.d.ts.map +1 -0
  153. package/dist/cache/trace.js +249 -0
  154. package/dist/cache/trace.js.map +1 -0
  155. package/dist/cli/bin.d.ts +3 -0
  156. package/dist/cli/bin.d.ts.map +1 -0
  157. package/dist/cli/bin.js +4 -0
  158. package/dist/cli/bin.js.map +1 -0
  159. package/dist/cli/index.d.ts +4 -0
  160. package/dist/cli/index.d.ts.map +1 -0
  161. package/dist/cli/index.js +108 -0
  162. package/dist/cli/index.js.map +1 -0
  163. package/dist/cli/init.d.ts +6 -0
  164. package/dist/cli/init.d.ts.map +1 -0
  165. package/dist/cli/init.js +101 -0
  166. package/dist/cli/init.js.map +1 -0
  167. package/dist/collect/collect.d.ts +44 -0
  168. package/dist/collect/collect.d.ts.map +1 -0
  169. package/dist/collect/collect.js +89 -0
  170. package/dist/collect/collect.js.map +1 -0
  171. package/dist/collect/registry.d.ts +47 -0
  172. package/dist/collect/registry.d.ts.map +1 -0
  173. package/dist/collect/registry.js +262 -0
  174. package/dist/collect/registry.js.map +1 -0
  175. package/dist/collect/select.d.ts +54 -0
  176. package/dist/collect/select.d.ts.map +1 -0
  177. package/dist/collect/select.js +230 -0
  178. package/dist/collect/select.js.map +1 -0
  179. package/dist/config/agent.d.ts +91 -0
  180. package/dist/config/agent.d.ts.map +1 -0
  181. package/dist/config/agent.js +232 -0
  182. package/dist/config/agent.js.map +1 -0
  183. package/dist/config/load.d.ts +23 -0
  184. package/dist/config/load.d.ts.map +1 -0
  185. package/dist/config/load.js +75 -0
  186. package/dist/config/load.js.map +1 -0
  187. package/dist/config/resolve.d.ts +94 -0
  188. package/dist/config/resolve.d.ts.map +1 -0
  189. package/dist/config/resolve.js +500 -0
  190. package/dist/config/resolve.js.map +1 -0
  191. package/dist/config/validate.d.ts +6 -0
  192. package/dist/config/validate.d.ts.map +1 -0
  193. package/dist/config/validate.js +21 -0
  194. package/dist/config/validate.js.map +1 -0
  195. package/dist/credentials.d.ts +7 -0
  196. package/dist/credentials.d.ts.map +1 -0
  197. package/dist/credentials.js +42 -0
  198. package/dist/credentials.js.map +1 -0
  199. package/dist/expect/async.d.ts +5 -0
  200. package/dist/expect/async.d.ts.map +1 -0
  201. package/dist/expect/async.js +186 -0
  202. package/dist/expect/async.js.map +1 -0
  203. package/dist/expect/index.d.ts +7 -0
  204. package/dist/expect/index.d.ts.map +1 -0
  205. package/dist/expect/index.js +23 -0
  206. package/dist/expect/index.js.map +1 -0
  207. package/dist/expect/values.d.ts +4 -0
  208. package/dist/expect/values.d.ts.map +1 -0
  209. package/dist/expect/values.js +108 -0
  210. package/dist/expect/values.js.map +1 -0
  211. package/dist/index.d.ts +13 -0
  212. package/dist/index.d.ts.map +1 -0
  213. package/dist/index.js +15 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/internal/ai-trace.d.ts +151 -0
  216. package/dist/internal/ai-trace.d.ts.map +1 -0
  217. package/dist/internal/ai-trace.js +360 -0
  218. package/dist/internal/ai-trace.js.map +1 -0
  219. package/dist/internal/brands.d.ts +9 -0
  220. package/dist/internal/brands.d.ts.map +1 -0
  221. package/dist/internal/brands.js +9 -0
  222. package/dist/internal/brands.js.map +1 -0
  223. package/dist/internal/debug.d.ts +43 -0
  224. package/dist/internal/debug.d.ts.map +1 -0
  225. package/dist/internal/debug.js +102 -0
  226. package/dist/internal/debug.js.map +1 -0
  227. package/dist/internal/errors.d.ts +98 -0
  228. package/dist/internal/errors.d.ts.map +1 -0
  229. package/dist/internal/errors.js +212 -0
  230. package/dist/internal/errors.js.map +1 -0
  231. package/dist/internal/globs.d.ts +29 -0
  232. package/dist/internal/globs.d.ts.map +1 -0
  233. package/dist/internal/globs.js +126 -0
  234. package/dist/internal/globs.js.map +1 -0
  235. package/dist/internal/ids.d.ts +32 -0
  236. package/dist/internal/ids.d.ts.map +1 -0
  237. package/dist/internal/ids.js +124 -0
  238. package/dist/internal/ids.js.map +1 -0
  239. package/dist/internal/json-value.d.ts +15 -0
  240. package/dist/internal/json-value.d.ts.map +1 -0
  241. package/dist/internal/json-value.js +61 -0
  242. package/dist/internal/json-value.js.map +1 -0
  243. package/dist/internal/package-version.d.ts +6 -0
  244. package/dist/internal/package-version.d.ts.map +1 -0
  245. package/dist/internal/package-version.js +14 -0
  246. package/dist/internal/package-version.js.map +1 -0
  247. package/dist/internal/realm-slot.d.ts +13 -0
  248. package/dist/internal/realm-slot.d.ts.map +1 -0
  249. package/dist/internal/realm-slot.js +23 -0
  250. package/dist/internal/realm-slot.js.map +1 -0
  251. package/dist/internal/redact.d.ts +33 -0
  252. package/dist/internal/redact.d.ts.map +1 -0
  253. package/dist/internal/redact.js +56 -0
  254. package/dist/internal/redact.js.map +1 -0
  255. package/dist/internal/regexp.d.ts +10 -0
  256. package/dist/internal/regexp.d.ts.map +1 -0
  257. package/dist/internal/regexp.js +27 -0
  258. package/dist/internal/regexp.js.map +1 -0
  259. package/dist/internal/text.d.ts +39 -0
  260. package/dist/internal/text.d.ts.map +1 -0
  261. package/dist/internal/text.js +66 -0
  262. package/dist/internal/text.js.map +1 -0
  263. package/dist/internal/time.d.ts +37 -0
  264. package/dist/internal/time.d.ts.map +1 -0
  265. package/dist/internal/time.js +91 -0
  266. package/dist/internal/time.js.map +1 -0
  267. package/dist/internal/trace.d.ts +18 -0
  268. package/dist/internal/trace.d.ts.map +1 -0
  269. package/dist/internal/trace.js +46 -0
  270. package/dist/internal/trace.js.map +1 -0
  271. package/dist/internal/urls.d.ts +31 -0
  272. package/dist/internal/urls.d.ts.map +1 -0
  273. package/dist/internal/urls.js +95 -0
  274. package/dist/internal/urls.js.map +1 -0
  275. package/dist/locator/engine.d.ts +65 -0
  276. package/dist/locator/engine.d.ts.map +1 -0
  277. package/dist/locator/engine.js +164 -0
  278. package/dist/locator/engine.js.map +1 -0
  279. package/dist/locator/expression.d.ts +19 -0
  280. package/dist/locator/expression.d.ts.map +1 -0
  281. package/dist/locator/expression.js +85 -0
  282. package/dist/locator/expression.js.map +1 -0
  283. package/dist/locator/screen.d.ts +36 -0
  284. package/dist/locator/screen.d.ts.map +1 -0
  285. package/dist/locator/screen.js +281 -0
  286. package/dist/locator/screen.js.map +1 -0
  287. package/dist/report/build.d.ts +214 -0
  288. package/dist/report/build.d.ts.map +1 -0
  289. package/dist/report/build.js +346 -0
  290. package/dist/report/build.js.map +1 -0
  291. package/dist/report/code-frame.d.ts +20 -0
  292. package/dist/report/code-frame.d.ts.map +1 -0
  293. package/dist/report/code-frame.js +73 -0
  294. package/dist/report/code-frame.js.map +1 -0
  295. package/dist/report/debug-steps.d.ts +14 -0
  296. package/dist/report/debug-steps.d.ts.map +1 -0
  297. package/dist/report/debug-steps.js +85 -0
  298. package/dist/report/debug-steps.js.map +1 -0
  299. package/dist/report/list.d.ts +80 -0
  300. package/dist/report/list.d.ts.map +1 -0
  301. package/dist/report/list.js +372 -0
  302. package/dist/report/list.js.map +1 -0
  303. package/dist/report/live-status.d.ts +51 -0
  304. package/dist/report/live-status.d.ts.map +1 -0
  305. package/dist/report/live-status.js +162 -0
  306. package/dist/report/live-status.js.map +1 -0
  307. package/dist/report/write.d.ts +4 -0
  308. package/dist/report/write.d.ts.map +1 -0
  309. package/dist/report/write.js +13 -0
  310. package/dist/report/write.js.map +1 -0
  311. package/dist/run/app-process.d.ts +18 -0
  312. package/dist/run/app-process.d.ts.map +1 -0
  313. package/dist/run/app-process.js +112 -0
  314. package/dist/run/app-process.js.map +1 -0
  315. package/dist/run/artifacts.d.ts +51 -0
  316. package/dist/run/artifacts.d.ts.map +1 -0
  317. package/dist/run/artifacts.js +114 -0
  318. package/dist/run/artifacts.js.map +1 -0
  319. package/dist/run/events.d.ts +100 -0
  320. package/dist/run/events.d.ts.map +1 -0
  321. package/dist/run/events.js +59 -0
  322. package/dist/run/events.js.map +1 -0
  323. package/dist/run/execute.d.ts +119 -0
  324. package/dist/run/execute.d.ts.map +1 -0
  325. package/dist/run/execute.js +555 -0
  326. package/dist/run/execute.js.map +1 -0
  327. package/dist/run/fixtures.d.ts +40 -0
  328. package/dist/run/fixtures.d.ts.map +1 -0
  329. package/dist/run/fixtures.js +408 -0
  330. package/dist/run/fixtures.js.map +1 -0
  331. package/dist/run/in-process.d.ts +24 -0
  332. package/dist/run/in-process.d.ts.map +1 -0
  333. package/dist/run/in-process.js +120 -0
  334. package/dist/run/in-process.js.map +1 -0
  335. package/dist/run/public.d.ts +19 -0
  336. package/dist/run/public.d.ts.map +1 -0
  337. package/dist/run/public.js +11 -0
  338. package/dist/run/public.js.map +1 -0
  339. package/dist/run/realm.d.ts +52 -0
  340. package/dist/run/realm.d.ts.map +1 -0
  341. package/dist/run/realm.js +101 -0
  342. package/dist/run/realm.js.map +1 -0
  343. package/dist/run/records.d.ts +87 -0
  344. package/dist/run/records.d.ts.map +1 -0
  345. package/dist/run/records.js +3 -0
  346. package/dist/run/records.js.map +1 -0
  347. package/dist/run/retry.d.ts +18 -0
  348. package/dist/run/retry.d.ts.map +1 -0
  349. package/dist/run/retry.js +33 -0
  350. package/dist/run/retry.js.map +1 -0
  351. package/dist/run/runner.d.ts +49 -0
  352. package/dist/run/runner.d.ts.map +1 -0
  353. package/dist/run/runner.js +375 -0
  354. package/dist/run/runner.js.map +1 -0
  355. package/dist/run/scheduler.d.ts +45 -0
  356. package/dist/run/scheduler.d.ts.map +1 -0
  357. package/dist/run/scheduler.js +512 -0
  358. package/dist/run/scheduler.js.map +1 -0
  359. package/dist/run/serial.d.ts +52 -0
  360. package/dist/run/serial.d.ts.map +1 -0
  361. package/dist/run/serial.js +247 -0
  362. package/dist/run/serial.js.map +1 -0
  363. package/dist/run/sessions.d.ts +54 -0
  364. package/dist/run/sessions.d.ts.map +1 -0
  365. package/dist/run/sessions.js +221 -0
  366. package/dist/run/sessions.js.map +1 -0
  367. package/dist/run/steps.d.ts +196 -0
  368. package/dist/run/steps.d.ts.map +1 -0
  369. package/dist/run/steps.js +151 -0
  370. package/dist/run/steps.js.map +1 -0
  371. package/dist/run/unit-runner.d.ts +30 -0
  372. package/dist/run/unit-runner.d.ts.map +1 -0
  373. package/dist/run/unit-runner.js +11 -0
  374. package/dist/run/unit-runner.js.map +1 -0
  375. package/dist/run/units.d.ts +50 -0
  376. package/dist/run/units.d.ts.map +1 -0
  377. package/dist/run/units.js +103 -0
  378. package/dist/run/units.js.map +1 -0
  379. package/dist/run/worker/entry.d.ts +8 -0
  380. package/dist/run/worker/entry.d.ts.map +1 -0
  381. package/dist/run/worker/entry.js +137 -0
  382. package/dist/run/worker/entry.js.map +1 -0
  383. package/dist/run/worker/handle.d.ts +10 -0
  384. package/dist/run/worker/handle.d.ts.map +1 -0
  385. package/dist/run/worker/handle.js +74 -0
  386. package/dist/run/worker/handle.js.map +1 -0
  387. package/dist/run/worker/protocol.d.ts +129 -0
  388. package/dist/run/worker/protocol.d.ts.map +1 -0
  389. package/dist/run/worker/protocol.js +18 -0
  390. package/dist/run/worker/protocol.js.map +1 -0
  391. package/dist/run/worker/session.d.ts +69 -0
  392. package/dist/run/worker/session.d.ts.map +1 -0
  393. package/dist/run/worker/session.js +123 -0
  394. package/dist/run/worker/session.js.map +1 -0
  395. package/dist/types.d.ts +630 -0
  396. package/dist/types.d.ts.map +1 -0
  397. package/dist/types.js +6 -0
  398. package/dist/types.js.map +1 -0
  399. package/package.json +91 -0
@@ -0,0 +1,80 @@
1
+ /** Human-readable list reporter (spec 06-cli.md). */
2
+ import type { RunEventFact } from '../run/events.ts';
3
+ export interface ListReporterOutput {
4
+ write(line: string): void;
5
+ /** Raw control write for live status rendering; omit to disable it. */
6
+ raw?(text: string): void;
7
+ }
8
+ /**
9
+ * Renders the run's event stream as the CLI's human-readable output. The
10
+ * reporter is one sink on the run's single event spine, beside a host's
11
+ * `onEvent`, so the CLI shows exactly what a host receives.
12
+ */
13
+ export declare class ListReporter {
14
+ private readonly output;
15
+ private passed;
16
+ private failed;
17
+ private flaky;
18
+ private skipped;
19
+ private projectRoot;
20
+ private readonly status;
21
+ /** Base live-status text of each running pair, keyed `${testId}@${target}`. */
22
+ private readonly liveBase;
23
+ /** Current step line of each running pair, rendered under its header. */
24
+ private readonly liveStep;
25
+ /** Rolling window of the running step's latest model and backend calls. */
26
+ private readonly liveEvents;
27
+ /** Pairs whose permanent header line has been written. */
28
+ private readonly headerPrinted;
29
+ /** Run-wide model usage, summed from every reported result. */
30
+ private readonly runAi;
31
+ /** Colors follow live rendering: non-interactive sinks get plain text. */
32
+ private readonly pc;
33
+ /** Run-level errors, printed once at the end; the stream carries them as they happen. */
34
+ private readonly errors;
35
+ constructor(output?: ListReporterOutput, options?: {
36
+ live?: boolean;
37
+ });
38
+ /**
39
+ * The reporter as an event sink: one dispatch per fact. Bound, so it can be
40
+ * handed to the run's emitter directly.
41
+ */
42
+ readonly handle: (event: RunEventFact) => void;
43
+ private runStarted;
44
+ /** A worker began one test-target pair: show it in the live status block. */
45
+ private testStarted;
46
+ /**
47
+ * Streams step progress of a running pair. With a single test running, the
48
+ * whole story prints permanently and chronologically: a test header, one
49
+ * line per step, one line per model or backend call, and a step summary -
50
+ * the scrollback of a run reads without `--debug`. With parallel tests the
51
+ * stream would interleave, so each pair instead shows its current step and
52
+ * latest calls transiently in the live block.
53
+ */
54
+ private step;
55
+ /**
56
+ * Adds one serial group's model usage to the run totals. Member result
57
+ * records intentionally carry no attempts, so the group record is the one
58
+ * place their steps exist; summing here counts each member exactly once.
59
+ */
60
+ private serialGroup;
61
+ /** Writes one permanent line without disturbing the live block. */
62
+ private writeAboveStatus;
63
+ /**
64
+ * Prints the permanent test header once, before its first step line, so
65
+ * collapsed step summaries read under the test they belong to.
66
+ */
67
+ private ensureHeader;
68
+ /**
69
+ * Repaints one live entry: only the active step expands, showing its latest
70
+ * calls under the spinner line; between steps the entry collapses to the
71
+ * counter (its header is already permanent) or, before any step ran, the
72
+ * test title. With parallel pairs the title stays as block context.
73
+ */
74
+ private redrawLive;
75
+ private testFinished;
76
+ /** Names the user's failing line and renders a small code frame around it. */
77
+ private writeFailureLocation;
78
+ private runFinished;
79
+ }
80
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/report/list.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAMrD,OAAO,KAAK,EAAE,YAAY,EAA8B,MAAM,kBAAkB,CAAC;AAWjF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,uEAAuE;IACvE,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AA0FD;;;;GAIG;AACH,qBAAa,YAAY;IAuBrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAtBzB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA6C;IAChE,yFAAyF;IACzF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,YACmB,MAAM,GAAE,kBAAmC,EAC5D,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,EAKjC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAM,UAAW,YAAY,KAAG,IAAI,CA2B3C;IAEF,OAAO,CAAC,UAAU;IASlB,6EAA6E;IAC7E,OAAO,CAAC,WAAW;IAYnB;;;;;;;OAOG;IACH,OAAO,CAAC,IAAI;IA0CZ;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAQnB,mEAAmE;IACnE,OAAO,CAAC,gBAAgB;IAMxB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,YAAY;IAyDpB,8EAA8E;IAC9E,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,WAAW;CAgCpB"}
@@ -0,0 +1,372 @@
1
+ /** Human-readable list reporter (spec 06-cli.md). */
2
+ import path from 'node:path';
3
+ import picocolors from 'picocolors';
4
+ import { sanitizeText, truncateUtf8 } from '../internal/errors.js';
5
+ import { collapseText } from '../internal/text.js';
6
+ import { codeFrame, userFrame } from './code-frame.js';
7
+ import { LiveStatus } from './live-status.js';
8
+ const MAX_FIELD_BYTES = 8192;
9
+ /** Step labels stay one glanceable line; the report holds the full text. */
10
+ const MAX_STEP_LABEL_BYTES = 72;
11
+ function bounded(text) {
12
+ return truncateUtf8(sanitizeText(text), MAX_FIELD_BYTES);
13
+ }
14
+ /** One-line, quoted step label bounded for the live view. */
15
+ function stepLabel(label) {
16
+ const flat = collapseText(label);
17
+ const shown = truncateUtf8(flat, MAX_STEP_LABEL_BYTES);
18
+ return `"${shown}${shown === flat ? '' : '…'}"`;
19
+ }
20
+ /** Human duration: milliseconds under a second, one decimal above. */
21
+ function formatDuration(ms) {
22
+ return ms < 1_000 ? `${ms}ms` : `${(ms / 1_000).toFixed(1)}s`;
23
+ }
24
+ /** Compact token count: plain under a thousand, `12.4k`, then `4.2M`. */
25
+ function formatTokens(count) {
26
+ if (count < 1_000)
27
+ return `${count}`;
28
+ if (count < 1_000_000)
29
+ return `${(count / 1_000).toFixed(1)}k`;
30
+ return `${(count / 1_000_000).toFixed(1)}M`;
31
+ }
32
+ /** USD with enough precision for sub-cent model calls. */
33
+ function formatCost(costUsd) {
34
+ return `$${costUsd.toFixed(costUsd < 0.1 ? 4 : 2)}`;
35
+ }
36
+ /** Accumulates the model usage of one step list into a running total. */
37
+ function addStepsUsage(usage, steps) {
38
+ for (const step of steps) {
39
+ if (step.model === undefined)
40
+ continue;
41
+ usage.calls += step.model.calls;
42
+ usage.tokens += step.model.inputTokens + step.model.outputTokens;
43
+ if (step.model.estimatedCostUsd !== undefined) {
44
+ usage.costUsd = (usage.costUsd ?? 0) + step.model.estimatedCostUsd;
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * Sums model usage across every step of every attempt of one result. Serial
50
+ * members carry no attempts of their own; their usage arrives once per group
51
+ * through the `serial-group` event.
52
+ */
53
+ function aiUsage(result) {
54
+ const usage = { calls: 0, tokens: 0, costUsd: undefined };
55
+ for (const attempt of result.attempts)
56
+ addStepsUsage(usage, attempt.steps);
57
+ return usage;
58
+ }
59
+ /** One dim `ai …` segment, or undefined when the test used no model. */
60
+ function aiSegment(usage) {
61
+ if (usage.calls === 0)
62
+ return undefined;
63
+ const cost = usage.costUsd === undefined ? '' : ` · ${formatCost(usage.costUsd)}`;
64
+ return `ai ${formatTokens(usage.tokens)} tokens${cost}`;
65
+ }
66
+ /**
67
+ * Live tail for one step event. Model and backend calls are the ones worth a
68
+ * glance (`tool:` prefixes come from executor tool accounting); polls and
69
+ * policy decisions stay quiet.
70
+ */
71
+ function eventTail(event) {
72
+ if (event.kind === 'model') {
73
+ const tokens = event.count !== undefined && event.count > 0 ? ` · ${formatTokens(event.count)} tokens` : '';
74
+ return `model turn ${formatDuration(event.durationMs)}${tokens}`;
75
+ }
76
+ if (event.kind === 'backend') {
77
+ const name = sanitizeText(event.name ?? 'backend').replace(/^tool:/, '');
78
+ const failed = event.status === 'passed' ? '' : ' ✗';
79
+ return `${truncateUtf8(name, 40)} ${formatDuration(event.durationMs)}${failed}`;
80
+ }
81
+ return undefined;
82
+ }
83
+ const DEFAULT_OUTPUT = {
84
+ write: (line) => process.stdout.write(`${line}\n`),
85
+ raw: (text) => process.stdout.write(text),
86
+ };
87
+ /**
88
+ * Renders the run's event stream as the CLI's human-readable output. The
89
+ * reporter is one sink on the run's single event spine, beside a host's
90
+ * `onEvent`, so the CLI shows exactly what a host receives.
91
+ */
92
+ export class ListReporter {
93
+ output;
94
+ passed = 0;
95
+ failed = 0;
96
+ flaky = 0;
97
+ skipped = 0;
98
+ projectRoot;
99
+ status;
100
+ /** Base live-status text of each running pair, keyed `${testId}@${target}`. */
101
+ liveBase = new Map();
102
+ /** Current step line of each running pair, rendered under its header. */
103
+ liveStep = new Map();
104
+ /** Rolling window of the running step's latest model and backend calls. */
105
+ liveEvents = new Map();
106
+ /** Pairs whose permanent header line has been written. */
107
+ headerPrinted = new Set();
108
+ /** Run-wide model usage, summed from every reported result. */
109
+ runAi = { calls: 0, tokens: 0, costUsd: undefined };
110
+ /** Colors follow live rendering: non-interactive sinks get plain text. */
111
+ pc;
112
+ /** Run-level errors, printed once at the end; the stream carries them as they happen. */
113
+ errors = [];
114
+ constructor(output = DEFAULT_OUTPUT, options = {}) {
115
+ this.output = output;
116
+ const live = (options.live ?? process.stdout.isTTY === true) && output.raw !== undefined;
117
+ this.status = new LiveStatus(live ? output.raw?.bind(output) : undefined);
118
+ this.pc = picocolors.createColors(live);
119
+ }
120
+ /**
121
+ * The reporter as an event sink: one dispatch per fact. Bound, so it can be
122
+ * handed to the run's emitter directly.
123
+ */
124
+ handle = (event) => {
125
+ switch (event.type) {
126
+ case 'run-started':
127
+ this.runStarted(event);
128
+ break;
129
+ case 'plan':
130
+ this.status.plan(event.total);
131
+ break;
132
+ case 'test-started':
133
+ this.testStarted(event);
134
+ break;
135
+ case 'step':
136
+ this.step(event);
137
+ break;
138
+ case 'test-finished':
139
+ this.testFinished(event.result);
140
+ break;
141
+ case 'serial-group':
142
+ this.serialGroup(event.group);
143
+ break;
144
+ case 'run-error':
145
+ this.errors.push(event.error);
146
+ break;
147
+ case 'run-finished':
148
+ this.runFinished(event);
149
+ break;
150
+ }
151
+ };
152
+ runStarted(event) {
153
+ this.projectRoot = event.projectRoot;
154
+ this.output.write(this.pc.dim(`e2e run ${event.runId} (targets: ${event.targets.join(', ')})${event.ci ? ' [CI]' : ''}`));
155
+ }
156
+ /** A worker began one test-target pair: show it in the live status block. */
157
+ testStarted(event) {
158
+ const key = `${event.testId}@${event.target}`;
159
+ const base = `${bounded(event.title)} ${this.pc.dim(`[${event.target}]`)}`;
160
+ this.liveBase.set(key, base);
161
+ this.status.start(key, base);
162
+ // A second concurrent pair ends permanent streaming: entries the stream
163
+ // had hidden come back as block rows.
164
+ if (this.liveBase.size > 1) {
165
+ for (const [other, otherBase] of this.liveBase)
166
+ this.redrawLive(other, otherBase);
167
+ }
168
+ }
169
+ /**
170
+ * Streams step progress of a running pair. With a single test running, the
171
+ * whole story prints permanently and chronologically: a test header, one
172
+ * line per step, one line per model or backend call, and a step summary -
173
+ * the scrollback of a run reads without `--debug`. With parallel tests the
174
+ * stream would interleave, so each pair instead shows its current step and
175
+ * latest calls transiently in the live block.
176
+ */
177
+ step(event) {
178
+ const key = `${event.testId}@${event.target}`;
179
+ const base = this.liveBase.get(key);
180
+ if (base === undefined)
181
+ return;
182
+ const { progress } = event;
183
+ switch (progress.phase) {
184
+ case 'start': {
185
+ this.liveStep.set(key, `${progress.api} ${stepLabel(progress.label)}`);
186
+ this.liveEvents.delete(key);
187
+ if (this.liveBase.size === 1)
188
+ this.ensureHeader(key, base);
189
+ this.redrawLive(key, base);
190
+ break;
191
+ }
192
+ case 'event': {
193
+ const tail = eventTail(progress.event);
194
+ if (!this.liveStep.has(key) || tail === undefined)
195
+ break;
196
+ const recent = this.liveEvents.get(key) ?? [];
197
+ recent.push(tail);
198
+ this.liveEvents.set(key, recent);
199
+ this.redrawLive(key, base);
200
+ break;
201
+ }
202
+ case 'end': {
203
+ this.liveStep.delete(key);
204
+ this.liveEvents.delete(key);
205
+ this.redrawLive(key, base);
206
+ if (progress.kind !== 'agent')
207
+ break;
208
+ const glyph = progress.status === 'passed' ? this.pc.green('✓') : this.pc.red('✗');
209
+ const calls = progress.modelCalls > 0
210
+ ? ` · ${progress.modelCalls} model call${progress.modelCalls === 1 ? '' : 's'}`
211
+ : '';
212
+ const outcome = progress.status === 'passed' ? '' : ` ${progress.status}`;
213
+ this.writeAboveStatus(` ${glyph} ${this.pc.dim(progress.api)} ${stepLabel(progress.label)} ` +
214
+ this.pc.dim(`${formatDuration(progress.durationMs)}${calls}${outcome}`));
215
+ break;
216
+ }
217
+ }
218
+ }
219
+ /**
220
+ * Adds one serial group's model usage to the run totals. Member result
221
+ * records intentionally carry no attempts, so the group record is the one
222
+ * place their steps exist; summing here counts each member exactly once.
223
+ */
224
+ serialGroup(group) {
225
+ for (const attempt of group.attempts) {
226
+ for (const member of attempt.members) {
227
+ addStepsUsage(this.runAi, member.steps);
228
+ }
229
+ }
230
+ }
231
+ /** Writes one permanent line without disturbing the live block. */
232
+ writeAboveStatus(line) {
233
+ this.status.erase();
234
+ this.output.write(line);
235
+ this.status.redraw();
236
+ }
237
+ /**
238
+ * Prints the permanent test header once, before its first step line, so
239
+ * collapsed step summaries read under the test they belong to.
240
+ */
241
+ ensureHeader(key, base) {
242
+ if (this.headerPrinted.has(key))
243
+ return;
244
+ this.headerPrinted.add(key);
245
+ this.writeAboveStatus(`${this.pc.dim('▸')} ${base}`);
246
+ }
247
+ /**
248
+ * Repaints one live entry: only the active step expands, showing its latest
249
+ * calls under the spinner line; between steps the entry collapses to the
250
+ * counter (its header is already permanent) or, before any step ran, the
251
+ * test title. With parallel pairs the title stays as block context.
252
+ */
253
+ redrawLive(key, base) {
254
+ const solo = this.liveBase.size === 1 && this.headerPrinted.has(key);
255
+ const step = this.liveStep.get(key);
256
+ if (step === undefined) {
257
+ this.status.start(key, solo ? undefined : base);
258
+ return;
259
+ }
260
+ const head = solo ? this.pc.dim(step) : `${base}\n ${this.pc.dim(`▸ ${step}`)}`;
261
+ const indent = solo ? ' ' : ' ';
262
+ const lines = [head];
263
+ // Every call of the active step stays visible until the step collapses.
264
+ // The block must still fit the screen: repainting more rows than the
265
+ // terminal has breaks the cursor-up erase, so the oldest calls fold into
266
+ // one counter line when height runs out.
267
+ const events = this.liveEvents.get(key) ?? [];
268
+ const maxEvents = Math.max(4, (process.stdout.rows ?? 40) - 8);
269
+ const overflow = events.length - maxEvents;
270
+ const shown = overflow > 0 ? events.slice(overflow) : events;
271
+ if (overflow > 0) {
272
+ lines.push(`${indent}${this.pc.dim(`… ${overflow} earlier call${overflow === 1 ? '' : 's'}`)}`);
273
+ }
274
+ for (const tail of shown) {
275
+ lines.push(`${indent}${this.pc.dim(tail)}`);
276
+ }
277
+ this.status.start(key, lines.join('\n'));
278
+ }
279
+ testFinished(result) {
280
+ if (!result.selected && result.status === 'skipped') {
281
+ this.status.skip();
282
+ return;
283
+ }
284
+ this.status.erase();
285
+ const key = `${result.test.id}@${result.target.name}`;
286
+ this.status.finish(key);
287
+ this.liveBase.delete(key);
288
+ this.liveStep.delete(key);
289
+ this.liveEvents.delete(key);
290
+ this.headerPrinted.delete(key);
291
+ const title = bounded(result.test.titlePath.join(' \u203a '));
292
+ const target = result.target.name;
293
+ const duration = result.attempts.reduce((total, attempt) => total + attempt.durationMs, 0);
294
+ const usage = aiUsage(result);
295
+ this.runAi.calls += usage.calls;
296
+ this.runAi.tokens += usage.tokens;
297
+ if (usage.costUsd !== undefined)
298
+ this.runAi.costUsd = (this.runAi.costUsd ?? 0) + usage.costUsd;
299
+ const ai = aiSegment(usage);
300
+ const aiSuffix = ai === undefined ? '' : ` \u00b7 ${ai}`;
301
+ switch (result.status) {
302
+ case 'passed':
303
+ this.passed += 1;
304
+ this.output.write(`${this.pc.green('\u2713')} ${title} ${this.pc.dim(`[${target}] ${formatDuration(duration)}${aiSuffix}`)}`);
305
+ break;
306
+ case 'flaky':
307
+ this.flaky += 1;
308
+ this.output.write(`${this.pc.yellow('\u2713')} ${title} ${this.pc.yellow('(flaky)')} ${this.pc.dim(`[${target}] ${formatDuration(duration)}${aiSuffix}`)}`);
309
+ break;
310
+ case 'skipped':
311
+ this.skipped += 1;
312
+ this.output.write(`${this.pc.cyan('-')} ${title} ${this.pc.dim(`[${target}] skipped: ${bounded(result.skip?.reason ?? '')}`)}`);
313
+ break;
314
+ default: {
315
+ this.failed += 1;
316
+ this.output.write(`${this.pc.red('\u2717')} ${title} ${this.pc.dim(`[${target}] ${result.status} ${formatDuration(duration)}${aiSuffix}`)}`);
317
+ const error = result.attempts[result.attempts.length - 1]?.error;
318
+ if (error !== undefined) {
319
+ for (const line of bounded(error.message).split('\n')) {
320
+ this.output.write(` ${this.pc.red(line)}`);
321
+ }
322
+ this.writeFailureLocation(error.stack);
323
+ }
324
+ }
325
+ }
326
+ this.status.redraw();
327
+ }
328
+ /** Names the user's failing line and renders a small code frame around it. */
329
+ writeFailureLocation(stack) {
330
+ if (this.projectRoot === undefined)
331
+ return;
332
+ const frame = userFrame(stack, this.projectRoot);
333
+ if (frame === undefined)
334
+ return;
335
+ const relative = path.relative(this.projectRoot, frame.file);
336
+ this.output.write('');
337
+ this.output.write(` ${this.pc.dim('at')} ${this.pc.cyan(`${bounded(relative)}:${frame.line}:${frame.column}`)}`);
338
+ for (const line of codeFrame(frame))
339
+ this.output.write(` ${line}`);
340
+ }
341
+ runFinished(event) {
342
+ this.status.stop();
343
+ // Run-level errors never arrive as results: they abort before, between, or
344
+ // after test execution. Without this the console shows only a bare exit
345
+ // code and the reason lives solely in report.json.
346
+ for (const error of this.errors) {
347
+ this.output.write('');
348
+ const phase = error.phase === undefined ? '' : ` ${this.pc.dim(`(${error.phase})`)}`;
349
+ this.output.write(`${this.pc.red(`\u2717 ${error.category} error`)} ${this.pc.dim(error.code)}${phase}`);
350
+ for (const line of bounded(error.message).split('\n')) {
351
+ this.output.write(` ${this.pc.red(line)}`);
352
+ }
353
+ }
354
+ const parts = [
355
+ this.passed > 0 ? this.pc.green(`${this.passed} passed`) : undefined,
356
+ this.failed > 0 ? this.pc.red(`${this.failed} failed`) : undefined,
357
+ this.flaky > 0 ? this.pc.yellow(`${this.flaky} flaky`) : undefined,
358
+ this.skipped > 0 ? this.pc.cyan(`${this.skipped} skipped`) : undefined,
359
+ ].filter((part) => part !== undefined);
360
+ this.output.write('');
361
+ this.output.write(parts.length > 0 ? parts.join(this.pc.dim(' \u00b7 ')) : this.pc.dim('no tests executed'));
362
+ const ai = aiSegment(this.runAi);
363
+ if (ai !== undefined) {
364
+ this.output.write(this.pc.dim(`${ai} \u00b7 ${this.runAi.calls} model calls`));
365
+ }
366
+ this.output.write(this.pc.dim(`report: ${event.reportPath ?? '(not written)'}`));
367
+ if (event.aiTracePath !== undefined) {
368
+ this.output.write(this.pc.dim(`ai trace: ${event.aiTracePath} · open with: npx unbox-ai ${event.aiTracePath}`));
369
+ }
370
+ }
371
+ }
372
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/report/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Live in-progress block for TTY reporters: the currently executing pairs and
3
+ * one progress counter line, repainted below the permanent log. Constructed
4
+ * without a raw control channel it is a no-op, so callers never branch.
5
+ */
6
+ export declare class LiveStatus {
7
+ private readonly raw;
8
+ /**
9
+ * Entries currently executing, keyed by the caller, in start order. An
10
+ * undefined text counts toward the progress line without rendering a row,
11
+ * for entries whose story streams permanently above the block.
12
+ */
13
+ private readonly running;
14
+ /** Lines the status block currently occupies below the log. */
15
+ private statusLines;
16
+ /** Planned entries; 0 until the plan is announced. */
17
+ private total;
18
+ /** Entries with a reported result. */
19
+ private done;
20
+ /** Current spinner frame; advanced by the animation timer. */
21
+ private frame;
22
+ private timer;
23
+ constructor(raw: ((text: string) => void) | undefined);
24
+ /** Animates while any entry renders; stopped and unref'd otherwise. */
25
+ private syncTimer;
26
+ /** Announces how many entries the run will execute. */
27
+ plan(total: number): void;
28
+ /** Shows one started entry in the block; undefined counts it invisibly. */
29
+ start(key: string, text: string | undefined): void;
30
+ /** Counts one finished entry and removes it from the block. */
31
+ finish(key: string): void;
32
+ /** Counts one finished entry that never appeared in the block. */
33
+ skip(): void;
34
+ /** Clears the block so permanent log lines can be appended. */
35
+ erase(): void;
36
+ /**
37
+ * Ends the live block for good: entries still running (an interrupt, a
38
+ * crashed worker) are dropped and the spinner timer is cleared, so nothing
39
+ * repaints after the final summary in a long-lived programmatic caller.
40
+ */
41
+ stop(): void;
42
+ /**
43
+ * Repaints the block below the permanent log. An entry may span several
44
+ * lines (test header, current step, recent calls); the marker goes on the
45
+ * first line and every line is clamped so the row count stays exact.
46
+ */
47
+ redraw(): void;
48
+ /** One bounded counter line: completed, executing, and waiting entries. */
49
+ private progressLine;
50
+ }
51
+ //# sourceMappingURL=live-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-status.d.ts","sourceRoot":"","sources":["../../src/report/live-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsCH,qBAAa,UAAU;IAiBT,OAAO,CAAC,QAAQ,CAAC,GAAG;IAhBhC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,+DAA+D;IAC/D,OAAO,CAAC,WAAW,CAAK;IACxB,sDAAsD;IACtD,OAAO,CAAC,KAAK,CAAK;IAClB,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAK;IACjB,8DAA8D;IAC9D,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAA6B;IAE1C,YAA6B,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAAI;IAE1E,uEAAuE;IACvE,OAAO,CAAC,SAAS;IAejB,uDAAuD;IACvD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGxB;IAED,2EAA2E;IAC3E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAGjD;IAED,+DAA+D;IAC/D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxB;IAED,kEAAkE;IAClE,IAAI,IAAI,IAAI,CAGX;IAED,+DAA+D;IAC/D,KAAK,IAAI,IAAI,CAIZ;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,CAKX;IAED;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAsBb;IAED,2EAA2E;IAC3E,OAAO,CAAC,YAAY;CAUrB"}