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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (827) 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 +68 -56
  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/core-schema.js +2 -2
  132. package/dist/modules/database/core-schema.js.map +1 -1
  133. package/dist/modules/diff/diff.routes.d.ts +3 -3
  134. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  135. package/dist/modules/diff/diff.routes.js +7 -7
  136. package/dist/modules/diff/diff.routes.js.map +1 -1
  137. package/dist/modules/embed/embed.routes.js +1 -1
  138. package/dist/modules/embed/embed.routes.js.map +1 -1
  139. package/dist/modules/embed/embed.service.d.ts +4 -4
  140. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  141. package/dist/modules/embed/embed.service.js +18 -18
  142. package/dist/modules/embed/embed.service.js.map +1 -1
  143. package/dist/modules/kb-fs/branch-name.js +8 -8
  144. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  145. package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
  146. package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
  147. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  148. package/dist/modules/kb-fs/locking-filesystem.js +27 -27
  149. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  150. package/dist/modules/kb-fs/repo-path.js +5 -5
  151. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  152. package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
  153. package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
  154. package/dist/modules/kb-fs/tmp-ref.js +2 -2
  155. package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
  156. package/dist/modules/kb-sync/index.d.ts +1 -1
  157. package/dist/modules/kb-sync/index.d.ts.map +1 -1
  158. package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
  159. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  160. package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
  161. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  162. package/dist/modules/kb-sync/kb-sync.service.js +10 -10
  163. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  164. package/dist/modules/mcp/mcp.service.d.ts +11 -4
  165. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  166. package/dist/modules/mcp/mcp.service.js +75 -19
  167. package/dist/modules/mcp/mcp.service.js.map +1 -1
  168. package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
  169. package/dist/modules/onboarding/onboarding.routes.js +2 -2
  170. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  171. package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
  172. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  173. package/dist/modules/onboarding/starter-pack.service.js +4 -4
  174. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  175. package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
  176. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  177. package/dist/modules/plugins/join-request-jobs.service.js +7 -7
  178. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  179. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  180. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  181. package/dist/modules/plugins/join-requests.service.js +5 -5
  182. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  183. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  184. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  185. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  186. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  187. package/dist/modules/plugins/plugins.routes.js +8 -8
  188. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  189. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
  190. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  191. package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
  192. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  193. package/dist/modules/secrets-vault/index.d.ts +2 -1
  194. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  195. package/dist/modules/secrets-vault/index.js +1 -0
  196. package/dist/modules/secrets-vault/index.js.map +1 -1
  197. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
  198. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
  199. package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
  200. package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
  201. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
  202. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  203. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  204. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
  205. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  206. package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
  207. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  208. package/dist/modules/settings/connection-check.js +1 -1
  209. package/dist/modules/settings/connection-check.js.map +1 -1
  210. package/dist/modules/settings/deployment-settings.service.js +1 -1
  211. package/dist/modules/settings/git-root-folders.js +1 -1
  212. package/dist/modules/settings/git-root-folders.js.map +1 -1
  213. package/dist/modules/settings/setup.routes.d.ts +1 -1
  214. package/dist/modules/settings/setup.routes.js +1 -1
  215. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  216. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  217. package/dist/modules/skills/pending-skills.service.js +4 -4
  218. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  219. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
  220. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  221. package/dist/modules/skills/skill-access-requests.routes.js +5 -5
  222. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  223. package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
  224. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  225. package/dist/modules/tool-helpers/tool-context.js +2 -2
  226. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  227. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  228. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  229. package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
  230. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  231. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  232. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  233. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
  234. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  235. package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
  236. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  237. package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
  238. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  239. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
  240. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  241. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
  242. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  243. package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
  244. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  245. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
  246. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  247. package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
  248. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  249. package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
  250. package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
  251. package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
  252. package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
  253. package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
  254. package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
  255. package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
  256. package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
  257. package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
  258. package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
  259. package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
  260. package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
  261. package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
  262. package/dist/modules/version-control/change-request-hooks.js.map +1 -0
  263. package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
  264. package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
  265. package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
  266. package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
  267. package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
  268. package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
  269. package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
  270. package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
  271. package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
  272. package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
  273. package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
  274. package/dist/modules/version-control/event-bus.d.ts.map +1 -0
  275. package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
  276. package/dist/modules/version-control/event-bus.js.map +1 -0
  277. package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
  278. package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
  279. package/dist/modules/version-control/events-delivery.js.map +1 -0
  280. package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
  281. package/dist/modules/version-control/events.routes.d.ts.map +1 -0
  282. package/dist/modules/version-control/events.routes.js.map +1 -0
  283. package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
  284. package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
  285. package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
  286. package/dist/modules/version-control/file-lock.service.js.map +1 -0
  287. package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
  288. package/dist/modules/version-control/git/change-request-link.js.map +1 -0
  289. package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
  290. package/dist/modules/version-control/git/git-version.js.map +1 -0
  291. package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
  292. package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
  293. package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
  294. package/dist/modules/version-control/git/git.service.js.map +1 -0
  295. package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
  296. package/dist/modules/version-control/git/merge-commit.js.map +1 -0
  297. package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
  298. package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
  299. package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
  300. package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
  301. package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
  302. package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
  303. package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
  304. package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
  305. package/dist/modules/version-control/index.d.ts.map +1 -0
  306. package/dist/modules/{workflow → version-control}/index.js +3 -2
  307. package/dist/modules/version-control/index.js.map +1 -0
  308. package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
  309. package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
  310. package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
  311. package/dist/modules/version-control/pending-commits.service.js.map +1 -0
  312. package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
  313. package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
  314. package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
  315. package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
  316. package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
  317. package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
  318. package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
  319. package/dist/modules/version-control/read-on-branch.js.map +1 -0
  320. package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
  321. package/dist/modules/version-control/recovery-bot.js.map +1 -0
  322. package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
  323. package/dist/modules/version-control/sanitize-error.js.map +1 -0
  324. package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
  325. package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
  326. package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
  327. package/dist/modules/version-control/version-control-hooks.js.map +1 -0
  328. package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
  329. package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
  330. package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
  331. package/dist/modules/version-control/version-control.routes.js.map +1 -0
  332. package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
  333. package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
  334. package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
  335. package/dist/modules/version-control/version-control.service.js.map +1 -0
  336. package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
  337. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  338. package/dist/modules/workspace/agent-access.gate.js +1 -1
  339. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  340. package/dist/modules/workspace/git-internals.middleware.js +2 -2
  341. package/dist/modules/workspace/kb-repository.js +1 -1
  342. package/dist/modules/workspace/kb-repository.js.map +1 -1
  343. package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
  344. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  345. package/dist/modules/workspace/startup/kb-git.js +1 -1
  346. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  347. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
  348. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  349. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  350. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  351. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
  352. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  353. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  354. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  355. package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
  356. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  357. package/dist/modules/workspace/startup/steps/template-source.js +8 -5
  358. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  359. package/dist/modules/workspace/workspace-tmp.js +3 -3
  360. package/dist/modules/workspace/workspace-tmp.js.map +1 -1
  361. package/dist/modules/workspace/workspace.routes.d.ts +4 -4
  362. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  363. package/dist/modules/workspace/workspace.routes.js +22 -22
  364. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  365. package/dist/modules/workspace/workspace.service.d.ts +6 -6
  366. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  367. package/dist/modules/workspace/workspace.service.js +11 -11
  368. package/dist/modules/workspace/workspace.service.js.map +1 -1
  369. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  370. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  371. package/dist/modules/workspace/workspace.tools.js +15 -10
  372. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  373. package/dist/shared/canonical-file-identity.d.ts +2 -2
  374. package/dist/shared/canonical-file-identity.js +5 -5
  375. package/dist/shared/canonical-file-identity.js.map +1 -1
  376. package/dist/shared/domain-errors.d.ts +39 -39
  377. package/dist/shared/domain-errors.d.ts.map +1 -1
  378. package/dist/shared/domain-errors.js +44 -44
  379. package/dist/shared/domain-errors.js.map +1 -1
  380. package/dist/shared/git.contract.d.ts +1 -1
  381. package/dist/shared/git.contract.js +1 -1
  382. package/dist/shared/http-errors.d.ts +3 -3
  383. package/dist/shared/http-errors.d.ts.map +1 -1
  384. package/dist/shared/http-errors.js +1 -1
  385. package/dist/shared/http-errors.js.map +1 -1
  386. package/dist/shared/pending-proposals.d.ts +3 -3
  387. package/dist/shared/pending-proposals.d.ts.map +1 -1
  388. package/dist/shared/pending-proposals.js +2 -2
  389. package/dist/shared/pending-proposals.js.map +1 -1
  390. package/dist/tenancy/static-tenant-source.js +1 -1
  391. package/dist/tenancy/static-tenant-source.js.map +1 -1
  392. package/migrations/0012_agent_audit.sql +40 -40
  393. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
  394. package/migrations/meta/0012_snapshot.json +2246 -2246
  395. package/migrations/meta/0013_snapshot.json +2258 -2258
  396. package/package.json +4 -4
  397. package/src/__tests__/account-admin.ts +27 -0
  398. package/src/__tests__/hexis-catalog.ts +4 -4
  399. package/src/__tests__/kb-context.ts +30 -30
  400. package/src/__tests__/kb-layout-config.test.ts +21 -0
  401. package/src/__tests__/open-change-gate.ts +1 -1
  402. package/src/__tests__/tool-handler.ts +15 -0
  403. package/src/__tests__/tool-wiring.ts +10 -4
  404. package/src/__tests__/workspace-service.ts +1 -1
  405. package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
  406. package/src/core/__tests__/compose-embed.test.ts +1 -1
  407. package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
  408. package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
  409. package/src/core/__tests__/gated-boot.test.ts +2 -2
  410. package/src/core/__tests__/lifecycle.test.ts +9 -9
  411. package/src/core/catalog-cache-invalidation.ts +2 -2
  412. package/src/core/compose-embed.ts +3 -3
  413. package/src/core/core-ports.ts +19 -4
  414. package/src/core/create-core-server.ts +39 -25
  415. package/src/core/create-core-services.ts +79 -63
  416. package/src/core/lifecycle.ts +9 -9
  417. package/src/core-config.ts +3 -3
  418. package/src/index.ts +5 -5
  419. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
  420. package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
  421. package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
  422. package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
  423. package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
  424. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
  425. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
  426. package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
  427. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
  428. package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
  429. package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
  430. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
  431. package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
  432. package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
  433. package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
  434. package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
  435. package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
  436. package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
  437. package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
  438. package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
  439. package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
  440. package/src/modules/access/access-control.service.ts +1 -1
  441. package/src/modules/access/access-declarations.ts +2 -2
  442. package/src/modules/access/access-mutation.service.ts +2 -2
  443. package/src/modules/access/access-requests.routes.ts +7 -7
  444. package/src/modules/access/access-requests.service.ts +13 -13
  445. package/src/modules/access/access.routes.ts +11 -11
  446. package/src/modules/access/admin-locked-commit.ts +11 -11
  447. package/src/modules/access/admin-route-helpers.ts +5 -5
  448. package/src/modules/access/change-read-gate.ts +1 -1
  449. package/src/modules/access/groups-admin.service.ts +7 -7
  450. package/src/modules/access/reference-scan.ts +1 -1
  451. package/src/modules/access/roles-admin.service.ts +9 -9
  452. package/src/modules/access/synced-groups-committer.ts +11 -11
  453. package/src/modules/access/user-access-removal.service.ts +7 -7
  454. package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
  455. package/src/modules/access-model/access-errors.ts +4 -4
  456. package/src/modules/access-model/access-grammar.ts +4 -4
  457. package/src/modules/access-model/change-gate.ts +1 -1
  458. package/src/modules/access-model/roles-yaml-guard.ts +4 -4
  459. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
  460. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
  461. package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
  462. package/src/modules/agent-guide/agent-guide.ts +48 -22
  463. package/src/modules/agent-guide/guide-budget.ts +6 -2
  464. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
  465. package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
  466. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
  467. package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
  468. package/src/modules/agent-instructions/compose.ts +24 -9
  469. package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
  470. package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
  471. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
  472. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
  473. package/src/modules/audit/event-classifier.ts +155 -155
  474. package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
  475. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
  476. package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
  477. package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
  478. package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
  479. package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
  480. package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
  481. package/src/modules/auth/account-erasure.service.ts +27 -9
  482. package/src/modules/auth/account-hooks.ts +34 -0
  483. package/src/modules/auth/account-switch-lock.ts +2 -2
  484. package/src/modules/auth/account.routes.ts +23 -5
  485. package/src/modules/auth/auth.service.ts +4 -4
  486. package/src/modules/auth/index.ts +1 -0
  487. package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
  488. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
  489. package/src/modules/database/core-schema.ts +2 -2
  490. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
  491. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
  492. package/src/modules/diff/diff.routes.ts +8 -8
  493. package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
  494. package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
  495. package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
  496. package/src/modules/embed/embed.routes.ts +1 -1
  497. package/src/modules/embed/embed.service.ts +17 -17
  498. package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
  499. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
  500. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
  501. package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
  502. package/src/modules/kb-fs/branch-name.ts +8 -8
  503. package/src/modules/kb-fs/file-change-notifier.ts +2 -2
  504. package/src/modules/kb-fs/locking-filesystem.ts +30 -30
  505. package/src/modules/kb-fs/repo-path.ts +5 -5
  506. package/src/modules/kb-fs/tmp-ref.ts +3 -3
  507. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
  508. package/src/modules/kb-sync/index.ts +1 -1
  509. package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
  510. package/src/modules/kb-sync/kb-sync.service.ts +9 -9
  511. package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
  512. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
  513. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
  514. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
  515. package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
  516. package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
  517. package/src/modules/mcp/mcp.service.ts +89 -28
  518. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
  519. package/src/modules/onboarding/onboarding.contract.ts +1 -1
  520. package/src/modules/onboarding/onboarding.routes.ts +2 -2
  521. package/src/modules/onboarding/starter-pack.service.ts +6 -6
  522. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
  523. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
  524. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
  525. package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
  526. package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
  527. package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
  528. package/src/modules/plugins/join-request-jobs.service.ts +10 -10
  529. package/src/modules/plugins/join-requests.service.ts +4 -4
  530. package/src/modules/plugins/plugin-rename.service.ts +1 -1
  531. package/src/modules/plugins/plugins.routes.ts +9 -9
  532. package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
  533. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
  534. package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
  535. package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
  536. package/src/modules/secrets-vault/index.ts +7 -0
  537. package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
  538. package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
  539. package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
  540. package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
  541. package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
  542. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
  543. package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
  544. package/src/modules/settings/connection-check.ts +1 -1
  545. package/src/modules/settings/deployment-settings.service.ts +1 -1
  546. package/src/modules/settings/git-root-folders.ts +1 -1
  547. package/src/modules/settings/setup.routes.ts +1 -1
  548. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
  549. package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
  550. package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
  551. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
  552. package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
  553. package/src/modules/skills/pending-skills.service.ts +3 -3
  554. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  555. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
  556. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
  557. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
  558. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
  559. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
  560. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
  561. package/src/modules/tool-helpers/tool-context.ts +6 -6
  562. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  563. package/src/modules/tool-helpers/tool.contract.ts +4 -4
  564. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
  565. package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
  566. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
  567. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
  568. package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
  569. package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
  570. package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
  571. package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
  572. package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
  573. package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
  574. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
  575. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
  576. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
  577. package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
  578. package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
  579. package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
  580. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
  581. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
  582. package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
  583. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
  584. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
  585. package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
  586. package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
  587. package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
  588. 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
  589. 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
  590. package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
  591. 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
  592. package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
  593. 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
  594. package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
  595. package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
  596. 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
  597. package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
  598. package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
  599. package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
  600. package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
  601. package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
  602. package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
  603. package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
  604. 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
  605. 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
  606. 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
  607. package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
  608. package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
  609. package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
  610. package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
  611. package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
  612. package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
  613. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
  614. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
  615. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
  616. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
  617. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
  618. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
  619. package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
  620. package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
  621. package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
  622. package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
  623. package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
  624. package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
  625. package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
  626. package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
  627. package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
  628. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
  629. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
  630. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
  631. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
  632. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
  633. package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
  634. package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
  635. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
  636. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
  637. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
  638. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
  639. package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
  640. package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
  641. package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
  642. package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
  643. package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
  644. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
  645. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
  646. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
  647. package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
  648. package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
  649. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
  650. package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
  651. package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
  652. package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
  653. package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
  654. package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
  655. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
  656. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
  657. package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
  658. package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
  659. package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
  660. package/src/modules/{workflow → version-control}/index.ts +6 -5
  661. package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
  662. package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
  663. package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
  664. package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
  665. package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
  666. package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
  667. package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
  668. package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
  669. package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
  670. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
  671. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
  672. package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
  673. package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
  674. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
  675. package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
  676. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
  677. package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
  678. package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
  679. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
  680. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
  681. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
  682. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
  683. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
  684. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
  685. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
  686. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
  687. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
  688. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
  689. package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
  690. package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
  691. package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
  692. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
  693. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
  694. package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
  695. package/src/modules/workspace/agent-access.gate.ts +5 -5
  696. package/src/modules/workspace/git-internals.middleware.ts +2 -2
  697. package/src/modules/workspace/kb-repository.ts +1 -1
  698. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
  699. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
  700. package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
  701. package/src/modules/workspace/startup/kb-git.ts +1 -1
  702. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
  703. package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
  704. package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
  705. package/src/modules/workspace/startup/steps/template-source.ts +21 -6
  706. package/src/modules/workspace/workspace-tmp.ts +4 -4
  707. package/src/modules/workspace/workspace.routes.ts +26 -26
  708. package/src/modules/workspace/workspace.service.ts +11 -11
  709. package/src/modules/workspace/workspace.tools.ts +17 -10
  710. package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
  711. package/src/shared/__tests__/http-errors.test.ts +4 -4
  712. package/src/shared/canonical-file-identity.ts +5 -5
  713. package/src/shared/domain-errors.ts +44 -44
  714. package/src/shared/git.contract.ts +1 -1
  715. package/src/shared/http-errors.ts +3 -3
  716. package/src/shared/kb-context.ts +130 -130
  717. package/src/shared/pending-proposals.ts +4 -4
  718. package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
  719. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
  720. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
  721. package/src/tenancy/index.ts +35 -35
  722. package/src/tenancy/static-tenant-source.ts +1 -1
  723. package/src/tenancy/tenant-host.ts +261 -261
  724. package/src/tenancy/tenant-runtime.ts +208 -208
  725. package/src/tenancy/tenant-source.contract.ts +59 -59
  726. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
  727. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
  728. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
  729. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
  730. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
  731. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
  732. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
  733. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
  734. package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
  735. package/dist/modules/workflow/change-request-hooks.js.map +0 -1
  736. package/dist/modules/workflow/event-bus.d.ts.map +0 -1
  737. package/dist/modules/workflow/event-bus.js.map +0 -1
  738. package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
  739. package/dist/modules/workflow/events-delivery.js.map +0 -1
  740. package/dist/modules/workflow/events.routes.d.ts.map +0 -1
  741. package/dist/modules/workflow/events.routes.js.map +0 -1
  742. package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
  743. package/dist/modules/workflow/file-lock.service.js.map +0 -1
  744. package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
  745. package/dist/modules/workflow/git/change-request-link.js.map +0 -1
  746. package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
  747. package/dist/modules/workflow/git/git-version.js.map +0 -1
  748. package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
  749. package/dist/modules/workflow/git/git.service.js.map +0 -1
  750. package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
  751. package/dist/modules/workflow/git/merge-commit.js.map +0 -1
  752. package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
  753. package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
  754. package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
  755. package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
  756. package/dist/modules/workflow/index.d.ts.map +0 -1
  757. package/dist/modules/workflow/index.js.map +0 -1
  758. package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
  759. package/dist/modules/workflow/pending-commits.service.js.map +0 -1
  760. package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
  761. package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
  762. package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
  763. package/dist/modules/workflow/read-on-branch.js.map +0 -1
  764. package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
  765. package/dist/modules/workflow/recovery-bot.js.map +0 -1
  766. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
  767. package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
  768. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
  769. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
  770. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
  771. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
  772. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
  773. package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
  774. package/dist/modules/workflow/sanitize-error.js.map +0 -1
  775. package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
  776. package/dist/modules/workflow/workflow-hooks.js.map +0 -1
  777. package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
  778. package/dist/modules/workflow/workflow.routes.js.map +0 -1
  779. package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
  780. package/dist/modules/workflow/workflow.service.js.map +0 -1
  781. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
  782. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
  783. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
  784. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
  785. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
  786. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
  787. /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
  788. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
  789. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
  790. /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
  791. /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
  792. /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
  793. /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
  794. /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
  795. /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
  796. /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
  797. /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
  798. /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
  799. /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
  800. /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
  801. /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
  802. /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
  803. /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
  804. /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
  805. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
  806. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
  807. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
  808. /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
  809. /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
  810. /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
  811. /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
  812. /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
  813. /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
  814. /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
  815. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
  816. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
  817. /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
  818. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
  819. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
  820. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
  821. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
  822. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
  823. /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
  824. /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
  825. /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
  826. /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
  827. /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
@@ -12,6 +12,8 @@ import {
12
12
  configuredAs,
13
13
  type DeclaredOAuthProvider,
14
14
  type ISecretsVaultService,
15
+ type ManagedSignInPort,
16
+ type SecretConfigStatus,
15
17
  } from './secrets-vault.contract.js';
16
18
  import type { IToolManualService, ToolManualSummary, ToolVariable } from '../tool-manuals/index.js';
17
19
  import type { IConnectionProbeService } from '../connection-probe/index.js';
@@ -48,6 +50,36 @@ export interface SecretsVaultRoutesDeps {
48
50
  publicBackendUrl: string;
49
51
  /** Public base URL of the SPA — where the OAuth callback lands the browser. */
50
52
  publicFrontendUrl: string;
53
+ /**
54
+ * The distribution's managed sign-in port, read per request (the overlay
55
+ * binds it after boot). Absent or null: a managed sign-in is listed as
56
+ * waiting on the deployment, and starting one is refused with that reason.
57
+ */
58
+ managedSignIns?: () => ManagedSignInPort | null;
59
+ }
60
+
61
+ /**
62
+ * The card a managed sign-in renders as on the Connect page, as `/connect/pending`
63
+ * and `/secrets/tools` report it beside the ordinary fields.
64
+ */
65
+ interface ManagedSignInView {
66
+ connectorId: string;
67
+ scopeSet: string;
68
+ /** Who the connection belongs to: each person, or the workspace. */
69
+ tokenScope: 'user' | 'shared';
70
+ displayName: string;
71
+ icon: string;
72
+ description: string;
73
+ permissions: string[];
74
+ scopeSetLabel: string;
75
+ dataResidency: string;
76
+ subprocessor: string;
77
+ /** The connected account the row remembers, for "Connected as …". */
78
+ account: string | null;
79
+ /** The owner replaced the managed app with the deployment's own (the ordinary flow then applies). */
80
+ ownApp: boolean;
81
+ /** Sign-ins through the broker can be started on this deployment. */
82
+ available: boolean;
51
83
  }
52
84
 
53
85
  function redirectUriFor(publicBackendUrl: string): string {
@@ -66,7 +98,9 @@ function declaredProvider(variable: ToolVariable): DeclaredOAuthProvider | null
66
98
  return {
67
99
  authorizationUrl: oauth.authorizationUrl,
68
100
  tokenUrl: oauth.tokenUrl,
69
- clientId: oauth.clientId,
101
+ // A managed sign-in declares no client of its own (the broker's app is
102
+ // the client); the one route that pins a provider requires an owner's.
103
+ clientId: oauth.clientId ?? '',
70
104
  scopes: oauth.scopes,
71
105
  // Static authorize params (e.g. Google's `access_type=offline`) so the
72
106
  // provider returns a refresh token.
@@ -149,6 +183,36 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
149
183
  return variable ? { manual, variable } : null;
150
184
  }
151
185
 
186
+ /**
187
+ * The card for a managed sign-in, or null for an ordinary one. Built from
188
+ * the variable (which connector), the port (what the connector is) and
189
+ * the row (whose account, whether an owner brought their own app).
190
+ */
191
+ function managedView(v: ToolVariable, st: SecretConfigStatus | undefined): ManagedSignInView | null {
192
+ const ref = v.oauth?.managed;
193
+ if (!ref) return null;
194
+ const port = deps.managedSignIns?.() ?? null;
195
+ const card = port?.describe(ref) ?? null;
196
+ const shared = v.scope === 'admin';
197
+ return {
198
+ connectorId: ref.connectorId,
199
+ scopeSet: ref.scopeSet,
200
+ tokenScope: shared ? 'shared' : 'user',
201
+ displayName: card?.displayName ?? v.label ?? ref.connectorId,
202
+ icon: card?.icon ?? 'Plug',
203
+ description: card?.description ?? '',
204
+ permissions: card?.permissions ?? [],
205
+ scopeSetLabel: card?.scopeSetLabel ?? ref.scopeSet,
206
+ dataResidency: card?.dataResidency ?? '',
207
+ subprocessor: card?.subprocessor ?? '',
208
+ account: (shared ? st?.adminAccount : st?.userAccount) ?? null,
209
+ ownApp: st?.adminBringsOwnApp === true,
210
+ // Startable only for a connector this distribution knows: a broker that
211
+ // is up cannot open a sign-in through a connector it has no card for.
212
+ available: port?.available() === true && card !== null,
213
+ };
214
+ }
215
+
152
216
  router.get('/secrets', async (req, res) => {
153
217
  const userId = req.userId;
154
218
  if (!userId) return void res.status(401).json({ error: 'Not authenticated' });
@@ -269,22 +333,31 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
269
333
  const key = varKey(m.name, v.name);
270
334
  const st = statusByKey.get(key);
271
335
  const isOAuth = v.oauth != null;
272
- const authorized = isOAuth ? (st?.userAuthorized ?? false) : undefined;
336
+ // A SHARED sign-in (a managed workspace connection) is authorized
337
+ // when the shared row holds tokens — one connection for everyone.
338
+ const shared = isOAuth && v.scope === 'admin';
339
+ const authorized = isOAuth ? ((shared ? st?.adminAuthorized : st?.userAuthorized) ?? false) : undefined;
273
340
  // For an OAuth var: which declared permissions the token doesn't cover,
274
341
  // so the panel can say WHAT it works for and what it doesn't. Only
275
342
  // meaningful once authorized (an unauthorized var has no token at all).
276
- const missing = isOAuth && authorized ? missingScopes(v.oauth?.scopes, st?.grantedScopes) : [];
343
+ const granted = shared ? st?.adminGrantedScopes : st?.grantedScopes;
344
+ const missing = isOAuth && authorized ? missingScopes(v.oauth?.scopes, granted) : [];
345
+ const managed = managedView(v, st);
277
346
  return {
278
347
  name: v.name,
279
348
  scope: v.scope,
280
349
  label: v.label ?? null,
281
350
  key,
282
351
  adminConfigured: st?.adminConfigured ?? false,
352
+ // What the owner's row IS, so a surface can tell a client of the
353
+ // OAuth kind from a key left from when the variable was static.
354
+ adminKind: st?.adminKind ?? null,
283
355
  userConfigured: st?.userConfigured ?? false,
284
356
  oauth: isOAuth,
285
357
  authorized,
286
358
  needsReauth: isOAuth && authorized === true && missing.length > 0,
287
359
  missingScopes: missing,
360
+ ...(managed ? { managed } : {}),
288
361
  };
289
362
  }),
290
363
  })),
@@ -389,21 +462,35 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
389
462
  const toolOAuth = manuals.flatMap((m) => {
390
463
  const canWrite = canWriteBySlug.get(m.slug) ?? false;
391
464
  return (m.variables ?? [])
392
- .filter((v) => v.scope === 'user' && v.oauth)
465
+ // Every per-user sign-in, plus a managed WORKSPACE connection (the
466
+ // one `admin`-scoped sign-in there is): listed for everyone who can
467
+ // read the tool, since everyone calls through it, with Connect
468
+ // offered to the writers who can make it.
469
+ .filter((v) => v.oauth && (v.scope === 'user' || v.oauth.managed))
393
470
  .map((v) => {
394
471
  const st = statusByKey.get(varKey(m.name, v.name));
395
- const authorized = st?.userAuthorized ?? false;
472
+ const managed = managedView(v, st);
473
+ const shared = v.scope === 'admin';
474
+ const authorized = (shared ? st?.adminAuthorized : st?.userAuthorized) ?? false;
396
475
  // Signed in, but the token's granted scopes no longer cover what the
397
476
  // tool declares → surface as needing re-authorization, not as connected.
398
477
  const needsReauth =
399
- authorized && !scopesCovered(v.oauth?.scopes, st?.grantedScopes);
478
+ authorized && !scopesCovered(v.oauth?.scopes, shared ? st?.adminGrantedScopes : st?.grantedScopes);
400
479
  // On an oauth var the ADMIN row is the provider registration — the
401
480
  // client secret — without which nobody's Authorize can work. It is a
402
481
  // workspace value like any other, so it carries the same flag. It
403
482
  // must be an OAUTH row: `beginToolOAuthByKey` refuses a static one,
404
483
  // so a shared key left over from before this var was made OAuth
405
484
  // would otherwise light up Authorize with nothing behind it.
406
- const ownerConfigured = configuredAs('oauth', st?.adminConfigured, st?.adminKind);
485
+ //
486
+ // A MANAGED sign-in needs no registration here — the broker holds
487
+ // it — so it is configured when the deployment can reach a broker,
488
+ // when an owner replaced the managed app with their own, or when a
489
+ // token is already stored (nothing is outstanding for a connection
490
+ // that works, whatever the broker is doing).
491
+ const ownerConfigured = managed
492
+ ? managed.ownApp || managed.available || authorized
493
+ : configuredAs('oauth', st?.adminConfigured, st?.adminKind);
407
494
  return {
408
495
  slug: m.slug,
409
496
  varName: v.name,
@@ -413,7 +500,13 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
413
500
  authorized,
414
501
  needsReauth,
415
502
  ownerConfigured,
416
- ownerOnly: !ownerConfigured && !canWrite,
503
+ // Not the caller's to do: an ordinary sign-in waiting on a
504
+ // registration the caller may not write, or a managed WORKSPACE
505
+ // connection seen by someone who may not write the tool. A
506
+ // managed personal sign-in is always the caller's own, broker or
507
+ // no broker.
508
+ ownerOnly: managed ? shared && !canWrite : !ownerConfigured && !canWrite,
509
+ ...(managed ? { managed, canWrite } : {}),
417
510
  };
418
511
  });
419
512
  });
@@ -516,10 +609,21 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
516
609
  const provider = declaredProvider(found.variable);
517
610
  if (!provider) return void res.status(422).json({ error: endpointsUnknown(found.manual) });
518
611
  const clientSecret = (req.body ?? {}).clientSecret;
612
+ // A managed sign-in names no client of its own; an owner who brings
613
+ // the deployment's own app ("use our own app") supplies its id here
614
+ // with the secret, and the pinned row then runs the ordinary flow:
615
+ // this deployment's redirect URI, a direct token exchange and refresh.
616
+ const ownClientId = typeof (req.body ?? {}).clientId === 'string' ? (req.body.clientId as string).trim() : '';
617
+ const clientId = provider.clientId || ownClientId;
618
+ if (!clientId) {
619
+ return void res.status(422).json({
620
+ error: 'This sign-in goes through the managed connector. To use your own OAuth app instead, send its client id with the secret.',
621
+ });
622
+ }
519
623
  await secretsVault.putSharedOAuthClientSecret({
520
624
  key: varKey(found.manual.name, found.variable.name),
521
625
  clientSecret,
522
- provider,
626
+ provider: { ...provider, clientId },
523
627
  });
524
628
  res.status(201).json({ ok: true });
525
629
  } catch (err) {
@@ -566,6 +670,50 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
566
670
  if (!signIn?.oauth) {
567
671
  throw new SecretOAuthError("This tool's owner hasn't finished setting this up");
568
672
  }
673
+ const returnTo: unknown = (req.body ?? {}).returnTo;
674
+ // A MANAGED sign-in goes through the broker — unless an owner pinned the
675
+ // deployment's own app on the shared row, in which case the ordinary
676
+ // flow below applies exactly as for a file-declared client. Read from
677
+ // the LIVE declaration like everything else here.
678
+ const ref = signIn.oauth.managed;
679
+ if (ref) {
680
+ const [st] = await secretsVault.statusFor(userId, [key]);
681
+ // An owner's own app runs the ordinary flow, whose tokens land on the
682
+ // caller's own row. A WORKSPACE connection reads the shared row, so
683
+ // the two cannot meet: that combination is refused here rather than
684
+ // signing an owner in to a row nobody reads.
685
+ if (st?.adminBringsOwnApp === true && signIn.scope === 'admin') {
686
+ return void res.status(422).json({
687
+ error: 'A workspace connection cannot use your own OAuth app yet. Remove the client secret to connect it through the managed connector.',
688
+ });
689
+ }
690
+ if (st?.adminBringsOwnApp !== true) {
691
+ const port = deps.managedSignIns?.() ?? null;
692
+ if (!port || !port.available()) {
693
+ return void res.status(409).json({
694
+ error: 'This deployment is not connected to a connector broker yet. Ask your admin to configure it.',
695
+ });
696
+ }
697
+ // The same answer the card gives (`available`): a connector the
698
+ // distribution does not know cannot be started through its broker.
699
+ if (!port.describe(ref)) {
700
+ return void res.status(409).json({
701
+ error: 'This deployment does not offer the connector this sign-in names. Ask your admin.',
702
+ });
703
+ }
704
+ const shared = signIn.scope === 'admin';
705
+ if (shared && !(await accessControl.canWrite(defaultWs(), email, manual.path))) {
706
+ return void res.status(403).json({ error: 'Only a writer of this tool can connect its workspace account.' });
707
+ }
708
+ const { url } = await port.start({
709
+ userId: shared ? null : userId,
710
+ key,
711
+ ref,
712
+ returnTo: isSafeReturnPath(returnTo) ? returnTo : '/connect',
713
+ });
714
+ return void res.json({ url });
715
+ }
716
+ }
569
717
  const provider = declared ? declaredProvider(declared) : undefined;
570
718
  if (provider === null) return void res.status(422).json({ error: endpointsUnknown(manual) });
571
719
  // Provision the caller's oauth row (from the owner-set secret) FIRST — its id
@@ -587,7 +735,6 @@ export function createSecretsVaultRoutes(deps: SecretsVaultRoutesDeps): express.
587
735
  // the provider, so the state is the only thing it can trust. An absent or
588
736
  // unsafe `returnTo` falls back to the legacy `'connect'` marker, which
589
737
  // keeps a body-less start byte-identical to what it produced before.
590
- const returnTo: unknown = (req.body ?? {}).returnTo;
591
738
  const state = signState(deps.stateSecret, {
592
739
  u: userId,
593
740
  i: id,
@@ -2,7 +2,7 @@ import fs from 'node:fs/promises';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
4
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
5
- import { NodeGitRunner } from '../../workflow/git/node-git-runner.js';
5
+ import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
6
6
  import { ManagedRepository, MANAGED_REPOSITORY_DIR } from '../managed-repository.js';
7
7
  import { RepositorySource, type GitHubAppRepository } from '../repository-source.js';
8
8
 
@@ -10,7 +10,7 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
10
10
  import { testKbContext } from '../../../__tests__/kb-context.js';
11
11
  import { createSetupRoutes } from '../setup.routes.js';
12
12
  import { DeploymentSettingsService } from '../deployment-settings.service.js';
13
- import { NodeGitRunner } from '../../workflow/git/node-git-runner.js';
13
+ import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
14
14
  import { TemplateFilesStep } from '../../workspace/startup/steps/template-files.step.js';
15
15
  import { NodeFs } from '../../kb-fs/node-fs.js';
16
16
  import { defaultKbTemplateDir } from '../../../assets.js';
@@ -12,7 +12,7 @@ import { createSetupRoutes } from '../setup.routes.js';
12
12
  import { DeploymentSettingsService } from '../deployment-settings.service.js';
13
13
  import { ManagedRepository } from '../managed-repository.js';
14
14
  import { RepositorySource } from '../repository-source.js';
15
- import { NodeGitRunner } from '../../workflow/git/node-git-runner.js';
15
+ import { NodeGitRunner } from '../../version-control/git/node-git-runner.js';
16
16
  import { TemplateFilesStep } from '../../workspace/startup/steps/template-files.step.js';
17
17
  import { NodeFs } from '../../kb-fs/node-fs.js';
18
18
  import { defaultKbTemplateDir } from '../../../assets.js';
@@ -6,7 +6,7 @@ import { validateHttpsRemote } from './deployment-settings.service.js';
6
6
  import { classifyGitFailure } from '../../shared/git-failure.js';
7
7
  import { redactSecret, urlQuerySecrets } from '../../shared/redact-secret.js';
8
8
  import { GitRunError, type IGitRunner } from '../../shared/git.contract.js';
9
- import { NodeGitRunner } from '../workflow/index.js';
9
+ import { NodeGitRunner } from '../version-control/index.js';
10
10
 
11
11
  /** The repository connection a deployment reads and writes its knowledge base with. */
12
12
  export interface RepositoryConnection {
@@ -325,7 +325,7 @@ export const CORE_SETTINGS: SettingDef[] = [
325
325
  {
326
326
  /**
327
327
  * Whether the server removes, on its own, the branches merged change
328
- * requests left behind (`WorkflowService.retireLeftoverMergedBranches`).
328
+ * requests left behind (`VersionControlService.retireLeftoverMergedBranches`).
329
329
  * On unless set to `false`; a blanked field puts the default back. Read
330
330
  * at every round, so it applies without a restart. It covers that cleanup
331
331
  * only: the removal of a branch when its change request is merged does
@@ -4,7 +4,7 @@ import path from 'node:path';
4
4
  import type { IGitRunner } from '../../shared/git.contract.js';
5
5
  import { printable } from '../../shared/printable.js';
6
6
  import { logger } from '../../shared/logging.js';
7
- import { NodeGitRunner } from '../workflow/index.js';
7
+ import { NodeGitRunner } from '../version-control/index.js';
8
8
  import { probeCredentialArgs, probeGitEnv } from './connection-check.js';
9
9
 
10
10
  const log = logger('setup');
@@ -207,7 +207,7 @@ export function createSetupRoutes(
207
207
  * What a change of the knowledge-base repository has to decide about, and
208
208
  * what to do when the admin decides to close.
209
209
  *
210
- * Injected because the setup routes must stay free of the workflow module —
210
+ * Injected because the setup routes must stay free of the version-control module —
211
211
  * and a minimal mount (tests, a distribution without change requests) simply
212
212
  * has none: the default answers "no open requests", so the confirmation
213
213
  * offers no choice it cannot honour.
@@ -11,7 +11,7 @@ import type { ToolContext } from '../../tool-helpers/tool.contract.js';
11
11
  import type { ToolAuth } from '../../tool-auth/tool-auth.middleware.js';
12
12
  import { registerWorkspaceTools } from '../../workspace/workspace.tools.js';
13
13
  import { RoutineWritePolicyService } from '../../workspace/routine-write-policy.js';
14
- import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
14
+ import { VersionControlHooks } from '../../version-control/version-control-hooks.js';
15
15
  import { ToolDescriptionNotes } from '../../workspace/agent-access.gate.js';
16
16
  import { SpillStore } from '../../workspace/spill-store.js';
17
17
  import { DocExtractService, WorkerDocumentExtractor } from '../../workspace/index.js';
@@ -96,7 +96,7 @@ async function start(): Promise<string> {
96
96
  sessionId,
97
97
  abortSignal: signal,
98
98
  workspaceService: {} as never,
99
- workflowService: {} as never,
99
+ versionControlService: {} as never,
100
100
  events: {} as never,
101
101
  getFilesystem: async () => fs,
102
102
  });
@@ -112,7 +112,7 @@ async function start(): Promise<string> {
112
112
  registerWorkspaceTools(
113
113
  registry, router, fakeAuth, toolHandler,
114
114
  new SpillStore(join(tmpdir(), 'bevel-test-spills')), new DocExtractService(join(tmpdir(), 'bevel-test-doc-extract'), new WorkerDocumentExtractor()), allowAll, testKbContext({ kbDirName: KB_DIR }),
115
- { recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
115
+ { recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new VersionControlHooks(), notes: new ToolDescriptionNotes() },
116
116
  new RoutineWritePolicyService(),
117
117
  {} as never,
118
118
  checker,
@@ -93,7 +93,7 @@ async function start(): Promise<string> {
93
93
  source: auth.source,
94
94
  abortSignal: signal,
95
95
  workspaceService: {} as never,
96
- workflowService: {} as never,
96
+ versionControlService: {} as never,
97
97
  events: {} as never,
98
98
  getFilesystem: async () => ({}) as never,
99
99
  }) as unknown as ToolContext;
@@ -1,5 +1,5 @@
1
1
  import { describe, test, expect } from 'vitest';
2
- import { DEFAULT_BRANCH, type ChangeRequest, type IWorkflowService } from '@bevel-software/platform-shared';
2
+ import { DEFAULT_BRANCH, type ChangeRequest, type IVersionControlService } from '@bevel-software/platform-shared';
3
3
  import { PendingSkillsService } from '../pending-skills.service.js';
4
4
  import { hashEmail } from '../../../shared/email-identity.js';
5
5
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
@@ -74,11 +74,11 @@ function harness(opts: {
74
74
  listSkills: async () => opts.released ?? [],
75
75
  } as unknown as ISkillService;
76
76
 
77
- const workflow = {
77
+ const versionControl = {
78
78
  listChangeRequests: async () => opts.crs,
79
- } as unknown as IWorkflowService;
79
+ } as unknown as IVersionControlService;
80
80
 
81
- return new PendingSkillsService(workspaceService, accessControl, skillService, workflow, testKbContext());
81
+ return new PendingSkillsService(workspaceService, accessControl, skillService, versionControl, testKbContext());
82
82
  }
83
83
 
84
84
  const ADMIN_WRITES = {
@@ -197,20 +197,20 @@ describe('PendingSkillsService', () => {
197
197
  });
198
198
 
199
199
  /**
200
- * This hangs off the library's list load. A workflow service that cannot
200
+ * This hangs off the library's list load. A version-control service that cannot
201
201
  * answer must cost the reader an empty review shelf, not their whole library.
202
202
  */
203
203
  test('degrades to nothing pending when the change requests cannot be listed', async () => {
204
- const workflow = {
204
+ const versionControl = {
205
205
  listChangeRequests: async () => {
206
206
  throw new Error('offline');
207
207
  },
208
- } as unknown as IWorkflowService;
208
+ } as unknown as IVersionControlService;
209
209
  const svc = new PendingSkillsService(
210
210
  {} as unknown as WorkspaceService,
211
211
  {} as unknown as IAccessControl,
212
212
  { listSkills: async () => [] } as unknown as ISkillService,
213
- workflow,
213
+ versionControl,
214
214
  testKbContext(),
215
215
  );
216
216
  await expect(svc.listPendingSkills(AUTHOR)).resolves.toEqual([]);
@@ -3,7 +3,7 @@ import type { AddressInfo } from 'node:net';
3
3
  import express from 'express';
4
4
  import { describe, it, expect, afterEach, vi } from 'vitest';
5
5
  import { DEFAULT_BRANCH, joinBranchFor } from '@bevel-software/platform-shared';
6
- import type { IWorkflowService } from '@bevel-software/platform-shared';
6
+ import type { IVersionControlService } from '@bevel-software/platform-shared';
7
7
 
8
8
  import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
9
9
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
@@ -26,8 +26,8 @@ const wsId = workspaceIdForBranch(DEFAULT_BRANCH);
26
26
  const MIA = { id: 'u-mia', email: 'mia@x.io', name: 'Mia' };
27
27
  const FOLDER = 'Skills/Eng/deploy';
28
28
 
29
- async function makeHarness(listBranches: IWorkflowService['listBranches']) {
30
- const workflow = {
29
+ async function makeHarness(listBranches: IVersionControlService['listBranches']) {
30
+ const versionControl = {
31
31
  listChangeRequests: vi.fn(async () => []),
32
32
  listBranches: vi.fn(listBranches),
33
33
  createBranch: vi.fn(async () => ({ name: 'x', isDefault: false, isProtected: false })),
@@ -35,7 +35,7 @@ async function makeHarness(listBranches: IWorkflowService['listBranches']) {
35
35
  commitChanges: vi.fn(async () => null),
36
36
  openChangeRequest: vi.fn(async () => ({ number: 42 })),
37
37
  getChangeRequestDetail: vi.fn(async () => ({ body: '' })),
38
- } as unknown as IWorkflowService;
38
+ } as unknown as IVersionControlService;
39
39
  const workspaceService = {
40
40
  getOrCreateForBranch: vi.fn(async (branch: string) => ({ id: workspaceIdForBranch(branch) })),
41
41
  readFile: vi.fn(async () => '---\n---\nwrite:\n - Eve <eve@x.io>\n'),
@@ -57,8 +57,8 @@ async function makeHarness(listBranches: IWorkflowService['listBranches']) {
57
57
  createSkillAccessRequestRoutes({
58
58
  skillService,
59
59
  accessControl,
60
- workflow,
61
- requests: new AccessRequestsService({ workflow, workspaceService, lifecycle: joinRequests, kb }),
60
+ versionControl,
61
+ requests: new AccessRequestsService({ versionControl, workspaceService, lifecycle: joinRequests, kb }),
62
62
  joinRequests,
63
63
  kb,
64
64
  resolveUser: async () => MIA,
@@ -68,7 +68,7 @@ async function makeHarness(listBranches: IWorkflowService['listBranches']) {
68
68
  const s = app.listen(0, () => resolve(s));
69
69
  });
70
70
  const { port } = server.address() as AddressInfo;
71
- return { server, url: `http://127.0.0.1:${port}/api/skills/deploy/access-request`, workflow, workspaceService };
71
+ return { server, url: `http://127.0.0.1:${port}/api/skills/deploy/access-request`, versionControl, workspaceService };
72
72
  }
73
73
 
74
74
  describe('POST /skills/:name/access-request — the branch probe', () => {
@@ -87,11 +87,11 @@ describe('POST /skills/:name/access-request — the branch probe', () => {
87
87
  const res = await fetch(h.url, { method: 'POST' });
88
88
  expect(res.status).toBe(200);
89
89
  expect(await res.json()).toEqual({ ok: true, number: 42 });
90
- expect(h.workflow.listBranches).toHaveBeenCalledWith(wsId, { freshFetch: true, strictFetch: true });
91
- expect(h.workflow.createBranch).toHaveBeenCalledWith(wsId, joinBranchFor(MIA.email, FOLDER), DEFAULT_BRANCH);
90
+ expect(h.versionControl.listBranches).toHaveBeenCalledWith(wsId, { freshFetch: true, strictFetch: true });
91
+ expect(h.versionControl.createBranch).toHaveBeenCalledWith(wsId, joinBranchFor(MIA.email, FOLDER), DEFAULT_BRANCH);
92
92
  // The whole chain the probe exists to enable: the grant is written AND committed.
93
93
  expect(h.workspaceService.writeFile).toHaveBeenCalledTimes(1);
94
- expect(h.workflow.commitChanges).toHaveBeenCalledTimes(1);
94
+ expect(h.versionControl.commitChanges).toHaveBeenCalledTimes(1);
95
95
  });
96
96
 
97
97
  it('a create that loses the race proceeds once the fresh re-probe shows the branch', async () => {
@@ -99,26 +99,26 @@ describe('POST /skills/:name/access-request — the branch probe', () => {
99
99
  // Absent on the first probe, present on the second: someone else cut it in between.
100
100
  let probes = 0;
101
101
  const h = await makeHarness(async () => (probes++ === 0 ? [] : [{ name: branch, isDefault: false, isProtected: false }]));
102
- (h.workflow.createBranch as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('already exists'));
102
+ (h.versionControl.createBranch as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('already exists'));
103
103
  server = h.server;
104
104
  const res = await fetch(h.url, { method: 'POST' });
105
105
  expect(res.status).toBe(200);
106
106
  expect(await res.json()).toEqual({ ok: true, number: 42 });
107
- expect(h.workflow.listBranches).toHaveBeenCalledTimes(2);
107
+ expect(h.versionControl.listBranches).toHaveBeenCalledTimes(2);
108
108
  expect(h.workspaceService.writeFile).toHaveBeenCalledTimes(1);
109
- expect(h.workflow.commitChanges).toHaveBeenCalledTimes(1);
109
+ expect(h.versionControl.commitChanges).toHaveBeenCalledTimes(1);
110
110
  });
111
111
 
112
112
  it('a create that fails with no branch to show for it stops the request — nothing is written on a branch that was not made', async () => {
113
113
  vi.spyOn(console, 'error').mockImplementation(() => {});
114
114
  const h = await makeHarness(async () => []);
115
- (h.workflow.createBranch as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('origin refused'));
115
+ (h.versionControl.createBranch as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('origin refused'));
116
116
  server = h.server;
117
117
  const res = await fetch(h.url, { method: 'POST' });
118
118
  expect(res.status).toBe(500);
119
- expect(h.workflow.listBranches).toHaveBeenCalledTimes(2);
119
+ expect(h.versionControl.listBranches).toHaveBeenCalledTimes(2);
120
120
  expect(h.workspaceService.writeFile).not.toHaveBeenCalled();
121
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
121
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
122
122
  });
123
123
 
124
124
  it('a listing that could not prove anything stops the request before a branch or a byte is written', async () => {
@@ -129,8 +129,8 @@ describe('POST /skills/:name/access-request — the branch probe', () => {
129
129
  server = h.server;
130
130
  const res = await fetch(h.url, { method: 'POST' });
131
131
  expect(res.status).toBe(500);
132
- expect(h.workflow.createBranch).not.toHaveBeenCalled();
132
+ expect(h.versionControl.createBranch).not.toHaveBeenCalled();
133
133
  expect(h.workspaceService.writeFile).not.toHaveBeenCalled();
134
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
134
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
135
135
  });
136
136
  });
@@ -12,8 +12,8 @@ import type { IAccessControl } from '../../access/access-control.interface.js';
12
12
  import { readFile as fsReadFile } from 'node:fs/promises';
13
13
  import { execFile } from 'node:child_process';
14
14
  import { promisify } from 'node:util';
15
- import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
16
- import { GitService } from '../../workflow/git/git.service.js';
15
+ import { VersionControlHooks } from '../../version-control/version-control-hooks.js';
16
+ import { GitService } from '../../version-control/git/git.service.js';
17
17
  import { testKbContext } from '../../../__tests__/kb-context.js';
18
18
 
19
19
  const execFileAsync = promisify(execFile);
@@ -423,7 +423,7 @@ describe('SkillService', () => {
423
423
 
424
424
  const versioned = (access: IAccessControl = allowAll) => {
425
425
  const service = svc(access);
426
- service.setHistory(new GitService(workspaceService, new WorkflowHooks(), testKbContext({ kbDirName: KB_DIR })));
426
+ service.setHistory(new GitService(workspaceService, new VersionControlHooks(), testKbContext({ kbDirName: KB_DIR })));
427
427
  return service;
428
428
  };
429
429
 
@@ -1,4 +1,4 @@
1
- import type { KbLayout, IWorkflowService } from '@bevel-software/platform-shared';
1
+ import type { KbLayout, IVersionControlService } from '@bevel-software/platform-shared';
2
2
  import { type WorkspaceService } from '../workspace/index.js';
3
3
  import type { IAccessControl } from '../access/index.js';
4
4
  import type { KbContext } from '../../shared/kb-context.js';
@@ -36,7 +36,7 @@ export class PendingSkillsService implements IPendingSkillService {
36
36
  private readonly workspaceService: WorkspaceService,
37
37
  private readonly accessControl: IAccessControl,
38
38
  private readonly skillService: ISkillService,
39
- private readonly workflow: IWorkflowService,
39
+ private readonly versionControl: IVersionControlService,
40
40
  private readonly kb: KbContext,
41
41
  ) {}
42
42
 
@@ -57,7 +57,7 @@ export class PendingSkillsService implements IPendingSkillService {
57
57
  {
58
58
  workspaceService: this.workspaceService,
59
59
  accessControl: this.accessControl,
60
- workflow: this.workflow,
60
+ versionControl: this.versionControl,
61
61
  kb: this.kb,
62
62
  },
63
63
  userEmail,
@@ -3,10 +3,10 @@ import { logger } from '../../shared/logging.js';
3
3
 
4
4
  const log = logger('skills');
5
5
  import '../auth/index.js'; // Express Request.userId / userEmail augmentation
6
- import type { AuthUser, IWorkflowService } from '@bevel-software/platform-shared';
6
+ import type { AuthUser, IVersionControlService } from '@bevel-software/platform-shared';
7
7
  import type { IAccessControl, IAccessRequests } from '../access/index.js';
8
8
  import { folderTarget } from '../access/index.js';
9
- import { WorkflowDomainError } from '../../shared/domain-errors.js';
9
+ import { VersionControlDomainError } from '../../shared/domain-errors.js';
10
10
  import { domainErrorBody } from '../../shared/http-errors.js';
11
11
  import type { KbContext } from '../../shared/kb-context.js';
12
12
  import type { JoinRequestsService } from '../plugins/index.js';
@@ -34,14 +34,14 @@ import type { ISkillService } from './skills.contract.js';
34
34
  export function createSkillAccessRequestRoutes(deps: {
35
35
  skillService: ISkillService;
36
36
  accessControl: IAccessControl;
37
- workflow: IWorkflowService;
37
+ versionControl: IVersionControlService;
38
38
  /** Opens an access request — the same opener the Manage access dialog uses, wired by the composition root. */
39
39
  requests: IAccessRequests;
40
40
  joinRequests: JoinRequestsService;
41
41
  kb: KbContext;
42
42
  resolveUser: (req: express.Request) => Promise<AuthUser | null>;
43
43
  }): express.Router {
44
- const { skillService, accessControl, workflow, requests, joinRequests, kb, resolveUser } = deps;
44
+ const { skillService, accessControl, versionControl, requests, joinRequests, kb, resolveUser } = deps;
45
45
  const router = express.Router();
46
46
  const wsId = () => kb.defaultWorkspaceId();
47
47
  const rulesOf = (folder: string) => `${folder}/access.md`;
@@ -85,7 +85,7 @@ export function createSkillAccessRequestRoutes(deps: {
85
85
  });
86
86
  res.json({ ok: true, number });
87
87
  } catch (err) {
88
- if (err instanceof WorkflowDomainError) {
88
+ if (err instanceof VersionControlDomainError) {
89
89
  res.status(err.status).json(domainErrorBody(err));
90
90
  return;
91
91
  }
@@ -113,7 +113,7 @@ export function createSkillAccessRequestRoutes(deps: {
113
113
  try {
114
114
  const ctx = await requireEditor(req, res, () => res.json({ requests: [] }));
115
115
  if (!ctx) return;
116
- const crs = await workflow.listChangeRequests();
116
+ const crs = await versionControl.listChangeRequests();
117
117
  res.json({ requests: await joinRequests.list(ctx.folder, folderTarget(ctx.folder), crs, ctx.user) });
118
118
  } catch (err) {
119
119
  log.error('failed to list access requests:', { err });
@@ -130,7 +130,7 @@ export function createSkillAccessRequestRoutes(deps: {
130
130
  res.status(400).json({ error: 'Invalid change request number' });
131
131
  return;
132
132
  }
133
- const cr = await workflow.getChangeRequest(crNumber);
133
+ const cr = await versionControl.getChangeRequest(crNumber);
134
134
  if (!cr) {
135
135
  res.status(404).json({ error: 'Not found' });
136
136
  return;