@treeseed/sdk 0.10.28 → 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 (509) hide show
  1. package/README.md +213 -7
  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 +118 -59
  27. package/dist/capacity-provider.js +235 -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 +3 -2
  36. package/dist/control-plane.js +38 -13
  37. package/dist/copilot.d.ts +3 -0
  38. package/dist/copilot.js +16 -1
  39. package/dist/d1-http.d.ts +1 -1
  40. package/dist/d1-store.d.ts +32 -57
  41. package/dist/d1-store.js +115 -318
  42. package/dist/db/d1.d.ts +1 -232
  43. package/dist/db/index.d.ts +3 -3
  44. package/dist/db/market-schema.d.ts +50900 -11018
  45. package/dist/db/market-schema.js +2313 -467
  46. package/dist/db/node-sqlite.d.ts +1 -232
  47. package/dist/db/node-sqlite.js +7 -2
  48. package/dist/db/schema.d.ts +0 -462
  49. package/dist/db/schema.js +2 -22
  50. package/dist/dispatch.d.ts +1 -1
  51. package/dist/dispatch.js +0 -11
  52. package/dist/fixture-support.js +52 -4
  53. package/dist/governance.d.ts +133 -0
  54. package/dist/governance.js +285 -0
  55. package/dist/graph/build.d.ts +2 -2
  56. package/dist/graph/context-query-contracts.d.ts +1 -1
  57. package/dist/graph/dsl.d.ts +1 -1
  58. package/dist/graph/query.d.ts +4 -4
  59. package/dist/graph/ranking.d.ts +1 -1
  60. package/dist/graph/schema.d.ts +1 -1
  61. package/dist/graph.d.ts +11 -11
  62. package/dist/guarantees/index.d.ts +425 -0
  63. package/dist/guarantees/index.js +1146 -0
  64. package/dist/hosting/apps.d.ts +12 -0
  65. package/dist/hosting/apps.js +107 -0
  66. package/dist/hosting/builtins.d.ts +25 -0
  67. package/dist/hosting/builtins.js +602 -0
  68. package/dist/hosting/contracts.d.ts +208 -0
  69. package/dist/hosting/contracts.js +0 -0
  70. package/dist/hosting/graph.d.ts +195 -0
  71. package/dist/hosting/graph.js +1092 -0
  72. package/dist/hosting/index.d.ts +4 -0
  73. package/dist/hosting/index.js +4 -0
  74. package/dist/index.d.ts +88 -67
  75. package/dist/index.js +142 -14
  76. package/dist/local-dev/managed-dev.d.ts +85 -0
  77. package/dist/local-dev/managed-dev.js +368 -0
  78. package/dist/managed-dependencies.d.ts +9 -0
  79. package/dist/managed-dependencies.js +10 -9
  80. package/dist/market-client.d.ts +327 -9
  81. package/dist/market-client.js +464 -20
  82. package/dist/model-registry.d.ts +1 -1
  83. package/dist/model-registry.js +19 -19
  84. package/dist/operations/agent-tools.d.ts +2 -11
  85. package/dist/operations/agent-tools.js +2 -14
  86. package/dist/operations/providers/default.d.ts +1 -1
  87. package/dist/operations/providers/default.js +20 -37
  88. package/dist/operations/repository-operations.d.ts +26 -2
  89. package/dist/operations/repository-operations.js +159 -1
  90. package/dist/operations/runtime.d.ts +3 -3
  91. package/dist/operations/services/bootstrap-runner.d.ts +4 -2
  92. package/dist/operations/services/bootstrap-runner.js +22 -2
  93. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  94. package/dist/operations/services/build-warning-policy.js +81 -82
  95. package/dist/operations/services/commit-message-provider.js +4 -4
  96. package/dist/operations/services/config-runtime.d.ts +83 -24
  97. package/dist/operations/services/config-runtime.js +449 -130
  98. package/dist/operations/services/deploy.d.ts +106 -624
  99. package/dist/operations/services/deploy.js +746 -263
  100. package/dist/operations/services/deployment-readiness.d.ts +30 -0
  101. package/dist/operations/services/deployment-readiness.js +206 -0
  102. package/dist/operations/services/git-remote-policy.js +12 -4
  103. package/dist/operations/services/git-runner.d.ts +66 -0
  104. package/dist/operations/services/git-runner.js +479 -0
  105. package/dist/operations/services/git-workflow.d.ts +45 -6
  106. package/dist/operations/services/git-workflow.js +251 -23
  107. package/dist/operations/services/github-actions-verification.d.ts +4 -1
  108. package/dist/operations/services/github-actions-verification.js +12 -3
  109. package/dist/operations/services/github-api.js +22 -6
  110. package/dist/operations/services/github-automation.d.ts +4 -4
  111. package/dist/operations/services/github-automation.js +19 -21
  112. package/dist/operations/services/github-credentials.d.ts +13 -0
  113. package/dist/operations/services/github-credentials.js +59 -0
  114. package/dist/operations/services/hosted-service-checks.d.ts +81 -0
  115. package/dist/operations/services/hosted-service-checks.js +478 -0
  116. package/dist/operations/services/hosting-audit.d.ts +2 -2
  117. package/dist/operations/services/hosting-audit.js +7 -7
  118. package/dist/operations/services/hub-launch.d.ts +1 -1
  119. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  120. package/dist/operations/services/hub-provider-launch.js +22 -17
  121. package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
  122. package/dist/operations/services/live-hosted-service-checks.js +463 -0
  123. package/dist/operations/services/local-dev.js +0 -1
  124. package/dist/operations/services/managed-host-security.d.ts +1 -1
  125. package/dist/operations/services/managed-host-security.js +1 -1
  126. package/dist/operations/services/managed-repositories.d.ts +37 -0
  127. package/dist/operations/services/managed-repositories.js +177 -0
  128. package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
  129. package/dist/operations/services/operations-runner-smoke.js +198 -0
  130. package/dist/operations/services/package-adapters.d.ts +170 -0
  131. package/dist/operations/services/package-adapters.js +859 -0
  132. package/dist/operations/services/package-reference-policy.d.ts +13 -88
  133. package/dist/operations/services/package-reference-policy.js +96 -215
  134. package/dist/operations/services/project-host-operations.d.ts +4 -4
  135. package/dist/operations/services/project-platform.d.ts +57 -173
  136. package/dist/operations/services/project-platform.js +80 -111
  137. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  138. package/dist/operations/services/project-web-monitor.js +122 -5
  139. package/dist/operations/services/railway-api.d.ts +117 -5
  140. package/dist/operations/services/railway-api.js +915 -93
  141. package/dist/operations/services/railway-deploy.d.ts +30 -112
  142. package/dist/operations/services/railway-deploy.js +521 -961
  143. package/dist/operations/services/release-history.js +3 -4
  144. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  145. package/dist/operations/services/release-proof-ledger.js +81 -0
  146. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  147. package/dist/operations/services/release-proof-planner.js +195 -0
  148. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  149. package/dist/operations/services/release-proof-runner.js +169 -0
  150. package/dist/operations/services/release-proof.d.ts +81 -0
  151. package/dist/operations/services/release-proof.js +79 -0
  152. package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
  153. package/dist/operations/services/repository-save-orchestrator.js +604 -212
  154. package/dist/operations/services/runtime-paths.d.ts +1 -3
  155. package/dist/operations/services/runtime-paths.js +0 -4
  156. package/dist/operations/services/runtime-tools.d.ts +1 -191
  157. package/dist/operations/services/runtime-tools.js +4 -443
  158. package/dist/operations/services/save-deploy-preflight.js +9 -1
  159. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  160. package/dist/operations/services/template-host-bindings.js +3 -2
  161. package/dist/operations/services/template-registry.d.ts +6 -6
  162. package/dist/operations/services/template-registry.js +33 -14
  163. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  164. package/dist/operations/services/verification-cache.d.ts +25 -0
  165. package/dist/operations/services/verification-cache.js +71 -0
  166. package/dist/operations/services/workflow-timing.d.ts +25 -0
  167. package/dist/operations/services/workflow-timing.js +79 -0
  168. package/dist/operations/services/workspace-dependency-mode.js +50 -5
  169. package/dist/operations/services/workspace-preflight.js +8 -8
  170. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  171. package/dist/operations/services/workspace-save.d.ts +1 -0
  172. package/dist/operations/services/workspace-save.js +42 -19
  173. package/dist/operations/services/workspace-tools.js +42 -7
  174. package/dist/operations-registry.d.ts +1 -1
  175. package/dist/operations-registry.js +5 -6
  176. package/dist/operations-types.d.ts +1 -1
  177. package/dist/operations.d.ts +17 -11
  178. package/dist/operations.js +57 -3
  179. package/dist/platform/book-export.js +2 -0
  180. package/dist/platform/books-data.d.ts +1 -1
  181. package/dist/platform/config.d.ts +27 -0
  182. package/dist/platform/config.js +100 -0
  183. package/dist/platform/content-runtime-source.d.ts +54 -0
  184. package/dist/platform/content-runtime-source.js +169 -0
  185. package/dist/platform/contracts.d.ts +38 -2
  186. package/dist/platform/deploy-config.d.ts +1 -1
  187. package/dist/platform/deploy-config.js +80 -9
  188. package/dist/platform/deploy-runtime.d.ts +1 -1
  189. package/dist/platform/desired-state.d.ts +63 -0
  190. package/dist/platform/desired-state.js +1021 -0
  191. package/dist/platform/env.yaml +568 -45
  192. package/dist/platform/environment.d.ts +3 -2
  193. package/dist/platform/environment.js +122 -21
  194. package/dist/platform/local-content-materialization.d.ts +9 -0
  195. package/dist/platform/local-content-materialization.js +212 -0
  196. package/dist/platform/plugin.d.ts +13 -4
  197. package/dist/platform/plugins/runtime.d.ts +3 -3
  198. package/dist/platform/plugins/runtime.js +62 -1
  199. package/dist/platform/plugins.d.ts +6 -6
  200. package/dist/platform/published-content-pipeline.d.ts +3 -3
  201. package/dist/platform/published-content-pipeline.js +5 -1
  202. package/dist/platform/published-content.d.ts +4 -3
  203. package/dist/platform/site-config-schema.d.ts +1 -0
  204. package/dist/platform/site-config-schema.js +4 -1
  205. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  206. package/dist/platform/tenant-config.d.ts +1 -1
  207. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  208. package/dist/platform/utils/site-config-schema.js +400 -461
  209. package/dist/platform-operation-store.d.ts +1 -1
  210. package/dist/platform-operation-store.js +2 -2
  211. package/dist/platform-operations.js +1 -1
  212. package/dist/plugin-default.d.ts +1 -1
  213. package/dist/plugin-default.js +27 -12
  214. package/dist/project-import.d.ts +91 -0
  215. package/dist/project-import.js +257 -0
  216. package/dist/project-workflow.d.ts +1 -1
  217. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  218. package/dist/reconcile/bootstrap-systems.js +5 -5
  219. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  220. package/dist/reconcile/builtin-adapters.js +3190 -429
  221. package/dist/reconcile/contracts.d.ts +23 -6
  222. package/dist/reconcile/desired-state.d.ts +2 -192
  223. package/dist/reconcile/desired-state.js +29 -38
  224. package/dist/reconcile/engine.d.ts +61 -395
  225. package/dist/reconcile/engine.js +229 -44
  226. package/dist/reconcile/index.d.ts +10 -8
  227. package/dist/reconcile/index.js +2 -0
  228. package/dist/reconcile/live-acceptance.d.ts +100 -0
  229. package/dist/reconcile/live-acceptance.js +2027 -0
  230. package/dist/reconcile/platform.d.ts +104 -0
  231. package/dist/reconcile/platform.js +100 -0
  232. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  233. package/dist/reconcile/providers/docker-private.js +101 -0
  234. package/dist/reconcile/providers/github-private.d.ts +65 -0
  235. package/dist/reconcile/providers/github-private.js +119 -0
  236. package/dist/reconcile/providers/local-private.d.ts +28 -0
  237. package/dist/reconcile/providers/local-private.js +75 -0
  238. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  239. package/dist/reconcile/providers/railway-iac.js +275 -0
  240. package/dist/reconcile/providers/release-private.d.ts +92 -0
  241. package/dist/reconcile/providers/release-private.js +152 -0
  242. package/dist/reconcile/registry.d.ts +2 -2
  243. package/dist/reconcile/registry.js +16 -1
  244. package/dist/reconcile/state.d.ts +1 -1
  245. package/dist/reconcile/state.js +7 -44
  246. package/dist/reconcile/units.d.ts +1 -1
  247. package/dist/reconcile/units.js +9 -3
  248. package/dist/remote.d.ts +6 -6
  249. package/dist/scenes/artifacts.d.ts +16 -0
  250. package/dist/scenes/artifacts.js +61 -0
  251. package/dist/scenes/auth.d.ts +2 -0
  252. package/dist/scenes/auth.js +28 -0
  253. package/dist/scenes/base-url.d.ts +12 -0
  254. package/dist/scenes/base-url.js +123 -0
  255. package/dist/scenes/builtin-plugins.d.ts +2 -0
  256. package/dist/scenes/builtin-plugins.js +447 -0
  257. package/dist/scenes/checkpoints.d.ts +14 -0
  258. package/dist/scenes/checkpoints.js +33 -0
  259. package/dist/scenes/device-matrix.d.ts +2 -0
  260. package/dist/scenes/device-matrix.js +97 -0
  261. package/dist/scenes/devices.d.ts +11 -0
  262. package/dist/scenes/devices.js +22 -0
  263. package/dist/scenes/diagnostics.d.ts +5 -0
  264. package/dist/scenes/diagnostics.js +22 -0
  265. package/dist/scenes/diagram-providers.d.ts +2 -0
  266. package/dist/scenes/diagram-providers.js +181 -0
  267. package/dist/scenes/diagram-validation.d.ts +22 -0
  268. package/dist/scenes/diagram-validation.js +74 -0
  269. package/dist/scenes/environment.d.ts +2 -0
  270. package/dist/scenes/environment.js +65 -0
  271. package/dist/scenes/evidence-bundle.d.ts +5 -0
  272. package/dist/scenes/evidence-bundle.js +42 -0
  273. package/dist/scenes/evidence-report.d.ts +10 -0
  274. package/dist/scenes/evidence-report.js +73 -0
  275. package/dist/scenes/evidence.d.ts +16 -0
  276. package/dist/scenes/evidence.js +277 -0
  277. package/dist/scenes/index.d.ts +48 -0
  278. package/dist/scenes/index.js +312 -0
  279. package/dist/scenes/inspect.d.ts +9 -0
  280. package/dist/scenes/inspect.js +64 -0
  281. package/dist/scenes/loader.d.ts +3 -0
  282. package/dist/scenes/loader.js +38 -0
  283. package/dist/scenes/logs.d.ts +2 -0
  284. package/dist/scenes/logs.js +47 -0
  285. package/dist/scenes/operations.d.ts +3 -0
  286. package/dist/scenes/operations.js +128 -0
  287. package/dist/scenes/phase0.d.ts +9 -0
  288. package/dist/scenes/phase0.js +637 -0
  289. package/dist/scenes/planner.d.ts +12 -0
  290. package/dist/scenes/planner.js +166 -0
  291. package/dist/scenes/playwright-adapter.d.ts +2 -0
  292. package/dist/scenes/playwright-adapter.js +63 -0
  293. package/dist/scenes/plugins.d.ts +5 -0
  294. package/dist/scenes/plugins.js +115 -0
  295. package/dist/scenes/progress.d.ts +17 -0
  296. package/dist/scenes/progress.js +24 -0
  297. package/dist/scenes/publish-destinations.d.ts +12 -0
  298. package/dist/scenes/publish-destinations.js +99 -0
  299. package/dist/scenes/publish-plan-report.d.ts +10 -0
  300. package/dist/scenes/publish-plan-report.js +70 -0
  301. package/dist/scenes/publish-plan.d.ts +15 -0
  302. package/dist/scenes/publish-plan.js +248 -0
  303. package/dist/scenes/publish-redaction.d.ts +16 -0
  304. package/dist/scenes/publish-redaction.js +148 -0
  305. package/dist/scenes/publish-release-record.d.ts +13 -0
  306. package/dist/scenes/publish-release-record.js +34 -0
  307. package/dist/scenes/publish-report.d.ts +10 -0
  308. package/dist/scenes/publish-report.js +67 -0
  309. package/dist/scenes/publish.d.ts +16 -0
  310. package/dist/scenes/publish.js +298 -0
  311. package/dist/scenes/registry.d.ts +12 -0
  312. package/dist/scenes/registry.js +65 -0
  313. package/dist/scenes/remotion-adapter.d.ts +3 -0
  314. package/dist/scenes/remotion-adapter.js +94 -0
  315. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  316. package/dist/scenes/remotion-composition-registry.js +12 -0
  317. package/dist/scenes/remotion-compositions.d.ts +15 -0
  318. package/dist/scenes/remotion-compositions.js +464 -0
  319. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  320. package/dist/scenes/remotion-diagrams.js +188 -0
  321. package/dist/scenes/remotion-input.d.ts +13 -0
  322. package/dist/scenes/remotion-input.js +291 -0
  323. package/dist/scenes/remotion-visuals.d.ts +29 -0
  324. package/dist/scenes/remotion-visuals.js +198 -0
  325. package/dist/scenes/render-media-assets.d.ts +9 -0
  326. package/dist/scenes/render-media-assets.js +117 -0
  327. package/dist/scenes/render-report.d.ts +10 -0
  328. package/dist/scenes/render-report.js +27 -0
  329. package/dist/scenes/render.d.ts +2 -0
  330. package/dist/scenes/render.js +218 -0
  331. package/dist/scenes/reporter.d.ts +3 -0
  332. package/dist/scenes/reporter.js +101 -0
  333. package/dist/scenes/resume.d.ts +2 -0
  334. package/dist/scenes/resume.js +79 -0
  335. package/dist/scenes/runner.d.ts +2 -0
  336. package/dist/scenes/runner.js +674 -0
  337. package/dist/scenes/schema.d.ts +6 -0
  338. package/dist/scenes/schema.js +994 -0
  339. package/dist/scenes/seed.d.ts +2 -0
  340. package/dist/scenes/seed.js +83 -0
  341. package/dist/scenes/segments.d.ts +15 -0
  342. package/dist/scenes/segments.js +79 -0
  343. package/dist/scenes/selectors.d.ts +3 -0
  344. package/dist/scenes/selectors.js +21 -0
  345. package/dist/scenes/timeline.d.ts +11 -0
  346. package/dist/scenes/timeline.js +26 -0
  347. package/dist/scenes/timeouts.d.ts +6 -0
  348. package/dist/scenes/timeouts.js +17 -0
  349. package/dist/scenes/training-captions.d.ts +14 -0
  350. package/dist/scenes/training-captions.js +98 -0
  351. package/dist/scenes/training-report.d.ts +10 -0
  352. package/dist/scenes/training-report.js +78 -0
  353. package/dist/scenes/training-transcript.d.ts +24 -0
  354. package/dist/scenes/training-transcript.js +204 -0
  355. package/dist/scenes/training.d.ts +10 -0
  356. package/dist/scenes/training.js +134 -0
  357. package/dist/scenes/types.d.ts +1872 -0
  358. package/dist/scenes/types.js +8 -0
  359. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  360. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  361. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  362. package/dist/scenes/visual-audit-fixtures.js +210 -0
  363. package/dist/scenes/visual-audit-report.d.ts +11 -0
  364. package/dist/scenes/visual-audit-report.js +85 -0
  365. package/dist/scenes/visual-audit-review.d.ts +23 -0
  366. package/dist/scenes/visual-audit-review.js +829 -0
  367. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  368. package/dist/scenes/visual-audit-routes.js +308 -0
  369. package/dist/scenes/visual-audit.d.ts +3 -0
  370. package/dist/scenes/visual-audit.js +596 -0
  371. package/dist/scripts/build-dist.js +154 -40
  372. package/dist/scripts/check-build-warnings.js +42 -53
  373. package/dist/scripts/cleanup-markdown.js +1 -1
  374. package/dist/scripts/cli-test-fixtures.js +24 -28
  375. package/dist/scripts/deployment-readiness.js +20 -0
  376. package/dist/scripts/generate-treedx-openapi-types.js +186 -0
  377. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  378. package/dist/scripts/operations-runner-smoke.js +16 -0
  379. package/dist/scripts/package-tools.js +12 -1
  380. package/dist/scripts/prepare.js +3 -7
  381. package/dist/scripts/release-verify.js +6 -6
  382. package/dist/scripts/run-fixture-astro-command.js +1 -1
  383. package/dist/scripts/template-catalog.test.js +68 -82
  384. package/dist/scripts/tenant-dev.js +0 -10
  385. package/dist/scripts/tenant-workflow-action.js +10 -1
  386. package/dist/scripts/test-cloudflare-local.js +1 -1
  387. package/dist/scripts/test-scaffold.js +0 -1
  388. package/dist/scripts/test-smoke.js +3 -3
  389. package/dist/scripts/treeseed-build-dist.js +4 -7
  390. package/dist/scripts/treeseed-release-verify.js +1 -1
  391. package/dist/scripts/verify-driver.js +30 -21
  392. package/dist/scripts/workflow-commands.test.js +18 -27
  393. package/dist/scripts/workspace-command-e2e.js +1 -1
  394. package/dist/scripts/workspace-lint.js +6 -0
  395. package/dist/scripts/workspace-release-test.js +90 -1
  396. package/dist/scripts/workspace-test.js +6 -0
  397. package/dist/sdk-dispatch.d.ts +1 -1
  398. package/dist/sdk-dispatch.js +0 -16
  399. package/dist/sdk-fields.d.ts +1 -1
  400. package/dist/sdk-filters.d.ts +1 -1
  401. package/dist/sdk-types.d.ts +1352 -116
  402. package/dist/sdk-types.js +413 -2
  403. package/dist/sdk.d.ts +106 -100
  404. package/dist/sdk.js +211 -51
  405. package/dist/secrets-capability.d.ts +421 -0
  406. package/dist/secrets-capability.js +530 -0
  407. package/dist/seeds/normalize.js +1 -0
  408. package/dist/seeds/planner.js +38 -0
  409. package/dist/seeds/schema.js +293 -4
  410. package/dist/seeds/types.d.ts +60 -0
  411. package/dist/seeds/types.js +9 -1
  412. package/dist/service-credentials.d.ts +54 -0
  413. package/dist/service-credentials.js +112 -0
  414. package/dist/stores/cursor-store.d.ts +2 -2
  415. package/dist/stores/envelopes.d.ts +1 -1
  416. package/dist/stores/helpers.d.ts +1 -1
  417. package/dist/stores/lease-store.d.ts +2 -2
  418. package/dist/stores/message-store.d.ts +2 -2
  419. package/dist/stores/operational-store.d.ts +3 -26
  420. package/dist/stores/operational-store.js +0 -225
  421. package/dist/stores/project-workflow-store.d.ts +2 -2
  422. package/dist/stores/run-store.d.ts +2 -3
  423. package/dist/stores/run-store.js +0 -98
  424. package/dist/stores/subscription-store.d.ts +2 -3
  425. package/dist/stores/subscription-store.js +0 -100
  426. package/dist/template-catalog.d.ts +1 -1
  427. package/dist/template-launch-requirements.d.ts +2 -2
  428. package/dist/template-launch-requirements.js +9 -0
  429. package/dist/template-launch-ui.d.ts +2 -2
  430. package/dist/treedx/adapters.d.ts +6 -0
  431. package/dist/treedx/adapters.js +36 -0
  432. package/dist/treedx/client.d.ts +222 -0
  433. package/dist/treedx/client.js +871 -0
  434. package/dist/treedx/errors.d.ts +13 -0
  435. package/dist/treedx/errors.js +17 -0
  436. package/dist/treedx/federated-client.d.ts +27 -0
  437. package/dist/treedx/federated-client.js +158 -0
  438. package/dist/treedx/generated/openapi-types.d.ts +3558 -0
  439. package/dist/treedx/generated/openapi-types.js +0 -0
  440. package/dist/treedx/graph-adapter.d.ts +33 -0
  441. package/dist/treedx/graph-adapter.js +156 -0
  442. package/dist/treedx/index.d.ts +14 -0
  443. package/dist/treedx/index.js +48 -0
  444. package/dist/treedx/market-integration.d.ts +27 -0
  445. package/dist/treedx/market-integration.js +131 -0
  446. package/dist/treedx/ports.d.ts +166 -0
  447. package/dist/treedx/ports.js +231 -0
  448. package/dist/treedx/query-adapter.d.ts +19 -0
  449. package/dist/treedx/query-adapter.js +62 -0
  450. package/dist/treedx/registry-client.d.ts +11 -0
  451. package/dist/treedx/registry-client.js +19 -0
  452. package/dist/treedx/repository-adapter.d.ts +45 -0
  453. package/dist/treedx/repository-adapter.js +319 -0
  454. package/dist/treedx/sdk-integration.d.ts +27 -0
  455. package/dist/treedx/sdk-integration.js +63 -0
  456. package/dist/treedx/types.d.ts +1084 -0
  457. package/dist/treedx/types.js +8 -0
  458. package/dist/treedx/workspace-adapter.d.ts +27 -0
  459. package/dist/treedx/workspace-adapter.js +65 -0
  460. package/dist/treedx-backends.d.ts +220 -0
  461. package/dist/treedx-backends.js +634 -0
  462. package/dist/treedx-client.d.ts +89 -0
  463. package/dist/treedx-client.js +184 -0
  464. package/dist/treeseed/services/compose.yml +2 -3
  465. package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
  466. package/dist/types/agents.d.ts +256 -0
  467. package/dist/types/agents.js +42 -1
  468. package/dist/verification.d.ts +1 -0
  469. package/dist/verification.js +143 -14
  470. package/dist/workflow/operations.d.ts +580 -523
  471. package/dist/workflow/operations.js +2084 -1279
  472. package/dist/workflow/policy.js +19 -7
  473. package/dist/workflow/runs.d.ts +9 -3
  474. package/dist/workflow/runs.js +66 -26
  475. package/dist/workflow/session.d.ts +4 -1
  476. package/dist/workflow/session.js +50 -10
  477. package/dist/workflow/worktrees.d.ts +6 -2
  478. package/dist/workflow/worktrees.js +98 -15
  479. package/dist/workflow-state.d.ts +17 -4
  480. package/dist/workflow-state.js +68 -41
  481. package/dist/workflow-support.d.ts +26 -17
  482. package/dist/workflow-support.js +84 -24
  483. package/dist/workflow.d.ts +51 -16
  484. package/dist/workflow.js +19 -7
  485. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  486. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  487. package/drizzle/market/0004_treedx_market_integration.sql +99 -0
  488. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  489. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  490. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  491. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  492. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  493. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  494. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  495. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  496. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  497. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  498. package/package.json +106 -18
  499. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  500. package/templates/github/deploy-web.workflow.yml +49 -12
  501. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  502. package/dist/operations/services/mailpit-runtime.js +0 -67
  503. package/dist/operations/services/release-candidate.d.ts +0 -41
  504. package/dist/operations/services/release-candidate.js +0 -616
  505. package/dist/scripts/ensure-mailpit.js +0 -48
  506. package/dist/scripts/logs-mailpit.js +0 -2
  507. package/dist/scripts/run-ts.js +0 -45
  508. package/dist/scripts/stop-mailpit.js +0 -5
  509. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -0,0 +1,248 @@
1
+ import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { sceneErrorDiagnostic, sceneWarningDiagnostic } from "./diagnostics.js";
4
+ import {
5
+ DEFAULT_TREESEED_SCENE_PUBLICATION_TARGETS,
6
+ createTreeseedScenePublishDestinations,
7
+ destinationIdsForTreeseedScenePublishedArtifact,
8
+ isTreeseedSceneExternalPublishTarget
9
+ } from "./publish-destinations.js";
10
+ import { resolveTreeseedSceneRunRoot } from "./inspect.js";
11
+ import { validateTreeseedScene } from "./planner.js";
12
+ import { publishTreeseedSceneEvidence } from "./publish.js";
13
+ import { appendTreeseedScenePublishPlanPaths, writeTreeseedScenePublishPlanReport } from "./publish-plan-report.js";
14
+ function readJson(path) {
15
+ return JSON.parse(readFileSync(path, "utf8"));
16
+ }
17
+ function writeJson(path, value) {
18
+ mkdirSync(dirname(path), { recursive: true });
19
+ writeFileSync(path, `${JSON.stringify(value, null, 2)}
20
+ `, "utf8");
21
+ }
22
+ function nowIso() {
23
+ return (/* @__PURE__ */ new Date()).toISOString();
24
+ }
25
+ function safeExportPath(exportRoot, relativePath) {
26
+ return join(exportRoot, relativePath.replace(/^(\.\.[/\\])+/u, "").replace(/^[/\\]+/u, ""));
27
+ }
28
+ function failedReport(input) {
29
+ const blockers = input.blockers ?? input.diagnostics.filter((diagnostic) => diagnostic.severity === "error");
30
+ return {
31
+ ok: false,
32
+ phase: 11,
33
+ sceneId: input.sceneId ?? null,
34
+ sourceRunId: input.sourceRunId ?? null,
35
+ scenePath: input.scenePath,
36
+ runRoot: input.runRoot,
37
+ publishRoot: input.publishRoot ?? (input.runRoot ? join(input.runRoot, "publish") : null),
38
+ publishPlanRoot: input.publishPlanRoot ?? (input.runRoot ? join(input.runRoot, "publish-plan") : null),
39
+ manifest: input.manifest ?? null,
40
+ paths: input.paths ?? null,
41
+ diagnostics: input.diagnostics,
42
+ warnings: input.warnings ?? input.diagnostics.filter((diagnostic) => diagnostic.severity === "warning"),
43
+ blockers
44
+ };
45
+ }
46
+ function validateTargets(targets) {
47
+ return targets.filter((target) => !isTreeseedSceneExternalPublishTarget(target)).map((target) => sceneErrorDiagnostic("scene.publish_plan_target_unsupported", `Unsupported scene publication target "${String(target)}".`, "target"));
48
+ }
49
+ function buildTreeseedScenePublishPlanManifest(input) {
50
+ const diagnostics = [...input.publish.diagnostics, ...validateTargets(input.targets)];
51
+ if (input.targets.includes("release-evidence") && input.publish.workflowStatus !== "passed") {
52
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_plan_release_blocked", "Release-evidence publication planning is blocked until the scene workflow passes.", "target"));
53
+ }
54
+ const validTargets = input.targets.filter(isTreeseedSceneExternalPublishTarget);
55
+ const destinations = createTreeseedScenePublishDestinations({ runRoot: input.runRoot, targets: validTargets });
56
+ const artifacts = input.publish.artifacts.map((artifact) => ({
57
+ id: artifact.id,
58
+ kind: artifact.kind,
59
+ sourcePath: artifact.publishedPath ?? artifact.sourcePath,
60
+ relativePath: artifact.relativePath,
61
+ destinationIds: destinationIdsForTreeseedScenePublishedArtifact({ artifact, targets: validTargets }),
62
+ sha256: artifact.sha256,
63
+ bytes: artifact.bytes,
64
+ redactionDecision: artifact.decision
65
+ })).filter((artifact) => artifact.destinationIds.length > 0);
66
+ if (artifacts.length === 0) {
67
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_plan_no_artifacts", "No redacted published artifacts matched the selected publication targets.", "publish-plan"));
68
+ }
69
+ return {
70
+ schemaVersion: "treeseed.scene.publish-plan/v1",
71
+ phase: 11,
72
+ generatedAt: input.timestamp ?? nowIso(),
73
+ sourcePublishManifestPath: input.publishManifestPath,
74
+ sourceRunRoot: input.runRoot,
75
+ sceneId: input.publish.sceneId,
76
+ sourceRunId: input.publish.sourceRunId,
77
+ workflowStatus: input.publish.workflowStatus,
78
+ mode: input.mode,
79
+ targets: validTargets,
80
+ destinations,
81
+ artifacts,
82
+ reconciliationIntents: destinations.map((destination) => ({
83
+ id: `scene-publication-${destination.target}`,
84
+ target: destination.target,
85
+ action: "plan-only",
86
+ reason: "Phase 11 records publication intent for a future canonical reconciliation apply; it does not mutate external stores.",
87
+ desiredState: destination.reconciliationResource.desiredState
88
+ })),
89
+ diagnostics
90
+ };
91
+ }
92
+ function writeTreeseedScenePublishPlan(input) {
93
+ const publishPlanRoot = join(input.runRoot, "publish-plan");
94
+ const exportRoot = input.manifest.mode === "local-export" ? join(publishPlanRoot, "export") : null;
95
+ const paths = {
96
+ publishPlanRoot,
97
+ manifestPath: join(publishPlanRoot, "manifest.json"),
98
+ reportPath: join(publishPlanRoot, "report.md"),
99
+ exportRoot,
100
+ exportManifestPath: exportRoot ? join(exportRoot, "export-manifest.json") : null
101
+ };
102
+ if (exportRoot) {
103
+ const copied = [];
104
+ for (const destination of input.manifest.destinations) {
105
+ mkdirSync(destination.root, { recursive: true });
106
+ for (const artifact of input.manifest.artifacts.filter((entry) => entry.destinationIds.includes(destination.id))) {
107
+ if (destination.target === "artifact-store") {
108
+ copied.push({
109
+ artifactId: artifact.id,
110
+ destinationId: destination.id,
111
+ sourcePath: artifact.sourcePath,
112
+ exportedPath: null,
113
+ relativePath: artifact.relativePath
114
+ });
115
+ continue;
116
+ }
117
+ if (!existsSync(artifact.sourcePath)) continue;
118
+ const targetPath = safeExportPath(destination.root, artifact.relativePath);
119
+ mkdirSync(dirname(targetPath), { recursive: true });
120
+ copyFileSync(artifact.sourcePath, targetPath);
121
+ copied.push({
122
+ artifactId: artifact.id,
123
+ destinationId: destination.id,
124
+ sourcePath: artifact.sourcePath,
125
+ exportedPath: targetPath,
126
+ relativePath: artifact.relativePath
127
+ });
128
+ }
129
+ }
130
+ writeJson(paths.exportManifestPath, {
131
+ schemaVersion: "treeseed.scene.publication-export/v1",
132
+ phase: 11,
133
+ generatedAt: input.manifest.generatedAt,
134
+ sceneId: input.manifest.sceneId,
135
+ sourceRunId: input.manifest.sourceRunId,
136
+ targets: input.manifest.targets,
137
+ destinations: input.manifest.destinations,
138
+ artifacts: copied
139
+ });
140
+ }
141
+ writeTreeseedScenePublishPlanReport({ manifest: input.manifest, paths });
142
+ return paths;
143
+ }
144
+ async function loadOrGenerateLocalPublish(input) {
145
+ const publishManifestPath = join(input.runRoot, "publish", "local", "manifest.json");
146
+ if (existsSync(publishManifestPath)) {
147
+ return { publish: readJson(publishManifestPath), publishManifestPath, diagnostics: [], warnings: [] };
148
+ }
149
+ const report = await publishTreeseedSceneEvidence({
150
+ projectRoot: input.projectRoot,
151
+ scene: input.scene,
152
+ from: input.from,
153
+ target: "local",
154
+ timestamp: input.timestamp
155
+ });
156
+ if (!report.ok || !report.manifest || !report.paths) {
157
+ return { publish: null, publishManifestPath, diagnostics: report.diagnostics, warnings: report.warnings };
158
+ }
159
+ const warning = sceneWarningDiagnostic("scene.publish_plan_missing_publish", "Local Phase 10 publish manifest was missing, so Phase 11 generated a local redacted publish bundle first.", "publish/local/manifest.json");
160
+ return {
161
+ publish: report.manifest,
162
+ publishManifestPath: report.paths.manifestPath,
163
+ diagnostics: [warning, ...report.diagnostics],
164
+ warnings: [warning, ...report.warnings]
165
+ };
166
+ }
167
+ async function runPublicationPlan(input) {
168
+ const resolved = resolveTreeseedSceneRunRoot(input.projectRoot, input.from);
169
+ if (!resolved.runRoot) return failedReport({ scenePath: input.scene, runRoot: null, diagnostics: resolved.diagnostics });
170
+ const scenePath = join(resolved.runRoot, "scene.normalized.json");
171
+ const runPath = join(resolved.runRoot, "run.json");
172
+ const blockers = [];
173
+ if (!existsSync(scenePath)) blockers.push(sceneErrorDiagnostic("scene.publish_plan_missing_scene", `Normalized scene artifact not found: ${scenePath}.`, "scene"));
174
+ if (!existsSync(runPath)) blockers.push(sceneErrorDiagnostic("scene.publish_plan_missing_run", `Run report artifact not found: ${runPath}.`, "from"));
175
+ if (blockers.length > 0) return failedReport({ scenePath: input.scene, runRoot: resolved.runRoot, diagnostics: [...resolved.diagnostics, ...blockers], blockers });
176
+ const sourceScene = readJson(scenePath);
177
+ const run = readJson(runPath);
178
+ const validation = validateTreeseedScene({ projectRoot: input.projectRoot, scene: input.scene });
179
+ if (!validation.ok) return failedReport({ scenePath: validation.scenePath, runRoot: resolved.runRoot, diagnostics: validation.diagnostics, sceneId: sourceScene.id, sourceRunId: run.runId });
180
+ if (validation.scene?.id !== sourceScene.id) {
181
+ const diagnostic = sceneErrorDiagnostic("scene.publish_plan_scene_mismatch", `Scene manifest "${validation.scene?.id ?? "(unknown)"}" does not match source run scene "${sourceScene.id}".`, "scene");
182
+ return failedReport({ scenePath: validation.scenePath, runRoot: resolved.runRoot, diagnostics: [diagnostic], blockers: [diagnostic], sceneId: sourceScene.id, sourceRunId: run.runId });
183
+ }
184
+ const targets = input.targets ?? DEFAULT_TREESEED_SCENE_PUBLICATION_TARGETS;
185
+ const targetDiagnostics = validateTargets(targets);
186
+ if (targetDiagnostics.length > 0) {
187
+ return failedReport({ scenePath: validation.scenePath, runRoot: resolved.runRoot, diagnostics: targetDiagnostics, blockers: targetDiagnostics, sceneId: sourceScene.id, sourceRunId: run.runId });
188
+ }
189
+ const publishResult = await loadOrGenerateLocalPublish({ projectRoot: input.projectRoot, scene: input.scene, from: input.from, runRoot: resolved.runRoot, timestamp: input.timestamp });
190
+ if (!publishResult.publish) {
191
+ return failedReport({ scenePath: validation.scenePath, runRoot: resolved.runRoot, diagnostics: publishResult.diagnostics, warnings: publishResult.warnings, blockers: publishResult.diagnostics.filter((diagnostic) => diagnostic.severity === "error"), sceneId: sourceScene.id, sourceRunId: run.runId });
192
+ }
193
+ const manifest = buildTreeseedScenePublishPlanManifest({
194
+ publish: publishResult.publish,
195
+ publishManifestPath: publishResult.publishManifestPath,
196
+ runRoot: resolved.runRoot,
197
+ targets,
198
+ mode: input.mode,
199
+ timestamp: input.timestamp
200
+ });
201
+ const manifestErrors = manifest.diagnostics.filter((diagnostic) => diagnostic.severity === "error" && diagnostic.code.startsWith("scene.publish_plan_"));
202
+ if (manifestErrors.length > 0) {
203
+ return failedReport({
204
+ scenePath: validation.scenePath,
205
+ runRoot: resolved.runRoot,
206
+ diagnostics: [...publishResult.diagnostics, ...manifest.diagnostics],
207
+ warnings: publishResult.warnings,
208
+ blockers: manifestErrors,
209
+ sceneId: sourceScene.id,
210
+ sourceRunId: run.runId,
211
+ manifest
212
+ });
213
+ }
214
+ try {
215
+ const paths = writeTreeseedScenePublishPlan({ runRoot: resolved.runRoot, manifest });
216
+ const updateWarnings = appendTreeseedScenePublishPlanPaths({ runPath, paths });
217
+ return {
218
+ ok: true,
219
+ phase: 11,
220
+ sceneId: sourceScene.id,
221
+ sourceRunId: run.runId,
222
+ scenePath: validation.scenePath,
223
+ runRoot: resolved.runRoot,
224
+ publishRoot: join(resolved.runRoot, "publish"),
225
+ publishPlanRoot: paths.publishPlanRoot,
226
+ manifest,
227
+ paths,
228
+ diagnostics: [...publishResult.diagnostics, ...updateWarnings],
229
+ warnings: [...publishResult.warnings, ...updateWarnings],
230
+ blockers: []
231
+ };
232
+ } catch (error) {
233
+ const diagnostic = sceneErrorDiagnostic(input.mode === "local-export" ? "scene.publish_plan_export_failed" : "scene.publish_plan_write_failed", `Publish plan artifacts could not be written. ${error instanceof Error ? error.message : String(error ?? "")}`.trim(), "publish-plan");
234
+ return failedReport({ scenePath: validation.scenePath, runRoot: resolved.runRoot, diagnostics: [diagnostic], warnings: publishResult.warnings, blockers: [diagnostic], sceneId: sourceScene.id, sourceRunId: run.runId, manifest });
235
+ }
236
+ }
237
+ function planTreeseedScenePublication(input) {
238
+ return runPublicationPlan({ ...input, mode: input.mode ?? "plan" });
239
+ }
240
+ function exportTreeseedScenePublication(input) {
241
+ return runPublicationPlan({ ...input, mode: "local-export" });
242
+ }
243
+ export {
244
+ buildTreeseedScenePublishPlanManifest,
245
+ exportTreeseedScenePublication,
246
+ planTreeseedScenePublication,
247
+ writeTreeseedScenePublishPlan
248
+ };
@@ -0,0 +1,16 @@
1
+ import type { TreeseedSceneDiagnostic, TreeseedSceneEvidenceArtifactKind, TreeseedSceneRedactionPolicy, TreeseedSceneRedactionRule, TreeseedScenePublishTarget, TreeseedSceneRunStatus } from './types.js';
2
+ export declare function createDefaultTreeseedSceneRedactionPolicy(target: TreeseedScenePublishTarget): TreeseedSceneRedactionPolicy;
3
+ export declare function validateTreeseedSceneRedactionPolicy(input: {
4
+ policy: unknown;
5
+ path?: string;
6
+ }): TreeseedSceneDiagnostic[];
7
+ export declare function readTreeseedSceneRedactionPolicyFile(path: string): {
8
+ policy: TreeseedSceneRedactionPolicy | null;
9
+ diagnostics: TreeseedSceneDiagnostic[];
10
+ };
11
+ export declare function resolveTreeseedSceneRedactionRule(input: {
12
+ policy: TreeseedSceneRedactionPolicy;
13
+ artifactKind: TreeseedSceneEvidenceArtifactKind;
14
+ target: TreeseedScenePublishTarget;
15
+ workflowStatus: TreeseedSceneRunStatus;
16
+ }): TreeseedSceneRedactionRule | null;
@@ -0,0 +1,148 @@
1
+ import { parse as parseYaml } from "yaml";
2
+ import { readFileSync } from "node:fs";
3
+ import { extname } from "node:path";
4
+ import { sceneErrorDiagnostic } from "./diagnostics.js";
5
+ const EVIDENCE_ARTIFACT_KINDS = /* @__PURE__ */ new Set([
6
+ "run-report",
7
+ "markdown-report",
8
+ "timeline",
9
+ "setup",
10
+ "progress",
11
+ "segment",
12
+ "checkpoint",
13
+ "screenshot",
14
+ "render-report",
15
+ "render-video",
16
+ "training-output",
17
+ "log-summary"
18
+ ]);
19
+ const RUN_STATUSES = /* @__PURE__ */ new Set(["passed", "failed", "blocked", "skipped"]);
20
+ const PUBLISH_TARGETS = /* @__PURE__ */ new Set(["local", "release"]);
21
+ function isRecord(value) {
22
+ return typeof value === "object" && value !== null && !Array.isArray(value);
23
+ }
24
+ function stringArray(value) {
25
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) return null;
26
+ return value;
27
+ }
28
+ function ruleApplies(input) {
29
+ const target = input.rule.allowWhen?.target;
30
+ if (target && !target.includes(input.target)) return false;
31
+ const workflowStatus = input.rule.allowWhen?.workflowStatus;
32
+ if (workflowStatus && !workflowStatus.includes(input.workflowStatus)) return false;
33
+ return true;
34
+ }
35
+ function createDefaultTreeseedSceneRedactionPolicy(target) {
36
+ void target;
37
+ const include = (artifactKind, reason) => ({
38
+ id: `include-${artifactKind}`,
39
+ artifactKind,
40
+ include: true,
41
+ reason
42
+ });
43
+ return {
44
+ schemaVersion: "treeseed.scene.redaction-policy/v1",
45
+ id: "treeseed.scene.redaction.default",
46
+ mode: "deny-by-default",
47
+ rules: [
48
+ include("run-report", "Run report metadata is safe for local evidence publication."),
49
+ include("markdown-report", "Markdown summary is safe for local evidence publication."),
50
+ include("timeline", "Timeline metadata is safe for local evidence publication."),
51
+ include("setup", "Setup summary is safe for local evidence publication."),
52
+ include("progress", "Progress events are safe for local evidence publication."),
53
+ include("segment", "Segment metadata is safe for local evidence publication."),
54
+ include("checkpoint", "Checkpoint metadata is safe for local evidence publication."),
55
+ include("screenshot", "Only screenshots already selected by sanitized evidence are safe for publication."),
56
+ include("render-report", "Render report metadata is safe for local evidence publication."),
57
+ include("training-output", "Deterministic training sidecars are safe for local evidence publication.")
58
+ ]
59
+ };
60
+ }
61
+ function validateTreeseedSceneRedactionPolicy(input) {
62
+ const diagnostics = [];
63
+ const policy = input.policy;
64
+ if (!isRecord(policy)) {
65
+ return [sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy must be an object.", input.path)];
66
+ }
67
+ if (policy.schemaVersion !== "treeseed.scene.redaction-policy/v1") {
68
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", 'Redaction policy schemaVersion must be "treeseed.scene.redaction-policy/v1".', input.path ? `${input.path}.schemaVersion` : "schemaVersion"));
69
+ }
70
+ if (typeof policy.id !== "string" || policy.id.trim().length === 0) {
71
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy id is required.", input.path ? `${input.path}.id` : "id"));
72
+ }
73
+ if (policy.mode !== "deny-by-default") {
74
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", 'Redaction policy mode must be "deny-by-default".', input.path ? `${input.path}.mode` : "mode"));
75
+ }
76
+ if (!Array.isArray(policy.rules)) {
77
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy rules must be an array.", input.path ? `${input.path}.rules` : "rules"));
78
+ return diagnostics;
79
+ }
80
+ const seen = /* @__PURE__ */ new Set();
81
+ for (const [index, rawRule] of policy.rules.entries()) {
82
+ const path = input.path ? `${input.path}.rules[${index}]` : `rules[${index}]`;
83
+ if (!isRecord(rawRule)) {
84
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy rule must be an object.", path));
85
+ continue;
86
+ }
87
+ const id = rawRule.id;
88
+ if (typeof id !== "string" || id.trim().length === 0) {
89
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy rule id is required.", `${path}.id`));
90
+ } else if (seen.has(id)) {
91
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", `Duplicate redaction policy rule id "${id}".`, `${path}.id`));
92
+ } else {
93
+ seen.add(id);
94
+ }
95
+ if (typeof rawRule.artifactKind !== "string" || !EVIDENCE_ARTIFACT_KINDS.has(rawRule.artifactKind)) {
96
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", `Unsupported redaction artifact kind "${String(rawRule.artifactKind ?? "")}".`, `${path}.artifactKind`));
97
+ }
98
+ if (typeof rawRule.include !== "boolean") {
99
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy rule include must be boolean.", `${path}.include`));
100
+ }
101
+ if (typeof rawRule.reason !== "string" || rawRule.reason.trim().length === 0) {
102
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy rule reason is required.", `${path}.reason`));
103
+ }
104
+ if (rawRule.allowWhen !== void 0) {
105
+ if (!isRecord(rawRule.allowWhen)) {
106
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy allowWhen must be an object.", `${path}.allowWhen`));
107
+ } else {
108
+ const targets = rawRule.allowWhen.target;
109
+ if (targets !== void 0) {
110
+ const values = stringArray(targets);
111
+ if (!values || values.some((value) => !PUBLISH_TARGETS.has(value))) {
112
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy allowWhen.target contains unsupported publish targets.", `${path}.allowWhen.target`));
113
+ }
114
+ }
115
+ const statuses = rawRule.allowWhen.workflowStatus;
116
+ if (statuses !== void 0) {
117
+ const values = stringArray(statuses);
118
+ if (!values || values.some((value) => !RUN_STATUSES.has(value))) {
119
+ diagnostics.push(sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", "Redaction policy allowWhen.workflowStatus contains unsupported run statuses.", `${path}.allowWhen.workflowStatus`));
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ return diagnostics;
126
+ }
127
+ function readTreeseedSceneRedactionPolicyFile(path) {
128
+ try {
129
+ const raw = readFileSync(path, "utf8");
130
+ const parsed = extname(path).toLowerCase() === ".json" ? JSON.parse(raw) : parseYaml(raw);
131
+ const diagnostics = validateTreeseedSceneRedactionPolicy({ policy: parsed, path });
132
+ return { policy: diagnostics.length > 0 ? null : parsed, diagnostics };
133
+ } catch (error) {
134
+ return {
135
+ policy: null,
136
+ diagnostics: [sceneErrorDiagnostic("scene.publish_redaction_policy_invalid", `Redaction policy could not be read. ${error instanceof Error ? error.message : String(error ?? "")}`.trim(), path)]
137
+ };
138
+ }
139
+ }
140
+ function resolveTreeseedSceneRedactionRule(input) {
141
+ return input.policy.rules.find((rule) => rule.artifactKind === input.artifactKind && ruleApplies({ rule, target: input.target, workflowStatus: input.workflowStatus })) ?? null;
142
+ }
143
+ export {
144
+ createDefaultTreeseedSceneRedactionPolicy,
145
+ readTreeseedSceneRedactionPolicyFile,
146
+ resolveTreeseedSceneRedactionRule,
147
+ validateTreeseedSceneRedactionPolicy
148
+ };
@@ -0,0 +1,13 @@
1
+ import type { TreeseedScenePublishManifest } from './types.js';
2
+ export declare function treeseedSceneReleaseEvidenceRecordPath(input: {
3
+ projectRoot: string;
4
+ sceneId: string | null;
5
+ runId: string | null;
6
+ }): string;
7
+ export declare function writeTreeseedSceneReleaseEvidenceRecord(input: {
8
+ projectRoot: string;
9
+ manifest: TreeseedScenePublishManifest;
10
+ manifestPath: string;
11
+ reportPath: string;
12
+ bundleRoot: string;
13
+ }): string;
@@ -0,0 +1,34 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ function safePathPart(value) {
4
+ return (value ?? "unknown").toLowerCase().replace(/[^a-z0-9._-]/gu, "-").replace(/^-+|-+$/gu, "") || "unknown";
5
+ }
6
+ function treeseedSceneReleaseEvidenceRecordPath(input) {
7
+ return join(input.projectRoot, ".treeseed", "workflow", "scene-evidence", safePathPart(input.sceneId), `${safePathPart(input.runId)}.json`);
8
+ }
9
+ function writeTreeseedSceneReleaseEvidenceRecord(input) {
10
+ const path = treeseedSceneReleaseEvidenceRecordPath({
11
+ projectRoot: input.projectRoot,
12
+ sceneId: input.manifest.sceneId,
13
+ runId: input.manifest.sourceRunId
14
+ });
15
+ const record = {
16
+ schemaVersion: "treeseed.scene.release-evidence/v1",
17
+ generatedAt: input.manifest.generatedAt,
18
+ sceneId: input.manifest.sceneId,
19
+ sourceRunId: input.manifest.sourceRunId,
20
+ workflowStatus: input.manifest.workflowStatus,
21
+ publishManifestPath: input.manifestPath,
22
+ publishReportPath: input.reportPath,
23
+ publishBundleRoot: input.bundleRoot,
24
+ sourceEvidenceManifestPath: input.manifest.sourceEvidenceManifestPath
25
+ };
26
+ mkdirSync(dirname(path), { recursive: true });
27
+ writeFileSync(path, `${JSON.stringify(record, null, 2)}
28
+ `, "utf8");
29
+ return path;
30
+ }
31
+ export {
32
+ treeseedSceneReleaseEvidenceRecordPath,
33
+ writeTreeseedSceneReleaseEvidenceRecord
34
+ };
@@ -0,0 +1,10 @@
1
+ import type { TreeseedSceneDiagnostic, TreeseedScenePublishManifest, TreeseedScenePublishPaths } from './types.js';
2
+ export declare function formatTreeseedScenePublishMarkdownReport(manifest: TreeseedScenePublishManifest): string;
3
+ export declare function writeTreeseedScenePublishReport(input: {
4
+ manifest: TreeseedScenePublishManifest;
5
+ paths: TreeseedScenePublishPaths;
6
+ }): void;
7
+ export declare function appendTreeseedScenePublishPaths(input: {
8
+ runPath: string;
9
+ paths: TreeseedScenePublishPaths;
10
+ }): TreeseedSceneDiagnostic[];
@@ -0,0 +1,67 @@
1
+ import { mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { sceneWarningDiagnostic } from "./diagnostics.js";
4
+ function writeJson(path, value) {
5
+ mkdirSync(dirname(path), { recursive: true });
6
+ writeFileSync(path, `${JSON.stringify(value, null, 2)}
7
+ `, "utf8");
8
+ }
9
+ function writeText(path, value) {
10
+ mkdirSync(dirname(path), { recursive: true });
11
+ writeFileSync(path, value, "utf8");
12
+ }
13
+ function formatTreeseedScenePublishMarkdownReport(manifest) {
14
+ const included = manifest.artifacts.filter((artifact) => artifact.decision === "include");
15
+ const excluded = manifest.artifacts.filter((artifact) => artifact.decision !== "include");
16
+ const lines = [
17
+ `# Treeseed Scene Publish: ${manifest.sceneId ?? "(unknown scene)"}`,
18
+ "",
19
+ `Scene: ${manifest.sceneId ?? "(unknown)"}`,
20
+ `Source run: ${manifest.sourceRunId ?? "(unknown)"}`,
21
+ `Target: ${manifest.target}`,
22
+ `Workflow: ${manifest.workflowStatus}`,
23
+ `Policy: ${manifest.redactionPolicy.id}`,
24
+ `Included artifacts: ${included.length}`,
25
+ `Excluded artifacts: ${excluded.length}`,
26
+ `Release record: ${manifest.releaseRecordPath ?? "(none)"}`,
27
+ "",
28
+ "## Included Artifacts",
29
+ "",
30
+ "| Kind | Source | Published | SHA-256 |",
31
+ "| --- | --- | --- | --- |",
32
+ ...included.length > 0 ? included.map((artifact) => `| ${artifact.kind} | ${artifact.relativePath} | ${artifact.publishedPath ?? "(none)"} | ${artifact.sha256 ?? "(none)"} |`) : ["| (none) | (none) | (none) | (none) |"],
33
+ "",
34
+ "## Redaction Decisions",
35
+ "",
36
+ "| Kind | Source | Decision | Reason |",
37
+ "| --- | --- | --- | --- |",
38
+ ...excluded.length > 0 ? excluded.map((artifact) => `| ${artifact.kind} | ${artifact.relativePath} | ${artifact.decision} | ${artifact.reason} |`) : ["| (none) | (none) | (none) | (none) |"],
39
+ ""
40
+ ];
41
+ return lines.join("\n");
42
+ }
43
+ function writeTreeseedScenePublishReport(input) {
44
+ writeJson(input.paths.manifestPath, input.manifest);
45
+ writeText(input.paths.reportPath, formatTreeseedScenePublishMarkdownReport(input.manifest));
46
+ }
47
+ function appendTreeseedScenePublishPaths(input) {
48
+ try {
49
+ if ((statSync(input.runPath).mode & 146) === 0) {
50
+ throw new Error("run.json is not writable.");
51
+ }
52
+ const run = JSON.parse(readFileSync(input.runPath, "utf8"));
53
+ writeJson(input.runPath, {
54
+ ...run,
55
+ publishPaths: input.paths,
56
+ logs: run.logs ? { ...run.logs, publish: input.paths.publishRoot } : run.logs
57
+ });
58
+ return [];
59
+ } catch (error) {
60
+ return [sceneWarningDiagnostic("scene.publish_run_update_failed", `Publish artifacts were written but run.json could not be updated. ${error instanceof Error ? error.message : String(error ?? "")}`.trim(), "run.json")];
61
+ }
62
+ }
63
+ export {
64
+ appendTreeseedScenePublishPaths,
65
+ formatTreeseedScenePublishMarkdownReport,
66
+ writeTreeseedScenePublishReport
67
+ };
@@ -0,0 +1,16 @@
1
+ import type { TreeseedSceneEvidenceManifest, TreeseedScenePublishManifest, TreeseedScenePublishOptions, TreeseedScenePublishPaths, TreeseedScenePublishReport, TreeseedScenePublishTarget, TreeseedSceneRedactionPolicy } from './types.js';
2
+ export declare function buildTreeseedScenePublishManifest(input: {
3
+ evidence: TreeseedSceneEvidenceManifest;
4
+ evidencePath: string;
5
+ runRoot: string;
6
+ target: TreeseedScenePublishTarget;
7
+ redactionPolicy?: TreeseedSceneRedactionPolicy;
8
+ timestamp?: string;
9
+ }): TreeseedScenePublishManifest;
10
+ export declare function writeTreeseedScenePublish(input: {
11
+ runRoot: string;
12
+ manifest: TreeseedScenePublishManifest;
13
+ evidence: TreeseedSceneEvidenceManifest;
14
+ projectRoot?: string;
15
+ }): TreeseedScenePublishPaths;
16
+ export declare function publishTreeseedSceneEvidence(input: TreeseedScenePublishOptions): Promise<TreeseedScenePublishReport>;