@bevel-software/platform-core-backend 0.14.0 → 0.19.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 (1307) hide show
  1. package/THIRD-PARTY-NOTICES.md +8 -8
  2. package/dist/core/catalog-cache-invalidation.d.ts +45 -0
  3. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -0
  4. package/dist/core/catalog-cache-invalidation.js +76 -0
  5. package/dist/core/catalog-cache-invalidation.js.map +1 -0
  6. package/dist/core/catalog-revision.d.ts +39 -0
  7. package/dist/core/catalog-revision.d.ts.map +1 -0
  8. package/dist/core/catalog-revision.js +94 -0
  9. package/dist/core/catalog-revision.js.map +1 -0
  10. package/dist/core/create-core-server.d.ts +7 -0
  11. package/dist/core/create-core-server.d.ts.map +1 -1
  12. package/dist/core/create-core-server.js +279 -64
  13. package/dist/core/create-core-server.js.map +1 -1
  14. package/dist/core/create-core-services.d.ts +66 -2
  15. package/dist/core/create-core-services.d.ts.map +1 -1
  16. package/dist/core/create-core-services.js +290 -111
  17. package/dist/core/create-core-services.js.map +1 -1
  18. package/dist/core/lifecycle.d.ts +138 -0
  19. package/dist/core/lifecycle.d.ts.map +1 -0
  20. package/dist/core/lifecycle.js +218 -0
  21. package/dist/core/lifecycle.js.map +1 -0
  22. package/dist/core/public-config.d.ts +82 -0
  23. package/dist/core/public-config.d.ts.map +1 -0
  24. package/dist/core/public-config.js +78 -0
  25. package/dist/core/public-config.js.map +1 -0
  26. package/dist/core/readiness.d.ts +86 -0
  27. package/dist/core/readiness.d.ts.map +1 -0
  28. package/dist/core/readiness.js +56 -0
  29. package/dist/core/readiness.js.map +1 -0
  30. package/dist/core-config.d.ts +30 -0
  31. package/dist/core-config.d.ts.map +1 -1
  32. package/dist/core-config.js +64 -2
  33. package/dist/core-config.js.map +1 -1
  34. package/dist/index.d.ts +4 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +6 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/modules/access/access-control.interface.d.ts +231 -15
  39. package/dist/modules/access/access-control.interface.d.ts.map +1 -1
  40. package/dist/modules/access/access-control.service.d.ts +83 -12
  41. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  42. package/dist/modules/access/access-control.service.js +815 -212
  43. package/dist/modules/access/access-control.service.js.map +1 -1
  44. package/dist/modules/access/access-mutation.service.d.ts +71 -5
  45. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  46. package/dist/modules/access/access-mutation.service.js +161 -13
  47. package/dist/modules/access/access-mutation.service.js.map +1 -1
  48. package/dist/modules/access/access-view.d.ts +147 -0
  49. package/dist/modules/access/access-view.d.ts.map +1 -0
  50. package/dist/modules/access/access-view.js +211 -0
  51. package/dist/modules/access/access-view.js.map +1 -0
  52. package/dist/modules/access/access.routes.d.ts.map +1 -1
  53. package/dist/modules/access/access.routes.js +312 -84
  54. package/dist/modules/access/access.routes.js.map +1 -1
  55. package/dist/modules/access/admin-locked-commit.d.ts +2 -3
  56. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  57. package/dist/modules/access/admin-locked-commit.js +9 -8
  58. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  59. package/dist/modules/access/admin-route-helpers.d.ts.map +1 -1
  60. package/dist/modules/access/admin-route-helpers.js +4 -4
  61. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  62. package/dist/modules/access/change-read-gate.d.ts +53 -0
  63. package/dist/modules/access/change-read-gate.d.ts.map +1 -0
  64. package/dist/modules/access/change-read-gate.js +134 -0
  65. package/dist/modules/access/change-read-gate.js.map +1 -0
  66. package/dist/modules/access/creator-access.d.ts +33 -39
  67. package/dist/modules/access/creator-access.d.ts.map +1 -1
  68. package/dist/modules/access/creator-access.js +92 -119
  69. package/dist/modules/access/creator-access.js.map +1 -1
  70. package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
  71. package/dist/modules/access/directory-sync-bot.js +3 -1
  72. package/dist/modules/access/directory-sync-bot.js.map +1 -1
  73. package/dist/modules/access/groups-admin.service.d.ts +3 -3
  74. package/dist/modules/access/groups-admin.service.js +2 -2
  75. package/dist/modules/access/reference-scan.d.ts +1 -1
  76. package/dist/modules/access/reference-scan.d.ts.map +1 -1
  77. package/dist/modules/access/reference-scan.js +5 -4
  78. package/dist/modules/access/reference-scan.js.map +1 -1
  79. package/dist/modules/access/roles-admin.service.d.ts +72 -13
  80. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  81. package/dist/modules/access/roles-admin.service.js +71 -13
  82. package/dist/modules/access/roles-admin.service.js.map +1 -1
  83. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  84. package/dist/modules/access/synced-groups-committer.js +8 -6
  85. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  86. package/dist/modules/access/synced-groups-writer.d.ts.map +1 -1
  87. package/dist/modules/access/synced-groups-writer.js +3 -8
  88. package/dist/modules/access/synced-groups-writer.js.map +1 -1
  89. package/dist/modules/access/user-access-removal.service.d.ts +209 -0
  90. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -0
  91. package/dist/modules/access/user-access-removal.service.js +662 -0
  92. package/dist/modules/access/user-access-removal.service.js.map +1 -0
  93. package/dist/modules/access-model/access-errors.d.ts +32 -1
  94. package/dist/modules/access-model/access-errors.d.ts.map +1 -1
  95. package/dist/modules/access-model/access-errors.js +38 -11
  96. package/dist/modules/access-model/access-errors.js.map +1 -1
  97. package/dist/modules/access-model/access-grammar.d.ts +100 -25
  98. package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
  99. package/dist/modules/access-model/access-grammar.js +162 -48
  100. package/dist/modules/access-model/access-grammar.js.map +1 -1
  101. package/dist/modules/access-model/access-splice.d.ts.map +1 -1
  102. package/dist/modules/access-model/access-splice.js +18 -18
  103. package/dist/modules/access-model/access-splice.js.map +1 -1
  104. package/dist/modules/access-model/access-template.d.ts +22 -0
  105. package/dist/modules/access-model/access-template.d.ts.map +1 -0
  106. package/dist/modules/access-model/access-template.js +42 -0
  107. package/dist/modules/access-model/access-template.js.map +1 -0
  108. package/dist/modules/access-model/change-gate.d.ts +65 -0
  109. package/dist/modules/access-model/change-gate.d.ts.map +1 -0
  110. package/dist/modules/access-model/change-gate.js +25 -0
  111. package/dist/modules/access-model/change-gate.js.map +1 -0
  112. package/dist/modules/access-model/creator.d.ts +13 -16
  113. package/dist/modules/access-model/creator.d.ts.map +1 -1
  114. package/dist/modules/access-model/creator.js.map +1 -1
  115. package/dist/modules/access-model/frontmatter-lines.d.ts +27 -0
  116. package/dist/modules/access-model/frontmatter-lines.d.ts.map +1 -0
  117. package/dist/modules/access-model/frontmatter-lines.js +74 -0
  118. package/dist/modules/access-model/frontmatter-lines.js.map +1 -0
  119. package/dist/modules/access-model/group-files.d.ts.map +1 -1
  120. package/dist/modules/access-model/group-files.js +4 -1
  121. package/dist/modules/access-model/group-files.js.map +1 -1
  122. package/dist/modules/access-model/plugin-principals.d.ts +51 -0
  123. package/dist/modules/access-model/plugin-principals.d.ts.map +1 -0
  124. package/dist/modules/access-model/plugin-principals.js +119 -0
  125. package/dist/modules/access-model/plugin-principals.js.map +1 -0
  126. package/dist/modules/access-model/roles-yaml-guard.d.ts +73 -2
  127. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  128. package/dist/modules/access-model/roles-yaml-guard.js +153 -3
  129. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
  130. package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
  131. package/dist/modules/admin/admin-access.service.js +5 -2
  132. package/dist/modules/admin/admin-access.service.js.map +1 -1
  133. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +21 -0
  134. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -0
  135. package/dist/modules/agent-instructions/agent-instructions.routes.js +38 -0
  136. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -0
  137. package/dist/modules/agent-instructions/compose.d.ts +71 -0
  138. package/dist/modules/agent-instructions/compose.d.ts.map +1 -0
  139. package/dist/modules/agent-instructions/compose.js +234 -0
  140. package/dist/modules/agent-instructions/compose.js.map +1 -0
  141. package/dist/modules/agent-instructions/index.d.ts +4 -0
  142. package/dist/modules/agent-instructions/index.d.ts.map +1 -0
  143. package/dist/modules/agent-instructions/index.js +4 -0
  144. package/dist/modules/agent-instructions/index.js.map +1 -0
  145. package/dist/modules/agent-instructions/read-preamble.d.ts +37 -0
  146. package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -0
  147. package/dist/modules/agent-instructions/read-preamble.js +81 -0
  148. package/dist/modules/agent-instructions/read-preamble.js.map +1 -0
  149. package/dist/modules/auth/account-erasure.service.d.ts +30 -4
  150. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  151. package/dist/modules/auth/account-erasure.service.js +96 -10
  152. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  153. package/dist/modules/auth/account.routes.d.ts +6 -3
  154. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  155. package/dist/modules/auth/account.routes.js +109 -10
  156. package/dist/modules/auth/account.routes.js.map +1 -1
  157. package/dist/modules/auth/auth.routes.d.ts +10 -3
  158. package/dist/modules/auth/auth.routes.d.ts.map +1 -1
  159. package/dist/modules/auth/auth.routes.js +9 -4
  160. package/dist/modules/auth/auth.routes.js.map +1 -1
  161. package/dist/modules/auth/auth.service.d.ts +89 -5
  162. package/dist/modules/auth/auth.service.d.ts.map +1 -1
  163. package/dist/modules/auth/auth.service.js +160 -25
  164. package/dist/modules/auth/auth.service.js.map +1 -1
  165. package/dist/modules/auth/oidc-auth-provider.d.ts +46 -3
  166. package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
  167. package/dist/modules/auth/oidc-auth-provider.js +99 -21
  168. package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
  169. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
  170. package/dist/modules/code-mode/code-mode.tool.js +14 -2
  171. package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
  172. package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
  173. package/dist/modules/connection-probe/connection-probe.service.js +56 -7
  174. package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
  175. package/dist/modules/database/advisory-lock.d.ts +103 -0
  176. package/dist/modules/database/advisory-lock.d.ts.map +1 -0
  177. package/dist/modules/database/advisory-lock.js +320 -0
  178. package/dist/modules/database/advisory-lock.js.map +1 -0
  179. package/dist/modules/database/connection.d.ts.map +1 -1
  180. package/dist/modules/database/connection.js +9 -1
  181. package/dist/modules/database/connection.js.map +1 -1
  182. package/dist/modules/database/core-schema.d.ts +672 -0
  183. package/dist/modules/database/core-schema.d.ts.map +1 -1
  184. package/dist/modules/database/core-schema.js +171 -0
  185. package/dist/modules/database/core-schema.js.map +1 -1
  186. package/dist/modules/database/migrate.d.ts.map +1 -1
  187. package/dist/modules/database/migrate.js +26 -6
  188. package/dist/modules/database/migrate.js.map +1 -1
  189. package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
  190. package/dist/modules/declared-variables/declared-variables.routes.js +4 -2
  191. package/dist/modules/declared-variables/declared-variables.routes.js.map +1 -1
  192. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  193. package/dist/modules/diff/diff.routes.js +2 -4
  194. package/dist/modules/diff/diff.routes.js.map +1 -1
  195. package/dist/modules/diff/diff.service.d.ts +4 -1
  196. package/dist/modules/diff/diff.service.d.ts.map +1 -1
  197. package/dist/modules/diff/diff.service.js +79 -81
  198. package/dist/modules/diff/diff.service.js.map +1 -1
  199. package/dist/modules/kb-fs/bevel-ignore.d.ts +35 -0
  200. package/dist/modules/kb-fs/bevel-ignore.d.ts.map +1 -0
  201. package/dist/modules/kb-fs/bevel-ignore.js +71 -0
  202. package/dist/modules/kb-fs/bevel-ignore.js.map +1 -0
  203. package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
  204. package/dist/modules/kb-fs/file-change-notifier.js +3 -1
  205. package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
  206. package/dist/modules/kb-fs/git-guarded-filesystem.d.ts +37 -0
  207. package/dist/modules/kb-fs/git-guarded-filesystem.d.ts.map +1 -0
  208. package/dist/modules/kb-fs/git-guarded-filesystem.js +104 -0
  209. package/dist/modules/kb-fs/git-guarded-filesystem.js.map +1 -0
  210. package/dist/modules/kb-fs/locking-filesystem.d.ts +113 -18
  211. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  212. package/dist/modules/kb-fs/locking-filesystem.js +353 -76
  213. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  214. package/dist/modules/kb-fs/node-fs.d.ts +23 -0
  215. package/dist/modules/kb-fs/node-fs.d.ts.map +1 -0
  216. package/dist/modules/kb-fs/node-fs.js +158 -0
  217. package/dist/modules/kb-fs/node-fs.js.map +1 -0
  218. package/dist/modules/kb-fs/read-only-filesystem.d.ts +10 -9
  219. package/dist/modules/kb-fs/read-only-filesystem.d.ts.map +1 -1
  220. package/dist/modules/kb-fs/read-only-filesystem.js +18 -9
  221. package/dist/modules/kb-fs/read-only-filesystem.js.map +1 -1
  222. package/dist/modules/kb-fs/repo-path.d.ts +100 -3
  223. package/dist/modules/kb-fs/repo-path.d.ts.map +1 -1
  224. package/dist/modules/kb-fs/repo-path.js +195 -3
  225. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  226. package/dist/modules/kb-sync/index.d.ts +6 -0
  227. package/dist/modules/kb-sync/index.d.ts.map +1 -0
  228. package/dist/modules/kb-sync/index.js +5 -0
  229. package/dist/modules/kb-sync/index.js.map +1 -0
  230. package/dist/modules/kb-sync/kb-sync.interface.d.ts +77 -0
  231. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -0
  232. package/dist/modules/kb-sync/kb-sync.interface.js +2 -0
  233. package/dist/modules/kb-sync/kb-sync.interface.js.map +1 -0
  234. package/dist/modules/kb-sync/kb-sync.routes.d.ts +70 -0
  235. package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -0
  236. package/dist/modules/kb-sync/kb-sync.routes.js +137 -0
  237. package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -0
  238. package/dist/modules/kb-sync/kb-sync.service.d.ts +45 -0
  239. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -0
  240. package/dist/modules/kb-sync/kb-sync.service.js +185 -0
  241. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -0
  242. package/dist/modules/kb-sync/sync-auth.d.ts +59 -0
  243. package/dist/modules/kb-sync/sync-auth.d.ts.map +1 -0
  244. package/dist/modules/kb-sync/sync-auth.js +62 -0
  245. package/dist/modules/kb-sync/sync-auth.js.map +1 -0
  246. package/dist/modules/kb-sync/sync-payload.d.ts +32 -0
  247. package/dist/modules/kb-sync/sync-payload.d.ts.map +1 -0
  248. package/dist/modules/kb-sync/sync-payload.js +105 -0
  249. package/dist/modules/kb-sync/sync-payload.js.map +1 -0
  250. package/dist/modules/marketplace/git-http.routes.d.ts +42 -0
  251. package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -0
  252. package/dist/modules/marketplace/git-http.routes.js +192 -0
  253. package/dist/modules/marketplace/git-http.routes.js.map +1 -0
  254. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +33 -0
  255. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -0
  256. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +88 -0
  257. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -0
  258. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +59 -0
  259. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -0
  260. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +96 -0
  261. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -0
  262. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +126 -0
  263. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -0
  264. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +192 -0
  265. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -0
  266. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +47 -0
  267. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -0
  268. package/dist/modules/marketplace/github-facade/github-facade.routes.js +252 -0
  269. package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -0
  270. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +121 -0
  271. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -0
  272. package/dist/modules/marketplace/github-facade/github-facade.service.js +213 -0
  273. package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -0
  274. package/dist/modules/marketplace/github-facade/index.d.ts +6 -0
  275. package/dist/modules/marketplace/github-facade/index.d.ts.map +1 -0
  276. package/dist/modules/marketplace/github-facade/index.js +6 -0
  277. package/dist/modules/marketplace/github-facade/index.js.map +1 -0
  278. package/dist/modules/marketplace/index.d.ts +4 -0
  279. package/dist/modules/marketplace/index.d.ts.map +1 -0
  280. package/dist/modules/marketplace/index.js +4 -0
  281. package/dist/modules/marketplace/index.js.map +1 -0
  282. package/dist/modules/marketplace/marketplace-repo.service.d.ts +135 -0
  283. package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -0
  284. package/dist/modules/marketplace/marketplace-repo.service.js +318 -0
  285. package/dist/modules/marketplace/marketplace-repo.service.js.map +1 -0
  286. package/dist/modules/mcp/downstream-pool.d.ts +107 -0
  287. package/dist/modules/mcp/downstream-pool.d.ts.map +1 -0
  288. package/dist/modules/mcp/downstream-pool.js +221 -0
  289. package/dist/modules/mcp/downstream-pool.js.map +1 -0
  290. package/dist/modules/mcp/downstream-token-refresh.d.ts +77 -0
  291. package/dist/modules/mcp/downstream-token-refresh.d.ts.map +1 -0
  292. package/dist/modules/mcp/downstream-token-refresh.js +166 -0
  293. package/dist/modules/mcp/downstream-token-refresh.js.map +1 -0
  294. package/dist/modules/mcp/first-call-probe.cli-args.d.ts +78 -0
  295. package/dist/modules/mcp/first-call-probe.cli-args.d.ts.map +1 -0
  296. package/dist/modules/mcp/first-call-probe.cli-args.js +151 -0
  297. package/dist/modules/mcp/first-call-probe.cli-args.js.map +1 -0
  298. package/dist/modules/mcp/first-call-probe.cli.d.ts +2 -0
  299. package/dist/modules/mcp/first-call-probe.cli.d.ts.map +1 -0
  300. package/dist/modules/mcp/first-call-probe.cli.js +62 -0
  301. package/dist/modules/mcp/first-call-probe.cli.js.map +1 -0
  302. package/dist/modules/mcp/first-call-probe.d.ts +165 -0
  303. package/dist/modules/mcp/first-call-probe.d.ts.map +1 -0
  304. package/dist/modules/mcp/first-call-probe.js +298 -0
  305. package/dist/modules/mcp/first-call-probe.js.map +1 -0
  306. package/dist/modules/mcp/manual-failure-memo.d.ts +42 -17
  307. package/dist/modules/mcp/manual-failure-memo.d.ts.map +1 -1
  308. package/dist/modules/mcp/manual-failure-memo.js +79 -23
  309. package/dist/modules/mcp/manual-failure-memo.js.map +1 -1
  310. package/dist/modules/mcp/mcp-auth.middleware.d.ts +9 -5
  311. package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
  312. package/dist/modules/mcp/mcp-auth.middleware.js +24 -16
  313. package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
  314. package/dist/modules/mcp/mcp.routes.d.ts +4 -4
  315. package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
  316. package/dist/modules/mcp/mcp.routes.js +83 -179
  317. package/dist/modules/mcp/mcp.routes.js.map +1 -1
  318. package/dist/modules/mcp/mcp.service.d.ts +218 -61
  319. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  320. package/dist/modules/mcp/mcp.service.js +713 -159
  321. package/dist/modules/mcp/mcp.service.js.map +1 -1
  322. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
  323. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +8 -2
  324. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
  325. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +14 -8
  326. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
  327. package/dist/modules/mcp/oauth/oauth-consent.routes.js +16 -2
  328. package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
  329. package/dist/modules/mcp/oauth/oauth-state.d.ts +13 -2
  330. package/dist/modules/mcp/oauth/oauth-state.d.ts.map +1 -1
  331. package/dist/modules/mcp/oauth/oauth-state.js +3 -1
  332. package/dist/modules/mcp/oauth/oauth-state.js.map +1 -1
  333. package/dist/modules/mcp/surface-log-throttle.d.ts +59 -0
  334. package/dist/modules/mcp/surface-log-throttle.d.ts.map +1 -0
  335. package/dist/modules/mcp/surface-log-throttle.js +94 -0
  336. package/dist/modules/mcp/surface-log-throttle.js.map +1 -0
  337. package/dist/modules/plugins/compile/compile-marketplace.d.ts +104 -0
  338. package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -0
  339. package/dist/modules/plugins/compile/compile-marketplace.js +323 -0
  340. package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -0
  341. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +73 -0
  342. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -0
  343. package/dist/modules/plugins/compile/marketplace-compiler.service.js +135 -0
  344. package/dist/modules/plugins/compile/marketplace-compiler.service.js.map +1 -0
  345. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts +37 -0
  346. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts.map +1 -0
  347. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js +158 -0
  348. package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js.map +1 -0
  349. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +65 -0
  350. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -0
  351. package/dist/modules/plugins/discovery/bundle-dialect/registry.js +204 -0
  352. package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -0
  353. package/dist/modules/plugins/discovery/kb-plugin-source.d.ts +39 -0
  354. package/dist/modules/plugins/discovery/kb-plugin-source.d.ts.map +1 -0
  355. package/dist/modules/plugins/discovery/kb-plugin-source.js +110 -0
  356. package/dist/modules/plugins/discovery/kb-plugin-source.js.map +1 -0
  357. package/dist/modules/plugins/discovery/native.source.d.ts +16 -0
  358. package/dist/modules/plugins/discovery/native.source.d.ts.map +1 -0
  359. package/dist/modules/plugins/discovery/native.source.js +120 -0
  360. package/dist/modules/plugins/discovery/native.source.js.map +1 -0
  361. package/dist/modules/plugins/discovery/plugin-source.d.ts +110 -0
  362. package/dist/modules/plugins/discovery/plugin-source.d.ts.map +1 -0
  363. package/dist/modules/plugins/discovery/plugin-source.js +2 -0
  364. package/dist/modules/plugins/discovery/plugin-source.js.map +1 -0
  365. package/dist/modules/plugins/index.d.ts +15 -3
  366. package/dist/modules/plugins/index.d.ts.map +1 -1
  367. package/dist/modules/plugins/index.js +13 -2
  368. package/dist/modules/plugins/index.js.map +1 -1
  369. package/dist/modules/plugins/join-request-jobs.service.d.ts +250 -0
  370. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -0
  371. package/dist/modules/plugins/join-request-jobs.service.js +602 -0
  372. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -0
  373. package/dist/modules/plugins/join-request-records.store.d.ts +161 -0
  374. package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -0
  375. package/dist/modules/plugins/join-request-records.store.js +179 -0
  376. package/dist/modules/plugins/join-request-records.store.js.map +1 -0
  377. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  378. package/dist/modules/plugins/join-requests.service.js +4 -2
  379. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  380. package/dist/modules/plugins/plugin-links.d.ts +69 -0
  381. package/dist/modules/plugins/plugin-links.d.ts.map +1 -0
  382. package/dist/modules/plugins/plugin-links.js +163 -0
  383. package/dist/modules/plugins/plugin-links.js.map +1 -0
  384. package/dist/modules/plugins/plugin-links.service.d.ts +111 -0
  385. package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -0
  386. package/dist/modules/plugins/plugin-links.service.js +295 -0
  387. package/dist/modules/plugins/plugin-links.service.js.map +1 -0
  388. package/dist/modules/plugins/plugin-provision.service.d.ts +129 -21
  389. package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
  390. package/dist/modules/plugins/plugin-provision.service.js +320 -75
  391. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  392. package/dist/modules/plugins/plugin-rename.service.d.ts +71 -0
  393. package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -0
  394. package/dist/modules/plugins/plugin-rename.service.js +254 -0
  395. package/dist/modules/plugins/plugin-rename.service.js.map +1 -0
  396. package/dist/modules/plugins/plugins.contract.d.ts +78 -4
  397. package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
  398. package/dist/modules/plugins/plugins.routes.d.ts +44 -5
  399. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  400. package/dist/modules/plugins/plugins.routes.js +297 -115
  401. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  402. package/dist/modules/plugins/plugins.service.d.ts +82 -3
  403. package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
  404. package/dist/modules/plugins/plugins.service.js +178 -48
  405. package/dist/modules/plugins/plugins.service.js.map +1 -1
  406. package/dist/modules/plugins/plugins.tools.d.ts +25 -0
  407. package/dist/modules/plugins/plugins.tools.d.ts.map +1 -0
  408. package/dist/modules/plugins/plugins.tools.js +82 -0
  409. package/dist/modules/plugins/plugins.tools.js.map +1 -0
  410. package/dist/modules/plugins/teams.routes.d.ts +42 -0
  411. package/dist/modules/plugins/teams.routes.d.ts.map +1 -0
  412. package/dist/modules/plugins/teams.routes.js +79 -0
  413. package/dist/modules/plugins/teams.routes.js.map +1 -0
  414. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +40 -1
  415. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  416. package/dist/modules/secrets-vault/db-secrets-vault.service.js +202 -37
  417. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  418. package/dist/modules/secrets-vault/index.d.ts +1 -1
  419. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  420. package/dist/modules/secrets-vault/index.js.map +1 -1
  421. package/dist/modules/secrets-vault/mcp-oauth-discovery.service.d.ts.map +1 -1
  422. package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js +5 -3
  423. package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js.map +1 -1
  424. package/dist/modules/secrets-vault/secrets-variable-loader.d.ts.map +1 -1
  425. package/dist/modules/secrets-vault/secrets-variable-loader.js +3 -1
  426. package/dist/modules/secrets-vault/secrets-variable-loader.js.map +1 -1
  427. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +78 -0
  428. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  429. package/dist/modules/secrets-vault/secrets-vault.contract.js +40 -0
  430. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  431. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  432. package/dist/modules/secrets-vault/secrets-vault.routes.js +106 -52
  433. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  434. package/dist/modules/settings/connection-check.d.ts +118 -0
  435. package/dist/modules/settings/connection-check.d.ts.map +1 -0
  436. package/dist/modules/settings/connection-check.js +287 -0
  437. package/dist/modules/settings/connection-check.js.map +1 -0
  438. package/dist/modules/settings/deployment-settings.service.d.ts +157 -2
  439. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  440. package/dist/modules/settings/deployment-settings.service.js +412 -35
  441. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  442. package/dist/modules/settings/git-root-folders.d.ts +54 -0
  443. package/dist/modules/settings/git-root-folders.d.ts.map +1 -0
  444. package/dist/modules/settings/git-root-folders.js +130 -0
  445. package/dist/modules/settings/git-root-folders.js.map +1 -0
  446. package/dist/modules/settings/oidc-check.d.ts +85 -0
  447. package/dist/modules/settings/oidc-check.d.ts.map +1 -0
  448. package/dist/modules/settings/oidc-check.js +172 -0
  449. package/dist/modules/settings/oidc-check.js.map +1 -0
  450. package/dist/modules/settings/setup.routes.d.ts +57 -1
  451. package/dist/modules/settings/setup.routes.d.ts.map +1 -1
  452. package/dist/modules/settings/setup.routes.js +408 -108
  453. package/dist/modules/settings/setup.routes.js.map +1 -1
  454. package/dist/modules/skills/allowed-tools-check.d.ts +132 -0
  455. package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -0
  456. package/dist/modules/skills/allowed-tools-check.js +260 -0
  457. package/dist/modules/skills/allowed-tools-check.js.map +1 -0
  458. package/dist/modules/skills/index.d.ts +4 -1
  459. package/dist/modules/skills/index.d.ts.map +1 -1
  460. package/dist/modules/skills/index.js +2 -0
  461. package/dist/modules/skills/index.js.map +1 -1
  462. package/dist/modules/skills/pending-skills.service.d.ts +6 -11
  463. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  464. package/dist/modules/skills/pending-skills.service.js +24 -71
  465. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  466. package/dist/modules/skills/skill-access-requests.routes.d.ts +38 -0
  467. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -0
  468. package/dist/modules/skills/skill-access-requests.routes.js +171 -0
  469. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -0
  470. package/dist/modules/skills/skills.contract.d.ts +67 -2
  471. package/dist/modules/skills/skills.contract.d.ts.map +1 -1
  472. package/dist/modules/skills/skills.routes.d.ts +35 -3
  473. package/dist/modules/skills/skills.routes.d.ts.map +1 -1
  474. package/dist/modules/skills/skills.routes.js +57 -4
  475. package/dist/modules/skills/skills.routes.js.map +1 -1
  476. package/dist/modules/skills/skills.service.d.ts +31 -3
  477. package/dist/modules/skills/skills.service.d.ts.map +1 -1
  478. package/dist/modules/skills/skills.service.js +236 -65
  479. package/dist/modules/skills/skills.service.js.map +1 -1
  480. package/dist/modules/skills/skills.tools.d.ts +4 -1
  481. package/dist/modules/skills/skills.tools.d.ts.map +1 -1
  482. package/dist/modules/skills/skills.tools.js +41 -6
  483. package/dist/modules/skills/skills.tools.js.map +1 -1
  484. package/dist/modules/tool-auth/connection-key-rejection.d.ts +18 -0
  485. package/dist/modules/tool-auth/connection-key-rejection.d.ts.map +1 -0
  486. package/dist/modules/tool-auth/connection-key-rejection.js +20 -0
  487. package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -0
  488. package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +14 -0
  489. package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -0
  490. package/dist/modules/tool-auth/connection-keys-admin.routes.js +67 -0
  491. package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -0
  492. package/dist/modules/tool-auth/external-api-key.interface.d.ts +66 -1
  493. package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
  494. package/dist/modules/tool-auth/external-api-key.interface.js +2 -1
  495. package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
  496. package/dist/modules/tool-auth/external-api-key.service.d.ts +23 -4
  497. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
  498. package/dist/modules/tool-auth/external-api-key.service.js +79 -19
  499. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
  500. package/dist/modules/tool-auth/internal-token.service.d.ts +5 -2
  501. package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -1
  502. package/dist/modules/tool-auth/internal-token.service.js +5 -2
  503. package/dist/modules/tool-auth/internal-token.service.js.map +1 -1
  504. package/dist/modules/tool-auth/key-or-session.middleware.d.ts +23 -0
  505. package/dist/modules/tool-auth/key-or-session.middleware.d.ts.map +1 -0
  506. package/dist/modules/tool-auth/key-or-session.middleware.js +39 -0
  507. package/dist/modules/tool-auth/key-or-session.middleware.js.map +1 -0
  508. package/dist/modules/tool-auth/tool-auth.middleware.d.ts +7 -1
  509. package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
  510. package/dist/modules/tool-auth/tool-auth.middleware.js +8 -5
  511. package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
  512. package/dist/modules/tool-helpers/tool-context.d.ts +14 -0
  513. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  514. package/dist/modules/tool-helpers/tool-context.js +28 -6
  515. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  516. package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
  517. package/dist/modules/tool-helpers/tool-handler.js +22 -5
  518. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  519. package/dist/modules/tool-helpers/tool.contract.d.ts +6 -1
  520. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  521. package/dist/modules/tool-helpers/tool.contract.js +7 -1
  522. package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
  523. package/dist/modules/tool-manuals/index.d.ts +2 -1
  524. package/dist/modules/tool-manuals/index.d.ts.map +1 -1
  525. package/dist/modules/tool-manuals/index.js +1 -0
  526. package/dist/modules/tool-manuals/index.js.map +1 -1
  527. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +36 -0
  528. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
  529. package/dist/modules/tool-manuals/mcp-json-discovery.js +136 -96
  530. package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
  531. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +10 -2
  532. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
  533. package/dist/modules/tool-manuals/mcp-server-edit.service.js +12 -15
  534. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  535. package/dist/modules/tool-manuals/pending-tools.service.d.ts +50 -0
  536. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -0
  537. package/dist/modules/tool-manuals/pending-tools.service.js +149 -0
  538. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -0
  539. package/dist/modules/tool-manuals/tool-delete.service.d.ts +135 -0
  540. package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -0
  541. package/dist/modules/tool-manuals/tool-delete.service.js +303 -0
  542. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -0
  543. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +161 -0
  544. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  545. package/dist/modules/tool-manuals/tool-manuals.contract.js +9 -0
  546. package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -1
  547. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +19 -2
  548. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
  549. package/dist/modules/tool-manuals/tool-manuals.routes.js +127 -57
  550. package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
  551. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +121 -2
  552. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  553. package/dist/modules/tool-manuals/tool-manuals.service.js +415 -92
  554. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  555. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  556. package/dist/modules/tool-manuals/tool-manuals.tools.js +78 -6
  557. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  558. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
  559. package/dist/modules/workflow/agent-tools/workflow.tools.js +88 -54
  560. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
  561. package/dist/modules/workflow/event-bus.d.ts +10 -4
  562. package/dist/modules/workflow/event-bus.d.ts.map +1 -1
  563. package/dist/modules/workflow/event-bus.js +14 -11
  564. package/dist/modules/workflow/event-bus.js.map +1 -1
  565. package/dist/modules/workflow/events.routes.d.ts +17 -2
  566. package/dist/modules/workflow/events.routes.d.ts.map +1 -1
  567. package/dist/modules/workflow/events.routes.js +31 -12
  568. package/dist/modules/workflow/events.routes.js.map +1 -1
  569. package/dist/modules/workflow/file-lock.service.d.ts +22 -4
  570. package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
  571. package/dist/modules/workflow/file-lock.service.js +27 -4
  572. package/dist/modules/workflow/file-lock.service.js.map +1 -1
  573. package/dist/modules/workflow/git/change-request-link.d.ts +20 -0
  574. package/dist/modules/workflow/git/change-request-link.d.ts.map +1 -0
  575. package/dist/modules/workflow/git/change-request-link.js +34 -0
  576. package/dist/modules/workflow/git/change-request-link.js.map +1 -0
  577. package/dist/modules/workflow/git/git-version.d.ts.map +1 -1
  578. package/dist/modules/workflow/git/git-version.js +3 -1
  579. package/dist/modules/workflow/git/git-version.js.map +1 -1
  580. package/dist/modules/workflow/git/git.service.d.ts +303 -6
  581. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  582. package/dist/modules/workflow/git/git.service.js +753 -170
  583. package/dist/modules/workflow/git/git.service.js.map +1 -1
  584. package/dist/modules/workflow/git/node-git-runner.d.ts +36 -0
  585. package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -0
  586. package/dist/modules/workflow/git/node-git-runner.js +273 -0
  587. package/dist/modules/workflow/git/node-git-runner.js.map +1 -0
  588. package/dist/modules/workflow/git/pull-request.service.d.ts +57 -2
  589. package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
  590. package/dist/modules/workflow/git/pull-request.service.js +165 -25
  591. package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
  592. package/dist/modules/workflow/pending-commits.service.d.ts +11 -0
  593. package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
  594. package/dist/modules/workflow/pending-commits.service.js +24 -4
  595. package/dist/modules/workflow/pending-commits.service.js.map +1 -1
  596. package/dist/modules/workflow/pending-commits.worker.d.ts +15 -8
  597. package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -1
  598. package/dist/modules/workflow/pending-commits.worker.js +107 -58
  599. package/dist/modules/workflow/pending-commits.worker.js.map +1 -1
  600. package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
  601. package/dist/modules/workflow/recovery-bot.js +3 -1
  602. package/dist/modules/workflow/recovery-bot.js.map +1 -1
  603. package/dist/modules/workflow/review-workflow/approval-lock.d.ts +60 -0
  604. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -0
  605. package/dist/modules/workflow/review-workflow/approval-lock.js +116 -0
  606. package/dist/modules/workflow/review-workflow/approval-lock.js.map +1 -0
  607. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +54 -7
  608. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
  609. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +64 -0
  610. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
  611. package/dist/modules/workflow/review-workflow/review-workflow.service.js +269 -90
  612. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
  613. package/dist/modules/workflow/sanitize-error.d.ts +5 -2
  614. package/dist/modules/workflow/sanitize-error.d.ts.map +1 -1
  615. package/dist/modules/workflow/sanitize-error.js +8 -4
  616. package/dist/modules/workflow/sanitize-error.js.map +1 -1
  617. package/dist/modules/workflow/workflow.routes.d.ts +2 -0
  618. package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
  619. package/dist/modules/workflow/workflow.routes.js +259 -29
  620. package/dist/modules/workflow/workflow.routes.js.map +1 -1
  621. package/dist/modules/workflow/workflow.service.d.ts +217 -14
  622. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  623. package/dist/modules/workflow/workflow.service.js +1142 -109
  624. package/dist/modules/workflow/workflow.service.js.map +1 -1
  625. package/dist/modules/workspace/empty-dirs.d.ts +15 -0
  626. package/dist/modules/workspace/empty-dirs.d.ts.map +1 -0
  627. package/dist/modules/workspace/empty-dirs.js +90 -0
  628. package/dist/modules/workspace/empty-dirs.js.map +1 -0
  629. package/dist/modules/workspace/file-readers/content-mode.d.ts +50 -0
  630. package/dist/modules/workspace/file-readers/content-mode.d.ts.map +1 -0
  631. package/dist/modules/workspace/file-readers/content-mode.js +55 -0
  632. package/dist/modules/workspace/file-readers/content-mode.js.map +1 -0
  633. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +4 -1
  634. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
  635. package/dist/modules/workspace/file-readers/doc-extract.service.js +4 -1
  636. package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
  637. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +5 -2
  638. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
  639. package/dist/modules/workspace/file-readers/doc-extract.types.js +7 -4
  640. package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
  641. package/dist/modules/workspace/file-readers/document-reader.d.ts +2 -0
  642. package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
  643. package/dist/modules/workspace/file-readers/document-reader.js +5 -0
  644. package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
  645. package/dist/modules/workspace/file-readers/extract-docx.d.ts +6 -0
  646. package/dist/modules/workspace/file-readers/extract-docx.d.ts.map +1 -1
  647. package/dist/modules/workspace/file-readers/extract-docx.js +6 -0
  648. package/dist/modules/workspace/file-readers/extract-docx.js.map +1 -1
  649. package/dist/modules/workspace/file-readers/file-reader.d.ts +24 -5
  650. package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
  651. package/dist/modules/workspace/file-readers/file-reader.js +11 -6
  652. package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
  653. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
  654. package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -1
  655. package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
  656. package/dist/modules/workspace/file-readers/image-reader.d.ts +7 -5
  657. package/dist/modules/workspace/file-readers/image-reader.d.ts.map +1 -1
  658. package/dist/modules/workspace/file-readers/image-reader.js +9 -5
  659. package/dist/modules/workspace/file-readers/image-reader.js.map +1 -1
  660. package/dist/modules/workspace/file-readers/ooxml-text.d.ts +3 -0
  661. package/dist/modules/workspace/file-readers/ooxml-text.d.ts.map +1 -1
  662. package/dist/modules/workspace/file-readers/ooxml-text.js +39 -2
  663. package/dist/modules/workspace/file-readers/ooxml-text.js.map +1 -1
  664. package/dist/modules/workspace/file-readers/text-reader.d.ts +29 -1
  665. package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -1
  666. package/dist/modules/workspace/file-readers/text-reader.js +57 -3
  667. package/dist/modules/workspace/file-readers/text-reader.js.map +1 -1
  668. package/dist/modules/workspace/git-internals.middleware.d.ts +28 -0
  669. package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -0
  670. package/dist/modules/workspace/git-internals.middleware.js +93 -0
  671. package/dist/modules/workspace/git-internals.middleware.js.map +1 -0
  672. package/dist/modules/workspace/not-found.d.ts +80 -0
  673. package/dist/modules/workspace/not-found.d.ts.map +1 -0
  674. package/dist/modules/workspace/not-found.js +112 -0
  675. package/dist/modules/workspace/not-found.js.map +1 -0
  676. package/dist/modules/workspace/session-ontology.gate.d.ts +1 -1
  677. package/dist/modules/workspace/session-ontology.gate.d.ts.map +1 -1
  678. package/dist/modules/workspace/session-ontology.gate.js +1 -1
  679. package/dist/modules/workspace/session-ontology.gate.js.map +1 -1
  680. package/dist/modules/workspace/startup/beside-checkout.d.ts +42 -0
  681. package/dist/modules/workspace/startup/beside-checkout.d.ts.map +1 -0
  682. package/dist/modules/workspace/startup/beside-checkout.js +110 -0
  683. package/dist/modules/workspace/startup/beside-checkout.js.map +1 -0
  684. package/dist/modules/workspace/startup/kb-git.d.ts +7 -12
  685. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  686. package/dist/modules/workspace/startup/kb-git.js +34 -35
  687. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  688. package/dist/modules/workspace/startup/kb-startup-runner.d.ts +95 -0
  689. package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
  690. package/dist/modules/workspace/startup/kb-startup-runner.js +257 -55
  691. package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
  692. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts +45 -0
  693. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts.map +1 -1
  694. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +417 -385
  695. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
  696. package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts +48 -0
  697. package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts.map +1 -0
  698. package/dist/modules/workspace/startup/steps/personal-spaces.step.js +183 -0
  699. package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -0
  700. package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts +51 -0
  701. package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts.map +1 -0
  702. package/dist/modules/workspace/startup/steps/plugin-display-names.step.js +158 -0
  703. package/dist/modules/workspace/startup/steps/plugin-display-names.step.js.map +1 -0
  704. package/dist/modules/workspace/startup/steps/plugin-layout.d.ts +64 -0
  705. package/dist/modules/workspace/startup/steps/plugin-layout.d.ts.map +1 -0
  706. package/dist/modules/workspace/startup/steps/plugin-layout.js +97 -0
  707. package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -0
  708. package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts +41 -0
  709. package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts.map +1 -0
  710. package/dist/modules/workspace/startup/steps/plugin-manifests.step.js +85 -0
  711. package/dist/modules/workspace/startup/steps/plugin-manifests.step.js.map +1 -0
  712. package/dist/modules/workspace/startup/steps/roles-yaml.step.d.ts +3 -1
  713. package/dist/modules/workspace/startup/steps/roles-yaml.step.d.ts.map +1 -1
  714. package/dist/modules/workspace/startup/steps/roles-yaml.step.js +4 -12
  715. package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
  716. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +6 -1
  717. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  718. package/dist/modules/workspace/startup/steps/seed-tree.js +174 -54
  719. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  720. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +96 -24
  721. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  722. package/dist/modules/workspace/startup/steps/template-files.step.js +521 -126
  723. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  724. package/dist/modules/workspace/startup/steps/template-source.d.ts +94 -0
  725. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -0
  726. package/dist/modules/workspace/startup/steps/template-source.js +160 -0
  727. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -0
  728. package/dist/modules/workspace/workspace.routes.d.ts +14 -2
  729. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  730. package/dist/modules/workspace/workspace.routes.js +657 -246
  731. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  732. package/dist/modules/workspace/workspace.service.d.ts +323 -12
  733. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  734. package/dist/modules/workspace/workspace.service.js +1006 -257
  735. package/dist/modules/workspace/workspace.service.js.map +1 -1
  736. package/dist/modules/workspace/workspace.tools.d.ts +42 -1
  737. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  738. package/dist/modules/workspace/workspace.tools.js +1590 -146
  739. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  740. package/dist/modules/workspace/write-denial.d.ts +76 -0
  741. package/dist/modules/workspace/write-denial.d.ts.map +1 -0
  742. package/dist/modules/workspace/write-denial.js +138 -0
  743. package/dist/modules/workspace/write-denial.js.map +1 -0
  744. package/dist/shared/canonical-file-identity.d.ts +64 -0
  745. package/dist/shared/canonical-file-identity.d.ts.map +1 -0
  746. package/dist/shared/canonical-file-identity.js +92 -0
  747. package/dist/shared/canonical-file-identity.js.map +1 -0
  748. package/dist/shared/domain-errors.d.ts +128 -0
  749. package/dist/shared/domain-errors.d.ts.map +1 -1
  750. package/dist/shared/domain-errors.js +166 -0
  751. package/dist/shared/domain-errors.js.map +1 -1
  752. package/dist/shared/email-identity.d.ts +32 -0
  753. package/dist/shared/email-identity.d.ts.map +1 -0
  754. package/dist/shared/email-identity.js +37 -0
  755. package/dist/shared/email-identity.js.map +1 -0
  756. package/dist/shared/fs-errors.d.ts +8 -0
  757. package/dist/shared/fs-errors.d.ts.map +1 -0
  758. package/dist/shared/fs-errors.js +11 -0
  759. package/dist/shared/fs-errors.js.map +1 -0
  760. package/dist/shared/fs-walk.d.ts +20 -6
  761. package/dist/shared/fs-walk.d.ts.map +1 -1
  762. package/dist/shared/fs-walk.js +35 -27
  763. package/dist/shared/fs-walk.js.map +1 -1
  764. package/dist/shared/fs.contract.d.ts +206 -0
  765. package/dist/shared/fs.contract.d.ts.map +1 -0
  766. package/dist/shared/fs.contract.js +79 -0
  767. package/dist/shared/fs.contract.js.map +1 -0
  768. package/dist/shared/git-failure.d.ts +80 -0
  769. package/dist/shared/git-failure.d.ts.map +1 -0
  770. package/dist/shared/git-failure.js +139 -0
  771. package/dist/shared/git-failure.js.map +1 -0
  772. package/dist/shared/git-internals.d.ts +17 -0
  773. package/dist/shared/git-internals.d.ts.map +1 -0
  774. package/dist/shared/git-internals.js +123 -0
  775. package/dist/shared/git-internals.js.map +1 -0
  776. package/dist/shared/git.contract.d.ts +157 -0
  777. package/dist/shared/git.contract.d.ts.map +1 -0
  778. package/dist/shared/git.contract.js +103 -0
  779. package/dist/shared/git.contract.js.map +1 -0
  780. package/dist/shared/http-errors.d.ts +33 -0
  781. package/dist/shared/http-errors.d.ts.map +1 -0
  782. package/dist/shared/http-errors.js +35 -0
  783. package/dist/shared/http-errors.js.map +1 -0
  784. package/dist/shared/kb-walk.d.ts +52 -0
  785. package/dist/shared/kb-walk.d.ts.map +1 -0
  786. package/dist/shared/kb-walk.js +76 -0
  787. package/dist/shared/kb-walk.js.map +1 -0
  788. package/dist/shared/logger.contract.d.ts +63 -0
  789. package/dist/shared/logger.contract.d.ts.map +1 -0
  790. package/dist/shared/logger.contract.js +126 -0
  791. package/dist/shared/logger.contract.js.map +1 -0
  792. package/dist/shared/logging.d.ts +31 -0
  793. package/dist/shared/logging.d.ts.map +1 -0
  794. package/dist/shared/logging.js +92 -0
  795. package/dist/shared/logging.js.map +1 -0
  796. package/dist/shared/path-containment.d.ts +21 -0
  797. package/dist/shared/path-containment.d.ts.map +1 -0
  798. package/dist/shared/path-containment.js +34 -0
  799. package/dist/shared/path-containment.js.map +1 -0
  800. package/dist/shared/path-order.d.ts +18 -0
  801. package/dist/shared/path-order.d.ts.map +1 -0
  802. package/dist/shared/path-order.js +35 -0
  803. package/dist/shared/path-order.js.map +1 -0
  804. package/dist/shared/pending-proposals.d.ts +71 -0
  805. package/dist/shared/pending-proposals.d.ts.map +1 -0
  806. package/dist/shared/pending-proposals.js +98 -0
  807. package/dist/shared/pending-proposals.js.map +1 -0
  808. package/dist/shared/printable.d.ts +22 -0
  809. package/dist/shared/printable.d.ts.map +1 -0
  810. package/dist/shared/printable.js +65 -0
  811. package/dist/shared/printable.js.map +1 -0
  812. package/dist/shared/redact-secret.d.ts +30 -0
  813. package/dist/shared/redact-secret.d.ts.map +1 -0
  814. package/dist/shared/redact-secret.js +114 -0
  815. package/dist/shared/redact-secret.js.map +1 -0
  816. package/dist/shared/rename-no-replace.d.ts +119 -0
  817. package/dist/shared/rename-no-replace.d.ts.map +1 -0
  818. package/dist/shared/rename-no-replace.js +323 -0
  819. package/dist/shared/rename-no-replace.js.map +1 -0
  820. package/dist/shared/ssrf.d.ts.map +1 -1
  821. package/dist/shared/ssrf.js +49 -18
  822. package/dist/shared/ssrf.js.map +1 -1
  823. package/dist/shared/ttl-cache.d.ts +28 -1
  824. package/dist/shared/ttl-cache.d.ts.map +1 -1
  825. package/dist/shared/ttl-cache.js +33 -1
  826. package/dist/shared/ttl-cache.js.map +1 -1
  827. package/dist/version.d.ts +10 -6
  828. package/dist/version.d.ts.map +1 -1
  829. package/dist/version.js +10 -6
  830. package/dist/version.js.map +1 -1
  831. package/kb-template/.bevelignore +4 -3
  832. package/kb-template/AGENTS.md +364 -54
  833. package/kb-template/KnowledgeBase/How to get started.md +1 -1
  834. package/kb-template/Skills/.gitkeep +0 -0
  835. package/kb-template/access.md +5 -3
  836. package/kb-template/mcp-description.md +27 -0
  837. package/migrations/0005_github_facade.sql +25 -0
  838. package/migrations/0006_api_tokens_revoked_by.sql +1 -0
  839. package/migrations/0007_github_facade_registered.sql +1 -0
  840. package/migrations/0008_change_request_apply_failure.sql +4 -0
  841. package/migrations/0009_change_request_apply_failure_kind.sql +13 -0
  842. package/migrations/0010_plugin_join_requests.sql +15 -0
  843. package/migrations/0011_plugin_join_request_claim.sql +11 -0
  844. package/migrations/meta/0005_snapshot.json +1717 -0
  845. package/migrations/meta/0006_snapshot.json +1723 -0
  846. package/migrations/meta/0007_snapshot.json +1729 -0
  847. package/migrations/meta/0008_snapshot.json +1753 -0
  848. package/migrations/meta/0009_snapshot.json +1759 -0
  849. package/migrations/meta/0010_snapshot.json +1872 -0
  850. package/migrations/meta/0011_snapshot.json +1884 -0
  851. package/migrations/meta/_journal.json +49 -0
  852. package/package.json +8 -7
  853. package/src/__tests__/core-config.domain.test.ts +67 -2
  854. package/src/__tests__/kb-layout-config.test.ts +295 -0
  855. package/src/__tests__/open-change-gate.ts +15 -0
  856. package/src/core/__tests__/catalog-cache-invalidation.test.ts +226 -0
  857. package/src/core/__tests__/catalog-revision.test.ts +190 -0
  858. package/src/core/__tests__/lifecycle.test.ts +369 -0
  859. package/src/core/__tests__/public-config.test.ts +30 -0
  860. package/src/core/__tests__/readiness.test.ts +109 -0
  861. package/src/core/catalog-cache-invalidation.ts +111 -0
  862. package/src/core/catalog-revision.ts +110 -0
  863. package/src/core/create-core-server.ts +358 -63
  864. package/src/core/create-core-services.ts +449 -107
  865. package/src/core/lifecycle.ts +312 -0
  866. package/src/core/public-config.ts +86 -0
  867. package/src/core/readiness.ts +123 -0
  868. package/src/core-config.ts +70 -4
  869. package/src/index.ts +15 -0
  870. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +362 -0
  871. package/src/modules/access/__tests__/access-control.atref-batch.test.ts +2 -1
  872. package/src/modules/access/__tests__/access-control.atref-cache.test.ts +46 -22
  873. package/src/modules/access/__tests__/access-control.deny-dependents.test.ts +215 -0
  874. package/src/modules/access/__tests__/access-control.download-read.test.ts +268 -0
  875. package/src/modules/access/__tests__/access-control.everyone-read.test.ts +145 -0
  876. package/src/modules/access/__tests__/access-control.group-read.test.ts +163 -0
  877. package/src/modules/access/__tests__/access-control.invalidate-race.test.ts +88 -0
  878. package/src/modules/access/__tests__/access-control.platform-restore.test.ts +152 -0
  879. package/src/modules/access/__tests__/access-control.prospective.test.ts +189 -0
  880. package/src/modules/access/__tests__/access-control.read-batch.test.ts +2 -1
  881. package/src/modules/access/__tests__/access-control.service.test.ts +142 -81
  882. package/src/modules/access/__tests__/access-groups.test.ts +47 -14
  883. package/src/modules/access/__tests__/access-md-format.test.ts +2 -1
  884. package/src/modules/access/__tests__/access-mutation.service.test.ts +52 -4
  885. package/src/modules/access/__tests__/access-own-read-grant.test.ts +2 -0
  886. package/src/modules/access/__tests__/access-personal-plugin.test.ts +153 -0
  887. package/src/modules/access/__tests__/access-plugin-principals.test.ts +385 -0
  888. package/src/modules/access/__tests__/access-restrict-here.test.ts +450 -0
  889. package/src/modules/access/__tests__/access.routes.batch.test.ts +139 -0
  890. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +394 -0
  891. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -2
  892. package/src/modules/access/__tests__/access.routes.overrides.test.ts +3 -2
  893. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +234 -0
  894. package/src/modules/access/__tests__/access.routes.prospective.test.ts +216 -0
  895. package/src/modules/access/__tests__/access.routes.revoke.test.ts +7 -2
  896. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +360 -0
  897. package/src/modules/access/__tests__/change-read-gate.test.ts +272 -0
  898. package/src/modules/access/__tests__/creator-access.test.ts +81 -83
  899. package/src/modules/access/__tests__/grant-sources.test.ts +3 -2
  900. package/src/modules/access/__tests__/groups-admin.service.test.ts +14 -5
  901. package/src/modules/access/__tests__/roles-admin.security.test.ts +196 -0
  902. package/src/modules/access/__tests__/roles-admin.service.test.ts +127 -2
  903. package/src/modules/access/__tests__/roles-capabilities.test.ts +5 -4
  904. package/src/modules/access/__tests__/roles.routes.test.ts +5 -2
  905. package/src/modules/access/__tests__/user-access-removal.service.test.ts +402 -0
  906. package/src/modules/access/__tests__/users-db-double.ts +63 -0
  907. package/src/modules/access/access-control.interface.ts +269 -18
  908. package/src/modules/access/access-control.service.ts +943 -226
  909. package/src/modules/access/access-mutation.service.ts +182 -13
  910. package/src/modules/access/access-view.ts +316 -0
  911. package/src/modules/access/access.routes.ts +385 -105
  912. package/src/modules/access/admin-locked-commit.ts +12 -14
  913. package/src/modules/access/admin-route-helpers.ts +4 -4
  914. package/src/modules/access/change-read-gate.ts +148 -0
  915. package/src/modules/access/creator-access.ts +89 -124
  916. package/src/modules/access/directory-sync-bot.ts +4 -1
  917. package/src/modules/access/groups-admin.service.ts +3 -3
  918. package/src/modules/access/reference-scan.ts +5 -5
  919. package/src/modules/access/roles-admin.service.ts +94 -15
  920. package/src/modules/access/synced-groups-committer.ts +10 -15
  921. package/src/modules/access/synced-groups-writer.ts +3 -12
  922. package/src/modules/access/user-access-removal.service.ts +711 -0
  923. package/src/modules/access-model/__tests__/access-grammar.test.ts +18 -0
  924. package/src/modules/access-model/__tests__/access-splice.test.ts +63 -1
  925. package/src/modules/access-model/__tests__/frontmatter-fences.test.ts +71 -0
  926. package/src/modules/access-model/__tests__/plugin-token-canonical.test.ts +40 -0
  927. package/src/modules/access-model/__tests__/roles-yaml-guard.test.ts +131 -0
  928. package/src/modules/access-model/access-errors.ts +56 -15
  929. package/src/modules/access-model/access-grammar.ts +198 -49
  930. package/src/modules/access-model/access-splice.ts +18 -18
  931. package/src/modules/access-model/access-template.ts +44 -0
  932. package/src/modules/access-model/change-gate.ts +80 -0
  933. package/src/modules/access-model/creator.ts +18 -21
  934. package/src/modules/access-model/frontmatter-lines.ts +98 -0
  935. package/src/modules/access-model/group-files.ts +4 -0
  936. package/src/modules/access-model/plugin-principals.ts +130 -0
  937. package/src/modules/access-model/roles-yaml-guard.ts +182 -4
  938. package/src/modules/admin/admin-access.service.ts +6 -2
  939. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +100 -0
  940. package/src/modules/agent-instructions/__tests__/compose.test.ts +256 -0
  941. package/src/modules/agent-instructions/__tests__/read-preamble.test.ts +135 -0
  942. package/src/modules/agent-instructions/agent-instructions.routes.ts +41 -0
  943. package/src/modules/agent-instructions/compose.ts +271 -0
  944. package/src/modules/agent-instructions/index.ts +14 -0
  945. package/src/modules/agent-instructions/read-preamble.ts +88 -0
  946. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +209 -0
  947. package/src/modules/auth/__tests__/account.routes.test.ts +178 -2
  948. package/src/modules/auth/__tests__/auth.middleware.test.ts +78 -0
  949. package/src/modules/auth/__tests__/auth.service.test.ts +338 -5
  950. package/src/modules/auth/__tests__/oidc-auth-provider.test.ts +352 -12
  951. package/src/modules/auth/__tests__/onboarding-done.route.test.ts +3 -1
  952. package/src/modules/auth/account-erasure.service.ts +117 -10
  953. package/src/modules/auth/account.routes.ts +115 -14
  954. package/src/modules/auth/auth.routes.ts +20 -7
  955. package/src/modules/auth/auth.service.ts +187 -28
  956. package/src/modules/auth/oidc-auth-provider.ts +120 -22
  957. package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +109 -1
  958. package/src/modules/code-mode/code-mode.tool.ts +13 -2
  959. package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +78 -0
  960. package/src/modules/connection-probe/connection-probe.service.ts +59 -7
  961. package/src/modules/database/__tests__/advisory-lease.test.ts +152 -0
  962. package/src/modules/database/__tests__/advisory-lock.test.ts +147 -0
  963. package/src/modules/database/advisory-lock.ts +346 -0
  964. package/src/modules/database/connection.ts +9 -1
  965. package/src/modules/database/core-schema.ts +177 -0
  966. package/src/modules/database/migrate.ts +27 -6
  967. package/src/modules/declared-variables/declared-variables.routes.ts +6 -3
  968. package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +3 -0
  969. package/src/modules/diff/__tests__/diff.service.test.ts +3 -0
  970. package/src/modules/diff/diff.routes.ts +2 -4
  971. package/src/modules/diff/diff.service.ts +75 -79
  972. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +472 -9
  973. package/src/modules/kb-fs/__tests__/node-fs.test.ts +409 -0
  974. package/src/modules/kb-fs/__tests__/repo-path.test.ts +210 -1
  975. package/src/modules/{workspace → kb-fs}/bevel-ignore.ts +22 -15
  976. package/src/modules/kb-fs/file-change-notifier.ts +4 -1
  977. package/src/modules/kb-fs/git-guarded-filesystem.ts +123 -0
  978. package/src/modules/kb-fs/locking-filesystem.ts +399 -109
  979. package/src/modules/kb-fs/node-fs.ts +165 -0
  980. package/src/modules/kb-fs/read-only-filesystem.ts +18 -9
  981. package/src/modules/kb-fs/repo-path.ts +213 -3
  982. package/src/modules/kb-sync/__tests__/kb-sync.routes.test.ts +297 -0
  983. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +295 -0
  984. package/src/modules/kb-sync/__tests__/sync-auth.test.ts +118 -0
  985. package/src/modules/kb-sync/__tests__/sync-payload.test.ts +148 -0
  986. package/src/modules/kb-sync/index.ts +19 -0
  987. package/src/modules/kb-sync/kb-sync.interface.ts +79 -0
  988. package/src/modules/kb-sync/kb-sync.routes.ts +200 -0
  989. package/src/modules/kb-sync/kb-sync.service.ts +204 -0
  990. package/src/modules/kb-sync/sync-auth.ts +118 -0
  991. package/src/modules/kb-sync/sync-payload.ts +143 -0
  992. package/src/modules/marketplace/__tests__/github-facade.test.ts +575 -0
  993. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +180 -0
  994. package/src/modules/marketplace/__tests__/marketplace-repo.head.test.ts +47 -0
  995. package/src/modules/marketplace/git-http.routes.ts +196 -0
  996. package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +110 -0
  997. package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +145 -0
  998. package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +263 -0
  999. package/src/modules/marketplace/github-facade/github-facade.routes.ts +294 -0
  1000. package/src/modules/marketplace/github-facade/github-facade.service.ts +282 -0
  1001. package/src/modules/marketplace/github-facade/index.ts +26 -0
  1002. package/src/modules/marketplace/index.ts +3 -0
  1003. package/src/modules/marketplace/marketplace-repo.service.ts +352 -0
  1004. package/src/modules/mcp/__tests__/downstream-pool.test.ts +278 -0
  1005. package/src/modules/mcp/__tests__/downstream-token-refresh.test.ts +178 -0
  1006. package/src/modules/mcp/__tests__/fake-downstream-mcp-server.ts +156 -0
  1007. package/src/modules/mcp/__tests__/first-call-probe.cli-args.test.ts +178 -0
  1008. package/src/modules/mcp/__tests__/first-call-probe.test.ts +414 -0
  1009. package/src/modules/mcp/__tests__/manual-failure-memo.test.ts +98 -6
  1010. package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +8 -5
  1011. package/src/modules/mcp/__tests__/mcp-routes-harness.ts +1 -3
  1012. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +1055 -59
  1013. package/src/modules/mcp/__tests__/mcp.routes.stateless.test.ts +182 -0
  1014. package/src/modules/mcp/__tests__/mcp.service.test.ts +274 -6
  1015. package/src/modules/mcp/__tests__/surface-log-throttle.test.ts +169 -0
  1016. package/src/modules/mcp/downstream-pool.ts +256 -0
  1017. package/src/modules/mcp/downstream-token-refresh.ts +170 -0
  1018. package/src/modules/mcp/first-call-probe.cli-args.ts +159 -0
  1019. package/src/modules/mcp/first-call-probe.cli.ts +60 -0
  1020. package/src/modules/mcp/first-call-probe.ts +418 -0
  1021. package/src/modules/mcp/manual-failure-memo.ts +81 -23
  1022. package/src/modules/mcp/mcp-auth.middleware.ts +25 -16
  1023. package/src/modules/mcp/mcp.routes.ts +376 -482
  1024. package/src/modules/mcp/mcp.service.ts +846 -176
  1025. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +8 -2
  1026. package/src/modules/mcp/oauth/oauth-consent.routes.ts +28 -6
  1027. package/src/modules/mcp/oauth/oauth-state.ts +15 -3
  1028. package/src/modules/mcp/surface-log-throttle.ts +120 -0
  1029. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +166 -0
  1030. package/src/modules/plugins/__tests__/bundle-dialect.test.ts +165 -0
  1031. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +423 -0
  1032. package/src/modules/plugins/__tests__/fake-join-request-store.ts +189 -0
  1033. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +608 -0
  1034. package/src/modules/plugins/__tests__/plugin-creation-display-name.test.ts +241 -0
  1035. package/src/modules/plugins/__tests__/plugin-index.service.test.ts +201 -16
  1036. package/src/modules/plugins/__tests__/plugin-links.service.test.ts +284 -0
  1037. package/src/modules/plugins/__tests__/plugin-names.test.ts +77 -0
  1038. package/src/modules/plugins/__tests__/plugin-provision.service.test.ts +330 -20
  1039. package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +456 -0
  1040. package/src/modules/plugins/__tests__/plugins.routes.test.ts +441 -43
  1041. package/src/modules/plugins/__tests__/plugins.tools.test.ts +131 -0
  1042. package/src/modules/plugins/__tests__/teams.routes.test.ts +248 -0
  1043. package/src/modules/plugins/compile/compile-marketplace.ts +500 -0
  1044. package/src/modules/plugins/compile/marketplace-compiler.service.ts +151 -0
  1045. package/src/modules/plugins/discovery/__tests__/kb-plugin-source.test.ts +365 -0
  1046. package/src/modules/plugins/discovery/bundle-dialect/bundle.source.ts +161 -0
  1047. package/src/modules/plugins/discovery/bundle-dialect/registry.ts +250 -0
  1048. package/src/modules/plugins/discovery/kb-plugin-source.ts +117 -0
  1049. package/src/modules/plugins/discovery/native.source.ts +140 -0
  1050. package/src/modules/plugins/discovery/plugin-source.ts +113 -0
  1051. package/src/modules/plugins/index.ts +25 -2
  1052. package/src/modules/plugins/join-request-jobs.service.ts +675 -0
  1053. package/src/modules/plugins/join-request-records.store.ts +353 -0
  1054. package/src/modules/plugins/join-requests.service.ts +7 -4
  1055. package/src/modules/plugins/plugin-links.service.ts +350 -0
  1056. package/src/modules/plugins/plugin-links.ts +187 -0
  1057. package/src/modules/plugins/plugin-provision.service.ts +356 -78
  1058. package/src/modules/plugins/plugin-rename.service.ts +310 -0
  1059. package/src/modules/plugins/plugins.contract.ts +79 -4
  1060. package/src/modules/plugins/plugins.routes.ts +320 -123
  1061. package/src/modules/plugins/plugins.service.ts +184 -57
  1062. package/src/modules/plugins/plugins.tools.ts +88 -0
  1063. package/src/modules/plugins/teams.routes.ts +129 -0
  1064. package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +359 -15
  1065. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +248 -0
  1066. package/src/modules/secrets-vault/__tests__/namespace-secrets.test.ts +202 -0
  1067. package/src/modules/secrets-vault/db-secrets-vault.service.ts +217 -35
  1068. package/src/modules/secrets-vault/index.ts +1 -0
  1069. package/src/modules/secrets-vault/mcp-oauth-discovery.service.ts +6 -3
  1070. package/src/modules/secrets-vault/secrets-variable-loader.ts +4 -4
  1071. package/src/modules/secrets-vault/secrets-vault.contract.ts +93 -0
  1072. package/src/modules/secrets-vault/secrets-vault.routes.ts +99 -38
  1073. package/src/modules/settings/__tests__/connection-check.test.ts +233 -0
  1074. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +240 -1
  1075. package/src/modules/settings/__tests__/git-root-folders.test.ts +247 -0
  1076. package/src/modules/settings/__tests__/oidc-check.test.ts +185 -0
  1077. package/src/modules/settings/__tests__/setup.routes.boot-failure.test.ts +119 -0
  1078. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +170 -0
  1079. package/src/modules/settings/__tests__/setup.routes.oidc.test.ts +555 -0
  1080. package/src/modules/settings/__tests__/setup.routes.sync-status.test.ts +77 -0
  1081. package/src/modules/settings/__tests__/setup.routes.test.ts +667 -16
  1082. package/src/modules/settings/connection-check.ts +351 -0
  1083. package/src/modules/settings/deployment-settings.service.ts +478 -39
  1084. package/src/modules/settings/git-root-folders.ts +171 -0
  1085. package/src/modules/settings/oidc-check.ts +229 -0
  1086. package/src/modules/settings/setup.routes.ts +480 -110
  1087. package/src/modules/skills/__tests__/allowed-tools-check.test.ts +224 -0
  1088. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +210 -0
  1089. package/src/modules/skills/__tests__/pending-skills.service.test.ts +3 -3
  1090. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +128 -0
  1091. package/src/modules/skills/__tests__/skills.routes.warnings.test.ts +91 -0
  1092. package/src/modules/skills/__tests__/skills.service.test.ts +308 -2
  1093. package/src/modules/skills/allowed-tools-check.ts +352 -0
  1094. package/src/modules/skills/index.ts +5 -0
  1095. package/src/modules/skills/pending-skills.service.ts +26 -85
  1096. package/src/modules/skills/skill-access-requests.routes.ts +203 -0
  1097. package/src/modules/skills/skills.contract.ts +67 -3
  1098. package/src/modules/skills/skills.routes.ts +75 -4
  1099. package/src/modules/skills/skills.service.ts +258 -66
  1100. package/src/modules/skills/skills.tools.ts +43 -5
  1101. package/src/modules/tool-auth/__tests__/connection-key-rejection.test.ts +192 -0
  1102. package/src/modules/tool-auth/__tests__/connection-keys-admin.routes.test.ts +116 -0
  1103. package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +124 -0
  1104. package/src/modules/tool-auth/connection-key-rejection.ts +25 -0
  1105. package/src/modules/tool-auth/connection-keys-admin.routes.ts +76 -0
  1106. package/src/modules/tool-auth/external-api-key.interface.ts +73 -1
  1107. package/src/modules/tool-auth/external-api-key.service.ts +95 -29
  1108. package/src/modules/tool-auth/internal-token.service.ts +5 -2
  1109. package/src/modules/tool-auth/key-or-session.middleware.ts +45 -0
  1110. package/src/modules/tool-auth/tool-auth.middleware.ts +16 -7
  1111. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +228 -0
  1112. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +33 -4
  1113. package/src/modules/tool-helpers/tool-context.ts +46 -7
  1114. package/src/modules/tool-helpers/tool-handler.ts +23 -5
  1115. package/src/modules/tool-helpers/tool.contract.ts +5 -0
  1116. package/src/modules/tool-manuals/__tests__/mcp-json-discovery.test.ts +24 -1
  1117. package/src/modules/tool-manuals/__tests__/mcp-server-edit.service.test.ts +2 -1
  1118. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +411 -0
  1119. package/src/modules/tool-manuals/__tests__/tool-delete.route.test.ts +133 -0
  1120. package/src/modules/tool-manuals/__tests__/tool-delete.service.test.ts +469 -0
  1121. package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +21 -2
  1122. package/src/modules/tool-manuals/__tests__/tool-manuals.cli.test.ts +11 -4
  1123. package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +6 -1
  1124. package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.routes.test.ts +254 -0
  1125. package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.test.ts +577 -0
  1126. package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +6 -1
  1127. package/src/modules/tool-manuals/__tests__/tool-manuals.pending.route.test.ts +102 -0
  1128. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +285 -0
  1129. package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +178 -2
  1130. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +114 -2
  1131. package/src/modules/tool-manuals/index.ts +3 -0
  1132. package/src/modules/tool-manuals/mcp-json-discovery.ts +164 -95
  1133. package/src/modules/tool-manuals/mcp-server-edit.service.ts +11 -14
  1134. package/src/modules/tool-manuals/pending-tools.service.ts +179 -0
  1135. package/src/modules/tool-manuals/tool-delete.service.ts +401 -0
  1136. package/src/modules/tool-manuals/tool-manuals.contract.ts +165 -0
  1137. package/src/modules/tool-manuals/tool-manuals.routes.ts +138 -54
  1138. package/src/modules/tool-manuals/tool-manuals.service.ts +440 -104
  1139. package/src/modules/tool-manuals/tool-manuals.tools.ts +81 -6
  1140. package/src/modules/workflow/__tests__/apply-failure.test.ts +1038 -0
  1141. package/src/modules/workflow/__tests__/event-bus.test.ts +61 -9
  1142. package/src/modules/workflow/__tests__/fake-file-lock-db.ts +199 -0
  1143. package/src/modules/workflow/__tests__/file-lock.service.path-identity.test.ts +237 -0
  1144. package/src/modules/workflow/__tests__/format-affected-owners.test.ts +18 -0
  1145. package/src/modules/workflow/__tests__/merge-announces-tree.test.ts +220 -0
  1146. package/src/modules/workflow/__tests__/pending-commits.worker.concurrency.test.ts +187 -0
  1147. package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +3 -1
  1148. package/src/modules/workflow/__tests__/sanitize-error.test.ts +10 -0
  1149. package/src/modules/workflow/__tests__/workflow.routes.folder-proposals.test.ts +128 -0
  1150. package/src/modules/workflow/__tests__/workflow.routes.fork-point-file.test.ts +149 -0
  1151. package/src/modules/workflow/__tests__/workflow.routes.lock-path.test.ts +305 -0
  1152. package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +2 -0
  1153. package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +3 -0
  1154. package/src/modules/workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts +2 -0
  1155. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +296 -27
  1156. package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +564 -0
  1157. package/src/modules/workflow/__tests__/workflow.service.platform-restore.test.ts +135 -0
  1158. package/src/modules/workflow/__tests__/workflow.service.read-gate.test.ts +172 -0
  1159. package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +133 -2
  1160. package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +442 -0
  1161. package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +281 -0
  1162. package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +158 -7
  1163. package/src/modules/workflow/agent-tools/workflow.tools.ts +93 -64
  1164. package/src/modules/workflow/event-bus.ts +26 -28
  1165. package/src/modules/workflow/events.routes.ts +56 -21
  1166. package/src/modules/workflow/file-lock.service.ts +27 -4
  1167. package/src/modules/workflow/git/__tests__/change-request-link.test.ts +43 -0
  1168. package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +1 -0
  1169. package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +238 -1
  1170. package/src/modules/workflow/git/__tests__/git.service.forkPoint.test.ts +245 -0
  1171. package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +35 -0
  1172. package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +149 -0
  1173. package/src/modules/workflow/git/__tests__/git.service.postMergePull.test.ts +3 -3
  1174. package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +47 -4
  1175. package/src/modules/workflow/git/__tests__/git.service.revertPathsAndPush.test.ts +177 -0
  1176. package/src/modules/workflow/git/__tests__/git.service.syncFromRemote.test.ts +253 -0
  1177. package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +114 -0
  1178. package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +69 -2
  1179. package/src/modules/workflow/git/__tests__/pull-request.service.list-fetch.test.ts +121 -0
  1180. package/src/modules/workflow/git/__tests__/pull-request.service.placeholder.test.ts +79 -0
  1181. package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +1 -1
  1182. package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +1 -1
  1183. package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-update.test.ts +111 -0
  1184. package/src/modules/workflow/git/change-request-link.ts +35 -0
  1185. package/src/modules/workflow/git/git-version.ts +5 -2
  1186. package/src/modules/workflow/git/git.service.ts +922 -199
  1187. package/src/modules/workflow/git/node-git-runner.ts +315 -0
  1188. package/src/modules/workflow/git/pull-request.service.ts +188 -27
  1189. package/src/modules/workflow/pending-commits.service.ts +26 -7
  1190. package/src/modules/workflow/pending-commits.worker.ts +114 -69
  1191. package/src/modules/workflow/recovery-bot.ts +4 -1
  1192. package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +180 -1
  1193. package/src/modules/workflow/review-workflow/__tests__/cancel-pr.test.ts +1 -1
  1194. package/src/modules/workflow/review-workflow/__tests__/carry-approvals-forward.test.ts +520 -0
  1195. package/src/modules/workflow/review-workflow/__tests__/erase-approver.test.ts +84 -0
  1196. package/src/modules/workflow/review-workflow/__tests__/merge-gate.test.ts +89 -77
  1197. package/src/modules/workflow/review-workflow/approval-lock.ts +122 -0
  1198. package/src/modules/workflow/review-workflow/review-workflow.interface.ts +59 -7
  1199. package/src/modules/workflow/review-workflow/review-workflow.service.ts +309 -105
  1200. package/src/modules/workflow/sanitize-error.ts +9 -4
  1201. package/src/modules/workflow/workflow.routes.ts +273 -29
  1202. package/src/modules/workflow/workflow.service.ts +1341 -174
  1203. package/src/modules/workspace/__tests__/empty-dirs.test.ts +44 -0
  1204. package/src/modules/workspace/__tests__/file-stat-access.test.ts +301 -0
  1205. package/src/modules/workspace/__tests__/git-internals.security.test.ts +792 -0
  1206. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +464 -0
  1207. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +139 -0
  1208. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +189 -37
  1209. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +51 -11
  1210. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +161 -0
  1211. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +109 -10
  1212. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +624 -0
  1213. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +409 -0
  1214. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +327 -0
  1215. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +31 -13
  1216. package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +109 -0
  1217. package/src/modules/workspace/__tests__/workspace.service.list-cloned.test.ts +94 -0
  1218. package/src/modules/workspace/__tests__/workspace.service.missing-branch.test.ts +28 -0
  1219. package/src/modules/workspace/__tests__/workspace.service.move-never-overwrites.test.ts +218 -0
  1220. package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +98 -13
  1221. package/src/modules/workspace/__tests__/workspace.service.test.ts +811 -42
  1222. package/src/modules/workspace/__tests__/workspace.service.unknown-branch.test.ts +197 -0
  1223. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +128 -0
  1224. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +212 -0
  1225. package/src/modules/workspace/__tests__/workspace.tools.test.ts +2632 -110
  1226. package/src/modules/workspace/__tests__/write-denial.test.ts +75 -0
  1227. package/src/modules/workspace/empty-dirs.ts +79 -0
  1228. package/src/modules/workspace/file-readers/README.md +32 -0
  1229. package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +59 -2
  1230. package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +133 -4
  1231. package/src/modules/workspace/file-readers/__tests__/fixtures/soft-break.docx +0 -0
  1232. package/src/modules/workspace/file-readers/__tests__/fixtures/tab.docx +0 -0
  1233. package/src/modules/workspace/file-readers/content-mode.ts +87 -0
  1234. package/src/modules/workspace/file-readers/doc-extract.service.ts +4 -1
  1235. package/src/modules/workspace/file-readers/doc-extract.types.ts +8 -4
  1236. package/src/modules/workspace/file-readers/document-reader.ts +6 -0
  1237. package/src/modules/workspace/file-readers/extract-docx.ts +6 -0
  1238. package/src/modules/workspace/file-readers/file-reader.registry.ts +9 -1
  1239. package/src/modules/workspace/file-readers/file-reader.ts +27 -6
  1240. package/src/modules/workspace/file-readers/image-reader.ts +10 -5
  1241. package/src/modules/workspace/file-readers/ooxml-text.ts +38 -2
  1242. package/src/modules/workspace/file-readers/text-reader.ts +61 -4
  1243. package/src/modules/workspace/git-internals.middleware.ts +86 -0
  1244. package/src/modules/workspace/not-found.ts +119 -0
  1245. package/src/modules/workspace/session-ontology.gate.ts +1 -1
  1246. package/src/modules/workspace/startup/__tests__/beside-checkout.test.ts +181 -0
  1247. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +361 -0
  1248. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +53 -16
  1249. package/src/modules/workspace/startup/beside-checkout.ts +112 -0
  1250. package/src/modules/workspace/startup/kb-git.ts +43 -36
  1251. package/src/modules/workspace/startup/kb-startup-runner.ts +303 -63
  1252. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +1405 -48
  1253. package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +460 -417
  1254. package/src/modules/workspace/startup/steps/personal-spaces.step.ts +191 -0
  1255. package/src/modules/workspace/startup/steps/plugin-display-names.step.ts +169 -0
  1256. package/src/modules/workspace/startup/steps/plugin-layout.ts +110 -0
  1257. package/src/modules/workspace/startup/steps/plugin-manifests.step.ts +90 -0
  1258. package/src/modules/workspace/startup/steps/roles-yaml.step.ts +6 -12
  1259. package/src/modules/workspace/startup/steps/seed-tree.ts +177 -54
  1260. package/src/modules/workspace/startup/steps/template-files.step.ts +581 -126
  1261. package/src/modules/workspace/startup/steps/template-source.ts +168 -0
  1262. package/src/modules/workspace/workspace.routes.ts +691 -269
  1263. package/src/modules/workspace/workspace.service.ts +1071 -292
  1264. package/src/modules/workspace/workspace.tools.ts +1787 -180
  1265. package/src/modules/workspace/write-denial.ts +189 -0
  1266. package/src/shared/__tests__/canonical-file-identity.test.ts +154 -0
  1267. package/src/shared/__tests__/email-identity.test.ts +35 -0
  1268. package/src/shared/__tests__/filename.test.ts +0 -0
  1269. package/src/shared/__tests__/frontmatter-id.test.ts +5 -0
  1270. package/src/shared/__tests__/git-failure.test.ts +198 -0
  1271. package/src/shared/__tests__/git-internals.test.ts +115 -0
  1272. package/src/shared/__tests__/http-errors.test.ts +42 -0
  1273. package/src/shared/__tests__/logging.test.ts +185 -0
  1274. package/src/shared/__tests__/path-containment.test.ts +60 -0
  1275. package/src/shared/__tests__/path-order.test.ts +24 -0
  1276. package/src/shared/__tests__/pending-proposals.readAt.test.ts +102 -0
  1277. package/src/shared/__tests__/printable.test.ts +64 -0
  1278. package/src/shared/__tests__/redact-secret.test.ts +122 -0
  1279. package/src/shared/__tests__/rename-no-replace.test.ts +466 -0
  1280. package/src/shared/__tests__/ssrf.test.ts +20 -0
  1281. package/src/shared/__tests__/ttl-cache.test.ts +55 -0
  1282. package/src/shared/canonical-file-identity.ts +92 -0
  1283. package/src/shared/domain-errors.ts +178 -0
  1284. package/src/shared/email-identity.ts +38 -0
  1285. package/src/shared/fs.contract.ts +225 -0
  1286. package/src/shared/git-failure.ts +196 -0
  1287. package/src/shared/git-internals.ts +124 -0
  1288. package/src/shared/git.contract.ts +170 -0
  1289. package/src/shared/http-errors.ts +36 -0
  1290. package/src/shared/logger.contract.ts +141 -0
  1291. package/src/shared/logging.ts +96 -0
  1292. package/src/shared/path-containment.ts +34 -0
  1293. package/src/shared/path-order.ts +33 -0
  1294. package/src/shared/pending-proposals.ts +161 -0
  1295. package/src/shared/printable.ts +68 -0
  1296. package/src/shared/redact-secret.ts +118 -0
  1297. package/src/shared/rename-no-replace.ts +386 -0
  1298. package/src/shared/ssrf.ts +44 -16
  1299. package/src/shared/ttl-cache.ts +33 -1
  1300. package/src/version.ts +10 -6
  1301. package/src/modules/diff/diff-paths.ts +0 -9
  1302. package/src/modules/mcp/__tests__/mcp-session-store.test.ts +0 -151
  1303. package/src/modules/mcp/__tests__/mcp.routes.session.test.ts +0 -226
  1304. package/src/modules/mcp/mcp-session-store.ts +0 -162
  1305. package/src/shared/__tests__/fs-walk.test.ts +0 -42
  1306. package/src/shared/fs-walk.ts +0 -30
  1307. package/src/shared/hash-email.ts +0 -14
@@ -1,3 +1,5 @@
1
+ import path from 'node:path';
2
+ import { logger } from '../shared/logging.js';
1
3
  import type { AuthProviderPlugin } from '../modules/auth/auth.routes.js';
2
4
  import type { AuthUser } from '@bevel-software/platform-shared';
3
5
  import {
@@ -5,7 +7,7 @@ import {
5
7
  configureBranchModel,
6
8
  validateBranchModel,
7
9
  PROTECTED_BRANCHES,
8
- PLUGINS_DIR,
10
+ configureKbLayout,
9
11
  } from '@bevel-software/platform-shared';
10
12
  import { CoreConfig } from '../core-config.js';
11
13
  import { getDb, type Database } from '../modules/database/connection.js';
@@ -15,10 +17,28 @@ import { WorkspaceService } from '../modules/workspace/workspace.service.js';
15
17
  import { RoutineWritePolicyService } from '../modules/workspace/routine-write-policy.js';
16
18
  import { KbStartupRunner } from '../modules/workspace/startup/kb-startup-runner.js';
17
19
  import { GroupsToPluginsStep } from '../modules/workspace/startup/steps/groups-to-plugins.step.js';
20
+ import { PluginDisplayNamesStep } from '../modules/workspace/startup/steps/plugin-display-names.step.js';
21
+ import { PluginManifestsStep } from '../modules/workspace/startup/steps/plugin-manifests.step.js';
22
+ import { PersonalSpacesStep } from '../modules/workspace/startup/steps/personal-spaces.step.js';
18
23
  import { TemplateFilesStep } from '../modules/workspace/startup/steps/template-files.step.js';
19
24
  import { RolesYamlStep } from '../modules/workspace/startup/steps/roles-yaml.step.js';
20
25
  import { buildSeedTree } from '../modules/workspace/startup/steps/seed-tree.js';
21
26
  import { DeploymentSettingsService } from '../modules/settings/deployment-settings.service.js';
27
+ import { KbSyncService } from '../modules/kb-sync/kb-sync.service.js';
28
+ import { NodeFs } from '../modules/kb-fs/node-fs.js';
29
+ import { assertKbDirNameFree } from '../modules/kb-fs/repo-path.js';
30
+ import type { IFsProbe, ITreeWalker } from '../shared/fs.contract.js';
31
+ import type { IGitRunner } from '../shared/git.contract.js';
32
+ import { AdvisoryLease, AdvisoryLock } from '../modules/database/advisory-lock.js';
33
+ import { holdCommitWorkerLease, withStartupTask, type LeaseLoopHandle } from './lifecycle.js';
34
+
35
+ /** The hosted MCP endpoint at a deployment address, with any userinfo stripped. */
36
+ function mcpEndpointUrl(publicBackendUrl: string): string {
37
+ const url = new URL('/api/mcp', publicBackendUrl);
38
+ url.username = '';
39
+ url.password = '';
40
+ return url.toString();
41
+ }
22
42
 
23
43
  /** `a.com, b.com` → `['a.com','b.com']`, tolerating a leading `@` or `.`. */
24
44
  function parseDomainList(raw: string): string[] {
@@ -32,15 +52,41 @@ import { DocExtractService } from '../modules/workspace/file-readers/doc-extract
32
52
  import { UuidSessionSink, type ISessionSink } from '../modules/workspace/session-sink.js';
33
53
  import { AuthService } from '../modules/auth/auth.service.js';
34
54
  import { AccountErasureService } from '../modules/auth/account-erasure.service.js';
35
- import { OidcAuthProvider } from '../modules/auth/oidc-auth-provider.js';
55
+ import { OidcAuthProvider, oidcSettingsFrom } from '../modules/auth/oidc-auth-provider.js';
36
56
  import { createAuthMiddleware } from '../modules/auth/auth.middleware.js';
37
- import { AccessControlService } from '../modules/access/access-control.service.js';
57
+ import { AccessControlService, loadActiveGroups } from '../modules/access/access-control.service.js';
38
58
  import { CreatorAccessService } from '../modules/access/creator-access.js';
59
+ import { ChangeReadGate } from '../modules/access/change-read-gate.js';
39
60
  import { GroupsAdminService } from '../modules/access/groups-admin.service.js';
61
+ import { UserAccessRemovalService } from '../modules/access/user-access-removal.service.js';
40
62
  import { PendingSkillsService, SkillService } from '../modules/skills/index.js';
41
- import { ToolManualService } from '../modules/tool-manuals/index.js';
63
+ import { PendingToolsService, ToolManualService } from '../modules/tool-manuals/index.js';
42
64
  import { McpServerEditService } from '../modules/tool-manuals/mcp-server-edit.service.js';
43
- import { PluginIndexService, PluginProvisionService, JoinRequestsService } from '../modules/plugins/index.js';
65
+ import { ToolDeleteService } from '../modules/tool-manuals/tool-delete.service.js';
66
+ import {
67
+ PluginIndexService,
68
+ pluginFolderBelowRoot,
69
+ PluginProvisionService,
70
+ JoinRequestsService,
71
+ PluginJoinRequestJobs,
72
+ JoinRequestNotReadyError,
73
+ DbJoinRequestStore,
74
+ PluginLinkIndex,
75
+ PluginLinksService,
76
+ PluginRenameService,
77
+ MarketplaceCompilerService,
78
+ KbPluginSource,
79
+ } from '../modules/plugins/index.js';
80
+ import { MarketplaceRepoService } from '../modules/marketplace/index.js';
81
+ import {
82
+ GitHubFacadeCredentialsService,
83
+ GitHubFacade,
84
+ DbGitHubFacadeCodeStore,
85
+ DbGitHubFacadeCredentialsStore,
86
+ CLAUDE_CONSUMER,
87
+ GITHUB_LINK_KEY_KIND,
88
+ GITHUB_LINK_KEY_SPEC,
89
+ } from '../modules/marketplace/github-facade/index.js';
44
90
  import {
45
91
  DbSecretsVaultService,
46
92
  McpOAuthDiscoveryService,
@@ -48,6 +94,7 @@ import {
48
94
  } from '../modules/secrets-vault/index.js';
49
95
  import { ConnectionProbeService } from '../modules/connection-probe/index.js';
50
96
  import { GitService } from '../modules/workflow/git/git.service.js';
97
+ import { NodeGitRunner } from '../modules/workflow/git/node-git-runner.js';
51
98
  import { PullRequestService } from '../modules/workflow/git/pull-request.service.js';
52
99
  import { WorkspaceMutex } from '../modules/kb-fs/mutex.js';
53
100
  import { assertGitVersion } from '../modules/workflow/git/git-version.js';
@@ -82,8 +129,8 @@ import {
82
129
  createManualAuthMiddleware,
83
130
  } from '../modules/tool-auth/tool-auth.middleware.js';
84
131
  import { unmeteredLlmUsage, type ILlmUsageMeter } from '../modules/tool-auth/llm-usage-meter.js';
85
- import { McpSessionStore } from '../modules/mcp/mcp-session-store.js';
86
132
  import { McpService } from '../modules/mcp/mcp.service.js';
133
+ import { readAgentPreamble, type AgentPreambleReader } from '../modules/agent-instructions/index.js';
87
134
  import { createMcpAuthMiddleware } from '../modules/mcp/mcp-auth.middleware.js';
88
135
  import { BevelOAuthProvider } from '../modules/mcp/oauth/bevel-oauth-provider.js';
89
136
  import { getOAuthProtectedResourceMetadataUrl } from '@modelcontextprotocol/sdk/server/auth/router.js';
@@ -94,6 +141,7 @@ import { TokenCrypto } from '../shared/token-crypto.js';
94
141
  import { UpdateCheckService } from '../modules/update-check/update-check.service.js';
95
142
  import { resolveAppVersion } from '../version.js';
96
143
  import { noopRecoveryAgent, type CorePorts } from './core-ports.js';
144
+ import { registerCatalogCacheInvalidation } from './catalog-cache-invalidation.js';
97
145
 
98
146
  /**
99
147
  * Everything the CORE composition builds: the core services `createCoreServer`
@@ -108,6 +156,26 @@ import { noopRecoveryAgent, type CorePorts } from './core-ports.js';
108
156
  export interface CoreServices {
109
157
  config: CoreConfig;
110
158
  db: Database;
159
+ /**
160
+ * Reading the disk without locks — the one tree walk and the one path
161
+ * probe (see `shared/fs.contract.ts`). Every core module that reads a
162
+ * checkout is handed this; an overlay's own readers take it too, rather
163
+ * than carrying a `readdir` loop or an errno check of their own.
164
+ */
165
+ disk: ITreeWalker & IFsProbe;
166
+ /**
167
+ * Running git — the one runner every module shells out through, carrying
168
+ * the deployment's deadline. Exposed like `disk` so an overlay's own git
169
+ * callers run under the same ceiling rather than spawning their own.
170
+ */
171
+ gitRunner: IGitRunner;
172
+ /**
173
+ * The commit-worker lease loop (see `core/lifecycle.ts`). `held` says
174
+ * whether THIS process is the one draining the queue; `stop()` is the
175
+ * shutdown sequence's way of finishing the in-flight commit and handing the
176
+ * lease to the replacement.
177
+ */
178
+ commitWorker: LeaseLoopHandle;
111
179
  workspaceService: WorkspaceService;
112
180
  /**
113
181
  * The KB startup phase (see `startup/on-server-start.ts`): run at the
@@ -119,15 +187,45 @@ export interface CoreServices {
119
187
  docExtractService: DocExtractService;
120
188
  accessControl: AccessControlService;
121
189
  creatorAccess: CreatorAccessService;
190
+ /** Read-before-write, for the surfaces that ask ahead of the lock (see `access-model/change-gate.ts`). */
191
+ changeGate: ChangeReadGate;
122
192
  sessionOntologyService: SessionOntologyService;
123
193
  routineWritePolicy: RoutineWritePolicyService;
124
194
  skillService: SkillService;
125
195
  pendingSkillsService: PendingSkillsService;
126
196
  toolManualService: ToolManualService;
197
+ pendingToolsService: PendingToolsService;
198
+ /**
199
+ * Reads the admin's `mcp-description.md` on the default branch with
200
+ * platform rights: the one reader behind every MCP session's instructions
201
+ * and `GET /api/agent/instructions`. See modules/agent-instructions.
202
+ */
203
+ readAgentPreamble: AgentPreambleReader;
127
204
  mcpServerEditService: McpServerEditService;
205
+ /** Deleting one tool — the owner's verb (see ToolDeleteService). */
206
+ toolDeleteService: ToolDeleteService;
128
207
  pluginIndexService: PluginIndexService;
129
208
  pluginProvisionService: PluginProvisionService;
130
209
  joinRequestsService: JoinRequestsService;
210
+ /**
211
+ * Records a join request and finishes it in the background. Its `sweep()`
212
+ * runs once at boot — see `createCoreServer`, after the knowledge-base
213
+ * startup phase — so a request recorded before a restart is completed or
214
+ * marked failed after it rather than lost.
215
+ */
216
+ pluginJoinRequestJobs: PluginJoinRequestJobs;
217
+ /** Which plugins hold which skills (inline or linked) — see `PluginLinkIndex`. */
218
+ pluginLinkIndex: PluginLinkIndex;
219
+ /** Link / unlink / repair shared skills into plugins. */
220
+ pluginLinksService: PluginLinksService;
221
+ pluginRenameService: PluginRenameService;
222
+ /** Source layout → distribution layout, for one audience. */
223
+ marketplaceCompiler: MarketplaceCompilerService;
224
+ /** The bare repository the per-user marketplace git endpoint serves from. */
225
+ marketplaceRepo: MarketplaceRepoService;
226
+ /** The GitHub Enterprise facade products such as claude.ai add the marketplace through. */
227
+ githubFacade: GitHubFacade;
228
+ githubFacadeCredentials: GitHubFacadeCredentialsService;
131
229
  authService: AuthService;
132
230
  authMiddleware: ReturnType<typeof createAuthMiddleware>;
133
231
  accountErasureService: AccountErasureService;
@@ -137,6 +235,8 @@ export interface CoreServices {
137
235
  reviewWorkflowService: ReviewWorkflowService;
138
236
  fileLockService: FileLockService;
139
237
  workflowService: WorkflowService;
238
+ /** Remote sync (`POST /api/sync`): a git host or pipeline makes the clones catch up. */
239
+ kbSyncService: KbSyncService;
140
240
  eventBus: WorkflowEventBus;
141
241
  fileChangeNotifier: FileChangeNotifier;
142
242
  pendingCommitsService: PendingCommitsService;
@@ -145,6 +245,8 @@ export interface CoreServices {
145
245
  adminAccess: AdminAccessService;
146
246
  /** Manual-mode groups CRUD + the manual→IdP retirement half. */
147
247
  groupsAdminService: GroupsAdminService;
248
+ /** Removes a deleted account's address from roles, groups and access rules. */
249
+ userAccessRemovalService: UserAccessRemovalService;
148
250
  /**
149
251
  * Build the debounced directory → `synced-groups.yaml` materializer for a
150
252
  * directory source an OVERLAY provides (e.g. a SCIM mirror fed by the IdP's
@@ -242,6 +344,15 @@ export async function createCoreServices(
242
344
  protectedBranches: settings.resolve('protectedBranches'),
243
345
  };
244
346
  if (!validateBranchModel(branchModel)) configureBranchModel(branchModel);
347
+ // The layout variables that were retired this release, folded into their
348
+ // saved settings before anything reads the layout — so the boot that imports
349
+ // them also RUNS on the imported names rather than on the defaults.
350
+ await settings.importLegacyLayoutEnv();
351
+ // The KB layout — the three renameable roots and the agent guide's file name
352
+ // — applied the same way and at the same moment, before any service captures
353
+ // one of them. Unlike the branch model it always resolves (every name has a
354
+ // default), so an invalid value is a real misconfiguration and stops the boot.
355
+ configureKbLayout(settings.resolveKbLayout());
245
356
  // A token supplied through the setup screen has to reach the credential
246
357
  // helper, which reads `$GITHUB_TOKEN` at call time.
247
358
  settings.syncGitTokenEnv();
@@ -251,11 +362,25 @@ export async function createCoreServices(
251
362
  // The remote URL and username are read per-operation instead, so an admin
252
363
  // finishing setup can clone immediately without bouncing the process.
253
364
  const kbDirName = settings.resolve('kbDirName') || 'knowledge-base';
365
+ // A checkout folder named like one of the repository's own roots would make
366
+ // every path under that root read as the checkout itself, and the root
367
+ // unnameable. Both are operator settings, so the collision is refused here,
368
+ // by name, before any service captures either.
369
+ assertKbDirNameFree(kbDirName, settings.resolveKbLayout());
370
+ // The disk: one walk, one probe, for every reader below.
371
+ const disk = new NodeFs();
372
+ // How git is run, for every module that runs it: one environment, one buffer
373
+ // ceiling, one error shape, and — the reason it exists — one deadline, so a
374
+ // git that never returns cannot hold a workspace (and with it the commit
375
+ // queue) open indefinitely. See `shared/git.contract.ts`.
376
+ const gitRunner = new NodeGitRunner(config.gitTimeoutMs);
254
377
  const workspaceService = new WorkspaceService(
255
378
  config.workspacesRoot,
256
379
  () => settings.resolve('kbRepoUrl'),
257
380
  kbDirName,
381
+ disk,
258
382
  () => settings.resolve('gitUsername') || 'x-access-token',
383
+ gitRunner,
259
384
  );
260
385
  // The KB startup phase: every seeding, scaffolding and migration concern,
261
386
  // run through one runner at the deployment's quiet moments (boot + setup
@@ -268,9 +393,23 @@ export async function createCoreServices(
268
393
  // reshapes trees the template top-up would otherwise re-scaffold — then
269
394
  // whatever the distribution appends.
270
395
  const kbStartupSteps = [
271
- new GroupsToPluginsStep(),
272
- new TemplateFilesStep(extraDirs),
273
- new RolesYamlStep([config.adminEmail]),
396
+ // (The note about anything sitting BESIDE a checkout is not a step: it is
397
+ // read-only, needs no remote, and must be said even on a deployment whose
398
+ // setup never finished — so `noteBesideCheckout` runs once from the server
399
+ // builder, ahead of this gated phase.)
400
+ new GroupsToPluginsStep(disk),
401
+ new PluginManifestsStep(disk),
402
+ // After the manifests step: a folder that only just got its manifest got
403
+ // one the renderer wrote, which already carries the display name — the
404
+ // backfill then has nothing to do for it. Ordered the other way, the
405
+ // backfill would walk a tree still missing those manifests.
406
+ new PluginDisplayNamesStep(disk),
407
+ new PersonalSpacesStep(disk),
408
+ // A getter, not a value: the step is built here, while the process may
409
+ // still hold the defaults, and the save that completes first-run setup
410
+ // applies the admin's answer afterwards.
411
+ new TemplateFilesStep(disk, extraDirs, () => settings.resolveAgentsFileLink()),
412
+ new RolesYamlStep(disk, [config.adminEmail]),
274
413
  ...(ports.kbStartupSteps ?? []),
275
414
  ];
276
415
  const kbStartupRunner = new KbStartupRunner({
@@ -279,6 +418,7 @@ export async function createCoreServices(
279
418
  // the first thing that needs them.
280
419
  kbRepoUrl: () => settings.resolve('kbRepoUrl'),
281
420
  gitUsername: () => settings.resolve('gitUsername') || 'x-access-token',
421
+ gitToken: () => settings.resolve('gitToken'),
282
422
  workspacesRoot: config.workspacesRoot,
283
423
  kbDirName,
284
424
  templateDir: config.kbTemplateDir,
@@ -288,7 +428,8 @@ export async function createCoreServices(
288
428
  // same answer `SEED_ADMIN_EMAILS` used to ask for a second time.
289
429
  seedAdminEmails: [config.adminEmail],
290
430
  steps: kbStartupSteps,
291
- buildSeedTree: buildSeedTree(config.kbTemplateDir, extraDirs, [config.adminEmail]),
431
+ buildSeedTree: buildSeedTree(disk, config.kbTemplateDir, extraDirs, [config.adminEmail]),
432
+ gitRunner,
292
433
  });
293
434
  // Shared, workspace-independent store for oversized `call_tool_chain` results,
294
435
  // read back via `read_file`. Sibling of `workspacesRoot`, never committed.
@@ -300,15 +441,24 @@ export async function createCoreServices(
300
441
  // rescues (`roles.yaml` and any `access.md`) — the SAME list
301
442
  // `AdminAccessService` below is given, so the admin surfaces and the write
302
443
  // gate cannot disagree about who the owner is. They did: the owner could
303
- // open Roles & Members and then be refused the save, with the UI showing
444
+ // open App roles and then be refused the save, with the UI showing
304
445
  // them as an admin and the gate saying "Eligible: Admin".
305
- const accessControl = new AccessControlService(workspaceService, kbDirName, [
306
- config.adminEmail,
307
- ]);
308
- // Creator read-grant on creation: read is default-deny, so every surface
309
- // that creates KB files/folders (human routes, agent tools, upload apply)
310
- // consults this planner to keep creations visible to their creator.
311
- const creatorAccess = new CreatorAccessService(workspaceService, accessControl, kbDirName);
446
+ const accessControl = new AccessControlService(
447
+ workspaceService,
448
+ kbDirName,
449
+ disk,
450
+ [config.adminEmail],
451
+ gitRunner,
452
+ );
453
+ // Creator read-grant on creation: read is default-deny and the roots grant
454
+ // it to nobody, so every surface that starts a new folder at a root (human
455
+ // routes, agent tools, upload apply) consults this planner to keep the new
456
+ // folder visible to its creator.
457
+ const creatorAccess = new CreatorAccessService(workspaceService, accessControl, kbDirName, disk);
458
+ // Read-before-write: the gate every lock acquire asks, on every branch —
459
+ // nothing is created, changed or removed where its author cannot read,
460
+ // except that new folder at a root (see `access-model/change-gate.ts`).
461
+ const changeGate = new ChangeReadGate(workspaceService, accessControl, kbDirName, disk);
312
462
 
313
463
  // Ontology-session boundary: records each agent run's touched ontologies and
314
464
  // blocks writes once a run has crossed ontologies. Postgres-backed so the
@@ -320,21 +470,31 @@ export async function createCoreServices(
320
470
  // one run, unlike the Postgres-backed ontology touched-set above.
321
471
  const routineWritePolicy = new RoutineWritePolicyService();
322
472
  // Skills: discovered from the default-branch workspace only (global catalog).
323
- const skillService = new SkillService(workspaceService, accessControl, kbDirName);
473
+ const skillService = new SkillService(workspaceService, accessControl, kbDirName, disk);
324
474
  // Tool manuals: user-authored `*.tool` files under `Plugins/` in the default
325
475
  // branch — access-controlled like Skills, served to external agents via
326
476
  // `GET /api/agent/all-tools` and registered on the MCP proxy's UTCP client.
327
- const toolManualService = new ToolManualService(workspaceService, accessControl, kbDirName);
477
+ // Where plugins come from: one walk of the plugins root that reads every
478
+ // plugin folder in whichever file shape it carries (see
479
+ // modules/plugins/discovery). Nothing to configure, nothing to document.
480
+ const pluginSource = new KbPluginSource(disk);
481
+ const toolManualService = new ToolManualService(workspaceService, accessControl, kbDirName, disk, pluginSource);
328
482
  // Plugins: the folders under `Plugins/` that carry a
329
483
  // team's skills AND the tools they need. Enumerated for EVERY authenticated
330
484
  // caller — a plugin they cannot read still exists for them, as a locked one —
331
485
  // with the counts read off the two catalogs above rather than a second scan.
486
+ // The link index resolves manifests against the released catalog, and the
487
+ // plugin index counts through it (inline + linked), so it comes first.
488
+ const pluginLinkIndex = new PluginLinkIndex(workspaceService, skillService, accessControl, kbDirName, pluginSource);
332
489
  const pluginIndexService = new PluginIndexService(
333
490
  workspaceService,
334
491
  accessControl,
335
492
  skillService,
336
493
  toolManualService,
337
494
  kbDirName,
495
+ pluginSource,
496
+ Date.now,
497
+ pluginLinkIndex,
338
498
  );
339
499
  // Auth service — resolves identities for login, PR author attribution, and
340
500
  // access lookups. (Change requests now store the author email directly, so
@@ -346,6 +506,7 @@ export async function createCoreServices(
346
506
  adminEmail: config.adminEmail,
347
507
  adminPassword: config.adminPassword,
348
508
  allowedEmailDomains: parseDomainList(settings.resolve('allowedEmailDomains')),
509
+ loginPasswordEnabled: config.loginPasswordEnabled,
349
510
  });
350
511
  const authMiddleware = createAuthMiddleware(authService);
351
512
 
@@ -365,15 +526,25 @@ export async function createCoreServices(
365
526
  kbDirName,
366
527
  workspaceMutex,
367
528
  accessControl,
529
+ gitRunner,
368
530
  );
531
+ // `get_skill` with a `version` reads the skill out of the default branch's
532
+ // history; the skill service is built before git exists, so git is handed
533
+ // to it here.
534
+ skillService.setHistory(gitService);
369
535
  // A fresh clone has already fetched every ref — let the git layer skip the
370
536
  // redundant implicit `git fetch` on the first `listBranches` after bootstrap.
371
537
  workspaceService.setWorkspaceClonedListener((id) => gitService.noteWorkspaceFetched(id));
538
+ // A branch listing is also the platform's memory of which branch names it
539
+ // has ever heard of — what tells a deleted branch (410) from one that never
540
+ // existed (404) when a bootstrap finds no such ref on origin.
541
+ gitService.setBranchesListedListener((names) => workspaceService.noteBranchesListed(names));
372
542
  const pullRequestService = new PullRequestService(
373
543
  db,
374
544
  workspaceService,
375
545
  accessControl,
376
546
  gitService,
547
+ config.configuredPublicFrontendUrl,
377
548
  );
378
549
  const diffService = new DiffService(
379
550
  workspaceService,
@@ -381,6 +552,7 @@ export async function createCoreServices(
381
552
  config.workspacesRoot,
382
553
  config.backupsRoot,
383
554
  kbDirName,
555
+ disk,
384
556
  );
385
557
  // Late-bind the diff service into WorkspaceService so file writes/moves
386
558
  // trigger backup updates. (GitService used to take a diffService too — for
@@ -437,6 +609,7 @@ export async function createCoreServices(
437
609
  fileLockService,
438
610
  pendingCommitsService,
439
611
  kbDirName,
612
+ changeGate,
440
613
  eventBus,
441
614
  fileChangeNotifier,
442
615
  // Exposed as `workflowService.hooks` — the SAME instance GitService and
@@ -450,6 +623,98 @@ export async function createCoreServices(
450
623
  // only needs to read files at refs and to close a request whose proposals
451
624
  // have all landed.
452
625
  const joinRequestsService = new JoinRequestsService(workspaceService, workflowService);
626
+ // The OTHER half of a join request: the row the subscribe endpoint writes
627
+ // before it answers, and the branch/clone/commit/push/change-request work
628
+ // that runs against it afterwards. The row is what lets the click be
629
+ // answered in a database round-trip instead of a clone, and what survives a
630
+ // restart with the request still owed.
631
+ const pluginJoinRequestJobs = new PluginJoinRequestJobs(new DbJoinRequestStore(db), {
632
+ workflow: workflowService,
633
+ workspaceService,
634
+ kbDirName,
635
+ // A record keys on the plugin's primary FOLDER below the root, which the
636
+ // catalog is the only thing that can turn back into a path and a name
637
+ // people read. Null once nothing answers to the key — a deleted plugin,
638
+ // a moved folder — which the job records as a failure the requester sees.
639
+ //
640
+ // An EMPTY catalog is not that. Discovery degrades to empty whenever it
641
+ // cannot read the knowledge base — a boot that has not finished cloning,
642
+ // a remote that blipped — and answering "null" then would tell everyone
643
+ // with a request outstanding that their plugin is gone, permanently, for
644
+ // a fault that healed in seconds. A request is only refused when the
645
+ // catalog has something to say and this key is absent from it; when it
646
+ // has nothing to say at all, the failure is raised as a transient one, so
647
+ // the row stays `pending` for the next sweep to retry.
648
+ target: async (pluginKey) => {
649
+ const catalog = await pluginIndexService.catalog();
650
+ if (catalog.length === 0) {
651
+ throw new JoinRequestNotReadyError('the plugin catalog is not available yet');
652
+ }
653
+ const entry = catalog.find((g) => pluginFolderBelowRoot(g.folders[0]) === pluginKey);
654
+ return entry ? { folder: entry.folders[0], displayName: entry.displayName } : null;
655
+ },
656
+ requester: (email) => authService.getUserByEmail(email),
657
+ });
658
+ // Links land as ordinary default-branch commits and change what the plugin
659
+ // index counts, so a link drops that cache too.
660
+ const pluginLinksService = new PluginLinksService(
661
+ workspaceService,
662
+ workflowService,
663
+ accessControl,
664
+ skillService,
665
+ pluginLinkIndex,
666
+ kbDirName,
667
+ eventBus,
668
+ () => pluginIndexService.invalidate(),
669
+ );
670
+ // A rename rewrites grants across the knowledge base in one batch commit,
671
+ // then drops every cache that keyed on the old identity.
672
+ const pluginRenameService = new PluginRenameService(
673
+ workspaceService,
674
+ workflowService,
675
+ accessControl,
676
+ pluginSource,
677
+ disk,
678
+ kbDirName,
679
+ eventBus,
680
+ () => {
681
+ pluginIndexService.invalidate();
682
+ pluginLinkIndex.invalidate();
683
+ },
684
+ );
685
+ // Source → distribution. The marketplace's identity is fixed for now; the
686
+ // per-user git endpoint and any mirror both compile through this.
687
+ const marketplaceCompiler = new MarketplaceCompilerService(
688
+ workspaceService,
689
+ accessControl,
690
+ skillService,
691
+ pluginLinkIndex,
692
+ kbDirName,
693
+ {
694
+ name: 'hexis',
695
+ owner: 'Hexis',
696
+ description: 'Skills and plugins from this knowledge base',
697
+ // The knowledge base as a tool, shipped in the skills plugin so an
698
+ // agent installing from the marketplace can read what its skills refer
699
+ // to. The same address `/api/config` and the OAuth metadata publish,
700
+ // userinfo stripped; the client's OAuth flow supplies the identity.
701
+ knowledgeBaseMcp: { name: 'hexis', url: mcpEndpointUrl(config.publicBackendUrl) },
702
+ },
703
+ pluginSource,
704
+ disk,
705
+ gitRunner,
706
+ );
707
+ // Sibling of the workspaces root, like the spill store: one bare repo, one
708
+ // git namespace per caller (see marketplace-repo.service.ts).
709
+ const marketplaceRepo = new MarketplaceRepoService(
710
+ path.resolve(config.workspacesRoot, '..', 'marketplace.git'),
711
+ marketplaceCompiler,
712
+ gitRunner,
713
+ );
714
+
715
+ // Remote sync. Drives the workflow module's per-branch pull-and-announce
716
+ // over every clone the workspace service knows about; owns no git of its own.
717
+ const kbSyncService = new KbSyncService(workflowService, workspaceService);
453
718
  // Server-scoped MCP editing — the tool page's edit form. One server's truth
454
719
  // spans a plugin's mcp.json AND plugin.json extensions block, and this is
455
720
  // the ONE writer that rewrites both entries and commits them together (see
@@ -460,6 +725,7 @@ export async function createCoreServices(
460
725
  accessControl,
461
726
  toolManualService,
462
727
  kbDirName,
728
+ disk,
463
729
  );
464
730
 
465
731
  // Plugin provisioning — the one privileged door that brings `Plugins/<name>/`
@@ -472,6 +738,8 @@ export async function createCoreServices(
472
738
  accessControl,
473
739
  kbDirName,
474
740
  eventBus,
741
+ pluginSource,
742
+ disk,
475
743
  );
476
744
 
477
745
  // Pending skills: the other half of the catalog — skills that exist only on
@@ -486,43 +754,29 @@ export async function createCoreServices(
486
754
  workflowService,
487
755
  );
488
756
 
489
- // Subscriber A — catalog freshness: a committed change drops the affected
490
- // caches immediately instead of waiting out their TTLs. The tool/skill
491
- // catalogs are global but read the DEFAULT branch only, so only
492
- // default-branch changes under their folders matter. (The kb-graph id-index
493
- // invalidation that used to live in this subscriber is registered by the
494
- // enterprise overlay, next to the kb-graph service it belongs to — the
495
- // caches are independent, so the split preserves behavior.)
496
- fileChangeNotifier.onFilesChanged(({ branch, paths }) => {
497
- if (branch !== DEFAULT_BRANCH) return;
498
- // Skills, tools and the plugin index all live under `Plugins/`, so one
499
- // touch check drives all three caches. An access grant lands as a
500
- // default-branch change to `Plugins/<plugin>/access.md`, so this is also
501
- // what makes a newly-granted plugin unlock within one round-trip instead
502
- // of one TTL.
503
- const touched = paths.some((p) => p.startsWith(`${kbDirName}/${PLUGINS_DIR}/`));
504
- if (touched) {
505
- toolManualService.invalidate();
506
- skillService.invalidate();
507
- pluginIndexService.invalidate();
508
- }
509
-
510
- });
757
+ // The same missing half, for tools: a `.tool` manual or an `mcp.json` server
758
+ // an agent proposes is nowhere in the product until its change request
759
+ // merges. Built here for the same reason — it needs the workflow service —
760
+ // and stateless for the same reason.
761
+ const pendingToolsService = new PendingToolsService(
762
+ workspaceService,
763
+ accessControl,
764
+ toolManualService,
765
+ workflowService,
766
+ );
511
767
 
512
- // Subscriber B — WRITE-time freshness for the same three caches. The
513
- // workspace routes emit `fs-tree-changed` the moment bytes hit a working
514
- // tree; Subscriber A above fires only when the ASYNC commit lands. Between
515
- // the two, "create a skill, reload the catalog" raced the commit pipeline
516
- // and lost — the new skill's card stayed invisible until a refresh outlived
517
- // the TTL. The catalogs scan the working tree anyway, so invalidating at
518
- // write time makes the very next read see the file. No path filter: this
519
- // event carries none, and a spurious drop only costs one re-scan.
520
- eventBus.onEmit((event) => {
521
- if (event.kind !== 'fs-tree-changed') return;
522
- if (!('branch' in event) || event.branch !== DEFAULT_BRANCH) return;
523
- toolManualService.invalidate();
524
- skillService.invalidate();
525
- pluginIndexService.invalidate();
768
+ // Catalog freshness: the skill / tool-manual / plugin-index caches all scan
769
+ // the DEFAULT branch's working tree, and all three go stale on the same
770
+ // events (a commit, a working-tree write, a merge) — as does the access
771
+ // model they are filtered through. Wired in one place so a new way of
772
+ // reaching the default branch cannot refresh two of them and leave the
773
+ // third serving last minute's answer.
774
+ registerCatalogCacheInvalidation({
775
+ eventBus,
776
+ fileChangeNotifier,
777
+ kbDirName,
778
+ catalogs: [toolManualService, skillService, pluginIndexService, pluginLinkIndex],
779
+ accessControl,
526
780
  });
527
781
 
528
782
  // Admin = `Admin` role in roles.yaml, resolved through the access model on the
@@ -564,6 +818,24 @@ export async function createCoreServices(
564
818
  // UTCP client can resolve `${VAR}` from the caller's secrets at tool-call time.
565
819
  registerBevelSecretsVariableLoader(secretsVaultService);
566
820
 
821
+ // Deleting ONE tool from its page — the owner's verb, the other end of the
822
+ // promise that made them the owner. Built here because it is the one service
823
+ // that spans both halves of a tool: the definition (a `.tool` file or an
824
+ // mcp.json entry) and the credentials stored under its name, which is why it
825
+ // can only exist once the vault does.
826
+ const toolDeleteService = new ToolDeleteService(
827
+ workspaceService,
828
+ workflowService,
829
+ accessControl,
830
+ toolManualService,
831
+ skillService,
832
+ pluginIndexService,
833
+ pluginSource,
834
+ secretsVaultService,
835
+ kbDirName,
836
+ disk,
837
+ );
838
+
567
839
  // The credential probe: whether a tool's stored credential actually WORKS, as
568
840
  // distinct from whether one is stored. Built here — after the vault and the
569
841
  // tool catalog — because a probe needs both: the catalog to know what to
@@ -601,18 +873,49 @@ export async function createCoreServices(
601
873
 
602
874
  // GDPR erasure path: admin-driven user deletion. The core service erases the
603
875
  // rows it owns; each module contributes its slice as a participant.
604
- const accountErasureService = new AccountErasureService(db, ports.erasureParticipants ?? []);
876
+ const accountErasureService = new AccountErasureService(
877
+ db,
878
+ reviewWorkflowService,
879
+ ports.erasureParticipants ?? [],
880
+ );
605
881
 
606
882
  // MCP (remote agent access). ExternalApiKeyService handles connection-key
607
- // lifecycle; McpSessionStore holds per-session userId in memory
608
- // (single-replica — see docs/mcp-remote-access.md). McpService is now a
609
- // GENERIC proxy: per session it discovers the UTCP manual at /api/agent/utcp
610
- // over loopback and re-exposes every tool, dispatching calls back through the
611
- // REST tool surface (so agent logic + metering live there, once).
612
- const externalApiKeyService = new ExternalApiKeyService(db, config.externalApiKeyPrefix);
613
- const mcpSessionStore = new McpSessionStore();
883
+ // lifecycle. McpService is a GENERIC, STATELESS proxy: per request it
884
+ // discovers the caller's catalog at /api/agent/all-tools over loopback and
885
+ // re-exposes every tool, dispatching calls back through the REST tool
886
+ // surface (so agent logic + metering live there, once). No MCP session is
887
+ // kept, so a restart is invisible to connected clients.
888
+ // Connection keys also come as GitHub-shaped links (`gho_…`, kind
889
+ // `github-link`): the same key, minted by the marketplace facade below when
890
+ // a person connects an account on claude.ai, told apart by its stored kind.
891
+ const externalApiKeyService = new ExternalApiKeyService(db, config.externalApiKeyPrefix, {
892
+ [GITHUB_LINK_KEY_KIND]: GITHUB_LINK_KEY_SPEC,
893
+ });
894
+
895
+ // The facade that lets products which sync marketplaces only from a GitHub
896
+ // Enterprise Server (claude.ai, Cowork) add the per-user marketplace:
897
+ // generated app credentials an Owner registers once, and the connect flow
898
+ // that turns a hexis session into a connection key the product holds.
899
+ // Reuses the MCP flow's signed state and /connect page — see
900
+ // modules/marketplace/github-facade.
901
+ const githubFacadeCredentials = new GitHubFacadeCredentialsService(
902
+ new DbGitHubFacadeCredentialsStore(db, config.secretsEncKey ? new TokenCrypto(config.secretsEncKey) : null),
903
+ );
904
+ const githubFacade = new GitHubFacade({
905
+ credentials: githubFacadeCredentials,
906
+ codes: new DbGitHubFacadeCodeStore(db),
907
+ keys: externalApiKeyService,
908
+ consumers: [CLAUDE_CONSUMER],
909
+ stateSecret: config.jwtSecret,
910
+ publicFrontendUrl: config.publicFrontendUrl,
911
+ });
912
+ // What every connected agent is told at initialize: the admin's preamble
913
+ // at the repository root, read as the platform (the root is default-deny
914
+ // for readers, and the preamble is a broadcast). One reader, two consumers:
915
+ // the proxy below composes in-process per request; the agent-facing route
916
+ // serves the same composition to the local bridge and the frontend card.
917
+ const readPreamble: AgentPreambleReader = () => readAgentPreamble(workspaceService, kbDirName, disk);
614
918
  const mcpService = new McpService(
615
- mcpSessionStore,
616
919
  {
617
920
  // Loopback to our own REST tool surface — 127.0.0.1 (not localhost) to pin
618
921
  // IPv4 and dodge resolver ambiguity. The proxy authenticates each call with
@@ -620,30 +923,31 @@ export async function createCoreServices(
620
923
  loopbackBaseUrl: `http://127.0.0.1:${config.port}`,
621
924
  // Manual namespace + UTCP variable prefix (KNOWLEDGE_BASE_API_URL / …).
622
925
  manualName: 'KNOWLEDGE_BASE',
623
- // Oversized chain results spill here too — an external MCP session has no
926
+ // Oversized chain results spill here too — an external MCP caller has no
624
927
  // ambient workspace, so it reads the spill back by ref via `read_file`.
625
928
  spillStore,
626
929
  // For the needs-authorization setup link surfaced to external agents.
627
930
  publicFrontendUrl: config.publicFrontendUrl,
931
+ readAgentPreamble: readPreamble,
628
932
  },
629
933
  // Pre-dispatch per-user credential check: the vault answers "has this caller
630
934
  // set it?" and the manual catalog answers "which user-scoped vars does this
631
935
  // tool need?".
632
936
  secretsVaultService,
633
937
  toolManualService,
634
- // Loopback bearer mint for OAuth/JWT sessions — their own bearer would
938
+ // Loopback bearer mint for OAuth/JWT requests — their own bearer would
635
939
  // 401 at the connection-key/internal-only /api/agent/* hop.
636
940
  internalTokenService,
637
- // Session-grant reset for broken tool sign-ins. A closure because the
941
+ // Grant reset for broken tool sign-ins. A closure because the
638
942
  // provider is constructed just below (it needs nothing from McpService;
639
943
  // the binding is only dereferenced at call time, long after boot).
640
944
  (bearer) => mcpOAuthProvider.revokeByAccessToken(bearer),
641
945
  );
642
- // A changed secret invalidates the proxy's remembered manual failures for
643
- // that user (null = shared secret → everyone), so a just-repaired
644
- // credential is retried on the very next session build instead of waiting
645
- // out the failure memo's TTL.
646
- secretsVaultService.onMutation((changedUserId) => mcpService.clearManualFailures(changedUserId));
946
+ // A changed secret invalidates what the proxy built from the old value for
947
+ // that user (null = shared secret → everyone): remembered manual failures,
948
+ // so a just-repaired credential is retried on the very next request instead
949
+ // of waiting out the failure memo's TTL, and pooled downstream connections.
950
+ secretsVaultService.onMutation((changedUserId) => mcpService.onSecretsChanged(changedUserId));
647
951
  // MCP OAuth 2.1 authorization server (our own AS): lets MCP clients with no
648
952
  // pre-shared connection key connect via the standard 401 → discovery → DCR →
649
953
  // authorize (PKCE) flow. The authorize step routes the browser to /connect
@@ -688,6 +992,7 @@ export async function createCoreServices(
688
992
  events: eventBus,
689
993
  kbDirName: kbDirName,
690
994
  creatorAccess,
995
+ loadActiveGroups,
691
996
  });
692
997
  const toolHandlerFactory = createToolHandlerFactory(resolveToolContext);
693
998
  const toolAuthMiddleware = createToolAuthMiddleware(externalApiKeyService, internalTokenService);
@@ -707,16 +1012,17 @@ export async function createCoreServices(
707
1012
  // retry budget AND recovery-agent budget exhausted) the worker emits
708
1013
  // a `'system'` feedback notice that admins triage out of band.
709
1014
  //
710
- // The orphan-startup sweep runs BEFORE start() so any rows that
711
- // previous deploys left as `running` (process crashed mid-commit) get
712
- // reset to `pending` before the worker starts claiming. The sweep
713
- // also enqueues working-tree dirt that pre-dates the queue (the
714
- // existing `target-company-state` orphans).
715
- await pendingCommitsService.startupReconcile(
716
- workspaceService.knownWorkspaces(),
717
- { scan: (ws) => workspaceService.scanOrphanedPaths(ws.id) },
718
- { email: recoveryBot.email, name: recoveryBot.name },
719
- );
1015
+ // The queue's recovery — rows a dead process left `running` go back to
1016
+ // `pending`, and working-tree dirt that pre-dates the queue is enqueued —
1017
+ // runs under the commit-worker lease, right before the worker starts (see
1018
+ // `withStartupTask` below). At boot, before the lease, it would reset rows
1019
+ // the outgoing process of a redeploy is still committing.
1020
+ const reconcileQueue = () =>
1021
+ pendingCommitsService.startupReconcile(
1022
+ workspaceService.knownWorkspaces(),
1023
+ { scan: (ws) => workspaceService.scanOrphanedPaths(ws.id) },
1024
+ { email: recoveryBot.email, name: recoveryBot.name },
1025
+ );
720
1026
  const pendingCommitsWorker = new PendingCommitsWorker({
721
1027
  service: pendingCommitsService,
722
1028
  // The service IS the driver — passed directly rather than wrapped in a
@@ -741,33 +1047,39 @@ export async function createCoreServices(
741
1047
  name: recoveryBot.name,
742
1048
  },
743
1049
  });
744
- pendingCommitsWorker.start();
1050
+ const leased = withStartupTask(pendingCommitsWorker, reconcileQueue);
1051
+ // Not `start()`: the worker runs only while this process holds the
1052
+ // commit-worker lease. On a redeploy the outgoing container still holds it,
1053
+ // so this one serves requests and declines to drain until that one exits;
1054
+ // then it takes the lease and starts. Two processes draining one shared
1055
+ // clone volume is the failure this prevents — see `core/lifecycle.ts`.
1056
+ const commitWorker = holdCommitWorkerLease(new AdvisoryLease(db, AdvisoryLock.CommitWorker), leased);
745
1057
 
746
1058
  // SSO providers. The array REFERENCE is shared with the caller's port — an
747
1059
  // overlay pushes its own plugins into it after construction (they mount when
748
- // the server is built, later). Core contributes the generic OIDC provider
749
- // when the env configures one.
1060
+ // the server is built, later). Core contributes the generic OIDC provider.
750
1061
  const authProviders = ports.authProviders ?? [];
751
- // Resolved through settings, so an admin can configure SSO from the setup
752
- // screen instead of the environment. Env still wins, so a deployment that
753
- // sets these keeps behaving exactly as it did.
754
- const oidcIssuerUrl = settings.resolve('oidcIssuerUrl');
755
- const oidcClientId = settings.resolve('oidcClientId');
756
- const oidcClientSecret = settings.resolve('oidcClientSecret');
757
- if (oidcIssuerUrl && oidcClientId && oidcClientSecret) {
758
- authProviders.push(
759
- new OidcAuthProvider({
760
- issuerUrl: oidcIssuerUrl,
761
- clientId: oidcClientId,
762
- clientSecret: oidcClientSecret,
763
- scopes: settings.resolve('oidcScopes') || 'openid profile email',
764
- label: settings.resolve('oidcProviderLabel') || 'Single sign-on',
765
- publicBackendUrl: config.publicBackendUrl,
766
- publicFrontendUrl: config.publicFrontendUrl,
767
- cookieSecure: config.publicBackendUrl.startsWith('https'),
768
- }),
769
- );
770
- }
1062
+ // Registered unconditionally and resolved through settings on every use, so
1063
+ // an admin can configure SSO from the setup screen — or change it — without
1064
+ // a restart; the provider advertises itself only while the configuration is
1065
+ // complete. Env still wins, so a deployment that sets these keeps behaving
1066
+ // exactly as it did.
1067
+ authProviders.push(
1068
+ new OidcAuthProvider({
1069
+ settings: () => oidcSettingsFrom(settings),
1070
+ publicBackendUrl: config.publicBackendUrl,
1071
+ publicFrontendUrl: config.publicFrontendUrl,
1072
+ cookieSecure: config.publicBackendUrl.startsWith('https'),
1073
+ // A real sign-in proves the values that sign-in used. Recorded against
1074
+ // those — under their own key — so it says nothing about any saved
1075
+ // since, and cannot overwrite what was recorded about them.
1076
+ onSignedIn: async ({ issuerUrl, clientId, clientSecret }) => {
1077
+ const credentials = { issuerUrl, clientId, clientSecret };
1078
+ if ((await settings.oidcVerificationOf(credentials)) === 'verified') return;
1079
+ await settings.recordOidcVerification('verified', credentials);
1080
+ },
1081
+ }),
1082
+ );
771
1083
 
772
1084
  // Materializer factory for an overlay-provided directory source: every
773
1085
  // provisioning burst regenerates `synced-groups.yaml` on the default branch
@@ -791,7 +1103,7 @@ export async function createCoreServices(
791
1103
  defaultBranchOf: () => DEFAULT_BRANCH,
792
1104
  }),
793
1105
  debounceMs: opts?.debounceMs,
794
- log: opts?.log ?? ((message) => console.warn(message)),
1106
+ log: opts?.log ?? ((message) => logger('directory-sync').warn(message)),
795
1107
  });
796
1108
  };
797
1109
  // Groups — the "who you are" principal sets. Manual-mode CRUD on
@@ -805,11 +1117,28 @@ export async function createCoreServices(
805
1117
  () => DEFAULT_BRANCH,
806
1118
  eventBus,
807
1119
  );
1120
+ // Account deletion's optional half: the erased address out of roles.yaml,
1121
+ // groups.yaml and every access rule, in one commit on the default branch.
1122
+ // The deployment owner is never removed this way.
1123
+ const userAccessRemovalService = new UserAccessRemovalService(
1124
+ workspaceService,
1125
+ workflowService,
1126
+ accessControl,
1127
+ disk,
1128
+ kbDirName,
1129
+ () => DEFAULT_BRANCH,
1130
+ eventBus,
1131
+ [config.adminEmail],
1132
+ );
808
1133
 
809
1134
  return {
810
1135
  config,
811
1136
  db,
1137
+ gitRunner,
1138
+ commitWorker,
1139
+ disk,
812
1140
  mcpServerEditService,
1141
+ toolDeleteService,
813
1142
  workspaceService,
814
1143
  kbStartupRunner,
815
1144
  settings,
@@ -818,14 +1147,25 @@ export async function createCoreServices(
818
1147
  docExtractService,
819
1148
  accessControl,
820
1149
  creatorAccess,
1150
+ changeGate,
821
1151
  sessionOntologyService,
822
1152
  routineWritePolicy,
823
1153
  skillService,
824
1154
  pendingSkillsService,
825
1155
  toolManualService,
1156
+ pendingToolsService,
1157
+ readAgentPreamble: readPreamble,
826
1158
  pluginIndexService,
827
1159
  pluginProvisionService,
828
1160
  joinRequestsService,
1161
+ pluginJoinRequestJobs,
1162
+ pluginLinkIndex,
1163
+ pluginLinksService,
1164
+ pluginRenameService,
1165
+ marketplaceCompiler,
1166
+ marketplaceRepo,
1167
+ githubFacade,
1168
+ githubFacadeCredentials,
829
1169
  authService,
830
1170
  authMiddleware,
831
1171
  accountErasureService,
@@ -835,6 +1175,7 @@ export async function createCoreServices(
835
1175
  reviewWorkflowService,
836
1176
  fileLockService,
837
1177
  workflowService,
1178
+ kbSyncService,
838
1179
  eventBus,
839
1180
  fileChangeNotifier,
840
1181
  pendingCommitsService,
@@ -842,6 +1183,7 @@ export async function createCoreServices(
842
1183
  recoveryBot,
843
1184
  adminAccess,
844
1185
  groupsAdminService,
1186
+ userAccessRemovalService,
845
1187
  createSyncedGroupsMaterializer,
846
1188
  updateCheckService,
847
1189
  secretsVaultService,