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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (851) hide show
  1. package/agent-guide/directory-structure.md +1 -1
  2. package/agent-guide/onboarding.md +111 -0
  3. package/agent-guide/start-here.md +1 -0
  4. package/agent-guide/tool-manuals.md +1 -0
  5. package/dist/core/catalog-cache-invalidation.d.ts +2 -2
  6. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
  7. package/dist/core/compose-embed.d.ts +2 -2
  8. package/dist/core/compose-embed.d.ts.map +1 -1
  9. package/dist/core/compose-embed.js +1 -1
  10. package/dist/core/compose-embed.js.map +1 -1
  11. package/dist/core/core-ports.d.ts +19 -4
  12. package/dist/core/core-ports.d.ts.map +1 -1
  13. package/dist/core/core-ports.js.map +1 -1
  14. package/dist/core/create-core-server.d.ts.map +1 -1
  15. package/dist/core/create-core-server.js +26 -24
  16. package/dist/core/create-core-server.js.map +1 -1
  17. package/dist/core/create-core-services.d.ts +19 -13
  18. package/dist/core/create-core-services.d.ts.map +1 -1
  19. package/dist/core/create-core-services.js +72 -57
  20. package/dist/core/create-core-services.js.map +1 -1
  21. package/dist/core/lifecycle.d.ts +4 -4
  22. package/dist/core/lifecycle.d.ts.map +1 -1
  23. package/dist/core/lifecycle.js +5 -5
  24. package/dist/core/lifecycle.js.map +1 -1
  25. package/dist/core-config.d.ts +2 -2
  26. package/dist/core-config.js +3 -3
  27. package/dist/core-config.js.map +1 -1
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/modules/access/access-control.service.js +1 -1
  33. package/dist/modules/access/access-control.service.js.map +1 -1
  34. package/dist/modules/access/access-declarations.d.ts +2 -2
  35. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  36. package/dist/modules/access/access-declarations.js +2 -2
  37. package/dist/modules/access/access-declarations.js.map +1 -1
  38. package/dist/modules/access/access-mutation.service.d.ts +2 -2
  39. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  40. package/dist/modules/access/access-mutation.service.js +2 -2
  41. package/dist/modules/access/access-mutation.service.js.map +1 -1
  42. package/dist/modules/access/access-requests.routes.d.ts +2 -2
  43. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  44. package/dist/modules/access/access-requests.routes.js +5 -5
  45. package/dist/modules/access/access-requests.routes.js.map +1 -1
  46. package/dist/modules/access/access-requests.service.d.ts +2 -2
  47. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  48. package/dist/modules/access/access-requests.service.js +11 -11
  49. package/dist/modules/access/access-requests.service.js.map +1 -1
  50. package/dist/modules/access/access.routes.d.ts +2 -2
  51. package/dist/modules/access/access.routes.d.ts.map +1 -1
  52. package/dist/modules/access/access.routes.js +9 -9
  53. package/dist/modules/access/access.routes.js.map +1 -1
  54. package/dist/modules/access/admin-locked-commit.d.ts +5 -5
  55. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  56. package/dist/modules/access/admin-locked-commit.js +7 -7
  57. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  58. package/dist/modules/access/admin-route-helpers.d.ts +1 -1
  59. package/dist/modules/access/admin-route-helpers.js +5 -5
  60. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  61. package/dist/modules/access/change-read-gate.d.ts +1 -1
  62. package/dist/modules/access/change-read-gate.js +1 -1
  63. package/dist/modules/access/groups-admin.service.d.ts +7 -7
  64. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  65. package/dist/modules/access/groups-admin.service.js +6 -6
  66. package/dist/modules/access/groups-admin.service.js.map +1 -1
  67. package/dist/modules/access/reference-scan.d.ts +1 -1
  68. package/dist/modules/access/roles-admin.service.d.ts +7 -7
  69. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  70. package/dist/modules/access/roles-admin.service.js +8 -8
  71. package/dist/modules/access/roles-admin.service.js.map +1 -1
  72. package/dist/modules/access/synced-groups-committer.d.ts +4 -4
  73. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  74. package/dist/modules/access/synced-groups-committer.js +7 -7
  75. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  76. package/dist/modules/access/user-access-removal.service.d.ts +6 -6
  77. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  78. package/dist/modules/access/user-access-removal.service.js +4 -4
  79. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  80. package/dist/modules/access-model/access-errors.d.ts +4 -4
  81. package/dist/modules/access-model/access-errors.d.ts.map +1 -1
  82. package/dist/modules/access-model/access-errors.js +4 -4
  83. package/dist/modules/access-model/access-errors.js.map +1 -1
  84. package/dist/modules/access-model/access-grammar.d.ts +1 -1
  85. package/dist/modules/access-model/access-grammar.js +4 -4
  86. package/dist/modules/access-model/change-gate.d.ts +1 -1
  87. package/dist/modules/access-model/change-gate.js +1 -1
  88. package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
  89. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  90. package/dist/modules/access-model/roles-yaml-guard.js +4 -4
  91. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
  92. package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
  93. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
  94. package/dist/modules/agent-guide/agent-guide.js +42 -18
  95. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  96. package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
  97. package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
  98. package/dist/modules/agent-guide/guide-budget.js +6 -2
  99. package/dist/modules/agent-guide/guide-budget.js.map +1 -1
  100. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
  101. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  102. package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
  103. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  104. package/dist/modules/agent-instructions/compose.d.ts +15 -8
  105. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  106. package/dist/modules/agent-instructions/compose.js +24 -10
  107. package/dist/modules/agent-instructions/compose.js.map +1 -1
  108. package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
  109. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  110. package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
  111. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  112. package/dist/modules/auth/account-erasure.service.d.ts +36 -7
  113. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  114. package/dist/modules/auth/account-erasure.service.js +30 -10
  115. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  116. package/dist/modules/auth/account-hooks.d.ts +20 -0
  117. package/dist/modules/auth/account-hooks.d.ts.map +1 -1
  118. package/dist/modules/auth/account-hooks.js +10 -0
  119. package/dist/modules/auth/account-hooks.js.map +1 -1
  120. package/dist/modules/auth/account-switch-lock.js +2 -2
  121. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  122. package/dist/modules/auth/account.routes.d.ts +7 -2
  123. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  124. package/dist/modules/auth/account.routes.js +23 -4
  125. package/dist/modules/auth/account.routes.js.map +1 -1
  126. package/dist/modules/auth/auth.service.d.ts +1 -1
  127. package/dist/modules/auth/auth.service.js +4 -4
  128. package/dist/modules/auth/auth.service.js.map +1 -1
  129. package/dist/modules/auth/index.d.ts +1 -0
  130. package/dist/modules/auth/index.d.ts.map +1 -1
  131. package/dist/modules/database/connection.d.ts.map +1 -1
  132. package/dist/modules/database/connection.js +11 -0
  133. package/dist/modules/database/connection.js.map +1 -1
  134. package/dist/modules/database/core-schema.js +2 -2
  135. package/dist/modules/database/core-schema.js.map +1 -1
  136. package/dist/modules/diff/diff.routes.d.ts +3 -3
  137. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  138. package/dist/modules/diff/diff.routes.js +7 -7
  139. package/dist/modules/diff/diff.routes.js.map +1 -1
  140. package/dist/modules/embed/embed.routes.js +1 -1
  141. package/dist/modules/embed/embed.routes.js.map +1 -1
  142. package/dist/modules/embed/embed.service.d.ts +4 -4
  143. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  144. package/dist/modules/embed/embed.service.js +18 -18
  145. package/dist/modules/embed/embed.service.js.map +1 -1
  146. package/dist/modules/kb-fs/branch-name.js +8 -8
  147. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  148. package/dist/modules/kb-fs/file-change-notifier.d.ts +51 -26
  149. package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
  150. package/dist/modules/kb-fs/file-change-notifier.js +6 -8
  151. package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
  152. package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -16
  153. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  154. package/dist/modules/kb-fs/locking-filesystem.js +31 -39
  155. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  156. package/dist/modules/kb-fs/repo-path.js +5 -5
  157. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  158. package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
  159. package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
  160. package/dist/modules/kb-fs/tmp-ref.js +2 -2
  161. package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
  162. package/dist/modules/kb-sync/index.d.ts +1 -1
  163. package/dist/modules/kb-sync/index.d.ts.map +1 -1
  164. package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
  165. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  166. package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
  167. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  168. package/dist/modules/kb-sync/kb-sync.service.js +10 -10
  169. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  170. package/dist/modules/mcp/mcp.service.d.ts +11 -4
  171. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  172. package/dist/modules/mcp/mcp.service.js +75 -19
  173. package/dist/modules/mcp/mcp.service.js.map +1 -1
  174. package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
  175. package/dist/modules/onboarding/onboarding.routes.js +2 -2
  176. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  177. package/dist/modules/onboarding/starter-pack.service.d.ts +5 -7
  178. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  179. package/dist/modules/onboarding/starter-pack.service.js +4 -4
  180. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  181. package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
  182. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  183. package/dist/modules/plugins/join-request-jobs.service.js +7 -7
  184. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  185. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  186. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  187. package/dist/modules/plugins/join-requests.service.js +5 -5
  188. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  189. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  190. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  191. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  192. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  193. package/dist/modules/plugins/plugins.routes.js +8 -8
  194. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  195. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
  196. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  197. package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
  198. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  199. package/dist/modules/secrets-vault/index.d.ts +2 -1
  200. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  201. package/dist/modules/secrets-vault/index.js +1 -0
  202. package/dist/modules/secrets-vault/index.js.map +1 -1
  203. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
  204. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
  205. package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
  206. package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
  207. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
  208. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  209. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  210. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
  211. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  212. package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
  213. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  214. package/dist/modules/settings/connection-check.js +1 -1
  215. package/dist/modules/settings/connection-check.js.map +1 -1
  216. package/dist/modules/settings/deployment-settings.service.js +1 -1
  217. package/dist/modules/settings/git-root-folders.js +1 -1
  218. package/dist/modules/settings/git-root-folders.js.map +1 -1
  219. package/dist/modules/settings/setup.routes.d.ts +1 -1
  220. package/dist/modules/settings/setup.routes.js +1 -1
  221. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  222. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  223. package/dist/modules/skills/pending-skills.service.js +4 -4
  224. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  225. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
  226. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  227. package/dist/modules/skills/skill-access-requests.routes.js +5 -5
  228. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  229. package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
  230. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  231. package/dist/modules/tool-helpers/tool-context.js +2 -2
  232. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  233. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  234. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  235. package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
  236. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  237. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  238. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  239. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
  240. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  241. package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
  242. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  243. package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
  244. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  245. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
  246. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  247. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
  248. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  249. package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
  250. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  251. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
  252. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  253. package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
  254. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  255. package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
  256. package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
  257. package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
  258. package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
  259. package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
  260. package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
  261. package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
  262. package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
  263. package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
  264. package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
  265. package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
  266. package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
  267. package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
  268. package/dist/modules/version-control/change-request-hooks.js.map +1 -0
  269. package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
  270. package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
  271. package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
  272. package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
  273. package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
  274. package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
  275. package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
  276. package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
  277. package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
  278. package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
  279. package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
  280. package/dist/modules/version-control/event-bus.d.ts.map +1 -0
  281. package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
  282. package/dist/modules/version-control/event-bus.js.map +1 -0
  283. package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
  284. package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
  285. package/dist/modules/version-control/events-delivery.js.map +1 -0
  286. package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
  287. package/dist/modules/version-control/events.routes.d.ts.map +1 -0
  288. package/dist/modules/version-control/events.routes.js.map +1 -0
  289. package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
  290. package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
  291. package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
  292. package/dist/modules/version-control/file-lock.service.js.map +1 -0
  293. package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
  294. package/dist/modules/version-control/git/change-request-link.js.map +1 -0
  295. package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
  296. package/dist/modules/version-control/git/git-version.js.map +1 -0
  297. package/dist/modules/{workflow → version-control}/git/git.service.d.ts +26 -8
  298. package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
  299. package/dist/modules/{workflow → version-control}/git/git.service.js +106 -55
  300. package/dist/modules/version-control/git/git.service.js.map +1 -0
  301. package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
  302. package/dist/modules/version-control/git/merge-commit.js.map +1 -0
  303. package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
  304. package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
  305. package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
  306. package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
  307. package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
  308. package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
  309. package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
  310. package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
  311. package/dist/modules/version-control/index.d.ts.map +1 -0
  312. package/dist/modules/{workflow → version-control}/index.js +3 -2
  313. package/dist/modules/version-control/index.js.map +1 -0
  314. package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
  315. package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
  316. package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
  317. package/dist/modules/version-control/pending-commits.service.js.map +1 -0
  318. package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
  319. package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
  320. package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
  321. package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
  322. package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
  323. package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
  324. package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
  325. package/dist/modules/version-control/read-on-branch.js.map +1 -0
  326. package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
  327. package/dist/modules/version-control/recovery-bot.js.map +1 -0
  328. package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
  329. package/dist/modules/version-control/sanitize-error.js.map +1 -0
  330. package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +33 -6
  331. package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
  332. package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +20 -3
  333. package/dist/modules/version-control/version-control-hooks.js.map +1 -0
  334. package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
  335. package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
  336. package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
  337. package/dist/modules/version-control/version-control.routes.js.map +1 -0
  338. package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -46
  339. package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
  340. package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +93 -107
  341. package/dist/modules/version-control/version-control.service.js.map +1 -0
  342. package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
  343. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  344. package/dist/modules/workspace/agent-access.gate.js +1 -1
  345. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  346. package/dist/modules/workspace/git-internals.middleware.js +2 -2
  347. package/dist/modules/workspace/kb-repository.js +1 -1
  348. package/dist/modules/workspace/kb-repository.js.map +1 -1
  349. package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
  350. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  351. package/dist/modules/workspace/startup/kb-git.js +1 -1
  352. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  353. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
  354. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  355. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  356. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  357. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
  358. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  359. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  360. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  361. package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
  362. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  363. package/dist/modules/workspace/startup/steps/template-source.js +8 -5
  364. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  365. package/dist/modules/workspace/workspace-tmp.js +3 -3
  366. package/dist/modules/workspace/workspace-tmp.js.map +1 -1
  367. package/dist/modules/workspace/workspace.routes.d.ts +4 -4
  368. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  369. package/dist/modules/workspace/workspace.routes.js +22 -22
  370. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  371. package/dist/modules/workspace/workspace.service.d.ts +6 -6
  372. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  373. package/dist/modules/workspace/workspace.service.js +11 -11
  374. package/dist/modules/workspace/workspace.service.js.map +1 -1
  375. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  376. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  377. package/dist/modules/workspace/workspace.tools.js +15 -10
  378. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  379. package/dist/shared/canonical-file-identity.d.ts +2 -2
  380. package/dist/shared/canonical-file-identity.js +5 -5
  381. package/dist/shared/canonical-file-identity.js.map +1 -1
  382. package/dist/shared/domain-errors.d.ts +39 -39
  383. package/dist/shared/domain-errors.d.ts.map +1 -1
  384. package/dist/shared/domain-errors.js +44 -44
  385. package/dist/shared/domain-errors.js.map +1 -1
  386. package/dist/shared/fire-and-forget.d.ts +14 -0
  387. package/dist/shared/fire-and-forget.d.ts.map +1 -0
  388. package/dist/shared/fire-and-forget.js +23 -0
  389. package/dist/shared/fire-and-forget.js.map +1 -0
  390. package/dist/shared/git.contract.d.ts +1 -1
  391. package/dist/shared/git.contract.js +1 -1
  392. package/dist/shared/http-errors.d.ts +3 -3
  393. package/dist/shared/http-errors.d.ts.map +1 -1
  394. package/dist/shared/http-errors.js +1 -1
  395. package/dist/shared/http-errors.js.map +1 -1
  396. package/dist/shared/pending-proposals.d.ts +3 -3
  397. package/dist/shared/pending-proposals.d.ts.map +1 -1
  398. package/dist/shared/pending-proposals.js +2 -2
  399. package/dist/shared/pending-proposals.js.map +1 -1
  400. package/dist/tenancy/static-tenant-source.js +1 -1
  401. package/dist/tenancy/static-tenant-source.js.map +1 -1
  402. package/migrations/0012_agent_audit.sql +40 -40
  403. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
  404. package/migrations/meta/0012_snapshot.json +2246 -2246
  405. package/migrations/meta/0013_snapshot.json +2258 -2258
  406. package/package.json +4 -4
  407. package/src/__tests__/account-admin.ts +27 -0
  408. package/src/__tests__/capturing-logger.ts +36 -0
  409. package/src/__tests__/hexis-catalog.ts +4 -4
  410. package/src/__tests__/kb-context.ts +30 -30
  411. package/src/__tests__/kb-layout-config.test.ts +21 -0
  412. package/src/__tests__/open-change-gate.ts +1 -1
  413. package/src/__tests__/real-access.ts +16 -0
  414. package/src/__tests__/real-auth.ts +13 -0
  415. package/src/__tests__/real-readers.ts +27 -0
  416. package/src/__tests__/real-version-control.ts +22 -0
  417. package/src/__tests__/tool-handler.ts +15 -0
  418. package/src/__tests__/tool-wiring.ts +10 -4
  419. package/src/__tests__/workspace-service.ts +1 -1
  420. package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
  421. package/src/core/__tests__/commit-announcements-wired-once.test.ts +53 -0
  422. package/src/core/__tests__/compose-embed.test.ts +1 -1
  423. package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
  424. package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
  425. package/src/core/__tests__/gated-boot.test.ts +2 -2
  426. package/src/core/__tests__/lifecycle.test.ts +9 -9
  427. package/src/core/catalog-cache-invalidation.ts +2 -2
  428. package/src/core/compose-embed.ts +3 -3
  429. package/src/core/core-ports.ts +19 -4
  430. package/src/core/create-core-server.ts +39 -25
  431. package/src/core/create-core-services.ts +83 -65
  432. package/src/core/lifecycle.ts +9 -9
  433. package/src/core-config.ts +3 -3
  434. package/src/index.ts +5 -5
  435. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
  436. package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
  437. package/src/modules/access/__tests__/access-requests.routes.test.ts +23 -23
  438. package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
  439. package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
  440. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
  441. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
  442. package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
  443. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
  444. package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
  445. package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
  446. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
  447. package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
  448. package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
  449. package/src/modules/access/__tests__/groups-admin.service.test.ts +44 -44
  450. package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
  451. package/src/modules/access/__tests__/roles-admin.service.test.ts +34 -34
  452. package/src/modules/access/__tests__/roles-capabilities.test.ts +29 -29
  453. package/src/modules/access/__tests__/roles.routes.test.ts +11 -11
  454. package/src/modules/access/__tests__/synced-groups-committer.test.ts +14 -14
  455. package/src/modules/access/__tests__/user-access-removal.service.test.ts +33 -33
  456. package/src/modules/access/access-control.service.ts +1 -1
  457. package/src/modules/access/access-declarations.ts +2 -2
  458. package/src/modules/access/access-mutation.service.ts +2 -2
  459. package/src/modules/access/access-requests.routes.ts +7 -7
  460. package/src/modules/access/access-requests.service.ts +13 -13
  461. package/src/modules/access/access.routes.ts +11 -11
  462. package/src/modules/access/admin-locked-commit.ts +11 -11
  463. package/src/modules/access/admin-route-helpers.ts +5 -5
  464. package/src/modules/access/change-read-gate.ts +1 -1
  465. package/src/modules/access/groups-admin.service.ts +7 -7
  466. package/src/modules/access/reference-scan.ts +1 -1
  467. package/src/modules/access/roles-admin.service.ts +9 -9
  468. package/src/modules/access/synced-groups-committer.ts +11 -11
  469. package/src/modules/access/user-access-removal.service.ts +7 -7
  470. package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
  471. package/src/modules/access-model/access-errors.ts +4 -4
  472. package/src/modules/access-model/access-grammar.ts +4 -4
  473. package/src/modules/access-model/change-gate.ts +1 -1
  474. package/src/modules/access-model/roles-yaml-guard.ts +4 -4
  475. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
  476. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
  477. package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
  478. package/src/modules/agent-guide/agent-guide.ts +48 -22
  479. package/src/modules/agent-guide/guide-budget.ts +6 -2
  480. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
  481. package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
  482. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
  483. package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
  484. package/src/modules/agent-instructions/compose.ts +24 -9
  485. package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
  486. package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
  487. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
  488. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
  489. package/src/modules/audit/event-classifier.ts +155 -155
  490. package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
  491. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
  492. package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
  493. package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
  494. package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
  495. package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
  496. package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
  497. package/src/modules/auth/account-erasure.service.ts +27 -9
  498. package/src/modules/auth/account-hooks.ts +34 -0
  499. package/src/modules/auth/account-switch-lock.ts +2 -2
  500. package/src/modules/auth/account.routes.ts +23 -5
  501. package/src/modules/auth/auth.service.ts +4 -4
  502. package/src/modules/auth/index.ts +1 -0
  503. package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
  504. package/src/modules/database/__tests__/connection.pg.test.ts +55 -0
  505. package/src/modules/database/__tests__/connection.test.ts +30 -0
  506. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
  507. package/src/modules/database/connection.ts +12 -0
  508. package/src/modules/database/core-schema.ts +2 -2
  509. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
  510. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
  511. package/src/modules/diff/diff.routes.ts +8 -8
  512. package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
  513. package/src/modules/embed/__tests__/embed.service.test.ts +48 -62
  514. package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
  515. package/src/modules/embed/embed.routes.ts +1 -1
  516. package/src/modules/embed/embed.service.ts +17 -17
  517. package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
  518. package/src/modules/kb-fs/__tests__/file-change-notifier.test.ts +23 -4
  519. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +264 -305
  520. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +103 -40
  521. package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
  522. package/src/modules/kb-fs/branch-name.ts +8 -8
  523. package/src/modules/kb-fs/file-change-notifier.ts +55 -32
  524. package/src/modules/kb-fs/locking-filesystem.ts +34 -48
  525. package/src/modules/kb-fs/repo-path.ts +5 -5
  526. package/src/modules/kb-fs/tmp-ref.ts +3 -3
  527. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
  528. package/src/modules/kb-sync/index.ts +1 -1
  529. package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
  530. package/src/modules/kb-sync/kb-sync.service.ts +9 -9
  531. package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
  532. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
  533. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
  534. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
  535. package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
  536. package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
  537. package/src/modules/mcp/mcp.service.ts +89 -28
  538. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +59 -59
  539. package/src/modules/onboarding/onboarding.contract.ts +1 -1
  540. package/src/modules/onboarding/onboarding.routes.ts +2 -2
  541. package/src/modules/onboarding/starter-pack.service.ts +7 -9
  542. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
  543. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
  544. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
  545. package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
  546. package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
  547. package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +46 -21
  548. package/src/modules/plugins/__tests__/plugins.routes.test.ts +31 -31
  549. package/src/modules/plugins/join-request-jobs.service.ts +10 -10
  550. package/src/modules/plugins/join-requests.service.ts +4 -4
  551. package/src/modules/plugins/plugin-rename.service.ts +1 -1
  552. package/src/modules/plugins/plugins.routes.ts +9 -9
  553. package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
  554. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
  555. package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
  556. package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
  557. package/src/modules/secrets-vault/index.ts +7 -0
  558. package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
  559. package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
  560. package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
  561. package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
  562. package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
  563. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
  564. package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
  565. package/src/modules/settings/connection-check.ts +1 -1
  566. package/src/modules/settings/deployment-settings.service.ts +1 -1
  567. package/src/modules/settings/git-root-folders.ts +1 -1
  568. package/src/modules/settings/setup.routes.ts +1 -1
  569. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
  570. package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
  571. package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
  572. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
  573. package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
  574. package/src/modules/skills/pending-skills.service.ts +3 -3
  575. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  576. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
  577. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
  578. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
  579. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
  580. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
  581. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
  582. package/src/modules/tool-helpers/tool-context.ts +6 -6
  583. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  584. package/src/modules/tool-helpers/tool.contract.ts +4 -4
  585. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
  586. package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
  587. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
  588. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
  589. package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
  590. package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
  591. package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
  592. package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
  593. package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
  594. package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
  595. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
  596. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
  597. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
  598. package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
  599. package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
  600. package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
  601. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
  602. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
  603. package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
  604. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
  605. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
  606. package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
  607. package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
  608. package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
  609. package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
  610. package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
  611. package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
  612. package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
  613. package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
  614. package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
  615. package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
  616. package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
  617. package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
  618. package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +100 -102
  619. package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
  620. package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
  621. package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
  622. package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +85 -75
  623. package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
  624. package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
  625. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
  626. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
  627. package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
  628. package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
  629. package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
  630. package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
  631. package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
  632. package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
  633. package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
  634. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
  635. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
  636. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
  637. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
  638. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
  639. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
  640. package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
  641. package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
  642. package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
  643. package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
  644. package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
  645. package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
  646. package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
  647. package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
  648. package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
  649. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
  650. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
  651. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
  652. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
  653. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
  654. package/src/modules/version-control/git/__tests__/git.service.commitLanded.test.ts +199 -0
  655. package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
  656. package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
  657. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
  658. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
  659. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
  660. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
  661. package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
  662. package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
  663. package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
  664. package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
  665. package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
  666. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +99 -22
  667. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
  668. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
  669. package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
  670. package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
  671. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
  672. package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
  673. package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
  674. package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
  675. package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
  676. package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
  677. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
  678. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
  679. package/src/modules/{workflow → version-control}/git/git.service.ts +112 -59
  680. package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
  681. package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
  682. package/src/modules/{workflow → version-control}/index.ts +6 -5
  683. package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
  684. package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
  685. package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
  686. package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +44 -5
  687. package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
  688. package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +96 -109
  689. package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
  690. package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
  691. package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
  692. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
  693. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
  694. package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
  695. package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
  696. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
  697. package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
  698. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
  699. package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
  700. package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
  701. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
  702. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
  703. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
  704. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
  705. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
  706. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
  707. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
  708. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
  709. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
  710. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
  711. package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
  712. package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
  713. package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
  714. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
  715. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
  716. package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
  717. package/src/modules/workspace/agent-access.gate.ts +5 -5
  718. package/src/modules/workspace/git-internals.middleware.ts +2 -2
  719. package/src/modules/workspace/kb-repository.ts +1 -1
  720. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
  721. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
  722. package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
  723. package/src/modules/workspace/startup/kb-git.ts +1 -1
  724. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
  725. package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
  726. package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
  727. package/src/modules/workspace/startup/steps/template-source.ts +21 -6
  728. package/src/modules/workspace/workspace-tmp.ts +4 -4
  729. package/src/modules/workspace/workspace.routes.ts +26 -26
  730. package/src/modules/workspace/workspace.service.ts +11 -11
  731. package/src/modules/workspace/workspace.tools.ts +17 -10
  732. package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
  733. package/src/shared/__tests__/fire-and-forget.test.ts +39 -0
  734. package/src/shared/__tests__/http-errors.test.ts +4 -4
  735. package/src/shared/canonical-file-identity.ts +5 -5
  736. package/src/shared/domain-errors.ts +44 -44
  737. package/src/shared/fire-and-forget.ts +26 -0
  738. package/src/shared/git.contract.ts +1 -1
  739. package/src/shared/http-errors.ts +3 -3
  740. package/src/shared/kb-context.ts +130 -130
  741. package/src/shared/pending-proposals.ts +4 -4
  742. package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
  743. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
  744. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
  745. package/src/tenancy/index.ts +35 -35
  746. package/src/tenancy/static-tenant-source.ts +1 -1
  747. package/src/tenancy/tenant-host.ts +261 -261
  748. package/src/tenancy/tenant-runtime.ts +208 -208
  749. package/src/tenancy/tenant-source.contract.ts +59 -59
  750. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
  751. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
  752. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
  753. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
  754. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
  755. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
  756. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
  757. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
  758. package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
  759. package/dist/modules/workflow/change-request-hooks.js.map +0 -1
  760. package/dist/modules/workflow/event-bus.d.ts.map +0 -1
  761. package/dist/modules/workflow/event-bus.js.map +0 -1
  762. package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
  763. package/dist/modules/workflow/events-delivery.js.map +0 -1
  764. package/dist/modules/workflow/events.routes.d.ts.map +0 -1
  765. package/dist/modules/workflow/events.routes.js.map +0 -1
  766. package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
  767. package/dist/modules/workflow/file-lock.service.js.map +0 -1
  768. package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
  769. package/dist/modules/workflow/git/change-request-link.js.map +0 -1
  770. package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
  771. package/dist/modules/workflow/git/git-version.js.map +0 -1
  772. package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
  773. package/dist/modules/workflow/git/git.service.js.map +0 -1
  774. package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
  775. package/dist/modules/workflow/git/merge-commit.js.map +0 -1
  776. package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
  777. package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
  778. package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
  779. package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
  780. package/dist/modules/workflow/index.d.ts.map +0 -1
  781. package/dist/modules/workflow/index.js.map +0 -1
  782. package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
  783. package/dist/modules/workflow/pending-commits.service.js.map +0 -1
  784. package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
  785. package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
  786. package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
  787. package/dist/modules/workflow/read-on-branch.js.map +0 -1
  788. package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
  789. package/dist/modules/workflow/recovery-bot.js.map +0 -1
  790. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
  791. package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
  792. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
  793. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
  794. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
  795. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
  796. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
  797. package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
  798. package/dist/modules/workflow/sanitize-error.js.map +0 -1
  799. package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
  800. package/dist/modules/workflow/workflow-hooks.js.map +0 -1
  801. package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
  802. package/dist/modules/workflow/workflow.routes.js.map +0 -1
  803. package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
  804. package/dist/modules/workflow/workflow.service.js.map +0 -1
  805. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
  806. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
  807. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
  808. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
  809. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
  810. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
  811. /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
  812. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
  813. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
  814. /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
  815. /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
  816. /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
  817. /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
  818. /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
  819. /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
  820. /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
  821. /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
  822. /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
  823. /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
  824. /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
  825. /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
  826. /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
  827. /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
  828. /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
  829. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
  830. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
  831. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
  832. /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
  833. /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
  834. /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
  835. /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
  836. /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
  837. /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
  838. /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
  839. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
  840. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
  841. /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
  842. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
  843. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
  844. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
  845. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
  846. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
  847. /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
  848. /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
  849. /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
  850. /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
  851. /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
@@ -1,10 +1,9 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import type { IFsProbe, ITreeWalker } from '../../../../shared/fs.contract.js';
4
- import type { KbContext } from '../../../../shared/kb-context.js';
5
4
  import { renderRolesYaml } from '../../../access-model/index.js';
6
5
  import { reservedRootDirs } from './template-files.step.js';
7
- import { TEMPLATE_SOURCE_FALLBACKS, TemplateSource, renderTemplateText } from './template-source.js';
6
+ import { TEMPLATE_SOURCE_FALLBACKS, TemplateSource, renderTemplateText, type TemplateKb } from './template-source.js';
8
7
  import { assertNotGitInternals, hasGitInternalsSegment } from '../../../../shared/git-internals.js';
9
8
  import { GitInternalsError } from '../../../../shared/domain-errors.js';
10
9
  import { isManagedGuide } from '../../../agent-guide/index.js';
@@ -35,7 +34,7 @@ export function buildSeedTree(
35
34
  extraRootDirs: readonly string[],
36
35
  seedAdminEmails: readonly string[],
37
36
  /** Read per seed, never captured: the setup-completing save may apply the layout after this builder was composed. */
38
- kb: Pick<KbContext, 'layout'>,
37
+ kb: TemplateKb,
39
38
  ): (dir: string) => Promise<string[]> {
40
39
  // Validated eagerly; resolved per seed.
41
40
  reservedRootDirs(extraRootDirs, kb.layout);
@@ -57,7 +56,7 @@ class KbSeedTree {
57
56
  private readonly templates: TemplateSource,
58
57
  private readonly extraRootDirs: readonly string[],
59
58
  private readonly seedAdminEmails: readonly string[],
60
- private readonly kb: Pick<KbContext, 'layout'>,
59
+ private readonly kb: TemplateKb,
61
60
  ) {}
62
61
 
63
62
  /** Fill `dir` with a complete knowledge base; resolve to what was GENERATED. */
@@ -184,7 +183,7 @@ class KbSeedTree {
184
183
  if (text === null) {
185
184
  await fs.copyFile(from, to);
186
185
  } else {
187
- await fs.writeFile(to, renderTemplateText(text, this.kb.layout), 'utf8');
186
+ await fs.writeFile(to, renderTemplateText(text, this.kb.layout, this.kb.defaultBranch), 'utf8');
188
187
  }
189
188
  await fs.chmod(to, (await fs.stat(from)).mode & 0o777);
190
189
  }
@@ -6,10 +6,9 @@ import {
6
6
  type KbLayout,
7
7
  } from '@bevel-software/platform-shared';
8
8
  import { IGNORE_FILENAME, isAbsence, type IFsProbe } from '../../../../shared/fs.contract.js';
9
- import type { KbContext } from '../../../../shared/kb-context.js';
10
9
  import { PREAMBLE_FILE } from '../../../agent-instructions/index.js';
11
10
  import { isManagedGuide } from '../../../agent-guide/index.js';
12
- import { TemplateSource } from './template-source.js';
11
+ import { TemplateSource, type TemplateKb } from './template-source.js';
13
12
  import type { KbBranch, OnServerStart, ServerStartContext, StepResult } from '../on-server-start.js';
14
13
  import { hasGitInternalsSegment } from '../../../../shared/git-internals.js';
15
14
 
@@ -71,7 +70,7 @@ export const GENERATED_FILES: readonly string[] = ['roles.yaml'];
71
70
  * The three roots CORE gives a knowledge base: the ontologies, the shared
72
71
  * skills, and the plugins that hold tools and link the skills.
73
72
  *
74
- * `Data/`, `Agents/` and `Pipelines/` are deliberately absent. They scaffold
73
+ * `Data/`, `Agents/` and `Workflows/` are deliberately absent. They scaffold
75
74
  * the agentic execution layer, which is not part of this platform — a core
76
75
  * deployment that created them would be handing every operator three empty
77
76
  * folders it has no feature to fill. A distribution that DOES own that layer
@@ -93,7 +92,7 @@ function coreRequiredDirs(layout: Required<KbLayout>): readonly string[] {
93
92
  * the repo being maintained.
94
93
  *
95
94
  * Deliberately NOT a check against the reserved-root set in `kb-layout.ts`:
96
- * `Data`, `Agents` and `Pipelines` are all in that set, and they are precisely
95
+ * `Data`, `Agents` and `Workflows` are all in that set, and they are precisely
97
96
  * what a distribution passes here. Being reserved is what makes a name worth
98
97
  * claiming — the file tree renders it as its own root instead of folding it
99
98
  * into Knowledge — so rejecting reserved names would reject the only real use.
@@ -172,7 +171,7 @@ export class TemplateFilesStep implements OnServerStart {
172
171
  * applies the admin's names after this step was built. A snapshot taken
173
172
  * here scaffolded `Skills/` beside the `skills/` they had just chosen.
174
173
  */
175
- private readonly kb: Pick<KbContext, 'layout'>,
174
+ private readonly kb: TemplateKb,
176
175
  private readonly extraRootDirs: readonly string[] = [],
177
176
  ) {
178
177
  // Validated NOW, so a bad extra fails at boot beside the rest of the
@@ -48,6 +48,14 @@ export const TEMPLATE_SOURCE_FALLBACKS: ReadonlyMap<string, string> = new Map([
48
48
  */
49
49
  export const SHARED_FILE_RULES_PLACEHOLDER = '{{sharedFileRules}}';
50
50
 
51
+ /**
52
+ * What rendering a template reads of the knowledge base: its layout, and the
53
+ * default branch the shared rules name. The branch is optional so a caller
54
+ * that hands only `{ layout }` keeps compiling and gets the rules without the
55
+ * branch sentence, as before the branch was named.
56
+ */
57
+ export type TemplateKb = Pick<KbContext, 'layout'> & Partial<Pick<KbContext, 'defaultBranch'>>;
58
+
51
59
  /**
52
60
  * Every placeholder a template file carries, filled: the layout's names on the
53
61
  * text an author wrote, THEN the shared file rules dropped into the hole they
@@ -70,10 +78,10 @@ export const SHARED_FILE_RULES_PLACEHOLDER = '{{sharedFileRules}}';
70
78
  * a template writes) that a string replacement would read as capture-group
71
79
  * syntax.
72
80
  */
73
- export function renderTemplateText(text: string, layout: KbLayout): string {
81
+ export function renderTemplateText(text: string, layout: KbLayout, defaultBranch = ''): string {
74
82
  return renderKbLayoutPlaceholders(text, layout).replaceAll(
75
83
  SHARED_FILE_RULES_PLACEHOLDER,
76
- () => sharedFileRulesSection(layout),
84
+ () => sharedFileRulesSection(layout, defaultBranch),
77
85
  );
78
86
  }
79
87
 
@@ -98,8 +106,11 @@ export class TemplateSource {
98
106
  constructor(
99
107
  private readonly disk: IFsProbe,
100
108
  private readonly templateDir: string,
101
- /** The layout the placeholders render as — read per file, so a name applied by setup is the one written. */
102
- private readonly kb: Pick<KbContext, 'layout'>,
109
+ /**
110
+ * The layout the placeholders render as, and the default branch the shared
111
+ * rules name — read per file, so a name applied by setup is the one written.
112
+ */
113
+ private readonly kb: TemplateKb,
103
114
  ) {}
104
115
 
105
116
  /**
@@ -188,9 +199,13 @@ export class TemplateSource {
188
199
  // happens to contain a placeholder as one.
189
200
  const layout = this.kb.layout;
190
201
  if (relPath === IGNORE_FILENAME) {
191
- return renderTemplateText(raw, { ...layout, agentsFile: gitignoreLiteral(layout.agentsFile) });
202
+ return renderTemplateText(
203
+ raw,
204
+ { ...layout, agentsFile: gitignoreLiteral(layout.agentsFile) },
205
+ this.kb.defaultBranch,
206
+ );
192
207
  }
193
- return renderTemplateText(raw, layout);
208
+ return renderTemplateText(raw, layout, this.kb.defaultBranch);
194
209
  }
195
210
 
196
211
  /**
@@ -1,6 +1,6 @@
1
1
  import { promises as fs, type Stats } from 'node:fs';
2
2
  import path from 'node:path';
3
- import { PathNotFoundError, WorkflowDomainError, WorkflowValidationError } from '../../shared/domain-errors.js';
3
+ import { PathNotFoundError, VersionControlDomainError, VersionControlValidationError } from '../../shared/domain-errors.js';
4
4
  import { assertWithinDirectory } from '../../shared/path-containment.js';
5
5
  import { sanitizedPath } from '../../shared/printable.js';
6
6
  import { hasControlCharacter, TMP_REF_PREFIX } from '../kb-fs/index.js';
@@ -55,9 +55,9 @@ export const TMP_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
55
55
  export const TMP_SWEEP_INTERVAL_MS = 60 * 60 * 1000;
56
56
 
57
57
  /** A ref that breaks one of the rules, with the rule named. */
58
- function invalidRef(ref: string, rule: string): WorkflowValidationError {
58
+ function invalidRef(ref: string, rule: string): VersionControlValidationError {
59
59
  const shown = sanitizedPath(ref);
60
- return new WorkflowValidationError(`"${shown}" is not a valid tmp ref: ${rule}`, { kind: 'tmp-ref-invalid', path: shown });
60
+ return new VersionControlValidationError(`"${shown}" is not a valid tmp ref: ${rule}`, { kind: 'tmp-ref-invalid', path: shown });
61
61
  }
62
62
 
63
63
  /**
@@ -97,7 +97,7 @@ function tmpRefFailure(ref: string, err: unknown): Error {
97
97
  return invalidRef(ref, 'it goes through a link that cannot be followed (a link that leads back to itself).');
98
98
  }
99
99
  log.warn('could not read a tmp ref:', { err, ref: shown });
100
- return new WorkflowDomainError(`"${shown}" could not be read from the workspace's tmp folder.`, 500, {
100
+ return new VersionControlDomainError(`"${shown}" could not be read from the workspace's tmp folder.`, 500, {
101
101
  kind: 'tmp-ref-unreadable',
102
102
  path: shown,
103
103
  });
@@ -7,7 +7,7 @@ import { isAbsence, type ITreeWalker } from '../../shared/fs.contract.js';
7
7
  import { printable } from '../../shared/printable.js';
8
8
  import type { IAdminAccessService } from '../admin/index.js';
9
9
  import express from 'express';
10
- import type { AuthUser, IWorkflowService } from '@bevel-software/platform-shared';
10
+ import type { AuthUser, IVersionControlService } from '@bevel-software/platform-shared';
11
11
  import {
12
12
  KNOWLEDGE_DIR,
13
13
  canonicalRelativePath,
@@ -29,8 +29,8 @@ import type { AuthService } from '../auth/index.js';
29
29
  import type { IAccessControl } from '../access/index.js';
30
30
  import { canReadWorkspacePath, resolveReadableMap, toKbRelative, isRolesYamlPath, assertRolesYamlParsable } from '../access-model/index.js';
31
31
  import type { ICreatorAccess, IChangeReadGate } from '../access-model/index.js';
32
- import type { WorkflowEventBus } from '../workflow/index.js';
33
- import { PathTraversalError, WorkflowDomainError } from '../../shared/domain-errors.js';
32
+ import type { VersionControlEventBus } from '../version-control/index.js';
33
+ import { PathTraversalError, VersionControlDomainError } from '../../shared/domain-errors.js';
34
34
  import { domainErrorBody } from '../../shared/http-errors.js';
35
35
  import { assertWithinDirectory } from '../../shared/path-containment.js';
36
36
  import { normalizeWorkspacePath } from '../kb-fs/index.js';
@@ -52,7 +52,7 @@ import { OCTET_STREAM, rawExtensionOf, rawMimeFor } from './file-readers/raw-mim
52
52
  *
53
53
  * CANONICAL, because the mutating verbs on this surface coordinate on the
54
54
  * path: `PUT` takes an in-process write turn on it, all of them take the
55
- * workflow lock row keyed by it, and the bytes live at it. A save spelled
55
+ * version-control lock row keyed by it, and the bytes live at it. A save spelled
56
56
  * `x/a.md` and a delete spelled `./x//a.md` would otherwise take two
57
57
  * different lock rows for one file and interleave. See
58
58
  * `canonicalRelativePath` for what it refuses to touch.
@@ -72,7 +72,7 @@ function requestPath(value: unknown): string | null {
72
72
  * Every file-mutating route on this surface — `PUT /file`, `DELETE /file`,
73
73
  * `PATCH /file` (move), `POST /directory`, `POST /upload`, `POST /unzip` —
74
74
  * routes its write through `withLock(path, op)`: acquire the per-file
75
- * workflow lock, perform the op, then release. The release commits the
75
+ * version-control lock, perform the op, then release. The release commits the
76
76
  * file as a one-file change attributed to the user and pushes it to origin,
77
77
  * exactly like the lock-aware filesystem the agent writes through. There
78
78
  * is no separate "share" step; save and share are fused.
@@ -80,8 +80,8 @@ function requestPath(value: unknown): string | null {
80
80
  export function createWorkspaceRoutes(
81
81
  workspaceService: WorkspaceService,
82
82
  authService: AuthService,
83
- workflowService: IWorkflowService,
84
- eventBus: WorkflowEventBus,
83
+ versionControlService: IVersionControlService,
84
+ eventBus: VersionControlEventBus,
85
85
  accessControl: IAccessControl,
86
86
  kb: KbContext,
87
87
  creatorAccess: ICreatorAccess,
@@ -164,7 +164,7 @@ export function createWorkspaceRoutes(
164
164
 
165
165
  /**
166
166
  * Resolve `req.userId` to the full `AuthUser` record. Mirrors the helper
167
- * in `workflow.routes.ts` so file-mutation routes can pass the user into
167
+ * in `version-control.routes.ts` so file-mutation routes can pass the user into
168
168
  * `acquireLock`/`releaseLock` (which need name + email for commit
169
169
  * attribution). Returns `null` and writes the response if unauthenticated.
170
170
  */
@@ -228,7 +228,7 @@ export function createWorkspaceRoutes(
228
228
  }
229
229
 
230
230
  /**
231
- * Acquire the workflow lock for `(workspaceId, branch, targetPath)`, run
231
+ * Acquire the version-control lock for `(workspaceId, branch, targetPath)`, run
232
232
  * `op`, then release. Release commits + pushes the file as a one-file
233
233
  * change attributed to `user` — same pipeline the lock-aware filesystem
234
234
  * uses for the agent. Contention surfaces immediately as a 409-style
@@ -261,7 +261,7 @@ export function createWorkspaceRoutes(
261
261
  * platform file back, coming from `source`. Passed straight to
262
262
  * `acquireLock`, which VERIFIES both halves — that the move is a restore
263
263
  * at all, and that this caller may make it — rather than believing
264
- * either. See the `IWorkflowService.acquireLock` contract.
264
+ * either. See the `IVersionControlService.acquireLock` contract.
265
265
  */
266
266
  platformRestore?: { source: string };
267
267
  },
@@ -277,7 +277,7 @@ export function createWorkspaceRoutes(
277
277
  // run the op without touching the lock and let the caller release
278
278
  // it on their own schedule (which is what fuses commit + push into
279
279
  // one atomic step the user explicitly triggered).
280
- const existing = await workflowService.getLock(workspaceId, branch, targetPath);
280
+ const existing = await versionControlService.getLock(workspaceId, branch, targetPath);
281
281
  if (existing && existing.holderUserId === user.id) {
282
282
  const result = await op();
283
283
  // Disk write landed but no commit yet (caller will release later,
@@ -300,7 +300,7 @@ export function createWorkspaceRoutes(
300
300
  eventBus.emit({ kind: 'fs-tree-changed', workspaceId, branch });
301
301
  return result;
302
302
  }
303
- const acquired = await workflowService.acquireLock(workspaceId, branch, targetPath, user, {
303
+ const acquired = await versionControlService.acquireLock(workspaceId, branch, targetPath, user, {
304
304
  platformRestore: options?.platformRestore,
305
305
  });
306
306
  if (!acquired.acquired) {
@@ -343,9 +343,9 @@ export function createWorkspaceRoutes(
343
343
  const untouched = wroteNothing(err);
344
344
  try {
345
345
  if (untouched) {
346
- await workflowService.releaseLockUntouched(workspaceId, branch, targetPath, user);
346
+ await versionControlService.releaseLockUntouched(workspaceId, branch, targetPath, user);
347
347
  } else {
348
- await workflowService.releaseLockNoCommit(workspaceId, branch, targetPath, user);
348
+ await versionControlService.releaseLockNoCommit(workspaceId, branch, targetPath, user);
349
349
  }
350
350
  } catch (releaseErr) {
351
351
  log.warn(
@@ -361,7 +361,7 @@ export function createWorkspaceRoutes(
361
361
  // explicit branch makes the intent obvious to readers.
362
362
  throw new Error('unreachable: opSucceeded false after try');
363
363
  }
364
- await workflowService.releaseLock(workspaceId, branch, targetPath, user);
364
+ await versionControlService.releaseLock(workspaceId, branch, targetPath, user);
365
365
  // Signal sidebar / explorer to refresh even when no open tab matched
366
366
  // the changed path (e.g. someone else just created a new file).
367
367
  // `releaseLock` already fires `file-changed` for the path, but
@@ -427,14 +427,14 @@ export function createWorkspaceRoutes(
427
427
  /**
428
428
  * Map any thrown error to an HTTP response. Centralises the response
429
429
  * shape so each route handler stays focused on its own logic.
430
- * - `WorkflowDomainError` → its `.status` + `.payload` (a traversal is a
430
+ * - `VersionControlDomainError` → its `.status` + `.payload` (a traversal is a
431
431
  * 403, an invalid path a 400, an unreadable archive a 422 — each by
432
432
  * its TYPE; this surface used to recognise all three by their message)
433
433
  * - Anything else with a `.status` → that status
434
434
  * - Default → 500
435
435
  */
436
436
  function sendError(res: express.Response, err: unknown): void {
437
- if (err instanceof WorkflowDomainError) {
437
+ if (err instanceof VersionControlDomainError) {
438
438
  res.status(err.status).json(domainErrorBody(err));
439
439
  return;
440
440
  }
@@ -479,7 +479,7 @@ export function createWorkspaceRoutes(
479
479
  // A typed domain answer — a branch origin no longer has (410), a name
480
480
  // git refuses (400) — is the client's to act on, not a failure of ours;
481
481
  // it keeps its status so the browser can say what happened.
482
- if (error instanceof WorkflowDomainError) {
482
+ if (error instanceof VersionControlDomainError) {
483
483
  sendError(res, error);
484
484
  return;
485
485
  }
@@ -564,7 +564,7 @@ export function createWorkspaceRoutes(
564
564
  * `hasRole` can throw `AccessConfigError` when `roles.yaml` / `access.md`
565
565
  * fails to load (missing role refs, malformed YAML). Without a catch the
566
566
  * async rejection bubbles past Express and the request hangs. Route it
567
- * through `sendError` so the rich `WorkflowDomainError` payload (status +
567
+ * through `sendError` so the rich `VersionControlDomainError` payload (status +
568
568
  * `accessConfigErrors`) surfaces to the caller — same shape the
569
569
  * `/access/has-role` endpoint returns.
570
570
  */
@@ -818,14 +818,14 @@ export function createWorkspaceRoutes(
818
818
  if (ref === null) {
819
819
  buffer = await workspaceService.readFileBinary(id, filePath);
820
820
  } else {
821
- const at = await workflowService.fileBytesAtChange(id, filePath, ref, side);
821
+ const at = await versionControlService.fileBytesAtChange(id, filePath, ref, side);
822
822
  // Nothing at that path on that side of the save — for `before`, also
823
823
  // how a root commit answers, since it has no parent to read.
824
824
  if (at === null) {
825
825
  res.status(404).json({ error: 'File not found' });
826
826
  return;
827
827
  }
828
- // `IWorkflowService` is isomorphic, so the bytes arrive typed as a
828
+ // `IVersionControlService` is isomorphic, so the bytes arrive typed as a
829
829
  // `Uint8Array`. `res.send` recognises a Buffer and JSON-encodes
830
830
  // anything else, so a zero-copy view over the same memory is what it
831
831
  // has to be handed — never a copy of a file that may be tens of MB.
@@ -888,7 +888,7 @@ export function createWorkspaceRoutes(
888
888
  // "File not found" would tell a reader their file had vanished. Only
889
889
  // the ref branch can raise one, so the working-tree read keeps the
890
890
  // blanket 404 it has always answered with.
891
- if (ref !== null && error instanceof WorkflowDomainError) {
891
+ if (ref !== null && error instanceof VersionControlDomainError) {
892
892
  sendError(res, error);
893
893
  return;
894
894
  }
@@ -999,7 +999,7 @@ export function createWorkspaceRoutes(
999
999
  // to load while the entries were judged (`AccessConfigError`): both are
1000
1000
  // domain errors carrying their own status and payload, the same ones
1001
1001
  // the single-file gate answers with.
1002
- if (error instanceof WorkflowDomainError) {
1002
+ if (error instanceof VersionControlDomainError) {
1003
1003
  sendError(res, error);
1004
1004
  return;
1005
1005
  }
@@ -1047,7 +1047,7 @@ export function createWorkspaceRoutes(
1047
1047
  // Traversal stays a 403 and a malformed workspace id its domain status:
1048
1048
  // both carry messages written to be read by the caller. (A traversal IS
1049
1049
  // a domain error now, so the one check covers both.)
1050
- if (error instanceof WorkflowDomainError) {
1050
+ if (error instanceof VersionControlDomainError) {
1051
1051
  sendError(res, error);
1052
1052
  return;
1053
1053
  }
@@ -1331,7 +1331,7 @@ export function createWorkspaceRoutes(
1331
1331
  // ONE spelling of the target from here down. `x/a.md`, `./x/a.md` and
1332
1332
  // `x//a.md` are the same file and all pass the path validator, and this
1333
1333
  // route coordinates on that path three times over: the in-process write
1334
- // turn, the workflow lock row, and the bytes themselves. Two clients
1334
+ // turn, the version-control lock row, and the bytes themselves. Two clients
1335
1335
  // spelling one file differently would otherwise take two different locks
1336
1336
  // and both pass their own precondition.
1337
1337
  const requested = requestPath(req.query.path);
@@ -1378,7 +1378,7 @@ export function createWorkspaceRoutes(
1378
1378
  // in this process may touch the path until the write is done. The write
1379
1379
  // inside takes the same turn re-entrantly.
1380
1380
  //
1381
- // Across instances the workflow lock below is still the coordinator;
1381
+ // Across instances the version-control lock below is still the coordinator;
1382
1382
  // this only orders what this server is doing.
1383
1383
  await workspaceService.withPathTurn(id, filePath, async () => {
1384
1384
  // A stale `ifMatch` is refused before anything commits.
@@ -23,7 +23,7 @@ import {
23
23
  } from '../../shared/rename-no-replace.js';
24
24
  import { GitRunError, type IGitRunner } from '../../shared/git.contract.js';
25
25
  import type { KbContext } from '../../shared/kb-context.js';
26
- import { NodeGitRunner } from '../workflow/index.js';
26
+ import { NodeGitRunner } from '../version-control/index.js';
27
27
  import { assertWithinDirectory } from '../../shared/path-containment.js';
28
28
  import { assertNoGitInternalsSegment, assertNotGitInternals, hasGitInternalsSegment } from '../../shared/git-internals.js';
29
29
  import { isZipNoiseEntry, readZipEntry, zipEntryName, zipEntryNameRefusal, zipEntrySegments } from './zip-entry-rules.js';
@@ -32,13 +32,13 @@ import {
32
32
  PathNotFoundError,
33
33
  PathTraversalError,
34
34
  UnreadableArchiveError,
35
- WorkflowValidationError,
35
+ VersionControlValidationError,
36
36
  } from '../../shared/domain-errors.js';
37
37
  import { workspaceIdForBranch, branchForWorkspaceId } from '../../shared/workspace-id.js';
38
38
  import {
39
39
  BranchNotFoundError,
40
40
  RemoteBranchGoneError,
41
- WorkflowDomainError,
41
+ VersionControlDomainError,
42
42
  isMissingRemoteBranchFailure,
43
43
  } from '../../shared/domain-errors.js';
44
44
  import { redactSecret, urlQuerySecrets } from '../../shared/redact-secret.js';
@@ -141,10 +141,10 @@ export class FolderTooLargeError extends Error {
141
141
  * Lives here rather than in `shared/domain-errors.ts` because the sentence is
142
142
  * built by `entryExistsMessage` and that file deliberately imports no VALUE
143
143
  * from `@bevel-software/platform-shared`, only a type. It still extends
144
- * `WorkflowDomainError`, so the routes' `sendError` maps it to 409 with
144
+ * `VersionControlDomainError`, so the routes' `sendError` maps it to 409 with
145
145
  * `{ kind: 'entry-exists', … }` without knowing this class exists.
146
146
  */
147
- export class EntryExistsError extends WorkflowDomainError {
147
+ export class EntryExistsError extends VersionControlDomainError {
148
148
  readonly kind = 'entry-exists' as const;
149
149
  constructor(readonly entryKind: ExistingEntryKind, readonly destination: string) {
150
150
  super(entryExistsMessage(entryKind, destination), 409, {
@@ -202,7 +202,7 @@ async function readForConditionalWrite(absolutePath: string, relativePath: strin
202
202
  */
203
203
  function assertValidPath(relativePath: string): void {
204
204
  const reason = validateRelativePath(relativePath);
205
- if (reason) throw new WorkflowValidationError(`Invalid path: ${reason}`);
205
+ if (reason) throw new VersionControlValidationError(`Invalid path: ${reason}`);
206
206
  }
207
207
 
208
208
  /** Throw the conditional write's 409 unless the file still holds `expectedContent`. */
@@ -1919,7 +1919,7 @@ export class WorkspaceService implements IWorkspaceService {
1919
1919
  * holding both turns would introduce the one shape that can deadlock here
1920
1920
  * (a move waiting on a target whose holder is waiting on the move's other
1921
1921
  * path). A rename onto a path being conditionally written is therefore
1922
- * outside that guarantee; the workflow lock on the moved path is what
1922
+ * outside that guarantee; the version-control lock on the moved path is what
1923
1923
  * serializes it against the app's own editors.
1924
1924
  */
1925
1925
  async moveEntry(workspaceId: string, oldWsPath: string, newWsPath: string): Promise<void> {
@@ -2023,7 +2023,7 @@ export class WorkspaceService implements IWorkspaceService {
2023
2023
  * two requests from that holder would interleave.
2024
2024
  *
2025
2025
  * The reach of the guarantee, exactly: within this process, one mutation at
2026
- * a time per resolved path. ACROSS instances the workflow lock row is the
2026
+ * a time per resolved path. ACROSS instances the version-control lock row is the
2027
2027
  * coordinator, and it agrees with this queue only because `PUT /file`
2028
2028
  * canonicalises the path before taking either (see `canonicalRelativePath`);
2029
2029
  * a caller that reaches the service directly with an odd spelling gets the
@@ -2055,7 +2055,7 @@ export class WorkspaceService implements IWorkspaceService {
2055
2055
  * Not re-entrant: take it once, and never around another folder's turn.
2056
2056
  *
2057
2057
  * The reach of the guarantee, like {@link withPathTurn}'s: within this
2058
- * process, over this process's clones. Across instances the workflow lock
2058
+ * process, over this process's clones. Across instances the version-control lock
2059
2059
  * rows coordinate — the placeholder write takes its own path's lock, as the
2060
2060
  * folder delete takes each file's — and each clone's changes meet in git,
2061
2061
  * as any write into a folder another instance deletes already does.
@@ -2276,7 +2276,7 @@ export class WorkspaceService implements IWorkspaceService {
2276
2276
  assertNoGitInternalsSegment(zipRelativePath);
2277
2277
  await assertNotGitInternals(workspaceDir, zipRelativePath, zipAbsolute);
2278
2278
  if (!zipRelativePath.toLowerCase().endsWith('.zip')) {
2279
- throw new WorkflowValidationError('Only .zip files can be extracted');
2279
+ throw new VersionControlValidationError('Only .zip files can be extracted');
2280
2280
  }
2281
2281
 
2282
2282
  // Inferred from the NORMALISED archive path, so an archive named without
@@ -2726,7 +2726,7 @@ export class WorkspaceService implements IWorkspaceService {
2726
2726
  // the type and surfacing as a 500. A malformed id (bad percent-escape)
2727
2727
  // decodes to itself, and `%` never passes the branch-name rules, so it
2728
2728
  // lands here as a BranchNameError like any other invalid name.
2729
- if (err instanceof WorkflowDomainError) throw err;
2729
+ if (err instanceof VersionControlDomainError) throw err;
2730
2730
  const reason = err instanceof Error ? err.message : String(err);
2731
2731
  throw new Error(`Invalid workspace ID "${workspaceId}": ${reason}`);
2732
2732
  }
@@ -15,9 +15,9 @@ import type { IRoutineWritePolicy } from './routine-write-policy.js';
15
15
  import type { ToolHandlerFactory } from '../tool-helpers/index.js';
16
16
  import { requireInternalSource, requireExternalSource } from '../tool-auth/index.js';
17
17
  import { workspaceIdForBranch } from '../../shared/workspace-id.js';
18
- import { GitInternalsError, WorkflowValidationError } from '../../shared/domain-errors.js';
18
+ import { GitInternalsError, VersionControlValidationError } from '../../shared/domain-errors.js';
19
19
  // Leaf-level shared primitive (same exception `workspace.service.ts` already
20
- // relies on) — not a workflow service, so this stays inside the module boundary.
20
+ // relies on) — not a version-control service, so this stays inside the module boundary.
21
21
  import {
22
22
  assertInsideRepo,
23
23
  assertRepoRootNameFree,
@@ -669,7 +669,7 @@ function refuseEntry(entry: Record<string, unknown>, err: unknown): void {
669
669
  entry.message = err.message;
670
670
  return;
671
671
  }
672
- if (err instanceof GitInternalsError || err instanceof WorkflowValidationError) {
672
+ if (err instanceof GitInternalsError || err instanceof VersionControlValidationError) {
673
673
  entry.error = (err.payload as { kind?: string } | undefined)?.kind ?? 'refused';
674
674
  entry.message = err.message;
675
675
  return;
@@ -1146,7 +1146,8 @@ export function registerWorkspaceTools(
1146
1146
  /**
1147
1147
  * The one tree walk (see `shared/fs.contract.ts`), for the `firstRun`
1148
1148
  * note's look at the knowledge folder. Optional for the harnesses about the
1149
- * file primitives; without it `start_session` answers the id alone.
1149
+ * file primitives; without it `start_session` answers
1150
+ * `{ sessionId, defaultBranch }` and never `firstRun`.
1150
1151
  */
1151
1152
  disk?: ITreeWalker,
1152
1153
  /**
@@ -1533,7 +1534,7 @@ export function registerWorkspaceTools(
1533
1534
 
1534
1535
  /**
1535
1536
  * The paths among `paths` the caller may NOT write, judged exactly as the
1536
- * lock gate judges them (`WorkflowService.acquireLock`): on a protected
1537
+ * lock gate judges them (`VersionControlService.acquireLock`): on a protected
1537
1538
  * branch only, against the access tree at HEAD, with no rules at HEAD
1538
1539
  * meaning allow. Empty on a draft branch — changes there reach a protected
1539
1540
  * branch only through a change request.
@@ -2019,18 +2020,21 @@ export function registerWorkspaceTools(
2019
2020
  const startSessionDef = toolDef({
2020
2021
  name: 'start_session',
2021
2022
  description:
2022
- 'Mint this conversation\'s id: the `sessionId` KnowledgeBase tools take. Call this ONCE, at the start of your work — minting a new id mid-run starts a second conversation as far as the server is concerned. Pass the returned id as `sessionId` to every tool whose arguments list it, inside `call_tool_chain` too; the others refuse it. Where the deployment offers an `ask` tool, hand it the SAME id: your reads and your questions are then one conversation. RETRYING IS SAFE: a call that fails created nothing, so retry it. If a retry lands after a success you hold two independent ids, which is harmless: keep passing the one you already used and ignore the other. Returns `{ sessionId }`, plus `firstRun` while the knowledge base is still empty: a note to act on.',
2023
+ 'Mint this conversation\'s id: the `sessionId` KnowledgeBase tools take. Call this ONCE, at the start of your work — minting a new id mid-run starts a second conversation as far as the server is concerned. Pass the returned id as `sessionId` to every tool whose arguments list it, inside `call_tool_chain` too; the others refuse it. Where the deployment offers an `ask` tool, hand it the SAME id: your reads and your questions are then one conversation. RETRYING IS SAFE: a call that fails created nothing, so retry it. If a retry lands after a success you hold two independent ids, which is harmless: keep passing the one you already used and ignore the other. Returns `{ sessionId, defaultBranch }`, plus `firstRun` while the knowledge base is empty: a note to act on.',
2023
2024
  path: '/api/agent/tools/start_session',
2024
2025
  inputs: { type: 'object', properties: {}, additionalProperties: false },
2025
2026
  outputs: {
2026
2027
  type: 'object',
2027
2028
  properties: {
2028
2029
  sessionId: str('The minted session id — pass it as `sessionId` to the tools that take one, and to `ask` where there is one.'),
2030
+ defaultBranch: str(
2031
+ "The deployment's default branch: the branch people read, and the one to pass as `branch` unless you are working on a draft.",
2032
+ ),
2029
2033
  firstRun: str(
2030
2034
  `Present only while the knowledge base holds nothing but its starter guide (and a starter pack's untouched pages): what to offer the person (the guide's \`${FIRST_RUN_SECTION_ID}\` section says how).`,
2031
2035
  ),
2032
2036
  },
2033
- required: ['sessionId'],
2037
+ required: ['sessionId', 'defaultBranch'],
2034
2038
  },
2035
2039
  tags: ['workspace'],
2036
2040
  });
@@ -2049,8 +2053,11 @@ export function registerWorkspaceTools(
2049
2053
  requireExternalSource,
2050
2054
  toolHandler(async (_args, ctx) => {
2051
2055
  const { sessionId } = await sessionSink.createSession(ctx.user.id, new Date());
2056
+ // Read here, not at registration: the setup save applies a branch model
2057
+ // to the running graph, and the name in effect is the one to give.
2058
+ const defaultBranch = kb.defaultBranch;
2052
2059
  const firstRun = await firstRunFor(ctx);
2053
- return firstRun ? { sessionId, firstRun } : { sessionId };
2060
+ return firstRun ? { sessionId, defaultBranch, firstRun } : { sessionId, defaultBranch };
2054
2061
  }),
2055
2062
  );
2056
2063
 
@@ -3084,7 +3091,7 @@ export function registerWorkspaceTools(
3084
3091
  for (const f of files) writePolicy.assertPathWritable(ctx.sessionId, f.path);
3085
3092
  const fs = await ctx.getFilesystem(a.branch as string);
3086
3093
  // `write: true` guarantees a LockingFilesystem here; `writeFiles` lands the
3087
- // batch as one commit. Structural cast avoids a workflow-internal import.
3094
+ // batch as one commit. Structural cast avoids a version-control-internal import.
3088
3095
  const batching = fs as unknown as {
3089
3096
  writeFiles(
3090
3097
  writes: { path: string; content: string }[],
@@ -3431,7 +3438,7 @@ export function registerWorkspaceTools(
3431
3438
  // ordering trick to keep the rest governed on the way — nothing lands
3432
3439
  // until all of it does. The placeholders go too: this is the one
3433
3440
  // operation that removes a folder. Structural cast, as `write_files`
3434
- // does, to avoid importing the workflow-internal class here.
3441
+ // does, to avoid importing the version-control-internal class here.
3435
3442
  if (files.length > 0) {
3436
3443
  const batch = fs as unknown as {
3437
3444
  writeFiles(
@@ -2,7 +2,7 @@ import path from 'node:path';
2
2
  import { describe, it, expect } from 'vitest';
3
3
  import { assertValidRelativePath } from '@bevel-software/platform-shared';
4
4
  import { canonicalFileIdentity } from '../canonical-file-identity.js';
5
- import { PathTraversalError, WorkflowValidationError } from '../domain-errors.js';
5
+ import { PathTraversalError, VersionControlValidationError } from '../domain-errors.js';
6
6
 
7
7
  /**
8
8
  * Two properties, and the second is the one worth the file.
@@ -75,9 +75,9 @@ describe('canonicalFileIdentity', () => {
75
75
  });
76
76
 
77
77
  it('refuses a path that climbs out rather than resolving it away', () => {
78
- expect(() => canonicalFileIdentity('../etc/passwd')).toThrow(WorkflowValidationError);
78
+ expect(() => canonicalFileIdentity('../etc/passwd')).toThrow(VersionControlValidationError);
79
79
  expect(() => canonicalFileIdentity('knowledge-base/../../etc/passwd')).toThrow(
80
- WorkflowValidationError,
80
+ VersionControlValidationError,
81
81
  );
82
82
  });
83
83
 
@@ -86,7 +86,7 @@ describe('canonicalFileIdentity', () => {
86
86
  // containment check alone would wave it through under a second identity
87
87
  // for `knowledge-base/y.md`.
88
88
  expect(() => canonicalFileIdentity('knowledge-base/x/../y.md')).toThrow(
89
- WorkflowValidationError,
89
+ VersionControlValidationError,
90
90
  );
91
91
  });
92
92
 
@@ -115,7 +115,7 @@ describe('canonicalFileIdentity', () => {
115
115
  // 400 for that same body.
116
116
  for (const notAPath of [123, true, {}, [], ['a.md'], null, undefined]) {
117
117
  expect(() => canonicalFileIdentity(notAPath as unknown as string)).toThrow(
118
- WorkflowValidationError,
118
+ VersionControlValidationError,
119
119
  );
120
120
  expect(() => canonicalFileIdentity(notAPath as unknown as string)).toThrow(
121
121
  'Invalid path: Path is required',
@@ -0,0 +1,39 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { capturingLogger } from '../../__tests__/capturing-logger.js';
3
+ import { callFireAndForget } from '../fire-and-forget.js';
4
+
5
+ const settled = () => new Promise<void>((resolve) => setImmediate(resolve));
6
+ const FAILED = 'a listener failed:';
7
+
8
+ describe('callFireAndForget — nothing a listener does reaches the caller', () => {
9
+ it('a listener that throws is logged as failed, and the call returns', () => {
10
+ const { logger, lines } = capturingLogger();
11
+ expect(() =>
12
+ callFireAndForget(
13
+ () => {
14
+ throw new Error('reactor exploded');
15
+ },
16
+ 'event',
17
+ logger,
18
+ FAILED,
19
+ ),
20
+ ).not.toThrow();
21
+ expect(lines).toEqual([{ level: 'error', message: FAILED, fields: { err: expect.objectContaining({ message: 'reactor exploded' }) } }]);
22
+ });
23
+
24
+ it('a listener whose promise rejects is logged as failed — a rejection the try/catch alone would miss', async () => {
25
+ const { logger, lines } = capturingLogger();
26
+ callFireAndForget(async () => Promise.reject(new Error('reactor exploded later')), 'event', logger, FAILED);
27
+ expect(lines).toEqual([]);
28
+ await settled();
29
+ expect(lines).toEqual([{ level: 'error', message: FAILED, fields: { err: expect.objectContaining({ message: 'reactor exploded later' }) } }]);
30
+ });
31
+
32
+ it('a listener that returns, or whose promise resolves, logs nothing', async () => {
33
+ const { logger, lines } = capturingLogger();
34
+ callFireAndForget(() => undefined, 'event', logger, FAILED);
35
+ callFireAndForget(async () => undefined, 'event', logger, FAILED);
36
+ await settled();
37
+ expect(lines).toEqual([]);
38
+ });
39
+ });