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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (851) hide show
  1. package/agent-guide/directory-structure.md +1 -1
  2. package/agent-guide/onboarding.md +111 -0
  3. package/agent-guide/start-here.md +1 -0
  4. package/agent-guide/tool-manuals.md +1 -0
  5. package/dist/core/catalog-cache-invalidation.d.ts +2 -2
  6. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
  7. package/dist/core/compose-embed.d.ts +2 -2
  8. package/dist/core/compose-embed.d.ts.map +1 -1
  9. package/dist/core/compose-embed.js +1 -1
  10. package/dist/core/compose-embed.js.map +1 -1
  11. package/dist/core/core-ports.d.ts +19 -4
  12. package/dist/core/core-ports.d.ts.map +1 -1
  13. package/dist/core/core-ports.js.map +1 -1
  14. package/dist/core/create-core-server.d.ts.map +1 -1
  15. package/dist/core/create-core-server.js +26 -24
  16. package/dist/core/create-core-server.js.map +1 -1
  17. package/dist/core/create-core-services.d.ts +19 -13
  18. package/dist/core/create-core-services.d.ts.map +1 -1
  19. package/dist/core/create-core-services.js +72 -57
  20. package/dist/core/create-core-services.js.map +1 -1
  21. package/dist/core/lifecycle.d.ts +4 -4
  22. package/dist/core/lifecycle.d.ts.map +1 -1
  23. package/dist/core/lifecycle.js +5 -5
  24. package/dist/core/lifecycle.js.map +1 -1
  25. package/dist/core-config.d.ts +2 -2
  26. package/dist/core-config.js +3 -3
  27. package/dist/core-config.js.map +1 -1
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/modules/access/access-control.service.js +1 -1
  33. package/dist/modules/access/access-control.service.js.map +1 -1
  34. package/dist/modules/access/access-declarations.d.ts +2 -2
  35. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  36. package/dist/modules/access/access-declarations.js +2 -2
  37. package/dist/modules/access/access-declarations.js.map +1 -1
  38. package/dist/modules/access/access-mutation.service.d.ts +2 -2
  39. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  40. package/dist/modules/access/access-mutation.service.js +2 -2
  41. package/dist/modules/access/access-mutation.service.js.map +1 -1
  42. package/dist/modules/access/access-requests.routes.d.ts +2 -2
  43. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  44. package/dist/modules/access/access-requests.routes.js +5 -5
  45. package/dist/modules/access/access-requests.routes.js.map +1 -1
  46. package/dist/modules/access/access-requests.service.d.ts +2 -2
  47. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  48. package/dist/modules/access/access-requests.service.js +11 -11
  49. package/dist/modules/access/access-requests.service.js.map +1 -1
  50. package/dist/modules/access/access.routes.d.ts +2 -2
  51. package/dist/modules/access/access.routes.d.ts.map +1 -1
  52. package/dist/modules/access/access.routes.js +9 -9
  53. package/dist/modules/access/access.routes.js.map +1 -1
  54. package/dist/modules/access/admin-locked-commit.d.ts +5 -5
  55. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  56. package/dist/modules/access/admin-locked-commit.js +7 -7
  57. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  58. package/dist/modules/access/admin-route-helpers.d.ts +1 -1
  59. package/dist/modules/access/admin-route-helpers.js +5 -5
  60. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  61. package/dist/modules/access/change-read-gate.d.ts +1 -1
  62. package/dist/modules/access/change-read-gate.js +1 -1
  63. package/dist/modules/access/groups-admin.service.d.ts +7 -7
  64. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  65. package/dist/modules/access/groups-admin.service.js +6 -6
  66. package/dist/modules/access/groups-admin.service.js.map +1 -1
  67. package/dist/modules/access/reference-scan.d.ts +1 -1
  68. package/dist/modules/access/roles-admin.service.d.ts +7 -7
  69. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  70. package/dist/modules/access/roles-admin.service.js +8 -8
  71. package/dist/modules/access/roles-admin.service.js.map +1 -1
  72. package/dist/modules/access/synced-groups-committer.d.ts +4 -4
  73. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  74. package/dist/modules/access/synced-groups-committer.js +7 -7
  75. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  76. package/dist/modules/access/user-access-removal.service.d.ts +6 -6
  77. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  78. package/dist/modules/access/user-access-removal.service.js +4 -4
  79. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  80. package/dist/modules/access-model/access-errors.d.ts +4 -4
  81. package/dist/modules/access-model/access-errors.d.ts.map +1 -1
  82. package/dist/modules/access-model/access-errors.js +4 -4
  83. package/dist/modules/access-model/access-errors.js.map +1 -1
  84. package/dist/modules/access-model/access-grammar.d.ts +1 -1
  85. package/dist/modules/access-model/access-grammar.js +4 -4
  86. package/dist/modules/access-model/change-gate.d.ts +1 -1
  87. package/dist/modules/access-model/change-gate.js +1 -1
  88. package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
  89. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  90. package/dist/modules/access-model/roles-yaml-guard.js +4 -4
  91. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
  92. package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
  93. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
  94. package/dist/modules/agent-guide/agent-guide.js +42 -18
  95. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  96. package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
  97. package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
  98. package/dist/modules/agent-guide/guide-budget.js +6 -2
  99. package/dist/modules/agent-guide/guide-budget.js.map +1 -1
  100. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
  101. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  102. package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
  103. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  104. package/dist/modules/agent-instructions/compose.d.ts +15 -8
  105. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  106. package/dist/modules/agent-instructions/compose.js +24 -10
  107. package/dist/modules/agent-instructions/compose.js.map +1 -1
  108. package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
  109. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  110. package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
  111. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  112. package/dist/modules/auth/account-erasure.service.d.ts +36 -7
  113. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  114. package/dist/modules/auth/account-erasure.service.js +30 -10
  115. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  116. package/dist/modules/auth/account-hooks.d.ts +20 -0
  117. package/dist/modules/auth/account-hooks.d.ts.map +1 -1
  118. package/dist/modules/auth/account-hooks.js +10 -0
  119. package/dist/modules/auth/account-hooks.js.map +1 -1
  120. package/dist/modules/auth/account-switch-lock.js +2 -2
  121. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  122. package/dist/modules/auth/account.routes.d.ts +7 -2
  123. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  124. package/dist/modules/auth/account.routes.js +23 -4
  125. package/dist/modules/auth/account.routes.js.map +1 -1
  126. package/dist/modules/auth/auth.service.d.ts +1 -1
  127. package/dist/modules/auth/auth.service.js +4 -4
  128. package/dist/modules/auth/auth.service.js.map +1 -1
  129. package/dist/modules/auth/index.d.ts +1 -0
  130. package/dist/modules/auth/index.d.ts.map +1 -1
  131. package/dist/modules/database/connection.d.ts.map +1 -1
  132. package/dist/modules/database/connection.js +11 -0
  133. package/dist/modules/database/connection.js.map +1 -1
  134. package/dist/modules/database/core-schema.js +2 -2
  135. package/dist/modules/database/core-schema.js.map +1 -1
  136. package/dist/modules/diff/diff.routes.d.ts +3 -3
  137. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  138. package/dist/modules/diff/diff.routes.js +7 -7
  139. package/dist/modules/diff/diff.routes.js.map +1 -1
  140. package/dist/modules/embed/embed.routes.js +1 -1
  141. package/dist/modules/embed/embed.routes.js.map +1 -1
  142. package/dist/modules/embed/embed.service.d.ts +4 -4
  143. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  144. package/dist/modules/embed/embed.service.js +18 -18
  145. package/dist/modules/embed/embed.service.js.map +1 -1
  146. package/dist/modules/kb-fs/branch-name.js +8 -8
  147. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  148. package/dist/modules/kb-fs/file-change-notifier.d.ts +51 -26
  149. package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
  150. package/dist/modules/kb-fs/file-change-notifier.js +6 -8
  151. package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
  152. package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -16
  153. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  154. package/dist/modules/kb-fs/locking-filesystem.js +31 -39
  155. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  156. package/dist/modules/kb-fs/repo-path.js +5 -5
  157. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  158. package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
  159. package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
  160. package/dist/modules/kb-fs/tmp-ref.js +2 -2
  161. package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
  162. package/dist/modules/kb-sync/index.d.ts +1 -1
  163. package/dist/modules/kb-sync/index.d.ts.map +1 -1
  164. package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
  165. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  166. package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
  167. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  168. package/dist/modules/kb-sync/kb-sync.service.js +10 -10
  169. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  170. package/dist/modules/mcp/mcp.service.d.ts +11 -4
  171. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  172. package/dist/modules/mcp/mcp.service.js +75 -19
  173. package/dist/modules/mcp/mcp.service.js.map +1 -1
  174. package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
  175. package/dist/modules/onboarding/onboarding.routes.js +2 -2
  176. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  177. package/dist/modules/onboarding/starter-pack.service.d.ts +5 -7
  178. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  179. package/dist/modules/onboarding/starter-pack.service.js +4 -4
  180. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  181. package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
  182. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  183. package/dist/modules/plugins/join-request-jobs.service.js +7 -7
  184. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  185. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  186. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  187. package/dist/modules/plugins/join-requests.service.js +5 -5
  188. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  189. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  190. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  191. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  192. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  193. package/dist/modules/plugins/plugins.routes.js +8 -8
  194. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  195. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
  196. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  197. package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
  198. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  199. package/dist/modules/secrets-vault/index.d.ts +2 -1
  200. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  201. package/dist/modules/secrets-vault/index.js +1 -0
  202. package/dist/modules/secrets-vault/index.js.map +1 -1
  203. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
  204. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
  205. package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
  206. package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
  207. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
  208. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  209. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  210. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
  211. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  212. package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
  213. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  214. package/dist/modules/settings/connection-check.js +1 -1
  215. package/dist/modules/settings/connection-check.js.map +1 -1
  216. package/dist/modules/settings/deployment-settings.service.js +1 -1
  217. package/dist/modules/settings/git-root-folders.js +1 -1
  218. package/dist/modules/settings/git-root-folders.js.map +1 -1
  219. package/dist/modules/settings/setup.routes.d.ts +1 -1
  220. package/dist/modules/settings/setup.routes.js +1 -1
  221. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  222. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  223. package/dist/modules/skills/pending-skills.service.js +4 -4
  224. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  225. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
  226. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  227. package/dist/modules/skills/skill-access-requests.routes.js +5 -5
  228. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  229. package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
  230. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  231. package/dist/modules/tool-helpers/tool-context.js +2 -2
  232. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  233. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  234. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  235. package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
  236. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  237. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  238. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  239. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
  240. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  241. package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
  242. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  243. package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
  244. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  245. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
  246. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  247. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
  248. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  249. package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
  250. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  251. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
  252. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  253. package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
  254. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  255. package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
  256. package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
  257. package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
  258. package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
  259. package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
  260. package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
  261. package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
  262. package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
  263. package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
  264. package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
  265. package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
  266. package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
  267. package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
  268. package/dist/modules/version-control/change-request-hooks.js.map +1 -0
  269. package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
  270. package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
  271. package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
  272. package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
  273. package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
  274. package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
  275. package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
  276. package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
  277. package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
  278. package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
  279. package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
  280. package/dist/modules/version-control/event-bus.d.ts.map +1 -0
  281. package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
  282. package/dist/modules/version-control/event-bus.js.map +1 -0
  283. package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
  284. package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
  285. package/dist/modules/version-control/events-delivery.js.map +1 -0
  286. package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
  287. package/dist/modules/version-control/events.routes.d.ts.map +1 -0
  288. package/dist/modules/version-control/events.routes.js.map +1 -0
  289. package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
  290. package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
  291. package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
  292. package/dist/modules/version-control/file-lock.service.js.map +1 -0
  293. package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
  294. package/dist/modules/version-control/git/change-request-link.js.map +1 -0
  295. package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
  296. package/dist/modules/version-control/git/git-version.js.map +1 -0
  297. package/dist/modules/{workflow → version-control}/git/git.service.d.ts +26 -8
  298. package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
  299. package/dist/modules/{workflow → version-control}/git/git.service.js +106 -55
  300. package/dist/modules/version-control/git/git.service.js.map +1 -0
  301. package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
  302. package/dist/modules/version-control/git/merge-commit.js.map +1 -0
  303. package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
  304. package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
  305. package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
  306. package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
  307. package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
  308. package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
  309. package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
  310. package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
  311. package/dist/modules/version-control/index.d.ts.map +1 -0
  312. package/dist/modules/{workflow → version-control}/index.js +3 -2
  313. package/dist/modules/version-control/index.js.map +1 -0
  314. package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
  315. package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
  316. package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
  317. package/dist/modules/version-control/pending-commits.service.js.map +1 -0
  318. package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
  319. package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
  320. package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
  321. package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
  322. package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
  323. package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
  324. package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
  325. package/dist/modules/version-control/read-on-branch.js.map +1 -0
  326. package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
  327. package/dist/modules/version-control/recovery-bot.js.map +1 -0
  328. package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
  329. package/dist/modules/version-control/sanitize-error.js.map +1 -0
  330. package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +33 -6
  331. package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
  332. package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +20 -3
  333. package/dist/modules/version-control/version-control-hooks.js.map +1 -0
  334. package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
  335. package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
  336. package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
  337. package/dist/modules/version-control/version-control.routes.js.map +1 -0
  338. package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -46
  339. package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
  340. package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +93 -107
  341. package/dist/modules/version-control/version-control.service.js.map +1 -0
  342. package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
  343. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  344. package/dist/modules/workspace/agent-access.gate.js +1 -1
  345. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  346. package/dist/modules/workspace/git-internals.middleware.js +2 -2
  347. package/dist/modules/workspace/kb-repository.js +1 -1
  348. package/dist/modules/workspace/kb-repository.js.map +1 -1
  349. package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
  350. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  351. package/dist/modules/workspace/startup/kb-git.js +1 -1
  352. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  353. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
  354. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  355. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  356. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  357. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
  358. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  359. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  360. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  361. package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
  362. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  363. package/dist/modules/workspace/startup/steps/template-source.js +8 -5
  364. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  365. package/dist/modules/workspace/workspace-tmp.js +3 -3
  366. package/dist/modules/workspace/workspace-tmp.js.map +1 -1
  367. package/dist/modules/workspace/workspace.routes.d.ts +4 -4
  368. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  369. package/dist/modules/workspace/workspace.routes.js +22 -22
  370. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  371. package/dist/modules/workspace/workspace.service.d.ts +6 -6
  372. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  373. package/dist/modules/workspace/workspace.service.js +11 -11
  374. package/dist/modules/workspace/workspace.service.js.map +1 -1
  375. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  376. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  377. package/dist/modules/workspace/workspace.tools.js +15 -10
  378. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  379. package/dist/shared/canonical-file-identity.d.ts +2 -2
  380. package/dist/shared/canonical-file-identity.js +5 -5
  381. package/dist/shared/canonical-file-identity.js.map +1 -1
  382. package/dist/shared/domain-errors.d.ts +39 -39
  383. package/dist/shared/domain-errors.d.ts.map +1 -1
  384. package/dist/shared/domain-errors.js +44 -44
  385. package/dist/shared/domain-errors.js.map +1 -1
  386. package/dist/shared/fire-and-forget.d.ts +14 -0
  387. package/dist/shared/fire-and-forget.d.ts.map +1 -0
  388. package/dist/shared/fire-and-forget.js +23 -0
  389. package/dist/shared/fire-and-forget.js.map +1 -0
  390. package/dist/shared/git.contract.d.ts +1 -1
  391. package/dist/shared/git.contract.js +1 -1
  392. package/dist/shared/http-errors.d.ts +3 -3
  393. package/dist/shared/http-errors.d.ts.map +1 -1
  394. package/dist/shared/http-errors.js +1 -1
  395. package/dist/shared/http-errors.js.map +1 -1
  396. package/dist/shared/pending-proposals.d.ts +3 -3
  397. package/dist/shared/pending-proposals.d.ts.map +1 -1
  398. package/dist/shared/pending-proposals.js +2 -2
  399. package/dist/shared/pending-proposals.js.map +1 -1
  400. package/dist/tenancy/static-tenant-source.js +1 -1
  401. package/dist/tenancy/static-tenant-source.js.map +1 -1
  402. package/migrations/0012_agent_audit.sql +40 -40
  403. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
  404. package/migrations/meta/0012_snapshot.json +2246 -2246
  405. package/migrations/meta/0013_snapshot.json +2258 -2258
  406. package/package.json +4 -4
  407. package/src/__tests__/account-admin.ts +27 -0
  408. package/src/__tests__/capturing-logger.ts +36 -0
  409. package/src/__tests__/hexis-catalog.ts +4 -4
  410. package/src/__tests__/kb-context.ts +30 -30
  411. package/src/__tests__/kb-layout-config.test.ts +21 -0
  412. package/src/__tests__/open-change-gate.ts +1 -1
  413. package/src/__tests__/real-access.ts +16 -0
  414. package/src/__tests__/real-auth.ts +13 -0
  415. package/src/__tests__/real-readers.ts +27 -0
  416. package/src/__tests__/real-version-control.ts +22 -0
  417. package/src/__tests__/tool-handler.ts +15 -0
  418. package/src/__tests__/tool-wiring.ts +10 -4
  419. package/src/__tests__/workspace-service.ts +1 -1
  420. package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
  421. package/src/core/__tests__/commit-announcements-wired-once.test.ts +53 -0
  422. package/src/core/__tests__/compose-embed.test.ts +1 -1
  423. package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
  424. package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
  425. package/src/core/__tests__/gated-boot.test.ts +2 -2
  426. package/src/core/__tests__/lifecycle.test.ts +9 -9
  427. package/src/core/catalog-cache-invalidation.ts +2 -2
  428. package/src/core/compose-embed.ts +3 -3
  429. package/src/core/core-ports.ts +19 -4
  430. package/src/core/create-core-server.ts +39 -25
  431. package/src/core/create-core-services.ts +83 -65
  432. package/src/core/lifecycle.ts +9 -9
  433. package/src/core-config.ts +3 -3
  434. package/src/index.ts +5 -5
  435. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
  436. package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
  437. package/src/modules/access/__tests__/access-requests.routes.test.ts +23 -23
  438. package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
  439. package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
  440. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
  441. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
  442. package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
  443. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
  444. package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
  445. package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
  446. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
  447. package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
  448. package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
  449. package/src/modules/access/__tests__/groups-admin.service.test.ts +44 -44
  450. package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
  451. package/src/modules/access/__tests__/roles-admin.service.test.ts +34 -34
  452. package/src/modules/access/__tests__/roles-capabilities.test.ts +29 -29
  453. package/src/modules/access/__tests__/roles.routes.test.ts +11 -11
  454. package/src/modules/access/__tests__/synced-groups-committer.test.ts +14 -14
  455. package/src/modules/access/__tests__/user-access-removal.service.test.ts +33 -33
  456. package/src/modules/access/access-control.service.ts +1 -1
  457. package/src/modules/access/access-declarations.ts +2 -2
  458. package/src/modules/access/access-mutation.service.ts +2 -2
  459. package/src/modules/access/access-requests.routes.ts +7 -7
  460. package/src/modules/access/access-requests.service.ts +13 -13
  461. package/src/modules/access/access.routes.ts +11 -11
  462. package/src/modules/access/admin-locked-commit.ts +11 -11
  463. package/src/modules/access/admin-route-helpers.ts +5 -5
  464. package/src/modules/access/change-read-gate.ts +1 -1
  465. package/src/modules/access/groups-admin.service.ts +7 -7
  466. package/src/modules/access/reference-scan.ts +1 -1
  467. package/src/modules/access/roles-admin.service.ts +9 -9
  468. package/src/modules/access/synced-groups-committer.ts +11 -11
  469. package/src/modules/access/user-access-removal.service.ts +7 -7
  470. package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
  471. package/src/modules/access-model/access-errors.ts +4 -4
  472. package/src/modules/access-model/access-grammar.ts +4 -4
  473. package/src/modules/access-model/change-gate.ts +1 -1
  474. package/src/modules/access-model/roles-yaml-guard.ts +4 -4
  475. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
  476. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
  477. package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
  478. package/src/modules/agent-guide/agent-guide.ts +48 -22
  479. package/src/modules/agent-guide/guide-budget.ts +6 -2
  480. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
  481. package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
  482. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
  483. package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
  484. package/src/modules/agent-instructions/compose.ts +24 -9
  485. package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
  486. package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
  487. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
  488. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
  489. package/src/modules/audit/event-classifier.ts +155 -155
  490. package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
  491. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
  492. package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
  493. package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
  494. package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
  495. package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
  496. package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
  497. package/src/modules/auth/account-erasure.service.ts +27 -9
  498. package/src/modules/auth/account-hooks.ts +34 -0
  499. package/src/modules/auth/account-switch-lock.ts +2 -2
  500. package/src/modules/auth/account.routes.ts +23 -5
  501. package/src/modules/auth/auth.service.ts +4 -4
  502. package/src/modules/auth/index.ts +1 -0
  503. package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
  504. package/src/modules/database/__tests__/connection.pg.test.ts +55 -0
  505. package/src/modules/database/__tests__/connection.test.ts +30 -0
  506. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
  507. package/src/modules/database/connection.ts +12 -0
  508. package/src/modules/database/core-schema.ts +2 -2
  509. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
  510. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
  511. package/src/modules/diff/diff.routes.ts +8 -8
  512. package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
  513. package/src/modules/embed/__tests__/embed.service.test.ts +48 -62
  514. package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
  515. package/src/modules/embed/embed.routes.ts +1 -1
  516. package/src/modules/embed/embed.service.ts +17 -17
  517. package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
  518. package/src/modules/kb-fs/__tests__/file-change-notifier.test.ts +23 -4
  519. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +264 -305
  520. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +103 -40
  521. package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
  522. package/src/modules/kb-fs/branch-name.ts +8 -8
  523. package/src/modules/kb-fs/file-change-notifier.ts +55 -32
  524. package/src/modules/kb-fs/locking-filesystem.ts +34 -48
  525. package/src/modules/kb-fs/repo-path.ts +5 -5
  526. package/src/modules/kb-fs/tmp-ref.ts +3 -3
  527. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
  528. package/src/modules/kb-sync/index.ts +1 -1
  529. package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
  530. package/src/modules/kb-sync/kb-sync.service.ts +9 -9
  531. package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
  532. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
  533. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
  534. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
  535. package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
  536. package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
  537. package/src/modules/mcp/mcp.service.ts +89 -28
  538. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +59 -59
  539. package/src/modules/onboarding/onboarding.contract.ts +1 -1
  540. package/src/modules/onboarding/onboarding.routes.ts +2 -2
  541. package/src/modules/onboarding/starter-pack.service.ts +7 -9
  542. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
  543. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
  544. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
  545. package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
  546. package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
  547. package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +46 -21
  548. package/src/modules/plugins/__tests__/plugins.routes.test.ts +31 -31
  549. package/src/modules/plugins/join-request-jobs.service.ts +10 -10
  550. package/src/modules/plugins/join-requests.service.ts +4 -4
  551. package/src/modules/plugins/plugin-rename.service.ts +1 -1
  552. package/src/modules/plugins/plugins.routes.ts +9 -9
  553. package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
  554. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
  555. package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
  556. package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
  557. package/src/modules/secrets-vault/index.ts +7 -0
  558. package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
  559. package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
  560. package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
  561. package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
  562. package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
  563. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
  564. package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
  565. package/src/modules/settings/connection-check.ts +1 -1
  566. package/src/modules/settings/deployment-settings.service.ts +1 -1
  567. package/src/modules/settings/git-root-folders.ts +1 -1
  568. package/src/modules/settings/setup.routes.ts +1 -1
  569. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
  570. package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
  571. package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
  572. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
  573. package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
  574. package/src/modules/skills/pending-skills.service.ts +3 -3
  575. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  576. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
  577. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
  578. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
  579. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
  580. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
  581. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
  582. package/src/modules/tool-helpers/tool-context.ts +6 -6
  583. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  584. package/src/modules/tool-helpers/tool.contract.ts +4 -4
  585. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
  586. package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
  587. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
  588. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
  589. package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
  590. package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
  591. package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
  592. package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
  593. package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
  594. package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
  595. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
  596. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
  597. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
  598. package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
  599. package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
  600. package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
  601. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
  602. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
  603. package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
  604. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
  605. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
  606. package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
  607. package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
  608. package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
  609. package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
  610. package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
  611. package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
  612. package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
  613. package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
  614. package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
  615. package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
  616. package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
  617. package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
  618. package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +100 -102
  619. package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
  620. package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
  621. package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
  622. package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +85 -75
  623. package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
  624. package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
  625. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
  626. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
  627. package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
  628. package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
  629. package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
  630. package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
  631. package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
  632. package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
  633. package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
  634. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
  635. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
  636. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
  637. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
  638. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
  639. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
  640. package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
  641. package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
  642. package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
  643. package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
  644. package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
  645. package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
  646. package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
  647. package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
  648. package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
  649. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
  650. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
  651. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
  652. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
  653. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
  654. package/src/modules/version-control/git/__tests__/git.service.commitLanded.test.ts +199 -0
  655. package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
  656. package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
  657. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
  658. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
  659. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
  660. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
  661. package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
  662. package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
  663. package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
  664. package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
  665. package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
  666. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +99 -22
  667. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
  668. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
  669. package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
  670. package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
  671. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
  672. package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
  673. package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
  674. package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
  675. package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
  676. package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
  677. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
  678. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
  679. package/src/modules/{workflow → version-control}/git/git.service.ts +112 -59
  680. package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
  681. package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
  682. package/src/modules/{workflow → version-control}/index.ts +6 -5
  683. package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
  684. package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
  685. package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
  686. package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +44 -5
  687. package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
  688. package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +96 -109
  689. package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
  690. package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
  691. package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
  692. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
  693. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
  694. package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
  695. package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
  696. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
  697. package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
  698. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
  699. package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
  700. package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
  701. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
  702. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
  703. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
  704. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
  705. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
  706. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
  707. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
  708. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
  709. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
  710. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
  711. package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
  712. package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
  713. package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
  714. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
  715. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
  716. package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
  717. package/src/modules/workspace/agent-access.gate.ts +5 -5
  718. package/src/modules/workspace/git-internals.middleware.ts +2 -2
  719. package/src/modules/workspace/kb-repository.ts +1 -1
  720. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
  721. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
  722. package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
  723. package/src/modules/workspace/startup/kb-git.ts +1 -1
  724. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
  725. package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
  726. package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
  727. package/src/modules/workspace/startup/steps/template-source.ts +21 -6
  728. package/src/modules/workspace/workspace-tmp.ts +4 -4
  729. package/src/modules/workspace/workspace.routes.ts +26 -26
  730. package/src/modules/workspace/workspace.service.ts +11 -11
  731. package/src/modules/workspace/workspace.tools.ts +17 -10
  732. package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
  733. package/src/shared/__tests__/fire-and-forget.test.ts +39 -0
  734. package/src/shared/__tests__/http-errors.test.ts +4 -4
  735. package/src/shared/canonical-file-identity.ts +5 -5
  736. package/src/shared/domain-errors.ts +44 -44
  737. package/src/shared/fire-and-forget.ts +26 -0
  738. package/src/shared/git.contract.ts +1 -1
  739. package/src/shared/http-errors.ts +3 -3
  740. package/src/shared/kb-context.ts +130 -130
  741. package/src/shared/pending-proposals.ts +4 -4
  742. package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
  743. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
  744. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
  745. package/src/tenancy/index.ts +35 -35
  746. package/src/tenancy/static-tenant-source.ts +1 -1
  747. package/src/tenancy/tenant-host.ts +261 -261
  748. package/src/tenancy/tenant-runtime.ts +208 -208
  749. package/src/tenancy/tenant-source.contract.ts +59 -59
  750. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
  751. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
  752. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
  753. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
  754. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
  755. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
  756. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
  757. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
  758. package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
  759. package/dist/modules/workflow/change-request-hooks.js.map +0 -1
  760. package/dist/modules/workflow/event-bus.d.ts.map +0 -1
  761. package/dist/modules/workflow/event-bus.js.map +0 -1
  762. package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
  763. package/dist/modules/workflow/events-delivery.js.map +0 -1
  764. package/dist/modules/workflow/events.routes.d.ts.map +0 -1
  765. package/dist/modules/workflow/events.routes.js.map +0 -1
  766. package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
  767. package/dist/modules/workflow/file-lock.service.js.map +0 -1
  768. package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
  769. package/dist/modules/workflow/git/change-request-link.js.map +0 -1
  770. package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
  771. package/dist/modules/workflow/git/git-version.js.map +0 -1
  772. package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
  773. package/dist/modules/workflow/git/git.service.js.map +0 -1
  774. package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
  775. package/dist/modules/workflow/git/merge-commit.js.map +0 -1
  776. package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
  777. package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
  778. package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
  779. package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
  780. package/dist/modules/workflow/index.d.ts.map +0 -1
  781. package/dist/modules/workflow/index.js.map +0 -1
  782. package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
  783. package/dist/modules/workflow/pending-commits.service.js.map +0 -1
  784. package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
  785. package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
  786. package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
  787. package/dist/modules/workflow/read-on-branch.js.map +0 -1
  788. package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
  789. package/dist/modules/workflow/recovery-bot.js.map +0 -1
  790. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
  791. package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
  792. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
  793. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
  794. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
  795. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
  796. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
  797. package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
  798. package/dist/modules/workflow/sanitize-error.js.map +0 -1
  799. package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
  800. package/dist/modules/workflow/workflow-hooks.js.map +0 -1
  801. package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
  802. package/dist/modules/workflow/workflow.routes.js.map +0 -1
  803. package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
  804. package/dist/modules/workflow/workflow.service.js.map +0 -1
  805. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
  806. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
  807. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
  808. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
  809. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
  810. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
  811. /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
  812. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
  813. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
  814. /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
  815. /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
  816. /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
  817. /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
  818. /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
  819. /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
  820. /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
  821. /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
  822. /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
  823. /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
  824. /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
  825. /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
  826. /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
  827. /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
  828. /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
  829. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
  830. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
  831. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
  832. /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
  833. /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
  834. /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
  835. /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
  836. /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
  837. /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
  838. /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
  839. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
  840. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
  841. /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
  842. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
  843. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
  844. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
  845. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
  846. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
  847. /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
  848. /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
  849. /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
  850. /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
  851. /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
@@ -1,12 +1,12 @@
1
1
  /**
2
- * A `LocalFilesystem` that wraps every mutating operation in a workflow
2
+ * A `LocalFilesystem` that wraps every mutating operation in a version-control
3
3
  * lock acquire → super-call → release-with-auto-commit-and-push cycle.
4
4
  * This is the agent's file edit surface — Mastra hands the agent the
5
5
  * workspace's filesystem tools (write_file / edit_file / etc.), and those
6
6
  * call directly into this class, so the agent's edits go through the same
7
7
  * lock + commit + push pipeline as the human editor's saves.
8
8
  *
9
- * Per the workflow spec (PLAN.md §2):
9
+ * Per the version-control spec (PLAN.md §2):
10
10
  * - Each tool call is one acquire/release cycle. The agent never holds a
11
11
  * lock while it's "thinking" between tool calls — a fast human editor
12
12
  * can always grab a file the agent isn't actively writing.
@@ -14,11 +14,11 @@
14
14
  * 2-second intervals (~6s ceiling) then surface a structured error
15
15
  * so the agent can skip the file and continue with the rest of its
16
16
  * turn rather than aborting the whole call.
17
- * - Lock-release inside `WorkflowService.releaseLock` is the thing that
17
+ * - Lock-release inside `VersionControlService.releaseLock` is the thing that
18
18
  * actually commits + pushes the file — see that method for the
19
19
  * `commitFile → release → push` sequence. We don't repeat the commit
20
20
  * step here; releasing IS committing.
21
- * - `rmdir` is refused. The workflow invariant is "each change touches
21
+ * - `rmdir` is refused. The version-control invariant is "each change touches
22
22
  * exactly one file" and a recursive directory delete violates that.
23
23
  * The agent must delete entries individually via `deleteFile`.
24
24
  * - `mkdir` followed by a `.gitkeep` write is the canonical way to land
@@ -47,9 +47,8 @@ import {
47
47
  type RemoveOptions,
48
48
  type WriteOptions,
49
49
  } from '@mastra/core/workspace';
50
- import type { AuthUser, Change, IWorkflowService } from '@bevel-software/platform-shared';
50
+ import type { AuthUser, Change, IVersionControlService } from '@bevel-software/platform-shared';
51
51
  import { PushNeedsAgentResolutionError } from '../../shared/domain-errors.js';
52
- import type { FileChangeNotifier } from './file-change-notifier.js';
53
52
  import { isAbsence } from '../../shared/fs.contract.js';
54
53
  import { DestinationTakenError, lstatOrNull, renameNoReplace, takenError } from '../../shared/rename-no-replace.js';
55
54
  import { linkedAncestor } from '../../shared/no-link-below.js';
@@ -134,13 +133,13 @@ export type WriteValidator = ((path: string, content: FileContent) => void | Pro
134
133
  };
135
134
 
136
135
  /**
137
- * Dependencies the wrapper needs to talk to the workflow lock service.
136
+ * Dependencies the wrapper needs to talk to the version-control lock service.
138
137
  * Captured at construction time so every per-method call resolves to the
139
138
  * same `(workspace, branch, user)` triple — the agent can't accidentally
140
139
  * target a different workspace through this filesystem.
141
140
  */
142
141
  export interface LockingFilesystemContext {
143
- workflow: IWorkflowService;
142
+ versionControl: IVersionControlService;
144
143
  workspaceId: string;
145
144
  branch: string;
146
145
  user: AuthUser;
@@ -167,12 +166,6 @@ export interface LockingFilesystemContext {
167
166
  * when the destination is a path the validator's `appliesTo` claims.
168
167
  */
169
168
  validateWrite?: WriteValidator;
170
- /**
171
- * Post-commit hook for the BATCH `writeFiles` path (which commits via
172
- * `commitChanges` and so skips `runPendingCommit`'s emit). Single-file ops
173
- * emit through the queue instead, so they don't need this. Optional.
174
- */
175
- fileChanges?: FileChangeNotifier;
176
169
  /**
177
170
  * Optional creator read-grant planner (see `modules/access/creator-access`).
178
171
  * When present, a write/mkdir that starts a NEW FOLDER directly under one
@@ -475,7 +468,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
475
468
  summary: string,
476
469
  check?: () => Promise<void>,
477
470
  ): Promise<Change | null> {
478
- const { workflow, workspaceId, branch, user } = this.lockContext;
471
+ const { versionControl, workspaceId, branch, user } = this.lockContext;
479
472
  await this.assertNotGitInternals(src);
480
473
  await this.assertNotGitInternals(dest);
481
474
  this.assertInsideRepo(dest);
@@ -512,10 +505,10 @@ export class LockingFilesystem extends GitGuardedFilesystem {
512
505
  const release = async (mode: 'untouched' | 'enqueue'): Promise<void> => {
513
506
  for (const p of acquired) {
514
507
  try {
515
- if (mode === 'enqueue' && scope.includes(p)) await workflow.releaseLock(workspaceId, branch, p, user);
516
- else if (mode === 'enqueue') await workflow.releaseLockUntouched(workspaceId, branch, p, user);
517
- else if (dirtyLeft.has(p)) await workflow.releaseLockNoCommit(workspaceId, branch, p, user);
518
- else await workflow.releaseLockUntouched(workspaceId, branch, p, user);
508
+ if (mode === 'enqueue' && scope.includes(p)) await versionControl.releaseLock(workspaceId, branch, p, user);
509
+ else if (mode === 'enqueue') await versionControl.releaseLockUntouched(workspaceId, branch, p, user);
510
+ else if (dirtyLeft.has(p)) await versionControl.releaseLockNoCommit(workspaceId, branch, p, user);
511
+ else await versionControl.releaseLockUntouched(workspaceId, branch, p, user);
519
512
  } catch (releaseErr) {
520
513
  log.warn(`lock release failed for "${p}" during moveWithEdits:`, { err: releaseErr });
521
514
  }
@@ -526,7 +519,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
526
519
  let ok = false;
527
520
  try {
528
521
  for (let attempt = 0; attempt < ACQUIRE_RETRY_ATTEMPTS; attempt++) {
529
- const result = await workflow.acquireLock(workspaceId, branch, p, user);
522
+ const result = await versionControl.acquireLock(workspaceId, branch, p, user);
530
523
  if (result.acquired) {
531
524
  ok = true;
532
525
  break;
@@ -599,9 +592,8 @@ export class LockingFilesystem extends GitGuardedFilesystem {
599
592
  ...edits.map((e) => e.path),
600
593
  ]),
601
594
  ].sort();
602
- const change = await workflow.commitChanges(workspaceId, user, summary, scope);
595
+ const change = await versionControl.commitChanges(workspaceId, user, summary, scope);
603
596
  await release('untouched');
604
- if (change) this.lockContext.fileChanges?.emit({ workspaceId, branch, paths: scope, byUser: user });
605
597
  return change;
606
598
  } catch (err) {
607
599
  if (err instanceof PushNeedsAgentResolutionError) {
@@ -681,7 +673,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
681
673
  * `writeFile` takes one lock cycle per file and lets the deferred queue commit
682
674
  * it, this wraps the WHOLE batch in one cycle: acquire every path's lock up
683
675
  * front, write every file to disk, then commit the whole set synchronously as
684
- * one change via the workflow service's `commitChanges` (one `git add` + one
676
+ * one change via the version-control service's `commitChanges` (one `git add` + one
685
677
  * `git commit`, then push), and release WITHOUT a per-file commit. Fail-closed:
686
678
  * if any lock can't be acquired, or a write/commit throws, nothing is committed
687
679
  * (the failure-path `releaseLockNoCommit` discards the uncommitted bytes).
@@ -713,7 +705,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
713
705
  writes: readonly { path: string; content: FileContent }[],
714
706
  ) => Promise<{ path: string; content: FileContent }[]>,
715
707
  ): Promise<Change | null> {
716
- const { workflow, workspaceId, branch, user } = this.lockContext;
708
+ const { versionControl, workspaceId, branch, user } = this.lockContext;
717
709
  // Fail the whole batch before any plan, validator or lock: one stray path
718
710
  // must not let its siblings land while it silently misses git.
719
711
  for (const w of writes) await this.assertNotGitInternals(w.path);
@@ -760,7 +752,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
760
752
  // with the discard so the corrupt bytes can't outlive the batch.
761
753
  const failedSeedDiscards = new Set<string>();
762
754
  // Release every acquired lock, each with the semantics its outcome
763
- // earned. Three shapes (mirroring the three WorkflowService releases):
755
+ // earned. Three shapes (mirroring the three VersionControlService releases):
764
756
  //
765
757
  // 'discard' → releaseLockNoCommit: resets the path's working tree to
766
758
  // HEAD. Only for bytes this batch itself owns — its committed paths
@@ -783,11 +775,11 @@ export class LockingFilesystem extends GitGuardedFilesystem {
783
775
  try {
784
776
  const mode = modeOf(p);
785
777
  if (mode === 'discard') {
786
- await workflow.releaseLockNoCommit(workspaceId, branch, p, user);
778
+ await versionControl.releaseLockNoCommit(workspaceId, branch, p, user);
787
779
  } else if (mode === 'enqueue') {
788
- await workflow.releaseLock(workspaceId, branch, p, user);
780
+ await versionControl.releaseLock(workspaceId, branch, p, user);
789
781
  } else {
790
- await workflow.releaseLockUntouched(workspaceId, branch, p, user);
782
+ await versionControl.releaseLockUntouched(workspaceId, branch, p, user);
791
783
  }
792
784
  } catch (releaseErr) {
793
785
  log.warn(`lock release failed for "${p}" during writeFiles:`, { err: releaseErr });
@@ -800,7 +792,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
800
792
  let holderName: string | null = null;
801
793
  let ok = false;
802
794
  for (let attempt = 0; attempt < ACQUIRE_RETRY_ATTEMPTS; attempt++) {
803
- const result = await workflow.acquireLock(workspaceId, branch, p, user);
795
+ const result = await versionControl.acquireLock(workspaceId, branch, p, user);
804
796
  if (result.acquired) {
805
797
  ok = true;
806
798
  break;
@@ -864,7 +856,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
864
856
  // without it would leave that folder invisible to them.
865
857
  for (const p of [...seeds.keys()].sort()) {
866
858
  if (paths.includes(p)) continue; // already locked as a caller path
867
- const result = await workflow.acquireLock(workspaceId, branch, p, user);
859
+ const result = await versionControl.acquireLock(workspaceId, branch, p, user);
868
860
  if (result.acquired) {
869
861
  acquired.push(p);
870
862
  } else {
@@ -967,7 +959,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
967
959
  // seeds): on the shared per-branch workspace another save's bytes may be
968
960
  // dirty with their commit still queued, and an unscoped commit would
969
961
  // sweep them in under this batch's author/summary.
970
- change = await workflow.commitChanges(workspaceId, user, summary, touched);
962
+ change = await versionControl.commitChanges(workspaceId, user, summary, touched);
971
963
  if (seeds.size > 0) this.lockContext.creatorAccess?.noteAccessFileWritten(workspaceId);
972
964
  } catch (err) {
973
965
  if (err instanceof PushNeedsAgentResolutionError) {
@@ -1027,16 +1019,10 @@ export class LockingFilesystem extends GitGuardedFilesystem {
1027
1019
  await releaseAll((p) =>
1028
1020
  committed.has(p) || failedSeedDiscards.has(p) ? 'discard' : 'untouched',
1029
1021
  );
1030
- // This batch path commits via `commitChanges`, NOT the per-file queue, so it
1031
- // skips `runPendingCommit`'s emit — fire the post-commit hook here with the
1032
- // WHOLE batch as one event, so an expensive subscriber (id-repair rebuilds the
1033
- // id index) reacts once per batch, not once per file. A no-op commit (clean
1034
- // tree) changed nothing, so it emits nothing.
1035
- if (change) {
1036
- // `touched` = caller paths + any creator-grant seeds that landed in the
1037
- // same commit — the exact set this batch may have touched.
1038
- this.lockContext.fileChanges?.emit({ workspaceId, branch, paths: touched, byUser: user });
1039
- }
1022
+ // The commit, if one landed, was reported by the git layer as it landed
1023
+ // (`VersionControlHooks.onCommitLanded`) with the paths it committed —
1024
+ // `touched` plus any creator-grant seed in the same commit. Nothing to
1025
+ // announce here.
1040
1026
  return change;
1041
1027
  }
1042
1028
 
@@ -1052,7 +1038,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
1052
1038
  const plan = await this.planCreate(inputPath, 'dir');
1053
1039
  // mkdir itself is not a lockable op (it touches no file content), so we
1054
1040
  // do the bare super-call without acquiring. The lock + commit happens on
1055
- // the `.gitkeep` write below — that's the file the workflow change
1041
+ // the `.gitkeep` write below — that's the file the version-control change
1056
1042
  // attaches to. If the dir already has content (rare; e.g. recursive
1057
1043
  // create where a sibling already exists), we skip the .gitkeep — empty-
1058
1044
  // folder placeholders are only useful for actually-empty folders.
@@ -1180,7 +1166,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
1180
1166
 
1181
1167
  /**
1182
1168
  * Acquire the lock, run `op`, release. The release does the commit +
1183
- * push via `WorkflowService.releaseLock`. On contention we retry a few
1169
+ * push via `VersionControlService.releaseLock`. On contention we retry a few
1184
1170
  * times before surfacing a structured failure — long enough to ride
1185
1171
  * out a human typing a quick edit, short enough that the agent doesn't
1186
1172
  * stall a whole turn waiting for someone to step away from a file.
@@ -1214,12 +1200,12 @@ export class LockingFilesystem extends GitGuardedFilesystem {
1214
1200
  op: () => Promise<T>,
1215
1201
  check?: () => Promise<void>,
1216
1202
  ): Promise<T> {
1217
- const { workflow, workspaceId, branch, user } = this.lockContext;
1203
+ const { versionControl, workspaceId, branch, user } = this.lockContext;
1218
1204
 
1219
1205
  let lastHolderName: string | null = null;
1220
1206
  let acquired = false;
1221
1207
  for (let attempt = 0; attempt < ACQUIRE_RETRY_ATTEMPTS; attempt++) {
1222
- const result = await workflow.acquireLock(workspaceId, branch, inputPath, user);
1208
+ const result = await versionControl.acquireLock(workspaceId, branch, inputPath, user);
1223
1209
  if (result.acquired) {
1224
1210
  acquired = true;
1225
1211
  break;
@@ -1263,9 +1249,9 @@ export class LockingFilesystem extends GitGuardedFilesystem {
1263
1249
  // caller actually cares about.
1264
1250
  try {
1265
1251
  if (err instanceof CheckRefusal || err instanceof DestinationTakenError) {
1266
- await workflow.releaseLockUntouched(workspaceId, branch, inputPath, user);
1252
+ await versionControl.releaseLockUntouched(workspaceId, branch, inputPath, user);
1267
1253
  } else {
1268
- await workflow.releaseLockNoCommit(workspaceId, branch, inputPath, user);
1254
+ await versionControl.releaseLockNoCommit(workspaceId, branch, inputPath, user);
1269
1255
  }
1270
1256
  } catch (releaseErr) {
1271
1257
  log.warn(`lock release failed for "${inputPath}" after op error:`, { err: releaseErr });
@@ -1278,7 +1264,7 @@ export class LockingFilesystem extends GitGuardedFilesystem {
1278
1264
  // actual `commitFile + push` out of band. The agent's tool call
1279
1265
  // returns once disk + lock + enqueue are done — the commit lands
1280
1266
  // moments later (typically <1s) without blocking the agent's turn.
1281
- await workflow.releaseLock(workspaceId, branch, inputPath, user);
1267
+ await versionControl.releaseLock(workspaceId, branch, inputPath, user);
1282
1268
  return result;
1283
1269
  }
1284
1270
  }
@@ -1,5 +1,5 @@
1
1
  import path from 'node:path';
2
- import { WorkflowValidationError } from '../../shared/domain-errors.js';
2
+ import { VersionControlValidationError } from '../../shared/domain-errors.js';
3
3
  import { sanitizedPath } from '../../shared/printable.js';
4
4
  import { assertTmpRefsTaken, isTmpRef } from './tmp-ref.js';
5
5
 
@@ -112,7 +112,7 @@ export function assertInsideRepo(wsPath: string, kbDirName: string): void {
112
112
  // forge a second line of the answer, in the message and in the `path` a
113
113
  // JSON consumer reads.
114
114
  const shown = sanitizedPath(wsPath);
115
- throw new WorkflowValidationError(
115
+ throw new VersionControlValidationError(
116
116
  `"${shown}" contains a control character: a line break, a NUL or another invisible byte is not part of any ` +
117
117
  'file name, and git reads a line break in a path as the end of one object name and the start of another. ' +
118
118
  'Remove it and send the name as it is written.',
@@ -127,7 +127,7 @@ export function assertInsideRepo(wsPath: string, kbDirName: string): void {
127
127
  .replace(/^(\.\.(\/|$))+/, '')
128
128
  .replace(/^\.$/, '');
129
129
  const corrected = isInsideRepo(normalized, kbDirName) ? normalized : `${kbDirName}/${normalized}`;
130
- throw new WorkflowValidationError(
130
+ throw new VersionControlValidationError(
131
131
  `"${wsPath}" is outside the knowledge base repository: paths are workspace-relative, must start with "${kbDirName}/" and may not contain "." or ".." segments or backslashes. ` +
132
132
  `Use "${corrected}" instead. A file written without that prefix lands beside the repository, where it is never committed or pushed.`,
133
133
  { kind: 'path-outside-repo', path: wsPath, kbDirName, corrected },
@@ -183,7 +183,7 @@ export function normalizeWorkspacePath(wsPath: string, kbDirName: string): strin
183
183
  // `core-config` and the `kbDirName` setting validator both refuse this at
184
184
  // the point it is SET, so reaching here means the two drifted.
185
185
  if (CONTROL_CHARACTERS.test(kbDirName)) {
186
- throw new WorkflowValidationError(
186
+ throw new VersionControlValidationError(
187
187
  `the configured checkout folder name (kbDirName / KB_DIR_NAME) contains a control character: "${sanitizedPath(kbDirName)}". ` +
188
188
  'Every workspace path is prefixed with it, so no path can be resolved until the setting is corrected.',
189
189
  { kind: 'kb-dir-name-control-character', kbDirName: sanitizedPath(kbDirName) },
@@ -237,7 +237,7 @@ export function assertRepoRootNameFree(wsPath: string, kbDirName: string): void
237
237
  const segments = String(wsPath).replace(/\/+$/, '').split('/');
238
238
  const reserved = kbDirName.toLowerCase();
239
239
  if (segments[0] !== kbDirName || segments[1]?.toLowerCase() !== reserved) return;
240
- throw new WorkflowValidationError(
240
+ throw new VersionControlValidationError(
241
241
  `"${segments[1]}" is reserved: it is the checkout folder's name. A folder of that name at the repository root ` +
242
242
  `could never be reached — every workspace path starting with "${kbDirName}/" names the checkout itself — so it cannot be created, moved to or renamed to.` +
243
243
  // Said only when the caller spelled it differently, so the ordinary
@@ -1,4 +1,4 @@
1
- import { WorkflowValidationError } from '../../shared/domain-errors.js';
1
+ import { VersionControlValidationError } from '../../shared/domain-errors.js';
2
2
  import { sanitizedPath } from '../../shared/printable.js';
3
3
 
4
4
  /**
@@ -33,9 +33,9 @@ export function isTmpRef(value: unknown): boolean {
33
33
  * copying it into the repository. A 400 with a `kind` to branch on, before
34
34
  * any gate, lock or write.
35
35
  */
36
- export function tmpRefReadOnlyRefusal(ref: string, tool: string): WorkflowValidationError {
36
+ export function tmpRefReadOnlyRefusal(ref: string, tool: string): VersionControlValidationError {
37
37
  const shown = sanitizedPath(ref);
38
- return new WorkflowValidationError(
38
+ return new VersionControlValidationError(
39
39
  `"${shown}" is a tmp ref, and ${tool} does not take one there: the workspace's tmp folder is read-only through ` +
40
40
  'the ref. read_file, file_stat and grep read the one file it names; to keep the file, copy_file it to a ' +
41
41
  'repository path (the ref as `src`, the repository path as `dest`).',
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
2
  import type { BranchSyncOutcome } from '@bevel-software/platform-shared';
3
3
  import { KbSyncService } from '../kb-sync.service.js';
4
- import type { SyncWorkflowPort, SyncWorkspacePort } from '../kb-sync.interface.js';
4
+ import type { SyncVersionControlPort, SyncWorkspacePort } from '../kb-sync.interface.js';
5
5
 
6
6
  function deferred<T>() {
7
7
  let resolve!: (v: T) => void;
@@ -24,7 +24,7 @@ function updated(branch: string): BranchSyncOutcome {
24
24
  describe('KbSyncService', () => {
25
25
  it('answers the sync without waiting for the tidy-up after it', async () => {
26
26
  let finish = (): void => undefined;
27
- const workflow: SyncWorkflowPort = {
27
+ const versionControl: SyncVersionControlPort = {
28
28
  syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
29
29
  closeChangeRequestsWithDeletedBranches: vi.fn(async () => 0),
30
30
  // A tidy-up that never ends unless told to — and one that fails.
@@ -36,36 +36,36 @@ describe('KbSyncService', () => {
36
36
  .mockRejectedValueOnce(new Error('boom')),
37
37
  retireRemoteGoneClone: vi.fn(async () => true),
38
38
  };
39
- const svc = new KbSyncService(workflow, workspaces(['main']));
39
+ const svc = new KbSyncService(versionControl, workspaces(['main']));
40
40
  await expect(svc.sync({ branches: 'all' })).resolves.toMatchObject({ status: 'synced' });
41
- expect(workflow.tidyAfterSweep).toHaveBeenCalledTimes(1);
41
+ expect(versionControl.tidyAfterSweep).toHaveBeenCalledTimes(1);
42
42
  await expect(svc.sync({ branches: 'all' })).resolves.toMatchObject({ status: 'synced' });
43
43
  finish();
44
44
  });
45
45
 
46
46
  it('syncs every known clone for an "all" request and reports unknown branches as not cloned', async () => {
47
- const workflow: SyncWorkflowPort = {
47
+ const versionControl: SyncVersionControlPort = {
48
48
  syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
49
49
  closeChangeRequestsWithDeletedBranches: vi.fn(async () => 1),
50
50
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
51
51
  retireRemoteGoneClone: vi.fn(async () => true),
52
52
  };
53
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x']));
53
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
54
54
 
55
55
  const all = await svc.sync({ branches: 'all' });
56
56
  expect(all.status).toBe('synced');
57
57
  expect(all.results.map((r) => r.branch)).toEqual(['main', 'ali/x']);
58
58
  expect(all.changeRequests.closedDeletedBranch).toBe(1);
59
59
  // Every sweep for deleted branches is followed by the leftover cleanup.
60
- expect(workflow.tidyAfterSweep).toHaveBeenCalledTimes(1);
61
- expect(workflow.syncWorkspaceFromRemote).toHaveBeenCalledWith('ali%2Fx');
60
+ expect(versionControl.tidyAfterSweep).toHaveBeenCalledTimes(1);
61
+ expect(versionControl.syncWorkspaceFromRemote).toHaveBeenCalledWith('ali%2Fx');
62
62
 
63
63
  const some = await svc.sync({ branches: ['ali/x', 'juan/other'] });
64
64
  expect(some.results).toEqual([updated('ali/x'), { branch: 'juan/other', outcome: 'not-cloned' }]);
65
65
  });
66
66
 
67
67
  it('a conflict or an error makes the result partial; the other branches still sync', async () => {
68
- const workflow: SyncWorkflowPort = {
68
+ const versionControl: SyncVersionControlPort = {
69
69
  syncWorkspaceFromRemote: vi.fn(async (id: string): Promise<BranchSyncOutcome> =>
70
70
  id === 'main'
71
71
  ? { branch: 'main', outcome: 'conflict', conflictedPaths: ['a.md'], error: 'msg' }
@@ -75,14 +75,14 @@ describe('KbSyncService', () => {
75
75
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
76
76
  retireRemoteGoneClone: vi.fn(async () => true),
77
77
  };
78
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x']));
78
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
79
79
  const r = await svc.sync({ branches: 'all' });
80
80
  expect(r.status).toBe('partial');
81
81
  expect(r.results[1]).toEqual(updated('ali/x'));
82
82
  });
83
83
 
84
84
  it('a failing sweep does not fail the sync', async () => {
85
- const workflow: SyncWorkflowPort = {
85
+ const versionControl: SyncVersionControlPort = {
86
86
  syncWorkspaceFromRemote: vi.fn(async () => updated('main')),
87
87
  closeChangeRequestsWithDeletedBranches: vi.fn(async () => {
88
88
  throw new Error('origin down');
@@ -90,7 +90,7 @@ describe('KbSyncService', () => {
90
90
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
91
91
  retireRemoteGoneClone: vi.fn(async () => true),
92
92
  };
93
- const svc = new KbSyncService(workflow, workspaces(['main']));
93
+ const svc = new KbSyncService(versionControl, workspaces(['main']));
94
94
  const r = await svc.sync({ branches: 'all' });
95
95
  expect(r.status).toBe('synced');
96
96
  expect(r.changeRequests.closedDeletedBranch).toBe(0);
@@ -103,7 +103,7 @@ describe('KbSyncService', () => {
103
103
  // landing after the gate opened.
104
104
  const calls: string[][] = [['']];
105
105
  let gateOpened = false;
106
- const workflow: SyncWorkflowPort = {
106
+ const versionControl: SyncVersionControlPort = {
107
107
  syncWorkspaceFromRemote: vi.fn(async (id: string) => {
108
108
  const branch = decodeURIComponent(id);
109
109
  if (!gateOpened && branch === 'main') {
@@ -120,7 +120,7 @@ describe('KbSyncService', () => {
120
120
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
121
121
  retireRemoteGoneClone: vi.fn(async () => true),
122
122
  };
123
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x', 'juan/y']));
123
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
124
124
 
125
125
  const first = svc.sync({ branches: ['main'] });
126
126
  // Three requests land while the first is parked on `gate`.
@@ -137,12 +137,12 @@ describe('KbSyncService', () => {
137
137
  expect(r2.results.map((r) => r.branch)).toEqual(['ali/x']);
138
138
  expect(r3.results.map((r) => r.branch)).toEqual(['juan/y']);
139
139
  expect(r4.results.map((r) => r.branch)).toEqual(['ali/x']);
140
- expect(workflow.closeChangeRequestsWithDeletedBranches).toHaveBeenCalledTimes(2);
140
+ expect(versionControl.closeChangeRequestsWithDeletedBranches).toHaveBeenCalledTimes(2);
141
141
  });
142
142
 
143
143
  it('an "all" arriving mid-run absorbs the queued branches', async () => {
144
144
  const gate = deferred<void>();
145
- const workflow: SyncWorkflowPort = {
145
+ const versionControl: SyncVersionControlPort = {
146
146
  syncWorkspaceFromRemote: vi.fn(async (id: string) => {
147
147
  if (id === 'main') await gate.promise;
148
148
  return updated(decodeURIComponent(id));
@@ -151,7 +151,7 @@ describe('KbSyncService', () => {
151
151
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
152
152
  retireRemoteGoneClone: vi.fn(async () => true),
153
153
  };
154
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x', 'juan/y']));
154
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
155
155
  const first = svc.sync({ branches: ['main'] });
156
156
  const second = svc.sync({ branches: ['ali/x'] });
157
157
  const third = svc.sync({ branches: 'all' });
@@ -166,14 +166,14 @@ describe('KbSyncService', () => {
166
166
 
167
167
  describe('KbSyncService.lastSync', () => {
168
168
  it('is null before the first sync, then records when, who and what', async () => {
169
- const workflow: SyncWorkflowPort = {
169
+ const versionControl: SyncVersionControlPort = {
170
170
  syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
171
171
  closeChangeRequestsWithDeletedBranches: vi.fn(async () => 0),
172
172
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
173
173
  retireRemoteGoneClone: vi.fn(async () => true),
174
174
  };
175
175
  let clock = 1_000;
176
- const svc = new KbSyncService(workflow, workspaces(['main']), () => clock);
176
+ const svc = new KbSyncService(versionControl, workspaces(['main']), () => clock);
177
177
  expect(svc.lastSync()).toBeNull();
178
178
 
179
179
  await svc.sync({ branches: 'all', by: 'bearer' });
@@ -191,7 +191,7 @@ describe('KbSyncService.lastSync', () => {
191
191
 
192
192
  it('a coalesced follow-up names everyone who asked for it', async () => {
193
193
  const gate = deferred<void>();
194
- const workflow: SyncWorkflowPort = {
194
+ const versionControl: SyncVersionControlPort = {
195
195
  syncWorkspaceFromRemote: vi.fn(async (id: string) => {
196
196
  if (id === 'main') await gate.promise;
197
197
  return updated(decodeURIComponent(id));
@@ -200,7 +200,7 @@ describe('KbSyncService.lastSync', () => {
200
200
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
201
201
  retireRemoteGoneClone: vi.fn(async () => true),
202
202
  };
203
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x']));
203
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
204
204
  const first = svc.sync({ branches: ['main'], by: 'bearer' });
205
205
  const second = svc.sync({ branches: ['ali/x'], by: 'github-signature' });
206
206
  const third = svc.sync({ branches: ['ali/x'], by: 'admin@example.com' });
@@ -212,7 +212,7 @@ describe('KbSyncService.lastSync', () => {
212
212
 
213
213
  describe('KbSyncService — a throwing branch step', () => {
214
214
  it('becomes an error outcome; the other branches, the sweep and the record all still happen', async () => {
215
- const workflow: SyncWorkflowPort = {
215
+ const versionControl: SyncVersionControlPort = {
216
216
  syncWorkspaceFromRemote: vi.fn(async (id: string) => {
217
217
  if (id === 'main') throw new Error('fatal: unable to access https://x:ghp_secret@host/r');
218
218
  return updated(decodeURIComponent(id));
@@ -221,7 +221,7 @@ describe('KbSyncService — a throwing branch step', () => {
221
221
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
222
222
  retireRemoteGoneClone: vi.fn(async () => true),
223
223
  };
224
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x']));
224
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x']));
225
225
  const r = await svc.sync({ branches: 'all', by: 'bearer' });
226
226
  expect(r.status).toBe('partial');
227
227
  expect(r.results[0]).toMatchObject({ branch: 'main', outcome: 'error' });
@@ -233,8 +233,8 @@ describe('KbSyncService — a throwing branch step', () => {
233
233
  });
234
234
 
235
235
  describe('KbSyncService — clones the host no longer has, and clones that cannot be read', () => {
236
- it('a remote-gone branch is retired through the workflow, counts as clean, and does not stop the others', async () => {
237
- const workflow: SyncWorkflowPort = {
236
+ it('a remote-gone branch is retired through version control, counts as clean, and does not stop the others', async () => {
237
+ const versionControl: SyncVersionControlPort = {
238
238
  syncWorkspaceFromRemote: vi.fn(async (id: string): Promise<BranchSyncOutcome> =>
239
239
  id === 'ali%2Fx' ? { branch: 'ali/x', outcome: 'remote-gone' } : updated(decodeURIComponent(id)),
240
240
  ),
@@ -242,16 +242,16 @@ describe('KbSyncService — clones the host no longer has, and clones that canno
242
242
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
243
243
  retireRemoteGoneClone: vi.fn(async () => true),
244
244
  };
245
- const svc = new KbSyncService(workflow, workspaces(['ali/x', 'main']));
245
+ const svc = new KbSyncService(versionControl, workspaces(['ali/x', 'main']));
246
246
  const r = await svc.sync({ branches: 'all' });
247
247
  expect(r.status).toBe('synced');
248
248
  expect(r.results).toEqual([{ branch: 'ali/x', outcome: 'remote-gone' }, updated('main')]);
249
- expect(workflow.retireRemoteGoneClone).toHaveBeenCalledTimes(1);
250
- expect(workflow.retireRemoteGoneClone).toHaveBeenCalledWith('ali%2Fx');
249
+ expect(versionControl.retireRemoteGoneClone).toHaveBeenCalledTimes(1);
250
+ expect(versionControl.retireRemoteGoneClone).toHaveBeenCalledWith('ali%2Fx');
251
251
  });
252
252
 
253
253
  it('a clone that could not be read is that branch’s error, not everyone’s', async () => {
254
- const workflow: SyncWorkflowPort = {
254
+ const versionControl: SyncVersionControlPort = {
255
255
  syncWorkspaceFromRemote: vi.fn(async (id: string) => updated(decodeURIComponent(id))),
256
256
  closeChangeRequestsWithDeletedBranches: vi.fn(async () => 0),
257
257
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
@@ -263,21 +263,21 @@ describe('KbSyncService — clones the host no longer has, and clones that canno
263
263
  { id: 'juan%2Fy', branch: 'juan/y', unreadable: "Could not read this branch's clone: EPERM" },
264
264
  ],
265
265
  };
266
- const svc = new KbSyncService(workflow, port);
266
+ const svc = new KbSyncService(versionControl, port);
267
267
  const r = await svc.sync({ branches: 'all' });
268
268
  expect(r.status).toBe('partial');
269
269
  expect(r.results).toEqual([
270
270
  updated('main'),
271
271
  { branch: 'juan/y', outcome: 'error', error: "Could not read this branch's clone: EPERM" },
272
272
  ]);
273
- expect(workflow.syncWorkspaceFromRemote).toHaveBeenCalledTimes(1);
273
+ expect(versionControl.syncWorkspaceFromRemote).toHaveBeenCalledTimes(1);
274
274
  });
275
275
  });
276
276
 
277
277
  describe('KbSyncService — a coalesced caller is judged by its own branches', () => {
278
278
  it("branch A's hook is not failed by branch B's conflict in the same follow-up", async () => {
279
279
  const gate = deferred<void>();
280
- const workflow: SyncWorkflowPort = {
280
+ const versionControl: SyncVersionControlPort = {
281
281
  syncWorkspaceFromRemote: vi.fn(async (id: string): Promise<BranchSyncOutcome> => {
282
282
  if (id === 'main') await gate.promise;
283
283
  if (id === 'juan%2Fy') return { branch: 'juan/y', outcome: 'conflict', conflictedPaths: ['a.md'], error: 'msg' };
@@ -287,7 +287,7 @@ describe('KbSyncService — a coalesced caller is judged by its own branches', (
287
287
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
288
288
  retireRemoteGoneClone: vi.fn(async () => true),
289
289
  };
290
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x', 'juan/y']));
290
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
291
291
  const first = svc.sync({ branches: ['main'] });
292
292
  const hookA = svc.sync({ branches: ['ali/x'] });
293
293
  const hookB = svc.sync({ branches: ['juan/y'] });
@@ -306,7 +306,7 @@ describe('KbSyncService — a coalesced caller is judged by its own branches', (
306
306
  describe('KbSyncService — a waiter keeps the branches it asked for', () => {
307
307
  it('a caller that edits its array after queueing changes nothing about its sync or its answer', async () => {
308
308
  const gate = deferred<void>();
309
- const workflow: SyncWorkflowPort = {
309
+ const versionControl: SyncVersionControlPort = {
310
310
  syncWorkspaceFromRemote: vi.fn(async (id: string) => {
311
311
  if (id === 'main') await gate.promise;
312
312
  return updated(decodeURIComponent(id));
@@ -315,7 +315,7 @@ describe('KbSyncService — a waiter keeps the branches it asked for', () => {
315
315
  tidyAfterSweep: vi.fn(async () => ({ closedEmpty: 0, removedLeftovers: 0 })),
316
316
  retireRemoteGoneClone: vi.fn(async () => true),
317
317
  };
318
- const svc = new KbSyncService(workflow, workspaces(['main', 'ali/x', 'juan/y']));
318
+ const svc = new KbSyncService(versionControl, workspaces(['main', 'ali/x', 'juan/y']));
319
319
  const first = svc.sync({ branches: ['main'] });
320
320
  const asked = ['ali/x'];
321
321
  const waiting = svc.sync({ branches: asked });
@@ -325,6 +325,6 @@ describe('KbSyncService — a waiter keeps the branches it asked for', () => {
325
325
  await first;
326
326
  const r = await waiting;
327
327
  expect(r.results.map((x) => x.branch)).toEqual(['ali/x']);
328
- expect(workflow.syncWorkspaceFromRemote).not.toHaveBeenCalledWith('juan%2Fy');
328
+ expect(versionControl.syncWorkspaceFromRemote).not.toHaveBeenCalledWith('juan%2Fy');
329
329
  });
330
330
  });
@@ -3,7 +3,7 @@ export type {
3
3
  LastSync,
4
4
  SyncRequest,
5
5
  SyncResult,
6
- SyncWorkflowPort,
6
+ SyncVersionControlPort,
7
7
  SyncWorkspacePort,
8
8
  } from './kb-sync.interface.js';
9
9
  export { KbSyncService } from './kb-sync.service.js';
@@ -5,7 +5,7 @@ import type { BranchSyncOutcome } from '@bevel-software/platform-shared';
5
5
  * Hexis "the repository changed" and Hexis brings the clones it holds up to
6
6
  * date. The module owns the HTTP surface, the credential check, the payload
7
7
  * parsing and the coalescing; every git operation happens behind the
8
- * workflow port below, never here.
8
+ * version-control port below, never here.
9
9
  */
10
10
 
11
11
  /** Which branches a caller asked to sync. `'all'` = every clone Hexis holds. */
@@ -51,8 +51,8 @@ export interface IKbSyncService {
51
51
  lastSync(): LastSync | null;
52
52
  }
53
53
 
54
- /** The slice of the workflow module a sync drives. */
55
- export interface SyncWorkflowPort {
54
+ /** The slice of the version-control module a sync drives. */
55
+ export interface SyncVersionControlPort {
56
56
  syncWorkspaceFromRemote(workspaceId: string): Promise<BranchSyncOutcome>;
57
57
  /**
58
58
  * Retire the clone of a branch the host deleted, under the branch-lifecycle