@crvouga/atlas 0.4.0 → 0.5.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 (379) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +178 -617
  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 +30 -1
  9. package/dist/core/src/config.d.ts +70 -4
  10. package/dist/core/src/config.js +62 -3
  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 +69 -16
  30. package/dist/core/src/run/execute.js +67 -16
  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 +83 -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 +52 -0
  120. package/dist/reports/src/http-store.js +145 -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 +364 -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/media-types.d.ts +11 -0
  147. package/dist/reports/src/media-types.js +22 -0
  148. package/dist/reports/src/namespace-guard.d.ts +10 -1
  149. package/dist/reports/src/namespace-guard.js +10 -1
  150. package/dist/reports/src/navigation.d.ts +12 -0
  151. package/dist/reports/src/navigation.js +7 -0
  152. package/dist/reports/src/object-io.d.ts +11 -4
  153. package/dist/reports/src/object-io.js +4 -4
  154. package/dist/reports/src/object-store-conformance.d.ts +27 -0
  155. package/dist/reports/src/object-store-conformance.js +87 -0
  156. package/dist/reports/src/object-store.d.ts +33 -24
  157. package/dist/reports/src/object-store.js +17 -24
  158. package/dist/reports/src/parse-with.d.ts +16 -0
  159. package/dist/reports/src/parse-with.js +14 -0
  160. package/dist/reports/src/performance-part.d.ts +25 -1
  161. package/dist/reports/src/performance-part.js +15 -1
  162. package/dist/reports/src/performance.d.ts +22 -2
  163. package/dist/reports/src/performance.js +12 -2
  164. package/dist/reports/src/persist.d.ts +12 -3
  165. package/dist/reports/src/persist.js +12 -3
  166. package/dist/reports/src/phone.d.ts +18 -1
  167. package/dist/reports/src/phone.js +18 -1
  168. package/dist/reports/src/protocol.d.ts +26 -4
  169. package/dist/reports/src/protocol.js +15 -4
  170. package/dist/reports/src/publication.d.ts +21 -1
  171. package/dist/reports/src/publication.js +21 -1
  172. package/dist/reports/src/publish-checks.d.ts +35 -0
  173. package/dist/reports/src/publish-checks.js +122 -0
  174. package/dist/reports/src/publish.d.ts +42 -9
  175. package/dist/reports/src/publish.js +36 -7
  176. package/dist/reports/src/read.d.ts +46 -16
  177. package/dist/reports/src/read.js +38 -14
  178. package/dist/reports/src/recording-bundle.d.ts +13 -2
  179. package/dist/reports/src/recording-bundle.js +4 -2
  180. package/dist/reports/src/recording-keys.d.ts +15 -1
  181. package/dist/reports/src/recording-keys.js +15 -1
  182. package/dist/reports/src/remote-report.d.ts +28 -7
  183. package/dist/reports/src/remote-report.js +15 -7
  184. package/dist/reports/src/report-cli.d.ts +51 -0
  185. package/dist/reports/src/report-cli.js +485 -0
  186. package/dist/reports/src/report-index.d.ts +99 -0
  187. package/dist/reports/src/report-index.js +337 -0
  188. package/dist/reports/src/report-loader.d.ts +10 -0
  189. package/dist/reports/src/report-loader.js +6 -0
  190. package/dist/reports/src/report-parts.d.ts +29 -3
  191. package/dist/reports/src/report-parts.js +37 -3
  192. package/dist/reports/src/report-status.d.ts +48 -0
  193. package/dist/reports/src/report-status.js +156 -0
  194. package/dist/reports/src/report-types.d.ts +73 -0
  195. package/dist/reports/src/report-types.js +3 -0
  196. package/dist/reports/src/reporter.d.ts +67 -0
  197. package/dist/reports/src/reporter.js +128 -0
  198. package/dist/reports/src/reports-explorer-route.d.ts +541 -0
  199. package/dist/reports/src/reports-explorer-route.js +11 -0
  200. package/dist/reports/src/reports-list-route.d.ts +9 -0
  201. package/dist/reports/src/reports-list-route.js +9 -0
  202. package/dist/reports/src/reports-route.d.ts +561 -22
  203. package/dist/reports/src/reports-route.js +11 -3
  204. package/dist/reports/src/reports-store.d.ts +19 -2
  205. package/dist/reports/src/reports-store.js +10 -2
  206. package/dist/reports/src/resilient-cache.d.ts +14 -1
  207. package/dist/reports/src/resilient-cache.js +8 -1
  208. package/dist/reports/src/retention.d.ts +17 -1
  209. package/dist/reports/src/retention.js +5 -1
  210. package/dist/reports/src/run-bundle.d.ts +63 -0
  211. package/dist/reports/src/run-bundle.js +159 -0
  212. package/dist/reports/src/s3-store.d.ts +79 -0
  213. package/dist/reports/src/s3-store.js +295 -0
  214. package/dist/reports/src/scenario.d.ts +14 -4
  215. package/dist/reports/src/scenario.js +5 -4
  216. package/dist/reports/src/sigv4.d.ts +72 -0
  217. package/dist/reports/src/sigv4.js +96 -0
  218. package/dist/reports/src/snapshot-bundle.d.ts +24 -1
  219. package/dist/reports/src/snapshot-bundle.js +27 -2
  220. package/dist/reports/src/snapshot-surface.d.ts +20 -9
  221. package/dist/reports/src/snapshot-surface.js +32 -19
  222. package/dist/reports/src/source-content.d.ts +23 -0
  223. package/dist/reports/src/source-content.js +30 -1
  224. package/dist/reports/src/source-entries.d.ts +13 -0
  225. package/dist/reports/src/source-entries.js +6 -0
  226. package/dist/reports/src/source-part.d.ts +15 -0
  227. package/dist/reports/src/source-part.js +8 -0
  228. package/dist/reports/src/source-reader.d.ts +11 -0
  229. package/dist/reports/src/source-reader.js +5 -0
  230. package/dist/reports/src/spec-evidence.d.ts +12 -2
  231. package/dist/reports/src/spec-evidence.js +6 -2
  232. package/dist/reports/src/spec-inventory.d.ts +15 -1
  233. package/dist/reports/src/spec-inventory.js +22 -1
  234. package/dist/reports/src/spec-link.d.ts +28 -0
  235. package/dist/reports/src/spec-link.js +70 -0
  236. package/dist/reports/src/spec-set.d.ts +63 -0
  237. package/dist/reports/src/spec-set.js +177 -0
  238. package/dist/reports/src/status.d.ts +10 -0
  239. package/dist/reports/src/status.js +5 -0
  240. package/dist/reports/src/store-prefix.d.ts +28 -0
  241. package/dist/reports/src/store-prefix.js +22 -0
  242. package/dist/reports/src/store-url.d.ts +89 -0
  243. package/dist/reports/src/store-url.js +160 -0
  244. package/dist/reports/src/test-catalog-entity.d.ts +11 -0
  245. package/dist/reports/src/test-catalog-entity.js +6 -0
  246. package/dist/reports/src/types.d.ts +6 -1
  247. package/dist/reports/src/use-report-nav.d.ts +35 -0
  248. package/dist/reports/src/use-report-nav.js +12 -0
  249. package/dist/schema/src/api.d.ts +799 -0
  250. package/dist/schema/src/api.js +201 -0
  251. package/dist/schema/src/cli-results.d.ts +210 -0
  252. package/dist/schema/src/cli-results.js +124 -0
  253. package/dist/schema/src/common.d.ts +53 -0
  254. package/dist/schema/src/common.js +42 -0
  255. package/dist/schema/src/index.d.ts +14 -0
  256. package/dist/schema/src/index.js +14 -0
  257. package/dist/schema/src/layer.d.ts +2273 -0
  258. package/dist/schema/src/layer.js +462 -0
  259. package/dist/schema/src/manifest.d.ts +95 -0
  260. package/dist/schema/src/manifest.js +84 -0
  261. package/dist/schema/src/report-sources.d.ts +28 -0
  262. package/dist/schema/src/report-sources.js +25 -0
  263. package/dist/schema/src/runs-index.d.ts +16 -0
  264. package/dist/schema/src/runs-index.js +15 -0
  265. package/dist/schema/src/server-config.d.ts +93 -0
  266. package/dist/schema/src/server-config.js +73 -0
  267. package/dist/schema/src/spec.d.ts +69 -0
  268. package/dist/schema/src/spec.js +58 -0
  269. package/dist/server/src/app.d.ts +62 -0
  270. package/dist/server/src/app.js +419 -0
  271. package/dist/server/src/auth.d.ts +41 -0
  272. package/dist/server/src/auth.js +59 -0
  273. package/dist/server/src/config.d.ts +83 -0
  274. package/dist/server/src/config.js +187 -0
  275. package/dist/server/src/dev.d.ts +12 -0
  276. package/dist/server/src/dev.js +80 -0
  277. package/dist/server/src/events.d.ts +29 -0
  278. package/dist/server/src/events.js +101 -0
  279. package/dist/server/src/host.d.ts +30 -0
  280. package/dist/server/src/host.js +115 -0
  281. package/dist/server/src/index.d.ts +16 -0
  282. package/dist/server/src/index.js +16 -0
  283. package/dist/server/src/llms.d.ts +19 -0
  284. package/dist/server/src/llms.js +63 -0
  285. package/dist/server/src/main.d.ts +30 -0
  286. package/dist/server/src/main.js +112 -0
  287. package/dist/server/src/openapi.d.ts +59 -0
  288. package/dist/server/src/openapi.js +374 -0
  289. package/dist/server/src/problem.d.ts +8 -0
  290. package/dist/server/src/problem.js +39 -0
  291. package/dist/server/src/site.d.ts +13 -0
  292. package/dist/server/src/site.js +43 -0
  293. package/dist/server/src/store-api.d.ts +28 -0
  294. package/dist/server/src/store-api.js +159 -0
  295. package/dist/server/src/validate.d.ts +71 -0
  296. package/dist/server/src/validate.js +197 -0
  297. package/dist/vitest/src/index.d.ts +27 -5
  298. package/dist/vitest/src/index.js +18 -5
  299. package/dist/webdriver/src/driver.d.ts +63 -11
  300. package/dist/webdriver/src/driver.js +57 -6
  301. package/dist/webdriver/src/index.d.ts +8 -0
  302. package/dist/webdriver/src/index.js +1 -0
  303. package/dist/webdriver/src/protocol.d.ts +75 -6
  304. package/dist/webdriver/src/protocol.js +79 -6
  305. package/docs/agents.md +137 -0
  306. package/docs/deploying.md +345 -0
  307. package/docs/dogfooding.md +175 -0
  308. package/docs/extending.md +242 -0
  309. package/docs/integrating.md +485 -0
  310. package/docs/reference/bun.md +141 -0
  311. package/docs/reference/cli.md +146 -0
  312. package/docs/reference/core.md +2426 -0
  313. package/docs/reference/detox.md +150 -0
  314. package/docs/reference/http-api.md +303 -0
  315. package/docs/reference/playwright.md +303 -0
  316. package/docs/reference/reports.md +7098 -0
  317. package/docs/reference/schema.md +1651 -0
  318. package/docs/reference/server.md +685 -0
  319. package/docs/reference/vitest.md +45 -0
  320. package/docs/reference/webdriver.md +330 -0
  321. package/docs/report-backends.md +144 -0
  322. package/docs/report-contract.md +400 -0
  323. package/docs/reporting-issues.md +160 -0
  324. package/docs/server.md +285 -0
  325. package/docs/statecharts.md +641 -0
  326. package/llms-full.txt +3506 -0
  327. package/llms.txt +47 -0
  328. package/package.json +32 -4
  329. package/packages/core/README.md +2 -1
  330. package/packages/reports/README.md +65 -0
  331. package/packages/reports/STORAGE.md +4 -0
  332. package/packages/schema/README.md +14 -0
  333. package/packages/schema/schemas/check-detail.schema.json +1032 -0
  334. package/packages/schema/schemas/checks-result.schema.json +26 -0
  335. package/packages/schema/schemas/command-error.schema.json +35 -0
  336. package/packages/schema/schemas/doctor-result.schema.json +60 -0
  337. package/packages/schema/schemas/effective-delta.schema.json +490 -0
  338. package/packages/schema/schemas/effective-evidence.schema.json +471 -0
  339. package/packages/schema/schemas/evidence-page.schema.json +271 -0
  340. package/packages/schema/schemas/hello-event.schema.json +22 -0
  341. package/packages/schema/schemas/init-plan.schema.json +347 -0
  342. package/packages/schema/schemas/layer-rows.schema.json +199 -0
  343. package/packages/schema/schemas/layer.schema.json +2888 -0
  344. package/packages/schema/schemas/merge-result.schema.json +40 -0
  345. package/packages/schema/schemas/outline.schema.json +62 -0
  346. package/packages/schema/schemas/problem.schema.json +37 -0
  347. package/packages/schema/schemas/publish-checks.schema.json +1413 -0
  348. package/packages/schema/schemas/publish-result.schema.json +168 -0
  349. package/packages/schema/schemas/ready.schema.json +68 -0
  350. package/packages/schema/schemas/report-event.schema.json +100 -0
  351. package/packages/schema/schemas/report-status.schema.json +370 -0
  352. package/packages/schema/schemas/server-config.schema.json +194 -0
  353. package/packages/schema/schemas/server-info.schema.json +114 -0
  354. package/packages/schema/schemas/spec-set.schema.json +103 -0
  355. package/packages/schema/schemas/store-listing.schema.json +29 -0
  356. package/packages/schema/schemas/store-write-result.schema.json +28 -0
  357. package/packages/schema/schemas/stream-result.schema.json +59 -0
  358. package/packages/server/README.md +43 -0
  359. package/packages/server/openapi.json +6699 -0
  360. package/packages/visualizer/README.md +21 -0
  361. package/packages/visualizer/src/app/AppShell.tsx +9 -2
  362. package/packages/visualizer/src/app/report-sources.tsx +6 -4
  363. package/packages/visualizer/src/app/router.tsx +3 -3
  364. package/packages/visualizer/src/components/Header.module.css +35 -0
  365. package/packages/visualizer/src/components/Header.tsx +40 -3
  366. package/packages/visualizer/src/data/adapters/adapter.ts +5 -17
  367. package/packages/visualizer/src/data/adapters/index.ts +10 -1
  368. package/packages/visualizer/src/evidence/api.ts +14 -2
  369. package/packages/visualizer/src/evidence/artifacts.module.css +213 -0
  370. package/packages/visualizer/src/evidence/artifacts.tsx +272 -0
  371. package/packages/visualizer/src/evidence/check-detail.tsx +3 -1
  372. package/packages/visualizer/src/evidence/evidence-context.tsx +74 -12
  373. package/packages/visualizer/src/evidence/spec-page.tsx +23 -16
  374. package/packages/visualizer/src/find/Finder.tsx +1 -7
  375. package/packages/visualizer/src/find/open.ts +4 -0
  376. package/packages/visualizer/src/live/live-stream.ts +204 -0
  377. package/packages/visualizer/src/runtime.ts +19 -0
  378. package/packages/visualizer/vite/atlas-server-proxy.ts +36 -0
  379. package/packages/visualizer/vite.config.ts +11 -3
@@ -0,0 +1,194 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/server-config.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "$schema": {
7
+ "type": "string"
8
+ },
9
+ "host": {
10
+ "description": "Where to listen. 127.0.0.1 keeps it on this machine; 0.0.0.0 is every interface and needs tokens (or `auth.insecure`)",
11
+ "default": "127.0.0.1",
12
+ "type": "string"
13
+ },
14
+ "port": {
15
+ "default": 8080,
16
+ "type": "integer",
17
+ "minimum": 0,
18
+ "maximum": 65535
19
+ },
20
+ "data": {
21
+ "description": "The folder that is the default backend and the default write target: layers, specs and runs live here",
22
+ "default": "./atlas-data",
23
+ "type": "string"
24
+ },
25
+ "backends": {
26
+ "description": "Further backends, read together with the data folder: S3, another server, a device lab",
27
+ "default": [],
28
+ "type": "array",
29
+ "items": {
30
+ "type": "object",
31
+ "properties": {
32
+ "id": {
33
+ "description": "Lowercase letters, digits and hyphens. Names where a result came from",
34
+ "type": "string",
35
+ "pattern": "^[a-z0-9-]+$"
36
+ },
37
+ "label": {
38
+ "type": "string"
39
+ },
40
+ "url": {
41
+ "description": "A folder, s3://bucket/prefix, r2://, gs://, or another Atlas server (https://…)",
42
+ "type": "string",
43
+ "minLength": 1
44
+ },
45
+ "write": {
46
+ "description": "Uploads go here instead of the data folder. At most one backend is the write target",
47
+ "type": "boolean"
48
+ }
49
+ },
50
+ "required": [
51
+ "id",
52
+ "url"
53
+ ],
54
+ "additionalProperties": false
55
+ }
56
+ },
57
+ "write": {
58
+ "description": "The id of the backend uploads go to. Default: the data folder",
59
+ "type": "string"
60
+ },
61
+ "auth": {
62
+ "default": {
63
+ "tokens": [],
64
+ "anonymousRead": false,
65
+ "insecure": false
66
+ },
67
+ "type": "object",
68
+ "properties": {
69
+ "tokens": {
70
+ "default": [],
71
+ "type": "array",
72
+ "items": {
73
+ "type": "object",
74
+ "properties": {
75
+ "name": {
76
+ "description": "Shown in logs, never the token itself",
77
+ "type": "string",
78
+ "minLength": 1
79
+ },
80
+ "role": {
81
+ "description": "`read` may look. `publish` may also upload. `admin` may also remove scratch objects",
82
+ "type": "string",
83
+ "enum": [
84
+ "read",
85
+ "publish",
86
+ "admin"
87
+ ]
88
+ },
89
+ "token": {
90
+ "description": "The token. Prefer `tokenEnv`, so the file holds no secret",
91
+ "type": "string",
92
+ "minLength": 12
93
+ },
94
+ "tokenEnv": {
95
+ "description": "The name of the environment variable that holds the token",
96
+ "type": "string"
97
+ }
98
+ },
99
+ "required": [
100
+ "name",
101
+ "role"
102
+ ],
103
+ "additionalProperties": false
104
+ }
105
+ },
106
+ "anonymousRead": {
107
+ "description": "Let anyone look without a token. Uploading still needs one",
108
+ "default": false,
109
+ "type": "boolean"
110
+ },
111
+ "insecure": {
112
+ "description": "Allow listening on every interface with no tokens at all",
113
+ "default": false,
114
+ "type": "boolean"
115
+ }
116
+ },
117
+ "additionalProperties": false
118
+ },
119
+ "site": {
120
+ "description": "The built viewer. Default: the one shipped with Atlas, built on first start",
121
+ "type": "string"
122
+ },
123
+ "outlineBranch": {
124
+ "description": "Which branch's specs the report is laid over. Default main, then master, then the newest",
125
+ "type": "string"
126
+ },
127
+ "include": {
128
+ "default": {},
129
+ "type": "object",
130
+ "properties": {
131
+ "branches": {
132
+ "description": "Only layers recorded on these branches take part",
133
+ "type": "array",
134
+ "items": {
135
+ "type": "string"
136
+ }
137
+ },
138
+ "ignoreModified": {
139
+ "description": "Leave out layers from modified checkouts and unknown origins",
140
+ "type": "boolean"
141
+ }
142
+ },
143
+ "additionalProperties": false
144
+ },
145
+ "refreshSeconds": {
146
+ "description": "How often the backends are looked at for layers written by something other than this server",
147
+ "default": 10,
148
+ "type": "number",
149
+ "minimum": 1
150
+ },
151
+ "limits": {
152
+ "default": {
153
+ "maxObjectMiB": 256,
154
+ "maxJsonMiB": 32,
155
+ "maxStreams": 500
156
+ },
157
+ "type": "object",
158
+ "properties": {
159
+ "maxObjectMiB": {
160
+ "description": "The largest object an upload may be",
161
+ "default": 256,
162
+ "type": "number",
163
+ "exclusiveMinimum": 0
164
+ },
165
+ "maxJsonMiB": {
166
+ "description": "The largest JSON body (a manifest, a checks request)",
167
+ "default": 32,
168
+ "type": "number",
169
+ "exclusiveMinimum": 0
170
+ },
171
+ "maxStreams": {
172
+ "description": "Viewers that may be connected for live updates at once",
173
+ "default": 500,
174
+ "type": "integer",
175
+ "exclusiveMinimum": 0,
176
+ "maximum": 9007199254740991
177
+ }
178
+ },
179
+ "additionalProperties": false
180
+ },
181
+ "heartbeatSeconds": {
182
+ "description": "How often a live connection is touched, so proxies keep it open",
183
+ "default": 15,
184
+ "type": "number",
185
+ "minimum": 1
186
+ },
187
+ "log": {
188
+ "description": "One JSON line per request",
189
+ "default": true,
190
+ "type": "boolean"
191
+ }
192
+ },
193
+ "additionalProperties": false
194
+ }
@@ -0,0 +1,114 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/server-info.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "const": "atlas"
9
+ },
10
+ "version": {
11
+ "description": "The @crvouga/atlas version the server runs, or null when it does not know",
12
+ "anyOf": [
13
+ {
14
+ "type": "string"
15
+ },
16
+ {
17
+ "type": "null"
18
+ }
19
+ ]
20
+ },
21
+ "role": {
22
+ "description": "What the token of this request may do. A server with no tokens treats everyone as admin",
23
+ "type": "string",
24
+ "enum": [
25
+ "read",
26
+ "publish",
27
+ "admin"
28
+ ]
29
+ },
30
+ "open": {
31
+ "description": "True when the server has no tokens at all",
32
+ "type": "boolean"
33
+ },
34
+ "write": {
35
+ "description": "The id of the backend uploads go to",
36
+ "type": "string"
37
+ },
38
+ "ready": {
39
+ "type": "boolean"
40
+ },
41
+ "viewers": {
42
+ "description": "Viewers connected to /api/events right now",
43
+ "type": "integer",
44
+ "minimum": 0,
45
+ "maximum": 9007199254740991
46
+ },
47
+ "time": {
48
+ "description": "The server clock, epoch milliseconds",
49
+ "type": "number"
50
+ },
51
+ "backends": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "object",
55
+ "properties": {
56
+ "id": {
57
+ "type": "string"
58
+ },
59
+ "label": {
60
+ "type": "string"
61
+ },
62
+ "available": {
63
+ "type": "boolean"
64
+ },
65
+ "write": {
66
+ "type": "boolean"
67
+ }
68
+ },
69
+ "required": [
70
+ "id",
71
+ "label",
72
+ "available",
73
+ "write"
74
+ ],
75
+ "additionalProperties": {}
76
+ }
77
+ },
78
+ "layers": {
79
+ "type": "integer",
80
+ "minimum": 0,
81
+ "maximum": 9007199254740991
82
+ },
83
+ "slots": {
84
+ "type": "integer",
85
+ "minimum": 0,
86
+ "maximum": 9007199254740991
87
+ },
88
+ "capabilities": {
89
+ "description": "Features this server has, by name: `events`, `ingest`, `store`, `checks`, `status`, `effective`. A client checks a name before using what it names",
90
+ "type": "object",
91
+ "propertyNames": {
92
+ "type": "string"
93
+ },
94
+ "additionalProperties": {
95
+ "type": "boolean"
96
+ }
97
+ }
98
+ },
99
+ "required": [
100
+ "name",
101
+ "version",
102
+ "role",
103
+ "open",
104
+ "write",
105
+ "ready",
106
+ "viewers",
107
+ "time",
108
+ "backends",
109
+ "layers",
110
+ "slots",
111
+ "capabilities"
112
+ ],
113
+ "additionalProperties": {}
114
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/spec-set.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "schemaVersion": {
7
+ "type": "number",
8
+ "const": 1
9
+ },
10
+ "id": {
11
+ "description": "SHA-256 of the branch, commit, freshness and the digest of every file: the same specs from the same commit are the same set",
12
+ "type": "string",
13
+ "pattern": "^[0-9a-f]{64}$"
14
+ },
15
+ "branch": {
16
+ "anyOf": [
17
+ {
18
+ "type": "string"
19
+ },
20
+ {
21
+ "type": "null"
22
+ }
23
+ ]
24
+ },
25
+ "sha": {
26
+ "anyOf": [
27
+ {
28
+ "type": "string"
29
+ },
30
+ {
31
+ "type": "null"
32
+ }
33
+ ]
34
+ },
35
+ "recordedAtMs": {
36
+ "description": "For a clean checkout, the commit time; for a modified one, when it was published",
37
+ "type": "number",
38
+ "minimum": 0
39
+ },
40
+ "freshness": {
41
+ "type": "string",
42
+ "enum": [
43
+ "unknown",
44
+ "modified"
45
+ ]
46
+ },
47
+ "files": {
48
+ "type": "array",
49
+ "items": {
50
+ "type": "object",
51
+ "properties": {
52
+ "path": {
53
+ "description": "`specs/<path inside the specs directory>`, the name a check uses in `specPath`",
54
+ "type": "string",
55
+ "minLength": 1
56
+ },
57
+ "digest": {
58
+ "description": "SHA-256 of the file. Its text is at layers/specs/blobs/<digest>.txt",
59
+ "type": "string",
60
+ "pattern": "^[0-9a-f]{64}$"
61
+ },
62
+ "fingerprint": {
63
+ "description": "The advisory fingerprint layers record, to warn when a spec changed since they ran",
64
+ "type": "string"
65
+ },
66
+ "kind": {
67
+ "type": "string"
68
+ },
69
+ "title": {
70
+ "type": "string"
71
+ },
72
+ "domain": {
73
+ "type": "string"
74
+ },
75
+ "bytes": {
76
+ "type": "integer",
77
+ "minimum": 0,
78
+ "maximum": 9007199254740991
79
+ }
80
+ },
81
+ "required": [
82
+ "path",
83
+ "digest",
84
+ "fingerprint",
85
+ "kind",
86
+ "title",
87
+ "domain",
88
+ "bytes"
89
+ ],
90
+ "additionalProperties": {}
91
+ }
92
+ }
93
+ },
94
+ "required": [
95
+ "schemaVersion",
96
+ "id",
97
+ "branch",
98
+ "sha",
99
+ "recordedAtMs",
100
+ "files"
101
+ ],
102
+ "additionalProperties": {}
103
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/store-listing.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "keys": {
7
+ "type": "array",
8
+ "items": {
9
+ "type": "string"
10
+ }
11
+ },
12
+ "next": {
13
+ "description": "Pass as `?after=` for the next page; null when there are no more",
14
+ "anyOf": [
15
+ {
16
+ "type": "string"
17
+ },
18
+ {
19
+ "type": "null"
20
+ }
21
+ ]
22
+ }
23
+ },
24
+ "required": [
25
+ "keys",
26
+ "next"
27
+ ],
28
+ "additionalProperties": {}
29
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/store-write-result.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "ok": {
7
+ "type": "boolean",
8
+ "const": true
9
+ },
10
+ "key": {
11
+ "type": "string"
12
+ },
13
+ "kind": {
14
+ "description": "What the server recognised the key as: `layer`, `layer-catalog`, `blob`, `spec-body`, `spec-set`, `spec-catalog`, `run-manifest`, `run-catalog`, `run-file` or `scratch`",
15
+ "type": "string"
16
+ },
17
+ "created": {
18
+ "type": "boolean"
19
+ }
20
+ },
21
+ "required": [
22
+ "ok",
23
+ "key",
24
+ "kind",
25
+ "created"
26
+ ],
27
+ "additionalProperties": {}
28
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/stream-result.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "ok": {
7
+ "description": "False when any check could not be sent (the exit code is then 1)",
8
+ "type": "boolean"
9
+ },
10
+ "producer": {
11
+ "type": "string"
12
+ },
13
+ "environment": {
14
+ "anyOf": [
15
+ {
16
+ "type": "string"
17
+ },
18
+ {
19
+ "type": "null"
20
+ }
21
+ ]
22
+ },
23
+ "layers": {
24
+ "description": "Layers that arrived",
25
+ "type": "integer",
26
+ "minimum": 0,
27
+ "maximum": 9007199254740991
28
+ },
29
+ "checks": {
30
+ "description": "Checks that arrived",
31
+ "type": "integer",
32
+ "minimum": 0,
33
+ "maximum": 9007199254740991
34
+ },
35
+ "lost": {
36
+ "description": "Checks that never arrived",
37
+ "type": "integer",
38
+ "minimum": 0,
39
+ "maximum": 9007199254740991
40
+ },
41
+ "warnings": {
42
+ "description": "Input lines that were skipped, and sends that failed",
43
+ "type": "array",
44
+ "items": {
45
+ "type": "string"
46
+ }
47
+ }
48
+ },
49
+ "required": [
50
+ "ok",
51
+ "producer",
52
+ "environment",
53
+ "layers",
54
+ "checks",
55
+ "lost",
56
+ "warnings"
57
+ ],
58
+ "additionalProperties": {}
59
+ }
@@ -0,0 +1,43 @@
1
+ # `@crvouga/atlas/server`
2
+
3
+ The Atlas server: one process per project that takes in results from every environment, keeps them, and shows
4
+ everyone the combined report, live. A Bun API that serves the Vite-built viewer from the same host (and, under
5
+ `atlas dev`, the viewer's dev server proxies `/api` to it, so development is one host too).
6
+
7
+ Use it from the command line: `atlas serve`, `atlas dev` ([the guide](../../docs/server.md)). Use it from code when
8
+ you want the server inside something else:
9
+
10
+ ```ts
11
+ import { createAtlasServer } from '@crvouga/atlas/server';
12
+ import { listen } from '@crvouga/atlas/server';
13
+ import { directoryStore } from '@crvouga/atlas/reports/directory-store';
14
+
15
+ const server = createAtlasServer({
16
+ backends: [{ id: 'data', store: directoryStore('./atlas-data') }],
17
+ write: 'data', // where uploads go
18
+ tokens: [{ name: 'ci', role: 'publish', token: process.env.ATLAS_PUBLISH_TOKEN! }],
19
+ site: './atlas-site' // the built viewer; without it only the API is served
20
+ });
21
+ const running = await listen(server.fetch, { port: 8080, host: '127.0.0.1', maxBodyBytes: 256 * 1024 * 1024 });
22
+ await server.ready; // the first pass over the backends is done
23
+ ```
24
+
25
+ `server.fetch` is a plain `(Request) => Promise<Response>`, so it also mounts in Hono, Express (through an adapter),
26
+ Cloudflare-style runtimes and tests. `server.index` is the live report (`ReportIndex`), `server.events` the stream
27
+ to viewers, `server.close()` stops both.
28
+
29
+ | Module | What |
30
+ | --- | --- |
31
+ | `app` | `createAtlasServer(options)`: the routes, the live report, compression and the page. |
32
+ | `host` | `listen(handler, { port, host, maxBodyBytes })`: `Bun.serve`, or `node:http` where there is no Bun. |
33
+ | `store-api`, `validate` | The upload protocol and what it refuses (content-addressed layers, dependency order, immutability). |
34
+ | `events` | `EventHub`: server-sent events to every viewer, with a heartbeat and a backlog limit. |
35
+ | `auth` | Roles (`read`, `publish`, `admin`), Bearer tokens, constant-time comparison. |
36
+ | `config` | `loadServerConfig`: the file, then the environment, then the flags; every mistake said in words. |
37
+ | `main`, `dev` | `atlas serve` and `atlas dev`. |
38
+
39
+ The server describes itself: `GET /api/openapi.json` is an OpenAPI 3.1 document of every route (also `@crvouga/atlas/openapi.json`),
40
+ `GET /llms.txt` a guide for an agent given only the address, and every error is an RFC 9457 problem document. See
41
+ [Atlas for AI agents](../../docs/agents.md) and the [generated reference](../../docs/reference/server.md).
42
+
43
+ `bun packages/server/bench/bench.ts [layers] [checks]` measures the server on a long history.