@bevel-software/platform-core-backend 0.20.0 → 0.21.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 (576) hide show
  1. package/dist/core/catalog-cache-invalidation.d.ts +7 -2
  2. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
  3. package/dist/core/catalog-cache-invalidation.js +8 -9
  4. package/dist/core/catalog-cache-invalidation.js.map +1 -1
  5. package/dist/core/core-ports.d.ts +19 -0
  6. package/dist/core/core-ports.d.ts.map +1 -1
  7. package/dist/core/core-ports.js.map +1 -1
  8. package/dist/core/create-core-server.d.ts +2 -0
  9. package/dist/core/create-core-server.d.ts.map +1 -1
  10. package/dist/core/create-core-server.js +23 -105
  11. package/dist/core/create-core-server.js.map +1 -1
  12. package/dist/core/create-core-services.d.ts +30 -5
  13. package/dist/core/create-core-services.d.ts.map +1 -1
  14. package/dist/core/create-core-services.js +136 -81
  15. package/dist/core/create-core-services.js.map +1 -1
  16. package/dist/core/lifecycle.d.ts +74 -28
  17. package/dist/core/lifecycle.d.ts.map +1 -1
  18. package/dist/core/lifecycle.js +157 -20
  19. package/dist/core/lifecycle.js.map +1 -1
  20. package/dist/core/public-config.d.ts +5 -1
  21. package/dist/core/public-config.d.ts.map +1 -1
  22. package/dist/core/public-config.js +7 -5
  23. package/dist/core/public-config.js.map +1 -1
  24. package/dist/core-config.d.ts +95 -1
  25. package/dist/core-config.d.ts.map +1 -1
  26. package/dist/core-config.js +24 -8
  27. package/dist/core-config.js.map +1 -1
  28. package/dist/index.d.ts +5 -3
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +6 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/modules/access/access-control.service.d.ts +18 -1
  33. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  34. package/dist/modules/access/access-control.service.js +19 -8
  35. package/dist/modules/access/access-control.service.js.map +1 -1
  36. package/dist/modules/access/access.routes.d.ts +2 -1
  37. package/dist/modules/access/access.routes.d.ts.map +1 -1
  38. package/dist/modules/access/access.routes.js +10 -10
  39. package/dist/modules/access/access.routes.js.map +1 -1
  40. package/dist/modules/access/change-read-gate.d.ts +6 -3
  41. package/dist/modules/access/change-read-gate.d.ts.map +1 -1
  42. package/dist/modules/access/change-read-gate.js +9 -6
  43. package/dist/modules/access/change-read-gate.js.map +1 -1
  44. package/dist/modules/access/creator-access.d.ts +4 -2
  45. package/dist/modules/access/creator-access.d.ts.map +1 -1
  46. package/dist/modules/access/creator-access.js +7 -4
  47. package/dist/modules/access/creator-access.js.map +1 -1
  48. package/dist/modules/agent-instructions/read-preamble.d.ts +2 -1
  49. package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
  50. package/dist/modules/agent-instructions/read-preamble.js +6 -9
  51. package/dist/modules/agent-instructions/read-preamble.js.map +1 -1
  52. package/dist/modules/auth/account-admission.d.ts +40 -0
  53. package/dist/modules/auth/account-admission.d.ts.map +1 -0
  54. package/dist/modules/auth/account-admission.js +17 -0
  55. package/dist/modules/auth/account-admission.js.map +1 -0
  56. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  57. package/dist/modules/auth/account.routes.js +4 -1
  58. package/dist/modules/auth/account.routes.js.map +1 -1
  59. package/dist/modules/auth/auth.service.d.ts +19 -1
  60. package/dist/modules/auth/auth.service.d.ts.map +1 -1
  61. package/dist/modules/auth/auth.service.js +33 -1
  62. package/dist/modules/auth/auth.service.js.map +1 -1
  63. package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
  64. package/dist/modules/auth/oidc-auth-provider.js +9 -0
  65. package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
  66. package/dist/modules/connection-probe/connection-probe.service.d.ts +13 -1
  67. package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
  68. package/dist/modules/connection-probe/connection-probe.service.js +10 -2
  69. package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
  70. package/dist/modules/database/advisory-lock.d.ts +17 -0
  71. package/dist/modules/database/advisory-lock.d.ts.map +1 -1
  72. package/dist/modules/database/advisory-lock.js +24 -3
  73. package/dist/modules/database/advisory-lock.js.map +1 -1
  74. package/dist/modules/database/connection.d.ts +67 -2
  75. package/dist/modules/database/connection.d.ts.map +1 -1
  76. package/dist/modules/database/connection.js +118 -12
  77. package/dist/modules/database/connection.js.map +1 -1
  78. package/dist/modules/database/migrate.d.ts +1 -1
  79. package/dist/modules/database/migrate.d.ts.map +1 -1
  80. package/dist/modules/database/migrate.js +27 -3
  81. package/dist/modules/database/migrate.js.map +1 -1
  82. package/dist/modules/kb-fs/branch-name.d.ts +0 -1
  83. package/dist/modules/kb-fs/branch-name.d.ts.map +1 -1
  84. package/dist/modules/kb-fs/branch-name.js +3 -3
  85. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  86. package/dist/modules/kb-fs/clone-config.d.ts +9 -8
  87. package/dist/modules/kb-fs/clone-config.d.ts.map +1 -1
  88. package/dist/modules/kb-fs/clone-config.js +14 -12
  89. package/dist/modules/kb-fs/clone-config.js.map +1 -1
  90. package/dist/modules/mcp/mcp.service.d.ts +7 -0
  91. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  92. package/dist/modules/mcp/mcp.service.js +4 -4
  93. package/dist/modules/mcp/mcp.service.js.map +1 -1
  94. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +4 -4
  95. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
  96. package/dist/modules/plugins/compile/marketplace-compiler.service.js +7 -10
  97. package/dist/modules/plugins/compile/marketplace-compiler.service.js.map +1 -1
  98. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts +4 -1
  99. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts.map +1 -1
  100. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js +5 -3
  101. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js.map +1 -1
  102. package/dist/modules/plugins/discovery/kb-plugin-source.d.ts +6 -1
  103. package/dist/modules/plugins/discovery/kb-plugin-source.d.ts.map +1 -1
  104. package/dist/modules/plugins/discovery/kb-plugin-source.js +14 -9
  105. package/dist/modules/plugins/discovery/kb-plugin-source.js.map +1 -1
  106. package/dist/modules/plugins/discovery/native.source.d.ts +4 -1
  107. package/dist/modules/plugins/discovery/native.source.d.ts.map +1 -1
  108. package/dist/modules/plugins/discovery/native.source.js +4 -2
  109. package/dist/modules/plugins/discovery/native.source.js.map +1 -1
  110. package/dist/modules/plugins/index.d.ts +1 -1
  111. package/dist/modules/plugins/index.d.ts.map +1 -1
  112. package/dist/modules/plugins/index.js +1 -1
  113. package/dist/modules/plugins/index.js.map +1 -1
  114. package/dist/modules/plugins/join-request-jobs.service.d.ts +3 -1
  115. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  116. package/dist/modules/plugins/join-request-jobs.service.js +6 -6
  117. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  118. package/dist/modules/plugins/join-requests.service.d.ts +3 -1
  119. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  120. package/dist/modules/plugins/join-requests.service.js +9 -8
  121. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  122. package/dist/modules/plugins/plugin-links.d.ts +65 -10
  123. package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
  124. package/dist/modules/plugins/plugin-links.js +136 -31
  125. package/dist/modules/plugins/plugin-links.js.map +1 -1
  126. package/dist/modules/plugins/plugin-links.service.d.ts +107 -5
  127. package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
  128. package/dist/modules/plugins/plugin-links.service.js +151 -21
  129. package/dist/modules/plugins/plugin-links.service.js.map +1 -1
  130. package/dist/modules/plugins/plugin-provision.service.d.ts +10 -3
  131. package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
  132. package/dist/modules/plugins/plugin-provision.service.js +33 -26
  133. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  134. package/dist/modules/plugins/plugin-rename.service.d.ts +4 -2
  135. package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
  136. package/dist/modules/plugins/plugin-rename.service.js +10 -12
  137. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  138. package/dist/modules/plugins/plugins.routes.d.ts +3 -0
  139. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  140. package/dist/modules/plugins/plugins.routes.js +45 -15
  141. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  142. package/dist/modules/plugins/plugins.service.d.ts +4 -4
  143. package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
  144. package/dist/modules/plugins/plugins.service.js +7 -10
  145. package/dist/modules/plugins/plugins.service.js.map +1 -1
  146. package/dist/modules/plugins/teams.routes.d.ts +4 -1
  147. package/dist/modules/plugins/teams.routes.d.ts.map +1 -1
  148. package/dist/modules/plugins/teams.routes.js +11 -9
  149. package/dist/modules/plugins/teams.routes.js.map +1 -1
  150. package/dist/modules/secrets-vault/index.d.ts +1 -1
  151. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  152. package/dist/modules/secrets-vault/index.js +1 -1
  153. package/dist/modules/secrets-vault/index.js.map +1 -1
  154. package/dist/modules/secrets-vault/secrets-variable-loader.d.ts +29 -11
  155. package/dist/modules/secrets-vault/secrets-variable-loader.d.ts.map +1 -1
  156. package/dist/modules/secrets-vault/secrets-variable-loader.js +46 -21
  157. package/dist/modules/secrets-vault/secrets-variable-loader.js.map +1 -1
  158. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +3 -0
  159. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  160. package/dist/modules/secrets-vault/secrets-vault.routes.js +4 -6
  161. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  162. package/dist/modules/settings/deployment-settings.service.d.ts +12 -8
  163. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  164. package/dist/modules/settings/deployment-settings.service.js +20 -22
  165. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  166. package/dist/modules/settings/setup.routes.d.ts +9 -2
  167. package/dist/modules/settings/setup.routes.d.ts.map +1 -1
  168. package/dist/modules/settings/setup.routes.js +20 -14
  169. package/dist/modules/settings/setup.routes.js.map +1 -1
  170. package/dist/modules/skills/allowed-tools-check.d.ts +4 -3
  171. package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -1
  172. package/dist/modules/skills/allowed-tools-check.js +8 -8
  173. package/dist/modules/skills/allowed-tools-check.js.map +1 -1
  174. package/dist/modules/skills/pending-skills.service.d.ts +3 -1
  175. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  176. package/dist/modules/skills/pending-skills.service.js +9 -6
  177. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  178. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -1
  179. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  180. package/dist/modules/skills/skill-access-requests.routes.js +6 -6
  181. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  182. package/dist/modules/skills/skills.routes.d.ts +4 -1
  183. package/dist/modules/skills/skills.routes.d.ts.map +1 -1
  184. package/dist/modules/skills/skills.routes.js +4 -4
  185. package/dist/modules/skills/skills.routes.js.map +1 -1
  186. package/dist/modules/skills/skills.service.d.ts +4 -2
  187. package/dist/modules/skills/skills.service.d.ts.map +1 -1
  188. package/dist/modules/skills/skills.service.js +13 -11
  189. package/dist/modules/skills/skills.service.js.map +1 -1
  190. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +2 -1
  191. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
  192. package/dist/modules/tool-manuals/mcp-json-discovery.js +6 -5
  193. package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
  194. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +4 -2
  195. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
  196. package/dist/modules/tool-manuals/mcp-server-edit.service.js +12 -10
  197. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  198. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -1
  199. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  200. package/dist/modules/tool-manuals/pending-tools.service.js +19 -16
  201. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  202. package/dist/modules/tool-manuals/tool-delete.service.d.ts +4 -2
  203. package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -1
  204. package/dist/modules/tool-manuals/tool-delete.service.js +14 -12
  205. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  206. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +3 -1
  207. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
  208. package/dist/modules/tool-manuals/tool-manuals.routes.js +7 -7
  209. package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
  210. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +4 -2
  211. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  212. package/dist/modules/tool-manuals/tool-manuals.service.js +15 -12
  213. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  214. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
  215. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  216. package/dist/modules/tool-manuals/tool-manuals.tools.js +4 -6
  217. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  218. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +3 -2
  219. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
  220. package/dist/modules/workflow/agent-tools/workflow.tools.js +9 -9
  221. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
  222. package/dist/modules/workflow/git/git.service.d.ts +11 -5
  223. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  224. package/dist/modules/workflow/git/git.service.js +23 -14
  225. package/dist/modules/workflow/git/git.service.js.map +1 -1
  226. package/dist/modules/workflow/git/node-git-runner.d.ts +26 -2
  227. package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -1
  228. package/dist/modules/workflow/git/node-git-runner.js +35 -5
  229. package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
  230. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
  231. package/dist/modules/workflow/review-workflow/review-workflow.service.js +9 -4
  232. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
  233. package/dist/modules/workflow/session-ontology.service.d.ts +6 -1
  234. package/dist/modules/workflow/session-ontology.service.d.ts.map +1 -1
  235. package/dist/modules/workflow/session-ontology.service.js +6 -2
  236. package/dist/modules/workflow/session-ontology.service.js.map +1 -1
  237. package/dist/modules/workflow/workflow.service.d.ts +8 -3
  238. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  239. package/dist/modules/workflow/workflow.service.js +33 -23
  240. package/dist/modules/workflow/workflow.service.js.map +1 -1
  241. package/dist/modules/workspace/session-ontology.gate.d.ts +3 -1
  242. package/dist/modules/workspace/session-ontology.gate.d.ts.map +1 -1
  243. package/dist/modules/workspace/session-ontology.gate.js +3 -3
  244. package/dist/modules/workspace/session-ontology.gate.js.map +1 -1
  245. package/dist/modules/workspace/startup/kb-git.d.ts +4 -3
  246. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  247. package/dist/modules/workspace/startup/kb-git.js +15 -13
  248. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  249. package/dist/modules/workspace/startup/kb-startup-runner.d.ts +5 -8
  250. package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
  251. package/dist/modules/workspace/startup/kb-startup-runner.js +35 -38
  252. package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
  253. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts +7 -1
  254. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts.map +1 -1
  255. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +23 -16
  256. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
  257. package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts +7 -1
  258. package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts.map +1 -1
  259. package/dist/modules/workspace/startup/steps/personal-spaces.step.js +12 -5
  260. package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -1
  261. package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts +7 -1
  262. package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts.map +1 -1
  263. package/dist/modules/workspace/startup/steps/plugin-display-names.step.js +12 -5
  264. package/dist/modules/workspace/startup/steps/plugin-display-names.step.js.map +1 -1
  265. package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts +7 -1
  266. package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts.map +1 -1
  267. package/dist/modules/workspace/startup/steps/plugin-manifests.step.js +12 -5
  268. package/dist/modules/workspace/startup/steps/plugin-manifests.step.js.map +1 -1
  269. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +4 -1
  270. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  271. package/dist/modules/workspace/startup/steps/seed-tree.js +14 -11
  272. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  273. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +17 -3
  274. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  275. package/dist/modules/workspace/startup/steps/template-files.step.js +36 -30
  276. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  277. package/dist/modules/workspace/startup/steps/template-source.d.ts +6 -1
  278. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  279. package/dist/modules/workspace/startup/steps/template-source.js +10 -6
  280. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  281. package/dist/modules/workspace/workspace.routes.d.ts +2 -1
  282. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  283. package/dist/modules/workspace/workspace.routes.js +8 -7
  284. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  285. package/dist/modules/workspace/workspace.service.d.ts +18 -12
  286. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  287. package/dist/modules/workspace/workspace.service.js +32 -28
  288. package/dist/modules/workspace/workspace.service.js.map +1 -1
  289. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  290. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  291. package/dist/modules/workspace/workspace.tools.js +20 -18
  292. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  293. package/dist/modules/workspace/write-denial.d.ts +3 -2
  294. package/dist/modules/workspace/write-denial.d.ts.map +1 -1
  295. package/dist/modules/workspace/write-denial.js +6 -5
  296. package/dist/modules/workspace/write-denial.js.map +1 -1
  297. package/dist/shared/git.contract.d.ts +52 -7
  298. package/dist/shared/git.contract.d.ts.map +1 -1
  299. package/dist/shared/git.contract.js +30 -8
  300. package/dist/shared/git.contract.js.map +1 -1
  301. package/dist/shared/kb-context.d.ts +76 -0
  302. package/dist/shared/kb-context.d.ts.map +1 -0
  303. package/dist/shared/kb-context.js +108 -0
  304. package/dist/shared/kb-context.js.map +1 -0
  305. package/dist/shared/kb-layout.d.ts +3 -2
  306. package/dist/shared/kb-layout.d.ts.map +1 -1
  307. package/dist/shared/kb-layout.js +4 -3
  308. package/dist/shared/kb-layout.js.map +1 -1
  309. package/dist/shared/kb-layout.test.js +35 -27
  310. package/dist/shared/kb-layout.test.js.map +1 -1
  311. package/dist/shared/pending-proposals.d.ts +4 -1
  312. package/dist/shared/pending-proposals.d.ts.map +1 -1
  313. package/dist/shared/pending-proposals.js +3 -4
  314. package/dist/shared/pending-proposals.js.map +1 -1
  315. package/dist/shared/redact-secret.d.ts +5 -5
  316. package/dist/shared/redact-secret.js +5 -5
  317. package/dist/tenancy/index.d.ts +13 -0
  318. package/dist/tenancy/index.d.ts.map +1 -0
  319. package/dist/tenancy/index.js +13 -0
  320. package/dist/tenancy/index.js.map +1 -0
  321. package/dist/tenancy/static-tenant-source.d.ts +98 -0
  322. package/dist/tenancy/static-tenant-source.d.ts.map +1 -0
  323. package/dist/tenancy/static-tenant-source.js +220 -0
  324. package/dist/tenancy/static-tenant-source.js.map +1 -0
  325. package/dist/tenancy/tenant-host.d.ts +80 -0
  326. package/dist/tenancy/tenant-host.d.ts.map +1 -0
  327. package/dist/tenancy/tenant-host.js +217 -0
  328. package/dist/tenancy/tenant-host.js.map +1 -0
  329. package/dist/tenancy/tenant-runtime.d.ts +91 -0
  330. package/dist/tenancy/tenant-runtime.d.ts.map +1 -0
  331. package/dist/tenancy/tenant-runtime.js +174 -0
  332. package/dist/tenancy/tenant-runtime.js.map +1 -0
  333. package/dist/tenancy/tenant-secrets.d.ts +24 -0
  334. package/dist/tenancy/tenant-secrets.d.ts.map +1 -0
  335. package/dist/tenancy/tenant-secrets.js +30 -0
  336. package/dist/tenancy/tenant-secrets.js.map +1 -0
  337. package/dist/tenancy/tenant-source.contract.d.ts +45 -0
  338. package/dist/tenancy/tenant-source.contract.d.ts.map +1 -0
  339. package/dist/tenancy/tenant-source.contract.js +21 -0
  340. package/dist/tenancy/tenant-source.contract.js.map +1 -0
  341. package/migrations/0000_core_init.sql +14 -14
  342. package/migrations/0003_deployment_settings.sql +1 -1
  343. package/migrations/0005_github_facade.sql +1 -1
  344. package/migrations/0012_agent_audit.sql +6 -6
  345. package/package.json +3 -3
  346. package/src/__tests__/branch-model.test.ts +7 -6
  347. package/src/__tests__/kb-context.ts +30 -0
  348. package/src/__tests__/kb-layout-config.test.ts +35 -30
  349. package/src/core/__tests__/catalog-cache-invalidation.test.ts +2 -1
  350. package/src/core/__tests__/lifecycle.test.ts +78 -1
  351. package/src/core/__tests__/public-config.test.ts +5 -1
  352. package/src/core/catalog-cache-invalidation.ts +16 -11
  353. package/src/core/core-ports.ts +19 -0
  354. package/src/core/create-core-server.ts +27 -106
  355. package/src/core/create-core-services.ts +180 -95
  356. package/src/core/lifecycle.ts +214 -29
  357. package/src/core/public-config.ts +8 -5
  358. package/src/core-config.ts +107 -8
  359. package/src/index.ts +25 -2
  360. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +2 -1
  361. package/src/modules/access/__tests__/access.routes.batch.test.ts +2 -1
  362. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +2 -1
  363. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +2 -1
  364. package/src/modules/access/__tests__/access.routes.overrides.test.ts +2 -1
  365. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +2 -1
  366. package/src/modules/access/__tests__/access.routes.prospective.test.ts +2 -1
  367. package/src/modules/access/__tests__/access.routes.revoke.test.ts +2 -1
  368. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +2 -1
  369. package/src/modules/access/__tests__/change-read-gate.test.ts +13 -11
  370. package/src/modules/access/__tests__/creator-access.test.ts +3 -2
  371. package/src/modules/access/__tests__/roles.routes.test.ts +2 -1
  372. package/src/modules/access/access-control.service.ts +20 -6
  373. package/src/modules/access/access.routes.ts +10 -13
  374. package/src/modules/access/change-read-gate.ts +10 -4
  375. package/src/modules/access/creator-access.ts +7 -2
  376. package/src/modules/agent-instructions/__tests__/read-preamble.test.ts +13 -12
  377. package/src/modules/agent-instructions/read-preamble.ts +10 -12
  378. package/src/modules/auth/__tests__/account.routes.test.ts +15 -0
  379. package/src/modules/auth/__tests__/auth.service.test.ts +60 -0
  380. package/src/modules/auth/account-admission.ts +44 -0
  381. package/src/modules/auth/account.routes.ts +4 -1
  382. package/src/modules/auth/auth.service.ts +33 -1
  383. package/src/modules/auth/oidc-auth-provider.ts +9 -0
  384. package/src/modules/connection-probe/connection-probe.service.ts +7 -1
  385. package/src/modules/database/__tests__/advisory-lock.test.ts +23 -1
  386. package/src/modules/database/__tests__/connection.test.ts +98 -0
  387. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -0
  388. package/src/modules/database/advisory-lock.ts +28 -4
  389. package/src/modules/database/connection.ts +143 -13
  390. package/src/modules/database/migrate.ts +48 -14
  391. package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +2 -1
  392. package/src/modules/diff/__tests__/diff.service.test.ts +2 -1
  393. package/src/modules/kb-fs/__tests__/branch-name.test.ts +6 -6
  394. package/src/modules/kb-fs/__tests__/clone-config.test.ts +24 -20
  395. package/src/modules/kb-fs/branch-name.ts +3 -3
  396. package/src/modules/kb-fs/clone-config.ts +15 -12
  397. package/src/modules/marketplace/__tests__/marketplace-repo.head.test.ts +2 -1
  398. package/src/modules/mcp/mcp.service.ts +11 -4
  399. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +12 -11
  400. package/src/modules/plugins/__tests__/bundle-dialect.test.ts +2 -1
  401. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +6 -4
  402. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +2 -1
  403. package/src/modules/plugins/__tests__/join-requests.service.test.ts +2 -1
  404. package/src/modules/plugins/__tests__/plugin-creation-display-name.test.ts +4 -3
  405. package/src/modules/plugins/__tests__/plugin-index.service.test.ts +6 -4
  406. package/src/modules/plugins/__tests__/plugin-links.service.test.ts +220 -5
  407. package/src/modules/plugins/__tests__/plugin-provision.service.test.ts +3 -1
  408. package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +7 -6
  409. package/src/modules/plugins/__tests__/plugins.routes.test.ts +11 -2
  410. package/src/modules/plugins/__tests__/teams.routes.test.ts +2 -1
  411. package/src/modules/plugins/compile/marketplace-compiler.service.ts +7 -9
  412. package/src/modules/plugins/discovery/__tests__/kb-plugin-source.test.ts +20 -16
  413. package/src/modules/plugins/discovery/bundle-dialect/bundle.source.ts +9 -2
  414. package/src/modules/plugins/discovery/kb-plugin-source.ts +15 -8
  415. package/src/modules/plugins/discovery/native.source.ts +4 -1
  416. package/src/modules/plugins/index.ts +1 -1
  417. package/src/modules/plugins/join-request-jobs.service.ts +8 -7
  418. package/src/modules/plugins/join-requests.service.ts +7 -7
  419. package/src/modules/plugins/plugin-links.service.ts +192 -19
  420. package/src/modules/plugins/plugin-links.ts +147 -27
  421. package/src/modules/plugins/plugin-provision.service.ts +54 -27
  422. package/src/modules/plugins/plugin-rename.service.ts +10 -10
  423. package/src/modules/plugins/plugins.routes.ts +45 -15
  424. package/src/modules/plugins/plugins.service.ts +7 -11
  425. package/src/modules/plugins/teams.routes.ts +16 -8
  426. package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +7 -0
  427. package/src/modules/secrets-vault/__tests__/secrets-variable-loader.test.ts +40 -0
  428. package/src/modules/secrets-vault/__tests__/tool-owner-gate.route.test.ts +2 -0
  429. package/src/modules/secrets-vault/index.ts +2 -0
  430. package/src/modules/secrets-vault/secrets-variable-loader.ts +51 -21
  431. package/src/modules/secrets-vault/secrets-vault.routes.ts +7 -6
  432. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +24 -11
  433. package/src/modules/settings/__tests__/git-root-folders.test.ts +2 -1
  434. package/src/modules/settings/__tests__/setup.routes.boot-failure.test.ts +2 -1
  435. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +7 -4
  436. package/src/modules/settings/__tests__/setup.routes.oidc.test.ts +2 -0
  437. package/src/modules/settings/__tests__/setup.routes.sync-status.test.ts +2 -0
  438. package/src/modules/settings/__tests__/setup.routes.test.ts +33 -52
  439. package/src/modules/settings/deployment-settings.service.ts +21 -20
  440. package/src/modules/settings/setup.routes.ts +26 -16
  441. package/src/modules/skills/__tests__/allowed-tools-check.test.ts +11 -10
  442. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +4 -3
  443. package/src/modules/skills/__tests__/pending-skills.service.test.ts +3 -1
  444. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +2 -1
  445. package/src/modules/skills/__tests__/skills.routes.warnings.test.ts +2 -1
  446. package/src/modules/skills/__tests__/skills.service.test.ts +3 -2
  447. package/src/modules/skills/allowed-tools-check.ts +7 -6
  448. package/src/modules/skills/pending-skills.service.ts +9 -8
  449. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  450. package/src/modules/skills/skills.routes.ts +4 -3
  451. package/src/modules/skills/skills.service.ts +13 -9
  452. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +3 -2
  453. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +3 -2
  454. package/src/modules/tool-manuals/__tests__/mcp-json-discovery.test.ts +17 -12
  455. package/src/modules/tool-manuals/__tests__/mcp-server-edit.service.test.ts +2 -1
  456. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +4 -1
  457. package/src/modules/tool-manuals/__tests__/tool-delete.service.test.ts +2 -1
  458. package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +2 -1
  459. package/src/modules/tool-manuals/__tests__/tool-manuals.cli.test.ts +5 -4
  460. package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +2 -1
  461. package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.routes.test.ts +4 -2
  462. package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.test.ts +13 -5
  463. package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +2 -1
  464. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +9 -1
  465. package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +3 -2
  466. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +2 -0
  467. package/src/modules/tool-manuals/mcp-json-discovery.ts +6 -4
  468. package/src/modules/tool-manuals/mcp-server-edit.service.ts +13 -11
  469. package/src/modules/tool-manuals/pending-tools.service.ts +19 -16
  470. package/src/modules/tool-manuals/tool-delete.service.ts +13 -10
  471. package/src/modules/tool-manuals/tool-manuals.routes.ts +10 -8
  472. package/src/modules/tool-manuals/tool-manuals.service.ts +15 -13
  473. package/src/modules/tool-manuals/tool-manuals.tools.ts +7 -6
  474. package/src/modules/workflow/__tests__/apply-failure.test.ts +2 -1
  475. package/src/modules/workflow/__tests__/merge-announces-tree.test.ts +14 -26
  476. package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +2 -1
  477. package/src/modules/workflow/__tests__/session-ontology.service.test.ts +3 -2
  478. package/src/modules/workflow/__tests__/workflow.routes.lock-path.test.ts +2 -1
  479. package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +3 -10
  480. package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +2 -1
  481. package/src/modules/workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts +3 -10
  482. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +28 -27
  483. package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +2 -1
  484. package/src/modules/workflow/__tests__/workflow.service.platform-restore.test.ts +2 -1
  485. package/src/modules/workflow/__tests__/workflow.service.read-gate.test.ts +3 -2
  486. package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +2 -1
  487. package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +5 -4
  488. package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +2 -1
  489. package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +2 -1
  490. package/src/modules/workflow/agent-tools/workflow.tools.ts +11 -9
  491. package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +5 -4
  492. package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +12 -11
  493. package/src/modules/workflow/git/__tests__/git.service.commitChanges.test.ts +9 -8
  494. package/src/modules/workflow/git/__tests__/git.service.commitFile.strayPath.test.ts +8 -7
  495. package/src/modules/workflow/git/__tests__/git.service.commitFile.test.ts +6 -5
  496. package/src/modules/workflow/git/__tests__/git.service.createBranch.test.ts +3 -2
  497. package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +3 -2
  498. package/src/modules/workflow/git/__tests__/git.service.diffFileAtCommit.test.ts +7 -6
  499. package/src/modules/workflow/git/__tests__/git.service.diffFileBetweenBranches.test.ts +16 -15
  500. package/src/modules/workflow/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -2
  501. package/src/modules/workflow/git/__tests__/git.service.forkPoint.test.ts +2 -1
  502. package/src/modules/workflow/git/__tests__/git.service.history-guards.test.ts +2 -1
  503. package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +10 -9
  504. package/src/modules/workflow/git/__tests__/git.service.listTrackedFiles.test.ts +2 -1
  505. package/src/modules/workflow/git/__tests__/git.service.logForFile.test.ts +6 -5
  506. package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +9 -8
  507. package/src/modules/workflow/git/__tests__/git.service.pendingChanges.test.ts +2 -1
  508. package/src/modules/workflow/git/__tests__/git.service.postMergePull.test.ts +4 -3
  509. package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +9 -8
  510. package/src/modules/workflow/git/__tests__/git.service.readFileAtRef.test.ts +2 -1
  511. package/src/modules/workflow/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -1
  512. package/src/modules/workflow/git/__tests__/git.service.status.test.ts +4 -3
  513. package/src/modules/workflow/git/__tests__/git.service.syncFromRemote.test.ts +8 -7
  514. package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +41 -3
  515. package/src/modules/workflow/git/git.service.ts +24 -13
  516. package/src/modules/workflow/git/node-git-runner.ts +37 -4
  517. package/src/modules/workflow/review-workflow/review-workflow.service.ts +9 -6
  518. package/src/modules/workflow/session-ontology.service.ts +7 -2
  519. package/src/modules/workflow/workflow.service.ts +31 -24
  520. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -2
  521. package/src/modules/workspace/__tests__/git-internals.security.test.ts +10 -9
  522. package/src/modules/workspace/__tests__/session-ontology.gate.test.ts +4 -2
  523. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -2
  524. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +2 -1
  525. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +2 -1
  526. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +2 -1
  527. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +2 -1
  528. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +2 -1
  529. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +2 -1
  530. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +5 -4
  531. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +2 -1
  532. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +2 -1
  533. package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +2 -2
  534. package/src/modules/workspace/__tests__/workspace.service.list-cloned.test.ts +6 -5
  535. package/src/modules/workspace/__tests__/workspace.service.move-never-overwrites.test.ts +2 -1
  536. package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +2 -1
  537. package/src/modules/workspace/__tests__/workspace.service.test.ts +84 -50
  538. package/src/modules/workspace/__tests__/workspace.service.unknown-branch.test.ts +2 -1
  539. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +10 -7
  540. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +4 -3
  541. package/src/modules/workspace/__tests__/workspace.tools.test.ts +9 -8
  542. package/src/modules/workspace/__tests__/write-denial.test.ts +5 -4
  543. package/src/modules/workspace/session-ontology.gate.ts +6 -4
  544. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +6 -2
  545. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +29 -21
  546. package/src/modules/workspace/startup/kb-git.ts +15 -22
  547. package/src/modules/workspace/startup/kb-startup-runner.ts +40 -46
  548. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +104 -98
  549. package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +24 -16
  550. package/src/modules/workspace/startup/steps/personal-spaces.step.ts +14 -5
  551. package/src/modules/workspace/startup/steps/plugin-display-names.step.ts +13 -5
  552. package/src/modules/workspace/startup/steps/plugin-manifests.step.ts +14 -5
  553. package/src/modules/workspace/startup/steps/seed-tree.ts +11 -9
  554. package/src/modules/workspace/startup/steps/template-files.step.ts +43 -34
  555. package/src/modules/workspace/startup/steps/template-source.ts +8 -5
  556. package/src/modules/workspace/workspace.routes.ts +8 -7
  557. package/src/modules/workspace/workspace.service.ts +30 -27
  558. package/src/modules/workspace/workspace.tools.ts +21 -20
  559. package/src/modules/workspace/write-denial.ts +7 -5
  560. package/src/shared/__tests__/kb-layout.plugin.test.ts +19 -16
  561. package/src/shared/git.contract.ts +70 -8
  562. package/src/shared/kb-context.ts +130 -0
  563. package/src/shared/kb-layout.test.ts +37 -27
  564. package/src/shared/kb-layout.ts +4 -3
  565. package/src/shared/pending-proposals.ts +7 -4
  566. package/src/shared/redact-secret.ts +5 -5
  567. package/src/tenancy/__tests__/static-tenant-source.test.ts +177 -0
  568. package/src/tenancy/__tests__/tenant-host.test.ts +372 -0
  569. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -0
  570. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -0
  571. package/src/tenancy/index.ts +35 -0
  572. package/src/tenancy/static-tenant-source.ts +296 -0
  573. package/src/tenancy/tenant-host.ts +261 -0
  574. package/src/tenancy/tenant-runtime.ts +208 -0
  575. package/src/tenancy/tenant-secrets.ts +41 -0
  576. package/src/tenancy/tenant-source.contract.ts +59 -0
@@ -1,10 +1,10 @@
1
1
  import type { Router, RequestHandler } from 'express';
2
- import { DEFAULT_BRANCH, PROTECTED_BRANCHES } from '@bevel-software/platform-shared';
3
2
  import type { IToolRegistry, JsonSchema } from '../../tool-registry/tool.contract.js';
4
3
  import { ToolError, type ToolContext, type ToolHandler } from '../../tool-helpers/tool.contract.js';
5
4
  import { toolDef, withBranchInput } from '../../tool-helpers/tool-def.js';
6
5
  import type { ToolHandlerFactory } from '../../tool-helpers/tool-handler.js';
7
6
  import { requireInternalSource } from '../../tool-auth/tool-auth.middleware.js';
7
+ import type { KbContext } from '../../../shared/kb-context.js';
8
8
  import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
9
9
  import { assertInsideRepo, normalizePathArgs } from '../../kb-fs/repo-path.js';
10
10
  import { RETIRED_TOOL_MESSAGES } from '@bevel-software/platform-mcp-core';
@@ -14,9 +14,10 @@ function stripKbDir(path: string, kbDirName: string): string {
14
14
  return path.startsWith(`${kbDirName}/`) ? path.slice(kbDirName.length + 1) : path;
15
15
  }
16
16
 
17
- // A function, not a constant: the branch model is applied during boot, and a
18
- // module-scope capture would freeze this at the empty set that exists before it.
19
- const protectedInline = () => [...PROTECTED_BRANCHES].map((b) => `\`${b}\``).join(' / ');
17
+ // Read at call time, not captured: the branch model is applied during boot,
18
+ // and a value taken at registration would be the empty set that exists before it.
19
+ const protectedInline = (kb: Pick<KbContext, 'protectedBranches'>) =>
20
+ [...kb.protectedBranches].map((b) => `\`${b}\``).join(' / ');
20
21
 
21
22
  // Output sub-schemas for the git-aliased workflow payloads (Branch, Change,
22
23
  // ChangeRequestComment, …). Defined once and referenced by the individual tool
@@ -131,9 +132,10 @@ export function registerWorkflowTools(
131
132
  router: Router,
132
133
  toolAuth: RequestHandler,
133
134
  toolHandler: ToolHandlerFactory,
134
- /** The clone folder at the workspace root; `save_file` refuses a path outside it. */
135
- kbDirName: string,
135
+ /** The clone folder at the workspace root (`save_file` refuses a path outside it) and the branch model. */
136
+ kb: Pick<KbContext, 'kbDirName' | 'defaultBranch' | 'defaultWorkspaceId' | 'protectedBranches'>,
136
137
  ): void {
138
+ const { kbDirName } = kb;
137
139
  const mount = (spec: {
138
140
  name: string;
139
141
  description: string;
@@ -180,7 +182,7 @@ export function registerWorkflowTools(
180
182
  // just to run a global op. Falls back to the default branch on a cold start
181
183
  // with no workspaces yet.
182
184
  const repoGlobalWorkspaceId = async (ctx: ToolContext): Promise<string> =>
183
- (await ctx.workspaceService.findAnyWorkspaceId()) ?? workspaceIdForBranch(DEFAULT_BRANCH);
185
+ (await ctx.workspaceService.findAnyWorkspaceId()) ?? kb.defaultWorkspaceId();
184
186
 
185
187
  mount({
186
188
  name: 'list_branches',
@@ -303,7 +305,7 @@ export function registerWorkflowTools(
303
305
  name: 'create_branch',
304
306
  description:
305
307
  'Create a new unprotected draft named `name`, forked from the existing branch `branch`. The ' +
306
- `backend rejects protected names (${protectedInline()}) and filesystem-invalid names — surface ` +
308
+ `backend rejects protected names (${protectedInline(kb)}) and filesystem-invalid names — surface ` +
307
309
  'those errors verbatim. Convention: `<email-localpart>/<kebab-slug>`. Does NOT switch the ' +
308
310
  'agent onto the new draft.',
309
311
  // `branch` here is the fork BASE — its own meaning — so skip the generic
@@ -356,7 +358,7 @@ export function registerWorkflowTools(
356
358
  type: 'object',
357
359
  properties: {
358
360
  sourceBranch: { type: 'string', minLength: 1, description: 'The draft branch carrying the changes.' },
359
- targetBranch: { type: 'string', minLength: 1, description: `The branch to apply to (e.g. '${DEFAULT_BRANCH}').` },
361
+ targetBranch: { type: 'string', minLength: 1, description: `The branch to apply to (e.g. '${kb.defaultBranch}').` },
360
362
  title: { type: 'string', minLength: 1, maxLength: 256, description: 'Short imperative title (≤256 chars).' },
361
363
  description: { type: 'string', description: 'Optional markdown body shown verbatim to reviewers.' },
362
364
  },
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -140,7 +141,7 @@ async function makeSvc(
140
141
  const svc = new GitService(
141
142
  stubWorkspaceService(workspaceId, workspaceDir),
142
143
  new WorkflowHooks(),
143
- 'knowledge-base',
144
+ testKbContext(),
144
145
  undefined,
145
146
  ac ?? null,
146
147
  );
@@ -262,7 +263,7 @@ describe('GitService — push gate uses origin/<branch> (not HEAD or working tre
262
263
  const svc = new GitService(
263
264
  stubWorkspaceService(workspaceId, workspaceDir),
264
265
  new WorkflowHooks(),
265
- 'knowledge-base',
266
+ testKbContext(),
266
267
  undefined,
267
268
  ac,
268
269
  );
@@ -306,7 +307,7 @@ describe('GitService — push gate uses origin/<branch> (not HEAD or working tre
306
307
  const svc = new GitService(
307
308
  stubWorkspaceService(workspaceId, workspaceDir),
308
309
  new WorkflowHooks(),
309
- 'knowledge-base',
310
+ testKbContext(),
310
311
  undefined,
311
312
  ac,
312
313
  );
@@ -337,7 +338,7 @@ describe('GitService — push gate uses origin/<branch> (not HEAD or working tre
337
338
  const svc = new GitService(
338
339
  stubWorkspaceService(workspaceId, workspaceDir),
339
340
  new WorkflowHooks(),
340
- 'knowledge-base',
341
+ testKbContext(),
341
342
  undefined,
342
343
  ac,
343
344
  );
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -127,7 +128,7 @@ describe('GitService.changedFilesForPr / resolvePrShas', () => {
127
128
  const git = new GitService(
128
129
  stubWorkspaceService(workspaceId, repo),
129
130
  new WorkflowHooks(),
130
- 'knowledge-base',
131
+ testKbContext(),
131
132
  );
132
133
 
133
134
  const files = await git.changedFilesForPr(
@@ -174,7 +175,7 @@ describe('GitService.changedFilesForPr / resolvePrShas', () => {
174
175
  const git = new GitService(
175
176
  stubWorkspaceService(workspaceId, repo),
176
177
  new WorkflowHooks(),
177
- 'knowledge-base',
178
+ testKbContext(),
178
179
  );
179
180
  // What the detail does first: resolve (and fetch) the two SHAs.
180
181
  const pinned = await git.resolvePrShas(workspaceId, 'current-company-state', 'alice/feature');
@@ -226,7 +227,7 @@ describe('GitService.changedFilesForPr / resolvePrShas', () => {
226
227
  const git = new GitService(
227
228
  stubWorkspaceService(workspaceId, repo),
228
229
  new WorkflowHooks(),
229
- 'knowledge-base',
230
+ testKbContext(),
230
231
  );
231
232
 
232
233
  const files = await git.changedFilesForPr(
@@ -263,7 +264,7 @@ describe('GitService.changedFilesForPr / resolvePrShas', () => {
263
264
  await runGit(repo, ['commit', '-m', 'folders']);
264
265
  await runGit(repo, ['push', '-u', 'origin', 'alice/new-folders']);
265
266
 
266
- const git = new GitService(stubWorkspaceService(workspaceId, repo), new WorkflowHooks(), 'knowledge-base');
267
+ const git = new GitService(stubWorkspaceService(workspaceId, repo), new WorkflowHooks(), testKbContext());
267
268
 
268
269
  const files = await git.changedFilesForPr(workspaceId, 'current-company-state', 'alice/new-folders');
269
270
  expect(files.map((f) => f.path)).toEqual(['Reports/q3.md']);
@@ -292,7 +293,7 @@ describe('GitService.changedFilesForPr / resolvePrShas', () => {
292
293
  await runGit(repo, ['commit', '-m', 'emptied']);
293
294
  await runGit(repo, ['push', '-u', 'origin', 'alice/emptied']);
294
295
 
295
- const git = new GitService(stubWorkspaceService(workspaceId, repo), new WorkflowHooks(), 'knowledge-base');
296
+ const git = new GitService(stubWorkspaceService(workspaceId, repo), new WorkflowHooks(), testKbContext());
296
297
 
297
298
  const files = await git.changedFilesForPr(workspaceId, 'current-company-state', 'alice/emptied');
298
299
  expect(files.map((f) => ({ path: f.path, status: f.status, previousPath: f.previousPath }))).toEqual([
@@ -305,7 +306,7 @@ describe('GitService.changedFilesForPr / resolvePrShas', () => {
305
306
 
306
307
  it('pathExistsAtRef answers for files and folders at a ref, and false for what is not there', async () => {
307
308
  const { repo } = await seedWorkspace(root, workspaceId);
308
- const git = new GitService(stubWorkspaceService(workspaceId, repo), new WorkflowHooks(), 'knowledge-base');
309
+ const git = new GitService(stubWorkspaceService(workspaceId, repo), new WorkflowHooks(), testKbContext());
309
310
  await fs.mkdir(path.join(repo, 'Docs'));
310
311
  await fs.writeFile(path.join(repo, 'Docs/.gitkeep'), '');
311
312
  await runGit(repo, ['add', '-A']);
@@ -336,7 +337,7 @@ describe('GitService.changedFilesForPr / resolvePrShas', () => {
336
337
  const git = new GitService(
337
338
  stubWorkspaceService(workspaceId, repo),
338
339
  new WorkflowHooks(),
339
- 'knowledge-base',
340
+ testKbContext(),
340
341
  );
341
342
 
342
343
  const mergeBase = await git.mergeBaseForPr(workspaceId, 'current-company-state', 'alice/feature');
@@ -417,7 +418,7 @@ describe('GitService.changedPathsForPr: who pays for the fetch', () => {
417
418
  const git = new GitService(
418
419
  stubWorkspaceService(workspaceId, repo),
419
420
  new WorkflowHooks(),
420
- 'knowledge-base',
421
+ testKbContext(),
421
422
  );
422
423
  expect(
423
424
  await git.changedPathsForPr(workspaceId, 'current-company-state', 'biz/proposal'),
@@ -430,7 +431,7 @@ describe('GitService.changedPathsForPr: who pays for the fetch', () => {
430
431
  const git = new GitService(
431
432
  stubWorkspaceService(workspaceId, repo),
432
433
  new WorkflowHooks(),
433
- 'knowledge-base',
434
+ testKbContext(),
434
435
  );
435
436
  // The clone now knows the branch — this stands in for the one fetch a
436
437
  // list does for the whole clone before asking about every request.
@@ -467,7 +468,7 @@ describe('GitService.changedPathsForPr: who pays for the fetch', () => {
467
468
  const git = new GitService(
468
469
  stubWorkspaceService(workspaceId, repo),
469
470
  new WorkflowHooks(),
470
- 'knowledge-base',
471
+ testKbContext(),
471
472
  );
472
473
  // Nothing has refreshed this clone since the branch was pushed.
473
474
  expect(
@@ -505,7 +506,7 @@ describe('GitService.changedPathsForPr: who pays for the fetch', () => {
505
506
  const git = new GitService(
506
507
  stubWorkspaceService(workspaceId, repo),
507
508
  new WorkflowHooks(),
508
- 'knowledge-base',
509
+ testKbContext(),
509
510
  new PrunedMidCall(),
510
511
  );
511
512
 
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -70,7 +71,7 @@ describe('GitService.commitChanges', () => {
70
71
 
71
72
  it('commits many dirty files + a delete as ONE commit attributed to the user', async () => {
72
73
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
73
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
74
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
74
75
 
75
76
  // The caller writes the batch to disk first (the git layer never writes content).
76
77
  await fs.mkdir(path.join(repo, 'Product/Knowledge'), { recursive: true });
@@ -97,7 +98,7 @@ describe('GitService.commitChanges', () => {
97
98
 
98
99
  it('returns null on a clean tree (nothing to commit)', async () => {
99
100
  const { workspaceDir } = await seedWorkspace(root, workspaceId);
100
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
101
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
101
102
 
102
103
  const change = await svc.commitChanges(workspaceId, USER, 'no-op');
103
104
  expect(change).toBeNull();
@@ -105,7 +106,7 @@ describe('GitService.commitChanges', () => {
105
106
 
106
107
  it('onlyPaths scopes the commit — an unrelated dirty file is NOT swept in', async () => {
107
108
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
108
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
109
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
109
110
 
110
111
  // The batch's own file, plus a CONCURRENT save's bytes whose commit is
111
112
  // still queued — the shared per-branch workspace makes this ordinary.
@@ -127,7 +128,7 @@ describe('GitService.commitChanges', () => {
127
128
 
128
129
  it('onlyPaths keeps a staged RENAME whole — old path deletion rides the scoped commit', async () => {
129
130
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
130
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
131
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
131
132
 
132
133
  // A staged rename shows as one `R` porcelain record (new-path + old-path).
133
134
  // The scope names only the NEW path; the old path must ride along or the
@@ -148,7 +149,7 @@ describe('GitService.commitChanges', () => {
148
149
 
149
150
  it('a REAL `git add` failure aborts the scoped commit — only the pathspec miss is tolerated', async () => {
150
151
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
151
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
152
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
152
153
 
153
154
  await fs.writeFile(path.join(repo, 'Old.md'), 'new bytes\n');
154
155
  // Hold git's index lock: `git add` now fails with a real error (index
@@ -172,7 +173,7 @@ describe('GitService.commitChanges', () => {
172
173
  // pathspecs were passed on the command line — the scoped path feeds them
173
174
  // via `--pathspec-from-file=-` on stdin instead.
174
175
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
175
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
176
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
176
177
 
177
178
  const dir = 'Product/Knowledge/A Rather Long Folder Name To Inflate The Pathspec Bytes';
178
179
  await fs.mkdir(path.join(repo, dir), { recursive: true });
@@ -202,7 +203,7 @@ describe('GitService.commitChanges', () => {
202
203
 
203
204
  it('a big batch containing a fully-staged deletion still commits (per-path fallback)', async () => {
204
205
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
205
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
206
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
206
207
 
207
208
  // Stage Old.md's deletion fully — the batched `git add` then has nothing
208
209
  // in the worktree to match for it and fails with the ONE expected miss,
@@ -226,7 +227,7 @@ describe('GitService.commitChanges', () => {
226
227
 
227
228
  it('onlyPaths with nothing of its own dirty is a no-op even when other files are dirty', async () => {
228
229
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
229
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), PROCESS_MAP_DIR);
230
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), makeValidator(), testKbContext({ kbDirName: PROCESS_MAP_DIR }));
230
231
 
231
232
  await fs.writeFile(path.join(repo, 'Old.md'), 'someone else mid-save\n');
232
233
  const change = await svc.commitChanges(workspaceId, USER, 'Sync directory groups', [
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -86,7 +87,7 @@ describe('GitService.commitFile with bytes beside the repository', () => {
86
87
 
87
88
  it('throws instead of returning null when the file exists at the workspace root and not in the clone', async () => {
88
89
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
89
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), KB);
90
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), testKbContext({ kbDirName: KB }));
90
91
  // The prefix-less write the agent made: beside the clone, not inside it.
91
92
  await fs.mkdir(path.join(workspaceDir, 'KnowledgeBase/Reviews'), { recursive: true });
92
93
  await fs.writeFile(path.join(workspaceDir, 'KnowledgeBase/Reviews/PR-12.html'), '<p>review</p>');
@@ -103,19 +104,19 @@ describe('GitService.commitFile with bytes beside the repository', () => {
103
104
 
104
105
  it('still returns null for a clean, committed path (the honest no-op)', async () => {
105
106
  const { workspaceDir } = await seedWorkspace(root, workspaceId);
106
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), KB);
107
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), testKbContext({ kbDirName: KB }));
107
108
  expect(await svc.commitFile(workspaceId, USER, `${KB}/Knowledge/A.md`)).toBeNull();
108
109
  });
109
110
 
110
111
  it('still returns null for a path that exists nowhere (a queued re-apply of a committed deletion)', async () => {
111
112
  const { workspaceDir } = await seedWorkspace(root, workspaceId);
112
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), KB);
113
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), testKbContext({ kbDirName: KB }));
113
114
  expect(await svc.commitFile(workspaceId, USER, `${KB}/Knowledge/Gone.md`)).toBeNull();
114
115
  });
115
116
 
116
117
  it('still returns null for a repo-relative path that is clean inside the clone (the form internal callers pass)', async () => {
117
118
  const { workspaceDir } = await seedWorkspace(root, workspaceId);
118
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), KB);
119
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), testKbContext({ kbDirName: KB }));
119
120
  expect(await svc.commitFile(workspaceId, USER, 'Knowledge/A.md')).toBeNull();
120
121
  });
121
122
 
@@ -124,7 +125,7 @@ describe('GitService.commitFile with bytes beside the repository', () => {
124
125
  // a repo-relative caller's no-op stays honest whatever else sits beside
125
126
  // the clone under the same name.
126
127
  const { workspaceDir } = await seedWorkspace(root, workspaceId);
127
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), KB);
128
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), testKbContext({ kbDirName: KB }));
128
129
  await fs.mkdir(path.join(workspaceDir, 'Knowledge'), { recursive: true });
129
130
  await fs.writeFile(path.join(workspaceDir, 'Knowledge/A.md'), 'a copy beside the clone\n');
130
131
  expect(await svc.commitFile(workspaceId, USER, 'Knowledge/A.md')).toBeNull();
@@ -137,7 +138,7 @@ describe('GitService.commitFile with bytes beside the repository', () => {
137
138
  // toggles read-only, so the stat below still succeeds): nothing to prove.
138
139
  if (process.getuid?.() === 0 || process.platform === 'win32') return;
139
140
  const { workspaceDir } = await seedWorkspace(root, workspaceId);
140
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), KB);
141
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), testKbContext({ kbDirName: KB }));
141
142
  const strayDir = path.join(workspaceDir, 'KnowledgeBase');
142
143
  await fs.mkdir(strayDir, { recursive: true });
143
144
  await fs.writeFile(path.join(strayDir, 'PR-12.html'), 'x');
@@ -152,7 +153,7 @@ describe('GitService.commitFile with bytes beside the repository', () => {
152
153
 
153
154
  it('still commits a prefixed path inside the clone', async () => {
154
155
  const { workspaceDir, repo } = await seedWorkspace(root, workspaceId);
155
- const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), KB);
156
+ const svc = new GitService(stubWorkspaceService(workspaceId, workspaceDir), new WorkflowHooks(), testKbContext({ kbDirName: KB }));
156
157
  await fs.writeFile(path.join(repo, 'Knowledge/B.md'), 'b\n');
157
158
  const committed = await svc.commitFile(workspaceId, USER, `${KB}/Knowledge/B.md`);
158
159
  expect(committed).not.toBeNull();
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -95,7 +96,7 @@ describe('GitService.commitFile — skipValidator', () => {
95
96
  const svc = new GitService(
96
97
  stubWorkspaceService(workspaceId, workspaceDir),
97
98
  hooks,
98
- 'knowledge-base',
99
+ testKbContext(),
99
100
  );
100
101
 
101
102
  await fs.writeFile(path.join(repo, 'Foo.md'), 'reverted content\n');
@@ -112,7 +113,7 @@ describe('GitService.commitFile — skipValidator', () => {
112
113
  const svc = new GitService(
113
114
  stubWorkspaceService(workspaceId, workspaceDir),
114
115
  hooks,
115
- 'knowledge-base',
116
+ testKbContext(),
116
117
  );
117
118
 
118
119
  await fs.writeFile(path.join(repo, 'Bar.md'), 'new content\n');
@@ -136,7 +137,7 @@ describe('GitService.commitFile — skipValidator', () => {
136
137
  const svc = new GitService(
137
138
  stubWorkspaceService(workspaceId, workspaceDir),
138
139
  hooks,
139
- 'knowledge-base',
140
+ testKbContext(),
140
141
  );
141
142
 
142
143
  // Shape mirrors the reported filename (bracketed status prefix carrying a
@@ -167,7 +168,7 @@ describe('GitService.commitFile — skipValidator', () => {
167
168
  const svc = new GitService(
168
169
  stubWorkspaceService(workspaceId, workspaceDir),
169
170
  hooks,
170
- 'knowledge-base',
171
+ testKbContext(),
171
172
  );
172
173
 
173
174
  // Synthetic segments matching the SHAPE of real deep-KB naming (numbered
@@ -206,7 +207,7 @@ describe('GitService.commitFile — skipValidator', () => {
206
207
  const svc = new GitService(
207
208
  stubWorkspaceService(workspaceId, workspaceDir),
208
209
  hooks,
209
- 'knowledge-base',
210
+ testKbContext(),
210
211
  );
211
212
 
212
213
  const relPath = '[Approved] config.md';
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -90,7 +91,7 @@ describe('GitService.createBranch', () => {
90
91
  const svc = new GitService(
91
92
  stubWorkspaceService(workspaceId, path.join(root, workspaceId)),
92
93
  new WorkflowHooks(),
93
- 'knowledge-base',
94
+ testKbContext(),
94
95
  );
95
96
 
96
97
  const info = await svc.createBranch(workspaceId, 'alice/new-draft');
@@ -133,7 +134,7 @@ describe('GitService.createBranch', () => {
133
134
  const svc = new GitService(
134
135
  stubWorkspaceService(workspaceId, path.join(root, workspaceId)),
135
136
  new WorkflowHooks(),
136
- 'knowledge-base',
137
+ testKbContext(),
137
138
  );
138
139
 
139
140
  await svc.createBranch(workspaceId, 'alice/new-draft');
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -159,7 +160,7 @@ describe('GitService.deleteBranch — authorship + remote delete', () => {
159
160
  return new GitService(
160
161
  stubWorkspaceService(workspaceId, path.join(root, workspaceId)),
161
162
  new WorkflowHooks(),
162
- 'knowledge-base',
163
+ testKbContext(),
163
164
  );
164
165
  }
165
166
 
@@ -263,7 +264,7 @@ describe('GitService.deleteBranch — authorship + remote delete', () => {
263
264
  return new GitService(
264
265
  stubWorkspaceService(workspaceId, path.join(root, workspaceId)),
265
266
  new WorkflowHooks(),
266
- 'knowledge-base',
267
+ testKbContext(),
267
268
  undefined,
268
269
  ac,
269
270
  );
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -108,7 +109,7 @@ describe('GitService.diffFileAtCommit', () => {
108
109
  const svc = new GitService(
109
110
  stubWorkspaceService(workspaceId, workspaceDir),
110
111
  new WorkflowHooks(),
111
- 'knowledge-base',
112
+ testKbContext(),
112
113
  );
113
114
 
114
115
  await commitFile(repo, 'Knowledge/Foo.md', 'line one\n', 'A');
@@ -125,7 +126,7 @@ describe('GitService.diffFileAtCommit', () => {
125
126
  const svc = new GitService(
126
127
  stubWorkspaceService(workspaceId, workspaceDir),
127
128
  new WorkflowHooks(),
128
- 'knowledge-base',
129
+ testKbContext(),
129
130
  );
130
131
 
131
132
  await commitFile(repo, 'Knowledge/Foo.md', 'root line\n', 'root');
@@ -141,7 +142,7 @@ describe('GitService.diffFileAtCommit', () => {
141
142
  const svc = new GitService(
142
143
  stubWorkspaceService(workspaceId, workspaceDir),
143
144
  new WorkflowHooks(),
144
- 'knowledge-base',
145
+ testKbContext(),
145
146
  );
146
147
 
147
148
  await commitFile(repo, 'Knowledge/file2.md', 'base\n', 'add file2');
@@ -157,7 +158,7 @@ describe('GitService.diffFileAtCommit', () => {
157
158
  const svc = new GitService(
158
159
  stubWorkspaceService(workspaceId, workspaceDir),
159
160
  new WorkflowHooks(),
160
- 'knowledge-base',
161
+ testKbContext(),
161
162
  );
162
163
 
163
164
  await expect(
@@ -170,7 +171,7 @@ describe('GitService.diffFileAtCommit', () => {
170
171
  const svc = new GitService(
171
172
  stubWorkspaceService(workspaceId, workspaceDir),
172
173
  new WorkflowHooks(),
173
- 'knowledge-base',
174
+ testKbContext(),
174
175
  );
175
176
 
176
177
  await expect(
@@ -187,7 +188,7 @@ describe('GitService.diffFileAtCommit', () => {
187
188
  const svc = new GitService(
188
189
  stubWorkspaceService(workspaceId, workspaceDir),
189
190
  new WorkflowHooks(),
190
- 'knowledge-base',
191
+ testKbContext(),
191
192
  );
192
193
  await runGit(repo, ['commit', '--allow-empty', '-m', 'init']);
193
194
  const user = { id: 'u', name: 'Test', email: 't@x.com' };
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { testKbContext } from '../../../../__tests__/kb-context.js';
2
3
  import { execFile } from 'node:child_process';
3
4
  import { promisify } from 'node:util';
4
5
  import fs from 'node:fs/promises';
@@ -99,7 +100,7 @@ describe('GitService.diffFileBetweenBranches', () => {
99
100
  const svc = new GitService(
100
101
  stubWorkspaceService(workspaceId, workspaceDir),
101
102
  new WorkflowHooks(),
102
- 'knowledge-base',
103
+ testKbContext(),
103
104
  );
104
105
 
105
106
  await commitFile(repo, 'Knowledge/Foo.md', 'line one\n', 'base');
@@ -121,7 +122,7 @@ describe('GitService.diffFileBetweenBranches', () => {
121
122
  const svc = new GitService(
122
123
  stubWorkspaceService(workspaceId, workspaceDir),
123
124
  new WorkflowHooks(),
124
- 'knowledge-base',
125
+ testKbContext(),
125
126
  );
126
127
 
127
128
  await commitFile(repo, 'Knowledge/Same.md', 'unchanged\n', 'base');
@@ -143,7 +144,7 @@ describe('GitService.diffFileBetweenBranches', () => {
143
144
  const svc = new GitService(
144
145
  stubWorkspaceService(workspaceId, workspaceDir),
145
146
  new WorkflowHooks(),
146
- 'knowledge-base',
147
+ testKbContext(),
147
148
  );
148
149
 
149
150
  await commitFile(repo, 'Knowledge/Old.md', 'going away\n', 'base');
@@ -165,7 +166,7 @@ describe('GitService.diffFileBetweenBranches', () => {
165
166
  const svc = new GitService(
166
167
  stubWorkspaceService(workspaceId, workspaceDir),
167
168
  new WorkflowHooks(),
168
- 'knowledge-base',
169
+ testKbContext(),
169
170
  );
170
171
 
171
172
  await commitFile(repo, 'Knowledge/Seed.md', 'seed\n', 'base');
@@ -207,7 +208,7 @@ describe('GitService.diffFileBetweenBranches', () => {
207
208
  const svc = new GitService(
208
209
  stubWorkspaceService(workspaceId, workspaceDir),
209
210
  new WorkflowHooks(),
210
- 'knowledge-base',
211
+ testKbContext(),
211
212
  );
212
213
 
213
214
  const diff = await svc.diffFileBetweenBranches(
@@ -232,7 +233,7 @@ describe('GitService.diffFileBetweenBranches', () => {
232
233
  const svc = new GitService(
233
234
  stubWorkspaceService(workspaceId, workspaceDir),
234
235
  new WorkflowHooks(),
235
- 'knowledge-base',
236
+ testKbContext(),
236
237
  );
237
238
 
238
239
  await commitFile(repo, 'Knowledge/Foo.md', 'baseline\n', 'base');
@@ -257,7 +258,7 @@ describe('GitService.diffFileBetweenBranches', () => {
257
258
  const svc = new GitService(
258
259
  stubWorkspaceService(workspaceId, workspaceDir),
259
260
  new WorkflowHooks(),
260
- 'knowledge-base',
261
+ testKbContext(),
261
262
  );
262
263
 
263
264
  await commitFile(repo, 'Knowledge/Foo.md', 'baseline\n', 'base');
@@ -282,7 +283,7 @@ describe('GitService.diffFileBetweenBranches', () => {
282
283
  const svc = new GitService(
283
284
  stubWorkspaceService(workspaceId, workspaceDir),
284
285
  new WorkflowHooks(),
285
- 'knowledge-base',
286
+ testKbContext(),
286
287
  );
287
288
 
288
289
  await commitFile(repo, 'Knowledge/Seed.md', 'seed\n', 'base');
@@ -305,7 +306,7 @@ describe('GitService.diffFileBetweenBranches', () => {
305
306
  const svc = new GitService(
306
307
  stubWorkspaceService(workspaceId, workspaceDir),
307
308
  new WorkflowHooks(),
308
- 'knowledge-base',
309
+ testKbContext(),
309
310
  );
310
311
 
311
312
  await commitFile(repo, 'Knowledge/Seed.md', 'seed\n', 'base');
@@ -327,7 +328,7 @@ describe('GitService.diffFileBetweenBranches', () => {
327
328
  const svc = new GitService(
328
329
  stubWorkspaceService(workspaceId, workspaceDir),
329
330
  new WorkflowHooks(),
330
- 'knowledge-base',
331
+ testKbContext(),
331
332
  );
332
333
 
333
334
  await commitFile(repo, 'Knowledge/Foo.md', 'baseline\n', 'base');
@@ -352,7 +353,7 @@ describe('GitService.diffFileBetweenBranches', () => {
352
353
  const svc = new GitService(
353
354
  stubWorkspaceService(workspaceId, workspaceDir),
354
355
  new WorkflowHooks(),
355
- 'knowledge-base',
356
+ testKbContext(),
356
357
  );
357
358
 
358
359
  await expect(
@@ -371,7 +372,7 @@ describe('GitService.diffFileBetweenBranches', () => {
371
372
  const svc = new GitService(
372
373
  stubWorkspaceService(workspaceId, workspaceDir),
373
374
  new WorkflowHooks(),
374
- 'knowledge-base',
375
+ testKbContext(),
375
376
  );
376
377
 
377
378
  await expect(
@@ -389,7 +390,7 @@ describe('GitService.diffFileBetweenBranches', () => {
389
390
  const svc = new GitService(
390
391
  stubWorkspaceService(workspaceId, workspaceDir),
391
392
  new WorkflowHooks(),
392
- 'knowledge-base',
393
+ testKbContext(),
393
394
  );
394
395
 
395
396
  await expect(
@@ -407,7 +408,7 @@ describe('GitService.diffFileBetweenBranches', () => {
407
408
  const svc = new GitService(
408
409
  stubWorkspaceService(workspaceId, workspaceDir),
409
410
  new WorkflowHooks(),
410
- 'knowledge-base',
411
+ testKbContext(),
411
412
  );
412
413
 
413
414
  await expect(
@@ -429,7 +430,7 @@ describe('GitService.diffFileBetweenBranches', () => {
429
430
  const svc = new GitService(
430
431
  stubWorkspaceService(workspaceId, workspaceDir),
431
432
  new WorkflowHooks(),
432
- 'knowledge-base',
433
+ testKbContext(),
433
434
  );
434
435
  await runGit(repo, ['commit', '--allow-empty', '-m', 'init']);
435
436
  const user = { id: 'u', name: 'Test', email: 't@x.com' };