@treeseed/sdk 0.11.0 → 0.12.4

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 (473) hide show
  1. package/README.md +9 -4
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +117 -60
  27. package/dist/capacity-provider.js +215 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +2 -2
  36. package/dist/copilot.d.ts +3 -0
  37. package/dist/copilot.js +16 -1
  38. package/dist/d1-http.d.ts +1 -1
  39. package/dist/d1-store.d.ts +32 -57
  40. package/dist/d1-store.js +115 -318
  41. package/dist/db/d1.d.ts +1 -232
  42. package/dist/db/index.d.ts +3 -3
  43. package/dist/db/market-schema.d.ts +49037 -11843
  44. package/dist/db/market-schema.js +1788 -50
  45. package/dist/db/node-sqlite.d.ts +1 -232
  46. package/dist/db/schema.d.ts +0 -462
  47. package/dist/db/schema.js +2 -22
  48. package/dist/dispatch.d.ts +1 -1
  49. package/dist/dispatch.js +0 -11
  50. package/dist/fixture-support.js +52 -4
  51. package/dist/governance.d.ts +133 -0
  52. package/dist/governance.js +285 -0
  53. package/dist/graph/build.d.ts +2 -2
  54. package/dist/graph/context-query-contracts.d.ts +1 -1
  55. package/dist/graph/dsl.d.ts +1 -1
  56. package/dist/graph/query.d.ts +4 -4
  57. package/dist/graph/ranking.d.ts +1 -1
  58. package/dist/graph/schema.d.ts +1 -1
  59. package/dist/graph.d.ts +11 -11
  60. package/dist/guarantees/index.d.ts +425 -0
  61. package/dist/guarantees/index.js +1146 -0
  62. package/dist/hosting/apps.d.ts +1 -1
  63. package/dist/hosting/builtins.d.ts +1 -1
  64. package/dist/hosting/builtins.js +9 -198
  65. package/dist/hosting/contracts.d.ts +3 -2
  66. package/dist/hosting/graph.d.ts +24 -21
  67. package/dist/hosting/graph.js +280 -294
  68. package/dist/hosting/index.d.ts +4 -4
  69. package/dist/index.d.ts +88 -74
  70. package/dist/index.js +81 -10
  71. package/dist/local-dev/managed-dev.d.ts +85 -0
  72. package/dist/local-dev/managed-dev.js +368 -0
  73. package/dist/managed-dependencies.d.ts +9 -0
  74. package/dist/managed-dependencies.js +10 -8
  75. package/dist/market-client.d.ts +265 -7
  76. package/dist/market-client.js +381 -9
  77. package/dist/model-registry.d.ts +1 -1
  78. package/dist/model-registry.js +19 -19
  79. package/dist/operations/agent-tools.d.ts +2 -11
  80. package/dist/operations/agent-tools.js +2 -14
  81. package/dist/operations/providers/default.d.ts +1 -1
  82. package/dist/operations/providers/default.js +20 -37
  83. package/dist/operations/repository-operations.d.ts +26 -2
  84. package/dist/operations/repository-operations.js +159 -1
  85. package/dist/operations/runtime.d.ts +3 -3
  86. package/dist/operations/services/bootstrap-runner.d.ts +1 -1
  87. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  88. package/dist/operations/services/build-warning-policy.js +81 -82
  89. package/dist/operations/services/commit-message-provider.js +4 -4
  90. package/dist/operations/services/config-runtime.d.ts +73 -19
  91. package/dist/operations/services/config-runtime.js +276 -100
  92. package/dist/operations/services/deploy.d.ts +41 -622
  93. package/dist/operations/services/deploy.js +181 -213
  94. package/dist/operations/services/deployment-readiness.d.ts +1 -1
  95. package/dist/operations/services/deployment-readiness.js +38 -7
  96. package/dist/operations/services/git-remote-policy.js +12 -4
  97. package/dist/operations/services/git-runner.d.ts +66 -0
  98. package/dist/operations/services/git-runner.js +479 -0
  99. package/dist/operations/services/git-workflow.d.ts +43 -5
  100. package/dist/operations/services/git-workflow.js +242 -20
  101. package/dist/operations/services/github-actions-verification.d.ts +3 -1
  102. package/dist/operations/services/github-actions-verification.js +11 -3
  103. package/dist/operations/services/github-api.js +21 -5
  104. package/dist/operations/services/github-automation.d.ts +3 -3
  105. package/dist/operations/services/github-automation.js +15 -18
  106. package/dist/operations/services/github-credentials.js +2 -1
  107. package/dist/operations/services/hosted-service-checks.d.ts +19 -1
  108. package/dist/operations/services/hosted-service-checks.js +162 -11
  109. package/dist/operations/services/hosting-audit.d.ts +2 -2
  110. package/dist/operations/services/hosting-audit.js +7 -7
  111. package/dist/operations/services/hub-launch.d.ts +1 -1
  112. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  113. package/dist/operations/services/hub-provider-launch.js +19 -14
  114. package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
  115. package/dist/operations/services/live-hosted-service-checks.js +193 -80
  116. package/dist/operations/services/local-dev.js +0 -1
  117. package/dist/operations/services/managed-host-security.d.ts +1 -1
  118. package/dist/operations/services/managed-repositories.d.ts +37 -0
  119. package/dist/operations/services/managed-repositories.js +177 -0
  120. package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
  121. package/dist/operations/services/operations-runner-smoke.js +22 -4
  122. package/dist/operations/services/package-adapters.d.ts +77 -2
  123. package/dist/operations/services/package-adapters.js +627 -56
  124. package/dist/operations/services/package-reference-policy.d.ts +12 -88
  125. package/dist/operations/services/package-reference-policy.js +81 -213
  126. package/dist/operations/services/project-host-operations.d.ts +4 -4
  127. package/dist/operations/services/project-platform.d.ts +19 -193
  128. package/dist/operations/services/project-platform.js +31 -103
  129. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  130. package/dist/operations/services/project-web-monitor.js +97 -2
  131. package/dist/operations/services/railway-api.d.ts +36 -7
  132. package/dist/operations/services/railway-api.js +331 -100
  133. package/dist/operations/services/railway-deploy.d.ts +7 -95
  134. package/dist/operations/services/railway-deploy.js +334 -742
  135. package/dist/operations/services/release-history.js +3 -4
  136. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  137. package/dist/operations/services/release-proof-ledger.js +81 -0
  138. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  139. package/dist/operations/services/release-proof-planner.js +195 -0
  140. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  141. package/dist/operations/services/release-proof-runner.js +169 -0
  142. package/dist/operations/services/release-proof.d.ts +81 -0
  143. package/dist/operations/services/release-proof.js +79 -0
  144. package/dist/operations/services/repository-save-orchestrator.d.ts +6 -7
  145. package/dist/operations/services/repository-save-orchestrator.js +353 -174
  146. package/dist/operations/services/runtime-paths.d.ts +1 -3
  147. package/dist/operations/services/runtime-paths.js +0 -4
  148. package/dist/operations/services/runtime-tools.d.ts +1 -192
  149. package/dist/operations/services/runtime-tools.js +4 -444
  150. package/dist/operations/services/save-deploy-preflight.js +9 -1
  151. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  152. package/dist/operations/services/template-host-bindings.js +3 -2
  153. package/dist/operations/services/template-registry.d.ts +6 -6
  154. package/dist/operations/services/template-registry.js +33 -14
  155. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  156. package/dist/operations/services/workflow-timing.d.ts +25 -0
  157. package/dist/operations/services/workflow-timing.js +79 -0
  158. package/dist/operations/services/workspace-dependency-mode.js +41 -4
  159. package/dist/operations/services/workspace-preflight.js +8 -8
  160. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  161. package/dist/operations/services/workspace-save.d.ts +1 -0
  162. package/dist/operations/services/workspace-save.js +41 -18
  163. package/dist/operations/services/workspace-tools.js +40 -6
  164. package/dist/operations-registry.d.ts +1 -1
  165. package/dist/operations-registry.js +5 -6
  166. package/dist/operations-types.d.ts +1 -1
  167. package/dist/operations.d.ts +17 -11
  168. package/dist/operations.js +57 -3
  169. package/dist/platform/book-export.js +2 -0
  170. package/dist/platform/books-data.d.ts +1 -1
  171. package/dist/platform/config.d.ts +27 -0
  172. package/dist/platform/config.js +100 -0
  173. package/dist/platform/content-runtime-source.d.ts +54 -0
  174. package/dist/platform/content-runtime-source.js +169 -0
  175. package/dist/platform/contracts.d.ts +6 -1
  176. package/dist/platform/deploy-config.d.ts +1 -1
  177. package/dist/platform/deploy-config.js +7 -1
  178. package/dist/platform/deploy-runtime.d.ts +1 -1
  179. package/dist/platform/desired-state.d.ts +63 -0
  180. package/dist/platform/desired-state.js +1021 -0
  181. package/dist/platform/env.yaml +414 -19
  182. package/dist/platform/environment.d.ts +2 -2
  183. package/dist/platform/environment.js +54 -22
  184. package/dist/platform/local-content-materialization.d.ts +9 -0
  185. package/dist/platform/local-content-materialization.js +212 -0
  186. package/dist/platform/plugin.d.ts +5 -5
  187. package/dist/platform/plugins/runtime.d.ts +3 -3
  188. package/dist/platform/plugins/runtime.js +62 -1
  189. package/dist/platform/plugins.d.ts +6 -6
  190. package/dist/platform/published-content-pipeline.d.ts +3 -3
  191. package/dist/platform/published-content-pipeline.js +5 -1
  192. package/dist/platform/published-content.d.ts +4 -3
  193. package/dist/platform/site-config-schema.d.ts +1 -0
  194. package/dist/platform/site-config-schema.js +4 -1
  195. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  196. package/dist/platform/tenant-config.d.ts +1 -1
  197. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  198. package/dist/platform/utils/site-config-schema.js +400 -461
  199. package/dist/platform-operation-store.d.ts +1 -1
  200. package/dist/plugin-default.d.ts +1 -1
  201. package/dist/plugin-default.js +27 -12
  202. package/dist/project-import.d.ts +91 -0
  203. package/dist/project-import.js +257 -0
  204. package/dist/project-workflow.d.ts +1 -1
  205. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  206. package/dist/reconcile/bootstrap-systems.js +3 -3
  207. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  208. package/dist/reconcile/builtin-adapters.js +2924 -346
  209. package/dist/reconcile/contracts.d.ts +15 -2
  210. package/dist/reconcile/desired-state.d.ts +2 -193
  211. package/dist/reconcile/desired-state.js +24 -33
  212. package/dist/reconcile/engine.d.ts +60 -397
  213. package/dist/reconcile/engine.js +182 -18
  214. package/dist/reconcile/index.d.ts +10 -10
  215. package/dist/reconcile/live-acceptance.d.ts +22 -1
  216. package/dist/reconcile/live-acceptance.js +456 -44
  217. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  218. package/dist/reconcile/providers/docker-private.js +101 -0
  219. package/dist/reconcile/providers/github-private.d.ts +65 -0
  220. package/dist/reconcile/providers/github-private.js +119 -0
  221. package/dist/reconcile/providers/local-private.d.ts +28 -0
  222. package/dist/reconcile/providers/local-private.js +75 -0
  223. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  224. package/dist/reconcile/providers/railway-iac.js +275 -0
  225. package/dist/reconcile/providers/release-private.d.ts +92 -0
  226. package/dist/reconcile/providers/release-private.js +152 -0
  227. package/dist/reconcile/registry.d.ts +2 -2
  228. package/dist/reconcile/registry.js +16 -1
  229. package/dist/reconcile/state.d.ts +1 -1
  230. package/dist/reconcile/state.js +3 -40
  231. package/dist/reconcile/units.d.ts +1 -1
  232. package/dist/reconcile/units.js +7 -1
  233. package/dist/remote.d.ts +6 -6
  234. package/dist/scenes/artifacts.d.ts +16 -0
  235. package/dist/scenes/artifacts.js +61 -0
  236. package/dist/scenes/auth.d.ts +2 -0
  237. package/dist/scenes/auth.js +28 -0
  238. package/dist/scenes/base-url.d.ts +12 -0
  239. package/dist/scenes/base-url.js +123 -0
  240. package/dist/scenes/builtin-plugins.d.ts +2 -0
  241. package/dist/scenes/builtin-plugins.js +447 -0
  242. package/dist/scenes/checkpoints.d.ts +14 -0
  243. package/dist/scenes/checkpoints.js +33 -0
  244. package/dist/scenes/device-matrix.d.ts +2 -0
  245. package/dist/scenes/device-matrix.js +97 -0
  246. package/dist/scenes/devices.d.ts +11 -0
  247. package/dist/scenes/devices.js +22 -0
  248. package/dist/scenes/diagnostics.d.ts +5 -0
  249. package/dist/scenes/diagnostics.js +22 -0
  250. package/dist/scenes/diagram-providers.d.ts +2 -0
  251. package/dist/scenes/diagram-providers.js +181 -0
  252. package/dist/scenes/diagram-validation.d.ts +22 -0
  253. package/dist/scenes/diagram-validation.js +74 -0
  254. package/dist/scenes/environment.d.ts +2 -0
  255. package/dist/scenes/environment.js +65 -0
  256. package/dist/scenes/evidence-bundle.d.ts +5 -0
  257. package/dist/scenes/evidence-bundle.js +42 -0
  258. package/dist/scenes/evidence-report.d.ts +10 -0
  259. package/dist/scenes/evidence-report.js +73 -0
  260. package/dist/scenes/evidence.d.ts +16 -0
  261. package/dist/scenes/evidence.js +277 -0
  262. package/dist/scenes/index.d.ts +48 -0
  263. package/dist/scenes/index.js +312 -0
  264. package/dist/scenes/inspect.d.ts +9 -0
  265. package/dist/scenes/inspect.js +64 -0
  266. package/dist/scenes/loader.d.ts +3 -0
  267. package/dist/scenes/loader.js +38 -0
  268. package/dist/scenes/logs.d.ts +2 -0
  269. package/dist/scenes/logs.js +47 -0
  270. package/dist/scenes/operations.d.ts +3 -0
  271. package/dist/scenes/operations.js +128 -0
  272. package/dist/scenes/phase0.d.ts +9 -0
  273. package/dist/scenes/phase0.js +637 -0
  274. package/dist/scenes/planner.d.ts +12 -0
  275. package/dist/scenes/planner.js +166 -0
  276. package/dist/scenes/playwright-adapter.d.ts +2 -0
  277. package/dist/scenes/playwright-adapter.js +63 -0
  278. package/dist/scenes/plugins.d.ts +5 -0
  279. package/dist/scenes/plugins.js +115 -0
  280. package/dist/scenes/progress.d.ts +17 -0
  281. package/dist/scenes/progress.js +24 -0
  282. package/dist/scenes/publish-destinations.d.ts +12 -0
  283. package/dist/scenes/publish-destinations.js +99 -0
  284. package/dist/scenes/publish-plan-report.d.ts +10 -0
  285. package/dist/scenes/publish-plan-report.js +70 -0
  286. package/dist/scenes/publish-plan.d.ts +15 -0
  287. package/dist/scenes/publish-plan.js +248 -0
  288. package/dist/scenes/publish-redaction.d.ts +16 -0
  289. package/dist/scenes/publish-redaction.js +148 -0
  290. package/dist/scenes/publish-release-record.d.ts +13 -0
  291. package/dist/scenes/publish-release-record.js +34 -0
  292. package/dist/scenes/publish-report.d.ts +10 -0
  293. package/dist/scenes/publish-report.js +67 -0
  294. package/dist/scenes/publish.d.ts +16 -0
  295. package/dist/scenes/publish.js +298 -0
  296. package/dist/scenes/registry.d.ts +12 -0
  297. package/dist/scenes/registry.js +65 -0
  298. package/dist/scenes/remotion-adapter.d.ts +3 -0
  299. package/dist/scenes/remotion-adapter.js +94 -0
  300. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  301. package/dist/scenes/remotion-composition-registry.js +12 -0
  302. package/dist/scenes/remotion-compositions.d.ts +15 -0
  303. package/dist/scenes/remotion-compositions.js +464 -0
  304. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  305. package/dist/scenes/remotion-diagrams.js +188 -0
  306. package/dist/scenes/remotion-input.d.ts +13 -0
  307. package/dist/scenes/remotion-input.js +291 -0
  308. package/dist/scenes/remotion-visuals.d.ts +29 -0
  309. package/dist/scenes/remotion-visuals.js +198 -0
  310. package/dist/scenes/render-media-assets.d.ts +9 -0
  311. package/dist/scenes/render-media-assets.js +117 -0
  312. package/dist/scenes/render-report.d.ts +10 -0
  313. package/dist/scenes/render-report.js +27 -0
  314. package/dist/scenes/render.d.ts +2 -0
  315. package/dist/scenes/render.js +218 -0
  316. package/dist/scenes/reporter.d.ts +3 -0
  317. package/dist/scenes/reporter.js +101 -0
  318. package/dist/scenes/resume.d.ts +2 -0
  319. package/dist/scenes/resume.js +79 -0
  320. package/dist/scenes/runner.d.ts +2 -0
  321. package/dist/scenes/runner.js +674 -0
  322. package/dist/scenes/schema.d.ts +6 -0
  323. package/dist/scenes/schema.js +994 -0
  324. package/dist/scenes/seed.d.ts +2 -0
  325. package/dist/scenes/seed.js +83 -0
  326. package/dist/scenes/segments.d.ts +15 -0
  327. package/dist/scenes/segments.js +79 -0
  328. package/dist/scenes/selectors.d.ts +3 -0
  329. package/dist/scenes/selectors.js +21 -0
  330. package/dist/scenes/timeline.d.ts +11 -0
  331. package/dist/scenes/timeline.js +26 -0
  332. package/dist/scenes/timeouts.d.ts +6 -0
  333. package/dist/scenes/timeouts.js +17 -0
  334. package/dist/scenes/training-captions.d.ts +14 -0
  335. package/dist/scenes/training-captions.js +98 -0
  336. package/dist/scenes/training-report.d.ts +10 -0
  337. package/dist/scenes/training-report.js +78 -0
  338. package/dist/scenes/training-transcript.d.ts +24 -0
  339. package/dist/scenes/training-transcript.js +204 -0
  340. package/dist/scenes/training.d.ts +10 -0
  341. package/dist/scenes/training.js +134 -0
  342. package/dist/scenes/types.d.ts +1872 -0
  343. package/dist/scenes/types.js +8 -0
  344. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  345. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  346. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  347. package/dist/scenes/visual-audit-fixtures.js +210 -0
  348. package/dist/scenes/visual-audit-report.d.ts +11 -0
  349. package/dist/scenes/visual-audit-report.js +85 -0
  350. package/dist/scenes/visual-audit-review.d.ts +23 -0
  351. package/dist/scenes/visual-audit-review.js +829 -0
  352. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  353. package/dist/scenes/visual-audit-routes.js +308 -0
  354. package/dist/scenes/visual-audit.d.ts +3 -0
  355. package/dist/scenes/visual-audit.js +596 -0
  356. package/dist/scripts/build-dist.js +154 -40
  357. package/dist/scripts/check-build-warnings.js +42 -53
  358. package/dist/scripts/cleanup-markdown.js +1 -1
  359. package/dist/scripts/cli-test-fixtures.js +24 -28
  360. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  361. package/dist/scripts/package-tools.js +12 -1
  362. package/dist/scripts/prepare.js +3 -7
  363. package/dist/scripts/release-verify.js +2 -5
  364. package/dist/scripts/run-fixture-astro-command.js +1 -1
  365. package/dist/scripts/template-catalog.test.js +68 -82
  366. package/dist/scripts/tenant-dev.js +0 -10
  367. package/dist/scripts/test-cloudflare-local.js +1 -1
  368. package/dist/scripts/test-scaffold.js +0 -1
  369. package/dist/scripts/test-smoke.js +3 -3
  370. package/dist/scripts/treeseed-build-dist.js +4 -7
  371. package/dist/scripts/treeseed-release-verify.js +1 -1
  372. package/dist/scripts/verify-driver.js +30 -21
  373. package/dist/scripts/workflow-commands.test.js +18 -27
  374. package/dist/scripts/workspace-command-e2e.js +1 -1
  375. package/dist/scripts/workspace-lint.js +6 -0
  376. package/dist/scripts/workspace-release-test.js +90 -1
  377. package/dist/scripts/workspace-test.js +6 -0
  378. package/dist/sdk-dispatch.d.ts +1 -1
  379. package/dist/sdk-dispatch.js +0 -16
  380. package/dist/sdk-fields.d.ts +1 -1
  381. package/dist/sdk-filters.d.ts +1 -1
  382. package/dist/sdk-types.d.ts +1184 -113
  383. package/dist/sdk-types.js +393 -0
  384. package/dist/sdk.d.ts +74 -79
  385. package/dist/sdk.js +27 -36
  386. package/dist/secrets-capability.d.ts +421 -0
  387. package/dist/secrets-capability.js +530 -0
  388. package/dist/seeds/normalize.js +1 -0
  389. package/dist/seeds/planner.js +38 -0
  390. package/dist/seeds/schema.js +293 -4
  391. package/dist/seeds/types.d.ts +60 -0
  392. package/dist/seeds/types.js +9 -1
  393. package/dist/service-credentials.d.ts +54 -0
  394. package/dist/service-credentials.js +112 -0
  395. package/dist/stores/cursor-store.d.ts +2 -2
  396. package/dist/stores/envelopes.d.ts +1 -1
  397. package/dist/stores/helpers.d.ts +1 -1
  398. package/dist/stores/lease-store.d.ts +2 -2
  399. package/dist/stores/message-store.d.ts +2 -2
  400. package/dist/stores/operational-store.d.ts +3 -26
  401. package/dist/stores/operational-store.js +0 -225
  402. package/dist/stores/project-workflow-store.d.ts +2 -2
  403. package/dist/stores/run-store.d.ts +2 -3
  404. package/dist/stores/run-store.js +0 -98
  405. package/dist/stores/subscription-store.d.ts +2 -3
  406. package/dist/stores/subscription-store.js +0 -100
  407. package/dist/template-catalog.d.ts +1 -1
  408. package/dist/template-launch-requirements.d.ts +2 -2
  409. package/dist/template-launch-ui.d.ts +2 -2
  410. package/dist/treedx/adapters.d.ts +6 -6
  411. package/dist/treedx/client.d.ts +1 -1
  412. package/dist/treedx/errors.d.ts +1 -1
  413. package/dist/treedx/federated-client.d.ts +3 -3
  414. package/dist/treedx/graph-adapter.d.ts +2 -2
  415. package/dist/treedx/index.d.ts +14 -14
  416. package/dist/treedx/market-integration.d.ts +1 -1
  417. package/dist/treedx/ports.d.ts +30 -30
  418. package/dist/treedx/query-adapter.d.ts +3 -3
  419. package/dist/treedx/registry-client.d.ts +2 -2
  420. package/dist/treedx/repository-adapter.d.ts +4 -4
  421. package/dist/treedx/repository-adapter.js +14 -3
  422. package/dist/treedx/sdk-integration.d.ts +3 -3
  423. package/dist/treedx/types.d.ts +2 -2
  424. package/dist/treedx/workspace-adapter.d.ts +2 -2
  425. package/dist/treedx-backends.d.ts +13 -11
  426. package/dist/treedx-backends.js +52 -50
  427. package/dist/treedx-client.d.ts +3 -0
  428. package/dist/treedx-client.js +10 -1
  429. package/dist/treeseed/services/compose.yml +2 -3
  430. package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
  431. package/dist/types/agents.d.ts +256 -0
  432. package/dist/types/agents.js +42 -1
  433. package/dist/verification.d.ts +1 -0
  434. package/dist/verification.js +143 -14
  435. package/dist/workflow/operations.d.ts +510 -559
  436. package/dist/workflow/operations.js +1891 -1342
  437. package/dist/workflow/policy.js +19 -7
  438. package/dist/workflow/runs.d.ts +9 -3
  439. package/dist/workflow/runs.js +66 -26
  440. package/dist/workflow/session.d.ts +4 -1
  441. package/dist/workflow/session.js +50 -10
  442. package/dist/workflow/worktrees.d.ts +6 -2
  443. package/dist/workflow/worktrees.js +98 -15
  444. package/dist/workflow-state.d.ts +5 -5
  445. package/dist/workflow-state.js +27 -17
  446. package/dist/workflow-support.d.ts +26 -25
  447. package/dist/workflow-support.js +27 -31
  448. package/dist/workflow.d.ts +46 -16
  449. package/dist/workflow.js +19 -7
  450. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  451. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  452. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  453. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  454. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  455. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  456. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  457. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  458. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  459. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  460. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  461. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  462. package/package.json +75 -18
  463. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  464. package/templates/github/deploy-web.workflow.yml +12 -8
  465. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  466. package/dist/operations/services/mailpit-runtime.js +0 -67
  467. package/dist/operations/services/release-candidate.d.ts +0 -60
  468. package/dist/operations/services/release-candidate.js +0 -953
  469. package/dist/scripts/ensure-mailpit.js +0 -48
  470. package/dist/scripts/logs-mailpit.js +0 -2
  471. package/dist/scripts/run-ts.js +0 -45
  472. package/dist/scripts/stop-mailpit.js +0 -5
  473. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -0,0 +1,8 @@
1
+ const TREESEED_SCENE_SCHEMA_VERSION = "treeseed.scene/v1";
2
+ const TREESEED_SCENE_ENVIRONMENTS = ["local", "staging", "prod"];
3
+ const TREESEED_SCENE_BROWSERS = ["chromium", "firefox", "webkit"];
4
+ export {
5
+ TREESEED_SCENE_BROWSERS,
6
+ TREESEED_SCENE_ENVIRONMENTS,
7
+ TREESEED_SCENE_SCHEMA_VERSION
8
+ };
@@ -0,0 +1,6 @@
1
+ import type { TreeseedSceneVisualAuditManifest, TreeseedSceneVisualAuditPaths, TreeseedSceneVisualAuditReview } from './types.js';
2
+ export declare function writeTreeseedSceneVisualAuditContactSheets(input: {
3
+ manifest: TreeseedSceneVisualAuditManifest;
4
+ review: TreeseedSceneVisualAuditReview;
5
+ paths: TreeseedSceneVisualAuditPaths;
6
+ }): void;
@@ -0,0 +1,119 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { relative } from "node:path";
3
+ function esc(value) {
4
+ return String(value ?? "").replace(/&/gu, "&amp;").replace(/</gu, "&lt;").replace(/>/gu, "&gt;").replace(/"/gu, "&quot;");
5
+ }
6
+ function slug(value) {
7
+ return value === "/" ? "root" : value.replace(/^\/+|\/+$/gu, "").replace(/[^a-z0-9]+/giu, "-").toLowerCase() || "root";
8
+ }
9
+ function rel(from, path) {
10
+ return path ? relative(from, path) : "";
11
+ }
12
+ function styles() {
13
+ return `<style>
14
+ body{margin:0;background:#0f172a;color:#e2e8f0;font:14px/1.45 ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
15
+ a{color:#38bdf8}
16
+ header{position:sticky;top:0;background:#111827f2;border-bottom:1px solid #334155;padding:16px 22px;z-index:2}
17
+ h1{margin:0 0 8px;font-size:22px} h2{margin:28px 22px 12px;font-size:18px}
18
+ .meta{color:#cbd5e1}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;padding:0 22px 24px}
19
+ .card{background:#1e293b;border:1px solid #334155;border-radius:8px;overflow:hidden;box-shadow:0 12px 30px #0004}
20
+ .shot{display:block;background:#020617;aspect-ratio:16/10;overflow:hidden}.shot img{width:100%;height:100%;object-fit:contain;display:block}
21
+ .body{padding:12px}.path{font-weight:700;color:#f8fafc}.sub{color:#cbd5e1;font-size:12px;margin-top:4px}.badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
22
+ .badge{font-size:11px;border-radius:999px;padding:3px 8px;background:#334155;color:#e2e8f0}.blocking,.high{background:#7f1d1d;color:#fecaca}.medium{background:#78350f;color:#fde68a}.low{background:#164e63;color:#bae6fd}.info{background:#365314;color:#d9f99d}
23
+ .finding{font-size:12px;margin-top:8px;color:#f8fafc}.empty{padding:22px;color:#cbd5e1}
24
+ .action{font-size:12px;margin-top:8px;color:#cbd5e1}.rank{background:#0f766e;color:#ccfbf1}.owner{background:#312e81;color:#ddd6fe}
25
+ nav{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px}
26
+ nav a{border:1px solid #334155;border-radius:999px;padding:4px 10px;text-decoration:none;color:#e2e8f0}
27
+ </style>`;
28
+ }
29
+ function renderPage(input) {
30
+ const reviewRoot = input.paths.reviewRoot;
31
+ const findingsByCapture = /* @__PURE__ */ new Map();
32
+ for (const finding of input.findings) {
33
+ const list = findingsByCapture.get(finding.captureId) ?? [];
34
+ list.push(finding);
35
+ findingsByCapture.set(finding.captureId, list);
36
+ }
37
+ const nav = [
38
+ `<a href="index.html">All</a>`,
39
+ `<a href="flagged.html">Flagged</a>`,
40
+ ...input.allRoots.map((root) => `<a href="${slug(root)}.html">${esc(root)}</a>`)
41
+ ].join("");
42
+ const cards = input.captures.map((capture) => {
43
+ const list = findingsByCapture.get(capture.id) ?? [];
44
+ const image = capture.screenshotPath ? rel(reviewRoot, capture.screenshotPath) : "";
45
+ const badges = list.slice(0, 5).map((finding) => `<span class="badge ${esc(finding.severity)}">${esc(finding.severity)} ${esc(finding.code.replace(/^visual\./u, ""))}</span>`).join("");
46
+ const findingText = list[0] ? `<div class="finding">${esc(list[0].message)}</div>` : "";
47
+ return `<article class="card">
48
+ ${image ? `<a class="shot" href="${esc(image)}"><img src="${esc(image)}" alt="${esc(capture.path)} ${esc(capture.role)} ${esc(capture.device)}"></a>` : '<div class="shot empty">No screenshot</div>'}
49
+ <div class="body">
50
+ <div class="path">${esc(capture.path)}</div>
51
+ <div class="sub">${esc(capture.role)} / ${esc(capture.device)} / ${esc(capture.status)} / ${esc(capture.finalUrl ?? capture.url)}</div>
52
+ ${badges ? `<div class="badges">${badges}</div>` : ""}
53
+ ${findingText}
54
+ </div>
55
+ </article>`;
56
+ }).join("\n");
57
+ return `<!doctype html>
58
+ <html lang="en">
59
+ <head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${esc(input.title)}</title>${styles()}</head>
60
+ <body>
61
+ <header>
62
+ <h1>${esc(input.title)}</h1>
63
+ <div class="meta">Scene ${esc(input.manifest.sceneId)} / audit ${esc(input.manifest.auditId)} / captures ${input.captures.length} / findings ${input.findings.length}</div>
64
+ <nav>${nav}</nav>
65
+ </header>
66
+ ${cards ? `<main class="grid">${cards}</main>` : '<main class="empty">No captures in this sheet.</main>'}
67
+ </body>
68
+ </html>
69
+ `;
70
+ }
71
+ function renderRootCausePage(input) {
72
+ const reviewRoot = input.paths.reviewRoot;
73
+ const nav = `<a href="index.html">All</a><a href="flagged.html">Flagged</a><a href="root-causes.html">Root causes</a>`;
74
+ const cards = input.rootCauses.map((entry) => {
75
+ const image = entry.exampleScreenshotPath ? rel(reviewRoot, entry.exampleScreenshotPath) : "";
76
+ return `<article class="card" id="${esc(entry.id)}">
77
+ ${image ? `<a class="shot" href="${esc(image)}"><img src="${esc(image)}" alt="${esc(entry.title)}"></a>` : '<div class="shot empty">No screenshot</div>'}
78
+ <div class="body">
79
+ <div class="path">#${esc(entry.priorityRank)} ${esc(entry.title)}</div>
80
+ <div class="sub">${esc(entry.suspectedOwner)} / ${esc(entry.severity)} / score ${esc(entry.priorityScore)} / count ${esc(entry.count)}</div>
81
+ <div class="badges"><span class="badge rank">rank ${esc(entry.priorityRank)}</span><span class="badge owner">${esc(entry.suspectedOwner)}</span><span class="badge ${esc(entry.severity)}">${esc(entry.severity)}</span></div>
82
+ <div class="finding">${esc(entry.paths.slice(0, 8).join(", "))}</div>
83
+ <div class="action">${esc(entry.recommendedAction)}</div>
84
+ </div>
85
+ </article>`;
86
+ }).join("\n");
87
+ return `<!doctype html>
88
+ <html lang="en">
89
+ <head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Visual Audit Root Causes</title>${styles()}</head>
90
+ <body>
91
+ <header>
92
+ <h1>Visual Audit Root Causes</h1>
93
+ <div class="meta">Scene ${esc(input.manifest.sceneId)} / audit ${esc(input.manifest.auditId)} / root causes ${input.rootCauses.length}</div>
94
+ <nav>${nav}</nav>
95
+ </header>
96
+ ${cards ? `<main class="grid">${cards}</main>` : '<main class="empty">No root causes.</main>'}
97
+ </body>
98
+ </html>
99
+ `;
100
+ }
101
+ function writeTreeseedSceneVisualAuditContactSheets(input) {
102
+ if (!input.paths.reviewRoot) return;
103
+ const root = `${input.paths.reviewRoot}/contact-sheets`;
104
+ mkdirSync(root, { recursive: true });
105
+ const roots = [...new Set(input.manifest.routes.map((route) => route.pathRoot))].sort();
106
+ const write = (name, title, captures, findings = input.review.findings) => {
107
+ writeFileSync(`${root}/${name}.html`, renderPage({ title, manifest: input.manifest, paths: input.paths, captures, findings, allRoots: roots }), "utf8");
108
+ };
109
+ write("index", "Visual Audit Contact Sheets", input.manifest.captures);
110
+ const flaggedIds = new Set(input.review.findings.map((finding) => finding.captureId));
111
+ write("flagged", "Flagged Visual Audit Captures", input.manifest.captures.filter((capture) => flaggedIds.has(capture.id)));
112
+ writeFileSync(`${root}/root-causes.html`, renderRootCausePage({ manifest: input.manifest, paths: input.paths, rootCauses: input.review.rootCauses }), "utf8");
113
+ for (const pathRoot of roots) {
114
+ write(slug(pathRoot), `Visual Audit ${pathRoot}`, input.manifest.captures.filter((capture) => capture.pathRoot === pathRoot));
115
+ }
116
+ }
117
+ export {
118
+ writeTreeseedSceneVisualAuditContactSheets
119
+ };
@@ -0,0 +1,25 @@
1
+ import type { TreeseedSceneDiagnostic, TreeseedSceneVisualAuditRole } from './types.js';
2
+ export declare const TREESEED_VISUAL_AUDIT_PASSWORD = "TreeSeedVisualAudit!2026";
3
+ export declare const TREESEED_VISUAL_AUDIT_USERS: Record<string, {
4
+ email: string;
5
+ password: string;
6
+ label: string;
7
+ }>;
8
+ export declare function treeseedSceneVisualAuditUserForRole(role: TreeseedSceneVisualAuditRole): {
9
+ email: string;
10
+ password: string;
11
+ label: string;
12
+ };
13
+ export declare function validateTreeseedSceneVisualAuditRoles(roles: TreeseedSceneVisualAuditRole[]): TreeseedSceneDiagnostic[];
14
+ export declare function ensureTreeseedSceneVisualAuditRoleFixtures(input: {
15
+ baseUrl: string;
16
+ roles: TreeseedSceneVisualAuditRole[];
17
+ projectRoot?: string;
18
+ environment?: string;
19
+ }): Promise<TreeseedSceneDiagnostic[]>;
20
+ export declare function signInTreeseedSceneVisualAuditRole(input: {
21
+ page: any;
22
+ baseUrl: string;
23
+ apiBaseUrl?: string | null;
24
+ role: TreeseedSceneVisualAuditRole;
25
+ }): Promise<TreeseedSceneDiagnostic[]>;
@@ -0,0 +1,210 @@
1
+ import { sceneErrorDiagnostic, sceneWarningDiagnostic } from "./diagnostics.js";
2
+ import { MarketClient, MarketClientError } from "../market-client.js";
3
+ import { resolveTreeseedMachineEnvironmentValues } from "../operations/services/config-runtime.js";
4
+ const TREESEED_VISUAL_AUDIT_PASSWORD = "TreeSeedVisualAudit!2026";
5
+ const TREESEED_VISUAL_AUDIT_USERS = {
6
+ owner: { email: "visual.owner@treeseed.io", password: TREESEED_VISUAL_AUDIT_PASSWORD, label: "Visual Audit Owner" },
7
+ admin: { email: "visual.admin@treeseed.io", password: TREESEED_VISUAL_AUDIT_PASSWORD, label: "Visual Audit Admin" },
8
+ member: { email: "visual.member@treeseed.io", password: TREESEED_VISUAL_AUDIT_PASSWORD, label: "Visual Audit Member" }
9
+ };
10
+ function treeseedSceneVisualAuditUserForRole(role) {
11
+ return TREESEED_VISUAL_AUDIT_USERS[role] ?? null;
12
+ }
13
+ function validateTreeseedSceneVisualAuditRoles(roles) {
14
+ const diagnostics = [];
15
+ for (const role of roles) {
16
+ if (role === "anonymous") continue;
17
+ if (!treeseedSceneVisualAuditUserForRole(role)) {
18
+ diagnostics.push(sceneWarningDiagnostic("scene.visual_audit_role_unknown", `Visual audit role "${role}" has no built-in fixture login. Routes for this role will be skipped unless a future fixture provider supplies it.`, "roles"));
19
+ }
20
+ }
21
+ return diagnostics;
22
+ }
23
+ function usernameForRole(role) {
24
+ return `visual-${role}`;
25
+ }
26
+ function clientFor(baseUrl, accessToken) {
27
+ return new MarketClient({
28
+ profile: {
29
+ id: "visual-audit-local",
30
+ label: "Visual audit local",
31
+ baseUrl,
32
+ kind: "specialized"
33
+ },
34
+ accessToken: accessToken ?? void 0,
35
+ userAgent: "treeseed-scene-visual-audit"
36
+ });
37
+ }
38
+ function isAuthFailure(error) {
39
+ if (error instanceof MarketClientError) return error.status === 400 || error.status === 401 || error.status === 403 || error.status === 409;
40
+ return false;
41
+ }
42
+ function configuredValue(input, name) {
43
+ const envValue = process.env[name];
44
+ if (typeof envValue === "string" && envValue.trim()) return envValue.trim();
45
+ if (!input?.projectRoot || !input.environment) return null;
46
+ try {
47
+ const values = resolveTreeseedMachineEnvironmentValues(input.projectRoot, input.environment);
48
+ const value = values?.[name];
49
+ return typeof value === "string" && value.trim() ? value.trim() : null;
50
+ } catch {
51
+ return null;
52
+ }
53
+ }
54
+ function serviceHeaders(input) {
55
+ return {
56
+ "content-type": "application/json",
57
+ "x-treeseed-service-id": configuredValue(input, "TREESEED_API_WEB_SERVICE_ID") ?? configuredValue(input, "TREESEED_WEB_SERVICE_ID") ?? "web",
58
+ "x-treeseed-service-secret": configuredValue(input, "TREESEED_API_WEB_SERVICE_SECRET") ?? configuredValue(input, "TREESEED_WEB_SERVICE_SECRET") ?? "treeseed-web-service-dev-secret"
59
+ };
60
+ }
61
+ function seedActorsForRoles(roles) {
62
+ const actors = {};
63
+ for (const role of roles) {
64
+ const user = treeseedSceneVisualAuditUserForRole(role);
65
+ if (!user) continue;
66
+ actors[role] = {
67
+ email: user.email,
68
+ username: usernameForRole(role),
69
+ displayName: user.label,
70
+ siteRoles: role === "admin" ? ["member"] : ["member"],
71
+ teamRole: role === "owner" ? "team_owner" : role === "admin" ? "project_lead" : "contributor"
72
+ };
73
+ }
74
+ return actors;
75
+ }
76
+ async function seedVisualAuditFixtures(input) {
77
+ const actors = seedActorsForRoles(input.roles);
78
+ if (Object.keys(actors).length === 0) return [];
79
+ try {
80
+ const response = await fetch(new URL("/v1/acceptance/seed", input.baseUrl).toString(), {
81
+ method: "POST",
82
+ headers: serviceHeaders(input),
83
+ body: JSON.stringify({
84
+ namespace: "visual-audit",
85
+ password: TREESEED_VISUAL_AUDIT_PASSWORD,
86
+ actors
87
+ })
88
+ });
89
+ const text = await response.text();
90
+ if (!response.ok) {
91
+ return [sceneWarningDiagnostic(
92
+ "scene.visual_audit_fixture_unavailable",
93
+ `Visual audit API fixture seed failed with HTTP ${response.status}: ${text.slice(0, 500)}`,
94
+ "roles"
95
+ )];
96
+ }
97
+ return [];
98
+ } catch (error) {
99
+ return [sceneWarningDiagnostic(
100
+ "scene.visual_audit_fixture_unavailable",
101
+ `Visual audit API fixture seed failed against ${input.baseUrl}: ${error instanceof Error ? error.message : String(error ?? "local fixture API is unavailable")}.`,
102
+ "roles"
103
+ )];
104
+ }
105
+ }
106
+ async function ensureTreeseedSceneVisualAuditRoleFixtures(input) {
107
+ const diagnostics = [];
108
+ const roles = [...new Set(input.roles)].filter((role) => role !== "anonymous");
109
+ diagnostics.push(...await seedVisualAuditFixtures({
110
+ baseUrl: input.baseUrl,
111
+ roles,
112
+ projectRoot: input.projectRoot,
113
+ environment: input.environment
114
+ }));
115
+ for (const role of roles) {
116
+ const user = treeseedSceneVisualAuditUserForRole(role);
117
+ if (!user) continue;
118
+ const client = clientFor(input.baseUrl);
119
+ try {
120
+ await client.webSignIn({ login: user.email, password: user.password });
121
+ continue;
122
+ } catch (error) {
123
+ if (!isAuthFailure(error)) {
124
+ diagnostics.push(sceneWarningDiagnostic(
125
+ "scene.visual_audit_fixture_unavailable",
126
+ `Visual audit fixture setup for ${role} failed against ${input.baseUrl}: ${error instanceof Error ? error.message : String(error ?? "local fixture API is unavailable")}. Authenticated screenshots require the local API and database to be healthy.`,
127
+ "roles"
128
+ ));
129
+ continue;
130
+ }
131
+ }
132
+ try {
133
+ const [firstName = "Visual", lastName = String(role)] = user.label.split(/\s+/u);
134
+ const signup = await client.webSignUp({
135
+ email: user.email,
136
+ username: usernameForRole(role),
137
+ password: user.password,
138
+ firstName,
139
+ lastName,
140
+ name: user.label
141
+ });
142
+ const payload = signup.payload;
143
+ if (payload.confirmationToken) {
144
+ await client.confirmWebEmail({ token: payload.confirmationToken });
145
+ } else if (payload.confirmationRequired) {
146
+ diagnostics.push(sceneWarningDiagnostic("scene.visual_audit_fixture_unavailable", `Visual audit fixture user ${user.email} requires email confirmation, but the local API did not return a confirmation token.`, "roles"));
147
+ }
148
+ } catch (error) {
149
+ try {
150
+ await client.webSignIn({ login: user.email, password: user.password });
151
+ } catch {
152
+ diagnostics.push(sceneWarningDiagnostic(
153
+ "scene.visual_audit_fixture_unavailable",
154
+ `Visual audit fixture setup for ${role} failed against ${input.baseUrl}: ${error instanceof Error ? error.message : String(error ?? "local fixture API is unavailable")}. Authenticated screenshots require the local API and database to be healthy.`,
155
+ "roles"
156
+ ));
157
+ }
158
+ }
159
+ }
160
+ return diagnostics;
161
+ }
162
+ async function signInTreeseedSceneVisualAuditRole(input) {
163
+ const user = treeseedSceneVisualAuditUserForRole(input.role);
164
+ if (!user) {
165
+ return [sceneErrorDiagnostic("scene.visual_audit_role_unknown", `Visual audit role "${input.role}" has no fixture login.`, "role")];
166
+ }
167
+ const apiBaseUrl = input.apiBaseUrl?.trim() || input.baseUrl;
168
+ try {
169
+ const session = await clientFor(apiBaseUrl).webSignIn({ login: user.email, password: user.password });
170
+ const accessToken = session.payload.accessToken;
171
+ if (accessToken) {
172
+ const webUrl = new URL(input.baseUrl);
173
+ await input.page.context().addCookies([{
174
+ name: "ts_market_api_access",
175
+ value: accessToken,
176
+ domain: webUrl.hostname,
177
+ path: "/",
178
+ httpOnly: true,
179
+ secure: webUrl.protocol === "https:",
180
+ sameSite: "Lax",
181
+ expires: Math.floor(Date.now() / 1e3) + Number(session.payload.expiresInSeconds ?? 900)
182
+ }]);
183
+ await input.page.goto(new URL("/app/", input.baseUrl).toString(), { waitUntil: "networkidle", timeout: 2e4 });
184
+ if (!/\/auth\/sign-in/u.test(input.page.url())) return [];
185
+ }
186
+ } catch {
187
+ }
188
+ try {
189
+ await input.page.goto(new URL("/auth/sign-in", input.baseUrl).toString(), { waitUntil: "networkidle", timeout: 2e4 });
190
+ await input.page.locator('input[name="login"], input[name="email"], input[name="emailOrUsername"], input[name="username"]').first().fill(user.email, { timeout: 5e3 });
191
+ await input.page.locator('input[name="password"]').first().fill(user.password, { timeout: 5e3 });
192
+ await input.page.getByRole("button", { name: /sign in/i }).click({ timeout: 5e3 });
193
+ await input.page.waitForLoadState("networkidle", { timeout: 5e3 }).catch(() => void 0);
194
+ const url = input.page.url();
195
+ if (/\/auth\/sign-in/u.test(url)) {
196
+ return [sceneWarningDiagnostic("scene.visual_audit_role_login_failed", `Visual audit login for ${input.role} did not leave the sign-in page. Ensure deterministic fixture user ${user.email} exists.`, "roles")];
197
+ }
198
+ return [];
199
+ } catch (error) {
200
+ return [sceneWarningDiagnostic("scene.visual_audit_role_login_failed", error instanceof Error ? error.message : String(error ?? `Visual audit login for ${input.role} failed.`), "roles")];
201
+ }
202
+ }
203
+ export {
204
+ TREESEED_VISUAL_AUDIT_PASSWORD,
205
+ TREESEED_VISUAL_AUDIT_USERS,
206
+ ensureTreeseedSceneVisualAuditRoleFixtures,
207
+ signInTreeseedSceneVisualAuditRole,
208
+ treeseedSceneVisualAuditUserForRole,
209
+ validateTreeseedSceneVisualAuditRoles
210
+ };
@@ -0,0 +1,11 @@
1
+ import type { TreeseedSceneVisualAuditManifest, TreeseedSceneVisualAuditPaths, TreeseedSceneVisualAuditReview } from './types.js';
2
+ export declare function formatTreeseedSceneVisualAuditMarkdown(input: {
3
+ manifest: TreeseedSceneVisualAuditManifest;
4
+ paths: TreeseedSceneVisualAuditPaths;
5
+ review?: TreeseedSceneVisualAuditReview | null;
6
+ }): string;
7
+ export declare function writeTreeseedSceneVisualAuditReport(input: {
8
+ manifest: TreeseedSceneVisualAuditManifest;
9
+ paths: TreeseedSceneVisualAuditPaths;
10
+ review?: TreeseedSceneVisualAuditReview | null;
11
+ }): void;
@@ -0,0 +1,85 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { relative } from "node:path";
3
+ function md(value) {
4
+ return String(value ?? "").replace(/\|/gu, "\\|").replace(/\n/gu, " ");
5
+ }
6
+ function rel(root, path) {
7
+ return path ? relative(root, path) : "";
8
+ }
9
+ function firstDiagnostic(capture) {
10
+ return capture.diagnostics[0] ?? null;
11
+ }
12
+ function formatTreeseedSceneVisualAuditMarkdown(input) {
13
+ const { manifest, paths } = input;
14
+ const failed = manifest.captures.filter((capture) => capture.status === "failed");
15
+ const skipped = manifest.captures.filter((capture) => capture.status === "skipped");
16
+ const captured = manifest.captures.filter((capture) => capture.status === "captured");
17
+ const roots = [...new Set(manifest.routes.map((route) => route.pathRoot))].sort();
18
+ const lines = [
19
+ "# TreeSeed Scene Visual Audit",
20
+ "",
21
+ `Scene: ${manifest.sceneId ?? "(unknown)"}`,
22
+ `Audit: ${manifest.auditId}`,
23
+ `Base URL: ${manifest.baseUrl ?? "(unresolved)"}`,
24
+ `Generated: ${manifest.generatedAt}`,
25
+ "",
26
+ "## Summary",
27
+ "",
28
+ `- Roles: ${manifest.roles.join(", ") || "(none)"}`,
29
+ `- Devices: ${manifest.devices.join(", ") || "(none)"}`,
30
+ `- Routes: ${manifest.routes.length}`,
31
+ `- Captures: ${captured.length}`,
32
+ `- Failed: ${failed.length}`,
33
+ `- Skipped: ${skipped.length}`,
34
+ `- Review findings: ${input.review?.summary.findingCount ?? 0}`,
35
+ `- Root causes: ${input.review?.summary.rootCauseCount ?? 0}`,
36
+ `- Incidents: ${input.review?.summary.incidentCount ?? 0}`,
37
+ `- Raw client errors: ${input.review?.summary.clientErrorCount ?? 0}`,
38
+ ""
39
+ ];
40
+ if (input.review && paths.reviewRoot) {
41
+ lines.push("## Review", "");
42
+ lines.push(`- Agent brief: [review/agent-brief.md](${md(rel(paths.auditRoot, paths.reviewAgentBriefPath))})`);
43
+ lines.push(`- Issue index: [review/issue-index.json](${md(rel(paths.auditRoot, `${paths.reviewRoot}/issue-index.json`))})`);
44
+ lines.push(`- Top priority: [review/query/top-priority.json](${md(rel(paths.auditRoot, `${paths.reviewRoot}/query/top-priority.json`))})`);
45
+ lines.push(`- Root causes: [review/root-causes.json](${md(rel(paths.auditRoot, `${paths.reviewRoot}/root-causes.json`))})`);
46
+ lines.push(`- Incidents: [review/incidents.json](${md(rel(paths.auditRoot, `${paths.reviewRoot}/incidents.json`))})`);
47
+ lines.push(`- Findings JSON: [review/findings.json](${md(rel(paths.auditRoot, paths.reviewFindingsPath))})`);
48
+ lines.push(`- Contact sheets: [review/contact-sheets/index.html](${md(rel(paths.auditRoot, `${paths.reviewRoot}/contact-sheets/index.html`))})`);
49
+ lines.push(`- Flagged contact sheet: [review/contact-sheets/flagged.html](${md(rel(paths.auditRoot, `${paths.reviewRoot}/contact-sheets/flagged.html`))})`);
50
+ lines.push(`- Root-cause contact sheet: [review/contact-sheets/root-causes.html](${md(rel(paths.auditRoot, `${paths.reviewRoot}/contact-sheets/root-causes.html`))})`);
51
+ lines.push("");
52
+ }
53
+ lines.push("## By Path Root", "");
54
+ for (const root of roots) {
55
+ lines.push(`### ${root}`, "");
56
+ lines.push("| Role | Device | Path | Status | Screenshot |");
57
+ lines.push("| --- | --- | --- | --- | --- |");
58
+ const captures = manifest.captures.filter((capture) => capture.pathRoot === root).sort((a, b) => `${a.role}:${a.device}:${a.path}`.localeCompare(`${b.role}:${b.device}:${b.path}`));
59
+ for (const capture of captures) {
60
+ const screenshot = capture.screenshotPath ? `[view](${md(rel(paths.auditRoot, capture.screenshotPath))})` : "";
61
+ lines.push(`| ${md(capture.role)} | ${md(capture.device)} | ${md(capture.path)} | ${md(capture.status)} | ${screenshot} |`);
62
+ }
63
+ lines.push("");
64
+ }
65
+ lines.push("## Failures", "");
66
+ lines.push("| Role | Device | Path | Code | Message |");
67
+ lines.push("| --- | --- | --- | --- | --- |");
68
+ for (const capture of [...failed, ...skipped]) {
69
+ const diagnostic = firstDiagnostic(capture);
70
+ lines.push(`| ${md(capture.role)} | ${md(capture.device)} | ${md(capture.path)} | ${md(diagnostic?.code ?? capture.status)} | ${md(diagnostic?.message ?? capture.status)} |`);
71
+ }
72
+ lines.push("");
73
+ return `${lines.join("\n")}
74
+ `;
75
+ }
76
+ function writeTreeseedSceneVisualAuditReport(input) {
77
+ mkdirSync(input.paths.auditRoot, { recursive: true });
78
+ writeFileSync(input.paths.manifestPath, `${JSON.stringify(input.manifest, null, 2)}
79
+ `, "utf8");
80
+ writeFileSync(input.paths.reportPath, formatTreeseedSceneVisualAuditMarkdown(input), "utf8");
81
+ }
82
+ export {
83
+ formatTreeseedSceneVisualAuditMarkdown,
84
+ writeTreeseedSceneVisualAuditReport
85
+ };
@@ -0,0 +1,23 @@
1
+ import type { TreeseedSceneVisualAuditClientError, TreeseedSceneVisualAuditManifest, TreeseedSceneVisualAuditPaths, TreeseedSceneVisualAuditReview, TreeseedSceneVisualAuditReviewDetail } from './types.js';
2
+ export declare function isTreeseedSceneVisualAuditIgnoredClientError(error: Pick<TreeseedSceneVisualAuditClientError, 'url' | 'message'>): boolean;
3
+ export declare function buildTreeseedSceneVisualAuditReview(input: {
4
+ manifest: TreeseedSceneVisualAuditManifest;
5
+ paths: TreeseedSceneVisualAuditPaths;
6
+ detail?: TreeseedSceneVisualAuditReviewDetail;
7
+ maxFindings?: number;
8
+ }): TreeseedSceneVisualAuditReview;
9
+ export declare function formatTreeseedSceneVisualAuditFindingsMarkdown(input: {
10
+ manifest: TreeseedSceneVisualAuditManifest;
11
+ review: TreeseedSceneVisualAuditReview;
12
+ paths: TreeseedSceneVisualAuditPaths;
13
+ }): string;
14
+ export declare function formatTreeseedSceneVisualAuditAgentBrief(input: {
15
+ manifest: TreeseedSceneVisualAuditManifest;
16
+ review: TreeseedSceneVisualAuditReview;
17
+ paths: TreeseedSceneVisualAuditPaths;
18
+ }): string;
19
+ export declare function writeTreeseedSceneVisualAuditReview(input: {
20
+ manifest: TreeseedSceneVisualAuditManifest;
21
+ review: TreeseedSceneVisualAuditReview;
22
+ paths: TreeseedSceneVisualAuditPaths;
23
+ }): void;