@bevel-software/platform-core-backend 0.35.0 → 0.37.0

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 (851) hide show
  1. package/agent-guide/directory-structure.md +1 -1
  2. package/agent-guide/onboarding.md +111 -0
  3. package/agent-guide/start-here.md +1 -0
  4. package/agent-guide/tool-manuals.md +1 -0
  5. package/dist/core/catalog-cache-invalidation.d.ts +2 -2
  6. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
  7. package/dist/core/compose-embed.d.ts +2 -2
  8. package/dist/core/compose-embed.d.ts.map +1 -1
  9. package/dist/core/compose-embed.js +1 -1
  10. package/dist/core/compose-embed.js.map +1 -1
  11. package/dist/core/core-ports.d.ts +19 -4
  12. package/dist/core/core-ports.d.ts.map +1 -1
  13. package/dist/core/core-ports.js.map +1 -1
  14. package/dist/core/create-core-server.d.ts.map +1 -1
  15. package/dist/core/create-core-server.js +26 -24
  16. package/dist/core/create-core-server.js.map +1 -1
  17. package/dist/core/create-core-services.d.ts +19 -13
  18. package/dist/core/create-core-services.d.ts.map +1 -1
  19. package/dist/core/create-core-services.js +72 -57
  20. package/dist/core/create-core-services.js.map +1 -1
  21. package/dist/core/lifecycle.d.ts +4 -4
  22. package/dist/core/lifecycle.d.ts.map +1 -1
  23. package/dist/core/lifecycle.js +5 -5
  24. package/dist/core/lifecycle.js.map +1 -1
  25. package/dist/core-config.d.ts +2 -2
  26. package/dist/core-config.js +3 -3
  27. package/dist/core-config.js.map +1 -1
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/modules/access/access-control.service.js +1 -1
  33. package/dist/modules/access/access-control.service.js.map +1 -1
  34. package/dist/modules/access/access-declarations.d.ts +2 -2
  35. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  36. package/dist/modules/access/access-declarations.js +2 -2
  37. package/dist/modules/access/access-declarations.js.map +1 -1
  38. package/dist/modules/access/access-mutation.service.d.ts +2 -2
  39. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  40. package/dist/modules/access/access-mutation.service.js +2 -2
  41. package/dist/modules/access/access-mutation.service.js.map +1 -1
  42. package/dist/modules/access/access-requests.routes.d.ts +2 -2
  43. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  44. package/dist/modules/access/access-requests.routes.js +5 -5
  45. package/dist/modules/access/access-requests.routes.js.map +1 -1
  46. package/dist/modules/access/access-requests.service.d.ts +2 -2
  47. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  48. package/dist/modules/access/access-requests.service.js +11 -11
  49. package/dist/modules/access/access-requests.service.js.map +1 -1
  50. package/dist/modules/access/access.routes.d.ts +2 -2
  51. package/dist/modules/access/access.routes.d.ts.map +1 -1
  52. package/dist/modules/access/access.routes.js +9 -9
  53. package/dist/modules/access/access.routes.js.map +1 -1
  54. package/dist/modules/access/admin-locked-commit.d.ts +5 -5
  55. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  56. package/dist/modules/access/admin-locked-commit.js +7 -7
  57. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  58. package/dist/modules/access/admin-route-helpers.d.ts +1 -1
  59. package/dist/modules/access/admin-route-helpers.js +5 -5
  60. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  61. package/dist/modules/access/change-read-gate.d.ts +1 -1
  62. package/dist/modules/access/change-read-gate.js +1 -1
  63. package/dist/modules/access/groups-admin.service.d.ts +7 -7
  64. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  65. package/dist/modules/access/groups-admin.service.js +6 -6
  66. package/dist/modules/access/groups-admin.service.js.map +1 -1
  67. package/dist/modules/access/reference-scan.d.ts +1 -1
  68. package/dist/modules/access/roles-admin.service.d.ts +7 -7
  69. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  70. package/dist/modules/access/roles-admin.service.js +8 -8
  71. package/dist/modules/access/roles-admin.service.js.map +1 -1
  72. package/dist/modules/access/synced-groups-committer.d.ts +4 -4
  73. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  74. package/dist/modules/access/synced-groups-committer.js +7 -7
  75. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  76. package/dist/modules/access/user-access-removal.service.d.ts +6 -6
  77. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  78. package/dist/modules/access/user-access-removal.service.js +4 -4
  79. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  80. package/dist/modules/access-model/access-errors.d.ts +4 -4
  81. package/dist/modules/access-model/access-errors.d.ts.map +1 -1
  82. package/dist/modules/access-model/access-errors.js +4 -4
  83. package/dist/modules/access-model/access-errors.js.map +1 -1
  84. package/dist/modules/access-model/access-grammar.d.ts +1 -1
  85. package/dist/modules/access-model/access-grammar.js +4 -4
  86. package/dist/modules/access-model/change-gate.d.ts +1 -1
  87. package/dist/modules/access-model/change-gate.js +1 -1
  88. package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
  89. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  90. package/dist/modules/access-model/roles-yaml-guard.js +4 -4
  91. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
  92. package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
  93. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
  94. package/dist/modules/agent-guide/agent-guide.js +42 -18
  95. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  96. package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
  97. package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
  98. package/dist/modules/agent-guide/guide-budget.js +6 -2
  99. package/dist/modules/agent-guide/guide-budget.js.map +1 -1
  100. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
  101. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  102. package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
  103. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  104. package/dist/modules/agent-instructions/compose.d.ts +15 -8
  105. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  106. package/dist/modules/agent-instructions/compose.js +24 -10
  107. package/dist/modules/agent-instructions/compose.js.map +1 -1
  108. package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
  109. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  110. package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
  111. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  112. package/dist/modules/auth/account-erasure.service.d.ts +36 -7
  113. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  114. package/dist/modules/auth/account-erasure.service.js +30 -10
  115. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  116. package/dist/modules/auth/account-hooks.d.ts +20 -0
  117. package/dist/modules/auth/account-hooks.d.ts.map +1 -1
  118. package/dist/modules/auth/account-hooks.js +10 -0
  119. package/dist/modules/auth/account-hooks.js.map +1 -1
  120. package/dist/modules/auth/account-switch-lock.js +2 -2
  121. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  122. package/dist/modules/auth/account.routes.d.ts +7 -2
  123. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  124. package/dist/modules/auth/account.routes.js +23 -4
  125. package/dist/modules/auth/account.routes.js.map +1 -1
  126. package/dist/modules/auth/auth.service.d.ts +1 -1
  127. package/dist/modules/auth/auth.service.js +4 -4
  128. package/dist/modules/auth/auth.service.js.map +1 -1
  129. package/dist/modules/auth/index.d.ts +1 -0
  130. package/dist/modules/auth/index.d.ts.map +1 -1
  131. package/dist/modules/database/connection.d.ts.map +1 -1
  132. package/dist/modules/database/connection.js +11 -0
  133. package/dist/modules/database/connection.js.map +1 -1
  134. package/dist/modules/database/core-schema.js +2 -2
  135. package/dist/modules/database/core-schema.js.map +1 -1
  136. package/dist/modules/diff/diff.routes.d.ts +3 -3
  137. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  138. package/dist/modules/diff/diff.routes.js +7 -7
  139. package/dist/modules/diff/diff.routes.js.map +1 -1
  140. package/dist/modules/embed/embed.routes.js +1 -1
  141. package/dist/modules/embed/embed.routes.js.map +1 -1
  142. package/dist/modules/embed/embed.service.d.ts +4 -4
  143. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  144. package/dist/modules/embed/embed.service.js +18 -18
  145. package/dist/modules/embed/embed.service.js.map +1 -1
  146. package/dist/modules/kb-fs/branch-name.js +8 -8
  147. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  148. package/dist/modules/kb-fs/file-change-notifier.d.ts +51 -26
  149. package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
  150. package/dist/modules/kb-fs/file-change-notifier.js +6 -8
  151. package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
  152. package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -16
  153. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  154. package/dist/modules/kb-fs/locking-filesystem.js +31 -39
  155. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  156. package/dist/modules/kb-fs/repo-path.js +5 -5
  157. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  158. package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
  159. package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
  160. package/dist/modules/kb-fs/tmp-ref.js +2 -2
  161. package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
  162. package/dist/modules/kb-sync/index.d.ts +1 -1
  163. package/dist/modules/kb-sync/index.d.ts.map +1 -1
  164. package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
  165. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  166. package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
  167. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  168. package/dist/modules/kb-sync/kb-sync.service.js +10 -10
  169. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  170. package/dist/modules/mcp/mcp.service.d.ts +11 -4
  171. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  172. package/dist/modules/mcp/mcp.service.js +75 -19
  173. package/dist/modules/mcp/mcp.service.js.map +1 -1
  174. package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
  175. package/dist/modules/onboarding/onboarding.routes.js +2 -2
  176. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  177. package/dist/modules/onboarding/starter-pack.service.d.ts +5 -7
  178. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  179. package/dist/modules/onboarding/starter-pack.service.js +4 -4
  180. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  181. package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
  182. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  183. package/dist/modules/plugins/join-request-jobs.service.js +7 -7
  184. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  185. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  186. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  187. package/dist/modules/plugins/join-requests.service.js +5 -5
  188. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  189. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  190. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  191. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  192. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  193. package/dist/modules/plugins/plugins.routes.js +8 -8
  194. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  195. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
  196. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  197. package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
  198. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  199. package/dist/modules/secrets-vault/index.d.ts +2 -1
  200. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  201. package/dist/modules/secrets-vault/index.js +1 -0
  202. package/dist/modules/secrets-vault/index.js.map +1 -1
  203. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
  204. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
  205. package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
  206. package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
  207. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
  208. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  209. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  210. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
  211. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  212. package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
  213. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  214. package/dist/modules/settings/connection-check.js +1 -1
  215. package/dist/modules/settings/connection-check.js.map +1 -1
  216. package/dist/modules/settings/deployment-settings.service.js +1 -1
  217. package/dist/modules/settings/git-root-folders.js +1 -1
  218. package/dist/modules/settings/git-root-folders.js.map +1 -1
  219. package/dist/modules/settings/setup.routes.d.ts +1 -1
  220. package/dist/modules/settings/setup.routes.js +1 -1
  221. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  222. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  223. package/dist/modules/skills/pending-skills.service.js +4 -4
  224. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  225. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
  226. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  227. package/dist/modules/skills/skill-access-requests.routes.js +5 -5
  228. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  229. package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
  230. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  231. package/dist/modules/tool-helpers/tool-context.js +2 -2
  232. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  233. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  234. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  235. package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
  236. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  237. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  238. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  239. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
  240. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  241. package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
  242. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  243. package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
  244. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  245. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
  246. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  247. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
  248. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  249. package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
  250. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  251. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
  252. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  253. package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
  254. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  255. package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
  256. package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
  257. package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
  258. package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
  259. package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
  260. package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
  261. package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
  262. package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
  263. package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
  264. package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
  265. package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
  266. package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
  267. package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
  268. package/dist/modules/version-control/change-request-hooks.js.map +1 -0
  269. package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
  270. package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
  271. package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
  272. package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
  273. package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
  274. package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
  275. package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
  276. package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
  277. package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
  278. package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
  279. package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
  280. package/dist/modules/version-control/event-bus.d.ts.map +1 -0
  281. package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
  282. package/dist/modules/version-control/event-bus.js.map +1 -0
  283. package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
  284. package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
  285. package/dist/modules/version-control/events-delivery.js.map +1 -0
  286. package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
  287. package/dist/modules/version-control/events.routes.d.ts.map +1 -0
  288. package/dist/modules/version-control/events.routes.js.map +1 -0
  289. package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
  290. package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
  291. package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
  292. package/dist/modules/version-control/file-lock.service.js.map +1 -0
  293. package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
  294. package/dist/modules/version-control/git/change-request-link.js.map +1 -0
  295. package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
  296. package/dist/modules/version-control/git/git-version.js.map +1 -0
  297. package/dist/modules/{workflow → version-control}/git/git.service.d.ts +26 -8
  298. package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
  299. package/dist/modules/{workflow → version-control}/git/git.service.js +106 -55
  300. package/dist/modules/version-control/git/git.service.js.map +1 -0
  301. package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
  302. package/dist/modules/version-control/git/merge-commit.js.map +1 -0
  303. package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
  304. package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
  305. package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
  306. package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
  307. package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
  308. package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
  309. package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
  310. package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
  311. package/dist/modules/version-control/index.d.ts.map +1 -0
  312. package/dist/modules/{workflow → version-control}/index.js +3 -2
  313. package/dist/modules/version-control/index.js.map +1 -0
  314. package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
  315. package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
  316. package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
  317. package/dist/modules/version-control/pending-commits.service.js.map +1 -0
  318. package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
  319. package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
  320. package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
  321. package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
  322. package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
  323. package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
  324. package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
  325. package/dist/modules/version-control/read-on-branch.js.map +1 -0
  326. package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
  327. package/dist/modules/version-control/recovery-bot.js.map +1 -0
  328. package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
  329. package/dist/modules/version-control/sanitize-error.js.map +1 -0
  330. package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +33 -6
  331. package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
  332. package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +20 -3
  333. package/dist/modules/version-control/version-control-hooks.js.map +1 -0
  334. package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
  335. package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
  336. package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
  337. package/dist/modules/version-control/version-control.routes.js.map +1 -0
  338. package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -46
  339. package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
  340. package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +93 -107
  341. package/dist/modules/version-control/version-control.service.js.map +1 -0
  342. package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
  343. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  344. package/dist/modules/workspace/agent-access.gate.js +1 -1
  345. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  346. package/dist/modules/workspace/git-internals.middleware.js +2 -2
  347. package/dist/modules/workspace/kb-repository.js +1 -1
  348. package/dist/modules/workspace/kb-repository.js.map +1 -1
  349. package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
  350. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  351. package/dist/modules/workspace/startup/kb-git.js +1 -1
  352. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  353. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
  354. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  355. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  356. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  357. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
  358. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  359. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  360. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  361. package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
  362. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  363. package/dist/modules/workspace/startup/steps/template-source.js +8 -5
  364. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  365. package/dist/modules/workspace/workspace-tmp.js +3 -3
  366. package/dist/modules/workspace/workspace-tmp.js.map +1 -1
  367. package/dist/modules/workspace/workspace.routes.d.ts +4 -4
  368. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  369. package/dist/modules/workspace/workspace.routes.js +22 -22
  370. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  371. package/dist/modules/workspace/workspace.service.d.ts +6 -6
  372. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  373. package/dist/modules/workspace/workspace.service.js +11 -11
  374. package/dist/modules/workspace/workspace.service.js.map +1 -1
  375. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  376. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  377. package/dist/modules/workspace/workspace.tools.js +15 -10
  378. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  379. package/dist/shared/canonical-file-identity.d.ts +2 -2
  380. package/dist/shared/canonical-file-identity.js +5 -5
  381. package/dist/shared/canonical-file-identity.js.map +1 -1
  382. package/dist/shared/domain-errors.d.ts +39 -39
  383. package/dist/shared/domain-errors.d.ts.map +1 -1
  384. package/dist/shared/domain-errors.js +44 -44
  385. package/dist/shared/domain-errors.js.map +1 -1
  386. package/dist/shared/fire-and-forget.d.ts +14 -0
  387. package/dist/shared/fire-and-forget.d.ts.map +1 -0
  388. package/dist/shared/fire-and-forget.js +23 -0
  389. package/dist/shared/fire-and-forget.js.map +1 -0
  390. package/dist/shared/git.contract.d.ts +1 -1
  391. package/dist/shared/git.contract.js +1 -1
  392. package/dist/shared/http-errors.d.ts +3 -3
  393. package/dist/shared/http-errors.d.ts.map +1 -1
  394. package/dist/shared/http-errors.js +1 -1
  395. package/dist/shared/http-errors.js.map +1 -1
  396. package/dist/shared/pending-proposals.d.ts +3 -3
  397. package/dist/shared/pending-proposals.d.ts.map +1 -1
  398. package/dist/shared/pending-proposals.js +2 -2
  399. package/dist/shared/pending-proposals.js.map +1 -1
  400. package/dist/tenancy/static-tenant-source.js +1 -1
  401. package/dist/tenancy/static-tenant-source.js.map +1 -1
  402. package/migrations/0012_agent_audit.sql +40 -40
  403. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
  404. package/migrations/meta/0012_snapshot.json +2246 -2246
  405. package/migrations/meta/0013_snapshot.json +2258 -2258
  406. package/package.json +4 -4
  407. package/src/__tests__/account-admin.ts +27 -0
  408. package/src/__tests__/capturing-logger.ts +36 -0
  409. package/src/__tests__/hexis-catalog.ts +4 -4
  410. package/src/__tests__/kb-context.ts +30 -30
  411. package/src/__tests__/kb-layout-config.test.ts +21 -0
  412. package/src/__tests__/open-change-gate.ts +1 -1
  413. package/src/__tests__/real-access.ts +16 -0
  414. package/src/__tests__/real-auth.ts +13 -0
  415. package/src/__tests__/real-readers.ts +27 -0
  416. package/src/__tests__/real-version-control.ts +22 -0
  417. package/src/__tests__/tool-handler.ts +15 -0
  418. package/src/__tests__/tool-wiring.ts +10 -4
  419. package/src/__tests__/workspace-service.ts +1 -1
  420. package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
  421. package/src/core/__tests__/commit-announcements-wired-once.test.ts +53 -0
  422. package/src/core/__tests__/compose-embed.test.ts +1 -1
  423. package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
  424. package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
  425. package/src/core/__tests__/gated-boot.test.ts +2 -2
  426. package/src/core/__tests__/lifecycle.test.ts +9 -9
  427. package/src/core/catalog-cache-invalidation.ts +2 -2
  428. package/src/core/compose-embed.ts +3 -3
  429. package/src/core/core-ports.ts +19 -4
  430. package/src/core/create-core-server.ts +39 -25
  431. package/src/core/create-core-services.ts +83 -65
  432. package/src/core/lifecycle.ts +9 -9
  433. package/src/core-config.ts +3 -3
  434. package/src/index.ts +5 -5
  435. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
  436. package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
  437. package/src/modules/access/__tests__/access-requests.routes.test.ts +23 -23
  438. package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
  439. package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
  440. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
  441. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
  442. package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
  443. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
  444. package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
  445. package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
  446. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
  447. package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
  448. package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
  449. package/src/modules/access/__tests__/groups-admin.service.test.ts +44 -44
  450. package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
  451. package/src/modules/access/__tests__/roles-admin.service.test.ts +34 -34
  452. package/src/modules/access/__tests__/roles-capabilities.test.ts +29 -29
  453. package/src/modules/access/__tests__/roles.routes.test.ts +11 -11
  454. package/src/modules/access/__tests__/synced-groups-committer.test.ts +14 -14
  455. package/src/modules/access/__tests__/user-access-removal.service.test.ts +33 -33
  456. package/src/modules/access/access-control.service.ts +1 -1
  457. package/src/modules/access/access-declarations.ts +2 -2
  458. package/src/modules/access/access-mutation.service.ts +2 -2
  459. package/src/modules/access/access-requests.routes.ts +7 -7
  460. package/src/modules/access/access-requests.service.ts +13 -13
  461. package/src/modules/access/access.routes.ts +11 -11
  462. package/src/modules/access/admin-locked-commit.ts +11 -11
  463. package/src/modules/access/admin-route-helpers.ts +5 -5
  464. package/src/modules/access/change-read-gate.ts +1 -1
  465. package/src/modules/access/groups-admin.service.ts +7 -7
  466. package/src/modules/access/reference-scan.ts +1 -1
  467. package/src/modules/access/roles-admin.service.ts +9 -9
  468. package/src/modules/access/synced-groups-committer.ts +11 -11
  469. package/src/modules/access/user-access-removal.service.ts +7 -7
  470. package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
  471. package/src/modules/access-model/access-errors.ts +4 -4
  472. package/src/modules/access-model/access-grammar.ts +4 -4
  473. package/src/modules/access-model/change-gate.ts +1 -1
  474. package/src/modules/access-model/roles-yaml-guard.ts +4 -4
  475. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
  476. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
  477. package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
  478. package/src/modules/agent-guide/agent-guide.ts +48 -22
  479. package/src/modules/agent-guide/guide-budget.ts +6 -2
  480. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
  481. package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
  482. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
  483. package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
  484. package/src/modules/agent-instructions/compose.ts +24 -9
  485. package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
  486. package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
  487. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
  488. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
  489. package/src/modules/audit/event-classifier.ts +155 -155
  490. package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
  491. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
  492. package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
  493. package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
  494. package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
  495. package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
  496. package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
  497. package/src/modules/auth/account-erasure.service.ts +27 -9
  498. package/src/modules/auth/account-hooks.ts +34 -0
  499. package/src/modules/auth/account-switch-lock.ts +2 -2
  500. package/src/modules/auth/account.routes.ts +23 -5
  501. package/src/modules/auth/auth.service.ts +4 -4
  502. package/src/modules/auth/index.ts +1 -0
  503. package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
  504. package/src/modules/database/__tests__/connection.pg.test.ts +55 -0
  505. package/src/modules/database/__tests__/connection.test.ts +30 -0
  506. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
  507. package/src/modules/database/connection.ts +12 -0
  508. package/src/modules/database/core-schema.ts +2 -2
  509. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
  510. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
  511. package/src/modules/diff/diff.routes.ts +8 -8
  512. package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
  513. package/src/modules/embed/__tests__/embed.service.test.ts +48 -62
  514. package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
  515. package/src/modules/embed/embed.routes.ts +1 -1
  516. package/src/modules/embed/embed.service.ts +17 -17
  517. package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
  518. package/src/modules/kb-fs/__tests__/file-change-notifier.test.ts +23 -4
  519. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +264 -305
  520. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +103 -40
  521. package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
  522. package/src/modules/kb-fs/branch-name.ts +8 -8
  523. package/src/modules/kb-fs/file-change-notifier.ts +55 -32
  524. package/src/modules/kb-fs/locking-filesystem.ts +34 -48
  525. package/src/modules/kb-fs/repo-path.ts +5 -5
  526. package/src/modules/kb-fs/tmp-ref.ts +3 -3
  527. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
  528. package/src/modules/kb-sync/index.ts +1 -1
  529. package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
  530. package/src/modules/kb-sync/kb-sync.service.ts +9 -9
  531. package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
  532. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
  533. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
  534. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
  535. package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
  536. package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
  537. package/src/modules/mcp/mcp.service.ts +89 -28
  538. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +59 -59
  539. package/src/modules/onboarding/onboarding.contract.ts +1 -1
  540. package/src/modules/onboarding/onboarding.routes.ts +2 -2
  541. package/src/modules/onboarding/starter-pack.service.ts +7 -9
  542. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
  543. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
  544. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
  545. package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
  546. package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
  547. package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +46 -21
  548. package/src/modules/plugins/__tests__/plugins.routes.test.ts +31 -31
  549. package/src/modules/plugins/join-request-jobs.service.ts +10 -10
  550. package/src/modules/plugins/join-requests.service.ts +4 -4
  551. package/src/modules/plugins/plugin-rename.service.ts +1 -1
  552. package/src/modules/plugins/plugins.routes.ts +9 -9
  553. package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
  554. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
  555. package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
  556. package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
  557. package/src/modules/secrets-vault/index.ts +7 -0
  558. package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
  559. package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
  560. package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
  561. package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
  562. package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
  563. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
  564. package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
  565. package/src/modules/settings/connection-check.ts +1 -1
  566. package/src/modules/settings/deployment-settings.service.ts +1 -1
  567. package/src/modules/settings/git-root-folders.ts +1 -1
  568. package/src/modules/settings/setup.routes.ts +1 -1
  569. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
  570. package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
  571. package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
  572. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
  573. package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
  574. package/src/modules/skills/pending-skills.service.ts +3 -3
  575. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  576. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
  577. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
  578. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
  579. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
  580. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
  581. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
  582. package/src/modules/tool-helpers/tool-context.ts +6 -6
  583. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  584. package/src/modules/tool-helpers/tool.contract.ts +4 -4
  585. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
  586. package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
  587. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
  588. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
  589. package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
  590. package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
  591. package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
  592. package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
  593. package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
  594. package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
  595. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
  596. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
  597. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
  598. package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
  599. package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
  600. package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
  601. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
  602. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
  603. package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
  604. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
  605. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
  606. package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
  607. package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
  608. package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
  609. package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
  610. package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
  611. package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
  612. package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
  613. package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
  614. package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
  615. package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
  616. package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
  617. package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
  618. package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +100 -102
  619. package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
  620. package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
  621. package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
  622. package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +85 -75
  623. package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
  624. package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
  625. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
  626. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
  627. package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
  628. package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
  629. package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
  630. package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
  631. package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
  632. package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
  633. package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
  634. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
  635. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
  636. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
  637. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
  638. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
  639. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
  640. package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
  641. package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
  642. package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
  643. package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
  644. package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
  645. package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
  646. package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
  647. package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
  648. package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
  649. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
  650. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
  651. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
  652. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
  653. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
  654. package/src/modules/version-control/git/__tests__/git.service.commitLanded.test.ts +199 -0
  655. package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
  656. package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
  657. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
  658. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
  659. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
  660. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
  661. package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
  662. package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
  663. package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
  664. package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
  665. package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
  666. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +99 -22
  667. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
  668. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
  669. package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
  670. package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
  671. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
  672. package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
  673. package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
  674. package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
  675. package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
  676. package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
  677. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
  678. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
  679. package/src/modules/{workflow → version-control}/git/git.service.ts +112 -59
  680. package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
  681. package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
  682. package/src/modules/{workflow → version-control}/index.ts +6 -5
  683. package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
  684. package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
  685. package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
  686. package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +44 -5
  687. package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
  688. package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +96 -109
  689. package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
  690. package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
  691. package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
  692. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
  693. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
  694. package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
  695. package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
  696. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
  697. package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
  698. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
  699. package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
  700. package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
  701. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
  702. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
  703. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
  704. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
  705. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
  706. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
  707. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
  708. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
  709. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
  710. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
  711. package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
  712. package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
  713. package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
  714. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
  715. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
  716. package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
  717. package/src/modules/workspace/agent-access.gate.ts +5 -5
  718. package/src/modules/workspace/git-internals.middleware.ts +2 -2
  719. package/src/modules/workspace/kb-repository.ts +1 -1
  720. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
  721. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
  722. package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
  723. package/src/modules/workspace/startup/kb-git.ts +1 -1
  724. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
  725. package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
  726. package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
  727. package/src/modules/workspace/startup/steps/template-source.ts +21 -6
  728. package/src/modules/workspace/workspace-tmp.ts +4 -4
  729. package/src/modules/workspace/workspace.routes.ts +26 -26
  730. package/src/modules/workspace/workspace.service.ts +11 -11
  731. package/src/modules/workspace/workspace.tools.ts +17 -10
  732. package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
  733. package/src/shared/__tests__/fire-and-forget.test.ts +39 -0
  734. package/src/shared/__tests__/http-errors.test.ts +4 -4
  735. package/src/shared/canonical-file-identity.ts +5 -5
  736. package/src/shared/domain-errors.ts +44 -44
  737. package/src/shared/fire-and-forget.ts +26 -0
  738. package/src/shared/git.contract.ts +1 -1
  739. package/src/shared/http-errors.ts +3 -3
  740. package/src/shared/kb-context.ts +130 -130
  741. package/src/shared/pending-proposals.ts +4 -4
  742. package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
  743. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
  744. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
  745. package/src/tenancy/index.ts +35 -35
  746. package/src/tenancy/static-tenant-source.ts +1 -1
  747. package/src/tenancy/tenant-host.ts +261 -261
  748. package/src/tenancy/tenant-runtime.ts +208 -208
  749. package/src/tenancy/tenant-source.contract.ts +59 -59
  750. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
  751. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
  752. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
  753. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
  754. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
  755. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
  756. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
  757. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
  758. package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
  759. package/dist/modules/workflow/change-request-hooks.js.map +0 -1
  760. package/dist/modules/workflow/event-bus.d.ts.map +0 -1
  761. package/dist/modules/workflow/event-bus.js.map +0 -1
  762. package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
  763. package/dist/modules/workflow/events-delivery.js.map +0 -1
  764. package/dist/modules/workflow/events.routes.d.ts.map +0 -1
  765. package/dist/modules/workflow/events.routes.js.map +0 -1
  766. package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
  767. package/dist/modules/workflow/file-lock.service.js.map +0 -1
  768. package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
  769. package/dist/modules/workflow/git/change-request-link.js.map +0 -1
  770. package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
  771. package/dist/modules/workflow/git/git-version.js.map +0 -1
  772. package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
  773. package/dist/modules/workflow/git/git.service.js.map +0 -1
  774. package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
  775. package/dist/modules/workflow/git/merge-commit.js.map +0 -1
  776. package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
  777. package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
  778. package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
  779. package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
  780. package/dist/modules/workflow/index.d.ts.map +0 -1
  781. package/dist/modules/workflow/index.js.map +0 -1
  782. package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
  783. package/dist/modules/workflow/pending-commits.service.js.map +0 -1
  784. package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
  785. package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
  786. package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
  787. package/dist/modules/workflow/read-on-branch.js.map +0 -1
  788. package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
  789. package/dist/modules/workflow/recovery-bot.js.map +0 -1
  790. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
  791. package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
  792. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
  793. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
  794. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
  795. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
  796. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
  797. package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
  798. package/dist/modules/workflow/sanitize-error.js.map +0 -1
  799. package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
  800. package/dist/modules/workflow/workflow-hooks.js.map +0 -1
  801. package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
  802. package/dist/modules/workflow/workflow.routes.js.map +0 -1
  803. package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
  804. package/dist/modules/workflow/workflow.service.js.map +0 -1
  805. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
  806. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
  807. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
  808. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
  809. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
  810. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
  811. /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
  812. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
  813. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
  814. /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
  815. /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
  816. /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
  817. /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
  818. /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
  819. /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
  820. /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
  821. /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
  822. /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
  823. /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
  824. /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
  825. /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
  826. /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
  827. /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
  828. /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
  829. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
  830. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
  831. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
  832. /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
  833. /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
  834. /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
  835. /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
  836. /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
  837. /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
  838. /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
  839. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
  840. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
  841. /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
  842. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
  843. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
  844. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
  845. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
  846. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
  847. /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
  848. /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
  849. /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
  850. /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
  851. /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
@@ -1,20 +1,15 @@
1
1
  /**
2
- * Workflow facade — the only thing app callers (routes, agent tools, tests)
2
+ * Version-control facade — the only thing app callers (routes, agent tools, tests)
3
3
  * should reach for. Today it delegates to the existing git / PR /
4
- * review-workflow services; over PLAN steps 2–5 the implementations migrate
4
+ * change-request-review services; over PLAN steps 2–5 the implementations migrate
5
5
  * here directly and the underlying services either disappear or move
6
6
  * underneath this module.
7
7
  *
8
8
  * The facade does no caching, no validation, no policy of its own — it
9
9
  * exists to:
10
- * 1. Lock in the workflow vocabulary on the consumer side.
11
- * 2. Concentrate every call into git/PR/review-workflow into one place
10
+ * 1. Lock in the version-control vocabulary on the consumer side.
11
+ * 2. Concentrate every call into git/PR/change-request-review into one place
12
12
  * so the agent prompt can stop knowing about `git` / `gh`.
13
- *
14
- * Methods backed by services that don't exist yet (locks, openChangeRequest,
15
- * updateFromTarget) throw `NotImplementedWorkflowError`. The interface
16
- * defines them so frontend / agent code can wire to the final surface while
17
- * those backings land.
18
13
  */
19
14
  import path from 'node:path';
20
15
  import { execFile } from 'node:child_process';
@@ -38,11 +33,11 @@ import { redactSecret } from '../../shared/redact-secret.js';
38
33
  import { workspaceIdForBranch, branchForWorkspaceId } from '../../shared/workspace-id.js';
39
34
  import { canonicalFileIdentity } from '../../shared/canonical-file-identity.js';
40
35
  import { describeSyncFailure, sanitizeError } from './sanitize-error.js';
41
- import { WorkflowHooks } from './workflow-hooks.js';
36
+ import { VersionControlHooks } from './version-control-hooks.js';
42
37
  import { ChangeRequestHooks, } from './change-request-hooks.js';
43
38
  import { WorkspaceMutex, assertValidBranchName } from '../kb-fs/index.js';
44
39
  import { canonicalEmail, hashEmail } from '../../shared/email-identity.js';
45
- import { BranchAuthorshipError, BranchDeleteBlockedError, BranchNotFoundError, ChangeRequestConflictsError, DuplicateChangeRequestError, OpenChangeRequestBlocksMergeError, ProtectedBranchError, RolesYamlPreservationError, PullRebaseConflictError, PushNeedsAgentResolutionError, RemoteBranchGoneError, WorkflowDomainError, WorkflowValidationError, } from '../../shared/domain-errors.js';
40
+ import { BranchAuthorshipError, BranchDeleteBlockedError, BranchNotFoundError, ChangeRequestConflictsError, DuplicateChangeRequestError, OpenChangeRequestBlocksMergeError, ProtectedBranchError, RolesYamlPreservationError, PullRebaseConflictError, PushNeedsAgentResolutionError, RemoteBranchGoneError, VersionControlDomainError, VersionControlValidationError, } from '../../shared/domain-errors.js';
46
41
  import { RECOVERY_BOT_EMAIL, RECOVERY_BOT_NAME } from './recovery-bot.js';
47
42
  import { AccessDeniedError, EVERYONE_CANONICAL } from '../access-model/index.js';
48
43
  import { printable } from '../../shared/printable.js';
@@ -117,15 +112,15 @@ function redactTokens(msg, token) {
117
112
  */
118
113
  function assertDescriptionFits(description) {
119
114
  if (description !== undefined && description.length > CHANGE_REQUEST_DESCRIPTION_MAX) {
120
- throw new WorkflowValidationError(`A change request's description is at most ${CHANGE_REQUEST_DESCRIPTION_MAX} characters; this one would have ${description.length}.`);
115
+ throw new VersionControlValidationError(`A change request's description is at most ${CHANGE_REQUEST_DESCRIPTION_MAX} characters; this one would have ${description.length}.`);
121
116
  }
122
117
  }
123
118
  function assertEditable(state) {
124
119
  if (state === 'merged') {
125
- throw new WorkflowDomainError('This change request has already been applied; its title and description can no longer be changed.', 409);
120
+ throw new VersionControlDomainError('This change request has already been applied; its title and description can no longer be changed.', 409);
126
121
  }
127
122
  if (state !== 'open') {
128
- throw new WorkflowDomainError('This change request is closed; its title and description can no longer be changed.', 409);
123
+ throw new VersionControlDomainError('This change request is closed; its title and description can no longer be changed.', 409);
129
124
  }
130
125
  }
131
126
  /** Git commit subjects are capped at 200 characters (`GitService.commitFile`). */
@@ -148,11 +143,11 @@ const basenameOf = (repoRelPath) => repoRelPath.split('/').pop() ?? repoRelPath;
148
143
  function folderPrefix(folder) {
149
144
  return `${folder.replace(/\/+$/, '')}/`;
150
145
  }
151
- export class WorkflowService {
146
+ export class VersionControlService {
152
147
  db;
153
148
  git;
154
149
  prs;
155
- reviewWorkflow;
150
+ changeRequestReview;
156
151
  workspaceService;
157
152
  accessControl;
158
153
  fileLocks;
@@ -160,16 +155,15 @@ export class WorkflowService {
160
155
  kb;
161
156
  changeGate;
162
157
  events;
163
- fileChanges;
164
158
  hooks;
165
159
  changeRequestHooks;
166
160
  accounts;
167
161
  /**
168
162
  * Concrete `PullRequestService` (not the interface) so the facade can call
169
163
  * `invalidateDetailCache` after a mutation lands — the legacy routes do
170
- * this inline, and the workflow facade absorbs that responsibility so its
164
+ * this inline, and the version-control facade absorbs that responsibility so its
171
165
  * own routes stay free of cache plumbing. Replaceable later when the PR
172
- * detail cache moves into the workflow module proper (PLAN step 5).
166
+ * detail cache moves into the version-control module proper (PLAN step 5).
173
167
  *
174
168
  * `db` + `workspaceService` + `kbDirName` back `openChangeRequest`, which
175
169
  * inserts a change_requests row and runs the local auto-merge — no provider
@@ -177,16 +171,16 @@ export class WorkflowService {
177
171
  */
178
172
  /**
179
173
  * Concrete `GitService` (not the interface) so the facade can reach
180
- * `mergeFromOrigin` — the local auto-merge primitive the workflow needs
174
+ * `mergeFromOrigin` — the local auto-merge primitive the version-control service needs
181
175
  * for `openChangeRequest` + `updateFromTarget` (PLAN §1). The interface
182
176
  * intentionally doesn't surface that method because it's an internal
183
- * implementation detail of the workflow auto-merge story; nothing outside
177
+ * implementation detail of the version-control auto-merge story; nothing outside
184
178
  * the facade should call it directly.
185
179
  */
186
180
  get kbDirName() {
187
181
  return this.kb.kbDirName;
188
182
  }
189
- constructor(db, git, prs, reviewWorkflow, workspaceService, accessControl, fileLocks,
183
+ constructor(db, git, prs, changeRequestReview, workspaceService, accessControl, fileLocks,
190
184
  /**
191
185
  * Background commit queue. `releaseLock` enqueues a row instead of
192
186
  * committing inline; the `PendingCommitsWorker` drains the queue and
@@ -210,22 +204,15 @@ export class WorkflowService {
210
204
  */
211
205
  events,
212
206
  /**
213
- * In-process post-commit hook (distinct from the SSE `events` bus): fires
214
- * after a file's change is committed + pushed so backend services (catalog
215
- * invalidation, id-repair) react without the per-file TTL wait. Optional,
216
- * like `events`.
217
- */
218
- fileChanges,
219
- /**
220
- * Workflow lifecycle-hook registry (see `workflow-hooks.ts`). PUBLIC so
207
+ * Version-control lifecycle-hook registry (see `version-control-hooks.ts`). PUBLIC so
221
208
  * the composition root registers module-owned behavior against it
222
- * (`core.workflowService.hooks.onCommitValidation(…)` /
209
+ * (`core.versionControlService.hooks.onCommitValidation(…)` /
223
210
  * `.onPreWrite(…)`) after `createCoreServices` returns. The composition
224
211
  * root passes the SAME instance `GitService` and the agent-access gate
225
212
  * consult; the default keeps test constructions (which don't exercise
226
213
  * hooks) unchanged.
227
214
  */
228
- hooks = new WorkflowHooks(),
215
+ hooks = new VersionControlHooks(),
229
216
  /**
230
217
  * The seam a deployment's notification extends when a request is opened
231
218
  * (see `change-request-hooks.ts`). The composition root passes the SAME
@@ -242,7 +229,7 @@ export class WorkflowService {
242
229
  this.db = db;
243
230
  this.git = git;
244
231
  this.prs = prs;
245
- this.reviewWorkflow = reviewWorkflow;
232
+ this.changeRequestReview = changeRequestReview;
246
233
  this.workspaceService = workspaceService;
247
234
  this.accessControl = accessControl;
248
235
  this.fileLocks = fileLocks;
@@ -250,14 +237,13 @@ export class WorkflowService {
250
237
  this.kb = kb;
251
238
  this.changeGate = changeGate;
252
239
  this.events = events;
253
- this.fileChanges = fileChanges;
254
240
  this.hooks = hooks;
255
241
  this.changeRequestHooks = changeRequestHooks;
256
242
  this.accounts = accounts;
257
243
  // The type already requires it; this holds for a caller the compiler did
258
244
  // not see (plain JavaScript, a positional slip in a harness).
259
245
  if (!changeGate || typeof changeGate.assertMayChange !== 'function') {
260
- throw new Error('WorkflowService requires a read-before-write gate (IChangeReadGate)');
246
+ throw new Error('VersionControlService requires a read-before-write gate (IChangeReadGate)');
261
247
  }
262
248
  }
263
249
  // ── Branches ──────────────────────────────────────────────────────────────
@@ -401,7 +387,7 @@ export class WorkflowService {
401
387
  // this branch is the deleter's own to withdraw; a request INTO it
402
388
  // belongs to someone else, and telling the branch owner to
403
389
  // "withdraw" it points them at a verb they cannot use.
404
- throw new WorkflowValidationError(open.end === 'source'
390
+ throw new VersionControlValidationError(open.end === 'source'
405
391
  ? `Branch "${name}" has an open change request (#${open.number}). ` +
406
392
  `Withdraw or decline it before deleting the branch.`
407
393
  : `Open change request #${open.number} proposes changes into "${name}". ` +
@@ -747,7 +733,7 @@ export class WorkflowService {
747
733
  // longer exposes a "checkout this branch on the source workspace's clone"
748
734
  // operation, which was the only place the legacy DirtyWorkingTreeError
749
735
  // could surface as a user-facing 409.
750
- // `forkCurrentToDraft` removed (see IWorkflowService): per-branch workspaces
736
+ // `forkCurrentToDraft` removed (see IVersionControlService): per-branch workspaces
751
737
  // make the dirty-tree-carry-along escape hatch impossible by construction.
752
738
  branchStatus(workspaceId) {
753
739
  return this.git.status(workspaceId);
@@ -950,7 +936,7 @@ export class WorkflowService {
950
936
  // this sync's — never a save that landed alongside. Capped: a bulk
951
937
  // import would otherwise fan hundreds of events out to say what one
952
938
  // refresh says.
953
- if (announce.changedPaths.length <= WorkflowService.SYNC_FILE_EVENT_CAP) {
939
+ if (announce.changedPaths.length <= VersionControlService.SYNC_FILE_EVENT_CAP) {
954
940
  for (const p of announce.changedPaths) {
955
941
  this.events?.emit({
956
942
  kind: 'file-changed',
@@ -1261,7 +1247,7 @@ export class WorkflowService {
1261
1247
  const targetPath = canonicalFileIdentity(rawPath);
1262
1248
  const lock = await this.fileLocks.get(workspaceId, branch, targetPath);
1263
1249
  if (!lock || lock.holderUserId !== user.id) {
1264
- throw new WorkflowValidationError(`Cannot commit "${targetPath}": you don't hold the lock.`, { kind: 'lock-not-held', branch, path: targetPath });
1250
+ throw new VersionControlValidationError(`Cannot commit "${targetPath}": you don't hold the lock.`, { kind: 'lock-not-held', branch, path: targetPath });
1265
1251
  }
1266
1252
  // A coordination hold is NOT write possession (see `acquireLock`): it was
1267
1253
  // acquired past the write-authorization gate on the promise that nothing
@@ -1269,7 +1255,7 @@ export class WorkflowService {
1269
1255
  // holder checkpoint bytes onto a path — machine-owned files included —
1270
1256
  // whose write rule they never passed.
1271
1257
  if (lock.mode === 'coordination') {
1272
- throw new WorkflowValidationError(`Cannot commit "${targetPath}": the lock is a coordination hold, which grants no write authority.`, { kind: 'coordination-hold', branch, path: targetPath });
1258
+ throw new VersionControlValidationError(`Cannot commit "${targetPath}": the lock is a coordination hold, which grants no write authority.`, { kind: 'coordination-hold', branch, path: targetPath });
1273
1259
  }
1274
1260
  const change = await this.git.commitFile(workspaceId, user, targetPath, summary);
1275
1261
  // Push the autosave commit so other users on the branch see it
@@ -1380,7 +1366,7 @@ export class WorkflowService {
1380
1366
  const lock = await this.fileLocks.get(workspaceId, branch, targetPath);
1381
1367
  if (!lock || lock.holderUserId !== user.id) {
1382
1368
  lockLog.warn(`RELEASE refused ws=${workspaceId} branch=${branch} path=${targetPath} user=${user.id} → ${lock ? `held by ${lock.holderUserId}` : 'no lock row'}`);
1383
- throw new WorkflowValidationError(`Cannot release lock on "${targetPath}": not held by you (or no longer exists).`, { kind: 'lock-not-held', branch, path: targetPath });
1369
+ throw new VersionControlValidationError(`Cannot release lock on "${targetPath}": not held by you (or no longer exists).`, { kind: 'lock-not-held', branch, path: targetPath });
1384
1370
  }
1385
1371
  // Releasing a coordination hold must NEVER enqueue a commit: the hold was
1386
1372
  // granted past the write-authorization gate (see `acquireLock`) on the
@@ -1393,7 +1379,7 @@ export class WorkflowService {
1393
1379
  // row until its TTL.
1394
1380
  if (lock.mode === 'coordination') {
1395
1381
  lockLog.warn(`RELEASE refused ws=${workspaceId} branch=${branch} path=${targetPath} user=${user.id} → coordination hold (no commit may be enqueued)`);
1396
- throw new WorkflowValidationError(`Cannot release lock on "${targetPath}" with a commit: it is a coordination hold. Use releaseLockNoCommit.`, { kind: 'coordination-hold', branch, path: targetPath });
1382
+ throw new VersionControlValidationError(`Cannot release lock on "${targetPath}" with a commit: it is a coordination hold. Use releaseLockNoCommit.`, { kind: 'coordination-hold', branch, path: targetPath });
1397
1383
  }
1398
1384
  // Order matters here:
1399
1385
  // 1. Drop the lock row. Other sessions can re-acquire immediately.
@@ -1457,11 +1443,14 @@ export class WorkflowService {
1457
1443
  // which is exactly how a diverged workspace ends up stuck forever.
1458
1444
  // So: if the branch is ahead of its remote-tracking ref, push (with
1459
1445
  // the same cooperative recovery, so a conflicting divergence throws
1460
- // and the worker's ladder takes over). Nothing to emit either way —
1446
+ // and the worker's ladder takes over). No `file-changed` either way —
1461
1447
  // there's no new sha.
1462
1448
  if (await this.git.hasUnpushedCommits(workspaceId)) {
1463
1449
  await this.pushWithRecovery(workspaceId, branch, targetPath, user, opts);
1464
1450
  }
1451
+ // Nothing landed here, so nothing is announced: the git layer reports
1452
+ // each commit as it lands (an autosave checkpoint, a batch whose push
1453
+ // retry this row is), and this row made none.
1465
1454
  return;
1466
1455
  }
1467
1456
  await this.pushWithRecovery(workspaceId, branch, targetPath, user, opts);
@@ -1474,9 +1463,6 @@ export class WorkflowService {
1474
1463
  byUserId: user.id,
1475
1464
  byUserName: user.name,
1476
1465
  });
1477
- // Post-commit, post-lock-release: the one chokepoint every single-file write
1478
- // converges on. Backend reactors (catalog invalidation, id-repair) hook here.
1479
- this.fileChanges?.emit({ workspaceId, branch, paths: [targetPath], byUser: user });
1480
1466
  }
1481
1467
  /**
1482
1468
  * Workspaces whose last push failed. Purely so the recovery event fires on
@@ -1563,7 +1549,7 @@ export class WorkflowService {
1563
1549
  * still fails." The full rationale lives at the call site in
1564
1550
  * `releaseLock`; this method is the de-duplicated body.
1565
1551
  *
1566
- * EVERY workflow push goes through here — saves, sharing a branch, opening
1552
+ * EVERY version-control push goes through here — saves, sharing a branch, opening
1567
1553
  * a request, update-from-target, the decline revert, the roles.yaml
1568
1554
  * restore — so a push the host refuses answers one way everywhere: the
1569
1555
  * commit stays local, the sync banner goes up, and the caller gets the
@@ -1683,7 +1669,7 @@ export class WorkflowService {
1683
1669
  //
1684
1670
  // One refinement for COORDINATION holds: the holder never legitimately
1685
1671
  // wrote the path (the write paths refuse coordination possession), so
1686
- // anything dirty there is either bytes smuggled in around the workflow —
1672
+ // anything dirty there is either bytes smuggled in around version control —
1687
1673
  // which the discard rightly wipes — or a PRIOR save's work whose commit
1688
1674
  // is still queued. Only the queue can tell those apart: when a live
1689
1675
  // pending-commit row exists for the path, the dirty bytes are that
@@ -1850,17 +1836,17 @@ export class WorkflowService {
1850
1836
  */
1851
1837
  async openChangeRequest(workspaceId, user, input) {
1852
1838
  if (!input.sourceBranch)
1853
- throw new WorkflowValidationError('sourceBranch is required');
1839
+ throw new VersionControlValidationError('sourceBranch is required');
1854
1840
  if (!input.targetBranch)
1855
- throw new WorkflowValidationError('targetBranch is required');
1841
+ throw new VersionControlValidationError('targetBranch is required');
1856
1842
  if (input.sourceBranch === input.targetBranch) {
1857
- throw new WorkflowValidationError('source and target branches must differ');
1843
+ throw new VersionControlValidationError('source and target branches must differ');
1858
1844
  }
1859
1845
  if (!input.title?.trim())
1860
- throw new WorkflowValidationError('title is required');
1846
+ throw new VersionControlValidationError('title is required');
1861
1847
  assertDescriptionFits(input.description?.trim());
1862
1848
  if (this.kb.isProtectedBranch(input.sourceBranch)) {
1863
- throw new WorkflowValidationError(`Cannot open a change request *from* a protected branch ("${input.sourceBranch}").`, { kind: 'source-is-protected', sourceBranch: input.sourceBranch });
1849
+ throw new VersionControlValidationError(`Cannot open a change request *from* a protected branch ("${input.sourceBranch}").`, { kind: 'source-is-protected', sourceBranch: input.sourceBranch });
1864
1850
  }
1865
1851
  // The whole open sequence — uniqueness check through row insert — runs
1866
1852
  // under the lifecycle lock of BOTH branches. `retireMergedSourceBranch`
@@ -1890,7 +1876,7 @@ export class WorkflowService {
1890
1876
  }
1891
1877
  // Auto-merge target → source. `mergeFromOrigin` enforces "current
1892
1878
  // branch == source" and "clean working tree" before attempting; both
1893
- // failures surface as structured workflow errors that pass straight
1879
+ // failures surface as structured version-control errors that pass straight
1894
1880
  // through to the caller.
1895
1881
  const mergeOutcome = await this.git.mergeFromOrigin(workspaceId, input.sourceBranch, input.targetBranch, user);
1896
1882
  if (mergeOutcome.kind === 'conflicts') {
@@ -1959,7 +1945,7 @@ export class WorkflowService {
1959
1945
  // rival was merged/closed in the microsecond between the conflict and
1960
1946
  // this re-query), don't fabricate a #0 — report it as a transient race.
1961
1947
  if (!existing) {
1962
- throw new WorkflowValidationError(`Change request for "${input.sourceBranch}" → "${input.targetBranch}" ` +
1948
+ throw new VersionControlValidationError(`Change request for "${input.sourceBranch}" → "${input.targetBranch}" ` +
1963
1949
  'raced with a concurrent open/close; retry.', { kind: 'open-change-request-failed' });
1964
1950
  }
1965
1951
  throw new DuplicateChangeRequestError(input.sourceBranch, input.targetBranch, existing.number);
@@ -1970,7 +1956,7 @@ export class WorkflowService {
1970
1956
  // openChangeRequest finds no duplicate, re-runs the (idempotent, already
1971
1957
  // up-to-date) auto-merge, and inserts the row.
1972
1958
  const rawMsg = err instanceof Error ? err.message : String(err);
1973
- throw new WorkflowValidationError(`Failed to open change request: ${redactTokens(rawMsg, this.git.credentials?.token())}`, { kind: 'open-change-request-failed' });
1959
+ throw new VersionControlValidationError(`Failed to open change request: ${redactTokens(rawMsg, this.git.credentials?.token())}`, { kind: 'open-change-request-failed' });
1974
1960
  }
1975
1961
  this.prs.invalidateDetailCache(prNumber);
1976
1962
  const opened = {
@@ -2013,7 +1999,7 @@ export class WorkflowService {
2013
1999
  eligible,
2014
2000
  detail: null,
2015
2001
  pushRefused: null,
2016
- detailError: detailError ?? new WorkflowValidationError(`Created change request #${prNumber} but could not fetch its detail`),
2002
+ detailError: detailError ?? new VersionControlValidationError(`Created change request #${prNumber} but could not fetch its detail`),
2017
2003
  };
2018
2004
  });
2019
2005
  // The request exists in every branch of the outcome — the listeners are
@@ -2134,13 +2120,13 @@ export class WorkflowService {
2134
2120
  patches: false,
2135
2121
  });
2136
2122
  if (!detail) {
2137
- throw new WorkflowValidationError(`Change request #${number} not found.`, { kind: 'change-request-not-found', number });
2123
+ throw new VersionControlValidationError(`Change request #${number} not found.`, { kind: 'change-request-not-found', number });
2138
2124
  }
2139
2125
  if (detail.state !== 'open') {
2140
- throw new WorkflowValidationError(`Change request #${number} is ${detail.state} — only open requests can refresh from target.`, { kind: 'change-request-not-open', state: detail.state });
2126
+ throw new VersionControlValidationError(`Change request #${number} is ${detail.state} — only open requests can refresh from target.`, { kind: 'change-request-not-open', state: detail.state });
2141
2127
  }
2142
2128
  if (!detail.viewerCanUpdate) {
2143
- throw new WorkflowDomainError('Only the author of this change request, or someone who may apply it, can update it.', 403);
2129
+ throw new VersionControlDomainError('Only the author of this change request, or someone who may apply it, can update it.', 403);
2144
2130
  }
2145
2131
  // Taken BEFORE the head moves (the pull below can move it too): only a
2146
2132
  // refusal recorded earlier describes the revision this replaces (see
@@ -2263,7 +2249,7 @@ export class WorkflowService {
2263
2249
  if (headMoved) {
2264
2250
  try {
2265
2251
  updatedPaths = await this.git.pathsChangedBetween(workspaceId, headBeforeMerge, headAfterMerge);
2266
- await this.reviewWorkflow.carryApprovalsForward(number, headBeforeMerge, headAfterMerge, updatedPaths);
2252
+ await this.changeRequestReview.carryApprovalsForward(number, headBeforeMerge, headAfterMerge, updatedPaths);
2267
2253
  }
2268
2254
  catch (err) {
2269
2255
  log.warn(`could not carry approvals forward on change request #${number} after updating from target`, { err });
@@ -2282,14 +2268,14 @@ export class WorkflowService {
2282
2268
  viewerEmail: user.email,
2283
2269
  });
2284
2270
  if (!refreshed) {
2285
- throw new WorkflowValidationError(`Refreshed change request #${number} but could not re-fetch its detail.`);
2271
+ throw new VersionControlValidationError(`Refreshed change request #${number} but could not re-fetch its detail.`);
2286
2272
  }
2287
2273
  return { ...refreshed, updatedPaths };
2288
2274
  }
2289
2275
  async approveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId) {
2290
2276
  // Taken BEFORE the approval lands (see `clearApplyFailure`).
2291
2277
  const approvedAfter = new Date();
2292
- const approvals = await this.reviewWorkflow.approveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2278
+ const approvals = await this.changeRequestReview.approveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2293
2279
  // A recorded approval can answer a GATE refusal only — a conflict or a git
2294
2280
  // error still describes the request — and only once the gate that refused
2295
2281
  // would now pass: approving one file of several leaves the rest waiting,
@@ -2310,7 +2296,7 @@ export class WorkflowService {
2310
2296
  return approvals;
2311
2297
  }
2312
2298
  async unapproveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId) {
2313
- const approvals = await this.reviewWorkflow.unapproveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2299
+ const approvals = await this.changeRequestReview.unapproveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2314
2300
  this.prs.invalidateDetailCache(number);
2315
2301
  this.events?.emit({
2316
2302
  kind: 'approval-changed',
@@ -2362,9 +2348,9 @@ export class WorkflowService {
2362
2348
  async revertChangeRequestFile(number, user, repoRelPath) {
2363
2349
  const summary = await this.prs.getPr(number);
2364
2350
  if (!summary)
2365
- throw new WorkflowDomainError('change request not found', 404);
2351
+ throw new VersionControlDomainError('change request not found', 404);
2366
2352
  if (summary.state !== 'open') {
2367
- throw new WorkflowDomainError('This change request is no longer open.', 422);
2353
+ throw new VersionControlDomainError('This change request is no longer open.', 422);
2368
2354
  }
2369
2355
  const baseBranch = summary.base;
2370
2356
  const headBranch = summary.branch;
@@ -2381,15 +2367,15 @@ export class WorkflowService {
2381
2367
  // The verb acts on the request as it is NOW — never a cached file list.
2382
2368
  const paths = await this.git.changedPathsForPr(ws.id, baseBranch, headBranch);
2383
2369
  if (!paths.includes(repoRelPath)) {
2384
- throw new WorkflowDomainError('That file is not part of this change request.', 422);
2370
+ throw new VersionControlDomainError('That file is not part of this change request.', 422);
2385
2371
  }
2386
2372
  const canApprove = await this.accessControl.canWriteAtRef(ws.id, `origin/${baseBranch}`, user.email, repoRelPath);
2387
2373
  if (canApprove !== true) {
2388
- throw new WorkflowDomainError('Only an eligible approver of this file can revert it — declining takes the same permission as accepting.', 403);
2374
+ throw new VersionControlDomainError('Only an eligible approver of this file can revert it — declining takes the same permission as accepting.', 403);
2389
2375
  }
2390
2376
  const mergeBase = await this.git.mergeBaseForPr(ws.id, baseBranch, headBranch);
2391
2377
  if (!mergeBase) {
2392
- throw new WorkflowDomainError('These branches share no history to revert to.', 422);
2378
+ throw new VersionControlDomainError('These branches share no history to revert to.', 422);
2393
2379
  }
2394
2380
  const placeholder = await this.placeholderRevertedWith(ws.id, mergeBase, repoRelPath, paths);
2395
2381
  const reverted = placeholder ? [repoRelPath, placeholder] : [repoRelPath];
@@ -2406,7 +2392,7 @@ export class WorkflowService {
2406
2392
  const lockPath = `${this.kbDirName}/${p}`;
2407
2393
  const lock = await this.fileLocks.acquire(ws.id, headBranch, lockPath, user);
2408
2394
  if (!lock.acquired) {
2409
- throw new WorkflowDomainError(p === repoRelPath
2395
+ throw new VersionControlDomainError(p === repoRelPath
2410
2396
  ? `${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`
2411
2397
  : `The folder of ${repoRelPath} is being changed by ${lock.lock.holderName} — try again once the edit settles.`, 409);
2412
2398
  }
@@ -2486,7 +2472,7 @@ export class WorkflowService {
2486
2472
  }
2487
2473
  catch (err) {
2488
2474
  log.warn(`changedPathsForPr failed for #${cr.number} under folder ${printable(folder)}: ${printable(sanitizeError(err))}`);
2489
- throw new WorkflowDomainError(`Couldn't read what change request #${cr.number} proposes — try again in a moment.`, 500);
2475
+ throw new VersionControlDomainError(`Couldn't read what change request #${cr.number} proposes — try again in a moment.`, 500);
2490
2476
  }
2491
2477
  }));
2492
2478
  const touching = resolved
@@ -2549,7 +2535,7 @@ export class WorkflowService {
2549
2535
  const requests = await this.changeRequestsUnderFolder(folder, user);
2550
2536
  const refused = requests.filter((r) => !r.mayRemove);
2551
2537
  if (refused.length > 0) {
2552
- throw new WorkflowDomainError(`You can't remove proposed changes from ${refused.map((r) => `#${r.number}`).join(', ')} — only the author, an admin or someone who can write every file it proposes here can.`, 403);
2538
+ throw new VersionControlDomainError(`You can't remove proposed changes from ${refused.map((r) => `#${r.number}`).join(', ')} — only the author, an admin or someone who can write every file it proposes here can.`, 403);
2553
2539
  }
2554
2540
  const prefix = folderPrefix(folder);
2555
2541
  // Everything that can refuse happens before the first commit, so a
@@ -2571,7 +2557,7 @@ export class WorkflowService {
2571
2557
  }
2572
2558
  catch (err) {
2573
2559
  log.warn(`pull failed for #${summary.number} before removing folder ${printable(folder)}: ${printable(sanitizeError(err))}`);
2574
- throw new WorkflowDomainError(`#${summary.number} could not be brought up to date, so nothing was removed — try again in a moment.`, 409);
2560
+ throw new VersionControlDomainError(`#${summary.number} could not be brought up to date, so nothing was removed — try again in a moment.`, 409);
2575
2561
  }
2576
2562
  const paths = (await this.git.changedPathsForPr(ws.id, summary.base, summary.branch)).filter((p) => p.startsWith(prefix));
2577
2563
  // The permission above was judged on the paths the request proposed
@@ -2579,13 +2565,13 @@ export class WorkflowService {
2579
2565
  // file need not be one of it — so the request has to be asked about again.
2580
2566
  const unjudged = paths.filter((p) => !request.paths.includes(p));
2581
2567
  if (unjudged.length > 0) {
2582
- throw new WorkflowDomainError(`#${summary.number} changed while the folder was being deleted (${unjudged.length === 1 ? unjudged[0] : `${unjudged.length} new files`}), so no proposed changes were removed — try again.`, 409);
2568
+ throw new VersionControlDomainError(`#${summary.number} changed while the folder was being deleted (${unjudged.length === 1 ? unjudged[0] : `${unjudged.length} new files`}), so no proposed changes were removed — try again.`, 409);
2583
2569
  }
2584
2570
  let mergeBase = null;
2585
2571
  if (paths.length > 0) {
2586
2572
  mergeBase = await this.git.mergeBaseForPr(ws.id, summary.base, summary.branch);
2587
2573
  if (!mergeBase) {
2588
- throw new WorkflowDomainError(`#${summary.number} shares no history with its target to revert to.`, 422);
2574
+ throw new VersionControlDomainError(`#${summary.number} shares no history with its target to revert to.`, 422);
2589
2575
  }
2590
2576
  }
2591
2577
  plans.push({ number: summary.number, branch: summary.branch, wsId: ws.id, paths, mergeBase });
@@ -2612,7 +2598,7 @@ export class WorkflowService {
2612
2598
  }
2613
2599
  else if (seen.mergeBase !== plan.mergeBase) {
2614
2600
  const sharing = group.plans.map((other) => `#${other.number}`).join(', ');
2615
- throw new WorkflowDomainError(`${sharing} propose ${repoRelPath} from the same branch against different targets, so it can't be taken out of both at once. Decline it in each request instead.`, 422);
2601
+ throw new VersionControlDomainError(`${sharing} propose ${repoRelPath} from the same branch against different targets, so it can't be taken out of both at once. Decline it in each request instead.`, 422);
2616
2602
  }
2617
2603
  }
2618
2604
  }
@@ -2639,7 +2625,7 @@ export class WorkflowService {
2639
2625
  const lockPath = `${this.kbDirName}/${repoRelPath}`;
2640
2626
  const lock = await this.fileLocks.acquire(group.wsId, group.branch, lockPath, user);
2641
2627
  if (!lock.acquired) {
2642
- throw new WorkflowDomainError(`${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`, 409);
2628
+ throw new VersionControlDomainError(`${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`, 409);
2643
2629
  }
2644
2630
  held.push({ wsId: group.wsId, branch: group.branch, lockPath });
2645
2631
  }
@@ -2710,7 +2696,7 @@ export class WorkflowService {
2710
2696
  if (pushFailure) {
2711
2697
  const failed = pushFailure.group.plans.map((plan) => `#${plan.number}`).join(', ');
2712
2698
  log.warn(`push failed for ${failed} removing folder ${printable(folder)}: ${printable(sanitizeError(pushFailure.err))}`);
2713
- throw new WorkflowDomainError(`The folder's files were removed from ${finished.map((plan) => `#${plan.number}`).join(', ')}, but ${failed} could not be updated and it and any later requests were left as they were. Run the delete again to finish.`, 500);
2699
+ throw new VersionControlDomainError(`The folder's files were removed from ${finished.map((plan) => `#${plan.number}`).join(', ')}, but ${failed} could not be updated and it and any later requests were left as they were. Run the delete again to finish.`, 500);
2714
2700
  }
2715
2701
  return results;
2716
2702
  }
@@ -2731,9 +2717,9 @@ export class WorkflowService {
2731
2717
  async deleteChangeRequest(number, user) {
2732
2718
  const summary = await this.prs.getPr(number);
2733
2719
  if (!summary)
2734
- throw new WorkflowDomainError('change request not found', 404);
2720
+ throw new VersionControlDomainError('change request not found', 404);
2735
2721
  if (summary.state === 'merged') {
2736
- throw new WorkflowDomainError('This change request has already been applied.', 422);
2722
+ throw new VersionControlDomainError('This change request has already been applied.', 422);
2737
2723
  }
2738
2724
  // Which `roles.yaml` authorizes this? The base branch's, exactly as every
2739
2725
  // other admin check here. When the base branch itself is gone, this
@@ -2758,7 +2744,7 @@ export class WorkflowService {
2758
2744
  await this.workspaceService.ensureRemotesFetched(ws.id, { strict: true });
2759
2745
  }
2760
2746
  catch {
2761
- throw new WorkflowDomainError(`Could not verify the base branch "${summary.base}" — origin was unreachable. Retry in a moment.`, 409);
2747
+ throw new VersionControlDomainError(`Could not verify the base branch "${summary.base}" — origin was unreachable. Retry in a moment.`, 409);
2762
2748
  }
2763
2749
  isAdmin = await this.accessControl.canWriteAtRef(ws.id, `origin/${summary.base}`, user.email, 'roles.yaml');
2764
2750
  }
@@ -2774,7 +2760,7 @@ export class WorkflowService {
2774
2760
  // attempt the sweep has either closed the row or shown the base alive.
2775
2761
  if (isAdmin === null) {
2776
2762
  this.kickDeletedBranchSweep();
2777
- throw new WorkflowDomainError(`The base branch "${summary.base}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2763
+ throw new VersionControlDomainError(`The base branch "${summary.base}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2778
2764
  }
2779
2765
  // Authorship is decided from the STORED author hash, never from anything
2780
2766
  // the caller sends. Note what is deliberately NOT short-circuited for an
@@ -2786,7 +2772,7 @@ export class WorkflowService {
2786
2772
  // stay honest.
2787
2773
  const callerIsAuthor = !!(summary.authorId && summary.authorId === hashEmail(user.email));
2788
2774
  if (!callerIsAuthor && isAdmin !== true) {
2789
- throw new WorkflowDomainError("Only the request's author or an admin can delete it.", 403);
2775
+ throw new VersionControlDomainError("Only the request's author or an admin can delete it.", 403);
2790
2776
  }
2791
2777
  // Close first (idempotent: an already-closed request just skips to the
2792
2778
  // branch retirement). Guarded on `open` so a concurrent merge wins.
@@ -2803,7 +2789,7 @@ export class WorkflowService {
2803
2789
  else {
2804
2790
  const fresh = await this.prs.getPr(number);
2805
2791
  if (fresh?.state === 'merged') {
2806
- throw new WorkflowDomainError('This change request has already been applied.', 422);
2792
+ throw new VersionControlDomainError('This change request has already been applied.', 422);
2807
2793
  }
2808
2794
  }
2809
2795
  await this.retireMergedSourceBranch(number, summary.base, user);
@@ -2837,7 +2823,7 @@ export class WorkflowService {
2837
2823
  }
2838
2824
  catch {
2839
2825
  this.kickDeletedBranchSweep();
2840
- throw new WorkflowDomainError(`Could not verify the base branch "${baseBranch}" — origin was unreachable. Retry in a moment.`, 409);
2826
+ throw new VersionControlDomainError(`Could not verify the base branch "${baseBranch}" — origin was unreachable. Retry in a moment.`, 409);
2841
2827
  }
2842
2828
  const isAdmin = await this.accessControl.canWriteAtRef(workspaceId, `origin/${baseBranch}`, user.email, 'roles.yaml');
2843
2829
  if (isAdmin === true)
@@ -2847,7 +2833,7 @@ export class WorkflowService {
2847
2833
  // read and a batch lookup done for nothing.
2848
2834
  if (isAdmin === null) {
2849
2835
  this.kickDeletedBranchSweep();
2850
- throw new WorkflowDomainError(`The base branch "${baseBranch}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2836
+ throw new VersionControlDomainError(`The base branch "${baseBranch}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2851
2837
  }
2852
2838
  let detail;
2853
2839
  try {
@@ -2885,16 +2871,16 @@ export class WorkflowService {
2885
2871
  const description = input.description === undefined ? undefined : input.description.trim();
2886
2872
  const appended = input.appendDescription === undefined ? undefined : input.appendDescription.trim();
2887
2873
  if (title === undefined && description === undefined && appended === undefined) {
2888
- throw new WorkflowValidationError('Give a new title, a new description, or both.');
2874
+ throw new VersionControlValidationError('Give a new title, a new description, or both.');
2889
2875
  }
2890
2876
  if (description !== undefined && appended !== undefined) {
2891
- throw new WorkflowValidationError('Give either a new description or text to append to it, not both.');
2877
+ throw new VersionControlValidationError('Give either a new description or text to append to it, not both.');
2892
2878
  }
2893
2879
  if (title !== undefined && title.length === 0) {
2894
- throw new WorkflowValidationError('A change request needs a title; it cannot be empty.');
2880
+ throw new VersionControlValidationError('A change request needs a title; it cannot be empty.');
2895
2881
  }
2896
2882
  if (title !== undefined && title.length > CHANGE_REQUEST_TITLE_MAX) {
2897
- throw new WorkflowValidationError(`A change request's title is at most ${CHANGE_REQUEST_TITLE_MAX} characters; this one has ${title.length}.`);
2883
+ throw new VersionControlValidationError(`A change request's title is at most ${CHANGE_REQUEST_TITLE_MAX} characters; this one has ${title.length}.`);
2898
2884
  }
2899
2885
  // A replacement is measured here; an append is measured on what it
2900
2886
  // leaves, inside the transaction, since that depends on the body as
@@ -2902,7 +2888,7 @@ export class WorkflowService {
2902
2888
  assertDescriptionFits(description);
2903
2889
  const summary = await this.prs.getPr(number);
2904
2890
  if (!summary)
2905
- throw new WorkflowDomainError('change request not found', 404);
2891
+ throw new VersionControlDomainError('change request not found', 404);
2906
2892
  assertEditable(summary.state);
2907
2893
  // The grants beyond authorship are read in the base branch's own workspace,
2908
2894
  // resolved only once authorship has not already decided: an author's edit
@@ -2918,7 +2904,7 @@ export class WorkflowService {
2918
2904
  }
2919
2905
  });
2920
2906
  if (grant === null) {
2921
- throw new WorkflowDomainError("Only the request's author, an admin, or someone who may approve every file it changes can edit its title and description.", 403);
2907
+ throw new VersionControlDomainError("Only the request's author, an admin, or someone who may approve every file it changes can edit its title and description.", 403);
2922
2908
  }
2923
2909
  // The body is rewritten from the row as stored, not from the summary read
2924
2910
  // above, inside one transaction holding the row's lock (`FOR UPDATE`) from
@@ -2963,15 +2949,15 @@ export class WorkflowService {
2963
2949
  if (!updated) {
2964
2950
  const fresh = await this.prs.getPr(number);
2965
2951
  if (!fresh)
2966
- throw new WorkflowDomainError('change request not found', 404);
2952
+ throw new VersionControlDomainError('change request not found', 404);
2967
2953
  assertEditable(fresh.state);
2968
- throw new WorkflowDomainError('This change request changed while it was being edited. Retry in a moment.', 409);
2954
+ throw new VersionControlDomainError('This change request changed while it was being edited. Retry in a moment.', 409);
2969
2955
  }
2970
2956
  crLog.info(`#${number} title/description edited`);
2971
2957
  this.events?.emit({ kind: 'change-request-edited', number });
2972
2958
  const fresh = await this.prs.getPr(number);
2973
2959
  if (!fresh)
2974
- throw new WorkflowDomainError('change request not found', 404);
2960
+ throw new VersionControlDomainError('change request not found', 404);
2975
2961
  return fresh;
2976
2962
  }
2977
2963
  /**
@@ -3043,7 +3029,7 @@ export class WorkflowService {
3043
3029
  * branch is gone. Closing takes it out of every open list (which is the
3044
3030
  * whole visible problem) while a `state = 'closed'` row can still be read,
3045
3031
  * counted, and reopened by hand. Deleting would make this sweep the one
3046
- * operation in the workflow that destroys history without a human asking.
3032
+ * operation in version control that destroys history without a human asking.
3047
3033
  *
3048
3034
  * ONE fetch, then a set lookup. The freshness matters more than the cost:
3049
3035
  * `changedPathsForPr` fails when a branch is missing from THAT
@@ -3506,7 +3492,7 @@ export class WorkflowService {
3506
3492
  effectiveAuthorIdHash = hashEmail(user.email);
3507
3493
  }
3508
3494
  }
3509
- const result = await this.reviewWorkflow.cancelPr(number, user, state, effectiveAuthorIdHash, baseBranch, workspaceId);
3495
+ const result = await this.changeRequestReview.cancelPr(number, user, state, effectiveAuthorIdHash, baseBranch, workspaceId);
3510
3496
  this.prs.invalidateDetailCache(number);
3511
3497
  this.events?.emit({ kind: 'change-request-rejected', number });
3512
3498
  return result;
@@ -3561,7 +3547,7 @@ export class WorkflowService {
3561
3547
  }
3562
3548
  let result;
3563
3549
  try {
3564
- result = await this.reviewWorkflow.mergePr(number, user, mergeHeadSha, mergeApprovals, state, title, baseBranch, workspaceId, opts);
3550
+ result = await this.changeRequestReview.mergePr(number, user, mergeHeadSha, mergeApprovals, state, title, baseBranch, workspaceId, opts);
3565
3551
  }
3566
3552
  catch (err) {
3567
3553
  // The local merge hit conflicts — hand the caller (agent/UI) the actual
@@ -3693,7 +3679,7 @@ export class WorkflowService {
3693
3679
  }
3694
3680
  async mergeBranch(user, sourceBranch, targetBranch) {
3695
3681
  if (sourceBranch === targetBranch) {
3696
- throw new WorkflowValidationError(`\`source\` and \`target\` are both "${sourceBranch}" — name two different branches.`);
3682
+ throw new VersionControlValidationError(`\`source\` and \`target\` are both "${sourceBranch}" — name two different branches.`);
3697
3683
  }
3698
3684
  // Asked once BEFORE waiting, so a merge the open request forbids is refused
3699
3685
  // at once rather than after the source's commits have landed. Not the
@@ -3742,7 +3728,7 @@ export class WorkflowService {
3742
3728
  // The merge runs in the target's own workspace, like a change request's.
3743
3729
  const targetWorkspaceId = (await this.workspaceService.getOrCreateForBranch(targetBranch)).id;
3744
3730
  if (!(await this.git.remoteBranchExists(targetWorkspaceId, sourceBranch))) {
3745
- throw new WorkflowValidationError(`No branch named "${sourceBranch}" on the shared remote.`);
3731
+ throw new VersionControlValidationError(`No branch named "${sourceBranch}" on the shared remote.`);
3746
3732
  }
3747
3733
  const result = await this.git.mergeChangeRequest(targetWorkspaceId, sourceBranch, targetBranch, {
3748
3734
  subject: `Merge ${sourceBranch} into ${targetBranch}`,
@@ -3780,7 +3766,7 @@ export class WorkflowService {
3780
3766
  // roles.yaml would bypass both, on the one file the access
3781
3767
  // model cannot survive being wrong.
3782
3768
  if (changedPaths.includes('roles.yaml')) {
3783
- throw new WorkflowDomainError(`"${targetBranch}" is protected and this merge would change its roles.yaml. ` +
3769
+ throw new VersionControlDomainError(`"${targetBranch}" is protected and this merge would change its roles.yaml. ` +
3784
3770
  `Roles never change through a merge: restore roles.yaml on "${sourceBranch}" to the version on ` +
3785
3771
  `"${targetBranch}" and merge again, and ask the user to change roles in the app.`, 403, { kind: 'protected-merge-changes-roles', targetBranch, sourceBranch });
3786
3772
  }
@@ -3788,7 +3774,7 @@ export class WorkflowService {
3788
3774
  const denied = allowed ? changedPaths.filter((p) => !allowed.get(p)) : [];
3789
3775
  if (denied.length === 0)
3790
3776
  return;
3791
- throw new WorkflowDomainError(`"${targetBranch}" is protected and you cannot commit directly to it: ` +
3777
+ throw new VersionControlDomainError(`"${targetBranch}" is protected and you cannot commit directly to it: ` +
3792
3778
  `${denied.length} changed file(s) are outside your write access (${denied.join(', ')}). ` +
3793
3779
  `Open a change request from "${sourceBranch}" into "${targetBranch}" and ask the user to review it in the app.`, 403, { kind: 'protected-merge-target', targetBranch, deniedPaths: denied });
3794
3780
  }
@@ -3888,7 +3874,7 @@ export class WorkflowService {
3888
3874
  */
3889
3875
  gateWouldPass(number, approvals) {
3890
3876
  try {
3891
- const gate = this.reviewWorkflow.evaluateMergeGate({ prNumber: number, state: 'open', approvals });
3877
+ const gate = this.changeRequestReview.evaluateMergeGate({ prNumber: number, state: 'open', approvals });
3892
3878
  return gate?.mergeable === true && gate.warnings.length === 0;
3893
3879
  }
3894
3880
  catch (err) {
@@ -4159,7 +4145,7 @@ export class WorkflowService {
4159
4145
  throw new Error('updateBranch: resolutions need a `validateWrite` to be asked before the merge');
4160
4146
  }
4161
4147
  if (this.kb.isProtectedBranch(branch)) {
4162
- throw new WorkflowDomainError(`"${branch}" is protected: it is changed through change requests, never merged into directly.`, 403, { kind: 'protected-update-target', branch });
4148
+ throw new VersionControlDomainError(`"${branch}" is protected: it is changed through change requests, never merged into directly.`, 403, { kind: 'protected-update-target', branch });
4163
4149
  }
4164
4150
  // The one merge a person makes: a change request's. An update that would
4165
4151
  // land an OPEN request from `from` into this draft is that merge by
@@ -4205,7 +4191,7 @@ export class WorkflowService {
4205
4191
  throw new OpenChangeRequestBlocksMergeError(from, branch, open);
4206
4192
  }
4207
4193
  if (!(await this.git.remoteBranchExists(workspaceId, from))) {
4208
- throw new WorkflowValidationError(`No branch named "${from}" on the shared repository.`);
4194
+ throw new VersionControlValidationError(`No branch named "${from}" on the shared repository.`);
4209
4195
  }
4210
4196
  const resolutions = opts.resolutions ?? [];
4211
4197
  const subject = from === branch ? `Merge the shared ${branch} into the local one` : `Merge ${from} into ${branch}`;
@@ -4216,7 +4202,7 @@ export class WorkflowService {
4216
4202
  ? ` Conflicts resolved by ${user.name} <${user.email}> in: ${resolutions.map((r) => r.path).join(', ')}.`
4217
4203
  : '');
4218
4204
  // Published inside the merge's own reservation: nothing lands between
4219
- // the merge commit and its push, and the push is EVERY workflow push's
4205
+ // the merge commit and its push, and the push is EVERY version-control push's
4220
4206
  // `pushWithRecovery`, run over the merge's own unlocked moves — a
4221
4207
  // rejection replays the merge (kept as a merge) onto the moved branch
4222
4208
  // and pushes again; a replay that conflicts or a host that refuses
@@ -4268,4 +4254,4 @@ export class WorkflowService {
4268
4254
  return this.git.changedPathsForPr(workspaceId, base, branch);
4269
4255
  }
4270
4256
  }
4271
- //# sourceMappingURL=workflow.service.js.map
4257
+ //# sourceMappingURL=version-control.service.js.map