@bevel-software/platform-core-backend 0.34.0 → 0.36.1

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 (908) hide show
  1. package/agent-guide/access-control.md +146 -300
  2. package/agent-guide/conventions.md +23 -25
  3. package/agent-guide/directory-structure.md +72 -120
  4. package/agent-guide/drafts-and-change-requests.md +92 -0
  5. package/agent-guide/for-git-users.md +47 -0
  6. package/agent-guide/glossary.md +36 -0
  7. package/agent-guide/how-agents-find-things.md +49 -0
  8. package/agent-guide/html-views.md +16 -11
  9. package/agent-guide/new-knowledge-base.md +9 -8
  10. package/agent-guide/onboarding.md +111 -0
  11. package/agent-guide/skills.md +67 -42
  12. package/agent-guide/start-here.md +66 -0
  13. package/agent-guide/tool-manuals.md +133 -154
  14. package/agent-guide/tools.md +67 -0
  15. package/agent-guide/where-a-new-file-goes.md +45 -28
  16. package/dist/core/catalog-cache-invalidation.d.ts +2 -2
  17. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
  18. package/dist/core/compose-embed.d.ts +2 -2
  19. package/dist/core/compose-embed.d.ts.map +1 -1
  20. package/dist/core/compose-embed.js +1 -1
  21. package/dist/core/compose-embed.js.map +1 -1
  22. package/dist/core/core-ports.d.ts +19 -4
  23. package/dist/core/core-ports.d.ts.map +1 -1
  24. package/dist/core/core-ports.js.map +1 -1
  25. package/dist/core/create-core-server.d.ts.map +1 -1
  26. package/dist/core/create-core-server.js +27 -25
  27. package/dist/core/create-core-server.js.map +1 -1
  28. package/dist/core/create-core-services.d.ts +25 -13
  29. package/dist/core/create-core-services.d.ts.map +1 -1
  30. package/dist/core/create-core-services.js +75 -60
  31. package/dist/core/create-core-services.js.map +1 -1
  32. package/dist/core/lifecycle.d.ts +4 -4
  33. package/dist/core/lifecycle.d.ts.map +1 -1
  34. package/dist/core/lifecycle.js +5 -5
  35. package/dist/core/lifecycle.js.map +1 -1
  36. package/dist/core-config.d.ts +2 -2
  37. package/dist/core-config.js +3 -3
  38. package/dist/core-config.js.map +1 -1
  39. package/dist/index.d.ts +4 -4
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -3
  42. package/dist/index.js.map +1 -1
  43. package/dist/modules/access/access-control.interface.d.ts +22 -0
  44. package/dist/modules/access/access-control.interface.d.ts.map +1 -1
  45. package/dist/modules/access/access-control.service.d.ts +3 -1
  46. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  47. package/dist/modules/access/access-control.service.js +76 -1
  48. package/dist/modules/access/access-control.service.js.map +1 -1
  49. package/dist/modules/access/access-declarations.d.ts +2 -2
  50. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  51. package/dist/modules/access/access-declarations.js +2 -2
  52. package/dist/modules/access/access-declarations.js.map +1 -1
  53. package/dist/modules/access/access-mutation.service.d.ts +2 -2
  54. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  55. package/dist/modules/access/access-mutation.service.js +2 -2
  56. package/dist/modules/access/access-mutation.service.js.map +1 -1
  57. package/dist/modules/access/access-requests.routes.d.ts +2 -2
  58. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  59. package/dist/modules/access/access-requests.routes.js +5 -5
  60. package/dist/modules/access/access-requests.routes.js.map +1 -1
  61. package/dist/modules/access/access-requests.service.d.ts +2 -2
  62. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  63. package/dist/modules/access/access-requests.service.js +11 -11
  64. package/dist/modules/access/access-requests.service.js.map +1 -1
  65. package/dist/modules/access/access.routes.d.ts +2 -2
  66. package/dist/modules/access/access.routes.d.ts.map +1 -1
  67. package/dist/modules/access/access.routes.js +32 -13
  68. package/dist/modules/access/access.routes.js.map +1 -1
  69. package/dist/modules/access/admin-locked-commit.d.ts +5 -5
  70. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  71. package/dist/modules/access/admin-locked-commit.js +7 -7
  72. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  73. package/dist/modules/access/admin-route-helpers.d.ts +1 -1
  74. package/dist/modules/access/admin-route-helpers.js +5 -5
  75. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  76. package/dist/modules/access/change-read-gate.d.ts +1 -1
  77. package/dist/modules/access/change-read-gate.js +1 -1
  78. package/dist/modules/access/groups-admin.service.d.ts +7 -7
  79. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  80. package/dist/modules/access/groups-admin.service.js +6 -6
  81. package/dist/modules/access/groups-admin.service.js.map +1 -1
  82. package/dist/modules/access/index.d.ts +1 -1
  83. package/dist/modules/access/index.d.ts.map +1 -1
  84. package/dist/modules/access/reference-scan.d.ts +1 -1
  85. package/dist/modules/access/roles-admin.service.d.ts +7 -7
  86. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  87. package/dist/modules/access/roles-admin.service.js +8 -8
  88. package/dist/modules/access/roles-admin.service.js.map +1 -1
  89. package/dist/modules/access/synced-groups-committer.d.ts +4 -4
  90. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  91. package/dist/modules/access/synced-groups-committer.js +7 -7
  92. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  93. package/dist/modules/access/user-access-removal.service.d.ts +6 -6
  94. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  95. package/dist/modules/access/user-access-removal.service.js +4 -4
  96. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  97. package/dist/modules/access-model/access-errors.d.ts +4 -4
  98. package/dist/modules/access-model/access-errors.d.ts.map +1 -1
  99. package/dist/modules/access-model/access-errors.js +4 -4
  100. package/dist/modules/access-model/access-errors.js.map +1 -1
  101. package/dist/modules/access-model/access-grammar.d.ts +1 -1
  102. package/dist/modules/access-model/access-grammar.js +4 -4
  103. package/dist/modules/access-model/change-gate.d.ts +1 -1
  104. package/dist/modules/access-model/change-gate.js +1 -1
  105. package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
  106. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  107. package/dist/modules/access-model/roles-yaml-guard.js +4 -4
  108. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
  109. package/dist/modules/agent-guide/agent-guide.d.ts +63 -18
  110. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
  111. package/dist/modules/agent-guide/agent-guide.js +144 -30
  112. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  113. package/dist/modules/agent-guide/agent-guide.tools.d.ts +6 -2
  114. package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
  115. package/dist/modules/agent-guide/agent-guide.tools.js +45 -31
  116. package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
  117. package/dist/modules/agent-guide/guide-budget.d.ts +51 -0
  118. package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -0
  119. package/dist/modules/agent-guide/guide-budget.js +71 -0
  120. package/dist/modules/agent-guide/guide-budget.js.map +1 -0
  121. package/dist/modules/agent-guide/index.d.ts +2 -1
  122. package/dist/modules/agent-guide/index.d.ts.map +1 -1
  123. package/dist/modules/agent-guide/index.js +2 -1
  124. package/dist/modules/agent-guide/index.js.map +1 -1
  125. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
  126. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  127. package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
  128. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  129. package/dist/modules/agent-instructions/compose.d.ts +15 -8
  130. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  131. package/dist/modules/agent-instructions/compose.js +28 -10
  132. package/dist/modules/agent-instructions/compose.js.map +1 -1
  133. package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
  134. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  135. package/dist/modules/agent-instructions/shared-file-rules.js +60 -18
  136. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  137. package/dist/modules/auth/account-erasure.service.d.ts +36 -7
  138. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  139. package/dist/modules/auth/account-erasure.service.js +30 -10
  140. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  141. package/dist/modules/auth/account-hooks.d.ts +20 -0
  142. package/dist/modules/auth/account-hooks.d.ts.map +1 -1
  143. package/dist/modules/auth/account-hooks.js +10 -0
  144. package/dist/modules/auth/account-hooks.js.map +1 -1
  145. package/dist/modules/auth/account-switch-lock.js +2 -2
  146. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  147. package/dist/modules/auth/account.routes.d.ts +7 -2
  148. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  149. package/dist/modules/auth/account.routes.js +23 -4
  150. package/dist/modules/auth/account.routes.js.map +1 -1
  151. package/dist/modules/auth/auth.service.d.ts +1 -1
  152. package/dist/modules/auth/auth.service.js +4 -4
  153. package/dist/modules/auth/auth.service.js.map +1 -1
  154. package/dist/modules/auth/index.d.ts +1 -0
  155. package/dist/modules/auth/index.d.ts.map +1 -1
  156. package/dist/modules/code-mode/code-mode.tool.js +2 -2
  157. package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
  158. package/dist/modules/connection-probe/connection-probe.service.d.ts +0 -12
  159. package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
  160. package/dist/modules/connection-probe/connection-probe.service.js +1 -38
  161. package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
  162. package/dist/modules/database/core-schema.js +2 -2
  163. package/dist/modules/database/core-schema.js.map +1 -1
  164. package/dist/modules/diff/diff.routes.d.ts +3 -3
  165. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  166. package/dist/modules/diff/diff.routes.js +7 -7
  167. package/dist/modules/diff/diff.routes.js.map +1 -1
  168. package/dist/modules/embed/embed.routes.js +1 -1
  169. package/dist/modules/embed/embed.routes.js.map +1 -1
  170. package/dist/modules/embed/embed.service.d.ts +4 -4
  171. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  172. package/dist/modules/embed/embed.service.js +18 -18
  173. package/dist/modules/embed/embed.service.js.map +1 -1
  174. package/dist/modules/kb-fs/branch-name.js +8 -8
  175. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  176. package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
  177. package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
  178. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  179. package/dist/modules/kb-fs/locking-filesystem.js +27 -27
  180. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  181. package/dist/modules/kb-fs/repo-path.js +5 -5
  182. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  183. package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
  184. package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
  185. package/dist/modules/kb-fs/tmp-ref.js +2 -2
  186. package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
  187. package/dist/modules/kb-sync/index.d.ts +1 -1
  188. package/dist/modules/kb-sync/index.d.ts.map +1 -1
  189. package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
  190. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  191. package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
  192. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  193. package/dist/modules/kb-sync/kb-sync.service.js +10 -10
  194. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  195. package/dist/modules/mcp/mcp.service.d.ts +11 -4
  196. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  197. package/dist/modules/mcp/mcp.service.js +80 -53
  198. package/dist/modules/mcp/mcp.service.js.map +1 -1
  199. package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
  200. package/dist/modules/onboarding/onboarding.routes.js +2 -2
  201. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  202. package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
  203. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  204. package/dist/modules/onboarding/starter-pack.service.js +4 -4
  205. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  206. package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
  207. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  208. package/dist/modules/plugins/join-request-jobs.service.js +7 -7
  209. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  210. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  211. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  212. package/dist/modules/plugins/join-requests.service.js +5 -5
  213. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  214. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  215. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  216. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  217. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  218. package/dist/modules/plugins/plugins.routes.js +8 -8
  219. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  220. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +87 -2
  221. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  222. package/dist/modules/secrets-vault/db-secrets-vault.service.js +635 -74
  223. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  224. package/dist/modules/secrets-vault/index.d.ts +3 -2
  225. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  226. package/dist/modules/secrets-vault/index.js +2 -1
  227. package/dist/modules/secrets-vault/index.js.map +1 -1
  228. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
  229. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
  230. package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
  231. package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
  232. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +205 -11
  233. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  234. package/dist/modules/secrets-vault/secrets-vault.contract.js +27 -0
  235. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  236. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
  237. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  238. package/dist/modules/secrets-vault/secrets-vault.routes.js +206 -45
  239. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  240. package/dist/modules/settings/connection-check.js +1 -1
  241. package/dist/modules/settings/connection-check.js.map +1 -1
  242. package/dist/modules/settings/deployment-settings.service.js +1 -1
  243. package/dist/modules/settings/git-root-folders.js +1 -1
  244. package/dist/modules/settings/git-root-folders.js.map +1 -1
  245. package/dist/modules/settings/oidc-check.d.ts.map +1 -1
  246. package/dist/modules/settings/oidc-check.js +5 -17
  247. package/dist/modules/settings/oidc-check.js.map +1 -1
  248. package/dist/modules/settings/setup.routes.d.ts +1 -1
  249. package/dist/modules/settings/setup.routes.js +1 -1
  250. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  251. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  252. package/dist/modules/skills/pending-skills.service.js +4 -4
  253. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  254. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
  255. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  256. package/dist/modules/skills/skill-access-requests.routes.js +5 -5
  257. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  258. package/dist/modules/skills/skills.tools.js +1 -1
  259. package/dist/modules/skills/skills.tools.js.map +1 -1
  260. package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
  261. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  262. package/dist/modules/tool-helpers/tool-context.js +2 -2
  263. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  264. package/dist/modules/tool-helpers/tool-def.js +1 -1
  265. package/dist/modules/tool-helpers/tool-def.js.map +1 -1
  266. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  267. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  268. package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
  269. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  270. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +7 -1
  271. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
  272. package/dist/modules/tool-manuals/mcp-json-discovery.js +69 -38
  273. package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
  274. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  275. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  276. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
  277. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  278. package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
  279. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  280. package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
  281. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  282. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +70 -3
  283. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  284. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +18 -8
  285. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  286. package/dist/modules/tool-manuals/tool-manuals.service.js +166 -49
  287. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  288. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +11 -2
  289. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  290. package/dist/modules/tool-manuals/tool-manuals.tools.js +66 -24
  291. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  292. package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
  293. package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
  294. package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
  295. package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
  296. package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
  297. package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
  298. package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
  299. package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
  300. package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
  301. package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +53 -49
  302. package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
  303. package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
  304. package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
  305. package/dist/modules/version-control/change-request-hooks.js.map +1 -0
  306. package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
  307. package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
  308. package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
  309. package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
  310. package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
  311. package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
  312. package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
  313. package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
  314. package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
  315. package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
  316. package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
  317. package/dist/modules/version-control/event-bus.d.ts.map +1 -0
  318. package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
  319. package/dist/modules/version-control/event-bus.js.map +1 -0
  320. package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
  321. package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
  322. package/dist/modules/version-control/events-delivery.js.map +1 -0
  323. package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
  324. package/dist/modules/version-control/events.routes.d.ts.map +1 -0
  325. package/dist/modules/version-control/events.routes.js.map +1 -0
  326. package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
  327. package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
  328. package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
  329. package/dist/modules/version-control/file-lock.service.js.map +1 -0
  330. package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
  331. package/dist/modules/version-control/git/change-request-link.js.map +1 -0
  332. package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
  333. package/dist/modules/version-control/git/git-version.js.map +1 -0
  334. package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
  335. package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
  336. package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
  337. package/dist/modules/version-control/git/git.service.js.map +1 -0
  338. package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
  339. package/dist/modules/version-control/git/merge-commit.js.map +1 -0
  340. package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
  341. package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
  342. package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
  343. package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
  344. package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
  345. package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
  346. package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
  347. package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
  348. package/dist/modules/version-control/index.d.ts.map +1 -0
  349. package/dist/modules/{workflow → version-control}/index.js +3 -2
  350. package/dist/modules/version-control/index.js.map +1 -0
  351. package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
  352. package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
  353. package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
  354. package/dist/modules/version-control/pending-commits.service.js.map +1 -0
  355. package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
  356. package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
  357. package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
  358. package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
  359. package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
  360. package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
  361. package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
  362. package/dist/modules/version-control/read-on-branch.js.map +1 -0
  363. package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
  364. package/dist/modules/version-control/recovery-bot.js.map +1 -0
  365. package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
  366. package/dist/modules/version-control/sanitize-error.js.map +1 -0
  367. package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
  368. package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
  369. package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
  370. package/dist/modules/version-control/version-control-hooks.js.map +1 -0
  371. package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
  372. package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
  373. package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
  374. package/dist/modules/version-control/version-control.routes.js.map +1 -0
  375. package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
  376. package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
  377. package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
  378. package/dist/modules/version-control/version-control.service.js.map +1 -0
  379. package/dist/modules/workspace/agent-access.gate.d.ts +6 -6
  380. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  381. package/dist/modules/workspace/agent-access.gate.js +2 -2
  382. package/dist/modules/workspace/agent-access.gate.js.map +1 -1
  383. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  384. package/dist/modules/workspace/git-internals.middleware.js +2 -2
  385. package/dist/modules/workspace/kb-repository.js +1 -1
  386. package/dist/modules/workspace/kb-repository.js.map +1 -1
  387. package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
  388. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  389. package/dist/modules/workspace/startup/kb-git.js +1 -1
  390. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  391. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
  392. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  393. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  394. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  395. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
  396. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  397. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  398. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  399. package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
  400. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  401. package/dist/modules/workspace/startup/steps/template-source.js +8 -5
  402. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  403. package/dist/modules/workspace/workspace-tmp.js +3 -3
  404. package/dist/modules/workspace/workspace-tmp.js.map +1 -1
  405. package/dist/modules/workspace/workspace.routes.d.ts +4 -4
  406. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  407. package/dist/modules/workspace/workspace.routes.js +22 -22
  408. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  409. package/dist/modules/workspace/workspace.service.d.ts +6 -6
  410. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  411. package/dist/modules/workspace/workspace.service.js +11 -11
  412. package/dist/modules/workspace/workspace.service.js.map +1 -1
  413. package/dist/modules/workspace/workspace.tools.d.ts +5 -3
  414. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  415. package/dist/modules/workspace/workspace.tools.js +85 -30
  416. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  417. package/dist/shared/canonical-file-identity.d.ts +2 -2
  418. package/dist/shared/canonical-file-identity.js +5 -5
  419. package/dist/shared/canonical-file-identity.js.map +1 -1
  420. package/dist/shared/domain-errors.d.ts +39 -39
  421. package/dist/shared/domain-errors.d.ts.map +1 -1
  422. package/dist/shared/domain-errors.js +44 -44
  423. package/dist/shared/domain-errors.js.map +1 -1
  424. package/dist/shared/git.contract.d.ts +1 -1
  425. package/dist/shared/git.contract.js +1 -1
  426. package/dist/shared/http-errors.d.ts +3 -3
  427. package/dist/shared/http-errors.d.ts.map +1 -1
  428. package/dist/shared/http-errors.js +1 -1
  429. package/dist/shared/http-errors.js.map +1 -1
  430. package/dist/shared/oauth-token-error.d.ts +23 -0
  431. package/dist/shared/oauth-token-error.d.ts.map +1 -0
  432. package/dist/shared/oauth-token-error.js +47 -0
  433. package/dist/shared/oauth-token-error.js.map +1 -0
  434. package/dist/shared/pending-proposals.d.ts +3 -3
  435. package/dist/shared/pending-proposals.d.ts.map +1 -1
  436. package/dist/shared/pending-proposals.js +2 -2
  437. package/dist/shared/pending-proposals.js.map +1 -1
  438. package/dist/shared/read-capped.d.ts +19 -0
  439. package/dist/shared/read-capped.d.ts.map +1 -0
  440. package/dist/shared/read-capped.js +45 -0
  441. package/dist/shared/read-capped.js.map +1 -0
  442. package/dist/tenancy/static-tenant-source.js +1 -1
  443. package/dist/tenancy/static-tenant-source.js.map +1 -1
  444. package/migrations/0012_agent_audit.sql +40 -40
  445. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
  446. package/migrations/meta/0012_snapshot.json +2246 -2246
  447. package/migrations/meta/0013_snapshot.json +2258 -2258
  448. package/package.json +5 -4
  449. package/src/__tests__/account-admin.ts +27 -0
  450. package/src/__tests__/hexis-catalog.ts +144 -0
  451. package/src/__tests__/kb-context.ts +30 -30
  452. package/src/__tests__/kb-layout-config.test.ts +21 -0
  453. package/src/__tests__/open-change-gate.ts +1 -1
  454. package/src/__tests__/real-disk.ts +21 -0
  455. package/src/__tests__/tokens.ts +19 -0
  456. package/src/__tests__/tool-handler.ts +15 -0
  457. package/src/__tests__/tool-manuals.ts +32 -0
  458. package/src/__tests__/tool-wiring.ts +31 -0
  459. package/src/__tests__/workspace-service.ts +1 -1
  460. package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
  461. package/src/core/__tests__/compose-embed.test.ts +1 -1
  462. package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
  463. package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
  464. package/src/core/__tests__/gated-boot.test.ts +2 -2
  465. package/src/core/__tests__/lifecycle.test.ts +9 -9
  466. package/src/core/__tests__/oauth-sign-in-real-file.test.ts +179 -0
  467. package/src/core/catalog-cache-invalidation.ts +2 -2
  468. package/src/core/compose-embed.ts +3 -3
  469. package/src/core/core-ports.ts +19 -4
  470. package/src/core/create-core-server.ts +40 -26
  471. package/src/core/create-core-services.ts +92 -66
  472. package/src/core/lifecycle.ts +9 -9
  473. package/src/core-config.ts +3 -3
  474. package/src/index.ts +5 -5
  475. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
  476. package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
  477. package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
  478. package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
  479. package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
  480. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
  481. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
  482. package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
  483. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
  484. package/src/modules/access/__tests__/access.routes.prospective.test.ts +54 -14
  485. package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
  486. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
  487. package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
  488. package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
  489. package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
  490. package/src/modules/access/__tests__/holder-changes.test.ts +127 -0
  491. package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
  492. package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
  493. package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
  494. package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
  495. package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
  496. package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
  497. package/src/modules/access/access-control.interface.ts +26 -0
  498. package/src/modules/access/access-control.service.ts +93 -1
  499. package/src/modules/access/access-declarations.ts +2 -2
  500. package/src/modules/access/access-mutation.service.ts +2 -2
  501. package/src/modules/access/access-requests.routes.ts +7 -7
  502. package/src/modules/access/access-requests.service.ts +13 -13
  503. package/src/modules/access/access.routes.ts +34 -15
  504. package/src/modules/access/admin-locked-commit.ts +11 -11
  505. package/src/modules/access/admin-route-helpers.ts +5 -5
  506. package/src/modules/access/change-read-gate.ts +1 -1
  507. package/src/modules/access/groups-admin.service.ts +7 -7
  508. package/src/modules/access/index.ts +1 -1
  509. package/src/modules/access/reference-scan.ts +1 -1
  510. package/src/modules/access/roles-admin.service.ts +9 -9
  511. package/src/modules/access/synced-groups-committer.ts +11 -11
  512. package/src/modules/access/user-access-removal.service.ts +7 -7
  513. package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
  514. package/src/modules/access-model/access-errors.ts +4 -4
  515. package/src/modules/access-model/access-grammar.ts +4 -4
  516. package/src/modules/access-model/change-gate.ts +1 -1
  517. package/src/modules/access-model/roles-yaml-guard.ts +4 -4
  518. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +98 -29
  519. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +39 -12
  520. package/src/modules/agent-guide/__tests__/guide-budget.test.ts +95 -0
  521. package/src/modules/agent-guide/__tests__/guide-eval.test.ts +182 -0
  522. package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +263 -0
  523. package/src/modules/agent-guide/__tests__/tool-surface.json +514 -0
  524. package/src/modules/agent-guide/__tests__/tool-surface.test.ts +75 -0
  525. package/src/modules/agent-guide/agent-guide.tools.ts +49 -31
  526. package/src/modules/agent-guide/agent-guide.ts +165 -32
  527. package/src/modules/agent-guide/guide-budget.ts +77 -0
  528. package/src/modules/agent-guide/index.ts +12 -0
  529. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
  530. package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
  531. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +117 -11
  532. package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
  533. package/src/modules/agent-instructions/compose.ts +28 -9
  534. package/src/modules/agent-instructions/shared-file-rules.ts +62 -18
  535. package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
  536. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
  537. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
  538. package/src/modules/audit/event-classifier.ts +155 -155
  539. package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
  540. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
  541. package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
  542. package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
  543. package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
  544. package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
  545. package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
  546. package/src/modules/auth/account-erasure.service.ts +27 -9
  547. package/src/modules/auth/account-hooks.ts +34 -0
  548. package/src/modules/auth/account-switch-lock.ts +2 -2
  549. package/src/modules/auth/account.routes.ts +23 -5
  550. package/src/modules/auth/auth.service.ts +4 -4
  551. package/src/modules/auth/index.ts +1 -0
  552. package/src/modules/code-mode/code-mode.tool.ts +2 -2
  553. package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +5 -24
  554. package/src/modules/connection-probe/connection-probe.service.ts +1 -34
  555. package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
  556. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
  557. package/src/modules/database/core-schema.ts +2 -2
  558. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
  559. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
  560. package/src/modules/diff/diff.routes.ts +8 -8
  561. package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
  562. package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
  563. package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
  564. package/src/modules/embed/embed.routes.ts +1 -1
  565. package/src/modules/embed/embed.service.ts +17 -17
  566. package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
  567. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
  568. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
  569. package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
  570. package/src/modules/kb-fs/branch-name.ts +8 -8
  571. package/src/modules/kb-fs/file-change-notifier.ts +2 -2
  572. package/src/modules/kb-fs/locking-filesystem.ts +30 -30
  573. package/src/modules/kb-fs/repo-path.ts +5 -5
  574. package/src/modules/kb-fs/tmp-ref.ts +3 -3
  575. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
  576. package/src/modules/kb-sync/index.ts +1 -1
  577. package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
  578. package/src/modules/kb-sync/kb-sync.service.ts +9 -9
  579. package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
  580. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
  581. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
  582. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
  583. package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
  584. package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
  585. package/src/modules/mcp/mcp.service.ts +93 -62
  586. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
  587. package/src/modules/onboarding/onboarding.contract.ts +1 -1
  588. package/src/modules/onboarding/onboarding.routes.ts +2 -2
  589. package/src/modules/onboarding/starter-pack.service.ts +6 -6
  590. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
  591. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
  592. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
  593. package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
  594. package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
  595. package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
  596. package/src/modules/plugins/join-request-jobs.service.ts +10 -10
  597. package/src/modules/plugins/join-requests.service.ts +4 -4
  598. package/src/modules/plugins/plugin-rename.service.ts +1 -1
  599. package/src/modules/plugins/plugins.routes.ts +9 -9
  600. package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
  601. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +458 -4
  602. package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
  603. package/src/modules/secrets-vault/__tests__/oauth-live-declaration.route.test.ts +218 -0
  604. package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +39 -6
  605. package/src/modules/secrets-vault/db-secrets-vault.service.ts +728 -118
  606. package/src/modules/secrets-vault/index.ts +8 -1
  607. package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
  608. package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
  609. package/src/modules/secrets-vault/secrets-vault.contract.ts +213 -11
  610. package/src/modules/secrets-vault/secrets-vault.routes.ts +244 -45
  611. package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
  612. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
  613. package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
  614. package/src/modules/settings/connection-check.ts +1 -1
  615. package/src/modules/settings/deployment-settings.service.ts +1 -1
  616. package/src/modules/settings/git-root-folders.ts +1 -1
  617. package/src/modules/settings/oidc-check.ts +5 -18
  618. package/src/modules/settings/setup.routes.ts +1 -1
  619. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
  620. package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
  621. package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
  622. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
  623. package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
  624. package/src/modules/skills/pending-skills.service.ts +3 -3
  625. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  626. package/src/modules/skills/skills.tools.ts +1 -1
  627. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +22 -14
  628. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
  629. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
  630. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
  631. package/src/modules/tool-helpers/__tests__/route-tool-schemas.catalog.test.ts +38 -0
  632. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
  633. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
  634. package/src/modules/tool-helpers/tool-context.ts +6 -6
  635. package/src/modules/tool-helpers/tool-def.ts +1 -1
  636. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  637. package/src/modules/tool-helpers/tool.contract.ts +4 -4
  638. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
  639. package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
  640. package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +197 -11
  641. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
  642. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +132 -6
  643. package/src/modules/tool-manuals/mcp-json-discovery.ts +73 -34
  644. package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
  645. package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
  646. package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
  647. package/src/modules/tool-manuals/tool-manuals.contract.ts +63 -3
  648. package/src/modules/tool-manuals/tool-manuals.service.ts +191 -51
  649. package/src/modules/tool-manuals/tool-manuals.tools.ts +93 -28
  650. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
  651. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
  652. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +12 -119
  653. package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
  654. package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
  655. package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
  656. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
  657. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
  658. package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
  659. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
  660. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
  661. package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
  662. package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
  663. package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
  664. 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
  665. 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
  666. package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
  667. 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
  668. package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
  669. 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
  670. package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
  671. package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
  672. 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
  673. package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
  674. package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
  675. package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
  676. package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
  677. package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
  678. package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
  679. package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
  680. 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
  681. 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
  682. 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
  683. package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
  684. package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
  685. package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
  686. package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
  687. package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +52 -48
  688. package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
  689. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
  690. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
  691. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
  692. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
  693. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
  694. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
  695. package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
  696. package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
  697. package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
  698. package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
  699. package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
  700. package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
  701. package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
  702. package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
  703. package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
  704. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
  705. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
  706. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
  707. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
  708. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
  709. package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
  710. package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
  711. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
  712. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
  713. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
  714. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
  715. package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
  716. package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
  717. package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
  718. package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
  719. package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
  720. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
  721. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
  722. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
  723. package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
  724. package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
  725. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
  726. package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
  727. package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
  728. package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
  729. package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
  730. package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
  731. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
  732. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
  733. package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
  734. package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
  735. package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
  736. package/src/modules/{workflow → version-control}/index.ts +6 -5
  737. package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
  738. package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
  739. package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
  740. package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
  741. package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
  742. package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
  743. package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
  744. package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
  745. package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
  746. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
  747. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
  748. package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
  749. package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
  750. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
  751. package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
  752. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
  753. package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
  754. package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
  755. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
  756. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
  757. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
  758. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
  759. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
  760. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
  761. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
  762. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
  763. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
  764. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
  765. package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
  766. package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
  767. package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
  768. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +12 -14
  769. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
  770. package/src/modules/workspace/__tests__/workspace.tools.test.ts +182 -75
  771. package/src/modules/workspace/agent-access.gate.ts +6 -6
  772. package/src/modules/workspace/git-internals.middleware.ts +2 -2
  773. package/src/modules/workspace/kb-repository.ts +1 -1
  774. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
  775. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
  776. package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
  777. package/src/modules/workspace/startup/kb-git.ts +1 -1
  778. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
  779. package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
  780. package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
  781. package/src/modules/workspace/startup/steps/template-source.ts +21 -6
  782. package/src/modules/workspace/workspace-tmp.ts +4 -4
  783. package/src/modules/workspace/workspace.routes.ts +26 -26
  784. package/src/modules/workspace/workspace.service.ts +11 -11
  785. package/src/modules/workspace/workspace.tools.ts +90 -30
  786. package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
  787. package/src/shared/__tests__/http-errors.test.ts +4 -4
  788. package/src/shared/__tests__/read-capped.test.ts +68 -0
  789. package/src/shared/canonical-file-identity.ts +5 -5
  790. package/src/shared/domain-errors.ts +44 -44
  791. package/src/shared/git.contract.ts +1 -1
  792. package/src/shared/http-errors.ts +3 -3
  793. package/src/shared/kb-context.ts +130 -130
  794. package/src/shared/oauth-token-error.ts +46 -0
  795. package/src/shared/pending-proposals.ts +4 -4
  796. package/src/shared/read-capped.ts +40 -0
  797. package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
  798. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
  799. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
  800. package/src/tenancy/index.ts +35 -35
  801. package/src/tenancy/static-tenant-source.ts +1 -1
  802. package/src/tenancy/tenant-host.ts +261 -261
  803. package/src/tenancy/tenant-runtime.ts +208 -208
  804. package/src/tenancy/tenant-source.contract.ts +59 -59
  805. package/agent-guide/finding-things.md +0 -7
  806. package/agent-guide/introduction.md +0 -27
  807. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
  808. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
  809. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
  810. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
  811. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
  812. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
  813. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
  814. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
  815. package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
  816. package/dist/modules/workflow/change-request-hooks.js.map +0 -1
  817. package/dist/modules/workflow/event-bus.d.ts.map +0 -1
  818. package/dist/modules/workflow/event-bus.js.map +0 -1
  819. package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
  820. package/dist/modules/workflow/events-delivery.js.map +0 -1
  821. package/dist/modules/workflow/events.routes.d.ts.map +0 -1
  822. package/dist/modules/workflow/events.routes.js.map +0 -1
  823. package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
  824. package/dist/modules/workflow/file-lock.service.js.map +0 -1
  825. package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
  826. package/dist/modules/workflow/git/change-request-link.js.map +0 -1
  827. package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
  828. package/dist/modules/workflow/git/git-version.js.map +0 -1
  829. package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
  830. package/dist/modules/workflow/git/git.service.js.map +0 -1
  831. package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
  832. package/dist/modules/workflow/git/merge-commit.js.map +0 -1
  833. package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
  834. package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
  835. package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
  836. package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
  837. package/dist/modules/workflow/index.d.ts.map +0 -1
  838. package/dist/modules/workflow/index.js.map +0 -1
  839. package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
  840. package/dist/modules/workflow/pending-commits.service.js.map +0 -1
  841. package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
  842. package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
  843. package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
  844. package/dist/modules/workflow/read-on-branch.js.map +0 -1
  845. package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
  846. package/dist/modules/workflow/recovery-bot.js.map +0 -1
  847. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
  848. package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
  849. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
  850. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
  851. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
  852. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
  853. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
  854. package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
  855. package/dist/modules/workflow/sanitize-error.js.map +0 -1
  856. package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
  857. package/dist/modules/workflow/workflow-hooks.js.map +0 -1
  858. package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
  859. package/dist/modules/workflow/workflow.routes.js.map +0 -1
  860. package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
  861. package/dist/modules/workflow/workflow.service.js.map +0 -1
  862. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
  863. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
  864. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
  865. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
  866. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
  867. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
  868. /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
  869. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
  870. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
  871. /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
  872. /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
  873. /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
  874. /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
  875. /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
  876. /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
  877. /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
  878. /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
  879. /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
  880. /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
  881. /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
  882. /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
  883. /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
  884. /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
  885. /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
  886. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
  887. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
  888. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
  889. /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
  890. /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
  891. /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
  892. /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
  893. /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
  894. /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
  895. /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
  896. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
  897. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
  898. /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
  899. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
  900. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
  901. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
  902. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
  903. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
  904. /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
  905. /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
  906. /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
  907. /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
  908. /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
 
20
15
  import path from 'node:path';
@@ -55,7 +50,7 @@ import type {
55
50
  FileLock,
56
51
  FolderChangeRequest,
57
52
  FolderChangeRequestRemoval,
58
- IWorkflowService,
53
+ IVersionControlService,
59
54
  MergeBranchOutcome,
60
55
  MergeChangeRequestOutcome,
61
56
  MergeResolution,
@@ -79,17 +74,17 @@ import { changeRequests, pgErrorCode } from '../database/index.js';
79
74
  import type { GitService } from './git/git.service.js';
80
75
  import { redactSecret } from '../../shared/redact-secret.js';
81
76
  import type { PullRequestService } from './git/pull-request.service.js';
82
- import type { IReviewWorkflowService } from './review-workflow/review-workflow.interface.js';
77
+ import type { IChangeRequestReviewService } from './change-request-review/change-request-review.interface.js';
83
78
  import type { WorkspaceService } from '../workspace/index.js';
84
79
  import { workspaceIdForBranch, branchForWorkspaceId } from '../../shared/workspace-id.js';
85
80
  import type { IAccessControl } from '../access/index.js';
86
81
  import type { FileLockService } from './file-lock.service.js';
87
82
  import { canonicalFileIdentity } from '../../shared/canonical-file-identity.js';
88
83
  import type { PendingCommitsService } from './pending-commits.service.js';
89
- import type { WorkflowEventBus } from './event-bus.js';
84
+ import type { VersionControlEventBus } from './event-bus.js';
90
85
  import { describeSyncFailure, sanitizeError } from './sanitize-error.js';
91
86
  import type { FileChangeNotifier } from '../kb-fs/index.js';
92
- import { WorkflowHooks } from './workflow-hooks.js';
87
+ import { VersionControlHooks } from './version-control-hooks.js';
93
88
  import {
94
89
  ChangeRequestHooks,
95
90
  type ChangeRequestPerson,
@@ -109,8 +104,8 @@ import {
109
104
  PullRebaseConflictError,
110
105
  PushNeedsAgentResolutionError,
111
106
  RemoteBranchGoneError,
112
- WorkflowDomainError,
113
- WorkflowValidationError,
107
+ VersionControlDomainError,
108
+ VersionControlValidationError,
114
109
  } from '../../shared/domain-errors.js';
115
110
  import { RECOVERY_BOT_EMAIL, RECOVERY_BOT_NAME } from './recovery-bot.js';
116
111
  import { AccessDeniedError, EVERYONE_CANONICAL, type IChangeReadGate } from '../access-model/index.js';
@@ -196,7 +191,7 @@ function redactTokens(msg: string, token: string | null | undefined): string {
196
191
  */
197
192
  function assertDescriptionFits(description: string | undefined): void {
198
193
  if (description !== undefined && description.length > CHANGE_REQUEST_DESCRIPTION_MAX) {
199
- throw new WorkflowValidationError(
194
+ throw new VersionControlValidationError(
200
195
  `A change request's description is at most ${CHANGE_REQUEST_DESCRIPTION_MAX} characters; this one would have ${description.length}.`,
201
196
  );
202
197
  }
@@ -204,13 +199,13 @@ function assertDescriptionFits(description: string | undefined): void {
204
199
 
205
200
  function assertEditable(state: string): void {
206
201
  if (state === 'merged') {
207
- throw new WorkflowDomainError(
202
+ throw new VersionControlDomainError(
208
203
  'This change request has already been applied; its title and description can no longer be changed.',
209
204
  409,
210
205
  );
211
206
  }
212
207
  if (state !== 'open') {
213
- throw new WorkflowDomainError(
208
+ throw new VersionControlDomainError(
214
209
  'This change request is closed; its title and description can no longer be changed.',
215
210
  409,
216
211
  );
@@ -223,7 +218,7 @@ type EligibleWritersAtRef = Awaited<ReturnType<IAccessControl['eligibleWritersFo
223
218
  /**
224
219
  * The one question the open asks of accounts: which of these addresses have
225
220
  * a live account. `AuthService.findActiveAccountsByEmail` answers it in a
226
- * single indexed read; the shape is spelled here so the workflow module
221
+ * single indexed read; the shape is spelled here so the version-control module
227
222
  * imports nothing of auth's. Keyed by the canonical address asked for.
228
223
  */
229
224
  export interface ApproverAccounts {
@@ -254,13 +249,13 @@ function folderPrefix(folder: string): string {
254
249
  return `${folder.replace(/\/+$/, '')}/`;
255
250
  }
256
251
 
257
- export class WorkflowService implements IWorkflowService {
252
+ export class VersionControlService implements IVersionControlService {
258
253
  /**
259
254
  * Concrete `PullRequestService` (not the interface) so the facade can call
260
255
  * `invalidateDetailCache` after a mutation lands — the legacy routes do
261
- * this inline, and the workflow facade absorbs that responsibility so its
256
+ * this inline, and the version-control facade absorbs that responsibility so its
262
257
  * own routes stay free of cache plumbing. Replaceable later when the PR
263
- * detail cache moves into the workflow module proper (PLAN step 5).
258
+ * detail cache moves into the version-control module proper (PLAN step 5).
264
259
  *
265
260
  * `db` + `workspaceService` + `kbDirName` back `openChangeRequest`, which
266
261
  * inserts a change_requests row and runs the local auto-merge — no provider
@@ -268,10 +263,10 @@ export class WorkflowService implements IWorkflowService {
268
263
  */
269
264
  /**
270
265
  * Concrete `GitService` (not the interface) so the facade can reach
271
- * `mergeFromOrigin` — the local auto-merge primitive the workflow needs
266
+ * `mergeFromOrigin` — the local auto-merge primitive the version-control service needs
272
267
  * for `openChangeRequest` + `updateFromTarget` (PLAN §1). The interface
273
268
  * intentionally doesn't surface that method because it's an internal
274
- * implementation detail of the workflow auto-merge story; nothing outside
269
+ * implementation detail of the version-control auto-merge story; nothing outside
275
270
  * the facade should call it directly.
276
271
  */
277
272
  private get kbDirName(): string {
@@ -282,7 +277,7 @@ export class WorkflowService implements IWorkflowService {
282
277
  private readonly db: Database,
283
278
  private readonly git: GitService,
284
279
  private readonly prs: PullRequestService,
285
- private readonly reviewWorkflow: IReviewWorkflowService,
280
+ private readonly changeRequestReview: IChangeRequestReviewService,
286
281
  private readonly workspaceService: WorkspaceService,
287
282
  private readonly accessControl: IAccessControl,
288
283
  private readonly fileLocks: FileLockService,
@@ -308,7 +303,7 @@ export class WorkflowService implements IWorkflowService {
308
303
  * become no-ops in that case (we null-guard each call). In a real
309
304
  * boot the composition root always wires one.
310
305
  */
311
- private readonly events?: WorkflowEventBus,
306
+ private readonly events?: VersionControlEventBus,
312
307
  /**
313
308
  * In-process post-commit hook (distinct from the SSE `events` bus): fires
314
309
  * after a file's change is committed + pushed so backend services (catalog
@@ -317,15 +312,15 @@ export class WorkflowService implements IWorkflowService {
317
312
  */
318
313
  private readonly fileChanges?: FileChangeNotifier,
319
314
  /**
320
- * Workflow lifecycle-hook registry (see `workflow-hooks.ts`). PUBLIC so
315
+ * Version-control lifecycle-hook registry (see `version-control-hooks.ts`). PUBLIC so
321
316
  * the composition root registers module-owned behavior against it
322
- * (`core.workflowService.hooks.onCommitValidation(…)` /
317
+ * (`core.versionControlService.hooks.onCommitValidation(…)` /
323
318
  * `.onPreWrite(…)`) after `createCoreServices` returns. The composition
324
319
  * root passes the SAME instance `GitService` and the agent-access gate
325
320
  * consult; the default keeps test constructions (which don't exercise
326
321
  * hooks) unchanged.
327
322
  */
328
- public readonly hooks: WorkflowHooks = new WorkflowHooks(),
323
+ public readonly hooks: VersionControlHooks = new VersionControlHooks(),
329
324
  /**
330
325
  * The seam a deployment's notification extends when a request is opened
331
326
  * (see `change-request-hooks.ts`). The composition root passes the SAME
@@ -343,7 +338,7 @@ export class WorkflowService implements IWorkflowService {
343
338
  // The type already requires it; this holds for a caller the compiler did
344
339
  // not see (plain JavaScript, a positional slip in a harness).
345
340
  if (!changeGate || typeof changeGate.assertMayChange !== 'function') {
346
- throw new Error('WorkflowService requires a read-before-write gate (IChangeReadGate)');
341
+ throw new Error('VersionControlService requires a read-before-write gate (IChangeReadGate)');
347
342
  }
348
343
  }
349
344
 
@@ -518,7 +513,7 @@ export class WorkflowService implements IWorkflowService {
518
513
  // this branch is the deleter's own to withdraw; a request INTO it
519
514
  // belongs to someone else, and telling the branch owner to
520
515
  // "withdraw" it points them at a verb they cannot use.
521
- throw new WorkflowValidationError(
516
+ throw new VersionControlValidationError(
522
517
  open.end === 'source'
523
518
  ? `Branch "${name}" has an open change request (#${open.number}). ` +
524
519
  `Withdraw or decline it before deleting the branch.`
@@ -926,7 +921,7 @@ export class WorkflowService implements IWorkflowService {
926
921
  // operation, which was the only place the legacy DirtyWorkingTreeError
927
922
  // could surface as a user-facing 409.
928
923
 
929
- // `forkCurrentToDraft` removed (see IWorkflowService): per-branch workspaces
924
+ // `forkCurrentToDraft` removed (see IVersionControlService): per-branch workspaces
930
925
  // make the dirty-tree-carry-along escape hatch impossible by construction.
931
926
 
932
927
  branchStatus(workspaceId: string): Promise<BranchWorkspaceStatus> {
@@ -1140,7 +1135,7 @@ export class WorkflowService implements IWorkflowService {
1140
1135
  // this sync's — never a save that landed alongside. Capped: a bulk
1141
1136
  // import would otherwise fan hundreds of events out to say what one
1142
1137
  // refresh says.
1143
- if (announce.changedPaths.length <= WorkflowService.SYNC_FILE_EVENT_CAP) {
1138
+ if (announce.changedPaths.length <= VersionControlService.SYNC_FILE_EVENT_CAP) {
1144
1139
  for (const p of announce.changedPaths) {
1145
1140
  this.events?.emit({
1146
1141
  kind: 'file-changed',
@@ -1549,7 +1544,7 @@ export class WorkflowService implements IWorkflowService {
1549
1544
  const targetPath = canonicalFileIdentity(rawPath);
1550
1545
  const lock = await this.fileLocks.get(workspaceId, branch, targetPath);
1551
1546
  if (!lock || lock.holderUserId !== user.id) {
1552
- throw new WorkflowValidationError(
1547
+ throw new VersionControlValidationError(
1553
1548
  `Cannot commit "${targetPath}": you don't hold the lock.`,
1554
1549
  { kind: 'lock-not-held', branch, path: targetPath },
1555
1550
  );
@@ -1560,7 +1555,7 @@ export class WorkflowService implements IWorkflowService {
1560
1555
  // holder checkpoint bytes onto a path — machine-owned files included —
1561
1556
  // whose write rule they never passed.
1562
1557
  if (lock.mode === 'coordination') {
1563
- throw new WorkflowValidationError(
1558
+ throw new VersionControlValidationError(
1564
1559
  `Cannot commit "${targetPath}": the lock is a coordination hold, which grants no write authority.`,
1565
1560
  { kind: 'coordination-hold', branch, path: targetPath },
1566
1561
  );
@@ -1683,7 +1678,7 @@ export class WorkflowService implements IWorkflowService {
1683
1678
  lockLog.warn(
1684
1679
  `RELEASE refused ws=${workspaceId} branch=${branch} path=${targetPath} user=${user.id} → ${lock ? `held by ${lock.holderUserId}` : 'no lock row'}`,
1685
1680
  );
1686
- throw new WorkflowValidationError(
1681
+ throw new VersionControlValidationError(
1687
1682
  `Cannot release lock on "${targetPath}": not held by you (or no longer exists).`,
1688
1683
  { kind: 'lock-not-held', branch, path: targetPath },
1689
1684
  );
@@ -1701,7 +1696,7 @@ export class WorkflowService implements IWorkflowService {
1701
1696
  lockLog.warn(
1702
1697
  `RELEASE refused ws=${workspaceId} branch=${branch} path=${targetPath} user=${user.id} → coordination hold (no commit may be enqueued)`,
1703
1698
  );
1704
- throw new WorkflowValidationError(
1699
+ throw new VersionControlValidationError(
1705
1700
  `Cannot release lock on "${targetPath}" with a commit: it is a coordination hold. Use releaseLockNoCommit.`,
1706
1701
  { kind: 'coordination-hold', branch, path: targetPath },
1707
1702
  );
@@ -1896,7 +1891,7 @@ export class WorkflowService implements IWorkflowService {
1896
1891
  * still fails." The full rationale lives at the call site in
1897
1892
  * `releaseLock`; this method is the de-duplicated body.
1898
1893
  *
1899
- * EVERY workflow push goes through here — saves, sharing a branch, opening
1894
+ * EVERY version-control push goes through here — saves, sharing a branch, opening
1900
1895
  * a request, update-from-target, the decline revert, the roles.yaml
1901
1896
  * restore — so a push the host refuses answers one way everywhere: the
1902
1897
  * commit stays local, the sync banner goes up, and the caller gets the
@@ -2061,7 +2056,7 @@ export class WorkflowService implements IWorkflowService {
2061
2056
  //
2062
2057
  // One refinement for COORDINATION holds: the holder never legitimately
2063
2058
  // wrote the path (the write paths refuse coordination possession), so
2064
- // anything dirty there is either bytes smuggled in around the workflow —
2059
+ // anything dirty there is either bytes smuggled in around version control —
2065
2060
  // which the discard rightly wipes — or a PRIOR save's work whose commit
2066
2061
  // is still queued. Only the queue can tell those apart: when a live
2067
2062
  // pending-commit row exists for the path, the dirty bytes are that
@@ -2279,15 +2274,15 @@ export class WorkflowService implements IWorkflowService {
2279
2274
  user: AuthUser,
2280
2275
  input: OpenChangeRequestInput,
2281
2276
  ): Promise<ChangeRequestDetail & { notified: string[] }> {
2282
- if (!input.sourceBranch) throw new WorkflowValidationError('sourceBranch is required');
2283
- if (!input.targetBranch) throw new WorkflowValidationError('targetBranch is required');
2277
+ if (!input.sourceBranch) throw new VersionControlValidationError('sourceBranch is required');
2278
+ if (!input.targetBranch) throw new VersionControlValidationError('targetBranch is required');
2284
2279
  if (input.sourceBranch === input.targetBranch) {
2285
- throw new WorkflowValidationError('source and target branches must differ');
2280
+ throw new VersionControlValidationError('source and target branches must differ');
2286
2281
  }
2287
- if (!input.title?.trim()) throw new WorkflowValidationError('title is required');
2282
+ if (!input.title?.trim()) throw new VersionControlValidationError('title is required');
2288
2283
  assertDescriptionFits(input.description?.trim());
2289
2284
  if (this.kb.isProtectedBranch(input.sourceBranch)) {
2290
- throw new WorkflowValidationError(
2285
+ throw new VersionControlValidationError(
2291
2286
  `Cannot open a change request *from* a protected branch ("${input.sourceBranch}").`,
2292
2287
  { kind: 'source-is-protected', sourceBranch: input.sourceBranch },
2293
2288
  );
@@ -2334,7 +2329,7 @@ export class WorkflowService implements IWorkflowService {
2334
2329
 
2335
2330
  // Auto-merge target → source. `mergeFromOrigin` enforces "current
2336
2331
  // branch == source" and "clean working tree" before attempting; both
2337
- // failures surface as structured workflow errors that pass straight
2332
+ // failures surface as structured version-control errors that pass straight
2338
2333
  // through to the caller.
2339
2334
  const mergeOutcome = await this.git.mergeFromOrigin(
2340
2335
  workspaceId,
@@ -2428,7 +2423,7 @@ export class WorkflowService implements IWorkflowService {
2428
2423
  // rival was merged/closed in the microsecond between the conflict and
2429
2424
  // this re-query), don't fabricate a #0 — report it as a transient race.
2430
2425
  if (!existing) {
2431
- throw new WorkflowValidationError(
2426
+ throw new VersionControlValidationError(
2432
2427
  `Change request for "${input.sourceBranch}" → "${input.targetBranch}" ` +
2433
2428
  'raced with a concurrent open/close; retry.',
2434
2429
  { kind: 'open-change-request-failed' },
@@ -2446,7 +2441,7 @@ export class WorkflowService implements IWorkflowService {
2446
2441
  // openChangeRequest finds no duplicate, re-runs the (idempotent, already
2447
2442
  // up-to-date) auto-merge, and inserts the row.
2448
2443
  const rawMsg = err instanceof Error ? err.message : String(err);
2449
- throw new WorkflowValidationError(
2444
+ throw new VersionControlValidationError(
2450
2445
  `Failed to open change request: ${redactTokens(rawMsg, this.git.credentials?.token())}`,
2451
2446
  { kind: 'open-change-request-failed' },
2452
2447
  );
@@ -2492,7 +2487,7 @@ export class WorkflowService implements IWorkflowService {
2492
2487
  detail: null,
2493
2488
  pushRefused: null,
2494
2489
  detailError:
2495
- detailError ?? new WorkflowValidationError(`Created change request #${prNumber} but could not fetch its detail`),
2490
+ detailError ?? new VersionControlValidationError(`Created change request #${prNumber} but could not fetch its detail`),
2496
2491
  };
2497
2492
  });
2498
2493
 
@@ -2622,19 +2617,19 @@ export class WorkflowService implements IWorkflowService {
2622
2617
  patches: false,
2623
2618
  });
2624
2619
  if (!detail) {
2625
- throw new WorkflowValidationError(
2620
+ throw new VersionControlValidationError(
2626
2621
  `Change request #${number} not found.`,
2627
2622
  { kind: 'change-request-not-found', number },
2628
2623
  );
2629
2624
  }
2630
2625
  if (detail.state !== 'open') {
2631
- throw new WorkflowValidationError(
2626
+ throw new VersionControlValidationError(
2632
2627
  `Change request #${number} is ${detail.state} — only open requests can refresh from target.`,
2633
2628
  { kind: 'change-request-not-open', state: detail.state },
2634
2629
  );
2635
2630
  }
2636
2631
  if (!detail.viewerCanUpdate) {
2637
- throw new WorkflowDomainError(
2632
+ throw new VersionControlDomainError(
2638
2633
  'Only the author of this change request, or someone who may apply it, can update it.',
2639
2634
  403,
2640
2635
  );
@@ -2780,7 +2775,7 @@ export class WorkflowService implements IWorkflowService {
2780
2775
  headBeforeMerge,
2781
2776
  headAfterMerge,
2782
2777
  );
2783
- await this.reviewWorkflow.carryApprovalsForward(
2778
+ await this.changeRequestReview.carryApprovalsForward(
2784
2779
  number,
2785
2780
  headBeforeMerge,
2786
2781
  headAfterMerge,
@@ -2806,7 +2801,7 @@ export class WorkflowService implements IWorkflowService {
2806
2801
  viewerEmail: user.email,
2807
2802
  });
2808
2803
  if (!refreshed) {
2809
- throw new WorkflowValidationError(
2804
+ throw new VersionControlValidationError(
2810
2805
  `Refreshed change request #${number} but could not re-fetch its detail.`,
2811
2806
  );
2812
2807
  }
@@ -2825,7 +2820,7 @@ export class WorkflowService implements IWorkflowService {
2825
2820
  ): Promise<FileApproval[]> {
2826
2821
  // Taken BEFORE the approval lands (see `clearApplyFailure`).
2827
2822
  const approvedAfter = new Date();
2828
- const approvals = await this.reviewWorkflow.approveFile(
2823
+ const approvals = await this.changeRequestReview.approveFile(
2829
2824
  number,
2830
2825
  path,
2831
2826
  user,
@@ -2865,7 +2860,7 @@ export class WorkflowService implements IWorkflowService {
2865
2860
  authorIdHash: string | null,
2866
2861
  workspaceId: string,
2867
2862
  ): Promise<FileApproval[]> {
2868
- const approvals = await this.reviewWorkflow.unapproveFile(
2863
+ const approvals = await this.changeRequestReview.unapproveFile(
2869
2864
  number,
2870
2865
  path,
2871
2866
  user,
@@ -2933,9 +2928,9 @@ export class WorkflowService implements IWorkflowService {
2933
2928
  repoRelPath: string,
2934
2929
  ): Promise<{ closed: boolean; remainingPaths: string[] }> {
2935
2930
  const summary = await this.prs.getPr(number);
2936
- if (!summary) throw new WorkflowDomainError('change request not found', 404);
2931
+ if (!summary) throw new VersionControlDomainError('change request not found', 404);
2937
2932
  if (summary.state !== 'open') {
2938
- throw new WorkflowDomainError('This change request is no longer open.', 422);
2933
+ throw new VersionControlDomainError('This change request is no longer open.', 422);
2939
2934
  }
2940
2935
  const baseBranch = summary.base;
2941
2936
  const headBranch = summary.branch;
@@ -2954,7 +2949,7 @@ export class WorkflowService implements IWorkflowService {
2954
2949
  // The verb acts on the request as it is NOW — never a cached file list.
2955
2950
  const paths = await this.git.changedPathsForPr(ws.id, baseBranch, headBranch);
2956
2951
  if (!paths.includes(repoRelPath)) {
2957
- throw new WorkflowDomainError('That file is not part of this change request.', 422);
2952
+ throw new VersionControlDomainError('That file is not part of this change request.', 422);
2958
2953
  }
2959
2954
 
2960
2955
  const canApprove = await this.accessControl.canWriteAtRef(
@@ -2964,7 +2959,7 @@ export class WorkflowService implements IWorkflowService {
2964
2959
  repoRelPath,
2965
2960
  );
2966
2961
  if (canApprove !== true) {
2967
- throw new WorkflowDomainError(
2962
+ throw new VersionControlDomainError(
2968
2963
  'Only an eligible approver of this file can revert it — declining takes the same permission as accepting.',
2969
2964
  403,
2970
2965
  );
@@ -2972,7 +2967,7 @@ export class WorkflowService implements IWorkflowService {
2972
2967
 
2973
2968
  const mergeBase = await this.git.mergeBaseForPr(ws.id, baseBranch, headBranch);
2974
2969
  if (!mergeBase) {
2975
- throw new WorkflowDomainError('These branches share no history to revert to.', 422);
2970
+ throw new VersionControlDomainError('These branches share no history to revert to.', 422);
2976
2971
  }
2977
2972
 
2978
2973
  const placeholder = await this.placeholderRevertedWith(ws.id, mergeBase, repoRelPath, paths);
@@ -2991,7 +2986,7 @@ export class WorkflowService implements IWorkflowService {
2991
2986
  const lockPath = `${this.kbDirName}/${p}`;
2992
2987
  const lock = await this.fileLocks.acquire(ws.id, headBranch, lockPath, user);
2993
2988
  if (!lock.acquired) {
2994
- throw new WorkflowDomainError(
2989
+ throw new VersionControlDomainError(
2995
2990
  p === repoRelPath
2996
2991
  ? `${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`
2997
2992
  : `The folder of ${repoRelPath} is being changed by ${lock.lock.holderName} — try again once the edit settles.`,
@@ -3079,7 +3074,7 @@ export class WorkflowService implements IWorkflowService {
3079
3074
  log.warn(
3080
3075
  `changedPathsForPr failed for #${cr.number} under folder ${printable(folder)}: ${printable(sanitizeError(err))}`,
3081
3076
  );
3082
- throw new WorkflowDomainError(
3077
+ throw new VersionControlDomainError(
3083
3078
  `Couldn't read what change request #${cr.number} proposes — try again in a moment.`,
3084
3079
  500,
3085
3080
  );
@@ -3159,7 +3154,7 @@ export class WorkflowService implements IWorkflowService {
3159
3154
  const requests = await this.changeRequestsUnderFolder(folder, user);
3160
3155
  const refused = requests.filter((r) => !r.mayRemove);
3161
3156
  if (refused.length > 0) {
3162
- throw new WorkflowDomainError(
3157
+ throw new VersionControlDomainError(
3163
3158
  `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.`,
3164
3159
  403,
3165
3160
  );
@@ -3185,7 +3180,7 @@ export class WorkflowService implements IWorkflowService {
3185
3180
  log.warn(
3186
3181
  `pull failed for #${summary.number} before removing folder ${printable(folder)}: ${printable(sanitizeError(err))}`,
3187
3182
  );
3188
- throw new WorkflowDomainError(
3183
+ throw new VersionControlDomainError(
3189
3184
  `#${summary.number} could not be brought up to date, so nothing was removed — try again in a moment.`,
3190
3185
  409,
3191
3186
  );
@@ -3198,7 +3193,7 @@ export class WorkflowService implements IWorkflowService {
3198
3193
  // file need not be one of it — so the request has to be asked about again.
3199
3194
  const unjudged = paths.filter((p) => !request.paths.includes(p));
3200
3195
  if (unjudged.length > 0) {
3201
- throw new WorkflowDomainError(
3196
+ throw new VersionControlDomainError(
3202
3197
  `#${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.`,
3203
3198
  409,
3204
3199
  );
@@ -3207,7 +3202,7 @@ export class WorkflowService implements IWorkflowService {
3207
3202
  if (paths.length > 0) {
3208
3203
  mergeBase = await this.git.mergeBaseForPr(ws.id, summary.base, summary.branch);
3209
3204
  if (!mergeBase) {
3210
- throw new WorkflowDomainError(`#${summary.number} shares no history with its target to revert to.`, 422);
3205
+ throw new VersionControlDomainError(`#${summary.number} shares no history with its target to revert to.`, 422);
3211
3206
  }
3212
3207
  }
3213
3208
  plans.push({ number: summary.number, branch: summary.branch, wsId: ws.id, paths, mergeBase });
@@ -3237,7 +3232,7 @@ export class WorkflowService implements IWorkflowService {
3237
3232
  group.paths.push({ path: repoRelPath, mergeBase: plan.mergeBase! });
3238
3233
  } else if (seen.mergeBase !== plan.mergeBase) {
3239
3234
  const sharing = group.plans.map((other) => `#${other.number}`).join(', ');
3240
- throw new WorkflowDomainError(
3235
+ throw new VersionControlDomainError(
3241
3236
  `${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.`,
3242
3237
  422,
3243
3238
  );
@@ -3267,7 +3262,7 @@ export class WorkflowService implements IWorkflowService {
3267
3262
  const lockPath = `${this.kbDirName}/${repoRelPath}`;
3268
3263
  const lock = await this.fileLocks.acquire(group.wsId, group.branch, lockPath, user);
3269
3264
  if (!lock.acquired) {
3270
- throw new WorkflowDomainError(
3265
+ throw new VersionControlDomainError(
3271
3266
  `${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`,
3272
3267
  409,
3273
3268
  );
@@ -3350,7 +3345,7 @@ export class WorkflowService implements IWorkflowService {
3350
3345
  log.warn(
3351
3346
  `push failed for ${failed} removing folder ${printable(folder)}: ${printable(sanitizeError(pushFailure.err))}`,
3352
3347
  );
3353
- throw new WorkflowDomainError(
3348
+ throw new VersionControlDomainError(
3354
3349
  `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.`,
3355
3350
  500,
3356
3351
  );
@@ -3374,9 +3369,9 @@ export class WorkflowService implements IWorkflowService {
3374
3369
  */
3375
3370
  async deleteChangeRequest(number: number, user: AuthUser): Promise<void> {
3376
3371
  const summary = await this.prs.getPr(number);
3377
- if (!summary) throw new WorkflowDomainError('change request not found', 404);
3372
+ if (!summary) throw new VersionControlDomainError('change request not found', 404);
3378
3373
  if (summary.state === 'merged') {
3379
- throw new WorkflowDomainError('This change request has already been applied.', 422);
3374
+ throw new VersionControlDomainError('This change request has already been applied.', 422);
3380
3375
  }
3381
3376
 
3382
3377
  // Which `roles.yaml` authorizes this? The base branch's, exactly as every
@@ -3401,7 +3396,7 @@ export class WorkflowService implements IWorkflowService {
3401
3396
  try {
3402
3397
  await this.workspaceService.ensureRemotesFetched(ws.id, { strict: true });
3403
3398
  } catch {
3404
- throw new WorkflowDomainError(
3399
+ throw new VersionControlDomainError(
3405
3400
  `Could not verify the base branch "${summary.base}" — origin was unreachable. Retry in a moment.`,
3406
3401
  409,
3407
3402
  );
@@ -3424,7 +3419,7 @@ export class WorkflowService implements IWorkflowService {
3424
3419
  // attempt the sweep has either closed the row or shown the base alive.
3425
3420
  if (isAdmin === null) {
3426
3421
  this.kickDeletedBranchSweep();
3427
- throw new WorkflowDomainError(
3422
+ throw new VersionControlDomainError(
3428
3423
  `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.`,
3429
3424
  409,
3430
3425
  );
@@ -3439,7 +3434,7 @@ export class WorkflowService implements IWorkflowService {
3439
3434
  // stay honest.
3440
3435
  const callerIsAuthor = !!(summary.authorId && summary.authorId === hashEmail(user.email));
3441
3436
  if (!callerIsAuthor && isAdmin !== true) {
3442
- throw new WorkflowDomainError("Only the request's author or an admin can delete it.", 403);
3437
+ throw new VersionControlDomainError("Only the request's author or an admin can delete it.", 403);
3443
3438
  }
3444
3439
 
3445
3440
  // Close first (idempotent: an already-closed request just skips to the
@@ -3456,7 +3451,7 @@ export class WorkflowService implements IWorkflowService {
3456
3451
  } else {
3457
3452
  const fresh = await this.prs.getPr(number);
3458
3453
  if (fresh?.state === 'merged') {
3459
- throw new WorkflowDomainError('This change request has already been applied.', 422);
3454
+ throw new VersionControlDomainError('This change request has already been applied.', 422);
3460
3455
  }
3461
3456
  }
3462
3457
  await this.retireMergedSourceBranch(number, summary.base, user);
@@ -3495,7 +3490,7 @@ export class WorkflowService implements IWorkflowService {
3495
3490
  await this.workspaceService.ensureRemotesFetched(workspaceId, { strict: true, force: true });
3496
3491
  } catch {
3497
3492
  this.kickDeletedBranchSweep();
3498
- throw new WorkflowDomainError(
3493
+ throw new VersionControlDomainError(
3499
3494
  `Could not verify the base branch "${baseBranch}" — origin was unreachable. Retry in a moment.`,
3500
3495
  409,
3501
3496
  );
@@ -3512,7 +3507,7 @@ export class WorkflowService implements IWorkflowService {
3512
3507
  // read and a batch lookup done for nothing.
3513
3508
  if (isAdmin === null) {
3514
3509
  this.kickDeletedBranchSweep();
3515
- throw new WorkflowDomainError(
3510
+ throw new VersionControlDomainError(
3516
3511
  `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.`,
3517
3512
  409,
3518
3513
  );
@@ -3561,16 +3556,16 @@ export class WorkflowService implements IWorkflowService {
3561
3556
  const description = input.description === undefined ? undefined : input.description.trim();
3562
3557
  const appended = input.appendDescription === undefined ? undefined : input.appendDescription.trim();
3563
3558
  if (title === undefined && description === undefined && appended === undefined) {
3564
- throw new WorkflowValidationError('Give a new title, a new description, or both.');
3559
+ throw new VersionControlValidationError('Give a new title, a new description, or both.');
3565
3560
  }
3566
3561
  if (description !== undefined && appended !== undefined) {
3567
- throw new WorkflowValidationError('Give either a new description or text to append to it, not both.');
3562
+ throw new VersionControlValidationError('Give either a new description or text to append to it, not both.');
3568
3563
  }
3569
3564
  if (title !== undefined && title.length === 0) {
3570
- throw new WorkflowValidationError('A change request needs a title; it cannot be empty.');
3565
+ throw new VersionControlValidationError('A change request needs a title; it cannot be empty.');
3571
3566
  }
3572
3567
  if (title !== undefined && title.length > CHANGE_REQUEST_TITLE_MAX) {
3573
- throw new WorkflowValidationError(
3568
+ throw new VersionControlValidationError(
3574
3569
  `A change request's title is at most ${CHANGE_REQUEST_TITLE_MAX} characters; this one has ${title.length}.`,
3575
3570
  );
3576
3571
  }
@@ -3579,7 +3574,7 @@ export class WorkflowService implements IWorkflowService {
3579
3574
  // stored.
3580
3575
  assertDescriptionFits(description);
3581
3576
  const summary = await this.prs.getPr(number);
3582
- if (!summary) throw new WorkflowDomainError('change request not found', 404);
3577
+ if (!summary) throw new VersionControlDomainError('change request not found', 404);
3583
3578
  assertEditable(summary.state);
3584
3579
 
3585
3580
  // The grants beyond authorship are read in the base branch's own workspace,
@@ -3601,7 +3596,7 @@ export class WorkflowService implements IWorkflowService {
3601
3596
  },
3602
3597
  );
3603
3598
  if (grant === null) {
3604
- throw new WorkflowDomainError(
3599
+ throw new VersionControlDomainError(
3605
3600
  "Only the request's author, an admin, or someone who may approve every file it changes can edit its title and description.",
3606
3601
  403,
3607
3602
  );
@@ -3649,14 +3644,14 @@ export class WorkflowService implements IWorkflowService {
3649
3644
  this.prs.invalidateDetailCache(number);
3650
3645
  if (!updated) {
3651
3646
  const fresh = await this.prs.getPr(number);
3652
- if (!fresh) throw new WorkflowDomainError('change request not found', 404);
3647
+ if (!fresh) throw new VersionControlDomainError('change request not found', 404);
3653
3648
  assertEditable(fresh.state);
3654
- throw new WorkflowDomainError('This change request changed while it was being edited. Retry in a moment.', 409);
3649
+ throw new VersionControlDomainError('This change request changed while it was being edited. Retry in a moment.', 409);
3655
3650
  }
3656
3651
  crLog.info(`#${number} title/description edited`);
3657
3652
  this.events?.emit({ kind: 'change-request-edited', number });
3658
3653
  const fresh = await this.prs.getPr(number);
3659
- if (!fresh) throw new WorkflowDomainError('change request not found', 404);
3654
+ if (!fresh) throw new VersionControlDomainError('change request not found', 404);
3660
3655
  return fresh;
3661
3656
  }
3662
3657
 
@@ -3734,7 +3729,7 @@ export class WorkflowService implements IWorkflowService {
3734
3729
  * branch is gone. Closing takes it out of every open list (which is the
3735
3730
  * whole visible problem) while a `state = 'closed'` row can still be read,
3736
3731
  * counted, and reopened by hand. Deleting would make this sweep the one
3737
- * operation in the workflow that destroys history without a human asking.
3732
+ * operation in version control that destroys history without a human asking.
3738
3733
  *
3739
3734
  * ONE fetch, then a set lookup. The freshness matters more than the cost:
3740
3735
  * `changedPathsForPr` fails when a branch is missing from THAT
@@ -4202,7 +4197,7 @@ export class WorkflowService implements IWorkflowService {
4202
4197
  }
4203
4198
  }
4204
4199
 
4205
- const result = await this.reviewWorkflow.cancelPr(
4200
+ const result = await this.changeRequestReview.cancelPr(
4206
4201
  number,
4207
4202
  user,
4208
4203
  state,
@@ -4280,7 +4275,7 @@ export class WorkflowService implements IWorkflowService {
4280
4275
 
4281
4276
  let result;
4282
4277
  try {
4283
- result = await this.reviewWorkflow.mergePr(
4278
+ result = await this.changeRequestReview.mergePr(
4284
4279
  number,
4285
4280
  user,
4286
4281
  mergeHeadSha,
@@ -4430,7 +4425,7 @@ export class WorkflowService implements IWorkflowService {
4430
4425
 
4431
4426
  async mergeBranch(user: AuthUser, sourceBranch: string, targetBranch: string): Promise<MergeBranchOutcome> {
4432
4427
  if (sourceBranch === targetBranch) {
4433
- throw new WorkflowValidationError(`\`source\` and \`target\` are both "${sourceBranch}" — name two different branches.`);
4428
+ throw new VersionControlValidationError(`\`source\` and \`target\` are both "${sourceBranch}" — name two different branches.`);
4434
4429
  }
4435
4430
 
4436
4431
  // Asked once BEFORE waiting, so a merge the open request forbids is refused
@@ -4481,7 +4476,7 @@ export class WorkflowService implements IWorkflowService {
4481
4476
  // The merge runs in the target's own workspace, like a change request's.
4482
4477
  const targetWorkspaceId = (await this.workspaceService.getOrCreateForBranch(targetBranch)).id;
4483
4478
  if (!(await this.git.remoteBranchExists(targetWorkspaceId, sourceBranch))) {
4484
- throw new WorkflowValidationError(`No branch named "${sourceBranch}" on the shared remote.`);
4479
+ throw new VersionControlValidationError(`No branch named "${sourceBranch}" on the shared remote.`);
4485
4480
  }
4486
4481
 
4487
4482
  const result = await this.git.mergeChangeRequest(
@@ -4525,7 +4520,7 @@ export class WorkflowService implements IWorkflowService {
4525
4520
  // roles.yaml would bypass both, on the one file the access
4526
4521
  // model cannot survive being wrong.
4527
4522
  if (changedPaths.includes('roles.yaml')) {
4528
- throw new WorkflowDomainError(
4523
+ throw new VersionControlDomainError(
4529
4524
  `"${targetBranch}" is protected and this merge would change its roles.yaml. ` +
4530
4525
  `Roles never change through a merge: restore roles.yaml on "${sourceBranch}" to the version on ` +
4531
4526
  `"${targetBranch}" and merge again, and ask the user to change roles in the app.`,
@@ -4541,7 +4536,7 @@ export class WorkflowService implements IWorkflowService {
4541
4536
  );
4542
4537
  const denied = allowed ? changedPaths.filter((p) => !allowed.get(p)) : [];
4543
4538
  if (denied.length === 0) return;
4544
- throw new WorkflowDomainError(
4539
+ throw new VersionControlDomainError(
4545
4540
  `"${targetBranch}" is protected and you cannot commit directly to it: ` +
4546
4541
  `${denied.length} changed file(s) are outside your write access (${denied.join(', ')}). ` +
4547
4542
  `Open a change request from "${sourceBranch}" into "${targetBranch}" and ask the user to review it in the app.`,
@@ -4657,7 +4652,7 @@ export class WorkflowService implements IWorkflowService {
4657
4652
  */
4658
4653
  private gateWouldPass(number: number, approvals: FileApproval[]): boolean {
4659
4654
  try {
4660
- const gate = this.reviewWorkflow.evaluateMergeGate({ prNumber: number, state: 'open', approvals });
4655
+ const gate = this.changeRequestReview.evaluateMergeGate({ prNumber: number, state: 'open', approvals });
4661
4656
  return gate?.mergeable === true && gate.warnings.length === 0;
4662
4657
  } catch (err) {
4663
4658
  crLog.warn(`could not re-evaluate the merge gate of change request #${number}; keeping its refusal:`, { err });
@@ -4978,7 +4973,7 @@ export class WorkflowService implements IWorkflowService {
4978
4973
  throw new Error('updateBranch: resolutions need a `validateWrite` to be asked before the merge');
4979
4974
  }
4980
4975
  if (this.kb.isProtectedBranch(branch)) {
4981
- throw new WorkflowDomainError(
4976
+ throw new VersionControlDomainError(
4982
4977
  `"${branch}" is protected: it is changed through change requests, never merged into directly.`,
4983
4978
  403,
4984
4979
  { kind: 'protected-update-target', branch },
@@ -5026,7 +5021,7 @@ export class WorkflowService implements IWorkflowService {
5026
5021
  if (open !== null) throw new OpenChangeRequestBlocksMergeError(from, branch, open);
5027
5022
  }
5028
5023
  if (!(await this.git.remoteBranchExists(workspaceId, from))) {
5029
- throw new WorkflowValidationError(`No branch named "${from}" on the shared repository.`);
5024
+ throw new VersionControlValidationError(`No branch named "${from}" on the shared repository.`);
5030
5025
  }
5031
5026
  const resolutions = opts.resolutions ?? [];
5032
5027
  const subject = from === branch ? `Merge the shared ${branch} into the local one` : `Merge ${from} into ${branch}`;
@@ -5038,7 +5033,7 @@ export class WorkflowService implements IWorkflowService {
5038
5033
  ? ` Conflicts resolved by ${user.name} <${user.email}> in: ${resolutions.map((r) => r.path).join(', ')}.`
5039
5034
  : '');
5040
5035
  // Published inside the merge's own reservation: nothing lands between
5041
- // the merge commit and its push, and the push is EVERY workflow push's
5036
+ // the merge commit and its push, and the push is EVERY version-control push's
5042
5037
  // `pushWithRecovery`, run over the merge's own unlocked moves — a
5043
5038
  // rejection replays the merge (kept as a merge) onto the moved branch
5044
5039
  // and pushes again; a replay that conflicts or a host that refuses