@crvouga/atlas 0.4.0 → 0.6.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 (444) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/README.md +191 -611
  3. package/dist/bun/src/driver.d.ts +41 -7
  4. package/dist/bun/src/driver.js +47 -6
  5. package/dist/bun/src/index.d.ts +8 -0
  6. package/dist/bun/src/index.js +8 -0
  7. package/dist/core/src/cli.d.ts +14 -1
  8. package/dist/core/src/cli.js +35 -1
  9. package/dist/core/src/config.d.ts +77 -4
  10. package/dist/core/src/config.js +110 -17
  11. package/dist/core/src/events/cloudevents.d.ts +54 -9
  12. package/dist/core/src/events/cloudevents.js +60 -9
  13. package/dist/core/src/graph.d.ts +21 -0
  14. package/dist/core/src/graph.js +26 -0
  15. package/dist/core/src/index.d.ts +11 -0
  16. package/dist/core/src/index.js +11 -0
  17. package/dist/core/src/lint.d.ts +30 -0
  18. package/dist/core/src/lint.js +13 -0
  19. package/dist/core/src/plan.d.ts +39 -1
  20. package/dist/core/src/plan.js +28 -1
  21. package/dist/core/src/privacy.d.ts +29 -2
  22. package/dist/core/src/privacy.js +19 -2
  23. package/dist/core/src/report/formats.d.ts +34 -4
  24. package/dist/core/src/report/formats.js +24 -4
  25. package/dist/core/src/report/markdown.d.ts +15 -0
  26. package/dist/core/src/report/markdown.js +8 -0
  27. package/dist/core/src/run/clients.d.ts +44 -5
  28. package/dist/core/src/run/clients.js +46 -2
  29. package/dist/core/src/run/execute.d.ts +75 -16
  30. package/dist/core/src/run/execute.js +71 -18
  31. package/dist/core/src/run/frames.d.ts +13 -4
  32. package/dist/core/src/run/frames.js +19 -4
  33. package/dist/core/src/run/http.d.ts +34 -1
  34. package/dist/core/src/run/http.js +14 -1
  35. package/dist/core/src/run/types.d.ts +76 -3
  36. package/dist/core/src/run/types.js +19 -3
  37. package/dist/core/src/signals.d.ts +49 -5
  38. package/dist/core/src/signals.js +22 -5
  39. package/dist/core/src/spec/compose.d.ts +23 -1
  40. package/dist/core/src/spec/compose.js +10 -1
  41. package/dist/core/src/spec/index.d.ts +9 -1
  42. package/dist/core/src/spec/index.js +9 -1
  43. package/dist/core/src/spec/load.d.ts +22 -1
  44. package/dist/core/src/spec/load.js +31 -1
  45. package/dist/core/src/spec/parse.d.ts +16 -2
  46. package/dist/core/src/spec/parse.js +25 -2
  47. package/dist/core/src/spec/scxml.d.ts +25 -4
  48. package/dist/core/src/spec/scxml.js +36 -4
  49. package/dist/core/src/spec/types.d.ts +52 -1
  50. package/dist/core/src/spec/types.js +24 -0
  51. package/dist/detox/src/index.d.ts +54 -11
  52. package/dist/detox/src/index.js +45 -7
  53. package/dist/playwright/src/driver.d.ts +39 -3
  54. package/dist/playwright/src/driver.js +27 -3
  55. package/dist/playwright/src/index.d.ts +10 -0
  56. package/dist/playwright/src/index.js +10 -0
  57. package/dist/playwright/src/media.d.ts +50 -4
  58. package/dist/playwright/src/media.js +55 -4
  59. package/dist/playwright/src/signals.d.ts +44 -5
  60. package/dist/playwright/src/signals.js +29 -5
  61. package/dist/reports/src/attachment-files.d.ts +44 -0
  62. package/dist/reports/src/attachment-files.js +121 -0
  63. package/dist/reports/src/attachment-response.d.ts +31 -0
  64. package/dist/reports/src/attachment-response.js +55 -0
  65. package/dist/reports/src/aws-credentials.d.ts +48 -0
  66. package/dist/reports/src/aws-credentials.js +221 -0
  67. package/dist/reports/src/browser-navigation.d.ts +14 -0
  68. package/dist/reports/src/browser-navigation.js +7 -0
  69. package/dist/reports/src/bundle.d.ts +34 -2
  70. package/dist/reports/src/bundle.js +38 -2
  71. package/dist/reports/src/catalog.d.ts +34 -3
  72. package/dist/reports/src/catalog.js +17 -3
  73. package/dist/reports/src/cli-stores.d.ts +36 -0
  74. package/dist/reports/src/cli-stores.js +73 -0
  75. package/dist/reports/src/clock.d.ts +7 -2
  76. package/dist/reports/src/clock.js +5 -2
  77. package/dist/reports/src/completion-order.d.ts +18 -5
  78. package/dist/reports/src/completion-order.js +18 -5
  79. package/dist/reports/src/compose.d.ts +80 -0
  80. package/dist/reports/src/compose.js +117 -0
  81. package/dist/reports/src/copy-store.d.ts +29 -0
  82. package/dist/reports/src/copy-store.js +52 -0
  83. package/dist/reports/src/directory-outline.d.ts +38 -0
  84. package/dist/reports/src/directory-outline.js +103 -0
  85. package/dist/reports/src/directory-store.d.ts +20 -0
  86. package/dist/reports/src/directory-store.js +166 -0
  87. package/dist/reports/src/doctor.d.ts +29 -0
  88. package/dist/reports/src/doctor.js +85 -0
  89. package/dist/reports/src/effective-delta.d.ts +34 -0
  90. package/dist/reports/src/effective-delta.js +25 -0
  91. package/dist/reports/src/evidence-detail.d.ts +64 -0
  92. package/dist/reports/src/evidence-detail.js +92 -0
  93. package/dist/reports/src/evidence-live.d.ts +35 -5
  94. package/dist/reports/src/evidence-live.js +18 -2
  95. package/dist/reports/src/evidence-types.d.ts +68 -1
  96. package/dist/reports/src/evidence-types.js +5 -1
  97. package/dist/reports/src/evidence-view.d.ts +43 -4
  98. package/dist/reports/src/evidence-view.js +13 -2
  99. package/dist/reports/src/explorer-types.d.ts +40 -3
  100. package/dist/reports/src/explorer-types.js +8 -0
  101. package/dist/reports/src/explorer-versions.d.ts +9 -1
  102. package/dist/reports/src/explorer-versions.js +18 -1
  103. package/dist/reports/src/export-evidence.d.ts +16 -1
  104. package/dist/reports/src/export-evidence.js +52 -1
  105. package/dist/reports/src/fetcher.d.ts +27 -3
  106. package/dist/reports/src/fetcher.js +11 -3
  107. package/dist/reports/src/format-date.d.ts +6 -0
  108. package/dist/reports/src/format-date.js +6 -0
  109. package/dist/reports/src/format.d.ts +16 -0
  110. package/dist/reports/src/format.js +10 -0
  111. package/dist/reports/src/frames.d.ts +36 -3
  112. package/dist/reports/src/frames.js +22 -3
  113. package/dist/reports/src/hash.d.ts +18 -0
  114. package/dist/reports/src/hash.js +13 -0
  115. package/dist/reports/src/host.d.ts +29 -0
  116. package/dist/reports/src/host.js +64 -0
  117. package/dist/reports/src/html-frame.d.ts +5 -6
  118. package/dist/reports/src/html-frame.js +12 -1
  119. package/dist/reports/src/http-store.d.ts +56 -0
  120. package/dist/reports/src/http-store.js +148 -0
  121. package/dist/reports/src/http.d.ts +7 -0
  122. package/dist/reports/src/http.js +6 -0
  123. package/dist/reports/src/ingest.d.ts +54 -0
  124. package/dist/reports/src/ingest.js +210 -0
  125. package/dist/reports/src/init.d.ts +40 -0
  126. package/dist/reports/src/init.js +369 -0
  127. package/dist/reports/src/junit.d.ts +33 -6
  128. package/dist/reports/src/junit.js +87 -21
  129. package/dist/reports/src/keyboard.d.ts +20 -0
  130. package/dist/reports/src/keyboard.js +11 -0
  131. package/dist/reports/src/keys.d.ts +21 -3
  132. package/dist/reports/src/keys.js +21 -3
  133. package/dist/reports/src/layer-axes.d.ts +35 -5
  134. package/dist/reports/src/layer-axes.js +25 -5
  135. package/dist/reports/src/layer-catalog.d.ts +28 -1
  136. package/dist/reports/src/layer-catalog.js +18 -1
  137. package/dist/reports/src/layer-merge.d.ts +98 -9
  138. package/dist/reports/src/layer-merge.js +147 -31
  139. package/dist/reports/src/layer-source.d.ts +18 -0
  140. package/dist/reports/src/layer-source.js +11 -0
  141. package/dist/reports/src/layer-store.d.ts +42 -0
  142. package/dist/reports/src/layer-store.js +63 -5
  143. package/dist/reports/src/layer-types.d.ts +32 -1
  144. package/dist/reports/src/layers-route.d.ts +47 -4
  145. package/dist/reports/src/layers-route.js +86 -7
  146. package/dist/reports/src/live-reporter.d.ts +34 -0
  147. package/dist/reports/src/live-reporter.js +122 -0
  148. package/dist/reports/src/media-types.d.ts +11 -0
  149. package/dist/reports/src/media-types.js +22 -0
  150. package/dist/reports/src/namespace-guard.d.ts +10 -1
  151. package/dist/reports/src/namespace-guard.js +10 -1
  152. package/dist/reports/src/navigation.d.ts +12 -0
  153. package/dist/reports/src/navigation.js +7 -0
  154. package/dist/reports/src/object-io.d.ts +11 -4
  155. package/dist/reports/src/object-io.js +4 -4
  156. package/dist/reports/src/object-store-conformance.d.ts +27 -0
  157. package/dist/reports/src/object-store-conformance.js +87 -0
  158. package/dist/reports/src/object-store.d.ts +33 -24
  159. package/dist/reports/src/object-store.js +17 -24
  160. package/dist/reports/src/parse-with.d.ts +16 -0
  161. package/dist/reports/src/parse-with.js +14 -0
  162. package/dist/reports/src/performance-part.d.ts +25 -1
  163. package/dist/reports/src/performance-part.js +15 -1
  164. package/dist/reports/src/performance.d.ts +22 -2
  165. package/dist/reports/src/performance.js +12 -2
  166. package/dist/reports/src/persist.d.ts +12 -3
  167. package/dist/reports/src/persist.js +12 -3
  168. package/dist/reports/src/phone.d.ts +18 -1
  169. package/dist/reports/src/phone.js +18 -1
  170. package/dist/reports/src/protocol.d.ts +26 -4
  171. package/dist/reports/src/protocol.js +15 -4
  172. package/dist/reports/src/publication.d.ts +21 -1
  173. package/dist/reports/src/publication.js +21 -1
  174. package/dist/reports/src/publish-checks.d.ts +35 -0
  175. package/dist/reports/src/publish-checks.js +122 -0
  176. package/dist/reports/src/publish.d.ts +42 -9
  177. package/dist/reports/src/publish.js +36 -7
  178. package/dist/reports/src/read.d.ts +46 -16
  179. package/dist/reports/src/read.js +38 -14
  180. package/dist/reports/src/recording-bundle.d.ts +13 -2
  181. package/dist/reports/src/recording-bundle.js +4 -2
  182. package/dist/reports/src/recording-keys.d.ts +15 -1
  183. package/dist/reports/src/recording-keys.js +15 -1
  184. package/dist/reports/src/remote-report.d.ts +28 -7
  185. package/dist/reports/src/remote-report.js +15 -7
  186. package/dist/reports/src/report-cli.d.ts +51 -0
  187. package/dist/reports/src/report-cli.js +486 -0
  188. package/dist/reports/src/report-index.d.ts +99 -0
  189. package/dist/reports/src/report-index.js +337 -0
  190. package/dist/reports/src/report-loader.d.ts +10 -0
  191. package/dist/reports/src/report-loader.js +6 -0
  192. package/dist/reports/src/report-parts.d.ts +29 -3
  193. package/dist/reports/src/report-parts.js +37 -3
  194. package/dist/reports/src/report-status.d.ts +48 -0
  195. package/dist/reports/src/report-status.js +156 -0
  196. package/dist/reports/src/report-types.d.ts +73 -0
  197. package/dist/reports/src/report-types.js +3 -0
  198. package/dist/reports/src/reporter.d.ts +67 -0
  199. package/dist/reports/src/reporter.js +128 -0
  200. package/dist/reports/src/reports-explorer-route.d.ts +541 -0
  201. package/dist/reports/src/reports-explorer-route.js +11 -0
  202. package/dist/reports/src/reports-list-route.d.ts +9 -0
  203. package/dist/reports/src/reports-list-route.js +9 -0
  204. package/dist/reports/src/reports-route.d.ts +561 -22
  205. package/dist/reports/src/reports-route.js +11 -3
  206. package/dist/reports/src/reports-store.d.ts +19 -2
  207. package/dist/reports/src/reports-store.js +10 -2
  208. package/dist/reports/src/resilient-cache.d.ts +14 -1
  209. package/dist/reports/src/resilient-cache.js +8 -1
  210. package/dist/reports/src/retention.d.ts +17 -1
  211. package/dist/reports/src/retention.js +5 -1
  212. package/dist/reports/src/run-bundle.d.ts +63 -0
  213. package/dist/reports/src/run-bundle.js +159 -0
  214. package/dist/reports/src/s3-store.d.ts +79 -0
  215. package/dist/reports/src/s3-store.js +295 -0
  216. package/dist/reports/src/scenario.d.ts +14 -4
  217. package/dist/reports/src/scenario.js +5 -4
  218. package/dist/reports/src/sigv4.d.ts +72 -0
  219. package/dist/reports/src/sigv4.js +96 -0
  220. package/dist/reports/src/snapshot-bundle.d.ts +24 -1
  221. package/dist/reports/src/snapshot-bundle.js +27 -2
  222. package/dist/reports/src/snapshot-surface.d.ts +20 -9
  223. package/dist/reports/src/snapshot-surface.js +32 -19
  224. package/dist/reports/src/source-content.d.ts +23 -0
  225. package/dist/reports/src/source-content.js +30 -1
  226. package/dist/reports/src/source-entries.d.ts +13 -0
  227. package/dist/reports/src/source-entries.js +6 -0
  228. package/dist/reports/src/source-part.d.ts +15 -0
  229. package/dist/reports/src/source-part.js +8 -0
  230. package/dist/reports/src/source-reader.d.ts +11 -0
  231. package/dist/reports/src/source-reader.js +5 -0
  232. package/dist/reports/src/spec-evidence.d.ts +12 -2
  233. package/dist/reports/src/spec-evidence.js +6 -2
  234. package/dist/reports/src/spec-inventory.d.ts +15 -1
  235. package/dist/reports/src/spec-inventory.js +22 -1
  236. package/dist/reports/src/spec-link.d.ts +28 -0
  237. package/dist/reports/src/spec-link.js +70 -0
  238. package/dist/reports/src/spec-set.d.ts +63 -0
  239. package/dist/reports/src/spec-set.js +177 -0
  240. package/dist/reports/src/status.d.ts +10 -0
  241. package/dist/reports/src/status.js +5 -0
  242. package/dist/reports/src/store-prefix.d.ts +28 -0
  243. package/dist/reports/src/store-prefix.js +22 -0
  244. package/dist/reports/src/store-url.d.ts +89 -0
  245. package/dist/reports/src/store-url.js +160 -0
  246. package/dist/reports/src/test-catalog-entity.d.ts +11 -0
  247. package/dist/reports/src/test-catalog-entity.js +6 -0
  248. package/dist/reports/src/types.d.ts +6 -1
  249. package/dist/reports/src/use-report-nav.d.ts +35 -0
  250. package/dist/reports/src/use-report-nav.js +12 -0
  251. package/dist/runners/src/codecept.d.ts +14 -0
  252. package/dist/runners/src/codecept.js +16 -0
  253. package/dist/runners/src/jest.d.ts +50 -0
  254. package/dist/runners/src/jest.js +52 -0
  255. package/dist/runners/src/mocha.d.ts +40 -0
  256. package/dist/runners/src/mocha.js +39 -0
  257. package/dist/runners/src/node-test.d.ts +28 -0
  258. package/dist/runners/src/node-test.js +44 -0
  259. package/dist/runners/src/publish.d.ts +30 -0
  260. package/dist/runners/src/publish.js +68 -0
  261. package/dist/schema/src/api.d.ts +800 -0
  262. package/dist/schema/src/api.js +201 -0
  263. package/dist/schema/src/cli-results.d.ts +210 -0
  264. package/dist/schema/src/cli-results.js +124 -0
  265. package/dist/schema/src/common.d.ts +53 -0
  266. package/dist/schema/src/common.js +42 -0
  267. package/dist/schema/src/index.d.ts +16 -0
  268. package/dist/schema/src/index.js +16 -0
  269. package/dist/schema/src/layer.d.ts +2273 -0
  270. package/dist/schema/src/layer.js +462 -0
  271. package/dist/schema/src/live-run.d.ts +123 -0
  272. package/dist/schema/src/live-run.js +30 -0
  273. package/dist/schema/src/manifest.d.ts +97 -2
  274. package/dist/schema/src/manifest.js +84 -0
  275. package/dist/schema/src/project.d.ts +20 -0
  276. package/dist/schema/src/project.js +10 -0
  277. package/dist/schema/src/report-sources.d.ts +29 -0
  278. package/dist/schema/src/report-sources.js +27 -1
  279. package/dist/schema/src/runs-index.d.ts +17 -1
  280. package/dist/schema/src/runs-index.js +15 -0
  281. package/dist/schema/src/server-config.d.ts +177 -0
  282. package/dist/schema/src/server-config.js +85 -0
  283. package/dist/schema/src/spec.d.ts +69 -0
  284. package/dist/schema/src/spec.js +58 -0
  285. package/dist/server/src/app.d.ts +72 -0
  286. package/dist/server/src/app.js +557 -0
  287. package/dist/server/src/auth.d.ts +41 -0
  288. package/dist/server/src/auth.js +59 -0
  289. package/dist/server/src/config.d.ts +83 -0
  290. package/dist/server/src/config.js +204 -0
  291. package/dist/server/src/dev.d.ts +12 -0
  292. package/dist/server/src/dev.js +89 -0
  293. package/dist/server/src/events.d.ts +29 -0
  294. package/dist/server/src/events.js +101 -0
  295. package/dist/server/src/host.d.ts +30 -0
  296. package/dist/server/src/host.js +115 -0
  297. package/dist/server/src/index.d.ts +18 -0
  298. package/dist/server/src/index.js +18 -0
  299. package/dist/server/src/live-runs.d.ts +52 -0
  300. package/dist/server/src/live-runs.js +229 -0
  301. package/dist/server/src/llms.d.ts +19 -0
  302. package/dist/server/src/llms.js +63 -0
  303. package/dist/server/src/main.d.ts +30 -0
  304. package/dist/server/src/main.js +114 -0
  305. package/dist/server/src/openapi.d.ts +56 -0
  306. package/dist/server/src/openapi.js +438 -0
  307. package/dist/server/src/problem.d.ts +8 -0
  308. package/dist/server/src/problem.js +39 -0
  309. package/dist/server/src/projects.d.ts +3 -0
  310. package/dist/server/src/projects.js +154 -0
  311. package/dist/server/src/settings-page.d.ts +9 -0
  312. package/dist/server/src/settings-page.js +93 -0
  313. package/dist/server/src/settings.d.ts +23 -0
  314. package/dist/server/src/settings.js +72 -0
  315. package/dist/server/src/site.d.ts +15 -0
  316. package/dist/server/src/site.js +78 -0
  317. package/dist/server/src/store-api.d.ts +28 -0
  318. package/dist/server/src/store-api.js +180 -0
  319. package/dist/server/src/validate.d.ts +71 -0
  320. package/dist/server/src/validate.js +197 -0
  321. package/dist/vitest/src/index.d.ts +27 -5
  322. package/dist/vitest/src/index.js +18 -5
  323. package/dist/webdriver/src/driver.d.ts +63 -11
  324. package/dist/webdriver/src/driver.js +57 -6
  325. package/dist/webdriver/src/index.d.ts +8 -0
  326. package/dist/webdriver/src/index.js +1 -0
  327. package/dist/webdriver/src/protocol.d.ts +75 -6
  328. package/dist/webdriver/src/protocol.js +79 -6
  329. package/docs/agents.md +137 -0
  330. package/docs/deploying.md +345 -0
  331. package/docs/dogfooding.md +175 -0
  332. package/docs/extending.md +242 -0
  333. package/docs/integrating.md +485 -0
  334. package/docs/reference/bun.md +141 -0
  335. package/docs/reference/cli.md +148 -0
  336. package/docs/reference/core.md +2432 -0
  337. package/docs/reference/detox.md +150 -0
  338. package/docs/reference/http-api.md +799 -0
  339. package/docs/reference/playwright.md +303 -0
  340. package/docs/reference/reports.md +7152 -0
  341. package/docs/reference/runners.md +169 -0
  342. package/docs/reference/schema.md +1762 -0
  343. package/docs/reference/server.md +825 -0
  344. package/docs/reference/vitest.md +45 -0
  345. package/docs/reference/webdriver.md +330 -0
  346. package/docs/report-backends.md +144 -0
  347. package/docs/report-contract.md +400 -0
  348. package/docs/reporting-issues.md +160 -0
  349. package/docs/runners.md +69 -0
  350. package/docs/server.md +321 -0
  351. package/docs/statecharts.md +643 -0
  352. package/llms-full.txt +4114 -0
  353. package/llms.txt +49 -0
  354. package/package.json +61 -11
  355. package/packages/core/README.md +2 -1
  356. package/packages/reports/README.md +65 -0
  357. package/packages/reports/STORAGE.md +4 -0
  358. package/packages/runners/README.md +6 -0
  359. package/packages/runners/compat/codecept.cjs +2 -0
  360. package/packages/runners/compat/jest.cjs +2 -0
  361. package/packages/runners/compat/mocha.cjs +2 -0
  362. package/packages/schema/README.md +14 -0
  363. package/packages/schema/schemas/atlas-change.schema.json +4 -0
  364. package/packages/schema/schemas/check-detail.schema.json +1032 -0
  365. package/packages/schema/schemas/checks-result.schema.json +26 -0
  366. package/packages/schema/schemas/command-error.schema.json +35 -0
  367. package/packages/schema/schemas/doctor-result.schema.json +60 -0
  368. package/packages/schema/schemas/effective-delta.schema.json +490 -0
  369. package/packages/schema/schemas/effective-evidence.schema.json +471 -0
  370. package/packages/schema/schemas/evidence-page.schema.json +271 -0
  371. package/packages/schema/schemas/hello-event.schema.json +26 -0
  372. package/packages/schema/schemas/init-plan.schema.json +347 -0
  373. package/packages/schema/schemas/layer-rows.schema.json +199 -0
  374. package/packages/schema/schemas/layer.schema.json +2888 -0
  375. package/packages/schema/schemas/live-run-start.schema.json +42 -0
  376. package/packages/schema/schemas/live-run-update.schema.json +93 -0
  377. package/packages/schema/schemas/live-run.schema.json +225 -0
  378. package/packages/schema/schemas/merge-result.schema.json +40 -0
  379. package/packages/schema/schemas/outline.schema.json +62 -0
  380. package/packages/schema/schemas/problem.schema.json +37 -0
  381. package/packages/schema/schemas/project-slug.schema.json +8 -0
  382. package/packages/schema/schemas/project.schema.json +22 -0
  383. package/packages/schema/schemas/projects.schema.json +33 -0
  384. package/packages/schema/schemas/publish-checks.schema.json +1413 -0
  385. package/packages/schema/schemas/publish-result.schema.json +168 -0
  386. package/packages/schema/schemas/ready.schema.json +68 -0
  387. package/packages/schema/schemas/report-event.schema.json +100 -0
  388. package/packages/schema/schemas/report-status.schema.json +370 -0
  389. package/packages/schema/schemas/server-config.schema.json +208 -0
  390. package/packages/schema/schemas/server-editable-settings.schema.json +132 -0
  391. package/packages/schema/schemas/server-info.schema.json +114 -0
  392. package/packages/schema/schemas/server-settings-snapshot.schema.json +285 -0
  393. package/packages/schema/schemas/spec-set.schema.json +103 -0
  394. package/packages/schema/schemas/store-listing.schema.json +29 -0
  395. package/packages/schema/schemas/store-write-result.schema.json +28 -0
  396. package/packages/schema/schemas/stream-result.schema.json +59 -0
  397. package/packages/server/README.md +43 -0
  398. package/packages/server/openapi.json +11021 -0
  399. package/packages/visualizer/README.md +32 -11
  400. package/packages/visualizer/bin/atlas-client.mjs +176 -0
  401. package/packages/visualizer/bin/atlas-visualizer.mjs +2 -175
  402. package/packages/visualizer/src/app/AppShell.tsx +32 -16
  403. package/packages/visualizer/src/app/report-sources.tsx +7 -4
  404. package/packages/visualizer/src/app/router.tsx +3 -3
  405. package/packages/visualizer/src/components/ActivityIndicator.module.css +4 -0
  406. package/packages/visualizer/src/components/ActivityIndicator.tsx +6 -0
  407. package/packages/visualizer/src/components/Header.module.css +101 -192
  408. package/packages/visualizer/src/components/Header.tsx +88 -13
  409. package/packages/visualizer/src/components/ProjectPicker.tsx +64 -0
  410. package/packages/visualizer/src/data/adapters/adapter.ts +5 -17
  411. package/packages/visualizer/src/data/adapters/index.ts +10 -1
  412. package/packages/visualizer/src/data/adapters/report-backend.test.ts +3 -2
  413. package/packages/visualizer/src/data/adapters/report-backend.ts +1 -1
  414. package/packages/visualizer/src/data/queries.ts +14 -7
  415. package/packages/visualizer/src/evidence/api.ts +16 -3
  416. package/packages/visualizer/src/evidence/artifacts.module.css +213 -0
  417. package/packages/visualizer/src/evidence/artifacts.tsx +272 -0
  418. package/packages/visualizer/src/evidence/check-detail.tsx +21 -4
  419. package/packages/visualizer/src/evidence/document-page.tsx +6 -2
  420. package/packages/visualizer/src/evidence/evidence-context.tsx +79 -12
  421. package/packages/visualizer/src/evidence/evidence.module.css +11 -1
  422. package/packages/visualizer/src/evidence/feature-page.tsx +7 -3
  423. package/packages/visualizer/src/evidence/model-page.tsx +6 -2
  424. package/packages/visualizer/src/evidence/project-home.tsx +45 -0
  425. package/packages/visualizer/src/evidence/recording-page.tsx +4 -1
  426. package/packages/visualizer/src/evidence/spec-index.tsx +2 -1
  427. package/packages/visualizer/src/evidence/spec-page.tsx +23 -16
  428. package/packages/visualizer/src/evidence/test-filter.tsx +21 -0
  429. package/packages/visualizer/src/find/Finder.tsx +1 -7
  430. package/packages/visualizer/src/find/open.ts +4 -0
  431. package/packages/visualizer/src/live/live-query.ts +21 -0
  432. package/packages/visualizer/src/live/live-runs.tsx +69 -0
  433. package/packages/visualizer/src/live/live-stream.ts +225 -0
  434. package/packages/visualizer/src/live/report-progress.ts +62 -0
  435. package/packages/visualizer/src/live/test-progress.tsx +34 -0
  436. package/packages/visualizer/src/runtime.ts +35 -0
  437. package/packages/visualizer/src/state/ui-store.ts +3 -2
  438. package/packages/visualizer/src/views/ChartPage.tsx +2 -0
  439. package/packages/visualizer/src/views/ChartTests.tsx +43 -0
  440. package/packages/visualizer/src/views/SidePanel.tsx +2 -0
  441. package/packages/visualizer/vite/atlas-files.test.ts +4 -4
  442. package/packages/visualizer/vite/atlas-files.ts +1 -5
  443. package/packages/visualizer/vite/atlas-server-proxy.ts +37 -0
  444. package/packages/visualizer/vite.config.ts +11 -3
@@ -1,48 +1,66 @@
1
- import type { LiveSource } from './evidence-live.js';
2
- import type { ReportOutline } from './layer-types.js';
3
- import { type ReportBackend } from './layers-route.js';
4
1
  /**
5
- * The spec reports API: read-only views of the shared reports store (R2,
6
- * keyed by commit sha; Atlas owns the layout), streamed to
7
- * the reports screen as Server-Sent Events.
2
+ * @module Reports HTTP API
8
3
  *
9
- * - `GET /reports` — commits with a report, newest first (`?cursor=`)
10
- * - `GET /reports/:sha` — one commit's run record
11
- * - `GET /reports/:sha/events` — the commit, then each source as it is read;
12
- * a running commit stays open and sends new sources as CI publishes them
13
- * (`?have=a,b` skips the sources a reconnecting client holds)
14
- * - `GET /reports/:sha/sources` — every source record of the selected attempt
15
- * - `GET /reports/:sha/frame.css` — the stylesheet its snapshots render with
16
- * - `GET /reports/:sha/tests/:source/:testId` — one test's timeline, no frames
17
- * - `GET /reports/:sha/tests/:source/:testId/files/*` — one frame file
18
- * - `GET /reports/:sha/tests/:source/:testId/events` — a test, then its frames
4
+ * The HTTP API behind the viewer, as one Hono app: the layer routes of `layers-route.ts`, the explorer routes, and the
5
+ * read-only commit-keyed routes for recordings written before layers existed. Every route is a GET (or HEAD) with
6
+ * `cache-control: no-store` unless a layer route says otherwise, and CORS reflects the caller's origin. Nothing here
7
+ * writes. Mounted at `/api/reports` by `reportsHost` and by the Atlas server.
19
8
  *
20
- * Mounted ahead of the per-request database middleware: nothing here touches
21
- * Postgres, and a long-lived stream must not hold a connection. Every
22
- * environment reads the same store, so any deployment serves any commit.
9
+ * Commit-keyed routes (`:sha` is a 40-hex commit; anything else is 404 `not_found`, no store configured is 503
10
+ * `reports_unavailable`):
11
+ * - `GET /` commits with a report, newest first (`?cursor=`), see `reportsListRoute`.
12
+ * - `GET /:sha` one commit's run record.
13
+ * - `GET /:sha/events` Server-Sent Events: the commit, then each source as it is read. A running commit stays open and
14
+ * sends new sources as they are published, for at most `REPORTS_TAIL_MS`; `?have=a,b` skips sources a reconnecting
15
+ * client already holds.
16
+ * - `GET /:sha/sources` every source record of the commit, merged from the shared and the local store.
17
+ * - `GET /:sha/frame.css` the stylesheet its snapshots render with.
18
+ * - `GET /:sha/tests/:source/:testId` one test's timeline without frames.
19
+ * - `GET /:sha/tests/:source/:testId/files/*` one frame file.
20
+ * - `GET /:sha/tests/:source/:testId/events` a test, then its frames, as Server-Sent Events.
21
+ * - `GET /:sha/explorer` and `GET /:sha/spec?path=` see `createReportsExplorerApp`.
22
+ *
23
+ * @see docs/server.md
23
24
  */
25
+ import type { LiveSource } from './evidence-live.js';
26
+ import type { ReportOutline } from './layer-types.js';
27
+ import { type ReportBackend } from './layers-route.js';
24
28
  import type { Clock, Timers } from './clock.js';
25
29
  import type { ObjectStore } from './object-store.js';
26
30
  import { type ReportsExplorerDeps } from './reports-explorer-route.js';
27
- /** Commits per page of `GET /reports`. */
31
+ /** Intended commits per page of the commit list. The list route currently pages by its own constant of the same value (30) and does not read this one. */
28
32
  export declare const REPORTS_PAGE_SIZE = 30;
29
- /** How often a running commit is re-listed for new sources. */
33
+ /** How often, in milliseconds, a running commit's event stream re-lists the store for new sources. */
30
34
  export declare const REPORTS_POLL_MS = 2000;
31
- /** A running commit's stream ends after this long; the client reconnects. */
35
+ /** How long, in milliseconds, a running commit's event stream stays open before it ends; the client reconnects. */
32
36
  export declare const REPORTS_TAIL_MS: number;
37
+ /** What `createReportsApp` and `createLayersApp` need from their host: stores, an outline of current specs, and time. */
33
38
  export type ReportsAppDeps = ReportsExplorerDeps & {
39
+ /** Loads the current specs (and the text of each) every report is laid over. Without it `GET /outline` answers 503. */
34
40
  readonly outline?: () => Promise<ReportOutline & {
35
41
  readSpec: (path: string) => Promise<string | null>;
36
42
  }>;
43
+ /** Leave layers out of the report, in every route. */
44
+ readonly include?: (layer: import('./evidence-types.js').LayerHeader) => boolean;
37
45
  /** Further stores whose layers join the combined report beside `localStore` and `store`. */
38
46
  readonly backends?: readonly ReportBackend[];
39
47
  /** Results of spec runs that are still running on this machine. */
40
48
  readonly live?: LiveSource;
41
49
  /** The shared reports store; null when this deployment has no credential. */
42
50
  readonly store: ObjectStore | null;
51
+ /** Time source; injected so caches and polling are testable. */
43
52
  readonly clock: Clock;
53
+ /** Timer functions for the event streams; injected so tests need no real time. */
44
54
  readonly timers: Timers;
45
55
  };
56
+ /**
57
+ * Builds the complete reports app (layer routes, explorer routes and the commit-keyed routes). Read-only: nothing it
58
+ * serves can change a store. CORS reflects any caller's origin for GET, HEAD and OPTIONS.
59
+ *
60
+ * @example
61
+ * const app = createReportsApp({ store: null, backends: [{ id: 'ci', label: 'CI', store }], clock: { now: Date.now }, timers });
62
+ * const response = await app.request('/evidence');
63
+ */
46
64
  export declare function createReportsApp(deps: ReportsAppDeps): import("hono/hono-base").HonoBase<{}, ((((((((import("hono/types").BlankSchema | import("hono/types").MergeSchemaPath<import("hono/types").BlankSchema, "/"> | import("hono/types").MergeSchemaPath<{
47
65
  "/:sha/explorer": {
48
66
  $get: {
@@ -86,6 +104,266 @@ export declare function createReportsApp(deps: ReportsAppDeps): import("hono/hon
86
104
  }[];
87
105
  } | null;
88
106
  parts: readonly {
107
+ tags?: string[] | undefined;
108
+ attachments?: {
109
+ [x: string]: import("hono/utils/types").JSONValue;
110
+ name: string;
111
+ id?: string | undefined;
112
+ role?: string | undefined;
113
+ contentType?: string | undefined;
114
+ bundleKey?: string | undefined;
115
+ uri?: string | undefined;
116
+ text?: string | undefined;
117
+ bytes?: number | undefined;
118
+ sha256?: string | undefined;
119
+ width?: number | undefined;
120
+ height?: number | undefined;
121
+ durationMs?: number | undefined;
122
+ description?: string | undefined;
123
+ at?: {
124
+ [x: string]: import("hono/utils/types").JSONValue;
125
+ step?: string | undefined;
126
+ offsetMs?: number | undefined;
127
+ } | undefined;
128
+ poster?: string | undefined;
129
+ captions?: string[] | undefined;
130
+ extensions?: {
131
+ [x: string]: import("hono/utils/types").JSONValue;
132
+ } | undefined;
133
+ }[] | undefined;
134
+ attempts?: {
135
+ [x: string]: import("hono/utils/types").JSONValue;
136
+ index: number;
137
+ status: "passed" | "failed" | "running" | "not-run";
138
+ durationMs?: number | undefined;
139
+ startedAtMs?: number | undefined;
140
+ detail?: string | undefined;
141
+ steps?: {
142
+ [x: string]: import("hono/utils/types").JSONValue;
143
+ name: string;
144
+ id?: string | undefined;
145
+ parentId?: string | undefined;
146
+ kind?: string | undefined;
147
+ status?: string | undefined;
148
+ offsetMs?: number | undefined;
149
+ durationMs?: number | undefined;
150
+ detail?: string | undefined;
151
+ attachments?: {
152
+ [x: string]: import("hono/utils/types").JSONValue;
153
+ name: string;
154
+ id?: string | undefined;
155
+ role?: string | undefined;
156
+ contentType?: string | undefined;
157
+ bundleKey?: string | undefined;
158
+ uri?: string | undefined;
159
+ text?: string | undefined;
160
+ bytes?: number | undefined;
161
+ sha256?: string | undefined;
162
+ width?: number | undefined;
163
+ height?: number | undefined;
164
+ durationMs?: number | undefined;
165
+ description?: string | undefined;
166
+ at?: {
167
+ [x: string]: import("hono/utils/types").JSONValue;
168
+ step?: string | undefined;
169
+ offsetMs?: number | undefined;
170
+ } | undefined;
171
+ poster?: string | undefined;
172
+ captions?: string[] | undefined;
173
+ extensions?: {
174
+ [x: string]: import("hono/utils/types").JSONValue;
175
+ } | undefined;
176
+ }[] | undefined;
177
+ annotations?: {
178
+ [x: string]: import("hono/utils/types").JSONValue;
179
+ type: string;
180
+ message: string;
181
+ level?: string | undefined;
182
+ at?: {
183
+ [x: string]: import("hono/utils/types").JSONValue;
184
+ step?: string | undefined;
185
+ offsetMs?: number | undefined;
186
+ } | undefined;
187
+ source?: {
188
+ [x: string]: import("hono/utils/types").JSONValue;
189
+ file?: string | undefined;
190
+ line?: number | undefined;
191
+ column?: number | undefined;
192
+ } | undefined;
193
+ links?: {
194
+ [x: string]: import("hono/utils/types").JSONValue;
195
+ url: string;
196
+ name?: string | undefined;
197
+ rel?: string | undefined;
198
+ }[] | undefined;
199
+ extensions?: {
200
+ [x: string]: import("hono/utils/types").JSONValue;
201
+ } | undefined;
202
+ }[] | undefined;
203
+ extensions?: {
204
+ [x: string]: import("hono/utils/types").JSONValue;
205
+ } | undefined;
206
+ }[] | undefined;
207
+ attachments?: {
208
+ [x: string]: import("hono/utils/types").JSONValue;
209
+ name: string;
210
+ id?: string | undefined;
211
+ role?: string | undefined;
212
+ contentType?: string | undefined;
213
+ bundleKey?: string | undefined;
214
+ uri?: string | undefined;
215
+ text?: string | undefined;
216
+ bytes?: number | undefined;
217
+ sha256?: string | undefined;
218
+ width?: number | undefined;
219
+ height?: number | undefined;
220
+ durationMs?: number | undefined;
221
+ description?: string | undefined;
222
+ at?: {
223
+ [x: string]: import("hono/utils/types").JSONValue;
224
+ step?: string | undefined;
225
+ offsetMs?: number | undefined;
226
+ } | undefined;
227
+ poster?: string | undefined;
228
+ captions?: string[] | undefined;
229
+ extensions?: {
230
+ [x: string]: import("hono/utils/types").JSONValue;
231
+ } | undefined;
232
+ }[] | undefined;
233
+ annotations?: {
234
+ [x: string]: import("hono/utils/types").JSONValue;
235
+ type: string;
236
+ message: string;
237
+ level?: string | undefined;
238
+ at?: {
239
+ [x: string]: import("hono/utils/types").JSONValue;
240
+ step?: string | undefined;
241
+ offsetMs?: number | undefined;
242
+ } | undefined;
243
+ source?: {
244
+ [x: string]: import("hono/utils/types").JSONValue;
245
+ file?: string | undefined;
246
+ line?: number | undefined;
247
+ column?: number | undefined;
248
+ } | undefined;
249
+ links?: {
250
+ [x: string]: import("hono/utils/types").JSONValue;
251
+ url: string;
252
+ name?: string | undefined;
253
+ rel?: string | undefined;
254
+ }[] | undefined;
255
+ extensions?: {
256
+ [x: string]: import("hono/utils/types").JSONValue;
257
+ } | undefined;
258
+ }[] | undefined;
259
+ extensions?: {
260
+ [x: string]: import("hono/utils/types").JSONValue;
261
+ } | undefined;
262
+ }[] | undefined;
263
+ steps?: {
264
+ [x: string]: import("hono/utils/types").JSONValue;
265
+ name: string;
266
+ id?: string | undefined;
267
+ parentId?: string | undefined;
268
+ kind?: string | undefined;
269
+ status?: string | undefined;
270
+ offsetMs?: number | undefined;
271
+ durationMs?: number | undefined;
272
+ detail?: string | undefined;
273
+ attachments?: {
274
+ [x: string]: import("hono/utils/types").JSONValue;
275
+ name: string;
276
+ id?: string | undefined;
277
+ role?: string | undefined;
278
+ contentType?: string | undefined;
279
+ bundleKey?: string | undefined;
280
+ uri?: string | undefined;
281
+ text?: string | undefined;
282
+ bytes?: number | undefined;
283
+ sha256?: string | undefined;
284
+ width?: number | undefined;
285
+ height?: number | undefined;
286
+ durationMs?: number | undefined;
287
+ description?: string | undefined;
288
+ at?: {
289
+ [x: string]: import("hono/utils/types").JSONValue;
290
+ step?: string | undefined;
291
+ offsetMs?: number | undefined;
292
+ } | undefined;
293
+ poster?: string | undefined;
294
+ captions?: string[] | undefined;
295
+ extensions?: {
296
+ [x: string]: import("hono/utils/types").JSONValue;
297
+ } | undefined;
298
+ }[] | undefined;
299
+ annotations?: {
300
+ [x: string]: import("hono/utils/types").JSONValue;
301
+ type: string;
302
+ message: string;
303
+ level?: string | undefined;
304
+ at?: {
305
+ [x: string]: import("hono/utils/types").JSONValue;
306
+ step?: string | undefined;
307
+ offsetMs?: number | undefined;
308
+ } | undefined;
309
+ source?: {
310
+ [x: string]: import("hono/utils/types").JSONValue;
311
+ file?: string | undefined;
312
+ line?: number | undefined;
313
+ column?: number | undefined;
314
+ } | undefined;
315
+ links?: {
316
+ [x: string]: import("hono/utils/types").JSONValue;
317
+ url: string;
318
+ name?: string | undefined;
319
+ rel?: string | undefined;
320
+ }[] | undefined;
321
+ extensions?: {
322
+ [x: string]: import("hono/utils/types").JSONValue;
323
+ } | undefined;
324
+ }[] | undefined;
325
+ extensions?: {
326
+ [x: string]: import("hono/utils/types").JSONValue;
327
+ } | undefined;
328
+ }[] | undefined;
329
+ extensions?: {
330
+ [x: string]: import("hono/utils/types").JSONValue;
331
+ } | undefined;
332
+ links?: {
333
+ [x: string]: import("hono/utils/types").JSONValue;
334
+ url: string;
335
+ name?: string | undefined;
336
+ rel?: string | undefined;
337
+ }[] | undefined;
338
+ annotations?: {
339
+ [x: string]: import("hono/utils/types").JSONValue;
340
+ type: string;
341
+ message: string;
342
+ level?: string | undefined;
343
+ at?: {
344
+ [x: string]: import("hono/utils/types").JSONValue;
345
+ step?: string | undefined;
346
+ offsetMs?: number | undefined;
347
+ } | undefined;
348
+ source?: {
349
+ [x: string]: import("hono/utils/types").JSONValue;
350
+ file?: string | undefined;
351
+ line?: number | undefined;
352
+ column?: number | undefined;
353
+ } | undefined;
354
+ links?: {
355
+ [x: string]: import("hono/utils/types").JSONValue;
356
+ url: string;
357
+ name?: string | undefined;
358
+ rel?: string | undefined;
359
+ }[] | undefined;
360
+ extensions?: {
361
+ [x: string]: import("hono/utils/types").JSONValue;
362
+ } | undefined;
363
+ }[] | undefined;
364
+ labels?: {
365
+ [x: string]: string;
366
+ } | undefined;
89
367
  readonly freshness?: "unknown" | "modified" | undefined;
90
368
  readonly parameters?: {
91
369
  readonly [x: string]: string;
@@ -96,6 +374,266 @@ export declare function createReportsApp(deps: ReportsAppDeps): import("hono/hon
96
374
  readonly title: string;
97
375
  readonly recordedAtMs: number;
98
376
  readonly checks: readonly {
377
+ tags?: string[] | undefined;
378
+ attachments?: {
379
+ [x: string]: import("hono/utils/types").JSONValue;
380
+ name: string;
381
+ id?: string | undefined;
382
+ role?: string | undefined;
383
+ contentType?: string | undefined;
384
+ bundleKey?: string | undefined;
385
+ uri?: string | undefined;
386
+ text?: string | undefined;
387
+ bytes?: number | undefined;
388
+ sha256?: string | undefined;
389
+ width?: number | undefined;
390
+ height?: number | undefined;
391
+ durationMs?: number | undefined;
392
+ description?: string | undefined;
393
+ at?: {
394
+ [x: string]: import("hono/utils/types").JSONValue;
395
+ step?: string | undefined;
396
+ offsetMs?: number | undefined;
397
+ } | undefined;
398
+ poster?: string | undefined;
399
+ captions?: string[] | undefined;
400
+ extensions?: {
401
+ [x: string]: import("hono/utils/types").JSONValue;
402
+ } | undefined;
403
+ }[] | undefined;
404
+ attempts?: {
405
+ [x: string]: import("hono/utils/types").JSONValue;
406
+ index: number;
407
+ status: "passed" | "failed" | "running" | "not-run";
408
+ durationMs?: number | undefined;
409
+ startedAtMs?: number | undefined;
410
+ detail?: string | undefined;
411
+ steps?: {
412
+ [x: string]: import("hono/utils/types").JSONValue;
413
+ name: string;
414
+ id?: string | undefined;
415
+ parentId?: string | undefined;
416
+ kind?: string | undefined;
417
+ status?: string | undefined;
418
+ offsetMs?: number | undefined;
419
+ durationMs?: number | undefined;
420
+ detail?: string | undefined;
421
+ attachments?: {
422
+ [x: string]: import("hono/utils/types").JSONValue;
423
+ name: string;
424
+ id?: string | undefined;
425
+ role?: string | undefined;
426
+ contentType?: string | undefined;
427
+ bundleKey?: string | undefined;
428
+ uri?: string | undefined;
429
+ text?: string | undefined;
430
+ bytes?: number | undefined;
431
+ sha256?: string | undefined;
432
+ width?: number | undefined;
433
+ height?: number | undefined;
434
+ durationMs?: number | undefined;
435
+ description?: string | undefined;
436
+ at?: {
437
+ [x: string]: import("hono/utils/types").JSONValue;
438
+ step?: string | undefined;
439
+ offsetMs?: number | undefined;
440
+ } | undefined;
441
+ poster?: string | undefined;
442
+ captions?: string[] | undefined;
443
+ extensions?: {
444
+ [x: string]: import("hono/utils/types").JSONValue;
445
+ } | undefined;
446
+ }[] | undefined;
447
+ annotations?: {
448
+ [x: string]: import("hono/utils/types").JSONValue;
449
+ type: string;
450
+ message: string;
451
+ level?: string | undefined;
452
+ at?: {
453
+ [x: string]: import("hono/utils/types").JSONValue;
454
+ step?: string | undefined;
455
+ offsetMs?: number | undefined;
456
+ } | undefined;
457
+ source?: {
458
+ [x: string]: import("hono/utils/types").JSONValue;
459
+ file?: string | undefined;
460
+ line?: number | undefined;
461
+ column?: number | undefined;
462
+ } | undefined;
463
+ links?: {
464
+ [x: string]: import("hono/utils/types").JSONValue;
465
+ url: string;
466
+ name?: string | undefined;
467
+ rel?: string | undefined;
468
+ }[] | undefined;
469
+ extensions?: {
470
+ [x: string]: import("hono/utils/types").JSONValue;
471
+ } | undefined;
472
+ }[] | undefined;
473
+ extensions?: {
474
+ [x: string]: import("hono/utils/types").JSONValue;
475
+ } | undefined;
476
+ }[] | undefined;
477
+ attachments?: {
478
+ [x: string]: import("hono/utils/types").JSONValue;
479
+ name: string;
480
+ id?: string | undefined;
481
+ role?: string | undefined;
482
+ contentType?: string | undefined;
483
+ bundleKey?: string | undefined;
484
+ uri?: string | undefined;
485
+ text?: string | undefined;
486
+ bytes?: number | undefined;
487
+ sha256?: string | undefined;
488
+ width?: number | undefined;
489
+ height?: number | undefined;
490
+ durationMs?: number | undefined;
491
+ description?: string | undefined;
492
+ at?: {
493
+ [x: string]: import("hono/utils/types").JSONValue;
494
+ step?: string | undefined;
495
+ offsetMs?: number | undefined;
496
+ } | undefined;
497
+ poster?: string | undefined;
498
+ captions?: string[] | undefined;
499
+ extensions?: {
500
+ [x: string]: import("hono/utils/types").JSONValue;
501
+ } | undefined;
502
+ }[] | undefined;
503
+ annotations?: {
504
+ [x: string]: import("hono/utils/types").JSONValue;
505
+ type: string;
506
+ message: string;
507
+ level?: string | undefined;
508
+ at?: {
509
+ [x: string]: import("hono/utils/types").JSONValue;
510
+ step?: string | undefined;
511
+ offsetMs?: number | undefined;
512
+ } | undefined;
513
+ source?: {
514
+ [x: string]: import("hono/utils/types").JSONValue;
515
+ file?: string | undefined;
516
+ line?: number | undefined;
517
+ column?: number | undefined;
518
+ } | undefined;
519
+ links?: {
520
+ [x: string]: import("hono/utils/types").JSONValue;
521
+ url: string;
522
+ name?: string | undefined;
523
+ rel?: string | undefined;
524
+ }[] | undefined;
525
+ extensions?: {
526
+ [x: string]: import("hono/utils/types").JSONValue;
527
+ } | undefined;
528
+ }[] | undefined;
529
+ extensions?: {
530
+ [x: string]: import("hono/utils/types").JSONValue;
531
+ } | undefined;
532
+ }[] | undefined;
533
+ steps?: {
534
+ [x: string]: import("hono/utils/types").JSONValue;
535
+ name: string;
536
+ id?: string | undefined;
537
+ parentId?: string | undefined;
538
+ kind?: string | undefined;
539
+ status?: string | undefined;
540
+ offsetMs?: number | undefined;
541
+ durationMs?: number | undefined;
542
+ detail?: string | undefined;
543
+ attachments?: {
544
+ [x: string]: import("hono/utils/types").JSONValue;
545
+ name: string;
546
+ id?: string | undefined;
547
+ role?: string | undefined;
548
+ contentType?: string | undefined;
549
+ bundleKey?: string | undefined;
550
+ uri?: string | undefined;
551
+ text?: string | undefined;
552
+ bytes?: number | undefined;
553
+ sha256?: string | undefined;
554
+ width?: number | undefined;
555
+ height?: number | undefined;
556
+ durationMs?: number | undefined;
557
+ description?: string | undefined;
558
+ at?: {
559
+ [x: string]: import("hono/utils/types").JSONValue;
560
+ step?: string | undefined;
561
+ offsetMs?: number | undefined;
562
+ } | undefined;
563
+ poster?: string | undefined;
564
+ captions?: string[] | undefined;
565
+ extensions?: {
566
+ [x: string]: import("hono/utils/types").JSONValue;
567
+ } | undefined;
568
+ }[] | undefined;
569
+ annotations?: {
570
+ [x: string]: import("hono/utils/types").JSONValue;
571
+ type: string;
572
+ message: string;
573
+ level?: string | undefined;
574
+ at?: {
575
+ [x: string]: import("hono/utils/types").JSONValue;
576
+ step?: string | undefined;
577
+ offsetMs?: number | undefined;
578
+ } | undefined;
579
+ source?: {
580
+ [x: string]: import("hono/utils/types").JSONValue;
581
+ file?: string | undefined;
582
+ line?: number | undefined;
583
+ column?: number | undefined;
584
+ } | undefined;
585
+ links?: {
586
+ [x: string]: import("hono/utils/types").JSONValue;
587
+ url: string;
588
+ name?: string | undefined;
589
+ rel?: string | undefined;
590
+ }[] | undefined;
591
+ extensions?: {
592
+ [x: string]: import("hono/utils/types").JSONValue;
593
+ } | undefined;
594
+ }[] | undefined;
595
+ extensions?: {
596
+ [x: string]: import("hono/utils/types").JSONValue;
597
+ } | undefined;
598
+ }[] | undefined;
599
+ extensions?: {
600
+ [x: string]: import("hono/utils/types").JSONValue;
601
+ } | undefined;
602
+ links?: {
603
+ [x: string]: import("hono/utils/types").JSONValue;
604
+ url: string;
605
+ name?: string | undefined;
606
+ rel?: string | undefined;
607
+ }[] | undefined;
608
+ annotations?: {
609
+ [x: string]: import("hono/utils/types").JSONValue;
610
+ type: string;
611
+ message: string;
612
+ level?: string | undefined;
613
+ at?: {
614
+ [x: string]: import("hono/utils/types").JSONValue;
615
+ step?: string | undefined;
616
+ offsetMs?: number | undefined;
617
+ } | undefined;
618
+ source?: {
619
+ [x: string]: import("hono/utils/types").JSONValue;
620
+ file?: string | undefined;
621
+ line?: number | undefined;
622
+ column?: number | undefined;
623
+ } | undefined;
624
+ links?: {
625
+ [x: string]: import("hono/utils/types").JSONValue;
626
+ url: string;
627
+ name?: string | undefined;
628
+ rel?: string | undefined;
629
+ }[] | undefined;
630
+ extensions?: {
631
+ [x: string]: import("hono/utils/types").JSONValue;
632
+ } | undefined;
633
+ }[] | undefined;
634
+ labels?: {
635
+ [x: string]: string;
636
+ } | undefined;
99
637
  readonly id: string;
100
638
  readonly title: string;
101
639
  readonly status: import('./explorer-types.js').EvidenceStatus;
@@ -107,6 +645,7 @@ export declare function createReportsApp(deps: ReportsAppDeps): import("hono/hon
107
645
  readonly unit: string;
108
646
  readonly limit?: number | undefined;
109
647
  }[];
648
+ readonly durationMs?: number | undefined;
110
649
  }[];
111
650
  }[];
112
651
  };
@@ -7,11 +7,11 @@ import { cors } from 'hono/cors';
7
7
  import { createReportsExplorerApp, } from './reports-explorer-route.js';
8
8
  import { reportsListRoute } from './reports-list-route.js';
9
9
  import { reportsSources, reportsStoreForCommit, reportsStoreForSource, } from './reports-store.js';
10
- /** Commits per page of `GET /reports`. */
10
+ /** Intended commits per page of the commit list. The list route currently pages by its own constant of the same value (30) and does not read this one. */
11
11
  export const REPORTS_PAGE_SIZE = 30;
12
- /** How often a running commit is re-listed for new sources. */
12
+ /** How often, in milliseconds, a running commit's event stream re-lists the store for new sources. */
13
13
  export const REPORTS_POLL_MS = 2_000;
14
- /** A running commit's stream ends after this long; the client reconnects. */
14
+ /** How long, in milliseconds, a running commit's event stream stays open before it ends; the client reconnects. */
15
15
  export const REPORTS_TAIL_MS = 5 * 60_000;
16
16
  const NO_STORE = { 'cache-control': 'no-store' };
17
17
  function eventStream(events) {
@@ -148,6 +148,14 @@ function testEventsRoute(deps) {
148
148
  return eventStream(testEvents(store, params));
149
149
  };
150
150
  }
151
+ /**
152
+ * Builds the complete reports app (layer routes, explorer routes and the commit-keyed routes). Read-only: nothing it
153
+ * serves can change a store. CORS reflects any caller's origin for GET, HEAD and OPTIONS.
154
+ *
155
+ * @example
156
+ * const app = createReportsApp({ store: null, backends: [{ id: 'ci', label: 'CI', store }], clock: { now: Date.now }, timers });
157
+ * const response = await app.request('/evidence');
158
+ */
151
159
  export function createReportsApp(deps) {
152
160
  return new Hono()
153
161
  .use('*', cors({ origin: (origin) => origin, allowMethods: ['GET', 'HEAD', 'OPTIONS'] }))