@treeseed/sdk 0.11.0 → 0.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/README.md +9 -4
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +117 -60
  27. package/dist/capacity-provider.js +215 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +2 -2
  36. package/dist/copilot.d.ts +3 -0
  37. package/dist/copilot.js +16 -1
  38. package/dist/d1-http.d.ts +1 -1
  39. package/dist/d1-store.d.ts +32 -57
  40. package/dist/d1-store.js +115 -318
  41. package/dist/db/d1.d.ts +1 -232
  42. package/dist/db/index.d.ts +3 -3
  43. package/dist/db/market-schema.d.ts +49037 -11843
  44. package/dist/db/market-schema.js +1788 -50
  45. package/dist/db/node-sqlite.d.ts +1 -232
  46. package/dist/db/schema.d.ts +0 -462
  47. package/dist/db/schema.js +2 -22
  48. package/dist/dispatch.d.ts +1 -1
  49. package/dist/dispatch.js +0 -11
  50. package/dist/fixture-support.js +52 -4
  51. package/dist/governance.d.ts +133 -0
  52. package/dist/governance.js +285 -0
  53. package/dist/graph/build.d.ts +2 -2
  54. package/dist/graph/context-query-contracts.d.ts +1 -1
  55. package/dist/graph/dsl.d.ts +1 -1
  56. package/dist/graph/query.d.ts +4 -4
  57. package/dist/graph/ranking.d.ts +1 -1
  58. package/dist/graph/schema.d.ts +1 -1
  59. package/dist/graph.d.ts +11 -11
  60. package/dist/guarantees/index.d.ts +425 -0
  61. package/dist/guarantees/index.js +1146 -0
  62. package/dist/hosting/apps.d.ts +1 -1
  63. package/dist/hosting/builtins.d.ts +1 -1
  64. package/dist/hosting/builtins.js +9 -198
  65. package/dist/hosting/contracts.d.ts +3 -2
  66. package/dist/hosting/graph.d.ts +24 -21
  67. package/dist/hosting/graph.js +280 -294
  68. package/dist/hosting/index.d.ts +4 -4
  69. package/dist/index.d.ts +88 -74
  70. package/dist/index.js +81 -10
  71. package/dist/local-dev/managed-dev.d.ts +85 -0
  72. package/dist/local-dev/managed-dev.js +368 -0
  73. package/dist/managed-dependencies.d.ts +9 -0
  74. package/dist/managed-dependencies.js +10 -8
  75. package/dist/market-client.d.ts +265 -7
  76. package/dist/market-client.js +381 -9
  77. package/dist/model-registry.d.ts +1 -1
  78. package/dist/model-registry.js +19 -19
  79. package/dist/operations/agent-tools.d.ts +2 -11
  80. package/dist/operations/agent-tools.js +2 -14
  81. package/dist/operations/providers/default.d.ts +1 -1
  82. package/dist/operations/providers/default.js +20 -37
  83. package/dist/operations/repository-operations.d.ts +26 -2
  84. package/dist/operations/repository-operations.js +159 -1
  85. package/dist/operations/runtime.d.ts +3 -3
  86. package/dist/operations/services/bootstrap-runner.d.ts +1 -1
  87. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  88. package/dist/operations/services/build-warning-policy.js +81 -82
  89. package/dist/operations/services/commit-message-provider.js +4 -4
  90. package/dist/operations/services/config-runtime.d.ts +73 -19
  91. package/dist/operations/services/config-runtime.js +276 -100
  92. package/dist/operations/services/deploy.d.ts +41 -622
  93. package/dist/operations/services/deploy.js +181 -213
  94. package/dist/operations/services/deployment-readiness.d.ts +1 -1
  95. package/dist/operations/services/deployment-readiness.js +38 -7
  96. package/dist/operations/services/git-remote-policy.js +12 -4
  97. package/dist/operations/services/git-runner.d.ts +66 -0
  98. package/dist/operations/services/git-runner.js +479 -0
  99. package/dist/operations/services/git-workflow.d.ts +43 -5
  100. package/dist/operations/services/git-workflow.js +242 -20
  101. package/dist/operations/services/github-actions-verification.d.ts +3 -1
  102. package/dist/operations/services/github-actions-verification.js +11 -3
  103. package/dist/operations/services/github-api.js +21 -5
  104. package/dist/operations/services/github-automation.d.ts +3 -3
  105. package/dist/operations/services/github-automation.js +15 -18
  106. package/dist/operations/services/github-credentials.js +2 -1
  107. package/dist/operations/services/hosted-service-checks.d.ts +19 -1
  108. package/dist/operations/services/hosted-service-checks.js +162 -11
  109. package/dist/operations/services/hosting-audit.d.ts +2 -2
  110. package/dist/operations/services/hosting-audit.js +7 -7
  111. package/dist/operations/services/hub-launch.d.ts +1 -1
  112. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  113. package/dist/operations/services/hub-provider-launch.js +19 -14
  114. package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
  115. package/dist/operations/services/live-hosted-service-checks.js +193 -80
  116. package/dist/operations/services/local-dev.js +0 -1
  117. package/dist/operations/services/managed-host-security.d.ts +1 -1
  118. package/dist/operations/services/managed-repositories.d.ts +37 -0
  119. package/dist/operations/services/managed-repositories.js +177 -0
  120. package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
  121. package/dist/operations/services/operations-runner-smoke.js +22 -4
  122. package/dist/operations/services/package-adapters.d.ts +77 -2
  123. package/dist/operations/services/package-adapters.js +627 -56
  124. package/dist/operations/services/package-reference-policy.d.ts +12 -88
  125. package/dist/operations/services/package-reference-policy.js +81 -213
  126. package/dist/operations/services/project-host-operations.d.ts +4 -4
  127. package/dist/operations/services/project-platform.d.ts +19 -193
  128. package/dist/operations/services/project-platform.js +31 -103
  129. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  130. package/dist/operations/services/project-web-monitor.js +97 -2
  131. package/dist/operations/services/railway-api.d.ts +36 -7
  132. package/dist/operations/services/railway-api.js +331 -100
  133. package/dist/operations/services/railway-deploy.d.ts +7 -95
  134. package/dist/operations/services/railway-deploy.js +334 -742
  135. package/dist/operations/services/release-history.js +3 -4
  136. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  137. package/dist/operations/services/release-proof-ledger.js +81 -0
  138. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  139. package/dist/operations/services/release-proof-planner.js +195 -0
  140. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  141. package/dist/operations/services/release-proof-runner.js +169 -0
  142. package/dist/operations/services/release-proof.d.ts +81 -0
  143. package/dist/operations/services/release-proof.js +79 -0
  144. package/dist/operations/services/repository-save-orchestrator.d.ts +6 -7
  145. package/dist/operations/services/repository-save-orchestrator.js +353 -174
  146. package/dist/operations/services/runtime-paths.d.ts +1 -3
  147. package/dist/operations/services/runtime-paths.js +0 -4
  148. package/dist/operations/services/runtime-tools.d.ts +1 -192
  149. package/dist/operations/services/runtime-tools.js +4 -444
  150. package/dist/operations/services/save-deploy-preflight.js +9 -1
  151. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  152. package/dist/operations/services/template-host-bindings.js +3 -2
  153. package/dist/operations/services/template-registry.d.ts +6 -6
  154. package/dist/operations/services/template-registry.js +33 -14
  155. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  156. package/dist/operations/services/workflow-timing.d.ts +25 -0
  157. package/dist/operations/services/workflow-timing.js +79 -0
  158. package/dist/operations/services/workspace-dependency-mode.js +41 -4
  159. package/dist/operations/services/workspace-preflight.js +8 -8
  160. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  161. package/dist/operations/services/workspace-save.d.ts +1 -0
  162. package/dist/operations/services/workspace-save.js +41 -18
  163. package/dist/operations/services/workspace-tools.js +40 -6
  164. package/dist/operations-registry.d.ts +1 -1
  165. package/dist/operations-registry.js +5 -6
  166. package/dist/operations-types.d.ts +1 -1
  167. package/dist/operations.d.ts +17 -11
  168. package/dist/operations.js +57 -3
  169. package/dist/platform/book-export.js +2 -0
  170. package/dist/platform/books-data.d.ts +1 -1
  171. package/dist/platform/config.d.ts +27 -0
  172. package/dist/platform/config.js +100 -0
  173. package/dist/platform/content-runtime-source.d.ts +54 -0
  174. package/dist/platform/content-runtime-source.js +169 -0
  175. package/dist/platform/contracts.d.ts +6 -1
  176. package/dist/platform/deploy-config.d.ts +1 -1
  177. package/dist/platform/deploy-config.js +7 -1
  178. package/dist/platform/deploy-runtime.d.ts +1 -1
  179. package/dist/platform/desired-state.d.ts +63 -0
  180. package/dist/platform/desired-state.js +1021 -0
  181. package/dist/platform/env.yaml +414 -19
  182. package/dist/platform/environment.d.ts +2 -2
  183. package/dist/platform/environment.js +54 -22
  184. package/dist/platform/local-content-materialization.d.ts +9 -0
  185. package/dist/platform/local-content-materialization.js +212 -0
  186. package/dist/platform/plugin.d.ts +5 -5
  187. package/dist/platform/plugins/runtime.d.ts +3 -3
  188. package/dist/platform/plugins/runtime.js +62 -1
  189. package/dist/platform/plugins.d.ts +6 -6
  190. package/dist/platform/published-content-pipeline.d.ts +3 -3
  191. package/dist/platform/published-content-pipeline.js +5 -1
  192. package/dist/platform/published-content.d.ts +4 -3
  193. package/dist/platform/site-config-schema.d.ts +1 -0
  194. package/dist/platform/site-config-schema.js +4 -1
  195. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  196. package/dist/platform/tenant-config.d.ts +1 -1
  197. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  198. package/dist/platform/utils/site-config-schema.js +400 -461
  199. package/dist/platform-operation-store.d.ts +1 -1
  200. package/dist/plugin-default.d.ts +1 -1
  201. package/dist/plugin-default.js +27 -12
  202. package/dist/project-import.d.ts +91 -0
  203. package/dist/project-import.js +257 -0
  204. package/dist/project-workflow.d.ts +1 -1
  205. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  206. package/dist/reconcile/bootstrap-systems.js +3 -3
  207. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  208. package/dist/reconcile/builtin-adapters.js +2924 -346
  209. package/dist/reconcile/contracts.d.ts +15 -2
  210. package/dist/reconcile/desired-state.d.ts +2 -193
  211. package/dist/reconcile/desired-state.js +24 -33
  212. package/dist/reconcile/engine.d.ts +60 -397
  213. package/dist/reconcile/engine.js +182 -18
  214. package/dist/reconcile/index.d.ts +10 -10
  215. package/dist/reconcile/live-acceptance.d.ts +22 -1
  216. package/dist/reconcile/live-acceptance.js +456 -44
  217. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  218. package/dist/reconcile/providers/docker-private.js +101 -0
  219. package/dist/reconcile/providers/github-private.d.ts +65 -0
  220. package/dist/reconcile/providers/github-private.js +119 -0
  221. package/dist/reconcile/providers/local-private.d.ts +28 -0
  222. package/dist/reconcile/providers/local-private.js +75 -0
  223. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  224. package/dist/reconcile/providers/railway-iac.js +275 -0
  225. package/dist/reconcile/providers/release-private.d.ts +92 -0
  226. package/dist/reconcile/providers/release-private.js +152 -0
  227. package/dist/reconcile/registry.d.ts +2 -2
  228. package/dist/reconcile/registry.js +16 -1
  229. package/dist/reconcile/state.d.ts +1 -1
  230. package/dist/reconcile/state.js +3 -40
  231. package/dist/reconcile/units.d.ts +1 -1
  232. package/dist/reconcile/units.js +7 -1
  233. package/dist/remote.d.ts +6 -6
  234. package/dist/scenes/artifacts.d.ts +16 -0
  235. package/dist/scenes/artifacts.js +61 -0
  236. package/dist/scenes/auth.d.ts +2 -0
  237. package/dist/scenes/auth.js +28 -0
  238. package/dist/scenes/base-url.d.ts +12 -0
  239. package/dist/scenes/base-url.js +123 -0
  240. package/dist/scenes/builtin-plugins.d.ts +2 -0
  241. package/dist/scenes/builtin-plugins.js +447 -0
  242. package/dist/scenes/checkpoints.d.ts +14 -0
  243. package/dist/scenes/checkpoints.js +33 -0
  244. package/dist/scenes/device-matrix.d.ts +2 -0
  245. package/dist/scenes/device-matrix.js +97 -0
  246. package/dist/scenes/devices.d.ts +11 -0
  247. package/dist/scenes/devices.js +22 -0
  248. package/dist/scenes/diagnostics.d.ts +5 -0
  249. package/dist/scenes/diagnostics.js +22 -0
  250. package/dist/scenes/diagram-providers.d.ts +2 -0
  251. package/dist/scenes/diagram-providers.js +181 -0
  252. package/dist/scenes/diagram-validation.d.ts +22 -0
  253. package/dist/scenes/diagram-validation.js +74 -0
  254. package/dist/scenes/environment.d.ts +2 -0
  255. package/dist/scenes/environment.js +65 -0
  256. package/dist/scenes/evidence-bundle.d.ts +5 -0
  257. package/dist/scenes/evidence-bundle.js +42 -0
  258. package/dist/scenes/evidence-report.d.ts +10 -0
  259. package/dist/scenes/evidence-report.js +73 -0
  260. package/dist/scenes/evidence.d.ts +16 -0
  261. package/dist/scenes/evidence.js +277 -0
  262. package/dist/scenes/index.d.ts +48 -0
  263. package/dist/scenes/index.js +312 -0
  264. package/dist/scenes/inspect.d.ts +9 -0
  265. package/dist/scenes/inspect.js +64 -0
  266. package/dist/scenes/loader.d.ts +3 -0
  267. package/dist/scenes/loader.js +38 -0
  268. package/dist/scenes/logs.d.ts +2 -0
  269. package/dist/scenes/logs.js +47 -0
  270. package/dist/scenes/operations.d.ts +3 -0
  271. package/dist/scenes/operations.js +128 -0
  272. package/dist/scenes/phase0.d.ts +9 -0
  273. package/dist/scenes/phase0.js +637 -0
  274. package/dist/scenes/planner.d.ts +12 -0
  275. package/dist/scenes/planner.js +166 -0
  276. package/dist/scenes/playwright-adapter.d.ts +2 -0
  277. package/dist/scenes/playwright-adapter.js +63 -0
  278. package/dist/scenes/plugins.d.ts +5 -0
  279. package/dist/scenes/plugins.js +115 -0
  280. package/dist/scenes/progress.d.ts +17 -0
  281. package/dist/scenes/progress.js +24 -0
  282. package/dist/scenes/publish-destinations.d.ts +12 -0
  283. package/dist/scenes/publish-destinations.js +99 -0
  284. package/dist/scenes/publish-plan-report.d.ts +10 -0
  285. package/dist/scenes/publish-plan-report.js +70 -0
  286. package/dist/scenes/publish-plan.d.ts +15 -0
  287. package/dist/scenes/publish-plan.js +248 -0
  288. package/dist/scenes/publish-redaction.d.ts +16 -0
  289. package/dist/scenes/publish-redaction.js +148 -0
  290. package/dist/scenes/publish-release-record.d.ts +13 -0
  291. package/dist/scenes/publish-release-record.js +34 -0
  292. package/dist/scenes/publish-report.d.ts +10 -0
  293. package/dist/scenes/publish-report.js +67 -0
  294. package/dist/scenes/publish.d.ts +16 -0
  295. package/dist/scenes/publish.js +298 -0
  296. package/dist/scenes/registry.d.ts +12 -0
  297. package/dist/scenes/registry.js +65 -0
  298. package/dist/scenes/remotion-adapter.d.ts +3 -0
  299. package/dist/scenes/remotion-adapter.js +94 -0
  300. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  301. package/dist/scenes/remotion-composition-registry.js +12 -0
  302. package/dist/scenes/remotion-compositions.d.ts +15 -0
  303. package/dist/scenes/remotion-compositions.js +464 -0
  304. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  305. package/dist/scenes/remotion-diagrams.js +188 -0
  306. package/dist/scenes/remotion-input.d.ts +13 -0
  307. package/dist/scenes/remotion-input.js +291 -0
  308. package/dist/scenes/remotion-visuals.d.ts +29 -0
  309. package/dist/scenes/remotion-visuals.js +198 -0
  310. package/dist/scenes/render-media-assets.d.ts +9 -0
  311. package/dist/scenes/render-media-assets.js +117 -0
  312. package/dist/scenes/render-report.d.ts +10 -0
  313. package/dist/scenes/render-report.js +27 -0
  314. package/dist/scenes/render.d.ts +2 -0
  315. package/dist/scenes/render.js +218 -0
  316. package/dist/scenes/reporter.d.ts +3 -0
  317. package/dist/scenes/reporter.js +101 -0
  318. package/dist/scenes/resume.d.ts +2 -0
  319. package/dist/scenes/resume.js +79 -0
  320. package/dist/scenes/runner.d.ts +2 -0
  321. package/dist/scenes/runner.js +674 -0
  322. package/dist/scenes/schema.d.ts +6 -0
  323. package/dist/scenes/schema.js +994 -0
  324. package/dist/scenes/seed.d.ts +2 -0
  325. package/dist/scenes/seed.js +83 -0
  326. package/dist/scenes/segments.d.ts +15 -0
  327. package/dist/scenes/segments.js +79 -0
  328. package/dist/scenes/selectors.d.ts +3 -0
  329. package/dist/scenes/selectors.js +21 -0
  330. package/dist/scenes/timeline.d.ts +11 -0
  331. package/dist/scenes/timeline.js +26 -0
  332. package/dist/scenes/timeouts.d.ts +6 -0
  333. package/dist/scenes/timeouts.js +17 -0
  334. package/dist/scenes/training-captions.d.ts +14 -0
  335. package/dist/scenes/training-captions.js +98 -0
  336. package/dist/scenes/training-report.d.ts +10 -0
  337. package/dist/scenes/training-report.js +78 -0
  338. package/dist/scenes/training-transcript.d.ts +24 -0
  339. package/dist/scenes/training-transcript.js +204 -0
  340. package/dist/scenes/training.d.ts +10 -0
  341. package/dist/scenes/training.js +134 -0
  342. package/dist/scenes/types.d.ts +1872 -0
  343. package/dist/scenes/types.js +8 -0
  344. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  345. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  346. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  347. package/dist/scenes/visual-audit-fixtures.js +210 -0
  348. package/dist/scenes/visual-audit-report.d.ts +11 -0
  349. package/dist/scenes/visual-audit-report.js +85 -0
  350. package/dist/scenes/visual-audit-review.d.ts +23 -0
  351. package/dist/scenes/visual-audit-review.js +829 -0
  352. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  353. package/dist/scenes/visual-audit-routes.js +308 -0
  354. package/dist/scenes/visual-audit.d.ts +3 -0
  355. package/dist/scenes/visual-audit.js +596 -0
  356. package/dist/scripts/build-dist.js +154 -40
  357. package/dist/scripts/check-build-warnings.js +42 -53
  358. package/dist/scripts/cleanup-markdown.js +1 -1
  359. package/dist/scripts/cli-test-fixtures.js +24 -28
  360. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  361. package/dist/scripts/package-tools.js +12 -1
  362. package/dist/scripts/prepare.js +3 -7
  363. package/dist/scripts/release-verify.js +2 -5
  364. package/dist/scripts/run-fixture-astro-command.js +1 -1
  365. package/dist/scripts/template-catalog.test.js +68 -82
  366. package/dist/scripts/tenant-dev.js +0 -10
  367. package/dist/scripts/test-cloudflare-local.js +1 -1
  368. package/dist/scripts/test-scaffold.js +0 -1
  369. package/dist/scripts/test-smoke.js +3 -3
  370. package/dist/scripts/treeseed-build-dist.js +4 -7
  371. package/dist/scripts/treeseed-release-verify.js +1 -1
  372. package/dist/scripts/verify-driver.js +30 -21
  373. package/dist/scripts/workflow-commands.test.js +18 -27
  374. package/dist/scripts/workspace-command-e2e.js +1 -1
  375. package/dist/scripts/workspace-lint.js +6 -0
  376. package/dist/scripts/workspace-release-test.js +90 -1
  377. package/dist/scripts/workspace-test.js +6 -0
  378. package/dist/sdk-dispatch.d.ts +1 -1
  379. package/dist/sdk-dispatch.js +0 -16
  380. package/dist/sdk-fields.d.ts +1 -1
  381. package/dist/sdk-filters.d.ts +1 -1
  382. package/dist/sdk-types.d.ts +1184 -113
  383. package/dist/sdk-types.js +393 -0
  384. package/dist/sdk.d.ts +74 -79
  385. package/dist/sdk.js +27 -36
  386. package/dist/secrets-capability.d.ts +421 -0
  387. package/dist/secrets-capability.js +530 -0
  388. package/dist/seeds/normalize.js +1 -0
  389. package/dist/seeds/planner.js +38 -0
  390. package/dist/seeds/schema.js +293 -4
  391. package/dist/seeds/types.d.ts +60 -0
  392. package/dist/seeds/types.js +9 -1
  393. package/dist/service-credentials.d.ts +54 -0
  394. package/dist/service-credentials.js +112 -0
  395. package/dist/stores/cursor-store.d.ts +2 -2
  396. package/dist/stores/envelopes.d.ts +1 -1
  397. package/dist/stores/helpers.d.ts +1 -1
  398. package/dist/stores/lease-store.d.ts +2 -2
  399. package/dist/stores/message-store.d.ts +2 -2
  400. package/dist/stores/operational-store.d.ts +3 -26
  401. package/dist/stores/operational-store.js +0 -225
  402. package/dist/stores/project-workflow-store.d.ts +2 -2
  403. package/dist/stores/run-store.d.ts +2 -3
  404. package/dist/stores/run-store.js +0 -98
  405. package/dist/stores/subscription-store.d.ts +2 -3
  406. package/dist/stores/subscription-store.js +0 -100
  407. package/dist/template-catalog.d.ts +1 -1
  408. package/dist/template-launch-requirements.d.ts +2 -2
  409. package/dist/template-launch-ui.d.ts +2 -2
  410. package/dist/treedx/adapters.d.ts +6 -6
  411. package/dist/treedx/client.d.ts +1 -1
  412. package/dist/treedx/errors.d.ts +1 -1
  413. package/dist/treedx/federated-client.d.ts +3 -3
  414. package/dist/treedx/graph-adapter.d.ts +2 -2
  415. package/dist/treedx/index.d.ts +14 -14
  416. package/dist/treedx/market-integration.d.ts +1 -1
  417. package/dist/treedx/ports.d.ts +30 -30
  418. package/dist/treedx/query-adapter.d.ts +3 -3
  419. package/dist/treedx/registry-client.d.ts +2 -2
  420. package/dist/treedx/repository-adapter.d.ts +4 -4
  421. package/dist/treedx/repository-adapter.js +14 -3
  422. package/dist/treedx/sdk-integration.d.ts +3 -3
  423. package/dist/treedx/types.d.ts +2 -2
  424. package/dist/treedx/workspace-adapter.d.ts +2 -2
  425. package/dist/treedx-backends.d.ts +13 -11
  426. package/dist/treedx-backends.js +52 -50
  427. package/dist/treedx-client.d.ts +3 -0
  428. package/dist/treedx-client.js +10 -1
  429. package/dist/treeseed/services/compose.yml +2 -3
  430. package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
  431. package/dist/types/agents.d.ts +256 -0
  432. package/dist/types/agents.js +42 -1
  433. package/dist/verification.d.ts +1 -0
  434. package/dist/verification.js +143 -14
  435. package/dist/workflow/operations.d.ts +510 -559
  436. package/dist/workflow/operations.js +1891 -1342
  437. package/dist/workflow/policy.js +19 -7
  438. package/dist/workflow/runs.d.ts +9 -3
  439. package/dist/workflow/runs.js +66 -26
  440. package/dist/workflow/session.d.ts +4 -1
  441. package/dist/workflow/session.js +50 -10
  442. package/dist/workflow/worktrees.d.ts +6 -2
  443. package/dist/workflow/worktrees.js +98 -15
  444. package/dist/workflow-state.d.ts +5 -5
  445. package/dist/workflow-state.js +27 -17
  446. package/dist/workflow-support.d.ts +26 -25
  447. package/dist/workflow-support.js +27 -31
  448. package/dist/workflow.d.ts +46 -16
  449. package/dist/workflow.js +19 -7
  450. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  451. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  452. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  453. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  454. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  455. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  456. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  457. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  458. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  459. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  460. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  461. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  462. package/package.json +75 -18
  463. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  464. package/templates/github/deploy-web.workflow.yml +12 -8
  465. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  466. package/dist/operations/services/mailpit-runtime.js +0 -67
  467. package/dist/operations/services/release-candidate.d.ts +0 -60
  468. package/dist/operations/services/release-candidate.js +0 -953
  469. package/dist/scripts/ensure-mailpit.js +0 -48
  470. package/dist/scripts/logs-mailpit.js +0 -2
  471. package/dist/scripts/run-ts.js +0 -45
  472. package/dist/scripts/stop-mailpit.js +0 -5
  473. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -0,0 +1,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;