@treeseed/sdk 0.10.28 → 0.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/README.md +213 -7
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +118 -59
  27. package/dist/capacity-provider.js +235 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +3 -2
  36. package/dist/control-plane.js +38 -13
  37. package/dist/copilot.d.ts +3 -0
  38. package/dist/copilot.js +16 -1
  39. package/dist/d1-http.d.ts +1 -1
  40. package/dist/d1-store.d.ts +32 -57
  41. package/dist/d1-store.js +115 -318
  42. package/dist/db/d1.d.ts +1 -232
  43. package/dist/db/index.d.ts +3 -3
  44. package/dist/db/market-schema.d.ts +50900 -11018
  45. package/dist/db/market-schema.js +2313 -467
  46. package/dist/db/node-sqlite.d.ts +1 -232
  47. package/dist/db/node-sqlite.js +7 -2
  48. package/dist/db/schema.d.ts +0 -462
  49. package/dist/db/schema.js +2 -22
  50. package/dist/dispatch.d.ts +1 -1
  51. package/dist/dispatch.js +0 -11
  52. package/dist/fixture-support.js +52 -4
  53. package/dist/governance.d.ts +133 -0
  54. package/dist/governance.js +285 -0
  55. package/dist/graph/build.d.ts +2 -2
  56. package/dist/graph/context-query-contracts.d.ts +1 -1
  57. package/dist/graph/dsl.d.ts +1 -1
  58. package/dist/graph/query.d.ts +4 -4
  59. package/dist/graph/ranking.d.ts +1 -1
  60. package/dist/graph/schema.d.ts +1 -1
  61. package/dist/graph.d.ts +11 -11
  62. package/dist/guarantees/index.d.ts +425 -0
  63. package/dist/guarantees/index.js +1146 -0
  64. package/dist/hosting/apps.d.ts +12 -0
  65. package/dist/hosting/apps.js +107 -0
  66. package/dist/hosting/builtins.d.ts +25 -0
  67. package/dist/hosting/builtins.js +602 -0
  68. package/dist/hosting/contracts.d.ts +208 -0
  69. package/dist/hosting/contracts.js +0 -0
  70. package/dist/hosting/graph.d.ts +195 -0
  71. package/dist/hosting/graph.js +1092 -0
  72. package/dist/hosting/index.d.ts +4 -0
  73. package/dist/hosting/index.js +4 -0
  74. package/dist/index.d.ts +88 -67
  75. package/dist/index.js +142 -14
  76. package/dist/local-dev/managed-dev.d.ts +85 -0
  77. package/dist/local-dev/managed-dev.js +368 -0
  78. package/dist/managed-dependencies.d.ts +9 -0
  79. package/dist/managed-dependencies.js +10 -9
  80. package/dist/market-client.d.ts +327 -9
  81. package/dist/market-client.js +464 -20
  82. package/dist/model-registry.d.ts +1 -1
  83. package/dist/model-registry.js +19 -19
  84. package/dist/operations/agent-tools.d.ts +2 -11
  85. package/dist/operations/agent-tools.js +2 -14
  86. package/dist/operations/providers/default.d.ts +1 -1
  87. package/dist/operations/providers/default.js +20 -37
  88. package/dist/operations/repository-operations.d.ts +26 -2
  89. package/dist/operations/repository-operations.js +159 -1
  90. package/dist/operations/runtime.d.ts +3 -3
  91. package/dist/operations/services/bootstrap-runner.d.ts +4 -2
  92. package/dist/operations/services/bootstrap-runner.js +22 -2
  93. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  94. package/dist/operations/services/build-warning-policy.js +81 -82
  95. package/dist/operations/services/commit-message-provider.js +4 -4
  96. package/dist/operations/services/config-runtime.d.ts +83 -24
  97. package/dist/operations/services/config-runtime.js +449 -130
  98. package/dist/operations/services/deploy.d.ts +106 -624
  99. package/dist/operations/services/deploy.js +746 -263
  100. package/dist/operations/services/deployment-readiness.d.ts +30 -0
  101. package/dist/operations/services/deployment-readiness.js +206 -0
  102. package/dist/operations/services/git-remote-policy.js +12 -4
  103. package/dist/operations/services/git-runner.d.ts +66 -0
  104. package/dist/operations/services/git-runner.js +479 -0
  105. package/dist/operations/services/git-workflow.d.ts +45 -6
  106. package/dist/operations/services/git-workflow.js +251 -23
  107. package/dist/operations/services/github-actions-verification.d.ts +4 -1
  108. package/dist/operations/services/github-actions-verification.js +12 -3
  109. package/dist/operations/services/github-api.js +22 -6
  110. package/dist/operations/services/github-automation.d.ts +4 -4
  111. package/dist/operations/services/github-automation.js +19 -21
  112. package/dist/operations/services/github-credentials.d.ts +13 -0
  113. package/dist/operations/services/github-credentials.js +59 -0
  114. package/dist/operations/services/hosted-service-checks.d.ts +81 -0
  115. package/dist/operations/services/hosted-service-checks.js +478 -0
  116. package/dist/operations/services/hosting-audit.d.ts +2 -2
  117. package/dist/operations/services/hosting-audit.js +7 -7
  118. package/dist/operations/services/hub-launch.d.ts +1 -1
  119. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  120. package/dist/operations/services/hub-provider-launch.js +22 -17
  121. package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
  122. package/dist/operations/services/live-hosted-service-checks.js +463 -0
  123. package/dist/operations/services/local-dev.js +0 -1
  124. package/dist/operations/services/managed-host-security.d.ts +1 -1
  125. package/dist/operations/services/managed-host-security.js +1 -1
  126. package/dist/operations/services/managed-repositories.d.ts +37 -0
  127. package/dist/operations/services/managed-repositories.js +177 -0
  128. package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
  129. package/dist/operations/services/operations-runner-smoke.js +198 -0
  130. package/dist/operations/services/package-adapters.d.ts +170 -0
  131. package/dist/operations/services/package-adapters.js +859 -0
  132. package/dist/operations/services/package-reference-policy.d.ts +13 -88
  133. package/dist/operations/services/package-reference-policy.js +96 -215
  134. package/dist/operations/services/project-host-operations.d.ts +4 -4
  135. package/dist/operations/services/project-platform.d.ts +57 -173
  136. package/dist/operations/services/project-platform.js +80 -111
  137. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  138. package/dist/operations/services/project-web-monitor.js +122 -5
  139. package/dist/operations/services/railway-api.d.ts +117 -5
  140. package/dist/operations/services/railway-api.js +915 -93
  141. package/dist/operations/services/railway-deploy.d.ts +30 -112
  142. package/dist/operations/services/railway-deploy.js +521 -961
  143. package/dist/operations/services/release-history.js +3 -4
  144. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  145. package/dist/operations/services/release-proof-ledger.js +81 -0
  146. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  147. package/dist/operations/services/release-proof-planner.js +195 -0
  148. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  149. package/dist/operations/services/release-proof-runner.js +169 -0
  150. package/dist/operations/services/release-proof.d.ts +81 -0
  151. package/dist/operations/services/release-proof.js +79 -0
  152. package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
  153. package/dist/operations/services/repository-save-orchestrator.js +604 -212
  154. package/dist/operations/services/runtime-paths.d.ts +1 -3
  155. package/dist/operations/services/runtime-paths.js +0 -4
  156. package/dist/operations/services/runtime-tools.d.ts +1 -191
  157. package/dist/operations/services/runtime-tools.js +4 -443
  158. package/dist/operations/services/save-deploy-preflight.js +9 -1
  159. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  160. package/dist/operations/services/template-host-bindings.js +3 -2
  161. package/dist/operations/services/template-registry.d.ts +6 -6
  162. package/dist/operations/services/template-registry.js +33 -14
  163. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  164. package/dist/operations/services/verification-cache.d.ts +25 -0
  165. package/dist/operations/services/verification-cache.js +71 -0
  166. package/dist/operations/services/workflow-timing.d.ts +25 -0
  167. package/dist/operations/services/workflow-timing.js +79 -0
  168. package/dist/operations/services/workspace-dependency-mode.js +50 -5
  169. package/dist/operations/services/workspace-preflight.js +8 -8
  170. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  171. package/dist/operations/services/workspace-save.d.ts +1 -0
  172. package/dist/operations/services/workspace-save.js +42 -19
  173. package/dist/operations/services/workspace-tools.js +42 -7
  174. package/dist/operations-registry.d.ts +1 -1
  175. package/dist/operations-registry.js +5 -6
  176. package/dist/operations-types.d.ts +1 -1
  177. package/dist/operations.d.ts +17 -11
  178. package/dist/operations.js +57 -3
  179. package/dist/platform/book-export.js +2 -0
  180. package/dist/platform/books-data.d.ts +1 -1
  181. package/dist/platform/config.d.ts +27 -0
  182. package/dist/platform/config.js +100 -0
  183. package/dist/platform/content-runtime-source.d.ts +54 -0
  184. package/dist/platform/content-runtime-source.js +169 -0
  185. package/dist/platform/contracts.d.ts +38 -2
  186. package/dist/platform/deploy-config.d.ts +1 -1
  187. package/dist/platform/deploy-config.js +80 -9
  188. package/dist/platform/deploy-runtime.d.ts +1 -1
  189. package/dist/platform/desired-state.d.ts +63 -0
  190. package/dist/platform/desired-state.js +1021 -0
  191. package/dist/platform/env.yaml +568 -45
  192. package/dist/platform/environment.d.ts +3 -2
  193. package/dist/platform/environment.js +122 -21
  194. package/dist/platform/local-content-materialization.d.ts +9 -0
  195. package/dist/platform/local-content-materialization.js +212 -0
  196. package/dist/platform/plugin.d.ts +13 -4
  197. package/dist/platform/plugins/runtime.d.ts +3 -3
  198. package/dist/platform/plugins/runtime.js +62 -1
  199. package/dist/platform/plugins.d.ts +6 -6
  200. package/dist/platform/published-content-pipeline.d.ts +3 -3
  201. package/dist/platform/published-content-pipeline.js +5 -1
  202. package/dist/platform/published-content.d.ts +4 -3
  203. package/dist/platform/site-config-schema.d.ts +1 -0
  204. package/dist/platform/site-config-schema.js +4 -1
  205. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  206. package/dist/platform/tenant-config.d.ts +1 -1
  207. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  208. package/dist/platform/utils/site-config-schema.js +400 -461
  209. package/dist/platform-operation-store.d.ts +1 -1
  210. package/dist/platform-operation-store.js +2 -2
  211. package/dist/platform-operations.js +1 -1
  212. package/dist/plugin-default.d.ts +1 -1
  213. package/dist/plugin-default.js +27 -12
  214. package/dist/project-import.d.ts +91 -0
  215. package/dist/project-import.js +257 -0
  216. package/dist/project-workflow.d.ts +1 -1
  217. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  218. package/dist/reconcile/bootstrap-systems.js +5 -5
  219. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  220. package/dist/reconcile/builtin-adapters.js +3190 -429
  221. package/dist/reconcile/contracts.d.ts +23 -6
  222. package/dist/reconcile/desired-state.d.ts +2 -192
  223. package/dist/reconcile/desired-state.js +29 -38
  224. package/dist/reconcile/engine.d.ts +61 -395
  225. package/dist/reconcile/engine.js +229 -44
  226. package/dist/reconcile/index.d.ts +10 -8
  227. package/dist/reconcile/index.js +2 -0
  228. package/dist/reconcile/live-acceptance.d.ts +100 -0
  229. package/dist/reconcile/live-acceptance.js +2027 -0
  230. package/dist/reconcile/platform.d.ts +104 -0
  231. package/dist/reconcile/platform.js +100 -0
  232. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  233. package/dist/reconcile/providers/docker-private.js +101 -0
  234. package/dist/reconcile/providers/github-private.d.ts +65 -0
  235. package/dist/reconcile/providers/github-private.js +119 -0
  236. package/dist/reconcile/providers/local-private.d.ts +28 -0
  237. package/dist/reconcile/providers/local-private.js +75 -0
  238. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  239. package/dist/reconcile/providers/railway-iac.js +275 -0
  240. package/dist/reconcile/providers/release-private.d.ts +92 -0
  241. package/dist/reconcile/providers/release-private.js +152 -0
  242. package/dist/reconcile/registry.d.ts +2 -2
  243. package/dist/reconcile/registry.js +16 -1
  244. package/dist/reconcile/state.d.ts +1 -1
  245. package/dist/reconcile/state.js +7 -44
  246. package/dist/reconcile/units.d.ts +1 -1
  247. package/dist/reconcile/units.js +9 -3
  248. package/dist/remote.d.ts +6 -6
  249. package/dist/scenes/artifacts.d.ts +16 -0
  250. package/dist/scenes/artifacts.js +61 -0
  251. package/dist/scenes/auth.d.ts +2 -0
  252. package/dist/scenes/auth.js +28 -0
  253. package/dist/scenes/base-url.d.ts +12 -0
  254. package/dist/scenes/base-url.js +123 -0
  255. package/dist/scenes/builtin-plugins.d.ts +2 -0
  256. package/dist/scenes/builtin-plugins.js +447 -0
  257. package/dist/scenes/checkpoints.d.ts +14 -0
  258. package/dist/scenes/checkpoints.js +33 -0
  259. package/dist/scenes/device-matrix.d.ts +2 -0
  260. package/dist/scenes/device-matrix.js +97 -0
  261. package/dist/scenes/devices.d.ts +11 -0
  262. package/dist/scenes/devices.js +22 -0
  263. package/dist/scenes/diagnostics.d.ts +5 -0
  264. package/dist/scenes/diagnostics.js +22 -0
  265. package/dist/scenes/diagram-providers.d.ts +2 -0
  266. package/dist/scenes/diagram-providers.js +181 -0
  267. package/dist/scenes/diagram-validation.d.ts +22 -0
  268. package/dist/scenes/diagram-validation.js +74 -0
  269. package/dist/scenes/environment.d.ts +2 -0
  270. package/dist/scenes/environment.js +65 -0
  271. package/dist/scenes/evidence-bundle.d.ts +5 -0
  272. package/dist/scenes/evidence-bundle.js +42 -0
  273. package/dist/scenes/evidence-report.d.ts +10 -0
  274. package/dist/scenes/evidence-report.js +73 -0
  275. package/dist/scenes/evidence.d.ts +16 -0
  276. package/dist/scenes/evidence.js +277 -0
  277. package/dist/scenes/index.d.ts +48 -0
  278. package/dist/scenes/index.js +312 -0
  279. package/dist/scenes/inspect.d.ts +9 -0
  280. package/dist/scenes/inspect.js +64 -0
  281. package/dist/scenes/loader.d.ts +3 -0
  282. package/dist/scenes/loader.js +38 -0
  283. package/dist/scenes/logs.d.ts +2 -0
  284. package/dist/scenes/logs.js +47 -0
  285. package/dist/scenes/operations.d.ts +3 -0
  286. package/dist/scenes/operations.js +128 -0
  287. package/dist/scenes/phase0.d.ts +9 -0
  288. package/dist/scenes/phase0.js +637 -0
  289. package/dist/scenes/planner.d.ts +12 -0
  290. package/dist/scenes/planner.js +166 -0
  291. package/dist/scenes/playwright-adapter.d.ts +2 -0
  292. package/dist/scenes/playwright-adapter.js +63 -0
  293. package/dist/scenes/plugins.d.ts +5 -0
  294. package/dist/scenes/plugins.js +115 -0
  295. package/dist/scenes/progress.d.ts +17 -0
  296. package/dist/scenes/progress.js +24 -0
  297. package/dist/scenes/publish-destinations.d.ts +12 -0
  298. package/dist/scenes/publish-destinations.js +99 -0
  299. package/dist/scenes/publish-plan-report.d.ts +10 -0
  300. package/dist/scenes/publish-plan-report.js +70 -0
  301. package/dist/scenes/publish-plan.d.ts +15 -0
  302. package/dist/scenes/publish-plan.js +248 -0
  303. package/dist/scenes/publish-redaction.d.ts +16 -0
  304. package/dist/scenes/publish-redaction.js +148 -0
  305. package/dist/scenes/publish-release-record.d.ts +13 -0
  306. package/dist/scenes/publish-release-record.js +34 -0
  307. package/dist/scenes/publish-report.d.ts +10 -0
  308. package/dist/scenes/publish-report.js +67 -0
  309. package/dist/scenes/publish.d.ts +16 -0
  310. package/dist/scenes/publish.js +298 -0
  311. package/dist/scenes/registry.d.ts +12 -0
  312. package/dist/scenes/registry.js +65 -0
  313. package/dist/scenes/remotion-adapter.d.ts +3 -0
  314. package/dist/scenes/remotion-adapter.js +94 -0
  315. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  316. package/dist/scenes/remotion-composition-registry.js +12 -0
  317. package/dist/scenes/remotion-compositions.d.ts +15 -0
  318. package/dist/scenes/remotion-compositions.js +464 -0
  319. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  320. package/dist/scenes/remotion-diagrams.js +188 -0
  321. package/dist/scenes/remotion-input.d.ts +13 -0
  322. package/dist/scenes/remotion-input.js +291 -0
  323. package/dist/scenes/remotion-visuals.d.ts +29 -0
  324. package/dist/scenes/remotion-visuals.js +198 -0
  325. package/dist/scenes/render-media-assets.d.ts +9 -0
  326. package/dist/scenes/render-media-assets.js +117 -0
  327. package/dist/scenes/render-report.d.ts +10 -0
  328. package/dist/scenes/render-report.js +27 -0
  329. package/dist/scenes/render.d.ts +2 -0
  330. package/dist/scenes/render.js +218 -0
  331. package/dist/scenes/reporter.d.ts +3 -0
  332. package/dist/scenes/reporter.js +101 -0
  333. package/dist/scenes/resume.d.ts +2 -0
  334. package/dist/scenes/resume.js +79 -0
  335. package/dist/scenes/runner.d.ts +2 -0
  336. package/dist/scenes/runner.js +674 -0
  337. package/dist/scenes/schema.d.ts +6 -0
  338. package/dist/scenes/schema.js +994 -0
  339. package/dist/scenes/seed.d.ts +2 -0
  340. package/dist/scenes/seed.js +83 -0
  341. package/dist/scenes/segments.d.ts +15 -0
  342. package/dist/scenes/segments.js +79 -0
  343. package/dist/scenes/selectors.d.ts +3 -0
  344. package/dist/scenes/selectors.js +21 -0
  345. package/dist/scenes/timeline.d.ts +11 -0
  346. package/dist/scenes/timeline.js +26 -0
  347. package/dist/scenes/timeouts.d.ts +6 -0
  348. package/dist/scenes/timeouts.js +17 -0
  349. package/dist/scenes/training-captions.d.ts +14 -0
  350. package/dist/scenes/training-captions.js +98 -0
  351. package/dist/scenes/training-report.d.ts +10 -0
  352. package/dist/scenes/training-report.js +78 -0
  353. package/dist/scenes/training-transcript.d.ts +24 -0
  354. package/dist/scenes/training-transcript.js +204 -0
  355. package/dist/scenes/training.d.ts +10 -0
  356. package/dist/scenes/training.js +134 -0
  357. package/dist/scenes/types.d.ts +1872 -0
  358. package/dist/scenes/types.js +8 -0
  359. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  360. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  361. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  362. package/dist/scenes/visual-audit-fixtures.js +210 -0
  363. package/dist/scenes/visual-audit-report.d.ts +11 -0
  364. package/dist/scenes/visual-audit-report.js +85 -0
  365. package/dist/scenes/visual-audit-review.d.ts +23 -0
  366. package/dist/scenes/visual-audit-review.js +829 -0
  367. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  368. package/dist/scenes/visual-audit-routes.js +308 -0
  369. package/dist/scenes/visual-audit.d.ts +3 -0
  370. package/dist/scenes/visual-audit.js +596 -0
  371. package/dist/scripts/build-dist.js +154 -40
  372. package/dist/scripts/check-build-warnings.js +42 -53
  373. package/dist/scripts/cleanup-markdown.js +1 -1
  374. package/dist/scripts/cli-test-fixtures.js +24 -28
  375. package/dist/scripts/deployment-readiness.js +20 -0
  376. package/dist/scripts/generate-treedx-openapi-types.js +186 -0
  377. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  378. package/dist/scripts/operations-runner-smoke.js +16 -0
  379. package/dist/scripts/package-tools.js +12 -1
  380. package/dist/scripts/prepare.js +3 -7
  381. package/dist/scripts/release-verify.js +6 -6
  382. package/dist/scripts/run-fixture-astro-command.js +1 -1
  383. package/dist/scripts/template-catalog.test.js +68 -82
  384. package/dist/scripts/tenant-dev.js +0 -10
  385. package/dist/scripts/tenant-workflow-action.js +10 -1
  386. package/dist/scripts/test-cloudflare-local.js +1 -1
  387. package/dist/scripts/test-scaffold.js +0 -1
  388. package/dist/scripts/test-smoke.js +3 -3
  389. package/dist/scripts/treeseed-build-dist.js +4 -7
  390. package/dist/scripts/treeseed-release-verify.js +1 -1
  391. package/dist/scripts/verify-driver.js +30 -21
  392. package/dist/scripts/workflow-commands.test.js +18 -27
  393. package/dist/scripts/workspace-command-e2e.js +1 -1
  394. package/dist/scripts/workspace-lint.js +6 -0
  395. package/dist/scripts/workspace-release-test.js +90 -1
  396. package/dist/scripts/workspace-test.js +6 -0
  397. package/dist/sdk-dispatch.d.ts +1 -1
  398. package/dist/sdk-dispatch.js +0 -16
  399. package/dist/sdk-fields.d.ts +1 -1
  400. package/dist/sdk-filters.d.ts +1 -1
  401. package/dist/sdk-types.d.ts +1352 -116
  402. package/dist/sdk-types.js +413 -2
  403. package/dist/sdk.d.ts +106 -100
  404. package/dist/sdk.js +211 -51
  405. package/dist/secrets-capability.d.ts +421 -0
  406. package/dist/secrets-capability.js +530 -0
  407. package/dist/seeds/normalize.js +1 -0
  408. package/dist/seeds/planner.js +38 -0
  409. package/dist/seeds/schema.js +293 -4
  410. package/dist/seeds/types.d.ts +60 -0
  411. package/dist/seeds/types.js +9 -1
  412. package/dist/service-credentials.d.ts +54 -0
  413. package/dist/service-credentials.js +112 -0
  414. package/dist/stores/cursor-store.d.ts +2 -2
  415. package/dist/stores/envelopes.d.ts +1 -1
  416. package/dist/stores/helpers.d.ts +1 -1
  417. package/dist/stores/lease-store.d.ts +2 -2
  418. package/dist/stores/message-store.d.ts +2 -2
  419. package/dist/stores/operational-store.d.ts +3 -26
  420. package/dist/stores/operational-store.js +0 -225
  421. package/dist/stores/project-workflow-store.d.ts +2 -2
  422. package/dist/stores/run-store.d.ts +2 -3
  423. package/dist/stores/run-store.js +0 -98
  424. package/dist/stores/subscription-store.d.ts +2 -3
  425. package/dist/stores/subscription-store.js +0 -100
  426. package/dist/template-catalog.d.ts +1 -1
  427. package/dist/template-launch-requirements.d.ts +2 -2
  428. package/dist/template-launch-requirements.js +9 -0
  429. package/dist/template-launch-ui.d.ts +2 -2
  430. package/dist/treedx/adapters.d.ts +6 -0
  431. package/dist/treedx/adapters.js +36 -0
  432. package/dist/treedx/client.d.ts +222 -0
  433. package/dist/treedx/client.js +871 -0
  434. package/dist/treedx/errors.d.ts +13 -0
  435. package/dist/treedx/errors.js +17 -0
  436. package/dist/treedx/federated-client.d.ts +27 -0
  437. package/dist/treedx/federated-client.js +158 -0
  438. package/dist/treedx/generated/openapi-types.d.ts +3558 -0
  439. package/dist/treedx/generated/openapi-types.js +0 -0
  440. package/dist/treedx/graph-adapter.d.ts +33 -0
  441. package/dist/treedx/graph-adapter.js +156 -0
  442. package/dist/treedx/index.d.ts +14 -0
  443. package/dist/treedx/index.js +48 -0
  444. package/dist/treedx/market-integration.d.ts +27 -0
  445. package/dist/treedx/market-integration.js +131 -0
  446. package/dist/treedx/ports.d.ts +166 -0
  447. package/dist/treedx/ports.js +231 -0
  448. package/dist/treedx/query-adapter.d.ts +19 -0
  449. package/dist/treedx/query-adapter.js +62 -0
  450. package/dist/treedx/registry-client.d.ts +11 -0
  451. package/dist/treedx/registry-client.js +19 -0
  452. package/dist/treedx/repository-adapter.d.ts +45 -0
  453. package/dist/treedx/repository-adapter.js +319 -0
  454. package/dist/treedx/sdk-integration.d.ts +27 -0
  455. package/dist/treedx/sdk-integration.js +63 -0
  456. package/dist/treedx/types.d.ts +1084 -0
  457. package/dist/treedx/types.js +8 -0
  458. package/dist/treedx/workspace-adapter.d.ts +27 -0
  459. package/dist/treedx/workspace-adapter.js +65 -0
  460. package/dist/treedx-backends.d.ts +220 -0
  461. package/dist/treedx-backends.js +634 -0
  462. package/dist/treedx-client.d.ts +89 -0
  463. package/dist/treedx-client.js +184 -0
  464. package/dist/treeseed/services/compose.yml +2 -3
  465. package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
  466. package/dist/types/agents.d.ts +256 -0
  467. package/dist/types/agents.js +42 -1
  468. package/dist/verification.d.ts +1 -0
  469. package/dist/verification.js +143 -14
  470. package/dist/workflow/operations.d.ts +580 -523
  471. package/dist/workflow/operations.js +2084 -1279
  472. package/dist/workflow/policy.js +19 -7
  473. package/dist/workflow/runs.d.ts +9 -3
  474. package/dist/workflow/runs.js +66 -26
  475. package/dist/workflow/session.d.ts +4 -1
  476. package/dist/workflow/session.js +50 -10
  477. package/dist/workflow/worktrees.d.ts +6 -2
  478. package/dist/workflow/worktrees.js +98 -15
  479. package/dist/workflow-state.d.ts +17 -4
  480. package/dist/workflow-state.js +68 -41
  481. package/dist/workflow-support.d.ts +26 -17
  482. package/dist/workflow-support.js +84 -24
  483. package/dist/workflow.d.ts +51 -16
  484. package/dist/workflow.js +19 -7
  485. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  486. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  487. package/drizzle/market/0004_treedx_market_integration.sql +99 -0
  488. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  489. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  490. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  491. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  492. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  493. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  494. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  495. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  496. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  497. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  498. package/package.json +106 -18
  499. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  500. package/templates/github/deploy-web.workflow.yml +49 -12
  501. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  502. package/dist/operations/services/mailpit-runtime.js +0 -67
  503. package/dist/operations/services/release-candidate.d.ts +0 -41
  504. package/dist/operations/services/release-candidate.js +0 -616
  505. package/dist/scripts/ensure-mailpit.js +0 -48
  506. package/dist/scripts/logs-mailpit.js +0 -2
  507. package/dist/scripts/run-ts.js +0 -45
  508. package/dist/scripts/stop-mailpit.js +0 -5
  509. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -0,0 +1,479 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
3
+ import { dirname, relative, resolve } from "node:path";
4
+ function pidAlive(pid) {
5
+ try {
6
+ process.kill(pid, 0);
7
+ return true;
8
+ } catch {
9
+ return false;
10
+ }
11
+ }
12
+ function gitSync(args, options) {
13
+ const env = {
14
+ ...process.env,
15
+ ...options.env ?? {}
16
+ };
17
+ for (const [key, value] of Object.entries(env)) {
18
+ if (value === void 0) {
19
+ delete env[key];
20
+ }
21
+ }
22
+ if (args[0] === "ls-remote") {
23
+ for (const key of Object.keys(env)) {
24
+ if (key.startsWith("GIT_") && key !== "GIT_ALLOW_PROTOCOL" && key !== "GIT_TERMINAL_PROMPT") {
25
+ delete env[key];
26
+ }
27
+ }
28
+ }
29
+ const spawnOptions = {
30
+ cwd: options.cwd,
31
+ env,
32
+ encoding: "utf8",
33
+ stdio: "pipe",
34
+ timeout: options.timeoutMs,
35
+ maxBuffer: options.maxBuffer ?? 1024 * 1024 * 32
36
+ };
37
+ const result = spawnSync("git", args, spawnOptions);
38
+ const output = {
39
+ status: result.status,
40
+ stdout: result.stdout ?? "",
41
+ stderr: result.stderr ?? ""
42
+ };
43
+ if (result.status !== 0 && !options.allowFailure) {
44
+ throw new Error(output.stderr.trim() || output.stdout.trim() || `git ${args.join(" ")} failed in ${options.cwd}.`);
45
+ }
46
+ return output;
47
+ }
48
+ class TreeseedGitLockError extends Error {
49
+ diagnostics;
50
+ command;
51
+ cwd;
52
+ constructor(message, input) {
53
+ super(message);
54
+ this.name = "TreeseedGitLockError";
55
+ this.diagnostics = input.diagnostics;
56
+ this.command = input.command;
57
+ this.cwd = input.cwd;
58
+ }
59
+ }
60
+ function classifyTreeseedGitMode(args) {
61
+ const command = args[0] ?? "";
62
+ if (command === "remote" && args[1] !== "set-url") {
63
+ return "read";
64
+ }
65
+ if (command === "tag" && (args[1] === "-l" || args[1] === "--list")) {
66
+ return "read";
67
+ }
68
+ if (command === "merge-base" && args.includes("--is-ancestor")) {
69
+ return "read";
70
+ }
71
+ return (/* @__PURE__ */ new Set([
72
+ "add",
73
+ "checkout",
74
+ "commit",
75
+ "fetch",
76
+ "merge",
77
+ "pull",
78
+ "push",
79
+ "rebase",
80
+ "reset",
81
+ "restore",
82
+ "switch",
83
+ "tag",
84
+ "worktree"
85
+ ])).has(command) ? "mutate" : "read";
86
+ }
87
+ function resolveCommonGitDir(cwd) {
88
+ const result = gitSync(["rev-parse", "--git-common-dir"], { cwd, allowFailure: true });
89
+ const raw = result.status === 0 ? result.stdout.trim() : "";
90
+ if (!raw) return null;
91
+ return resolve(cwd, raw);
92
+ }
93
+ function resolveGitDir(cwd) {
94
+ const result = gitSync(["rev-parse", "--git-dir"], { cwd, allowFailure: true });
95
+ const raw = result.status === 0 ? result.stdout.trim() : "";
96
+ if (!raw) return null;
97
+ return resolve(cwd, raw);
98
+ }
99
+ function resolveGitRoot(cwd) {
100
+ const result = gitSync(["rev-parse", "--show-toplevel"], { cwd, allowFailure: true });
101
+ const raw = result.status === 0 ? result.stdout.trim() : "";
102
+ return raw || cwd;
103
+ }
104
+ function lockRoot(commonGitDir) {
105
+ return commonGitDir ? resolve(commonGitDir, "treeseed", "locks") : resolve(process.cwd(), ".treeseed", "locks");
106
+ }
107
+ function lockPathFor(commonGitDir) {
108
+ const base = lockRoot(commonGitDir);
109
+ return resolve(base, "git-mutation.lock");
110
+ }
111
+ function lockMetadataPath(lockPath) {
112
+ return resolve(lockPath, "owner.json");
113
+ }
114
+ function isWithin(parent, candidate) {
115
+ const rel = relative(parent, candidate);
116
+ return rel === "" || !!rel && !rel.startsWith("..") && !rel.startsWith("/");
117
+ }
118
+ function staleTreeseedLock(lockPath) {
119
+ if (!existsSync(lockPath)) return false;
120
+ try {
121
+ const metadata = JSON.parse(readFileSync(lockMetadataPath(lockPath), "utf8"));
122
+ const pid = typeof metadata.pid === "number" ? metadata.pid : null;
123
+ if (pid && !pidAlive(pid)) return true;
124
+ const updatedAt = typeof metadata.updatedAt === "string" ? Date.parse(metadata.updatedAt) : Number.NaN;
125
+ return Number.isFinite(updatedAt) && Date.now() - updatedAt > 30 * 60 * 1e3;
126
+ } catch {
127
+ return false;
128
+ }
129
+ }
130
+ function acquireMutationLock(commonGitDir) {
131
+ const path = lockPathFor(commonGitDir);
132
+ mkdirSync(dirname(path), { recursive: true });
133
+ for (let attempt = 0; attempt < 80; attempt += 1) {
134
+ try {
135
+ mkdirSync(path);
136
+ writeFileSync(lockMetadataPath(path), `${JSON.stringify({
137
+ pid: process.pid,
138
+ host: process.env.HOSTNAME ?? null,
139
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
140
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
141
+ }, null, 2)}
142
+ `, "utf8");
143
+ return () => rmSync(path, { recursive: true, force: true });
144
+ } catch {
145
+ if (staleTreeseedLock(path)) {
146
+ rmSync(path, { recursive: true, force: true });
147
+ continue;
148
+ }
149
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 125);
150
+ }
151
+ }
152
+ throw new Error(`Timed out waiting for Treeseed Git mutation lock ${path}.`);
153
+ }
154
+ function activeGitProcessHints(repoRoot, commonGitDir, gitDir, lockPath) {
155
+ const ps = spawnSync("ps", ["-eo", "pid=,args="], { encoding: "utf8", stdio: "pipe" });
156
+ return (ps.stdout ?? "").split(/\r?\n/u).map((line) => line.trim()).filter(Boolean).map((line) => {
157
+ const match = /^(\d+)\s+(.*)$/u.exec(line);
158
+ return match ? { pid: Number(match[1]), command: match[2] ?? "" } : null;
159
+ }).filter((entry) => entry !== null).filter((entry) => {
160
+ if (!/(^|[\/\s])git(\s|$)/u.test(entry.command)) return false;
161
+ return entry.command.includes(repoRoot) || (commonGitDir ? entry.command.includes(commonGitDir) : false) || (gitDir ? entry.command.includes(gitDir) : false) || (lockPath ? entry.command.includes(lockPath) || entry.command.includes(dirname(lockPath)) : false);
162
+ });
163
+ }
164
+ function absentDiagnostic(cwd, kind = "index") {
165
+ const repoRoot = resolveGitRoot(cwd);
166
+ const commonGitDir = resolveCommonGitDir(cwd);
167
+ const gitDir = resolveGitDir(cwd);
168
+ const indexLockPath = gitDir ? resolve(gitDir, "index.lock") : null;
169
+ return {
170
+ repoRoot,
171
+ commonGitDir,
172
+ lockPath: indexLockPath,
173
+ relativeLockPath: indexLockPath && commonGitDir ? relative(commonGitDir, indexLockPath) : null,
174
+ kind,
175
+ exists: false,
176
+ indexLockPath,
177
+ indexLockExists: false,
178
+ safeToRepair: false,
179
+ reason: "no Git lock present",
180
+ removed: false,
181
+ ageMs: null,
182
+ activeGitProcessHints: []
183
+ };
184
+ }
185
+ function classifyGitLockPath(baseGitDir, lockPath) {
186
+ const rel = relative(baseGitDir, lockPath).replace(/\\/gu, "/");
187
+ if (rel === "index.lock") return "index";
188
+ if (rel === "packed-refs.lock") return "packed-refs";
189
+ if (rel === "HEAD.lock") return "head";
190
+ if (rel === "treeseed/locks/git-mutation.lock") return "treeseed-mutation";
191
+ if (/^refs\/.+\.lock$/u.test(rel)) return "ref";
192
+ return "unknown";
193
+ }
194
+ function staleThresholdMs(kind) {
195
+ switch (kind) {
196
+ case "ref":
197
+ return 30 * 1e3;
198
+ case "packed-refs":
199
+ case "head":
200
+ return 2 * 60 * 1e3;
201
+ case "treeseed-mutation":
202
+ return 30 * 60 * 1e3;
203
+ case "index":
204
+ return 10 * 60 * 1e3;
205
+ default:
206
+ return Number.POSITIVE_INFINITY;
207
+ }
208
+ }
209
+ function lockDiagnostic(cwd, lockPath) {
210
+ const repoRoot = resolveGitRoot(cwd);
211
+ const commonGitDir = resolveCommonGitDir(cwd);
212
+ const gitDir = resolveGitDir(cwd);
213
+ const resolvedLockPath = resolve(lockPath);
214
+ const baseGitDir = gitDir && isWithin(gitDir, resolvedLockPath) ? gitDir : commonGitDir && isWithin(commonGitDir, resolvedLockPath) ? commonGitDir : null;
215
+ const kind = baseGitDir ? classifyGitLockPath(baseGitDir, resolvedLockPath) : "unknown";
216
+ const indexLockPath = gitDir ? resolve(gitDir, "index.lock") : null;
217
+ if (!baseGitDir || !existsSync(resolvedLockPath)) {
218
+ return {
219
+ ...absentDiagnostic(cwd, kind),
220
+ lockPath: resolvedLockPath,
221
+ relativeLockPath: baseGitDir ? relative(baseGitDir, resolvedLockPath) : null
222
+ };
223
+ }
224
+ const stat = statSync(resolvedLockPath);
225
+ const ageMs = Date.now() - stat.mtimeMs;
226
+ const activeHints = activeGitProcessHints(repoRoot, commonGitDir, gitDir, resolvedLockPath);
227
+ const insideGitDir = isWithin(baseGitDir, resolvedLockPath);
228
+ const safeToRepair = insideGitDir && kind !== "unknown" && ageMs > staleThresholdMs(kind) && activeHints.length === 0;
229
+ return {
230
+ repoRoot,
231
+ commonGitDir,
232
+ lockPath: resolvedLockPath,
233
+ relativeLockPath: relative(baseGitDir, resolvedLockPath),
234
+ kind,
235
+ exists: true,
236
+ indexLockPath,
237
+ indexLockExists: resolvedLockPath === indexLockPath,
238
+ safeToRepair,
239
+ reason: safeToRepair ? `${kind} lock is stale and no active Git process references this repo` : !insideGitDir ? "lock path is outside the Git directory" : kind === "unknown" ? "unknown Git lock kind is not safe to remove automatically" : activeHints.length > 0 ? `active Git process references this repo: ${activeHints.map((hint) => hint.pid).join(", ")}` : `${kind} lock may be owned by a recent Git process`,
240
+ removed: false,
241
+ ageMs,
242
+ activeGitProcessHints: activeHints
243
+ };
244
+ }
245
+ function collectLockPaths(commonGitDir, gitDir) {
246
+ const paths = [
247
+ resolve(gitDir, "index.lock"),
248
+ resolve(gitDir, "HEAD.lock"),
249
+ resolve(commonGitDir, "packed-refs.lock")
250
+ ];
251
+ const refRoots = [
252
+ resolve(commonGitDir, "refs"),
253
+ resolve(gitDir, "refs")
254
+ ];
255
+ for (const refRoot of refRoots) {
256
+ if (!existsSync(refRoot)) continue;
257
+ const stack = [refRoot];
258
+ while (stack.length > 0) {
259
+ const current = stack.pop();
260
+ if (!current) continue;
261
+ for (const entry of readdirSync(current, { withFileTypes: true })) {
262
+ const next = resolve(current, entry.name);
263
+ if (entry.isDirectory()) {
264
+ stack.push(next);
265
+ } else if (entry.isFile() && entry.name.endsWith(".lock")) {
266
+ paths.push(next);
267
+ }
268
+ }
269
+ }
270
+ }
271
+ return [...new Set(paths)];
272
+ }
273
+ function inspectGitLocks(cwd) {
274
+ const commonGitDir = resolveCommonGitDir(cwd);
275
+ const gitDir = resolveGitDir(cwd);
276
+ if (!commonGitDir || !gitDir) return [absentDiagnostic(cwd)];
277
+ const diagnostics = collectLockPaths(commonGitDir, gitDir).filter((lockPath) => existsSync(lockPath)).map((lockPath) => lockDiagnostic(cwd, lockPath));
278
+ return diagnostics.length > 0 ? diagnostics : [absentDiagnostic(cwd)];
279
+ }
280
+ function presentLocks(cwd) {
281
+ return inspectGitLocks(cwd).filter((entry) => entry.exists);
282
+ }
283
+ function primaryDiagnostic(cwd) {
284
+ const diagnostics = inspectGitLocks(cwd);
285
+ const index = diagnostics.find((entry) => entry.kind === "index" && entry.exists);
286
+ const present = diagnostics.find((entry) => entry.exists);
287
+ return index ?? present ?? diagnostics[0] ?? absentDiagnostic(cwd);
288
+ }
289
+ function inspectIndexLock(cwd) {
290
+ const repoRoot = resolveGitRoot(cwd);
291
+ const commonGitDir = resolveCommonGitDir(cwd);
292
+ const gitDir = resolveGitDir(cwd);
293
+ const indexLockPath = gitDir ? resolve(gitDir, "index.lock") : null;
294
+ if (!indexLockPath || !existsSync(indexLockPath)) {
295
+ return absentDiagnostic(cwd);
296
+ }
297
+ return lockDiagnostic(cwd, indexLockPath);
298
+ }
299
+ function waitForIndexLockToClear(cwd) {
300
+ let diagnostic = inspectIndexLock(cwd);
301
+ if (!diagnostic.indexLockExists) {
302
+ return diagnostic;
303
+ }
304
+ for (let attempt = 0; attempt < 40; attempt += 1) {
305
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 125);
306
+ diagnostic = inspectIndexLock(cwd);
307
+ if (!diagnostic.indexLockExists) {
308
+ return diagnostic;
309
+ }
310
+ }
311
+ return diagnostic;
312
+ }
313
+ function inspectTreeseedGitLocks(cwd) {
314
+ return primaryDiagnostic(cwd);
315
+ }
316
+ function inspectTreeseedGitLockSet(cwd) {
317
+ return inspectGitLocks(cwd);
318
+ }
319
+ function workspaceGitRepositories(cwd) {
320
+ const root = resolveGitRoot(cwd);
321
+ const repositories = /* @__PURE__ */ new Set([root]);
322
+ const packagesDir = resolve(root, "packages");
323
+ if (existsSync(packagesDir)) {
324
+ for (const entry of readdirSync(packagesDir, { withFileTypes: true })) {
325
+ if (!entry.isDirectory()) continue;
326
+ const dir = resolve(packagesDir, entry.name);
327
+ if (existsSync(resolve(dir, ".git"))) repositories.add(dir);
328
+ }
329
+ }
330
+ const worktreesDir = resolve(root, ".treeseed", "worktrees");
331
+ if (existsSync(worktreesDir)) {
332
+ for (const entry of readdirSync(worktreesDir, { withFileTypes: true })) {
333
+ if (!entry.isDirectory()) continue;
334
+ const dir = resolve(worktreesDir, entry.name);
335
+ if (existsSync(resolve(dir, ".git"))) repositories.add(dir);
336
+ }
337
+ }
338
+ return [...repositories];
339
+ }
340
+ function inspectTreeseedWorkspaceGitLocks(cwd) {
341
+ const repositories = workspaceGitRepositories(cwd).map((repo) => ({
342
+ repoRoot: resolveGitRoot(repo),
343
+ locks: inspectGitLocks(repo)
344
+ }));
345
+ const allLocks = repositories.flatMap((repo) => repo.locks).filter((entry) => entry.exists);
346
+ return {
347
+ root: repositories[0]?.locks ?? [absentDiagnostic(cwd)],
348
+ repositories,
349
+ summary: {
350
+ repositoriesChecked: repositories.length,
351
+ locksPresent: allLocks.length,
352
+ safeToRepair: allLocks.filter((entry) => entry.safeToRepair).length,
353
+ unsafe: allLocks.filter((entry) => !entry.safeToRepair).length,
354
+ removed: allLocks.filter((entry) => entry.removed).length
355
+ }
356
+ };
357
+ }
358
+ function recoverTreeseedGitLocks(cwd, { execute = false, all = false } = {}) {
359
+ if (all) {
360
+ const repositories = workspaceGitRepositories(cwd).map((repo) => ({
361
+ repoRoot: resolveGitRoot(repo),
362
+ locks: recoverTreeseedGitLocks(repo, { execute, all: false })
363
+ }));
364
+ const allLocks = repositories.flatMap((repo) => repo.locks).filter((entry) => entry.exists);
365
+ return {
366
+ root: repositories[0]?.locks ?? [absentDiagnostic(cwd)],
367
+ repositories,
368
+ summary: {
369
+ repositoriesChecked: repositories.length,
370
+ locksPresent: allLocks.length,
371
+ safeToRepair: allLocks.filter((entry) => entry.safeToRepair).length,
372
+ unsafe: allLocks.filter((entry) => !entry.safeToRepair).length,
373
+ removed: allLocks.filter((entry) => entry.removed).length
374
+ }
375
+ };
376
+ }
377
+ const diagnostics = inspectGitLocks(cwd);
378
+ return diagnostics.map((diagnostic) => {
379
+ if (execute && diagnostic.lockPath && diagnostic.exists && diagnostic.safeToRepair) {
380
+ rmSync(diagnostic.lockPath, { force: true });
381
+ return { ...diagnostic, removed: true };
382
+ }
383
+ return diagnostic;
384
+ });
385
+ }
386
+ function repairSafeLocks(cwd) {
387
+ const diagnostics = inspectGitLocks(cwd);
388
+ const repaired = [];
389
+ for (const diagnostic of diagnostics) {
390
+ if (diagnostic.exists && diagnostic.safeToRepair && diagnostic.lockPath) {
391
+ rmSync(diagnostic.lockPath, { force: true });
392
+ repaired.push({ ...diagnostic, removed: true });
393
+ }
394
+ }
395
+ return repaired;
396
+ }
397
+ function gitLockFailure(output) {
398
+ const text = `${output.stderr}
399
+ ${output.stdout}`;
400
+ return /cannot lock ref|Unable to create .*\.lock|Another git process seems to be running|index\.lock|packed-refs\.lock|HEAD\.lock|File exists/iu.test(text);
401
+ }
402
+ function gitLockErrorMessage(cwd, args, diagnostics, original, retry) {
403
+ const present = diagnostics.filter((entry) => entry.exists);
404
+ const details = present.length > 0 ? present.map((entry) => `${entry.repoRoot}: ${entry.relativeLockPath ?? entry.lockPath} safe=${entry.safeToRepair ? "yes" : "no"} - ${entry.reason}`).join("\n") : "No known Git lock files were present after the failure.";
405
+ return [
406
+ `Git command failed because the repository appears to be locked: git ${args.join(" ")}`,
407
+ `Working directory: ${cwd}`,
408
+ details,
409
+ "Run `npx trsd recover --git-locks --json` for diagnostics.",
410
+ `Original Git error: ${(original.stderr || original.stdout).trim()}`,
411
+ retry ? `Retry Git error: ${(retry.stderr || retry.stdout).trim()}` : null
412
+ ].filter(Boolean).join("\n");
413
+ }
414
+ function runTreeseedGit(args, options) {
415
+ if ((options.mode ?? "read") === "read") {
416
+ return gitSync(args, options);
417
+ }
418
+ const commonGitDir = resolveCommonGitDir(options.cwd);
419
+ const release = acquireMutationLock(commonGitDir);
420
+ try {
421
+ const locks = presentLocks(options.cwd);
422
+ const unsafe = locks.find((entry) => !entry.safeToRepair);
423
+ if (unsafe) {
424
+ throw new TreeseedGitLockError(
425
+ `Git ${unsafe.kind} lock is not safe to remove for ${unsafe.repoRoot}: ${unsafe.reason}. Run npx trsd recover --git-locks --json for diagnostics.`,
426
+ { diagnostics: locks, command: args, cwd: options.cwd }
427
+ );
428
+ }
429
+ repairSafeLocks(options.cwd);
430
+ const first = gitSync(args, { ...options, allowFailure: true });
431
+ if (first.status === 0) return first;
432
+ if (!gitLockFailure(first)) {
433
+ if (options.allowFailure) return first;
434
+ throw new Error(first.stderr.trim() || first.stdout.trim() || `git ${args.join(" ")} failed in ${options.cwd}.`);
435
+ }
436
+ const afterFailure = presentLocks(options.cwd);
437
+ const unsafeAfterFailure = afterFailure.find((entry) => !entry.safeToRepair);
438
+ if (unsafeAfterFailure) {
439
+ throw new TreeseedGitLockError(
440
+ gitLockErrorMessage(options.cwd, args, afterFailure, first),
441
+ { diagnostics: afterFailure, command: args, cwd: options.cwd }
442
+ );
443
+ }
444
+ repairSafeLocks(options.cwd);
445
+ const retry = gitSync(args, { ...options, allowFailure: true });
446
+ if (retry.status === 0) return retry;
447
+ if (options.allowFailure) return retry;
448
+ throw new TreeseedGitLockError(
449
+ gitLockErrorMessage(options.cwd, args, afterFailure, first, retry),
450
+ { diagnostics: afterFailure, command: args, cwd: options.cwd }
451
+ );
452
+ } finally {
453
+ release();
454
+ }
455
+ }
456
+ function runTreeseedGitText(args, options) {
457
+ return runTreeseedGit(args, options).stdout.trim();
458
+ }
459
+ function runTreeseedGitOk(args, options) {
460
+ return runTreeseedGit(args, { ...options, allowFailure: true }).status === 0;
461
+ }
462
+ async function runTreeseedGitBatch(operations, _options = {}) {
463
+ const results = [];
464
+ for (const operation of operations) {
465
+ results.push(runTreeseedGit(operation.args, operation));
466
+ }
467
+ return results;
468
+ }
469
+ export {
470
+ classifyTreeseedGitMode,
471
+ inspectTreeseedGitLockSet,
472
+ inspectTreeseedGitLocks,
473
+ inspectTreeseedWorkspaceGitLocks,
474
+ recoverTreeseedGitLocks,
475
+ runTreeseedGit,
476
+ runTreeseedGitBatch,
477
+ runTreeseedGitOk,
478
+ runTreeseedGitText
479
+ };
@@ -75,6 +75,41 @@ export declare function assertCleanWorktrees(repoDirs: any): any;
75
75
  export declare function branchExists(repoDir: any, branchName: any): boolean;
76
76
  export declare function remoteBranchExists(repoDir: any, branchName: any): boolean;
77
77
  export declare function fetchOrigin(repoDir: any): void;
78
+ export declare function remoteHeadCommit(repoDir: any, branchName: any): string;
79
+ export declare function pushCommitToBranch(repoDir: any, commitSha: any, branchName: any, { forceWithLease }?: {
80
+ forceWithLease?: boolean | undefined;
81
+ }): void;
82
+ export type StageMergeDownResult = {
83
+ repoDir: string;
84
+ featureBranch: string;
85
+ sourceBranch: string;
86
+ beforeHead: string;
87
+ sourceHead: string | null;
88
+ afterHead: string;
89
+ merged: boolean;
90
+ pushed: boolean;
91
+ generatedMetadataReconciliation: Record<string, unknown> | null;
92
+ };
93
+ export type StageExactPromotionResult = {
94
+ repoDir: string;
95
+ targetBranch: string;
96
+ expectedBefore: string | null;
97
+ actualBefore: string | null;
98
+ commitSha: string;
99
+ pushed: boolean;
100
+ verified: boolean;
101
+ };
102
+ export declare function mergeBranchDownIntoFeature(repoDir: string, input: {
103
+ featureBranch: string;
104
+ sourceBranch?: typeof STAGING_BRANCH;
105
+ message: string;
106
+ allowGeneratedMetadataAutoResolution?: boolean;
107
+ }): StageMergeDownResult;
108
+ export declare function promoteCommitToBranchWithExpectedHead(repoDir: string, input: {
109
+ commitSha: string;
110
+ targetBranch?: typeof STAGING_BRANCH;
111
+ expectedBefore: string | null;
112
+ }): StageExactPromotionResult;
78
113
  export declare function ensureLocalBranchTracking(repoDir: any, branchName: any): void;
79
114
  export declare function checkoutBranch(repoDir: any, branchName: any): void;
80
115
  export declare function checkoutTaskBranchFromStaging(cwd: any, branchName: any, { createIfMissing, pushIfCreated }?: {
@@ -102,6 +137,14 @@ export declare function createFeatureBranchFromStaging(cwd: any, branchName: any
102
137
  export declare function pushBranch(repoDir: any, branchName: any, { setUpstream }?: {
103
138
  setUpstream?: boolean | undefined;
104
139
  }): void;
140
+ export declare function taskTagSlug(branchName: any): string;
141
+ export declare function createDeprecatedTaskTag(repoDir: any, branchName: any, reason?: string): {
142
+ repoDir: any;
143
+ branchName: any;
144
+ tagName: string;
145
+ head: string;
146
+ pushed: boolean;
147
+ };
105
148
  export declare function ensureRemoteBranchFromBase(repoDir: any, branchName: any, { baseBranch }?: {
106
149
  baseBranch?: string | undefined;
107
150
  }): {
@@ -158,11 +201,6 @@ export declare function listTaskBranches(repoDir: any): {
158
201
  remote: boolean;
159
202
  current: boolean;
160
203
  }[];
161
- export declare function taskTagSlug(branchName: any): string;
162
- export declare function createDeprecatedTaskTag(repoDir: any, branchName: any, message: any): {
163
- tagName: string;
164
- head: string;
165
- };
166
204
  export declare function waitForStagingAutomation(repoDir: any): {
167
205
  status: string;
168
206
  reason: string;
@@ -179,9 +217,10 @@ export declare function mergeStagingIntoMain(cwd?: any): {
179
217
  commitSha: string;
180
218
  pushed: boolean;
181
219
  };
182
- export declare function mergeBranchIntoTarget(cwd?: any, { sourceBranch, targetBranch, message, pushTarget, quietMerge }?: {
220
+ export declare function mergeBranchIntoTarget(cwd?: any, { sourceBranch, targetBranch, message, pushTarget, quietMerge, allowUnrelatedHistories }?: {
183
221
  pushTarget?: boolean | undefined;
184
222
  quietMerge?: boolean | undefined;
223
+ allowUnrelatedHistories?: boolean | undefined;
185
224
  }): {
186
225
  repoDir: string;
187
226
  targetBranch: any;