@treeseed/sdk 0.12.62 → 0.13.0-rc.10

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 (1108) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +33 -359
  3. package/dist/accounts/account-contracts.d.ts +170 -0
  4. package/dist/accounts/account-contracts.js +33 -0
  5. package/dist/agent-capacity/allocation.d.ts +186 -0
  6. package/dist/agent-capacity/allocation.js +226 -0
  7. package/dist/agent-capacity/artifact-mutation-receipt.d.ts +49 -0
  8. package/dist/agent-capacity/artifact-mutation-receipt.js +36 -0
  9. package/dist/agent-capacity/artifacts.d.ts +107 -0
  10. package/dist/agent-capacity/artifacts.js +39 -0
  11. package/dist/agent-capacity/authority/agent-authority-presets.d.ts +13 -0
  12. package/dist/agent-capacity/authority/agent-authority-presets.js +106 -0
  13. package/dist/agent-capacity/contracts/capacity/assignments/assignment-records.d.ts +269 -0
  14. package/dist/agent-capacity/contracts/capacity/assignments/assignment-records.js +10 -0
  15. package/dist/agent-capacity/contracts/capacity/communication/communication-records.d.ts +101 -0
  16. package/dist/agent-capacity/contracts/capacity/communication/communication-records.js +9 -0
  17. package/dist/agent-capacity/contracts/capacity/providers/supply-policy.d.ts +36 -0
  18. package/dist/agent-capacity/contracts/capacity/providers/supply-policy.js +4 -0
  19. package/dist/agent-capacity/contracts/capacity/workdays/workday-records.d.ts +188 -0
  20. package/dist/agent-capacity/contracts/configuration/configuration.d.ts +11 -0
  21. package/dist/agent-capacity/contracts/configuration/configuration.js +20 -0
  22. package/dist/agent-capacity/contracts/operations/research-workflow.d.ts +59 -0
  23. package/dist/agent-capacity/contracts/operations/research-workflow.js +16 -0
  24. package/dist/agent-capacity/contracts/operations/workflow-promotion.d.ts +24 -0
  25. package/dist/agent-capacity/contracts/projects/agents/project-agent-class.d.ts +37 -0
  26. package/dist/agent-capacity/contracts/runtime/runtime-observability.d.ts +335 -0
  27. package/dist/agent-capacity/contracts/support/agent-atlas.d.ts +185 -0
  28. package/dist/agent-capacity/contracts/support/agent-atlas.js +47 -0
  29. package/dist/agent-capacity/contracts/support/agent-lab-monitoring.d.ts +96 -0
  30. package/dist/agent-capacity/contracts/support/agent-lab-monitoring.js +14 -0
  31. package/dist/agent-capacity/contracts/support/authority/execution-mode.d.ts +10 -0
  32. package/dist/agent-capacity/contracts/support/authority/execution-mode.js +17 -0
  33. package/dist/agent-capacity/contracts/support/decision-work.d.ts +251 -0
  34. package/dist/agent-capacity/contracts/support/failure-records.d.ts +9 -0
  35. package/dist/agent-capacity/contracts/support/failure-records.js +0 -0
  36. package/dist/agent-capacity/contracts/support/financial-records.d.ts +124 -0
  37. package/dist/agent-capacity/contracts/support/financial-records.js +0 -0
  38. package/dist/agent-capacity/contracts/support/planning-records.d.ts +121 -0
  39. package/dist/agent-capacity/contracts/support/planning-records.js +0 -0
  40. package/dist/agent-capacity/contracts/support/research-citation.d.ts +15 -0
  41. package/dist/agent-capacity/contracts/support/research-citation.js +0 -0
  42. package/dist/agent-capacity/contracts/support/research-source-policy.d.ts +8 -0
  43. package/dist/agent-capacity/contracts/support/research-source-policy.js +0 -0
  44. package/dist/agent-capacity/contracts/support/time-capacity.d.ts +163 -0
  45. package/dist/agent-capacity/contracts/support/time-capacity.js +63 -0
  46. package/dist/agent-capacity/policy/capacity/allocations/allocation-hierarchy.d.ts +29 -0
  47. package/dist/agent-capacity/policy/capacity/allocations/allocation-hierarchy.js +110 -0
  48. package/dist/agent-capacity/validation/activity-profile.d.ts +12 -0
  49. package/dist/agent-capacity/validation/activity-profile.js +264 -0
  50. package/dist/agent-capacity/validation/agent-definition-schema.d.ts +9140 -0
  51. package/dist/agent-capacity/validation/agent-definition-schema.js +198 -0
  52. package/dist/agent-capacity/validation/agent-lab-forensics-schema.d.ts +234 -0
  53. package/dist/agent-capacity/validation/agent-lab-forensics-schema.js +104 -0
  54. package/dist/agent-capacity/validation/agent-signal.d.ts +30 -0
  55. package/dist/agent-capacity/validation/agent-signal.js +31 -0
  56. package/dist/agent-capacity/validation/allocation.d.ts +12 -0
  57. package/dist/agent-capacity/validation/allocation.js +115 -0
  58. package/dist/agent-capacity/validation/assignment-records.d.ts +16 -0
  59. package/dist/agent-capacity/validation/assignment-records.js +92 -0
  60. package/dist/agent-capacity/validation/configuration.d.ts +14 -0
  61. package/dist/agent-capacity/validation/configuration.js +23 -0
  62. package/dist/agent-capacity/validation/index.d.ts +11 -0
  63. package/dist/agent-capacity/validation/index.js +11 -0
  64. package/dist/agent-capacity/validation/proposal-type.d.ts +22 -0
  65. package/dist/agent-capacity/validation/proposal-type.js +21 -0
  66. package/dist/agent-capacity/validation/research/citation.d.ts +16 -0
  67. package/dist/agent-capacity/validation/research/citation.js +47 -0
  68. package/dist/agent-capacity/validation/research/source-policy.d.ts +11 -0
  69. package/dist/agent-capacity/validation/research/source-policy.js +26 -0
  70. package/dist/agent-capacity/validation/research/workflow.d.ts +10 -0
  71. package/dist/agent-capacity/validation/research/workflow.js +31 -0
  72. package/dist/agent-capacity/validation/workflow-promotion.d.ts +2 -0
  73. package/dist/agent-capacity/validation/workflow-promotion.js +34 -0
  74. package/dist/agent-capacity/workday.d.ts +52 -0
  75. package/dist/agent-capacity/workday.js +105 -0
  76. package/dist/ai-appliance/contracts.d.ts +90 -0
  77. package/dist/ai-appliance/contracts.js +16 -0
  78. package/dist/ai-appliance/validation.d.ts +4 -0
  79. package/dist/ai-appliance/validation.js +62 -0
  80. package/dist/capacity/agents/agent-capacity.d.ts +21 -0
  81. package/dist/capacity/agents/agent-capacity.js +20 -0
  82. package/dist/capacity/capacity-core/capacity-pagination.d.ts +18 -0
  83. package/dist/capacity/capacity-core/capacity-pagination.js +33 -0
  84. package/dist/capacity/providers/capacity-provider.d.ts +1 -0
  85. package/dist/capacity/providers/capacity-provider.js +1 -0
  86. package/dist/capacity-provider/client.d.ts +56 -0
  87. package/dist/capacity-provider/client.js +163 -0
  88. package/dist/capacity-provider/contracts/capacity-facts.d.ts +64 -0
  89. package/dist/capacity-provider/contracts/capacity-facts.js +0 -0
  90. package/dist/capacity-provider/contracts/governance.d.ts +399 -0
  91. package/dist/capacity-provider/contracts/governance.js +18 -0
  92. package/dist/capacity-provider/contracts/index.d.ts +2 -0
  93. package/dist/capacity-provider/contracts/index.js +2 -0
  94. package/dist/capacity-provider/index.d.ts +3 -0
  95. package/dist/capacity-provider/index.js +3 -0
  96. package/dist/capacity-provider/validation.d.ts +27 -0
  97. package/dist/capacity-provider/validation.js +184 -0
  98. package/dist/configuration/secrets-capability.d.ts +4 -0
  99. package/dist/configuration/secrets-capability.js +4 -0
  100. package/dist/content/contracts.d.ts +12 -0
  101. package/dist/content/contracts.js +0 -0
  102. package/dist/content/validation/agent-operational-content-schemas.d.ts +1351 -0
  103. package/dist/content/validation/agent-operational-content-schemas.js +146 -0
  104. package/dist/content/validation/auxiliary-content-schemas.d.ts +1715 -0
  105. package/dist/content/validation/auxiliary-content-schemas.js +173 -0
  106. package/dist/content/validation/content-model-schemas.d.ts +21728 -0
  107. package/dist/content/validation/content-model-schemas.js +271 -0
  108. package/dist/content/validation/index.d.ts +3 -0
  109. package/dist/content/validation/index.js +3 -0
  110. package/dist/content/validation/portable-content-data.d.ts +2101 -0
  111. package/dist/content/validation/portable-content-data.js +49 -0
  112. package/dist/entrypoints/clients/control-plane-client.d.ts +112 -0
  113. package/dist/entrypoints/clients/control-plane-client.js +180 -0
  114. package/dist/entrypoints/models/field-aliases.d.ts +11 -0
  115. package/dist/entrypoints/models/model-registry.d.ts +3 -0
  116. package/dist/entrypoints/models/model-registry.js +3 -0
  117. package/dist/entrypoints/models/sdk-fields.d.ts +11 -0
  118. package/dist/entrypoints/models/sdk-types.d.ts +10 -0
  119. package/dist/entrypoints/models/sdk-types.js +10 -0
  120. package/dist/feedback/contracts.d.ts +142 -0
  121. package/dist/feedback/contracts.js +18 -0
  122. package/dist/feedback/index.d.ts +1 -0
  123. package/dist/feedback/index.js +1 -0
  124. package/dist/governance/groups/contracts.d.ts +102 -0
  125. package/dist/governance/groups/contracts.js +6 -0
  126. package/dist/graph/context-query-contracts.d.ts +19 -1
  127. package/dist/graph/context-query-contracts.js +49 -8
  128. package/dist/knowledge/contracts.d.ts +173 -0
  129. package/dist/knowledge/contracts.js +16 -0
  130. package/dist/knowledge/index.d.ts +1 -0
  131. package/dist/knowledge/index.js +1 -0
  132. package/dist/model-registry/agent-operational-models.d.ts +4 -0
  133. package/dist/model-registry/agent-operational-models.js +38 -0
  134. package/dist/model-registry/build-builtin-model-registry.d.ts +2 -0
  135. package/dist/model-registry/build-builtin-model-registry.js +426 -0
  136. package/dist/model-registry/content-root.d.ts +9 -0
  137. package/dist/model-registry/content-root.js +33 -0
  138. package/dist/model-registry/discussion-models.d.ts +4 -0
  139. package/dist/model-registry/discussion-models.js +84 -0
  140. package/dist/model-registry/group-models.d.ts +2 -0
  141. package/dist/model-registry/group-models.js +52 -0
  142. package/dist/model-registry/knowledge-models.d.ts +2 -0
  143. package/dist/model-registry/knowledge-models.js +89 -0
  144. package/dist/model-registry/normalize-definition.d.ts +8 -0
  145. package/dist/model-registry/normalize-definition.js +69 -0
  146. package/dist/operator-contracts/canonical-command-tree.d.ts +3 -0
  147. package/dist/operator-contracts/canonical-command-tree.js +81 -0
  148. package/dist/operator-contracts/command-tree.d.ts +79 -0
  149. package/dist/operator-contracts/command-tree.js +53 -0
  150. package/dist/operator-contracts/control-plane-operation.d.ts +80 -0
  151. package/dist/operator-contracts/control-plane-operation.js +75 -0
  152. package/dist/operator-contracts/control-plane-operations.d.ts +546 -0
  153. package/dist/operator-contracts/control-plane-operations.js +352 -0
  154. package/dist/operator-contracts/index.d.ts +8 -0
  155. package/dist/operator-contracts/index.js +8 -0
  156. package/dist/operator-contracts/mcp.d.ts +78 -0
  157. package/dist/operator-contracts/mcp.js +23 -0
  158. package/dist/operator-contracts/oauth.d.ts +46 -0
  159. package/dist/operator-contracts/oauth.js +0 -0
  160. package/dist/operator-contracts/workday-lifecycle.d.ts +157 -0
  161. package/dist/operator-contracts/workday-lifecycle.js +65 -0
  162. package/dist/operator-contracts/workday-profile.d.ts +72 -0
  163. package/dist/operator-contracts/workday-profile.js +106 -0
  164. package/dist/projects/projects-core/project-workflow.d.ts +179 -0
  165. package/dist/projects/projects-core/project-workflow.js +66 -0
  166. package/dist/sdk-types/configuration/sdk-dispatch-credential-source.d.ts +201 -0
  167. package/dist/sdk-types/configuration/sdk-dispatch-credential-source.js +0 -0
  168. package/dist/sdk-types/control-plane/resource-requests.d.ts +124 -0
  169. package/dist/sdk-types/control-plane/resource-requests.js +0 -0
  170. package/dist/sdk-types/governance/commons/commons-question-input.d.ts +61 -0
  171. package/dist/sdk-types/governance/commons/commons-question-input.js +0 -0
  172. package/dist/sdk-types/support/planning-policy.d.ts +210 -0
  173. package/dist/sdk-types/support/planning-policy.js +0 -0
  174. package/dist/sdk-types/support/platform-contracts.d.ts +178 -0
  175. package/dist/sdk-types/support/platform-contracts.js +15 -0
  176. package/dist/sdk-types/support/sdk-model-names.d.ts +44 -0
  177. package/dist/sdk-types/support/sdk-model-names.js +80 -0
  178. package/dist/sdk-types/support/sdk-search-request.d.ts +182 -0
  179. package/dist/sdk-types/support/sdk-search-request.js +0 -0
  180. package/dist/sdk-types/support/task-planning.d.ts +189 -0
  181. package/dist/sdk-types/support/task-planning.js +0 -0
  182. package/dist/sdk-types/treedx/graph/sdk-graph-query-request.d.ts +157 -0
  183. package/dist/sdk-types/treedx/graph/sdk-graph-query-request.js +0 -0
  184. package/dist/secrets-capability/provider-operation-contracts.d.ts +90 -0
  185. package/dist/secrets-capability/provider-operation-contracts.js +10 -0
  186. package/dist/secrets-capability/service-provider-contracts.d.ts +92 -0
  187. package/dist/secrets-capability/service-provider-contracts.js +183 -0
  188. package/dist/secrets-capability/service-vault-contracts.d.ts +61 -0
  189. package/dist/secrets-capability/service-vault-contracts.js +39 -0
  190. package/dist/secrets-capability/workflow-operation-contracts.d.ts +95 -0
  191. package/dist/secrets-capability/workflow-operation-contracts.js +0 -0
  192. package/dist/standards/canonicalize.d.ts +10 -0
  193. package/dist/standards/canonicalize.js +43 -0
  194. package/dist/standards/compatibility-attestation.d.ts +23 -0
  195. package/dist/standards/compatibility-attestation.js +40 -0
  196. package/dist/standards/composition.d.ts +15 -0
  197. package/dist/standards/composition.js +14 -0
  198. package/dist/standards/contract-bundle.d.ts +8 -0
  199. package/dist/standards/contract-bundle.js +23 -0
  200. package/dist/standards/contracts.d.ts +39 -0
  201. package/dist/standards/contracts.js +0 -0
  202. package/dist/standards/errors.d.ts +6 -0
  203. package/dist/standards/errors.js +13 -0
  204. package/dist/standards/index.d.ts +8 -0
  205. package/dist/standards/index.js +8 -0
  206. package/dist/standards/mcp/compare.d.ts +2 -0
  207. package/dist/standards/mcp/compare.js +38 -0
  208. package/dist/standards/mcp/contracts.d.ts +34 -0
  209. package/dist/standards/mcp/contracts.js +0 -0
  210. package/dist/standards/mcp/index.d.ts +3 -0
  211. package/dist/standards/mcp/index.js +3 -0
  212. package/dist/standards/mcp/normalize.d.ts +4 -0
  213. package/dist/standards/mcp/normalize.js +30 -0
  214. package/dist/standards/openapi/compare.d.ts +2 -0
  215. package/dist/standards/openapi/compare.js +112 -0
  216. package/dist/standards/openapi/contracts.d.ts +24 -0
  217. package/dist/standards/openapi/contracts.js +0 -0
  218. package/dist/standards/openapi/index.d.ts +3 -0
  219. package/dist/standards/openapi/index.js +3 -0
  220. package/dist/standards/openapi/normalize.d.ts +2 -0
  221. package/dist/standards/openapi/normalize.js +57 -0
  222. package/dist/standards/package-manifest.d.ts +37 -0
  223. package/dist/standards/package-manifest.js +89 -0
  224. package/dist/standards/portfolio-entry.d.ts +12 -0
  225. package/dist/standards/portfolio-entry.js +11 -0
  226. package/dist/standards/typescript/compare.d.ts +2 -0
  227. package/dist/standards/typescript/compare.js +88 -0
  228. package/dist/standards/typescript/contracts.d.ts +44 -0
  229. package/dist/standards/typescript/contracts.js +0 -0
  230. package/dist/standards/typescript/extract.d.ts +10 -0
  231. package/dist/standards/typescript/extract.js +244 -0
  232. package/dist/standards/typescript/index.d.ts +3 -0
  233. package/dist/standards/typescript/index.js +3 -0
  234. package/dist/treedx/accounts/auth.d.ts +17 -0
  235. package/dist/treedx/accounts/auth.js +48 -0
  236. package/dist/treedx/client/accounts/contracts/auth-mode.d.ts +3 -0
  237. package/dist/treedx/client/accounts/contracts/auth-mode.js +6 -0
  238. package/dist/treedx/client/build/creation/build-context.d.ts +3 -0
  239. package/dist/treedx/client/build/creation/build-context.js +7 -0
  240. package/dist/treedx/client/build/creation/build-snapshot.d.ts +3 -0
  241. package/dist/treedx/client/build/creation/build-snapshot.js +8 -0
  242. package/dist/treedx/client/capacity/allocations/contracts/put-capability-grant.d.ts +3 -0
  243. package/dist/treedx/client/capacity/allocations/contracts/put-capability-grant.js +7 -0
  244. package/dist/treedx/client/capacity/allocations/queries/list-capability-grants.d.ts +6 -0
  245. package/dist/treedx/client/capacity/allocations/queries/list-capability-grants.js +10 -0
  246. package/dist/treedx/client/methods.d.ts +102 -0
  247. package/dist/treedx/client/methods.js +209 -0
  248. package/dist/treedx/client/persistence/contracts/restore-storage.d.ts +3 -0
  249. package/dist/treedx/client/persistence/contracts/restore-storage.js +6 -0
  250. package/dist/treedx/client/persistence/lifecycle/verify-storage-restore.d.ts +3 -0
  251. package/dist/treedx/client/persistence/lifecycle/verify-storage-restore.js +6 -0
  252. package/dist/treedx/client/repositories/creation/register-repository.d.ts +3 -0
  253. package/dist/treedx/client/repositories/creation/register-repository.js +7 -0
  254. package/dist/treedx/client/repositories/queries/get-repository.d.ts +3 -0
  255. package/dist/treedx/client/repositories/queries/get-repository.js +7 -0
  256. package/dist/treedx/client/repositories/queries/list-repository-paths.d.ts +3 -0
  257. package/dist/treedx/client/repositories/queries/list-repository-paths.js +7 -0
  258. package/dist/treedx/client/repositories/queries/list-repository-refs.d.ts +3 -0
  259. package/dist/treedx/client/repositories/queries/list-repository-refs.js +12 -0
  260. package/dist/treedx/client/repositories/queries/query-repository.d.ts +3 -0
  261. package/dist/treedx/client/repositories/queries/query-repository.js +7 -0
  262. package/dist/treedx/client/repositories/queries/read-repository-file.d.ts +3 -0
  263. package/dist/treedx/client/repositories/queries/read-repository-file.js +6 -0
  264. package/dist/treedx/client/repositories/queries/read-repository-files.d.ts +3 -0
  265. package/dist/treedx/client/repositories/queries/read-repository-files.js +7 -0
  266. package/dist/treedx/client/repositories/queries/search-repository-files.d.ts +3 -0
  267. package/dist/treedx/client/repositories/queries/search-repository-files.js +7 -0
  268. package/dist/treedx/client/support/contracts/treedx/artifacts/contracts/download-artifact.d.ts +3 -0
  269. package/dist/treedx/client/support/contracts/treedx/artifacts/contracts/download-artifact.js +9 -0
  270. package/dist/treedx/client/support/contracts/treedx/authorization/contracts/whoami.d.ts +3 -0
  271. package/dist/treedx/client/support/contracts/treedx/authorization/contracts/whoami.js +6 -0
  272. package/dist/treedx/client/support/contracts/treedx/graph/contracts/parse-context-dsl.d.ts +3 -0
  273. package/dist/treedx/client/support/contracts/treedx/graph/contracts/parse-context-dsl.js +7 -0
  274. package/dist/treedx/client/support/contracts/treedx/health/contracts/deep-health.d.ts +5 -0
  275. package/dist/treedx/client/support/contracts/treedx/health/contracts/deep-health.js +7 -0
  276. package/dist/treedx/client/support/contracts/treedx/health/contracts/health.d.ts +3 -0
  277. package/dist/treedx/client/support/contracts/treedx/health/contracts/health.js +6 -0
  278. package/dist/treedx/client/support/contracts/treedx/health/contracts/metrics.d.ts +3 -0
  279. package/dist/treedx/client/support/contracts/treedx/health/contracts/metrics.js +7 -0
  280. package/dist/treedx/client/support/contracts/treedx/health/contracts/prometheus-metrics.d.ts +2 -0
  281. package/dist/treedx/client/support/contracts/treedx/health/contracts/prometheus-metrics.js +19 -0
  282. package/dist/treedx/client/support/contracts/treedx/health/contracts/ready.d.ts +3 -0
  283. package/dist/treedx/client/support/contracts/treedx/health/contracts/ready.js +7 -0
  284. package/dist/treedx/client/support/contracts/treedx/health/contracts/status.d.ts +3 -0
  285. package/dist/treedx/client/support/contracts/treedx/health/contracts/status.js +6 -0
  286. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/commit.d.ts +3 -0
  287. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/commit.js +7 -0
  288. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/diff.d.ts +3 -0
  289. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/diff.js +6 -0
  290. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/fetch-remote.d.ts +3 -0
  291. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/fetch-remote.js +7 -0
  292. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/push.d.ts +6 -0
  293. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/push.js +23 -0
  294. package/dist/treedx/client/support/contracts/treedx/search/contracts/compact-search-index.d.ts +3 -0
  295. package/dist/treedx/client/support/contracts/treedx/search/contracts/compact-search-index.js +8 -0
  296. package/dist/treedx/client/support/contracts/treedx/search/contracts/search.d.ts +3 -0
  297. package/dist/treedx/client/support/contracts/treedx/search/contracts/search.js +7 -0
  298. package/dist/treedx/client/support/contracts/treedx/storage/contracts/backup-storage.d.ts +3 -0
  299. package/dist/treedx/client/support/contracts/treedx/storage/contracts/backup-storage.js +8 -0
  300. package/dist/treedx/client/support/contracts/treedx/storage/contracts/compact-storage.d.ts +3 -0
  301. package/dist/treedx/client/support/contracts/treedx/storage/contracts/compact-storage.js +8 -0
  302. package/dist/treedx/client/support/contracts/treedx/transport/contracts/assert-binary-ok.d.ts +2 -0
  303. package/dist/treedx/client/support/contracts/treedx/transport/contracts/assert-binary-ok.js +15 -0
  304. package/dist/treedx/client/support/contracts/treedx/transport/contracts/fetch-with-timeout.d.ts +2 -0
  305. package/dist/treedx/client/support/contracts/treedx/transport/contracts/fetch-with-timeout.js +38 -0
  306. package/dist/treedx/client/support/contracts/treedx/transport/contracts/headers.d.ts +2 -0
  307. package/dist/treedx/client/support/contracts/treedx/transport/contracts/headers.js +15 -0
  308. package/dist/treedx/client/support/contracts/treedx/transport/contracts/parse-json-response.d.ts +2 -0
  309. package/dist/treedx/client/support/contracts/treedx/transport/contracts/parse-json-response.js +15 -0
  310. package/dist/treedx/client/support/contracts/treedx/transport/contracts/query.d.ts +2 -0
  311. package/dist/treedx/client/support/contracts/treedx/transport/contracts/query.js +14 -0
  312. package/dist/treedx/client/support/contracts/treedx/transport/contracts/repo-id.d.ts +2 -0
  313. package/dist/treedx/client/support/contracts/treedx/transport/contracts/repo-id.js +14 -0
  314. package/dist/treedx/client/support/contracts/treedx/transport/contracts/request.d.ts +6 -0
  315. package/dist/treedx/client/support/contracts/treedx/transport/contracts/request.js +41 -0
  316. package/dist/treedx/client/support/contracts/treedx/transport/contracts/throw-api-error.d.ts +2 -0
  317. package/dist/treedx/client/support/contracts/treedx/transport/contracts/throw-api-error.js +14 -0
  318. package/dist/treedx/client/support/contracts/treedx/workspaces/contracts/exec.d.ts +3 -0
  319. package/dist/treedx/client/support/contracts/treedx/workspaces/contracts/exec.js +7 -0
  320. package/dist/treedx/client/support/creation/apply-changeset.d.ts +3 -0
  321. package/dist/treedx/client/support/creation/apply-changeset.js +10 -0
  322. package/dist/treedx/client/support/creation/apply-storage-migration.d.ts +3 -0
  323. package/dist/treedx/client/support/creation/apply-storage-migration.js +7 -0
  324. package/dist/treedx/client/support/creation/create-migration.d.ts +6 -0
  325. package/dist/treedx/client/support/creation/create-migration.js +7 -0
  326. package/dist/treedx/client/support/creation/export-artifact.d.ts +3 -0
  327. package/dist/treedx/client/support/creation/export-artifact.js +8 -0
  328. package/dist/treedx/client/support/creation/plan-storage-migration.d.ts +3 -0
  329. package/dist/treedx/client/support/creation/plan-storage-migration.js +7 -0
  330. package/dist/treedx/client/support/creation/request-binary.d.ts +6 -0
  331. package/dist/treedx/client/support/creation/request-binary.js +42 -0
  332. package/dist/treedx/client/support/creation/write-file.d.ts +3 -0
  333. package/dist/treedx/client/support/creation/write-file.js +10 -0
  334. package/dist/treedx/client/support/creation/write-files.d.ts +3 -0
  335. package/dist/treedx/client/support/creation/write-files.js +12 -0
  336. package/dist/treedx/client/support/queries/treedx/artifacts/queries/get-artifact.d.ts +3 -0
  337. package/dist/treedx/client/support/queries/treedx/artifacts/queries/get-artifact.js +7 -0
  338. package/dist/treedx/client/support/queries/treedx/artifacts/queries/list-artifacts.d.ts +3 -0
  339. package/dist/treedx/client/support/queries/treedx/artifacts/queries/list-artifacts.js +7 -0
  340. package/dist/treedx/client/support/queries/treedx/authorization/queries/effective-scope.d.ts +3 -0
  341. package/dist/treedx/client/support/queries/treedx/authorization/queries/effective-scope.js +9 -0
  342. package/dist/treedx/client/support/queries/treedx/authorization/queries/list-capabilities.d.ts +4 -0
  343. package/dist/treedx/client/support/queries/treedx/authorization/queries/list-capabilities.js +6 -0
  344. package/dist/treedx/client/support/queries/treedx/federation/queries/get-placement.d.ts +3 -0
  345. package/dist/treedx/client/support/queries/treedx/federation/queries/get-placement.js +7 -0
  346. package/dist/treedx/client/support/queries/treedx/graph/queries/get-node.d.ts +3 -0
  347. package/dist/treedx/client/support/queries/treedx/graph/queries/get-node.js +7 -0
  348. package/dist/treedx/client/support/queries/treedx/graph/queries/get-related.d.ts +3 -0
  349. package/dist/treedx/client/support/queries/treedx/graph/queries/get-related.js +7 -0
  350. package/dist/treedx/client/support/queries/treedx/graph/queries/list-nodes.d.ts +3 -0
  351. package/dist/treedx/client/support/queries/treedx/graph/queries/list-nodes.js +7 -0
  352. package/dist/treedx/client/support/queries/treedx/repositories/queries/list-tree.d.ts +3 -0
  353. package/dist/treedx/client/support/queries/treedx/repositories/queries/list-tree.js +10 -0
  354. package/dist/treedx/client/support/queries/treedx/repositories/queries/read-file.d.ts +3 -0
  355. package/dist/treedx/client/support/queries/treedx/repositories/queries/read-file.js +9 -0
  356. package/dist/treedx/client/support/queries/treedx/search/queries/get-search-index-status.d.ts +3 -0
  357. package/dist/treedx/client/support/queries/treedx/search/queries/get-search-index-status.js +7 -0
  358. package/dist/treedx/client/support/queries/treedx/storage/queries/get-migration.d.ts +6 -0
  359. package/dist/treedx/client/support/queries/treedx/storage/queries/get-migration.js +7 -0
  360. package/dist/treedx/client/support/queries/treedx/storage/queries/get-snapshot.d.ts +6 -0
  361. package/dist/treedx/client/support/queries/treedx/storage/queries/get-snapshot.js +7 -0
  362. package/dist/treedx/client/support/queries/treedx/storage/queries/list-storage-migrations.d.ts +6 -0
  363. package/dist/treedx/client/support/queries/treedx/storage/queries/list-storage-migrations.js +6 -0
  364. package/dist/treedx/client/support/queries/treedx/transport/queries/list-audit-events.d.ts +15 -0
  365. package/dist/treedx/client/support/queries/treedx/transport/queries/list-audit-events.js +6 -0
  366. package/dist/treedx/client/support/queries/treedx/transport/queries/list-repositories.d.ts +3 -0
  367. package/dist/treedx/client/support/queries/treedx/transport/queries/list-repositories.js +7 -0
  368. package/dist/treedx/client/support/retirement/cleanup-artifacts.d.ts +3 -0
  369. package/dist/treedx/client/support/retirement/cleanup-artifacts.js +7 -0
  370. package/dist/treedx/client/support/retirement/delete-artifact.d.ts +3 -0
  371. package/dist/treedx/client/support/retirement/delete-artifact.js +7 -0
  372. package/dist/treedx/client/support/retirement/delete-file.d.ts +3 -0
  373. package/dist/treedx/client/support/retirement/delete-file.js +10 -0
  374. package/dist/treedx/client/support/retirement/rollback-storage-migration.d.ts +3 -0
  375. package/dist/treedx/client/support/retirement/rollback-storage-migration.js +7 -0
  376. package/dist/treedx/client/support/updates/patch-file.d.ts +3 -0
  377. package/dist/treedx/client/support/updates/patch-file.js +10 -0
  378. package/dist/treedx/client/support/updates/refresh-search-index.d.ts +3 -0
  379. package/dist/treedx/client/support/updates/refresh-search-index.js +8 -0
  380. package/dist/treedx/client/treedx/blobs/contracts/download-blob.d.ts +3 -0
  381. package/dist/treedx/client/treedx/blobs/contracts/download-blob.js +6 -0
  382. package/dist/treedx/client/treedx/blobs/creation/create-blob-upload.d.ts +3 -0
  383. package/dist/treedx/client/treedx/blobs/creation/create-blob-upload.js +8 -0
  384. package/dist/treedx/client/treedx/blobs/creation/request-blob-download.d.ts +3 -0
  385. package/dist/treedx/client/treedx/blobs/creation/request-blob-download.js +27 -0
  386. package/dist/treedx/client/treedx/blobs/creation/request-blob-upload.d.ts +3 -0
  387. package/dist/treedx/client/treedx/blobs/creation/request-blob-upload.js +41 -0
  388. package/dist/treedx/client/treedx/blobs/creation/upload-blob-part.d.ts +3 -0
  389. package/dist/treedx/client/treedx/blobs/creation/upload-blob-part.js +27 -0
  390. package/dist/treedx/client/treedx/blobs/creation/upload-blob.d.ts +3 -0
  391. package/dist/treedx/client/treedx/blobs/creation/upload-blob.js +6 -0
  392. package/dist/treedx/client/treedx/blobs/creation/write-blob.d.ts +3 -0
  393. package/dist/treedx/client/treedx/blobs/creation/write-blob.js +8 -0
  394. package/dist/treedx/client/treedx/blobs/lifecycle/complete-blob-upload.d.ts +3 -0
  395. package/dist/treedx/client/treedx/blobs/lifecycle/complete-blob-upload.js +8 -0
  396. package/dist/treedx/client/treedx/blobs/queries/read-blob.d.ts +3 -0
  397. package/dist/treedx/client/treedx/blobs/queries/read-blob.js +10 -0
  398. package/dist/treedx/client/treedx/blobs/retirement/abort-blob-upload.d.ts +3 -0
  399. package/dist/treedx/client/treedx/blobs/retirement/abort-blob-upload.js +7 -0
  400. package/dist/treedx/client/treedx/blobs/retirement/delete-blob.d.ts +3 -0
  401. package/dist/treedx/client/treedx/blobs/retirement/delete-blob.js +8 -0
  402. package/dist/treedx/client/treedx/federation/contracts/federated-query.d.ts +3 -0
  403. package/dist/treedx/client/treedx/federation/contracts/federated-query.js +7 -0
  404. package/dist/treedx/client/treedx/federation/creation/plan-federated-query.d.ts +3 -0
  405. package/dist/treedx/client/treedx/federation/creation/plan-federated-query.js +6 -0
  406. package/dist/treedx/client/treedx/federation/queries/check-mirror-health.d.ts +3 -0
  407. package/dist/treedx/client/treedx/federation/queries/check-mirror-health.js +7 -0
  408. package/dist/treedx/client/treedx/federation/updates/promote-mirror.d.ts +3 -0
  409. package/dist/treedx/client/treedx/federation/updates/promote-mirror.js +7 -0
  410. package/dist/treedx/client/treedx/federation/updates/sync-mirror.d.ts +3 -0
  411. package/dist/treedx/client/treedx/federation/updates/sync-mirror.js +7 -0
  412. package/dist/treedx/client/treedx/graph/contracts/federated-context.d.ts +3 -0
  413. package/dist/treedx/client/treedx/graph/contracts/federated-context.js +7 -0
  414. package/dist/treedx/client/treedx/graph/contracts/federated-graph.d.ts +3 -0
  415. package/dist/treedx/client/treedx/graph/contracts/federated-graph.js +7 -0
  416. package/dist/treedx/client/treedx/graph/contracts/graph-search.d.ts +3 -0
  417. package/dist/treedx/client/treedx/graph/contracts/graph-search.js +8 -0
  418. package/dist/treedx/client/treedx/graph/queries/get-graph-node.d.ts +3 -0
  419. package/dist/treedx/client/treedx/graph/queries/get-graph-node.js +10 -0
  420. package/dist/treedx/client/treedx/graph/queries/get-graph-refresh-job.d.ts +3 -0
  421. package/dist/treedx/client/treedx/graph/queries/get-graph-refresh-job.js +7 -0
  422. package/dist/treedx/client/treedx/graph/queries/get-subgraph.d.ts +3 -0
  423. package/dist/treedx/client/treedx/graph/queries/get-subgraph.js +7 -0
  424. package/dist/treedx/client/treedx/graph/queries/query-graph.d.ts +3 -0
  425. package/dist/treedx/client/treedx/graph/queries/query-graph.js +7 -0
  426. package/dist/treedx/client/treedx/graph/queries/search-graph-entities.d.ts +3 -0
  427. package/dist/treedx/client/treedx/graph/queries/search-graph-entities.js +6 -0
  428. package/dist/treedx/client/treedx/graph/queries/search-graph-files.d.ts +3 -0
  429. package/dist/treedx/client/treedx/graph/queries/search-graph-files.js +6 -0
  430. package/dist/treedx/client/treedx/graph/queries/search-graph-sections.d.ts +3 -0
  431. package/dist/treedx/client/treedx/graph/queries/search-graph-sections.js +6 -0
  432. package/dist/treedx/client/treedx/graph/updates/refresh-graph.d.ts +3 -0
  433. package/dist/treedx/client/treedx/graph/updates/refresh-graph.js +7 -0
  434. package/dist/treedx/client/treedx/search/contracts/federated-search.d.ts +3 -0
  435. package/dist/treedx/client/treedx/search/contracts/federated-search.js +7 -0
  436. package/dist/treedx/client/treedx/workspaces/creation/create-workspace.d.ts +3 -0
  437. package/dist/treedx/client/treedx/workspaces/creation/create-workspace.js +7 -0
  438. package/dist/treedx/client/treedx/workspaces/retirement/abandon-workspace.d.ts +3 -0
  439. package/dist/treedx/client/treedx/workspaces/retirement/abandon-workspace.js +12 -0
  440. package/dist/treedx/client/treedx/workspaces/retirement/close-workspace.d.ts +2 -0
  441. package/dist/treedx/client/treedx/workspaces/retirement/close-workspace.js +6 -0
  442. package/dist/treedx/generated/openapi-types.d.ts +104 -0
  443. package/dist/treedx/support/client.d.ts +251 -0
  444. package/dist/treedx/support/client.js +252 -0
  445. package/dist/treedx/support/errors.d.ts +13 -0
  446. package/dist/treedx/types/tree-dx-actor.d.ts +209 -0
  447. package/dist/treedx/types/tree-dx-actor.js +8 -0
  448. package/dist/treedx/types/tree-dx-artifact-list-response.d.ts +13 -0
  449. package/dist/treedx/types/tree-dx-artifact-list-response.js +0 -0
  450. package/dist/treedx/types/tree-dx-changeset.d.ts +51 -0
  451. package/dist/treedx/types/tree-dx-changeset.js +6 -0
  452. package/dist/treedx/types/tree-dx-context-request.d.ts +245 -0
  453. package/dist/treedx/types/tree-dx-context-request.js +0 -0
  454. package/dist/treedx/types/tree-dx-exec-result.d.ts +249 -0
  455. package/dist/treedx/types/tree-dx-exec-result.js +0 -0
  456. package/dist/treedx/types/tree-dx-list-tree-request.d.ts +222 -0
  457. package/dist/treedx/types/tree-dx-list-tree-request.js +0 -0
  458. package/dist/treedx/types/tree-dx-push-request.d.ts +229 -0
  459. package/dist/treedx/types/tree-dx-push-request.js +0 -0
  460. package/dist/treedx/types.d.ts +7 -1084
  461. package/dist/treedx/types.js +7 -8
  462. package/dist/types/agents/agent-activity-profile.d.ts +267 -0
  463. package/dist/types/agents/agent-activity-profile.js +0 -0
  464. package/dist/types/agents/agent-trigger-kinds.d.ts +189 -0
  465. package/dist/types/agents/agent-trigger-kinds.js +107 -0
  466. package/dist/types/agents/execution-run-ref.d.ts +136 -0
  467. package/dist/types/agents/execution-run-ref.js +0 -0
  468. package/dist/types/agents.d.ts +3 -493
  469. package/dist/types/agents.js +3 -95
  470. package/package.json +77 -362
  471. package/dist/agent-capacity.d.ts +0 -1100
  472. package/dist/agent-capacity.js +0 -1822
  473. package/dist/agent-tools.d.ts +0 -37
  474. package/dist/agent-tools.js +0 -301
  475. package/dist/api/app.d.ts +0 -8
  476. package/dist/api/app.js +0 -404
  477. package/dist/api/auth/d1-database.d.ts +0 -3
  478. package/dist/api/auth/d1-database.js +0 -20
  479. package/dist/api/auth/d1-provider.d.ts +0 -85
  480. package/dist/api/auth/d1-provider.js +0 -95
  481. package/dist/api/auth/d1-store.d.ts +0 -121
  482. package/dist/api/auth/d1-store.js +0 -990
  483. package/dist/api/auth/memory-provider.d.ts +0 -82
  484. package/dist/api/auth/memory-provider.js +0 -297
  485. package/dist/api/auth/rbac.d.ts +0 -22
  486. package/dist/api/auth/rbac.js +0 -162
  487. package/dist/api/auth/tokens.d.ts +0 -18
  488. package/dist/api/auth/tokens.js +0 -56
  489. package/dist/api/config.d.ts +0 -4
  490. package/dist/api/config.js +0 -149
  491. package/dist/api/http.d.ts +0 -28
  492. package/dist/api/http.js +0 -51
  493. package/dist/api/index.d.ts +0 -10
  494. package/dist/api/index.js +0 -29
  495. package/dist/api/operations-routes.d.ts +0 -11
  496. package/dist/api/operations-routes.js +0 -39
  497. package/dist/api/operations.d.ts +0 -3
  498. package/dist/api/operations.js +0 -26
  499. package/dist/api/providers.d.ts +0 -2
  500. package/dist/api/providers.js +0 -85
  501. package/dist/api/railway.d.ts +0 -53
  502. package/dist/api/railway.js +0 -71
  503. package/dist/api/sdk-dispatch.d.ts +0 -6
  504. package/dist/api/sdk-dispatch.js +0 -14
  505. package/dist/api/sdk-routes.d.ts +0 -11
  506. package/dist/api/sdk-routes.js +0 -29
  507. package/dist/api/templates.d.ts +0 -3
  508. package/dist/api/templates.js +0 -31
  509. package/dist/api/types.d.ts +0 -238
  510. package/dist/capacity-provider.d.ts +0 -494
  511. package/dist/capacity-provider.js +0 -727
  512. package/dist/capacity.d.ts +0 -483
  513. package/dist/capacity.js +0 -2331
  514. package/dist/cli-tools.d.ts +0 -3
  515. package/dist/cli-tools.js +0 -46
  516. package/dist/content-operations.d.ts +0 -97
  517. package/dist/content-operations.js +0 -250
  518. package/dist/content-store.d.ts +0 -25
  519. package/dist/content-store.js +0 -269
  520. package/dist/control-plane-client.d.ts +0 -203
  521. package/dist/control-plane-client.js +0 -540
  522. package/dist/control-plane.d.ts +0 -101
  523. package/dist/control-plane.js +0 -201
  524. package/dist/copilot.d.ts +0 -18
  525. package/dist/copilot.js +0 -90
  526. package/dist/d1-http.d.ts +0 -38
  527. package/dist/d1-http.js +0 -95
  528. package/dist/d1-store.d.ts +0 -336
  529. package/dist/d1-store.js +0 -1431
  530. package/dist/db/d1.d.ts +0 -246
  531. package/dist/db/d1.js +0 -8
  532. package/dist/db/index.d.ts +0 -3
  533. package/dist/db/index.js +0 -3
  534. package/dist/db/market-schema.d.ts +0 -83651
  535. package/dist/db/market-schema.js +0 -3725
  536. package/dist/db/node-sqlite.d.ts +0 -297
  537. package/dist/db/node-sqlite.js +0 -133
  538. package/dist/db/schema.d.ts +0 -483
  539. package/dist/db/schema.js +0 -29
  540. package/dist/dispatch.d.ts +0 -4
  541. package/dist/dispatch.js +0 -174
  542. package/dist/field-aliases.d.ts +0 -11
  543. package/dist/fixture-support.d.ts +0 -24
  544. package/dist/fixture-support.js +0 -385
  545. package/dist/frontmatter.d.ts +0 -6
  546. package/dist/frontmatter.js +0 -33
  547. package/dist/git-runtime.d.ts +0 -16
  548. package/dist/git-runtime.js +0 -69
  549. package/dist/governance.d.ts +0 -133
  550. package/dist/governance.js +0 -285
  551. package/dist/graph/build.d.ts +0 -19
  552. package/dist/graph/build.js +0 -949
  553. package/dist/graph/dsl.d.ts +0 -2
  554. package/dist/graph/dsl.js +0 -243
  555. package/dist/graph/query.d.ts +0 -47
  556. package/dist/graph/query.js +0 -447
  557. package/dist/graph/ranking.d.ts +0 -3
  558. package/dist/graph/ranking.js +0 -483
  559. package/dist/graph/schema.d.ts +0 -142
  560. package/dist/graph/schema.js +0 -137
  561. package/dist/graph.d.ts +0 -52
  562. package/dist/graph.js +0 -133
  563. package/dist/guarantees/index.d.ts +0 -512
  564. package/dist/guarantees/index.js +0 -1782
  565. package/dist/hosting/apps.d.ts +0 -12
  566. package/dist/hosting/apps.js +0 -107
  567. package/dist/hosting/builtins.d.ts +0 -25
  568. package/dist/hosting/builtins.js +0 -685
  569. package/dist/hosting/contracts.d.ts +0 -190
  570. package/dist/hosting/graph.d.ts +0 -110
  571. package/dist/hosting/graph.js +0 -993
  572. package/dist/hosting/index.d.ts +0 -4
  573. package/dist/hosting/index.js +0 -4
  574. package/dist/index.d.ts +0 -88
  575. package/dist/index.js +0 -757
  576. package/dist/local-dev/managed-dev.d.ts +0 -85
  577. package/dist/local-dev/managed-dev.js +0 -431
  578. package/dist/managed-dependencies.d.ts +0 -91
  579. package/dist/managed-dependencies.js +0 -1186
  580. package/dist/market-client.d.ts +0 -831
  581. package/dist/market-client.js +0 -1219
  582. package/dist/model-registry.d.ts +0 -8
  583. package/dist/model-registry.js +0 -674
  584. package/dist/operations/agent-tools.d.ts +0 -105
  585. package/dist/operations/agent-tools.js +0 -171
  586. package/dist/operations/providers/default.d.ts +0 -10
  587. package/dist/operations/providers/default.js +0 -1245
  588. package/dist/operations/repository-operations.d.ts +0 -158
  589. package/dist/operations/repository-operations.js +0 -851
  590. package/dist/operations/runtime.d.ts +0 -7
  591. package/dist/operations/runtime.js +0 -61
  592. package/dist/operations/services/bootstrap-runner.d.ts +0 -39
  593. package/dist/operations/services/bootstrap-runner.js +0 -191
  594. package/dist/operations/services/build-warning-policy.d.ts +0 -34
  595. package/dist/operations/services/build-warning-policy.js +0 -91
  596. package/dist/operations/services/commit-message-provider.d.ts +0 -65
  597. package/dist/operations/services/commit-message-provider.js +0 -496
  598. package/dist/operations/services/config-runtime.d.ts +0 -558
  599. package/dist/operations/services/config-runtime.js +0 -3494
  600. package/dist/operations/services/d1-migration.d.ts +0 -6
  601. package/dist/operations/services/d1-migration.js +0 -120
  602. package/dist/operations/services/deploy.d.ts +0 -645
  603. package/dist/operations/services/deploy.js +0 -3826
  604. package/dist/operations/services/deployment-readiness.d.ts +0 -30
  605. package/dist/operations/services/deployment-readiness.js +0 -217
  606. package/dist/operations/services/export-runtime.d.ts +0 -18
  607. package/dist/operations/services/export-runtime.js +0 -140
  608. package/dist/operations/services/git-remote-policy.d.ts +0 -9
  609. package/dist/operations/services/git-remote-policy.js +0 -63
  610. package/dist/operations/services/git-runner.d.ts +0 -68
  611. package/dist/operations/services/git-runner.js +0 -500
  612. package/dist/operations/services/git-workflow.d.ts +0 -255
  613. package/dist/operations/services/git-workflow.js +0 -845
  614. package/dist/operations/services/github-actions-verification.d.ts +0 -148
  615. package/dist/operations/services/github-actions-verification.js +0 -589
  616. package/dist/operations/services/github-api.d.ts +0 -279
  617. package/dist/operations/services/github-api.js +0 -936
  618. package/dist/operations/services/github-automation.d.ts +0 -230
  619. package/dist/operations/services/github-automation.js +0 -520
  620. package/dist/operations/services/github-credentials.d.ts +0 -13
  621. package/dist/operations/services/github-credentials.js +0 -59
  622. package/dist/operations/services/hosted-service-checks.d.ts +0 -82
  623. package/dist/operations/services/hosted-service-checks.js +0 -527
  624. package/dist/operations/services/hosting-audit.d.ts +0 -69
  625. package/dist/operations/services/hosting-audit.js +0 -638
  626. package/dist/operations/services/hub-launch.d.ts +0 -182
  627. package/dist/operations/services/hub-launch.js +0 -309
  628. package/dist/operations/services/hub-provider-launch.d.ts +0 -160
  629. package/dist/operations/services/hub-provider-launch.js +0 -1056
  630. package/dist/operations/services/key-agent.d.ts +0 -137
  631. package/dist/operations/services/key-agent.js +0 -641
  632. package/dist/operations/services/live-hosted-service-checks.d.ts +0 -30
  633. package/dist/operations/services/live-hosted-service-checks.js +0 -611
  634. package/dist/operations/services/local-cleanup.d.ts +0 -30
  635. package/dist/operations/services/local-cleanup.js +0 -77
  636. package/dist/operations/services/local-dev.d.ts +0 -8
  637. package/dist/operations/services/local-dev.js +0 -97
  638. package/dist/operations/services/managed-host-security.d.ts +0 -13
  639. package/dist/operations/services/managed-host-security.js +0 -56
  640. package/dist/operations/services/managed-repositories.d.ts +0 -37
  641. package/dist/operations/services/managed-repositories.js +0 -177
  642. package/dist/operations/services/market-packaging.d.ts +0 -59
  643. package/dist/operations/services/market-packaging.js +0 -234
  644. package/dist/operations/services/operations-runner-smoke.d.ts +0 -31
  645. package/dist/operations/services/operations-runner-smoke.js +0 -212
  646. package/dist/operations/services/package-adapters.d.ts +0 -184
  647. package/dist/operations/services/package-adapters.js +0 -912
  648. package/dist/operations/services/package-artifacts.d.ts +0 -37
  649. package/dist/operations/services/package-artifacts.js +0 -99
  650. package/dist/operations/services/package-reference-policy.d.ts +0 -64
  651. package/dist/operations/services/package-reference-policy.js +0 -364
  652. package/dist/operations/services/project-host-operations.d.ts +0 -153
  653. package/dist/operations/services/project-host-operations.js +0 -365
  654. package/dist/operations/services/project-platform.d.ts +0 -727
  655. package/dist/operations/services/project-platform.js +0 -1603
  656. package/dist/operations/services/project-web-monitor.d.ts +0 -15
  657. package/dist/operations/services/project-web-monitor.js +0 -377
  658. package/dist/operations/services/railway-api.d.ts +0 -494
  659. package/dist/operations/services/railway-api.js +0 -1874
  660. package/dist/operations/services/railway-cli.d.ts +0 -47
  661. package/dist/operations/services/railway-cli.js +0 -142
  662. package/dist/operations/services/railway-deploy.d.ts +0 -161
  663. package/dist/operations/services/railway-deploy.js +0 -1808
  664. package/dist/operations/services/railway-source-policy.d.ts +0 -25
  665. package/dist/operations/services/railway-source-policy.js +0 -111
  666. package/dist/operations/services/release-history.d.ts +0 -59
  667. package/dist/operations/services/release-history.js +0 -158
  668. package/dist/operations/services/release-proof-ledger.d.ts +0 -13
  669. package/dist/operations/services/release-proof-ledger.js +0 -81
  670. package/dist/operations/services/release-proof-planner.d.ts +0 -48
  671. package/dist/operations/services/release-proof-planner.js +0 -195
  672. package/dist/operations/services/release-proof-runner.d.ts +0 -16
  673. package/dist/operations/services/release-proof-runner.js +0 -169
  674. package/dist/operations/services/release-proof.d.ts +0 -81
  675. package/dist/operations/services/release-proof.js +0 -79
  676. package/dist/operations/services/repository-save-orchestrator.d.ts +0 -193
  677. package/dist/operations/services/repository-save-orchestrator.js +0 -2110
  678. package/dist/operations/services/runtime-paths.d.ts +0 -19
  679. package/dist/operations/services/runtime-paths.js +0 -54
  680. package/dist/operations/services/runtime-tools.d.ts +0 -35
  681. package/dist/operations/services/runtime-tools.js +0 -212
  682. package/dist/operations/services/save-deploy-preflight.d.ts +0 -32
  683. package/dist/operations/services/save-deploy-preflight.js +0 -82
  684. package/dist/operations/services/template-host-bindings.d.ts +0 -68
  685. package/dist/operations/services/template-host-bindings.js +0 -401
  686. package/dist/operations/services/template-registry.d.ts +0 -110
  687. package/dist/operations/services/template-registry.js +0 -595
  688. package/dist/operations/services/template-secret-sync.d.ts +0 -97
  689. package/dist/operations/services/template-secret-sync.js +0 -292
  690. package/dist/operations/services/verification-cache.d.ts +0 -25
  691. package/dist/operations/services/verification-cache.js +0 -71
  692. package/dist/operations/services/watch-dev.d.ts +0 -21
  693. package/dist/operations/services/watch-dev.js +0 -282
  694. package/dist/operations/services/workflow-timing.d.ts +0 -25
  695. package/dist/operations/services/workflow-timing.js +0 -79
  696. package/dist/operations/services/workspace-dependency-mode.d.ts +0 -74
  697. package/dist/operations/services/workspace-dependency-mode.js +0 -478
  698. package/dist/operations/services/workspace-preflight.d.ts +0 -40
  699. package/dist/operations/services/workspace-preflight.js +0 -172
  700. package/dist/operations/services/workspace-save-script.d.ts +0 -26
  701. package/dist/operations/services/workspace-save-script.js +0 -50
  702. package/dist/operations/services/workspace-save.d.ts +0 -76
  703. package/dist/operations/services/workspace-save.js +0 -453
  704. package/dist/operations/services/workspace-tools.d.ts +0 -17
  705. package/dist/operations/services/workspace-tools.js +0 -320
  706. package/dist/operations-registry.d.ts +0 -5
  707. package/dist/operations-registry.js +0 -98
  708. package/dist/operations-types.d.ts +0 -75
  709. package/dist/operations-types.js +0 -17
  710. package/dist/operations.d.ts +0 -17
  711. package/dist/operations.js +0 -114
  712. package/dist/platform/book-export.d.ts +0 -78
  713. package/dist/platform/book-export.js +0 -451
  714. package/dist/platform/books-data.d.ts +0 -28
  715. package/dist/platform/books-data.js +0 -111
  716. package/dist/platform/config.d.ts +0 -27
  717. package/dist/platform/config.js +0 -100
  718. package/dist/platform/content-runtime-source.d.ts +0 -54
  719. package/dist/platform/content-runtime-source.js +0 -169
  720. package/dist/platform/contracts.d.ts +0 -361
  721. package/dist/platform/deploy-config.d.ts +0 -17
  722. package/dist/platform/deploy-config.js +0 -731
  723. package/dist/platform/deploy-runtime.d.ts +0 -22
  724. package/dist/platform/deploy-runtime.js +0 -93
  725. package/dist/platform/desired-state.d.ts +0 -66
  726. package/dist/platform/desired-state.js +0 -1071
  727. package/dist/platform/env.yaml +0 -1126
  728. package/dist/platform/environment.d.ts +0 -159
  729. package/dist/platform/environment.js +0 -778
  730. package/dist/platform/local-content-materialization.d.ts +0 -9
  731. package/dist/platform/local-content-materialization.js +0 -212
  732. package/dist/platform/plugin.d.ts +0 -103
  733. package/dist/platform/plugin.js +0 -6
  734. package/dist/platform/plugins/constants.d.ts +0 -26
  735. package/dist/platform/plugins/constants.js +0 -33
  736. package/dist/platform/plugins/runtime.d.ts +0 -41
  737. package/dist/platform/plugins/runtime.js +0 -257
  738. package/dist/platform/plugins.d.ts +0 -6
  739. package/dist/platform/plugins.js +0 -42
  740. package/dist/platform/published-content-pipeline.d.ts +0 -84
  741. package/dist/platform/published-content-pipeline.js +0 -547
  742. package/dist/platform/published-content.d.ts +0 -224
  743. package/dist/platform/published-content.js +0 -611
  744. package/dist/platform/site-config-schema.d.ts +0 -1
  745. package/dist/platform/site-config-schema.js +0 -4
  746. package/dist/platform/tenant/runtime-config.d.ts +0 -154
  747. package/dist/platform/tenant/runtime-config.js +0 -69
  748. package/dist/platform/tenant-config.d.ts +0 -8
  749. package/dist/platform/tenant-config.js +0 -207
  750. package/dist/platform/utils/site-config-schema.d.ts +0 -154
  751. package/dist/platform/utils/site-config-schema.js +0 -450
  752. package/dist/platform-operation-store.d.ts +0 -94
  753. package/dist/platform-operation-store.js +0 -531
  754. package/dist/platform-operations.d.ts +0 -273
  755. package/dist/platform-operations.js +0 -440
  756. package/dist/plugin-default.d.ts +0 -28
  757. package/dist/plugin-default.js +0 -55
  758. package/dist/project-import.d.ts +0 -91
  759. package/dist/project-import.js +0 -257
  760. package/dist/project-workflow.d.ts +0 -233
  761. package/dist/project-workflow.js +0 -82
  762. package/dist/reconcile/bootstrap-systems.d.ts +0 -32
  763. package/dist/reconcile/bootstrap-systems.js +0 -175
  764. package/dist/reconcile/builtin-adapters.d.ts +0 -9
  765. package/dist/reconcile/builtin-adapters.js +0 -5545
  766. package/dist/reconcile/contracts.d.ts +0 -172
  767. package/dist/reconcile/desired-state.d.ts +0 -10
  768. package/dist/reconcile/desired-state.js +0 -322
  769. package/dist/reconcile/engine.d.ts +0 -118
  770. package/dist/reconcile/engine.js +0 -645
  771. package/dist/reconcile/errors.d.ts +0 -5
  772. package/dist/reconcile/errors.js +0 -13
  773. package/dist/reconcile/index.d.ts +0 -10
  774. package/dist/reconcile/index.js +0 -10
  775. package/dist/reconcile/live-acceptance.d.ts +0 -100
  776. package/dist/reconcile/live-acceptance.js +0 -2018
  777. package/dist/reconcile/platform.d.ts +0 -104
  778. package/dist/reconcile/platform.js +0 -100
  779. package/dist/reconcile/providers/docker-private.d.ts +0 -54
  780. package/dist/reconcile/providers/docker-private.js +0 -101
  781. package/dist/reconcile/providers/github-private.d.ts +0 -69
  782. package/dist/reconcile/providers/github-private.js +0 -145
  783. package/dist/reconcile/providers/local-private.d.ts +0 -28
  784. package/dist/reconcile/providers/local-private.js +0 -75
  785. package/dist/reconcile/providers/railway-iac.d.ts +0 -220
  786. package/dist/reconcile/providers/railway-iac.js +0 -621
  787. package/dist/reconcile/providers/release-private.d.ts +0 -89
  788. package/dist/reconcile/providers/release-private.js +0 -140
  789. package/dist/reconcile/registry.d.ts +0 -7
  790. package/dist/reconcile/registry.js +0 -79
  791. package/dist/reconcile/state.d.ts +0 -7
  792. package/dist/reconcile/state.js +0 -270
  793. package/dist/reconcile/units.d.ts +0 -6
  794. package/dist/reconcile/units.js +0 -72
  795. package/dist/remote.d.ts +0 -244
  796. package/dist/remote.js +0 -284
  797. package/dist/scenes/artifacts.d.ts +0 -16
  798. package/dist/scenes/artifacts.js +0 -61
  799. package/dist/scenes/auth.d.ts +0 -2
  800. package/dist/scenes/auth.js +0 -28
  801. package/dist/scenes/base-url.d.ts +0 -12
  802. package/dist/scenes/base-url.js +0 -123
  803. package/dist/scenes/builtin-plugins.d.ts +0 -2
  804. package/dist/scenes/builtin-plugins.js +0 -499
  805. package/dist/scenes/checkpoints.d.ts +0 -14
  806. package/dist/scenes/checkpoints.js +0 -33
  807. package/dist/scenes/device-matrix.d.ts +0 -2
  808. package/dist/scenes/device-matrix.js +0 -100
  809. package/dist/scenes/devices.d.ts +0 -11
  810. package/dist/scenes/devices.js +0 -40
  811. package/dist/scenes/diagnostics.d.ts +0 -5
  812. package/dist/scenes/diagnostics.js +0 -22
  813. package/dist/scenes/diagram-providers.d.ts +0 -2
  814. package/dist/scenes/diagram-providers.js +0 -181
  815. package/dist/scenes/diagram-validation.d.ts +0 -22
  816. package/dist/scenes/diagram-validation.js +0 -74
  817. package/dist/scenes/environment.d.ts +0 -2
  818. package/dist/scenes/environment.js +0 -65
  819. package/dist/scenes/evidence-bundle.d.ts +0 -5
  820. package/dist/scenes/evidence-bundle.js +0 -42
  821. package/dist/scenes/evidence-report.d.ts +0 -10
  822. package/dist/scenes/evidence-report.js +0 -73
  823. package/dist/scenes/evidence.d.ts +0 -16
  824. package/dist/scenes/evidence.js +0 -277
  825. package/dist/scenes/index.d.ts +0 -48
  826. package/dist/scenes/index.js +0 -312
  827. package/dist/scenes/inspect.d.ts +0 -9
  828. package/dist/scenes/inspect.js +0 -64
  829. package/dist/scenes/loader.d.ts +0 -3
  830. package/dist/scenes/loader.js +0 -38
  831. package/dist/scenes/logs.d.ts +0 -2
  832. package/dist/scenes/logs.js +0 -47
  833. package/dist/scenes/operations.d.ts +0 -3
  834. package/dist/scenes/operations.js +0 -128
  835. package/dist/scenes/phase0.d.ts +0 -9
  836. package/dist/scenes/phase0.js +0 -637
  837. package/dist/scenes/planner.d.ts +0 -12
  838. package/dist/scenes/planner.js +0 -166
  839. package/dist/scenes/playwright-adapter.d.ts +0 -2
  840. package/dist/scenes/playwright-adapter.js +0 -63
  841. package/dist/scenes/plugins.d.ts +0 -5
  842. package/dist/scenes/plugins.js +0 -115
  843. package/dist/scenes/progress.d.ts +0 -17
  844. package/dist/scenes/progress.js +0 -24
  845. package/dist/scenes/publish-destinations.d.ts +0 -12
  846. package/dist/scenes/publish-destinations.js +0 -99
  847. package/dist/scenes/publish-plan-report.d.ts +0 -10
  848. package/dist/scenes/publish-plan-report.js +0 -70
  849. package/dist/scenes/publish-plan.d.ts +0 -15
  850. package/dist/scenes/publish-plan.js +0 -248
  851. package/dist/scenes/publish-redaction.d.ts +0 -16
  852. package/dist/scenes/publish-redaction.js +0 -148
  853. package/dist/scenes/publish-release-record.d.ts +0 -13
  854. package/dist/scenes/publish-release-record.js +0 -34
  855. package/dist/scenes/publish-report.d.ts +0 -10
  856. package/dist/scenes/publish-report.js +0 -67
  857. package/dist/scenes/publish.d.ts +0 -16
  858. package/dist/scenes/publish.js +0 -298
  859. package/dist/scenes/registry.d.ts +0 -12
  860. package/dist/scenes/registry.js +0 -65
  861. package/dist/scenes/remotion-adapter.d.ts +0 -3
  862. package/dist/scenes/remotion-adapter.js +0 -94
  863. package/dist/scenes/remotion-composition-registry.d.ts +0 -2
  864. package/dist/scenes/remotion-composition-registry.js +0 -12
  865. package/dist/scenes/remotion-compositions.d.ts +0 -15
  866. package/dist/scenes/remotion-compositions.js +0 -464
  867. package/dist/scenes/remotion-diagrams.d.ts +0 -9
  868. package/dist/scenes/remotion-diagrams.js +0 -188
  869. package/dist/scenes/remotion-input.d.ts +0 -13
  870. package/dist/scenes/remotion-input.js +0 -291
  871. package/dist/scenes/remotion-visuals.d.ts +0 -29
  872. package/dist/scenes/remotion-visuals.js +0 -198
  873. package/dist/scenes/render-media-assets.d.ts +0 -9
  874. package/dist/scenes/render-media-assets.js +0 -117
  875. package/dist/scenes/render-report.d.ts +0 -10
  876. package/dist/scenes/render-report.js +0 -27
  877. package/dist/scenes/render.d.ts +0 -2
  878. package/dist/scenes/render.js +0 -218
  879. package/dist/scenes/reporter.d.ts +0 -3
  880. package/dist/scenes/reporter.js +0 -101
  881. package/dist/scenes/resume.d.ts +0 -2
  882. package/dist/scenes/resume.js +0 -79
  883. package/dist/scenes/runner.d.ts +0 -2
  884. package/dist/scenes/runner.js +0 -687
  885. package/dist/scenes/schema.d.ts +0 -6
  886. package/dist/scenes/schema.js +0 -1023
  887. package/dist/scenes/seed.d.ts +0 -2
  888. package/dist/scenes/seed.js +0 -83
  889. package/dist/scenes/segments.d.ts +0 -15
  890. package/dist/scenes/segments.js +0 -79
  891. package/dist/scenes/selectors.d.ts +0 -3
  892. package/dist/scenes/selectors.js +0 -21
  893. package/dist/scenes/timeline.d.ts +0 -11
  894. package/dist/scenes/timeline.js +0 -26
  895. package/dist/scenes/timeouts.d.ts +0 -6
  896. package/dist/scenes/timeouts.js +0 -17
  897. package/dist/scenes/training-captions.d.ts +0 -14
  898. package/dist/scenes/training-captions.js +0 -98
  899. package/dist/scenes/training-report.d.ts +0 -10
  900. package/dist/scenes/training-report.js +0 -78
  901. package/dist/scenes/training-transcript.d.ts +0 -24
  902. package/dist/scenes/training-transcript.js +0 -204
  903. package/dist/scenes/training.d.ts +0 -10
  904. package/dist/scenes/training.js +0 -134
  905. package/dist/scenes/types.d.ts +0 -1900
  906. package/dist/scenes/types.js +0 -8
  907. package/dist/scenes/visual-audit-contact-sheets.d.ts +0 -6
  908. package/dist/scenes/visual-audit-contact-sheets.js +0 -119
  909. package/dist/scenes/visual-audit-fixtures.d.ts +0 -25
  910. package/dist/scenes/visual-audit-fixtures.js +0 -247
  911. package/dist/scenes/visual-audit-report.d.ts +0 -11
  912. package/dist/scenes/visual-audit-report.js +0 -85
  913. package/dist/scenes/visual-audit-review.d.ts +0 -23
  914. package/dist/scenes/visual-audit-review.js +0 -829
  915. package/dist/scenes/visual-audit-routes.d.ts +0 -13
  916. package/dist/scenes/visual-audit-routes.js +0 -308
  917. package/dist/scenes/visual-audit.d.ts +0 -3
  918. package/dist/scenes/visual-audit.js +0 -596
  919. package/dist/scripts/aggregate-book.js +0 -16
  920. package/dist/scripts/assert-release-tag-version.js +0 -23
  921. package/dist/scripts/build-dist.js +0 -294
  922. package/dist/scripts/build-tenant-worker.js +0 -36
  923. package/dist/scripts/check-build-warnings.js +0 -51
  924. package/dist/scripts/cleanup-markdown.js +0 -377
  925. package/dist/scripts/cli-test-fixtures.js +0 -44
  926. package/dist/scripts/config-treeseed.js +0 -131
  927. package/dist/scripts/deployment-readiness.js +0 -20
  928. package/dist/scripts/generate-treedx-openapi-types.js +0 -186
  929. package/dist/scripts/install-managed-dependencies.js +0 -12
  930. package/dist/scripts/key-agent.js +0 -165
  931. package/dist/scripts/local-dev.js +0 -129
  932. package/dist/scripts/migrate-journey-csv-to-guarantees.js +0 -140
  933. package/dist/scripts/operations-runner-smoke.js +0 -16
  934. package/dist/scripts/package-tools.js +0 -85
  935. package/dist/scripts/patch-starlight-content-path.js +0 -173
  936. package/dist/scripts/prepare.js +0 -10
  937. package/dist/scripts/publish-package.js +0 -29
  938. package/dist/scripts/release-verify.js +0 -105
  939. package/dist/scripts/run-fixture-astro-command.js +0 -18
  940. package/dist/scripts/scaffold-site.js +0 -66
  941. package/dist/scripts/sync-template.js +0 -20
  942. package/dist/scripts/template-catalog.test.js +0 -86
  943. package/dist/scripts/template-command.js +0 -31
  944. package/dist/scripts/tenant-astro-command.js +0 -3
  945. package/dist/scripts/tenant-build.js +0 -48
  946. package/dist/scripts/tenant-check.js +0 -10
  947. package/dist/scripts/tenant-d1-migrate-local.js +0 -15
  948. package/dist/scripts/tenant-deploy.js +0 -220
  949. package/dist/scripts/tenant-destroy.js +0 -112
  950. package/dist/scripts/tenant-dev.js +0 -160
  951. package/dist/scripts/tenant-lint.js +0 -4
  952. package/dist/scripts/tenant-test.js +0 -4
  953. package/dist/scripts/tenant-workflow-action.js +0 -101
  954. package/dist/scripts/test-cloudflare-local.js +0 -209
  955. package/dist/scripts/test-scaffold.js +0 -300
  956. package/dist/scripts/test-smoke.js +0 -137
  957. package/dist/scripts/treeseed-assert-release-tag-version.js +0 -21
  958. package/dist/scripts/treeseed-build-dist.js +0 -131
  959. package/dist/scripts/treeseed-publish-package.js +0 -19
  960. package/dist/scripts/treeseed-release-verify.js +0 -131
  961. package/dist/scripts/validate-templates.js +0 -6
  962. package/dist/scripts/verify-driver.js +0 -45
  963. package/dist/scripts/workflow-commands.test.js +0 -31
  964. package/dist/scripts/workspace-command-e2e.js +0 -718
  965. package/dist/scripts/workspace-lint.js +0 -15
  966. package/dist/scripts/workspace-preflight.js +0 -22
  967. package/dist/scripts/workspace-publish-changed-packages.js +0 -16
  968. package/dist/scripts/workspace-release-test.js +0 -104
  969. package/dist/scripts/workspace-release-verify.js +0 -81
  970. package/dist/scripts/workspace-save.js +0 -64
  971. package/dist/scripts/workspace-start-warning.js +0 -3
  972. package/dist/scripts/workspace-test-unit.js +0 -4
  973. package/dist/scripts/workspace-test.js +0 -17
  974. package/dist/sdk-dispatch.d.ts +0 -12
  975. package/dist/sdk-dispatch.js +0 -126
  976. package/dist/sdk-fields.d.ts +0 -11
  977. package/dist/sdk-filters.d.ts +0 -4
  978. package/dist/sdk-filters.js +0 -74
  979. package/dist/sdk-types.d.ts +0 -3868
  980. package/dist/sdk-types.js +0 -542
  981. package/dist/sdk-version.d.ts +0 -2
  982. package/dist/sdk-version.js +0 -42
  983. package/dist/sdk.d.ts +0 -266
  984. package/dist/sdk.js +0 -825
  985. package/dist/secrets-capability.d.ts +0 -421
  986. package/dist/secrets-capability.js +0 -530
  987. package/dist/seeds/errors.d.ts +0 -5
  988. package/dist/seeds/errors.js +0 -22
  989. package/dist/seeds/index.d.ts +0 -20
  990. package/dist/seeds/index.js +0 -53
  991. package/dist/seeds/loader.d.ts +0 -8
  992. package/dist/seeds/loader.js +0 -32
  993. package/dist/seeds/normalize.d.ts +0 -13
  994. package/dist/seeds/normalize.js +0 -282
  995. package/dist/seeds/planner.d.ts +0 -10
  996. package/dist/seeds/planner.js +0 -149
  997. package/dist/seeds/schema.d.ts +0 -2
  998. package/dist/seeds/schema.js +0 -893
  999. package/dist/seeds/types.d.ts +0 -312
  1000. package/dist/seeds/types.js +0 -12
  1001. package/dist/service-credentials.d.ts +0 -54
  1002. package/dist/service-credentials.js +0 -112
  1003. package/dist/stores/cursor-store.d.ts +0 -10
  1004. package/dist/stores/cursor-store.js +0 -164
  1005. package/dist/stores/envelopes.d.ts +0 -116
  1006. package/dist/stores/envelopes.js +0 -219
  1007. package/dist/stores/helpers.d.ts +0 -12
  1008. package/dist/stores/helpers.js +0 -42
  1009. package/dist/stores/lease-store.d.ts +0 -18
  1010. package/dist/stores/lease-store.js +0 -189
  1011. package/dist/stores/message-store.d.ts +0 -12
  1012. package/dist/stores/message-store.js +0 -273
  1013. package/dist/stores/operational-store.d.ts +0 -55
  1014. package/dist/stores/operational-store.js +0 -861
  1015. package/dist/stores/project-workflow-store.d.ts +0 -56
  1016. package/dist/stores/project-workflow-store.js +0 -482
  1017. package/dist/stores/run-store.d.ts +0 -9
  1018. package/dist/stores/run-store.js +0 -75
  1019. package/dist/stores/subscription-store.d.ts +0 -8
  1020. package/dist/stores/subscription-store.js +0 -73
  1021. package/dist/template-catalog.d.ts +0 -13
  1022. package/dist/template-catalog.js +0 -151
  1023. package/dist/template-launch-requirements.d.ts +0 -118
  1024. package/dist/template-launch-requirements.js +0 -768
  1025. package/dist/template-launch-ui.d.ts +0 -85
  1026. package/dist/template-launch-ui.js +0 -189
  1027. package/dist/timing.d.ts +0 -20
  1028. package/dist/timing.js +0 -73
  1029. package/dist/treedx/adapters.d.ts +0 -6
  1030. package/dist/treedx/adapters.js +0 -36
  1031. package/dist/treedx/client.d.ts +0 -222
  1032. package/dist/treedx/client.js +0 -871
  1033. package/dist/treedx/errors.d.ts +0 -13
  1034. package/dist/treedx/federated-client.d.ts +0 -27
  1035. package/dist/treedx/federated-client.js +0 -158
  1036. package/dist/treedx/graph-adapter.d.ts +0 -33
  1037. package/dist/treedx/graph-adapter.js +0 -156
  1038. package/dist/treedx/index.d.ts +0 -14
  1039. package/dist/treedx/index.js +0 -48
  1040. package/dist/treedx/market-integration.d.ts +0 -27
  1041. package/dist/treedx/market-integration.js +0 -131
  1042. package/dist/treedx/ports.d.ts +0 -166
  1043. package/dist/treedx/ports.js +0 -231
  1044. package/dist/treedx/query-adapter.d.ts +0 -19
  1045. package/dist/treedx/query-adapter.js +0 -62
  1046. package/dist/treedx/registry-client.d.ts +0 -11
  1047. package/dist/treedx/registry-client.js +0 -19
  1048. package/dist/treedx/repository-adapter.d.ts +0 -45
  1049. package/dist/treedx/repository-adapter.js +0 -319
  1050. package/dist/treedx/sdk-integration.d.ts +0 -27
  1051. package/dist/treedx/sdk-integration.js +0 -63
  1052. package/dist/treedx/workspace-adapter.d.ts +0 -27
  1053. package/dist/treedx/workspace-adapter.js +0 -65
  1054. package/dist/treedx-backends.d.ts +0 -220
  1055. package/dist/treedx-backends.js +0 -634
  1056. package/dist/treedx-client.d.ts +0 -89
  1057. package/dist/treedx-client.js +0 -184
  1058. package/dist/treeseed/services/compose.yml +0 -6
  1059. package/dist/treeseed/template-catalog/catalog.fixture.json +0 -707
  1060. package/dist/types/cloudflare.d.ts +0 -54
  1061. package/dist/verification.d.ts +0 -31
  1062. package/dist/verification.js +0 -430
  1063. package/dist/workflow/operations.d.ts +0 -1516
  1064. package/dist/workflow/operations.js +0 -7001
  1065. package/dist/workflow/policy.d.ts +0 -12
  1066. package/dist/workflow/policy.js +0 -70
  1067. package/dist/workflow/runs.d.ts +0 -143
  1068. package/dist/workflow/runs.js +0 -720
  1069. package/dist/workflow/session.d.ts +0 -34
  1070. package/dist/workflow/session.js +0 -160
  1071. package/dist/workflow/worktrees.d.ts +0 -43
  1072. package/dist/workflow/worktrees.js +0 -307
  1073. package/dist/workflow-state.d.ts +0 -250
  1074. package/dist/workflow-state.js +0 -844
  1075. package/dist/workflow-support.d.ts +0 -28
  1076. package/dist/workflow-support.js +0 -390
  1077. package/dist/workflow.d.ts +0 -327
  1078. package/dist/workflow.js +0 -140
  1079. package/drizzle/d1/0000_treeseed_d1.sql +0 -19
  1080. package/drizzle/market/0000_market_control_plane.sql +0 -3223
  1081. package/drizzle/market/0001_capacity_budget_mode_default.sql +0 -4
  1082. package/drizzle/market/0002_user_email_addresses.sql +0 -26
  1083. package/drizzle/market/0003_project_team_slug_unique.sql +0 -4
  1084. package/drizzle/market/0004_treedx_market_integration.sql +0 -99
  1085. package/drizzle/market/0005_agent_capacity_coordination.sql +0 -145
  1086. package/drizzle/market/0006_provider_assignment_lifecycle.sql +0 -9
  1087. package/drizzle/market/0007_agent_architecture_gap_closure.sql +0 -157
  1088. package/drizzle/market/0008_agent_capacity_operational_closure.sql +0 -27
  1089. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +0 -29
  1090. package/drizzle/market/0010_secrets_capability_persistence.sql +0 -130
  1091. package/drizzle/market/0011_github_app_adapter.sql +0 -47
  1092. package/drizzle/market/0012_workday_test_runs.sql +0 -44
  1093. package/drizzle/market/0013_runtime_task_lifecycle.sql +0 -39
  1094. package/drizzle/market/0014_governance_pipeline.sql +0 -189
  1095. package/drizzle/market/0015_agent_decision_assignment_graphs.sql +0 -60
  1096. package/scripts/verify-driver.ts +0 -51
  1097. package/templates/github/deploy-web.workflow.yml +0 -168
  1098. package/templates/github/hosted-project.workflow.yml +0 -76
  1099. /package/dist/{api/types.js → agent-capacity/contracts/capacity/workdays/workday-records.js} +0 -0
  1100. /package/dist/{hosting/contracts.js → agent-capacity/contracts/operations/workflow-promotion.js} +0 -0
  1101. /package/dist/{platform/contracts.js → agent-capacity/contracts/projects/agents/project-agent-class.js} +0 -0
  1102. /package/dist/{reconcile/contracts.js → agent-capacity/contracts/runtime/runtime-observability.js} +0 -0
  1103. /package/dist/{types/cloudflare.js → agent-capacity/contracts/support/decision-work.js} +0 -0
  1104. /package/dist/{field-aliases.js → entrypoints/models/field-aliases.js} +0 -0
  1105. /package/dist/{sdk-fields.js → entrypoints/models/sdk-fields.js} +0 -0
  1106. /package/dist/{runtime.d.ts → runtime/runtime.d.ts} +0 -0
  1107. /package/dist/{runtime.js → runtime/runtime.js} +0 -0
  1108. /package/dist/treedx/{errors.js → support/errors.js} +0 -0
@@ -1,1782 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
3
- import { dirname, relative, resolve, sep } from "node:path";
4
- import { parse as parseYaml } from "yaml";
5
- const TREESEED_GUARANTEE_SCHEMA_VERSION = "treeseed.guarantee/v1";
6
- const TREESEED_GUARANTEE_VERIFIERS_SCHEMA_VERSION = "treeseed.guarantee-verifiers/v1";
7
- const TREESEED_GUARANTEE_JOURNEY_AUDIT_SCHEMA_VERSION = "treeseed.guarantee-journey-audit/v1";
8
- const TAXONOMY_PATTERN = /^[a-z][a-z0-9-]*$/u;
9
- const GUARANTEE_ID_PATTERN = /^guarantee\.[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*){2,}\.\d{3}$/u;
10
- const KNOWN_GATES = /* @__PURE__ */ new Set(["smoke", "core", "release", "security", "migration", "demo", "backlog", "future"]);
11
- const KNOWN_STATUSES = /* @__PURE__ */ new Set(["active", "planned", "blocked", "backlog", "deprecated"]);
12
- const KNOWN_SURFACES = /* @__PURE__ */ new Set(["admin-ui", "agent-runtime", "api-control-plane", "market-ui", "cli", "scene", "content-runtime"]);
13
- const KNOWN_DEVICES = /* @__PURE__ */ new Set(["desktop_chromium", "desktop_firefox", "desktop_webkit", "tablet_chromium", "mobile_chromium", "mobile_webkit"]);
14
- const KNOWN_VERIFIER_KINDS = /* @__PURE__ */ new Set(["apiAcceptanceCase", "vitestCase", "nodeScript", "packageScript", "scene", "manualEvidence", "todo"]);
15
- const EXCLUDED_DIRS = /* @__PURE__ */ new Set(["node_modules", "dist", "build", ".treeseed", "coverage"]);
16
- function diagnostic(severity, code, message, path, sourcePath) {
17
- return { severity, code, message, ...path ? { path } : {}, ...sourcePath ? { sourcePath } : {} };
18
- }
19
- function isRecord(value) {
20
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
21
- }
22
- function arrayOrEmpty(value) {
23
- return value ?? [];
24
- }
25
- function stringValue(value) {
26
- return typeof value === "string" ? value.trim() : "";
27
- }
28
- function stringArray(value) {
29
- if (!Array.isArray(value)) return [];
30
- return value.map((entry) => stringValue(entry)).filter(Boolean);
31
- }
32
- function numberArray(value) {
33
- if (!Array.isArray(value)) return [];
34
- return value.map((entry) => Number(entry)).filter((entry) => Number.isInteger(entry));
35
- }
36
- function numberValue(value) {
37
- const numeric = Number(value);
38
- return Number.isFinite(numeric) ? numeric : void 0;
39
- }
40
- function sortedUnique(values) {
41
- return [...new Set(values)].sort((a, b) => a.localeCompare(b));
42
- }
43
- function normalizeTreeseedGuaranteeTaxonomy(value) {
44
- return value.trim().replace(/TreeDX/gu, "treedx").replace(/tree[\s_-]*dx/giu, "treedx").replace(/([a-z0-9])([A-Z])/gu, "$1-$2").replace(/[_\s]+/gu, "-").toLowerCase().replace(/[^a-z0-9-]+/gu, "-").replace(/^-|-$/gu, "").replace(/-{2,}/gu, "-");
45
- }
46
- function slugifyTreeseedGuaranteeJourney(value) {
47
- return normalizeTreeseedGuaranteeTaxonomy(value.replace(/&/gu, "and"));
48
- }
49
- function readYamlFile(filePath, diagnostics) {
50
- try {
51
- return parseYaml(readFileSync(filePath, "utf8"));
52
- } catch (error) {
53
- diagnostics.push(diagnostic("error", "guarantee.yaml_parse_error", error instanceof Error ? error.message : String(error), "manifest", filePath));
54
- return null;
55
- }
56
- }
57
- function walkFiles(root, predicate) {
58
- if (!existsSync(root)) return [];
59
- const results = [];
60
- for (const entry of readdirSync(root, { withFileTypes: true })) {
61
- if (EXCLUDED_DIRS.has(entry.name)) continue;
62
- const fullPath = resolve(root, entry.name);
63
- if (entry.isDirectory()) {
64
- if (fullPath.endsWith(`${sep}packages${sep}treedx${sep}guarantees`)) continue;
65
- results.push(...walkFiles(fullPath, predicate));
66
- continue;
67
- }
68
- if (entry.isFile() && predicate(fullPath)) results.push(fullPath);
69
- }
70
- return results.sort((a, b) => a.localeCompare(b));
71
- }
72
- function nearestPackageRoot(workspaceRoot, filePath) {
73
- const packagesRoot = resolve(workspaceRoot, "packages");
74
- if (filePath.startsWith(`${packagesRoot}${sep}`)) {
75
- const [packageName] = relative(packagesRoot, filePath).split(sep);
76
- if (packageName) return resolve(packagesRoot, packageName);
77
- }
78
- return workspaceRoot;
79
- }
80
- function ownerPackageFromRoot(packageRoot) {
81
- const packageJson = resolve(packageRoot, "package.json");
82
- if (existsSync(packageJson)) {
83
- try {
84
- const parsed = JSON.parse(readFileSync(packageJson, "utf8"));
85
- if (typeof parsed.name === "string" && parsed.name.trim()) return parsed.name.trim();
86
- } catch {
87
- }
88
- }
89
- return "@treeseed/market";
90
- }
91
- function validateTaxonomyPath(input) {
92
- const packageRoot = nearestPackageRoot(input.workspaceRoot, input.sourcePath);
93
- const relativePath = relative(packageRoot, input.sourcePath).split(sep);
94
- const guaranteeIndex = relativePath.indexOf("guarantees");
95
- if (guaranteeIndex < 0 || relativePath.length < guaranteeIndex + 4) {
96
- input.diagnostics.push(diagnostic("error", "guarantee.invalid_path", "Guarantee files must live under guarantees/<type>/<subtype>/*.guarantee.yaml.", "sourcePath", input.sourcePath));
97
- return;
98
- }
99
- const pathType = relativePath[guaranteeIndex + 1];
100
- const pathSubtype = relativePath[guaranteeIndex + 2];
101
- if (pathType === "verifiers") return;
102
- if (pathType !== input.manifest.type) {
103
- input.diagnostics.push(diagnostic("error", "guarantee.type_path_mismatch", `Guarantee type "${input.manifest.type}" must match directory "${pathType}".`, "type", input.sourcePath));
104
- }
105
- if (pathSubtype !== input.manifest.subtype) {
106
- input.diagnostics.push(diagnostic("error", "guarantee.subtype_path_mismatch", `Guarantee subtype "${input.manifest.subtype}" must match directory "${pathSubtype}".`, "subtype", input.sourcePath));
107
- }
108
- }
109
- function parseContract(value) {
110
- if (!isRecord(value)) return void 0;
111
- return {
112
- ...typeof value.required === "boolean" ? { required: value.required } : {},
113
- verifierRefs: stringArray(value.verifierRefs)
114
- };
115
- }
116
- function parseRunContract(value) {
117
- if (!isRecord(value)) return void 0;
118
- const timeoutSeconds = numberValue(value.timeoutSeconds);
119
- return {
120
- ...timeoutSeconds && timeoutSeconds > 0 ? { timeoutSeconds } : {},
121
- ...typeof value.allowSkipped === "boolean" ? { allowSkipped: value.allowSkipped } : {},
122
- ...typeof value.requiredForRelease === "boolean" ? { requiredForRelease: value.requiredForRelease } : {}
123
- };
124
- }
125
- function parseScene(value) {
126
- if (!isRecord(value)) return void 0;
127
- const mode = isRecord(value.mode) ? value.mode : {};
128
- return {
129
- ...typeof value.required === "boolean" ? { required: value.required } : {},
130
- ...typeof value.manifest === "string" ? { manifest: value.manifest } : {},
131
- ...isRecord(value.mode) ? { mode: { acceptance: mode.acceptance === true, demo: mode.demo === true, training: mode.training === true } } : {},
132
- ...typeof value.entryRoute === "string" ? { entryRoute: value.entryRoute } : {},
133
- ...typeof value.componentContract === "string" ? { componentContract: value.componentContract } : {},
134
- expectedEvidence: stringArray(value.expectedEvidence)
135
- };
136
- }
137
- function parseGuaranteeManifest(value, diagnostics, sourcePath) {
138
- if (!isRecord(value)) {
139
- diagnostics.push(diagnostic("error", "guarantee.invalid_manifest", "Guarantee manifest must be an object.", "manifest", sourcePath));
140
- return null;
141
- }
142
- const schemaVersion = stringValue(value.schemaVersion);
143
- if (schemaVersion !== TREESEED_GUARANTEE_SCHEMA_VERSION) diagnostics.push(diagnostic("error", "guarantee.unsupported_schema_version", `Unsupported guarantee schema version "${schemaVersion}".`, "schemaVersion", sourcePath));
144
- const id = stringValue(value.id);
145
- const type = stringValue(value.type);
146
- const subtype = stringValue(value.subtype);
147
- const journey = stringValue(value.journey);
148
- const ownerPackage = stringValue(value.ownerPackage);
149
- const surface = stringValue(value.surface);
150
- const summary = stringValue(value.summary);
151
- const status = stringValue(value.status);
152
- for (const [field, fieldValue] of Object.entries({ id, type, subtype, journey, ownerPackage, summary, status })) {
153
- if (!fieldValue) diagnostics.push(diagnostic("error", "guarantee.missing_required_field", `Missing required field: ${field}.`, field, sourcePath));
154
- }
155
- if (id && !GUARANTEE_ID_PATTERN.test(id)) diagnostics.push(diagnostic("error", "guarantee.invalid_id", `Invalid guarantee id "${id}".`, "id", sourcePath));
156
- if (type && !TAXONOMY_PATTERN.test(type)) diagnostics.push(diagnostic("error", "guarantee.invalid_type", `Guarantee type must be lowercase kebab-case: ${type}.`, "type", sourcePath));
157
- if (subtype && !TAXONOMY_PATTERN.test(subtype)) diagnostics.push(diagnostic("error", "guarantee.invalid_subtype", `Guarantee subtype must be lowercase kebab-case: ${subtype}.`, "subtype", sourcePath));
158
- if (status && !KNOWN_STATUSES.has(status)) diagnostics.push(diagnostic("error", "guarantee.invalid_status", `Unsupported guarantee status "${status}".`, "status", sourcePath));
159
- if (surface && !KNOWN_SURFACES.has(surface)) diagnostics.push(diagnostic("error", "guarantee.invalid_surface", `Unsupported guarantee surface "${surface}".`, "surface", sourcePath));
160
- const dependsOnGuarantees = Array.isArray(value.dependsOnGuarantees) ? value.dependsOnGuarantees.map((entry) => {
161
- if (typeof entry === "string") return entry;
162
- if (!isRecord(entry)) return "";
163
- return typeof entry.ref === "string" && typeof entry.ownerPackage === "string" ? `${entry.ownerPackage}:${entry.ref}` : stringValue(entry.ref);
164
- }).filter(Boolean) : [];
165
- const dependencies = isRecord(value.dependencies) ? value.dependencies : {};
166
- const actors = isRecord(value.actors) ? value.actors : {};
167
- const devices = isRecord(value.devices) ? value.devices : {};
168
- const preconditions = isRecord(value.preconditions) ? value.preconditions : {};
169
- const evidence = isRecord(value.evidence) ? value.evidence : {};
170
- const gates = stringArray(value.gates);
171
- for (const gate of gates) {
172
- if (!KNOWN_GATES.has(gate)) diagnostics.push(diagnostic("error", "guarantee.invalid_gate", `Unsupported guarantee gate "${gate}".`, "gates", sourcePath));
173
- }
174
- const requiredDevices = stringArray(devices.required);
175
- const optionalDevices = stringArray(devices.optional);
176
- for (const device of [...requiredDevices, ...optionalDevices]) {
177
- if (!KNOWN_DEVICES.has(device)) diagnostics.push(diagnostic("error", "guarantee.invalid_device", `Unsupported guarantee device "${device}".`, "devices", sourcePath));
178
- }
179
- const manifest = {
180
- schemaVersion: TREESEED_GUARANTEE_SCHEMA_VERSION,
181
- id,
182
- ...Number.isInteger(Number(value.journeyIndex)) ? { journeyIndex: Number(value.journeyIndex) } : {},
183
- type,
184
- subtype,
185
- journey,
186
- ownerPackage,
187
- ...surface ? { surface } : {},
188
- summary,
189
- status,
190
- ...parseRunContract(value.run) ? { run: parseRunContract(value.run) } : {},
191
- dependencies: {
192
- journeys: numberArray(dependencies.journeys),
193
- guarantees: stringArray(dependencies.guarantees)
194
- },
195
- actors: {
196
- allowed: stringArray(actors.allowed),
197
- forbidden: stringArray(actors.forbidden)
198
- },
199
- devices: {
200
- required: requiredDevices,
201
- ...optionalDevices.length > 0 ? { optional: optionalDevices } : {}
202
- },
203
- gates,
204
- preconditions: {
205
- fixtures: stringArray(preconditions.fixtures),
206
- notes: stringArray(preconditions.notes)
207
- },
208
- ...parseScene(value.scene) ? { scene: parseScene(value.scene) } : {},
209
- ...parseContract(value.api) ? { api: parseContract(value.api) } : {},
210
- ...parseContract(value.content) ? { content: parseContract(value.content) } : {},
211
- ...parseContract(value.audit) ? { audit: parseContract(value.audit) } : {},
212
- negativeCases: Array.isArray(value.negativeCases) ? value.negativeCases.filter(isRecord).map((entry) => ({
213
- id: stringValue(entry.id),
214
- ...typeof entry.actor === "string" ? { actor: entry.actor } : {},
215
- verifierRefs: stringArray(entry.verifierRefs),
216
- notes: stringArray(entry.notes)
217
- })) : [],
218
- evidence: {
219
- required: stringArray(evidence.required),
220
- optional: stringArray(evidence.optional)
221
- },
222
- notes: stringArray(value.notes),
223
- dependsOnGuarantees
224
- };
225
- if (manifest.status === "active") {
226
- const hasContract = Boolean(manifest.scene?.required || manifest.api?.required || manifest.content?.required || manifest.audit?.required);
227
- if (!hasContract) diagnostics.push(diagnostic("error", "guarantee.active_missing_contract", "Active guarantees must require a scene, API, content, or audit contract.", "scene", sourcePath));
228
- if ((manifest.gates.includes("release") || manifest.gates.includes("security")) && manifest.evidence.required.length === 0) {
229
- diagnostics.push(diagnostic("error", "guarantee.release_missing_evidence", "Release/security guarantees must require evidence.", "evidence.required", sourcePath));
230
- }
231
- if ((manifest.gates.includes("release") || manifest.gates.includes("security")) && allVerifierRefs(manifest).some((ref) => ref.startsWith("todo."))) {
232
- diagnostics.push(diagnostic("error", "guarantee.release_todo_verifier", "Release/security guarantees cannot use todo verifier refs.", "verifierRefs", sourcePath));
233
- }
234
- }
235
- if (manifest.status === "active" && manifest.negativeCases?.length === 0) {
236
- diagnostics.push(diagnostic("warning", "guarantee.no_negative_cases", "Active guarantees should define at least one negative case.", "negativeCases", sourcePath));
237
- }
238
- if (manifest.scene?.required && manifest.scene.manifest) {
239
- const scenePath = resolve(dirname(sourcePath), manifest.scene.manifest);
240
- if (!existsSync(scenePath) && manifest.status === "active") diagnostics.push(diagnostic("error", "guarantee.scene_missing", `Scene manifest does not exist: ${manifest.scene.manifest}.`, "scene.manifest", sourcePath));
241
- if (!existsSync(scenePath) && manifest.status !== "active") diagnostics.push(diagnostic("warning", "guarantee.scene_missing_planned", `Planned guarantee scene does not exist yet: ${manifest.scene.manifest}.`, "scene.manifest", sourcePath));
242
- }
243
- return diagnostics.some((entry) => entry.severity === "error" && entry.sourcePath === sourcePath && entry.code !== "guarantee.scene_missing_planned") ? manifest : manifest;
244
- }
245
- function loadTreeseedGuaranteeManifest(input) {
246
- const sourcePath = resolve(input.path);
247
- const packageRoot = nearestPackageRoot(resolve(input.workspaceRoot), sourcePath);
248
- const ownerPackage = ownerPackageFromRoot(packageRoot);
249
- const diagnostics = [];
250
- const value = readYamlFile(sourcePath, diagnostics);
251
- const manifest = value ? parseGuaranteeManifest(value, diagnostics, sourcePath) : null;
252
- if (manifest) {
253
- if (manifest.ownerPackage !== ownerPackage) {
254
- diagnostics.push(diagnostic("error", "guarantee.owner_package_mismatch", `Guarantee ownerPackage "${manifest.ownerPackage}" must match package "${ownerPackage}".`, "ownerPackage", sourcePath));
255
- }
256
- validateTaxonomyPath({ workspaceRoot: input.workspaceRoot, sourcePath, manifest, diagnostics });
257
- if (sourcePath.includes(`${sep}packages${sep}treedx${sep}guarantees${sep}`)) {
258
- diagnostics.push(diagnostic("error", "guarantee.treedx_product_semantics_forbidden", "TreeSeed guarantee manifests must not live in packages/treedx.", "sourcePath", sourcePath));
259
- }
260
- }
261
- return {
262
- sourcePath,
263
- relativePath: relative(resolve(input.workspaceRoot), sourcePath),
264
- packageRoot,
265
- ownerPackage,
266
- manifest,
267
- diagnostics
268
- };
269
- }
270
- function parseVerifierRegistry(value, diagnostics, sourcePath) {
271
- if (!isRecord(value)) {
272
- diagnostics.push(diagnostic("error", "guarantee_verifiers.invalid_manifest", "Verifier registry must be an object.", "manifest", sourcePath));
273
- return null;
274
- }
275
- const schemaVersion = stringValue(value.schemaVersion);
276
- const ownerPackage = stringValue(value.ownerPackage);
277
- if (schemaVersion !== TREESEED_GUARANTEE_VERIFIERS_SCHEMA_VERSION) diagnostics.push(diagnostic("error", "guarantee_verifiers.unsupported_schema_version", `Unsupported verifier schema version "${schemaVersion}".`, "schemaVersion", sourcePath));
278
- if (!ownerPackage) diagnostics.push(diagnostic("error", "guarantee_verifiers.missing_owner_package", "Verifier registry ownerPackage is required.", "ownerPackage", sourcePath));
279
- const rawVerifiers = isRecord(value.verifiers) ? value.verifiers : {};
280
- const verifiers = {};
281
- for (const [id, entry] of Object.entries(rawVerifiers)) {
282
- if (!isRecord(entry)) {
283
- diagnostics.push(diagnostic("error", "guarantee_verifiers.invalid_entry", `Verifier "${id}" must be an object.`, `verifiers.${id}`, sourcePath));
284
- continue;
285
- }
286
- const kind = stringValue(entry.kind);
287
- verifiers[id] = {
288
- kind,
289
- ...typeof entry.ownerPackage === "string" ? { ownerPackage: entry.ownerPackage } : {},
290
- ...typeof entry.spec === "string" ? { spec: entry.spec } : {},
291
- ...typeof entry.caseId === "string" ? { caseId: entry.caseId } : {},
292
- ...typeof entry.command === "string" ? { command: entry.command } : {},
293
- ...Array.isArray(entry.args) ? { args: stringArray(entry.args) } : {},
294
- ...typeof entry.testFile === "string" ? { testFile: entry.testFile } : {},
295
- ...typeof entry.testName === "string" ? { testName: entry.testName } : {},
296
- ...typeof entry.cwd === "string" ? { cwd: entry.cwd } : {},
297
- ...numberValue(entry.timeoutSeconds) ? { timeoutSeconds: numberValue(entry.timeoutSeconds) } : {},
298
- ...Array.isArray(entry.evidence) ? { evidence: stringArray(entry.evidence) } : {},
299
- ...typeof entry.description === "string" ? { description: entry.description } : {}
300
- };
301
- if (!verifiers[id].kind) diagnostics.push(diagnostic("error", "guarantee_verifiers.missing_kind", `Verifier "${id}" is missing kind.`, `verifiers.${id}.kind`, sourcePath));
302
- if (verifiers[id].kind && !KNOWN_VERIFIER_KINDS.has(verifiers[id].kind)) diagnostics.push(diagnostic("error", "guarantee_verifiers.invalid_kind", `Verifier "${id}" has unsupported kind "${verifiers[id].kind}".`, `verifiers.${id}.kind`, sourcePath));
303
- }
304
- return {
305
- schemaVersion: TREESEED_GUARANTEE_VERIFIERS_SCHEMA_VERSION,
306
- ownerPackage,
307
- verifiers
308
- };
309
- }
310
- function loadVerifierRegistry(workspaceRoot, path) {
311
- const sourcePath = resolve(path);
312
- const packageRoot = nearestPackageRoot(workspaceRoot, sourcePath);
313
- const ownerPackage = ownerPackageFromRoot(packageRoot);
314
- const diagnostics = [];
315
- const value = readYamlFile(sourcePath, diagnostics);
316
- const registry = value ? parseVerifierRegistry(value, diagnostics, sourcePath) : null;
317
- if (registry && registry.ownerPackage !== ownerPackage) {
318
- diagnostics.push(diagnostic("error", "guarantee_verifiers.owner_package_mismatch", `Verifier ownerPackage "${registry.ownerPackage}" must match package "${ownerPackage}".`, "ownerPackage", sourcePath));
319
- }
320
- return { sourcePath, ownerPackage, registry, diagnostics };
321
- }
322
- function loadTreeseedGuaranteeVerifierRegistry(input) {
323
- return loadVerifierRegistry(resolve(input.workspaceRoot), input.path);
324
- }
325
- function discoverTreeseedGuarantees(input = { workspaceRoot: process.cwd() }) {
326
- const workspaceRoot = resolve(input.workspaceRoot);
327
- const guaranteePaths = walkFiles(workspaceRoot, (filePath) => filePath.endsWith(".guarantee.yaml"));
328
- const verifierPaths = walkFiles(workspaceRoot, (filePath) => filePath.endsWith(".verifiers.yaml"));
329
- const guarantees = guaranteePaths.map((path) => loadTreeseedGuaranteeManifest({ workspaceRoot, path }));
330
- const verifierRegistries = verifierPaths.map((path) => loadVerifierRegistry(workspaceRoot, path));
331
- return validateTreeseedGuaranteeRegistry({ workspaceRoot, guarantees, verifierRegistries, filter: input.filter });
332
- }
333
- function validateTreeseedGuarantee(input) {
334
- return loadTreeseedGuaranteeManifest(input);
335
- }
336
- function allVerifierRefs(manifest) {
337
- return [
338
- ...arrayOrEmpty(manifest.api?.verifierRefs),
339
- ...arrayOrEmpty(manifest.content?.verifierRefs),
340
- ...arrayOrEmpty(manifest.audit?.verifierRefs),
341
- ...arrayOrEmpty(manifest.negativeCases).flatMap((entry) => arrayOrEmpty(entry.verifierRefs))
342
- ];
343
- }
344
- function selectedByFilter(manifest, filter = {}) {
345
- if (filter.gate && !manifest.gates.includes(filter.gate)) return false;
346
- if (filter.type && manifest.type !== filter.type) return false;
347
- if (filter.subtype && manifest.subtype !== filter.subtype) return false;
348
- if (filter.ownerPackage && manifest.ownerPackage !== filter.ownerPackage) return false;
349
- if (filter.ownerPackages && filter.ownerPackages.length > 0 && !filter.ownerPackages.includes(manifest.ownerPackage)) return false;
350
- if (filter.sceneBacked === true && !manifest.scene?.manifest) return false;
351
- if (filter.status && manifest.status !== filter.status) return false;
352
- if (filter.ids && filter.ids.length > 0 && !filter.ids.includes(manifest.id)) return false;
353
- if (filter.journeyIndexes && filter.journeyIndexes.length > 0 && (!manifest.journeyIndex || !filter.journeyIndexes.includes(manifest.journeyIndex))) return false;
354
- return true;
355
- }
356
- function sortGuaranteeEntries(a, b) {
357
- return (a.manifest.journeyIndex ?? 99999) - (b.manifest.journeyIndex ?? 99999) || a.manifest.id.localeCompare(b.manifest.id);
358
- }
359
- function validateFilter(filter, diagnostics) {
360
- for (const field of ["type", "subtype"]) {
361
- const value = filter?.[field];
362
- if (value && !TAXONOMY_PATTERN.test(value)) diagnostics.push(diagnostic("error", `guarantee_filter.invalid_${field}`, `Filter ${field} must be lowercase kebab-case. Try "${normalizeTreeseedGuaranteeTaxonomy(value)}".`, field));
363
- }
364
- }
365
- function readSceneYaml(scenePath) {
366
- try {
367
- const value = parseYaml(readFileSync(scenePath, "utf8"));
368
- return isRecord(value) ? value : null;
369
- } catch {
370
- return null;
371
- }
372
- }
373
- function sceneManifestPathForGuarantee(entry) {
374
- const manifest = entry.manifest.scene?.manifest;
375
- if (!manifest) return void 0;
376
- return resolve(dirname(entry.sourcePath), manifest);
377
- }
378
- function sceneRouteFromYaml(value) {
379
- const workflow = Array.isArray(value?.workflow) ? value.workflow : [];
380
- for (const step of workflow) {
381
- const action = isRecord(step) && isRecord(step.action) ? step.action : null;
382
- const goto = isRecord(action?.goto) ? action.goto : null;
383
- const url = stringValue(goto?.url) || stringValue(goto?.path) || stringValue(action?.goto);
384
- if (url) return url;
385
- }
386
- return void 0;
387
- }
388
- function sceneStateKeys(value, key) {
389
- const journey = isRecord(value?.journey) ? value.journey : null;
390
- const entries = Array.isArray(journey?.[key]) ? journey[key] : [];
391
- return entries.map((entry) => isRecord(entry) ? stringValue(entry.key) : stringValue(entry)).filter(Boolean);
392
- }
393
- function implicitAuthDependencyFor(entry) {
394
- if (entry.manifest.type === "user" && entry.manifest.subtype === "auth") return void 0;
395
- const entryRoute = entry.manifest.scene?.entryRoute;
396
- const scenePath = sceneManifestPathForGuarantee(entry);
397
- const sceneRoute = scenePath && existsSync(scenePath) ? sceneRouteFromYaml(readSceneYaml(scenePath)) : void 0;
398
- const route = entryRoute || sceneRoute;
399
- return route?.startsWith("/app/") || route === "/app" ? "guarantee.user.auth.user-login.004" : void 0;
400
- }
401
- function dependencyIdsForGuarantee(input) {
402
- const deps = /* @__PURE__ */ new Map();
403
- const add = (id, reason) => {
404
- if (!id || id === input.entry.manifest.id || !input.byId.has(id)) return;
405
- const reasons = deps.get(id) ?? /* @__PURE__ */ new Set();
406
- reasons.add(reason);
407
- deps.set(id, reasons);
408
- };
409
- for (const id of arrayOrEmpty(input.entry.manifest.dependencies.guarantees)) add(id, "explicit-guarantee");
410
- for (const journeyIndex of arrayOrEmpty(input.entry.manifest.dependencies.journeys)) add(input.byJourneyIndex.get(journeyIndex)?.manifest.id, "journey-index");
411
- for (const dep of arrayOrEmpty(input.entry.manifest.dependsOnGuarantees)) {
412
- const [ownerPackage, ref] = dep.includes(":") ? dep.split(/:(.+)/u).filter(Boolean) : ["", dep];
413
- const match = input.valid.find((candidate) => (!ownerPackage || candidate.manifest.ownerPackage === ownerPackage) && candidate.manifest.status === "active" && (candidate.manifest.id === ref || allVerifierRefs(candidate.manifest).includes(ref)));
414
- add(match?.manifest.id, "depends-on-verifier");
415
- }
416
- add(implicitAuthDependencyFor(input.entry), "implicit-auth");
417
- return deps;
418
- }
419
- function buildTreeseedGuaranteeDependencyGraph(input) {
420
- const valid = input.guarantees.filter((entry) => Boolean(entry.manifest)).sort(sortGuaranteeEntries);
421
- const byId = new Map(valid.map((entry) => [entry.manifest.id, entry]));
422
- const byJourneyIndex = new Map(valid.flatMap((entry) => entry.manifest.journeyIndex ? [[entry.manifest.journeyIndex, entry]] : []));
423
- const selectedIds = new Set(valid.filter((entry) => selectedByFilter(entry.manifest, input.filter)).map((entry) => entry.manifest.id));
424
- const includeIds = new Set(selectedIds);
425
- const reasonById = /* @__PURE__ */ new Map();
426
- const diagnostics = [];
427
- const visitInclude = (id, chain) => {
428
- const entry = byId.get(id);
429
- if (!entry) return;
430
- if (chain.includes(id)) {
431
- diagnostics.push(diagnostic("error", "guarantee.dependency_cycle", `Guarantee dependency cycle: ${[...chain, id].join(" -> ")}.`, "dependencies", entry.sourcePath));
432
- return;
433
- }
434
- const deps = dependencyIdsForGuarantee({ entry, byId, byJourneyIndex, valid });
435
- for (const [depId, reasons] of deps) {
436
- for (const reason of reasons) {
437
- const existing = reasonById.get(depId) ?? /* @__PURE__ */ new Set();
438
- existing.add(reason);
439
- reasonById.set(depId, existing);
440
- }
441
- if (input.includeDependencies !== false && !includeIds.has(depId)) includeIds.add(depId);
442
- if (input.includeDependencies !== false) visitInclude(depId, [...chain, id]);
443
- }
444
- };
445
- for (const id of [...selectedIds]) visitInclude(id, []);
446
- const included = valid.filter((entry) => includeIds.has(entry.manifest.id));
447
- const includedIds = new Set(included.map((entry) => entry.manifest.id));
448
- const depMap = /* @__PURE__ */ new Map();
449
- const reasonMap = /* @__PURE__ */ new Map();
450
- const stateProduces = /* @__PURE__ */ new Map();
451
- const stateConsumes = /* @__PURE__ */ new Map();
452
- for (const entry of included) {
453
- const scenePath = sceneManifestPathForGuarantee(entry);
454
- const scene = scenePath && existsSync(scenePath) ? readSceneYaml(scenePath) : null;
455
- stateProduces.set(entry.manifest.id, sceneStateKeys(scene, "producesState"));
456
- stateConsumes.set(entry.manifest.id, sceneStateKeys(scene, "consumesState"));
457
- const deps = dependencyIdsForGuarantee({ entry, byId, byJourneyIndex, valid });
458
- const filtered = [...deps.keys()].filter((id) => includedIds.has(id)).sort((a, b) => sortGuaranteeEntries(byId.get(a), byId.get(b)));
459
- depMap.set(entry.manifest.id, filtered);
460
- const reasons = /* @__PURE__ */ new Set();
461
- for (const depId of filtered) for (const reason of arrayOrEmpty(deps.get(depId))) reasons.add(reason);
462
- for (const reason of arrayOrEmpty(reasonById.get(entry.manifest.id))) reasons.add(reason);
463
- reasonMap.set(entry.manifest.id, reasons);
464
- }
465
- const producersByStateKey = /* @__PURE__ */ new Map();
466
- for (const [id, keys] of stateProduces) {
467
- for (const key of keys) {
468
- producersByStateKey.set(key, [...arrayOrEmpty(producersByStateKey.get(key)), id]);
469
- }
470
- }
471
- for (const [key, producers] of producersByStateKey) {
472
- const unique = [...new Set(producers)];
473
- if (unique.length > 1) {
474
- diagnostics.push(diagnostic(
475
- "error",
476
- "guarantee.state_duplicate_producer",
477
- `State key ${key} is produced by multiple included guarantees: ${unique.join(", ")}.`,
478
- "journey.producesState",
479
- byId.get(unique[0])?.sourcePath
480
- ));
481
- }
482
- producersByStateKey.set(key, unique);
483
- }
484
- for (const [id, keys] of stateConsumes) {
485
- for (const key of keys) {
486
- const producers = arrayOrEmpty(producersByStateKey.get(key));
487
- const producer = producers.length === 1 ? producers[0] : void 0;
488
- if (producer && producer !== id && includedIds.has(producer)) {
489
- const deps = arrayOrEmpty(depMap.get(id));
490
- if (!deps.includes(producer)) deps.push(producer);
491
- depMap.set(id, deps.sort((a, b) => sortGuaranteeEntries(byId.get(a), byId.get(b))));
492
- const reasons = reasonMap.get(id) ?? /* @__PURE__ */ new Set();
493
- reasons.add("state");
494
- reasonMap.set(id, reasons);
495
- }
496
- }
497
- }
498
- const visiting = /* @__PURE__ */ new Set();
499
- const visited = /* @__PURE__ */ new Set();
500
- const ordered = [];
501
- const visitOrder = (id, chain) => {
502
- if (visited.has(id)) return;
503
- if (visiting.has(id)) {
504
- diagnostics.push(diagnostic("error", "guarantee.dependency_cycle", `Guarantee dependency cycle: ${[...chain, id].join(" -> ")}.`, "dependencies", byId.get(id)?.sourcePath));
505
- return;
506
- }
507
- visiting.add(id);
508
- for (const dep of arrayOrEmpty(depMap.get(id))) visitOrder(dep, [...chain, id]);
509
- visiting.delete(id);
510
- visited.add(id);
511
- ordered.push(id);
512
- };
513
- for (const entry of included) visitOrder(entry.manifest.id, []);
514
- const inverse = /* @__PURE__ */ new Map();
515
- for (const [id, deps] of depMap) for (const dep of deps) inverse.set(dep, [...arrayOrEmpty(inverse.get(dep)), id]);
516
- const depthCache = /* @__PURE__ */ new Map();
517
- const depth = (id, chain = []) => {
518
- if (depthCache.has(id)) return depthCache.get(id);
519
- if (chain.includes(id)) {
520
- diagnostics.push(diagnostic("error", "guarantee.dependency_cycle", `Guarantee dependency cycle: ${[...chain, id].join(" -> ")}.`, "dependencies", byId.get(id)?.sourcePath));
521
- return 0;
522
- }
523
- const value = Math.max(0, ...arrayOrEmpty(depMap.get(id)).map((dep) => depth(dep, [...chain, id]) + 1));
524
- depthCache.set(id, value);
525
- return value;
526
- };
527
- const meta = /* @__PURE__ */ new Map();
528
- for (const [index, id] of ordered.entries()) {
529
- meta.set(id, {
530
- dependsOn: arrayOrEmpty(depMap.get(id)),
531
- dependencyOf: arrayOrEmpty(inverse.get(id)).sort((a, b) => sortGuaranteeEntries(byId.get(a), byId.get(b))),
532
- dependencyReason: [...reasonMap.get(id) ?? /* @__PURE__ */ new Set()],
533
- dependencyDepth: depth(id),
534
- executionOrder: index,
535
- producesState: arrayOrEmpty(stateProduces.get(id)),
536
- consumesState: arrayOrEmpty(stateConsumes.get(id))
537
- });
538
- }
539
- return { entries: ordered.map((id) => byId.get(id)).filter(Boolean), selectedIds, meta, diagnostics };
540
- }
541
- function filterTreeseedGuarantees(input) {
542
- return buildTreeseedGuaranteeDependencyGraph(input).entries;
543
- }
544
- function validateTreeseedGuaranteeRegistry(input) {
545
- const diagnostics = [
546
- ...input.guarantees.flatMap((entry) => entry.diagnostics),
547
- ...arrayOrEmpty(input.verifierRegistries).flatMap((entry) => entry.diagnostics)
548
- ];
549
- validateFilter(input.filter, diagnostics);
550
- const valid = input.guarantees.filter((entry) => Boolean(entry.manifest));
551
- const ids = /* @__PURE__ */ new Map();
552
- const journeyIndexes = /* @__PURE__ */ new Map();
553
- for (const entry of valid) {
554
- const existing = ids.get(entry.manifest.id);
555
- if (existing) diagnostics.push(diagnostic("error", "guarantee.duplicate_id", `Duplicate guarantee id "${entry.manifest.id}" also appears at ${existing.relativePath}.`, "id", entry.sourcePath));
556
- ids.set(entry.manifest.id, entry);
557
- if (entry.manifest.journeyIndex) {
558
- const existingIndex = journeyIndexes.get(entry.manifest.journeyIndex);
559
- if (existingIndex) diagnostics.push(diagnostic("error", "guarantee.duplicate_journey_index", `Duplicate journey index ${entry.manifest.journeyIndex} also appears at ${existingIndex.relativePath}.`, "journeyIndex", entry.sourcePath));
560
- journeyIndexes.set(entry.manifest.journeyIndex, entry);
561
- }
562
- }
563
- for (const entry of valid) {
564
- for (const dep of arrayOrEmpty(entry.manifest.dependencies.guarantees)) {
565
- if (!ids.has(dep)) diagnostics.push(diagnostic("error", "guarantee.missing_dependency", `Missing guarantee dependency "${dep}".`, "dependencies.guarantees", entry.sourcePath));
566
- }
567
- for (const dep of arrayOrEmpty(entry.manifest.dependencies.journeys)) {
568
- if (!journeyIndexes.has(dep)) diagnostics.push(diagnostic("error", "guarantee.missing_journey_dependency", `Missing journey dependency "${dep}".`, "dependencies.journeys", entry.sourcePath));
569
- if (entry.manifest.journeyIndex && dep >= entry.manifest.journeyIndex) diagnostics.push(diagnostic("error", "guarantee.forward_journey_dependency", `Journey dependency ${dep} must be lower than ${entry.manifest.journeyIndex}.`, "dependencies.journeys", entry.sourcePath));
570
- }
571
- }
572
- for (const entry of valid) {
573
- for (const dep of arrayOrEmpty(entry.manifest.dependsOnGuarantees)) {
574
- const [ownerPackage, ref] = dep.includes(":") ? dep.split(/:(.+)/u).filter(Boolean) : ["", dep];
575
- const match = valid.find((candidate) => (!ownerPackage || candidate.manifest.ownerPackage === ownerPackage) && candidate.manifest.status === "active" && (candidate.manifest.id === ref || allVerifierRefs(candidate.manifest).includes(ref)));
576
- if (!match) diagnostics.push(diagnostic("error", "guarantee.missing_depends_on_guarantee", `Missing active guarantee dependency "${dep}".`, "dependsOnGuarantees", entry.sourcePath));
577
- }
578
- }
579
- const visiting = /* @__PURE__ */ new Set();
580
- const visited = /* @__PURE__ */ new Set();
581
- const visit = (id, chain) => {
582
- if (visited.has(id)) return;
583
- if (visiting.has(id)) {
584
- diagnostics.push(diagnostic("error", "guarantee.dependency_cycle", `Guarantee dependency cycle: ${[...chain, id].join(" -> ")}.`, "dependencies.guarantees", ids.get(id)?.sourcePath));
585
- return;
586
- }
587
- visiting.add(id);
588
- for (const dep of arrayOrEmpty(ids.get(id)?.manifest.dependencies.guarantees)) visit(dep, [...chain, id]);
589
- visiting.delete(id);
590
- visited.add(id);
591
- };
592
- for (const id of ids.keys()) visit(id, []);
593
- const verifierIds = new Set(arrayOrEmpty(input.verifierRegistries).flatMap((entry) => Object.keys(entry.registry?.verifiers ?? {})));
594
- const verifierKinds = new Map(arrayOrEmpty(input.verifierRegistries).flatMap(
595
- (registry) => Object.entries(registry.registry?.verifiers ?? {}).map(([id, definition]) => [id, definition.kind])
596
- ));
597
- for (const entry of valid) {
598
- for (const ref of allVerifierRefs(entry.manifest)) {
599
- if (ref.startsWith("todo.")) {
600
- if (entry.manifest.status === "active") diagnostics.push(diagnostic("error", "guarantee.todo_verifier_active", `Active guarantee cannot use placeholder verifier ref "${ref}".`, "verifierRefs", entry.sourcePath));
601
- continue;
602
- }
603
- if (!verifierIds.has(ref)) {
604
- const severity = entry.manifest.status === "active" ? "error" : "warning";
605
- diagnostics.push(diagnostic(severity, "guarantee.missing_verifier_ref", `Verifier ref "${ref}" is not defined.`, "verifierRefs", entry.sourcePath));
606
- }
607
- if ((entry.manifest.gates.includes("release") || entry.manifest.gates.includes("security")) && verifierKinds.get(ref) === "manualEvidence") {
608
- diagnostics.push(diagnostic("error", "guarantee.release_manual_evidence", `Release/security guarantee cannot depend on manual evidence verifier "${ref}".`, "verifierRefs", entry.sourcePath));
609
- }
610
- }
611
- }
612
- const selected = input.filter ? filterTreeseedGuarantees({ guarantees: input.guarantees, filter: input.filter }).length : void 0;
613
- const errors = diagnostics.filter((entry) => entry.severity === "error").length;
614
- const warnings = diagnostics.filter((entry) => entry.severity === "warning").length;
615
- return {
616
- ok: errors === 0,
617
- workspaceRoot: resolve(input.workspaceRoot),
618
- guarantees: input.guarantees,
619
- verifierRegistries: arrayOrEmpty(input.verifierRegistries),
620
- diagnostics,
621
- counts: {
622
- total: input.guarantees.length,
623
- valid: valid.length,
624
- ...selected !== void 0 ? { selected } : {},
625
- errors,
626
- warnings
627
- }
628
- };
629
- }
630
- function refs(contract) {
631
- return arrayOrEmpty(contract?.verifierRefs);
632
- }
633
- function planTreeseedGuarantees(input) {
634
- const registry = discoverTreeseedGuarantees({ workspaceRoot: input.workspaceRoot, filter: input.filter });
635
- const selectedWithoutDeps = filterTreeseedGuarantees({ guarantees: registry.guarantees, filter: input.filter, includeDependencies: false });
636
- const graph = buildTreeseedGuaranteeDependencyGraph({ guarantees: registry.guarantees, filter: input.filter, includeDependencies: input.includeDependencies !== false });
637
- const selectedIds = graph.selectedIds;
638
- const entries = graph.entries.map((entry) => {
639
- const meta = graph.meta.get(entry.manifest.id);
640
- return {
641
- id: entry.manifest.id,
642
- ...entry.manifest.journeyIndex ? { journeyIndex: entry.manifest.journeyIndex } : {},
643
- type: entry.manifest.type,
644
- subtype: entry.manifest.subtype,
645
- journey: entry.manifest.journey,
646
- ownerPackage: entry.manifest.ownerPackage,
647
- ...entry.manifest.surface ? { surface: entry.manifest.surface } : {},
648
- status: entry.manifest.status,
649
- gates: entry.manifest.gates,
650
- sourcePath: entry.relativePath,
651
- selected: selectedIds.has(entry.manifest.id),
652
- dependency: !selectedIds.has(entry.manifest.id),
653
- ...entry.manifest.scene?.manifest ? { sceneManifest: entry.manifest.scene.manifest } : {},
654
- apiVerifierRefs: refs(entry.manifest.api),
655
- contentVerifierRefs: refs(entry.manifest.content),
656
- auditVerifierRefs: refs(entry.manifest.audit),
657
- evidenceRequired: entry.manifest.evidence.required,
658
- dependencyDepth: meta?.dependencyDepth ?? 0,
659
- dependencyOf: arrayOrEmpty(meta?.dependencyOf),
660
- dependsOn: arrayOrEmpty(meta?.dependsOn),
661
- dependencyReason: arrayOrEmpty(meta?.dependencyReason),
662
- executionOrder: meta?.executionOrder ?? 0,
663
- ...meta?.producesState.length ? { producesState: meta.producesState } : {},
664
- ...meta?.consumesState.length ? { consumesState: meta.consumesState } : {}
665
- };
666
- });
667
- const diagnostics = [...registry.diagnostics, ...graph.diagnostics];
668
- const errors = diagnostics.filter((entry) => entry.severity === "error").length;
669
- const warnings = diagnostics.filter((entry) => entry.severity === "warning").length;
670
- return {
671
- ok: errors === 0,
672
- workspaceRoot: resolve(input.workspaceRoot),
673
- filter: input.filter ?? {},
674
- environment: input.environment ?? "local",
675
- entries,
676
- diagnostics,
677
- counts: {
678
- total: registry.counts.total,
679
- selected: selectedWithoutDeps.length,
680
- withDependencies: entries.length,
681
- errors,
682
- warnings
683
- }
684
- };
685
- }
686
- function collectFiles(root, predicate, out = []) {
687
- if (!existsSync(root)) return out;
688
- for (const name of readdirSync(root)) {
689
- if (EXCLUDED_DIRS.has(name)) continue;
690
- const path = resolve(root, name);
691
- let stat;
692
- try {
693
- stat = statSync(path);
694
- } catch {
695
- continue;
696
- }
697
- if (stat.isDirectory()) collectFiles(path, predicate, out);
698
- else if (stat.isFile() && predicate(path)) out.push(path);
699
- }
700
- return out;
701
- }
702
- function astroRoutePatternFromPath(root, filePath) {
703
- const relativePath = relative(root, filePath).replace(/\\/gu, "/");
704
- const withoutExtension = relativePath.replace(/\.(astro|tsx|ts|jsx|js)$/u, "");
705
- const segments = withoutExtension.split("/").filter(Boolean);
706
- if (segments.at(-1) === "index") segments.pop();
707
- return `/${segments.map((segment) => {
708
- if (/^\[\.\.\..+\]$/u.test(segment)) return "**";
709
- if (/^\[.+\]$/u.test(segment)) return "*";
710
- return segment;
711
- }).join("/")}`.replace(/\/+$/u, "") || "/";
712
- }
713
- function collectAstroRoutePatterns(workspaceRoot) {
714
- const roots = [
715
- resolve(workspaceRoot, "src/pages"),
716
- resolve(workspaceRoot, "packages/admin/src/pages"),
717
- resolve(workspaceRoot, "packages/core/src/pages")
718
- ];
719
- const patterns = /* @__PURE__ */ new Set();
720
- for (const root of roots) {
721
- for (const path of collectFiles(root, (entry) => /\.(astro|tsx|ts|jsx|js)$/u.test(entry))) {
722
- patterns.add(astroRoutePatternFromPath(root, path));
723
- }
724
- }
725
- return patterns;
726
- }
727
- function normalizeRoutePath(route) {
728
- if (!route) return void 0;
729
- if (/^https?:\/\//u.test(route)) {
730
- try {
731
- return new URL(route).pathname || "/";
732
- } catch {
733
- return route;
734
- }
735
- }
736
- return route.split(/[?#]/u)[0] || "/";
737
- }
738
- function routePatternMatches(pattern, route) {
739
- const patternSegments = pattern.split("/").filter(Boolean);
740
- const routeSegments = route.split("/").filter(Boolean);
741
- if (patternSegments.includes("**")) {
742
- const index = patternSegments.indexOf("**");
743
- return patternSegments.slice(0, index).every((segment, segmentIndex) => segment === "*" || segment === routeSegments[segmentIndex]);
744
- }
745
- if (patternSegments.length !== routeSegments.length) return false;
746
- return patternSegments.every((segment, index) => segment === "*" || segment === routeSegments[index]);
747
- }
748
- function actionKindFromSceneStep(step) {
749
- const action = isRecord(step) && isRecord(step.action) ? step.action : null;
750
- return action ? Object.keys(action)[0] ?? "unknown" : "unknown";
751
- }
752
- function sceneHasAcceptanceAssertions(step) {
753
- return isRecord(step) && isRecord(step.expect) && Object.keys(step.expect).length > 0;
754
- }
755
- function sceneUsesOnlyStableSelectors(value) {
756
- const text = JSON.stringify(value ?? {});
757
- if (!text.includes('"selector"')) return true;
758
- return /data-scene|data-testid|testId|getByRole|getByLabel|getByText|"internal":true/iu.test(text);
759
- }
760
- function auditTreeseedGuaranteeJourneys(input) {
761
- const workspaceRoot = resolve(input.workspaceRoot);
762
- const registry = discoverTreeseedGuarantees({ workspaceRoot, filter: input.filter });
763
- const routes = collectAstroRoutePatterns(workspaceRoot);
764
- const valid = registry.guarantees.filter((entry) => Boolean(entry.manifest));
765
- const graph = buildTreeseedGuaranteeDependencyGraph({ guarantees: registry.guarantees, filter: input.filter, includeDependencies: true });
766
- const items = [];
767
- for (const entry of valid.filter((candidate) => selectedByFilter(candidate.manifest, input.filter))) {
768
- const scenePath = sceneManifestPathForGuarantee(entry);
769
- if (!scenePath) {
770
- items.push({
771
- guaranteeId: entry.manifest.id,
772
- status: entry.manifest.status,
773
- ownerPackage: entry.manifest.ownerPackage,
774
- type: entry.manifest.type,
775
- subtype: entry.manifest.subtype,
776
- journey: entry.manifest.journey,
777
- sourcePath: entry.relativePath,
778
- routeExists: true,
779
- sceneWorkflowStepCount: 0,
780
- interactiveStepCount: 0,
781
- classification: "non-ui-guarantee",
782
- requiredAction: "none",
783
- diagnostics: []
784
- });
785
- continue;
786
- }
787
- const scene = existsSync(scenePath) ? readSceneYaml(scenePath) : null;
788
- const workflow = Array.isArray(scene?.workflow) ? scene.workflow : [];
789
- const journey = isRecord(scene?.journey) ? scene.journey : null;
790
- const serviceJourney = journey?.kind === "service";
791
- const minimumSteps = typeof journey?.minimumSteps === "number" ? journey.minimumSteps : 2;
792
- const actionKinds = workflow.map(actionKindFromSceneStep);
793
- const interactiveStepCount = actionKinds.filter((kind) => kind !== "goto" && kind !== "pause").length;
794
- const currentRoute = normalizeRoutePath(entry.manifest.scene?.entryRoute || sceneRouteFromYaml(scene));
795
- const routeExists = Boolean(currentRoute && !currentRoute.includes(":") && [...routes].some((pattern) => routePatternMatches(pattern, currentRoute))) || !currentRoute;
796
- const missingSelectors2 = entry.manifest.status === "active" && !sceneUsesOnlyStableSelectors(scene);
797
- const weak = workflow.length < minimumSteps || interactiveStepCount === 0 || entry.manifest.status === "active" && (!serviceJourney || workflow.some((step) => !sceneHasAcceptanceAssertions(step)));
798
- const diagnostics2 = [];
799
- if (!existsSync(scenePath)) diagnostics2.push(diagnostic("error", "guarantee.scene_missing_manifest", `Scene manifest does not exist: ${relative(workspaceRoot, scenePath)}.`, "scene.manifest", entry.sourcePath));
800
- if (!routeExists) diagnostics2.push(diagnostic(entry.manifest.status === "active" ? "error" : "warning", "guarantee.scene_missing_route", `Scene entry route ${currentRoute ?? "(unknown)"} does not map to a known Astro route.`, "scene.entryRoute", entry.sourcePath));
801
- if (entry.manifest.status === "active" && !serviceJourney) diagnostics2.push(diagnostic("error", "guarantee.scene_missing_service_journey", "Active scene-backed guarantees must declare journey.kind: service in the scene manifest.", "scene.journey.kind", entry.sourcePath));
802
- if (weak) diagnostics2.push(...validateGuaranteeSceneJourneyContract({ scenePath, sourcePath: entry.sourcePath }).map((item) => entry.manifest.status === "active" ? item : { ...item, severity: "warning" }));
803
- if (missingSelectors2) diagnostics2.push(diagnostic("error", "guarantee.scene_missing_stable_selectors", "Active service journey scenes must use stable data-scene, data-testid, or role/text selectors instead of brittle CSS selectors.", "scene.workflow", entry.sourcePath));
804
- const classification = !routeExists ? "missing-product-route" : missingSelectors2 ? "missing-stable-selectors" : entry.manifest.status !== "active" && weak ? "planned-product-contract" : weak ? "weak-page-only-scene" : "valid-service-journey";
805
- const requiredAction = classification === "missing-product-route" ? entry.manifest.status === "active" ? "downgrade-status" : "fix-route" : classification === "missing-stable-selectors" ? "add-selectors" : classification === "weak-page-only-scene" ? "author-scene" : "none";
806
- items.push({
807
- guaranteeId: entry.manifest.id,
808
- status: entry.manifest.status,
809
- ownerPackage: entry.manifest.ownerPackage,
810
- type: entry.manifest.type,
811
- subtype: entry.manifest.subtype,
812
- journey: entry.manifest.journey,
813
- sourcePath: entry.relativePath,
814
- scenePath: relative(workspaceRoot, scenePath),
815
- ...currentRoute ? { currentRoute, resolvedRoute: currentRoute } : {},
816
- routeExists,
817
- sceneWorkflowStepCount: workflow.length,
818
- interactiveStepCount,
819
- classification,
820
- requiredAction,
821
- diagnostics: diagnostics2
822
- });
823
- }
824
- const sceneBackedItems = items.filter((entry) => entry.scenePath);
825
- const activeSceneBacked = sceneBackedItems.filter((entry) => entry.status === "active");
826
- const weakSceneContracts = sceneBackedItems.filter((entry) => entry.classification === "weak-page-only-scene" || entry.classification === "planned-product-contract").length;
827
- const missingRoutes = sceneBackedItems.filter((entry) => entry.classification === "missing-product-route").length;
828
- const missingSelectors = sceneBackedItems.filter((entry) => entry.classification === "missing-stable-selectors").length;
829
- const activeSceneBackedWeak = activeSceneBacked.filter((entry) => entry.classification === "weak-page-only-scene").length;
830
- const activeMissingRoutes = activeSceneBacked.filter((entry) => entry.classification === "missing-product-route").length;
831
- const activeMissingSelectors = activeSceneBacked.filter((entry) => entry.classification === "missing-stable-selectors").length;
832
- const diagnostics = [...registry.diagnostics, ...graph.diagnostics, ...items.flatMap((entry) => entry.diagnostics)];
833
- const audit = {
834
- schemaVersion: TREESEED_GUARANTEE_JOURNEY_AUDIT_SCHEMA_VERSION,
835
- workspaceRoot,
836
- generatedAt: (input.now ?? /* @__PURE__ */ new Date()).toISOString(),
837
- totals: {
838
- guarantees: valid.length,
839
- sceneBacked: sceneBackedItems.length,
840
- activeSceneBacked: activeSceneBacked.length,
841
- weakSceneContracts,
842
- missingRoutes,
843
- missingSelectors,
844
- dependencyErrors: graph.diagnostics.filter((entry) => entry.severity === "error").length,
845
- activeSceneBackedWeak,
846
- activeMissingRoutes,
847
- activeMissingSelectors
848
- },
849
- items,
850
- diagnostics,
851
- ok: activeSceneBackedWeak === 0 && activeMissingRoutes === 0 && activeMissingSelectors === 0 && diagnostics.every((entry) => entry.severity !== "error")
852
- };
853
- if (input.writeReport) {
854
- const outputPath = assertPathInsideWorkspace(workspaceRoot, resolve(workspaceRoot, input.writeReport));
855
- mkdirSync(dirname(outputPath), { recursive: true });
856
- writeFileSync(outputPath, `${JSON.stringify(audit, null, 2)}
857
- `);
858
- }
859
- return audit;
860
- }
861
- function csvEscape(value) {
862
- const text = Array.isArray(value) ? value.join("; ") : String(value ?? "");
863
- return /[",\n\r]/u.test(text) ? `"${text.replace(/"/gu, '""')}"` : text;
864
- }
865
- function exportTreeseedGuaranteesCsv(input) {
866
- const rows = filterTreeseedGuarantees({ guarantees: input.guarantees, filter: input.filter, includeDependencies: false });
867
- const header = [
868
- "Guarantee ID",
869
- "Journey Index",
870
- "Type",
871
- "Subtype",
872
- "Journey",
873
- "Owner Package",
874
- "Surface",
875
- "Status",
876
- "Dependencies",
877
- "Actor Roles",
878
- "Forbidden Roles",
879
- "Device Coverage",
880
- "Preconditions",
881
- "Scene Manifest",
882
- "API Verifier Refs",
883
- "Content Verifier Refs",
884
- "Audit Verifier Refs",
885
- "Negative Cases",
886
- "Release Gates",
887
- "Evidence Required",
888
- "Notes",
889
- "Source Path"
890
- ];
891
- const body = rows.map((entry) => [
892
- entry.manifest.id,
893
- entry.manifest.journeyIndex ?? "",
894
- entry.manifest.type,
895
- entry.manifest.subtype,
896
- entry.manifest.journey,
897
- entry.manifest.ownerPackage,
898
- entry.manifest.surface ?? "",
899
- entry.manifest.status,
900
- [...arrayOrEmpty(entry.manifest.dependencies.guarantees), ...arrayOrEmpty(entry.manifest.dependencies.journeys).map((id) => `journey:${id}`)],
901
- entry.manifest.actors.allowed,
902
- entry.manifest.actors.forbidden,
903
- [...entry.manifest.devices.required, ...arrayOrEmpty(entry.manifest.devices.optional)],
904
- [...arrayOrEmpty(entry.manifest.preconditions.fixtures), ...arrayOrEmpty(entry.manifest.preconditions.notes)],
905
- entry.manifest.scene?.manifest ?? "",
906
- arrayOrEmpty(entry.manifest.api?.verifierRefs),
907
- arrayOrEmpty(entry.manifest.content?.verifierRefs),
908
- arrayOrEmpty(entry.manifest.audit?.verifierRefs),
909
- arrayOrEmpty(entry.manifest.negativeCases).map((negativeCase) => negativeCase.id),
910
- entry.manifest.gates,
911
- entry.manifest.evidence.required,
912
- arrayOrEmpty(entry.manifest.notes),
913
- entry.relativePath
914
- ]);
915
- return [header, ...body].map((row) => row.map(csvEscape).join(",")).join("\n") + "\n";
916
- }
917
- function exportTreeseedGuaranteesJson(input) {
918
- return {
919
- schemaVersion: "treeseed.guarantees.export/v1",
920
- generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
921
- workspaceRoot: input.registry.workspaceRoot,
922
- guarantees: filterTreeseedGuarantees({ guarantees: input.registry.guarantees, filter: input.filter, includeDependencies: false }).map((entry) => ({
923
- sourcePath: entry.relativePath,
924
- ...entry.manifest
925
- }))
926
- };
927
- }
928
- function exportTreeseedGuaranteesMarkdown(input) {
929
- const rows = filterTreeseedGuarantees({ guarantees: input.registry.guarantees, filter: input.filter, includeDependencies: false });
930
- return [
931
- "# TreeSeed Guarantees",
932
- "",
933
- `Generated from ${rows.length} guarantee manifests.`,
934
- "",
935
- "| ID | Type | Subtype | Journey | Status | Gates |",
936
- "| --- | --- | --- | --- | --- | --- |",
937
- ...rows.map((entry) => `| ${entry.manifest.id} | ${entry.manifest.type} | ${entry.manifest.subtype} | ${entry.manifest.journey.replace(/\|/gu, "\\|")} | ${entry.manifest.status} | ${entry.manifest.gates.join(", ")} |`),
938
- ""
939
- ].join("\n");
940
- }
941
- function writeTreeseedGuaranteesExport(input) {
942
- const registry = discoverTreeseedGuarantees({ workspaceRoot: input.workspaceRoot, filter: input.filter });
943
- const outputPath = resolve(input.workspaceRoot, input.output);
944
- mkdirSync(dirname(outputPath), { recursive: true });
945
- const content = input.format === "csv" ? exportTreeseedGuaranteesCsv({ guarantees: registry.guarantees, filter: input.filter }) : input.format === "json" ? `${JSON.stringify(exportTreeseedGuaranteesJson({ registry, filter: input.filter }), null, 2)}
946
- ` : exportTreeseedGuaranteesMarkdown({ registry, filter: input.filter });
947
- writeFileSync(outputPath, content, "utf8");
948
- return { ok: registry.ok, outputPath, registry };
949
- }
950
- function verifierDefinitionsByRef(registries) {
951
- const definitions = /* @__PURE__ */ new Map();
952
- for (const registry of registries) {
953
- for (const [ref, definition] of Object.entries(registry.registry?.verifiers ?? {})) {
954
- definitions.set(ref, {
955
- ref,
956
- resolved: true,
957
- sourcePath: registry.sourcePath,
958
- ownerPackage: definition.ownerPackage ?? registry.ownerPackage,
959
- definition: { ownerPackage: definition.ownerPackage ?? registry.ownerPackage, ...definition }
960
- });
961
- }
962
- }
963
- return definitions;
964
- }
965
- function resolveTreeseedGuaranteeVerifierRefs(input) {
966
- const diagnostics = [];
967
- const definitions = verifierDefinitionsByRef(input.verifierRegistries);
968
- const resolutions = [...new Set(input.refs)].map((ref) => {
969
- if (ref.startsWith("todo.")) {
970
- const severity2 = input.status === "active" ? "error" : "warning";
971
- diagnostics.push(diagnostic(severity2, "guarantee.todo_verifier_ref", `Verifier ref "${ref}" is a placeholder.`, "verifierRefs", input.sourcePath));
972
- return { ref, resolved: false };
973
- }
974
- const resolved = definitions.get(ref);
975
- if (resolved) return resolved;
976
- const severity = input.status === "active" ? "error" : "warning";
977
- diagnostics.push(diagnostic(severity, "guarantee.missing_verifier_ref", `Verifier ref "${ref}" is not defined.`, "verifierRefs", input.sourcePath));
978
- return { ref, resolved: false };
979
- });
980
- return { ok: diagnostics.every((entry) => entry.severity !== "error"), resolutions, diagnostics };
981
- }
982
- function packageWorkspaceForOwner(ownerPackage) {
983
- if (ownerPackage === "@treeseed/market") return ".";
984
- const name = ownerPackage.replace(/^@treeseed\//u, "");
985
- return `packages/${name}`;
986
- }
987
- function relativeEvidencePath(workspaceRoot, path) {
988
- return relative(resolve(workspaceRoot), resolve(path)).replace(/\\/gu, "/");
989
- }
990
- async function writeCommandEvidence(input) {
991
- const safeRef = slugifyTreeseedGuaranteeJourney(input.ref);
992
- const evidencePath = resolve(input.outputRoot, "evidence", `${safeRef}.json`);
993
- mkdirSync(dirname(evidencePath), { recursive: true });
994
- const startedAt = (/* @__PURE__ */ new Date()).toISOString();
995
- const cwd = input.cwd ? resolve(input.workspaceRoot, input.cwd) : resolve(input.workspaceRoot);
996
- const renderedCommand = [input.command, ...input.args].join(" ");
997
- input.onProgress?.(`[guarantees][verifier] ${input.ref}: running ${renderedCommand}`);
998
- try {
999
- const result = await runVerifierCommand({
1000
- command: input.command,
1001
- args: input.args,
1002
- cwd,
1003
- env: input.env ? { ...process.env, ...input.env } : process.env,
1004
- timeoutMs: Math.max(1, input.timeoutSeconds ?? 300) * 1e3,
1005
- onProgress: input.onProgress,
1006
- ref: input.ref
1007
- });
1008
- const successError = input.validateSuccess?.(result);
1009
- if (successError) {
1010
- throw Object.assign(new Error(successError), { stdout: result.stdout, stderr: result.stderr, code: 1 });
1011
- }
1012
- const completedAt = (/* @__PURE__ */ new Date()).toISOString();
1013
- writeFileSync(evidencePath, `${JSON.stringify({
1014
- ref: input.ref,
1015
- command: input.command,
1016
- args: input.args,
1017
- cwd: input.cwd ?? ".",
1018
- startedAt,
1019
- completedAt,
1020
- exitCode: 0,
1021
- env: evidenceEnvSummary(input.env),
1022
- stdout: result.stdout,
1023
- stderr: result.stderr
1024
- }, null, 2)}
1025
- `, "utf8");
1026
- input.onProgress?.(`[guarantees][verifier] ${input.ref}: passed`);
1027
- return {
1028
- status: "passed",
1029
- summary: `${input.ref} passed.`,
1030
- evidence: [relativeEvidencePath(input.workspaceRoot, evidencePath)]
1031
- };
1032
- } catch (error) {
1033
- const completedAt = (/* @__PURE__ */ new Date()).toISOString();
1034
- const commandError = error;
1035
- writeFileSync(evidencePath, `${JSON.stringify({
1036
- ref: input.ref,
1037
- command: input.command,
1038
- args: input.args,
1039
- cwd: input.cwd ?? ".",
1040
- startedAt,
1041
- completedAt,
1042
- exitCode: commandError.code ?? 1,
1043
- env: evidenceEnvSummary(input.env),
1044
- stdout: commandError.stdout ?? "",
1045
- stderr: commandError.stderr ?? "",
1046
- error: commandError.message
1047
- }, null, 2)}
1048
- `, "utf8");
1049
- input.onProgress?.(`[guarantees][verifier] ${input.ref}: failed - ${commandError.message}`, "stderr");
1050
- return {
1051
- status: "failed",
1052
- summary: `${input.ref} failed.`,
1053
- evidence: [relativeEvidencePath(input.workspaceRoot, evidencePath)],
1054
- diagnostics: [diagnostic("error", "guarantee.verifier_failed", commandError.message, input.ref)]
1055
- };
1056
- }
1057
- }
1058
- function stripAnsi(value) {
1059
- return value.replace(/\u001B\[[0-9;]*m/gu, "");
1060
- }
1061
- function vitestExecutedAssertionCount(output) {
1062
- const text = stripAnsi(output).replace(/\r\n/gu, "\n");
1063
- const testsLine = text.split("\n").find((line) => /^\s*Tests\s+/u.test(line));
1064
- if (!testsLine) return 0;
1065
- const passed = [...testsLine.matchAll(/(\d+)\s+passed/gu)].reduce((total, match) => total + Number(match[1] ?? 0), 0);
1066
- const failed = [...testsLine.matchAll(/(\d+)\s+failed/gu)].reduce((total, match) => total + Number(match[1] ?? 0), 0);
1067
- return passed + failed;
1068
- }
1069
- function validateTreeseedVitestVerifierOutput(result) {
1070
- const output = `${result.stdout}
1071
- ${result.stderr}`;
1072
- if (vitestExecutedAssertionCount(output) > 0) return null;
1073
- return "Vitest verifier completed without executing any assertions. Check the verifier testName/testFile; skipped-only or no-match runs are not valid guarantee evidence.";
1074
- }
1075
- function runVerifierCommand(input) {
1076
- return new Promise((resolvePromise, reject) => {
1077
- const child = spawn(input.command, input.args, {
1078
- cwd: input.cwd,
1079
- env: input.env,
1080
- stdio: ["ignore", "pipe", "pipe"]
1081
- });
1082
- let stdout = "";
1083
- let stderr = "";
1084
- let settled = false;
1085
- const timer = setTimeout(() => {
1086
- if (settled) return;
1087
- input.onProgress?.(`[guarantees][verifier] ${input.ref}: timed out after ${Math.round(input.timeoutMs / 1e3)}s`, "stderr");
1088
- child.kill("SIGTERM");
1089
- setTimeout(() => {
1090
- if (!settled) child.kill("SIGKILL");
1091
- }, 2e3).unref();
1092
- }, input.timeoutMs);
1093
- timer.unref();
1094
- child.stdout.on("data", (chunk) => {
1095
- const text = chunk.toString();
1096
- stdout += text;
1097
- for (const line of text.split(/\r?\n/u)) {
1098
- if (line.trim()) input.onProgress?.(`[guarantees][verifier][stdout] ${input.ref}: ${line}`);
1099
- }
1100
- });
1101
- child.stderr.on("data", (chunk) => {
1102
- const text = chunk.toString();
1103
- stderr += text;
1104
- for (const line of text.split(/\r?\n/u)) {
1105
- if (line.trim()) input.onProgress?.(`[guarantees][verifier][stderr] ${input.ref}: ${line}`, "stderr");
1106
- }
1107
- });
1108
- child.on("error", (error) => {
1109
- if (settled) return;
1110
- settled = true;
1111
- clearTimeout(timer);
1112
- reject(Object.assign(error, { stdout, stderr }));
1113
- });
1114
- child.on("close", (code, signal) => {
1115
- if (settled) return;
1116
- settled = true;
1117
- clearTimeout(timer);
1118
- if (code === 0) {
1119
- resolvePromise({ stdout, stderr });
1120
- return;
1121
- }
1122
- const message = signal ? `${input.command} ${input.args.join(" ")} exited with signal ${signal}` : `${input.command} ${input.args.join(" ")} exited with code ${code ?? 1}`;
1123
- reject(Object.assign(new Error(message), { stdout, stderr, code: code ?? signal ?? 1 }));
1124
- });
1125
- });
1126
- }
1127
- function evidenceEnvSummary(env) {
1128
- if (!env) return void 0;
1129
- return Object.fromEntries(Object.entries(env).map(([key, value]) => [
1130
- key,
1131
- /SECRET|TOKEN|KEY|PASSWORD/iu.test(key) && value ? "<redacted>" : value
1132
- ]));
1133
- }
1134
- function sceneActionKindFromManifestAction(action) {
1135
- if (!action || typeof action !== "object") return "unknown";
1136
- const keys = Object.keys(action);
1137
- return keys[0] ?? "unknown";
1138
- }
1139
- function validateGuaranteeSceneJourneyContract(input) {
1140
- const diagnostics = [];
1141
- let value = null;
1142
- try {
1143
- value = parseYaml(readFileSync(input.scenePath, "utf8"));
1144
- } catch (error) {
1145
- diagnostics.push(diagnostic("error", "guarantee.scene_unreadable", error instanceof Error ? error.message : String(error ?? "Scene manifest could not be read."), "scene.manifest", input.sourcePath));
1146
- return diagnostics;
1147
- }
1148
- if (!value || typeof value !== "object") {
1149
- diagnostics.push(diagnostic("error", "guarantee.scene_invalid_manifest", "Scene manifest must be an object.", "scene.manifest", input.sourcePath));
1150
- return diagnostics;
1151
- }
1152
- const workflow = Array.isArray(value.workflow) ? value.workflow : [];
1153
- if (workflow.length === 0) {
1154
- diagnostics.push(diagnostic("error", "guarantee.scene_empty_journey", "Active scene guarantee has no workflow steps.", "scene.workflow", input.sourcePath));
1155
- return diagnostics;
1156
- }
1157
- const journey = isRecord(value.journey) ? value.journey : null;
1158
- const minimumSteps = typeof journey?.minimumSteps === "number" ? journey.minimumSteps : 2;
1159
- if (journey?.kind !== "service") {
1160
- diagnostics.push(diagnostic("error", "guarantee.scene_missing_service_journey", "Scene-backed active guarantees must declare journey.kind: service so evidence is tied to a service journey contract.", "scene.journey.kind", input.sourcePath));
1161
- }
1162
- const actionKinds = workflow.map((step) => sceneActionKindFromManifestAction(step?.action));
1163
- const interactiveActions = actionKinds.filter((kind) => kind !== "goto" && kind !== "pause");
1164
- if (workflow.length < minimumSteps || interactiveActions.length === 0) {
1165
- diagnostics.push(diagnostic(
1166
- "error",
1167
- "guarantee.scene_weak_journey_contract",
1168
- `Scene workflow has ${workflow.length} step${workflow.length === 1 ? "" : "s"} (${actionKinds.join(", ")}). A service journey guarantee must exercise user/service actions after opening the entry route, so evidence captures the actual journey instead of only the first page.`,
1169
- "scene.workflow",
1170
- input.sourcePath
1171
- ));
1172
- }
1173
- for (const [index, step] of workflow.entries()) {
1174
- if (!sceneHasAcceptanceAssertions(step)) {
1175
- diagnostics.push(diagnostic("error", "guarantee.scene_step_missing_assertions", `Workflow step ${index + 1} is missing acceptance assertions.`, `scene.workflow[${index}].expect`, input.sourcePath));
1176
- }
1177
- }
1178
- return diagnostics;
1179
- }
1180
- function apiAcceptanceEnvironment(environment) {
1181
- const baseUrl = apiAcceptanceBaseUrl(environment);
1182
- const serviceId = process.env.TREESEED_ACCEPTANCE_SERVICE_ID ?? process.env.TREESEED_API_WEB_SERVICE_ID ?? process.env.TREESEED_WEB_SERVICE_ID ?? (environment === "local" ? "web" : void 0);
1183
- const serviceSecret = process.env.TREESEED_ACCEPTANCE_SERVICE_SECRET ?? process.env.TREESEED_API_WEB_SERVICE_SECRET ?? process.env.TREESEED_WEB_SERVICE_SECRET ?? (environment === "local" ? "treeseed-web-service-dev-secret" : void 0);
1184
- return {
1185
- TREESEED_ACCEPTANCE_ENVIRONMENT: environment,
1186
- TREESEED_API_BASE_URL: baseUrl,
1187
- TREESEED_ACCEPTANCE_SERVICE_ID: serviceId,
1188
- TREESEED_ACCEPTANCE_SERVICE_SECRET: serviceSecret
1189
- };
1190
- }
1191
- function apiAcceptanceBaseUrl(environment) {
1192
- if (process.env.TREESEED_API_BASE_URL?.trim()) {
1193
- const configured = process.env.TREESEED_API_BASE_URL.trim().replace(/\/+$/u, "");
1194
- if (environment !== "local" && isLoopbackUrl(configured)) {
1195
- throw new Error(`API guarantee environment ${environment} must target a live hosted API URL, not ${configured}.`);
1196
- }
1197
- return configured;
1198
- }
1199
- if (environment === "staging") return "https://api.preview.treeseed.dev";
1200
- if (environment === "prod") return "https://api.treeseed.dev";
1201
- return "http://127.0.0.1:3000";
1202
- }
1203
- function isLoopbackUrl(value) {
1204
- try {
1205
- const url = new URL(value);
1206
- return ["localhost", "127.0.0.1", "0.0.0.0", "::1", "[::1]"].includes(url.hostname);
1207
- } catch {
1208
- return false;
1209
- }
1210
- }
1211
- async function defaultTreeseedGuaranteeVerifierExecutor(input) {
1212
- const definition = input.definition;
1213
- const ownerPackage = definition.ownerPackage ?? input.guarantee.manifest.ownerPackage;
1214
- const workspace = packageWorkspaceForOwner(ownerPackage);
1215
- if (definition.kind === "todo") {
1216
- return {
1217
- status: "blocked",
1218
- summary: `${input.ref} is a todo verifier.`,
1219
- diagnostics: [diagnostic("error", "guarantee.todo_verifier_execution", `Verifier ref "${input.ref}" is not executable.`, input.ref, input.guarantee.sourcePath)]
1220
- };
1221
- }
1222
- if (definition.kind === "manualEvidence") {
1223
- return { status: "skipped", summary: `${input.ref} requires manual evidence.`, evidence: arrayOrEmpty(definition.evidence) };
1224
- }
1225
- if (definition.kind === "scene") {
1226
- return { status: "passed", summary: `${input.ref} is covered by the guarantee scene step.`, evidence: arrayOrEmpty(definition.evidence) };
1227
- }
1228
- if (definition.kind === "apiAcceptanceCase") {
1229
- if (!definition.caseId) {
1230
- return { status: "blocked", summary: `${input.ref} missing caseId.`, diagnostics: [diagnostic("error", "guarantee.api_verifier_missing_case_id", `API verifier "${input.ref}" is missing caseId.`, input.ref, input.guarantee.sourcePath)] };
1231
- }
1232
- return writeCommandEvidence({
1233
- workspaceRoot: input.workspaceRoot,
1234
- outputRoot: input.outputRoot,
1235
- ref: input.ref,
1236
- command: "npm",
1237
- args: ["-w", "packages/api", "run", "test:acceptance", "--", "--environment", input.environment, "--base-url", apiAcceptanceBaseUrl(input.environment), "--case", definition.caseId, "--json"],
1238
- timeoutSeconds: definition.timeoutSeconds,
1239
- env: apiAcceptanceEnvironment(input.environment),
1240
- onProgress: input.onProgress
1241
- });
1242
- }
1243
- if (definition.kind === "vitestCase") {
1244
- if (!definition.testFile) {
1245
- return { status: "blocked", summary: `${input.ref} missing testFile.`, diagnostics: [diagnostic("error", "guarantee.vitest_verifier_missing_test_file", `Vitest verifier "${input.ref}" is missing testFile.`, input.ref, input.guarantee.sourcePath)] };
1246
- }
1247
- return writeCommandEvidence({
1248
- workspaceRoot: input.workspaceRoot,
1249
- outputRoot: input.outputRoot,
1250
- ref: input.ref,
1251
- command: "npm",
1252
- args: ["-w", workspace, "exec", "--", "vitest", "run", "--config", "./vitest.config.js", definition.testFile, ...definition.testName ? ["-t", definition.testName] : []],
1253
- timeoutSeconds: definition.timeoutSeconds,
1254
- onProgress: input.onProgress,
1255
- validateSuccess: validateTreeseedVitestVerifierOutput
1256
- });
1257
- }
1258
- if (definition.kind === "packageScript") {
1259
- if (!definition.command) {
1260
- return { status: "blocked", summary: `${input.ref} missing command.`, diagnostics: [diagnostic("error", "guarantee.package_script_missing_command", `Package script verifier "${input.ref}" is missing command.`, input.ref, input.guarantee.sourcePath)] };
1261
- }
1262
- return writeCommandEvidence({
1263
- workspaceRoot: input.workspaceRoot,
1264
- outputRoot: input.outputRoot,
1265
- ref: input.ref,
1266
- command: "npm",
1267
- args: ["-w", workspace, "run", definition.command, "--", ...arrayOrEmpty(definition.args)],
1268
- timeoutSeconds: definition.timeoutSeconds,
1269
- onProgress: input.onProgress
1270
- });
1271
- }
1272
- if (definition.kind === "nodeScript") {
1273
- if (!definition.command) {
1274
- return { status: "blocked", summary: `${input.ref} missing command.`, diagnostics: [diagnostic("error", "guarantee.node_script_missing_command", `Node script verifier "${input.ref}" is missing command.`, input.ref, input.guarantee.sourcePath)] };
1275
- }
1276
- return writeCommandEvidence({
1277
- workspaceRoot: input.workspaceRoot,
1278
- outputRoot: input.outputRoot,
1279
- ref: input.ref,
1280
- command: "node",
1281
- args: ["--import", "tsx", definition.command, ...arrayOrEmpty(definition.args)],
1282
- cwd: definition.cwd,
1283
- timeoutSeconds: definition.timeoutSeconds,
1284
- onProgress: input.onProgress
1285
- });
1286
- }
1287
- return {
1288
- status: "blocked",
1289
- summary: `${input.ref} has unsupported verifier kind.`,
1290
- diagnostics: [diagnostic("error", "guarantee.unsupported_verifier_kind", `Unsupported verifier kind "${definition.kind}".`, input.ref, input.guarantee.sourcePath)]
1291
- };
1292
- }
1293
- function sceneAuthRoleForGuarantee(manifest) {
1294
- if (manifest.actors.allowed.includes("anonymous_user") || manifest.actors.allowed.includes("anonymous")) return void 0;
1295
- const actors = manifest.actors.allowed.map((actor) => actor.toLowerCase());
1296
- if (actors.some((actor) => /owner|operator|seller|platform|host/iu.test(actor))) return "owner";
1297
- if (actors.some((actor) => /admin|manager|lead/iu.test(actor))) return "admin";
1298
- if (actors.some((actor) => /member|contributor|authenticated|participant|viewer/iu.test(actor))) return "member";
1299
- return "owner";
1300
- }
1301
- function browserForGuaranteeDevice(device) {
1302
- if (device?.includes("firefox")) return "firefox";
1303
- if (device?.includes("webkit")) return "webkit";
1304
- return "chromium";
1305
- }
1306
- function sceneDeviceRunsForGuarantee(devices) {
1307
- const requested = devices.length > 0 ? devices : ["desktop_chromium"];
1308
- return requested.map((device) => ({
1309
- id: device.toLowerCase().replace(/[^a-z0-9._-]+/gu, "-"),
1310
- device,
1311
- browser: browserForGuaranteeDevice(device)
1312
- }));
1313
- }
1314
- function sceneReportEvidencePaths(workspaceRoot, report) {
1315
- const primaryScreenshots = [
1316
- ...arrayOrEmpty(report.steps).map((step) => step.screenshotPath).filter(Boolean),
1317
- ...arrayOrEmpty(report.artifacts?.screenshotPaths)
1318
- ].filter((path) => Boolean(path && !path.includes("/screenshots/viewport/")));
1319
- return sortedUnique([
1320
- ...primaryScreenshots,
1321
- report.playwrightTracePath ?? void 0,
1322
- report.artifacts?.runRoot
1323
- ].filter(Boolean).map((entry) => relativeEvidencePath(workspaceRoot, entry)));
1324
- }
1325
- async function defaultTreeseedGuaranteeSceneExecutor(input) {
1326
- try {
1327
- const contractDiagnostics = validateGuaranteeSceneJourneyContract({ scenePath: input.scenePath, sourcePath: input.guarantee.sourcePath });
1328
- const scenes = await import("../scenes/index.js");
1329
- const authRole = sceneAuthRoleForGuarantee(input.guarantee.manifest);
1330
- const runs = sceneDeviceRunsForGuarantee(input.device ? [input.device] : input.guarantee.manifest.devices.required);
1331
- if (runs.length > 1) {
1332
- const runReports = [];
1333
- for (const run2 of runs) {
1334
- const report2 = await scenes.runTreeseedScene({
1335
- projectRoot: input.workspaceRoot,
1336
- scene: input.scenePath,
1337
- environment: input.environment,
1338
- device: run2.device,
1339
- browser: run2.browser,
1340
- authRole,
1341
- record: input.record,
1342
- artifactMode: input.artifactMode,
1343
- mode: "acceptance",
1344
- runId: `${input.runId}-${run2.id}`
1345
- });
1346
- runReports.push(report2);
1347
- }
1348
- const ok2 = contractDiagnostics.length === 0 && runReports.every((entry) => entry.ok);
1349
- return {
1350
- status: ok2 ? "passed" : "failed",
1351
- summary: ok2 ? "Scene device matrix passed." : contractDiagnostics.length > 0 ? "Scene is not a complete service journey." : "Scene device matrix failed.",
1352
- evidence: runReports.flatMap((entry) => sceneReportEvidencePaths(input.workspaceRoot, entry)),
1353
- diagnostics: [...contractDiagnostics, ...runReports.flatMap((entry) => arrayOrEmpty(entry.diagnostics))]
1354
- };
1355
- }
1356
- const run = runs[0];
1357
- const report = await scenes.runTreeseedScene({
1358
- projectRoot: input.workspaceRoot,
1359
- scene: input.scenePath,
1360
- environment: input.environment,
1361
- device: run.device,
1362
- browser: run.browser,
1363
- authRole,
1364
- record: input.record,
1365
- artifactMode: input.artifactMode,
1366
- mode: "acceptance",
1367
- runId: `${input.runId}-${run.id}`
1368
- });
1369
- const ok = contractDiagnostics.length === 0 && report.ok;
1370
- return {
1371
- status: ok ? "passed" : "failed",
1372
- summary: ok ? "Scene passed." : contractDiagnostics.length > 0 ? "Scene is not a complete service journey." : "Scene failed.",
1373
- evidence: sceneReportEvidencePaths(input.workspaceRoot, report),
1374
- diagnostics: [...contractDiagnostics, ...arrayOrEmpty(report.diagnostics)]
1375
- };
1376
- } catch (error) {
1377
- return {
1378
- status: "failed",
1379
- summary: error instanceof Error ? error.message : String(error),
1380
- diagnostics: [diagnostic("error", "guarantee.scene_execution_failed", error instanceof Error ? error.message : String(error), "scene", input.guarantee.sourcePath)]
1381
- };
1382
- }
1383
- }
1384
- function markdownRunReport(report) {
1385
- return [
1386
- "# TreeSeed Guarantee Run",
1387
- "",
1388
- `Run: ${report.runId}`,
1389
- `Environment: ${report.environment}`,
1390
- `Started: ${report.startedAt}`,
1391
- `Completed: ${report.completedAt}`,
1392
- "",
1393
- `Passed: ${report.counts.passed}`,
1394
- `Failed: ${report.counts.failed}`,
1395
- `Skipped: ${report.counts.skipped}`,
1396
- `Blocked: ${report.counts.blocked}`,
1397
- `Release blocking failures: ${report.counts.releaseBlockingFailures}`,
1398
- "",
1399
- "| Guarantee | Status | Steps |",
1400
- "| --- | --- | --- |",
1401
- ...report.results.map((entry) => `| ${entry.id} | ${entry.status} | ${entry.steps.map((step) => `${step.id}:${step.status}`).join("<br>")} |`),
1402
- ""
1403
- ].join("\n");
1404
- }
1405
- function writeTreeseedGuaranteeRunReport(input) {
1406
- const diagnostics = [];
1407
- const outputRoot = resolve(input.report.outputRoot);
1408
- try {
1409
- mkdirSync(outputRoot, { recursive: true });
1410
- const planPath = resolve(outputRoot, "plan.json");
1411
- const reportPath = resolve(outputRoot, "report.json");
1412
- const markdownPath = resolve(outputRoot, "report.md");
1413
- const csvPath = resolve(outputRoot, "generated.csv");
1414
- writeFileSync(planPath, `${JSON.stringify(input.report.plan, null, 2)}
1415
- `, "utf8");
1416
- writeFileSync(reportPath, `${JSON.stringify(input.report, null, 2)}
1417
- `, "utf8");
1418
- writeFileSync(markdownPath, markdownRunReport(input.report), "utf8");
1419
- if (input.registry) writeFileSync(csvPath, exportTreeseedGuaranteesCsv({ guarantees: input.registry.guarantees, filter: input.report.filter }), "utf8");
1420
- else writeFileSync(csvPath, "", "utf8");
1421
- return { ok: true, outputRoot, planPath, reportPath, markdownPath, csvPath, diagnostics };
1422
- } catch (error) {
1423
- diagnostics.push(diagnostic("error", "guarantee.report_write_failed", error instanceof Error ? error.message : String(error), "outputRoot", outputRoot));
1424
- return {
1425
- ok: false,
1426
- outputRoot,
1427
- planPath: resolve(outputRoot, "plan.json"),
1428
- reportPath: resolve(outputRoot, "report.json"),
1429
- markdownPath: resolve(outputRoot, "report.md"),
1430
- csvPath: resolve(outputRoot, "generated.csv"),
1431
- diagnostics
1432
- };
1433
- }
1434
- }
1435
- function runIdFor(now) {
1436
- return now.toISOString().replace(/[:.]/gu, "-");
1437
- }
1438
- function releaseBlocking(manifest) {
1439
- return manifest.run?.requiredForRelease === true || manifest.gates.includes("release") || manifest.gates.includes("security") || manifest.gates.includes("migration");
1440
- }
1441
- async function runGuaranteeSteps(input) {
1442
- const startedAt = (/* @__PURE__ */ new Date()).toISOString();
1443
- const steps = [];
1444
- const diagnostics = [];
1445
- const evidence = [];
1446
- const addStep = async (step, run) => {
1447
- const stepStartedAt = (/* @__PURE__ */ new Date()).toISOString();
1448
- input.onProgress?.(`[guarantees][step] ${input.guarantee.manifest.id}: starting ${step.kind}${step.ref ? ` ${step.ref}` : ""}`);
1449
- const result = await run();
1450
- const completedAt = (/* @__PURE__ */ new Date()).toISOString();
1451
- const nextStep = {
1452
- ...step,
1453
- status: result.status,
1454
- summary: result.summary ?? step.summary,
1455
- evidence: result.evidence ?? arrayOrEmpty(step.evidence),
1456
- diagnostics: result.diagnostics ?? arrayOrEmpty(step.diagnostics),
1457
- startedAt: stepStartedAt,
1458
- completedAt
1459
- };
1460
- steps.push(nextStep);
1461
- evidence.push(...arrayOrEmpty(nextStep.evidence));
1462
- diagnostics.push(...arrayOrEmpty(nextStep.diagnostics));
1463
- input.onProgress?.(`[guarantees][step] ${input.guarantee.manifest.id}: ${nextStep.status} ${step.kind}${step.ref ? ` ${step.ref}` : ""}`);
1464
- };
1465
- const scene = input.guarantee.manifest.scene;
1466
- if (scene?.required && scene.manifest) {
1467
- const scenePath = resolve(dirname(input.guarantee.sourcePath), scene.manifest);
1468
- await addStep({ id: "scene", kind: "scene", status: "blocked" }, () => input.sceneExecutor({
1469
- workspaceRoot: input.workspaceRoot,
1470
- environment: input.environment,
1471
- runId: input.runId,
1472
- outputRoot: input.outputRoot,
1473
- guarantee: input.guarantee,
1474
- scenePath,
1475
- record: input.record ?? false,
1476
- artifactMode: input.sceneArtifacts,
1477
- device: input.device
1478
- }));
1479
- }
1480
- const verifierGroups = [
1481
- { kind: "api", refs: arrayOrEmpty(input.guarantee.manifest.api?.verifierRefs) },
1482
- { kind: "content", refs: arrayOrEmpty(input.guarantee.manifest.content?.verifierRefs) },
1483
- { kind: "audit", refs: arrayOrEmpty(input.guarantee.manifest.audit?.verifierRefs) },
1484
- { kind: "negative-case", refs: arrayOrEmpty(input.guarantee.manifest.negativeCases).flatMap((entry) => arrayOrEmpty(entry.verifierRefs)) }
1485
- ];
1486
- for (const group of verifierGroups) {
1487
- for (const ref of group.refs) {
1488
- const resolution = input.resolutions.get(ref);
1489
- if (!resolution?.definition) {
1490
- const missing = diagnostic("error", "guarantee.verifier_unresolved", `Verifier ref "${ref}" is not resolved.`, ref, input.guarantee.sourcePath);
1491
- steps.push({ id: ref, kind: group.kind, ref, status: "blocked", diagnostics: [missing], startedAt: (/* @__PURE__ */ new Date()).toISOString(), completedAt: (/* @__PURE__ */ new Date()).toISOString() });
1492
- diagnostics.push(missing);
1493
- continue;
1494
- }
1495
- const cacheKey = `${input.environment}:${group.kind}:${ref}`;
1496
- await addStep({ id: ref, kind: group.kind, ref, status: "blocked" }, async () => {
1497
- const cached = input.verifierCache.get(cacheKey);
1498
- if (cached) return { ...cached, summary: `${cached.summary ?? `${ref} passed.`} (cached)` };
1499
- const result = await input.verifierExecutor({
1500
- workspaceRoot: input.workspaceRoot,
1501
- environment: input.environment,
1502
- runId: input.runId,
1503
- outputRoot: input.outputRoot,
1504
- guarantee: input.guarantee,
1505
- ref,
1506
- definition: resolution.definition,
1507
- kind: group.kind,
1508
- onProgress: input.onProgress
1509
- });
1510
- input.verifierCache.set(cacheKey, result);
1511
- return result;
1512
- });
1513
- }
1514
- }
1515
- const status = steps.some((step) => step.status === "failed") ? "failed" : steps.some((step) => step.status === "blocked") ? "blocked" : steps.some((step) => step.status === "skipped") ? "skipped" : "passed";
1516
- return {
1517
- id: input.guarantee.manifest.id,
1518
- ...input.guarantee.manifest.journeyIndex ? { journeyIndex: input.guarantee.manifest.journeyIndex } : {},
1519
- type: input.guarantee.manifest.type,
1520
- subtype: input.guarantee.manifest.subtype,
1521
- journey: input.guarantee.manifest.journey,
1522
- ownerPackage: input.guarantee.manifest.ownerPackage,
1523
- status,
1524
- selected: input.selected,
1525
- dependency: input.dependency,
1526
- sourcePath: input.guarantee.relativePath,
1527
- startedAt,
1528
- completedAt: (/* @__PURE__ */ new Date()).toISOString(),
1529
- steps,
1530
- evidence,
1531
- diagnostics
1532
- };
1533
- }
1534
- async function runTreeseedGuarantees(input) {
1535
- const workspaceRoot = resolve(input.workspaceRoot);
1536
- const environment = input.environment ?? "local";
1537
- const startedAtDate = input.now ?? /* @__PURE__ */ new Date();
1538
- const startedAt = startedAtDate.toISOString();
1539
- const runId = runIdFor(startedAtDate);
1540
- const outputRoot = resolve(workspaceRoot, input.outputRoot ?? (input.evidenceTarget === "release" ? `.treeseed/guarantees/release/${runId}` : `.treeseed/guarantees/runs/${runId}`));
1541
- const filter = input.filter ?? {};
1542
- const registry = discoverTreeseedGuarantees({ workspaceRoot, filter });
1543
- const plan = planTreeseedGuarantees({ workspaceRoot, filter, environment, includeDependencies: input.includeDependencies });
1544
- const diagnostics = [...registry.diagnostics, ...plan.diagnostics];
1545
- const allResolutions = verifierDefinitionsByRef(registry.verifierRegistries);
1546
- const verifierCache = /* @__PURE__ */ new Map();
1547
- const graph = buildTreeseedGuaranteeDependencyGraph({ guarantees: registry.guarantees, filter, includeDependencies: input.includeDependencies !== false });
1548
- diagnostics.push(...graph.diagnostics);
1549
- const selectedIds = graph.selectedIds;
1550
- const runEntries = graph.entries;
1551
- const planEntryById = new Map(plan.entries.map((entry) => [entry.id, entry]));
1552
- const resultById = /* @__PURE__ */ new Map();
1553
- const results = [];
1554
- input.onProgress?.(`[guarantees][run] planned ${runEntries.length} guarantee entries for ${environment}`);
1555
- if (registry.ok && plan.ok) {
1556
- for (const [index, entry] of runEntries.entries()) {
1557
- input.onProgress?.(`[guarantees][run] ${index + 1}/${runEntries.length} ${entry.manifest.id} (${entry.manifest.ownerPackage}) ${entry.manifest.journey}`);
1558
- const planEntry = planEntryById.get(entry.manifest.id);
1559
- const blockingDependencies = arrayOrEmpty(planEntry?.dependsOn).map((id) => resultById.get(id)).filter((result2) => Boolean(result2 && result2.status !== "passed"));
1560
- if (blockingDependencies.length > 0) {
1561
- const now = (/* @__PURE__ */ new Date()).toISOString();
1562
- const blockedBy = blockingDependencies.map((result2) => result2.id);
1563
- const dependencyDiagnostic = diagnostic(
1564
- "error",
1565
- "guarantee.dependency_failed",
1566
- `Dependency ${blockedBy.join(", ")} failed before ${entry.manifest.id}.`,
1567
- "dependencies.guarantees",
1568
- entry.sourcePath
1569
- );
1570
- const blocked = {
1571
- id: entry.manifest.id,
1572
- ...entry.manifest.journeyIndex ? { journeyIndex: entry.manifest.journeyIndex } : {},
1573
- type: entry.manifest.type,
1574
- subtype: entry.manifest.subtype,
1575
- journey: entry.manifest.journey,
1576
- ownerPackage: entry.manifest.ownerPackage,
1577
- status: "blocked",
1578
- selected: selectedIds.has(entry.manifest.id),
1579
- dependency: !selectedIds.has(entry.manifest.id),
1580
- sourcePath: entry.relativePath,
1581
- startedAt: now,
1582
- completedAt: now,
1583
- steps: [{
1584
- id: "dependency",
1585
- kind: "verifier",
1586
- status: "blocked",
1587
- summary: `Blocked by failed prerequisite: ${blockedBy.join(", ")}.`,
1588
- diagnostics: [dependencyDiagnostic],
1589
- startedAt: now,
1590
- completedAt: now
1591
- }],
1592
- evidence: [],
1593
- diagnostics: [dependencyDiagnostic]
1594
- };
1595
- results.push(blocked);
1596
- resultById.set(blocked.id, blocked);
1597
- input.onProgress?.(`[guarantees][run] ${entry.manifest.id}: blocked by ${blockedBy.join(", ")}`, "stderr");
1598
- continue;
1599
- }
1600
- if (entry.manifest.status !== "active") {
1601
- if (input.includePlanned) {
1602
- const now = (/* @__PURE__ */ new Date()).toISOString();
1603
- input.onProgress?.(`[guarantees][run] ${entry.manifest.id}: skipped because status is ${entry.manifest.status}`);
1604
- const skipped = {
1605
- id: entry.manifest.id,
1606
- ...entry.manifest.journeyIndex ? { journeyIndex: entry.manifest.journeyIndex } : {},
1607
- type: entry.manifest.type,
1608
- subtype: entry.manifest.subtype,
1609
- journey: entry.manifest.journey,
1610
- ownerPackage: entry.manifest.ownerPackage,
1611
- status: "skipped",
1612
- selected: selectedIds.has(entry.manifest.id),
1613
- dependency: !selectedIds.has(entry.manifest.id),
1614
- sourcePath: entry.relativePath,
1615
- startedAt: now,
1616
- completedAt: now,
1617
- steps: [{ id: "status", kind: "verifier", status: "skipped", summary: `Guarantee is ${entry.manifest.status}.`, startedAt: now, completedAt: now }],
1618
- evidence: [],
1619
- diagnostics: []
1620
- };
1621
- results.push(skipped);
1622
- resultById.set(skipped.id, skipped);
1623
- }
1624
- continue;
1625
- }
1626
- const resolution = resolveTreeseedGuaranteeVerifierRefs({
1627
- refs: allVerifierRefs(entry.manifest),
1628
- verifierRegistries: registry.verifierRegistries,
1629
- status: entry.manifest.status,
1630
- sourcePath: entry.sourcePath
1631
- });
1632
- diagnostics.push(...resolution.diagnostics);
1633
- if (!resolution.ok) {
1634
- const now = (/* @__PURE__ */ new Date()).toISOString();
1635
- input.onProgress?.(`[guarantees][run] ${entry.manifest.id}: blocked by unresolved verifier refs`, "stderr");
1636
- const blocked = {
1637
- id: entry.manifest.id,
1638
- ...entry.manifest.journeyIndex ? { journeyIndex: entry.manifest.journeyIndex } : {},
1639
- type: entry.manifest.type,
1640
- subtype: entry.manifest.subtype,
1641
- journey: entry.manifest.journey,
1642
- ownerPackage: entry.manifest.ownerPackage,
1643
- status: "blocked",
1644
- selected: selectedIds.has(entry.manifest.id),
1645
- dependency: !selectedIds.has(entry.manifest.id),
1646
- sourcePath: entry.relativePath,
1647
- startedAt: now,
1648
- completedAt: now,
1649
- steps: [],
1650
- evidence: [],
1651
- diagnostics: resolution.diagnostics
1652
- };
1653
- results.push(blocked);
1654
- resultById.set(blocked.id, blocked);
1655
- continue;
1656
- }
1657
- const result = await runGuaranteeSteps({
1658
- workspaceRoot,
1659
- environment,
1660
- runId,
1661
- outputRoot,
1662
- guarantee: entry,
1663
- selected: selectedIds.has(entry.manifest.id),
1664
- dependency: !selectedIds.has(entry.manifest.id),
1665
- resolutions: allResolutions,
1666
- sceneExecutor: input.sceneExecutor ?? defaultTreeseedGuaranteeSceneExecutor,
1667
- verifierExecutor: input.verifierExecutor ?? defaultTreeseedGuaranteeVerifierExecutor,
1668
- verifierCache,
1669
- record: input.record,
1670
- sceneArtifacts: input.sceneArtifacts,
1671
- device: input.device,
1672
- onProgress: input.onProgress
1673
- });
1674
- results.push(result);
1675
- resultById.set(result.id, result);
1676
- input.onProgress?.(`[guarantees][run] ${entry.manifest.id}: ${result.status}`);
1677
- }
1678
- }
1679
- const completedAt = (/* @__PURE__ */ new Date()).toISOString();
1680
- const releaseBlockingFailures = results.filter((result) => {
1681
- const entry = runEntries.find((candidate) => candidate.manifest.id === result.id);
1682
- return entry && releaseBlocking(entry.manifest) && ["failed", "blocked", ...input.failOnSkippedReleaseGuarantees === true ? ["skipped"] : []].includes(result.status);
1683
- }).length;
1684
- const counts = {
1685
- planned: plan.entries.filter((entry) => entry.status !== "active").length,
1686
- passed: results.filter((entry) => entry.status === "passed").length,
1687
- failed: results.filter((entry) => entry.status === "failed").length,
1688
- skipped: results.filter((entry) => entry.status === "skipped").length,
1689
- blocked: results.filter((entry) => entry.status === "blocked").length,
1690
- releaseBlockingFailures
1691
- };
1692
- const report = {
1693
- ok: registry.ok && plan.ok && counts.failed === 0 && counts.blocked === 0 && releaseBlockingFailures === 0,
1694
- runId,
1695
- workspaceRoot,
1696
- environment,
1697
- filter,
1698
- startedAt,
1699
- completedAt,
1700
- outputRoot,
1701
- statePath: relativeEvidencePath(workspaceRoot, resolve(outputRoot, "state.json")),
1702
- plan,
1703
- results,
1704
- diagnostics,
1705
- counts
1706
- };
1707
- mkdirSync(outputRoot, { recursive: true });
1708
- const state = {
1709
- schemaVersion: "treeseed.guarantee-run-state/v1",
1710
- runId,
1711
- values: {}
1712
- };
1713
- writeFileSync(resolve(outputRoot, "state.json"), `${JSON.stringify(state, null, 2)}
1714
- `);
1715
- const writeResult = writeTreeseedGuaranteeRunReport({ report, registry });
1716
- if (!writeResult.ok) {
1717
- report.ok = false;
1718
- report.diagnostics.push(...writeResult.diagnostics);
1719
- }
1720
- return report;
1721
- }
1722
- function createTreeseedGuaranteeStatusReport(input) {
1723
- const registry = discoverTreeseedGuarantees({ workspaceRoot: input.workspaceRoot });
1724
- const valid = registry.guarantees.filter((entry) => Boolean(entry.manifest));
1725
- const byType = {};
1726
- const byStatus = {};
1727
- for (const entry of valid) {
1728
- byType[entry.manifest.type] = (byType[entry.manifest.type] ?? 0) + 1;
1729
- byStatus[entry.manifest.status] = (byStatus[entry.manifest.status] ?? 0) + 1;
1730
- }
1731
- return {
1732
- ok: registry.ok,
1733
- workspaceRoot: resolve(input.workspaceRoot),
1734
- guaranteeRoots: sortedUnique(valid.map((entry) => dirname(entry.relativePath).split(sep).slice(0, 3).join("/"))),
1735
- counts: registry.counts,
1736
- byType,
1737
- byStatus,
1738
- verifierRegistries: registry.verifierRegistries.length,
1739
- diagnostics: registry.diagnostics
1740
- };
1741
- }
1742
- function assertPathInsideWorkspace(workspaceRoot, path) {
1743
- const resolvedWorkspace = resolve(workspaceRoot);
1744
- const resolvedPath = resolve(path);
1745
- if (resolvedPath !== resolvedWorkspace && !resolvedPath.startsWith(`${resolvedWorkspace}${sep}`)) {
1746
- throw new Error(`Path is outside workspace: ${path}`);
1747
- }
1748
- return resolvedPath;
1749
- }
1750
- function fileExists(path) {
1751
- return existsSync(path) && statSync(path).isFile();
1752
- }
1753
- export {
1754
- TREESEED_GUARANTEE_JOURNEY_AUDIT_SCHEMA_VERSION,
1755
- TREESEED_GUARANTEE_SCHEMA_VERSION,
1756
- TREESEED_GUARANTEE_VERIFIERS_SCHEMA_VERSION,
1757
- assertPathInsideWorkspace,
1758
- auditTreeseedGuaranteeJourneys,
1759
- browserForGuaranteeDevice,
1760
- createTreeseedGuaranteeStatusReport,
1761
- discoverTreeseedGuarantees,
1762
- exportTreeseedGuaranteesCsv,
1763
- exportTreeseedGuaranteesJson,
1764
- exportTreeseedGuaranteesMarkdown,
1765
- fileExists,
1766
- filterTreeseedGuarantees,
1767
- loadTreeseedGuaranteeManifest,
1768
- loadTreeseedGuaranteeVerifierRegistry,
1769
- normalizeTreeseedGuaranteeTaxonomy,
1770
- planTreeseedGuarantees,
1771
- resolveTreeseedGuaranteeVerifierRefs,
1772
- runTreeseedGuarantees,
1773
- sceneAuthRoleForGuarantee,
1774
- sceneDeviceRunsForGuarantee,
1775
- slugifyTreeseedGuaranteeJourney,
1776
- validateGuaranteeSceneJourneyContract,
1777
- validateTreeseedGuarantee,
1778
- validateTreeseedGuaranteeRegistry,
1779
- validateTreeseedVitestVerifierOutput,
1780
- writeTreeseedGuaranteeRunReport,
1781
- writeTreeseedGuaranteesExport
1782
- };