@bevel-software/platform-core-backend 0.1.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 (720) hide show
  1. package/LICENSE +202 -0
  2. package/dist/assets.d.ts +5 -0
  3. package/dist/assets.d.ts.map +1 -0
  4. package/dist/assets.js +23 -0
  5. package/dist/assets.js.map +1 -0
  6. package/dist/core/core-ports.d.ts +83 -0
  7. package/dist/core/core-ports.d.ts.map +1 -0
  8. package/dist/core/core-ports.js +12 -0
  9. package/dist/core/core-ports.js.map +1 -0
  10. package/dist/core/create-core-server.d.ts +62 -0
  11. package/dist/core/create-core-server.d.ts.map +1 -0
  12. package/dist/core/create-core-server.js +204 -0
  13. package/dist/core/create-core-server.js.map +1 -0
  14. package/dist/core/create-core-services.d.ts +95 -0
  15. package/dist/core/create-core-services.d.ts.map +1 -0
  16. package/dist/core/create-core-services.js +352 -0
  17. package/dist/core/create-core-services.js.map +1 -0
  18. package/dist/core-config.d.ts +119 -0
  19. package/dist/core-config.d.ts.map +1 -0
  20. package/dist/core-config.js +240 -0
  21. package/dist/core-config.js.map +1 -0
  22. package/dist/index.d.ts +36 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +36 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/modules/access/access-control.interface.d.ts +348 -0
  27. package/dist/modules/access/access-control.interface.d.ts.map +1 -0
  28. package/dist/modules/access/access-control.interface.js +2 -0
  29. package/dist/modules/access/access-control.interface.js.map +1 -0
  30. package/dist/modules/access/access-control.service.d.ts +323 -0
  31. package/dist/modules/access/access-control.service.d.ts.map +1 -0
  32. package/dist/modules/access/access-control.service.js +1431 -0
  33. package/dist/modules/access/access-control.service.js.map +1 -0
  34. package/dist/modules/access/access-errors.d.ts +34 -0
  35. package/dist/modules/access/access-errors.d.ts.map +1 -0
  36. package/dist/modules/access/access-errors.js +40 -0
  37. package/dist/modules/access/access-errors.js.map +1 -0
  38. package/dist/modules/access/access-mutation.service.d.ts +176 -0
  39. package/dist/modules/access/access-mutation.service.d.ts.map +1 -0
  40. package/dist/modules/access/access-mutation.service.js +307 -0
  41. package/dist/modules/access/access-mutation.service.js.map +1 -0
  42. package/dist/modules/access/access-splice.d.ts +98 -0
  43. package/dist/modules/access/access-splice.d.ts.map +1 -0
  44. package/dist/modules/access/access-splice.js +346 -0
  45. package/dist/modules/access/access-splice.js.map +1 -0
  46. package/dist/modules/access/access.routes.d.ts +10 -0
  47. package/dist/modules/access/access.routes.d.ts.map +1 -0
  48. package/dist/modules/access/access.routes.js +757 -0
  49. package/dist/modules/access/access.routes.js.map +1 -0
  50. package/dist/modules/access/creator-access.d.ts +113 -0
  51. package/dist/modules/access/creator-access.d.ts.map +1 -0
  52. package/dist/modules/access/creator-access.js +212 -0
  53. package/dist/modules/access/creator-access.js.map +1 -0
  54. package/dist/modules/access/kb-read-filter.d.ts +41 -0
  55. package/dist/modules/access/kb-read-filter.d.ts.map +1 -0
  56. package/dist/modules/access/kb-read-filter.js +60 -0
  57. package/dist/modules/access/kb-read-filter.js.map +1 -0
  58. package/dist/modules/access/roles-admin.service.d.ts +240 -0
  59. package/dist/modules/access/roles-admin.service.d.ts.map +1 -0
  60. package/dist/modules/access/roles-admin.service.js +630 -0
  61. package/dist/modules/access/roles-admin.service.js.map +1 -0
  62. package/dist/modules/access/roles-edit.d.ts +91 -0
  63. package/dist/modules/access/roles-edit.d.ts.map +1 -0
  64. package/dist/modules/access/roles-edit.js +232 -0
  65. package/dist/modules/access/roles-edit.js.map +1 -0
  66. package/dist/modules/access/roles-yaml-guard.d.ts +56 -0
  67. package/dist/modules/access/roles-yaml-guard.d.ts.map +1 -0
  68. package/dist/modules/access/roles-yaml-guard.js +79 -0
  69. package/dist/modules/access/roles-yaml-guard.js.map +1 -0
  70. package/dist/modules/admin/admin-access.routes.d.ts +18 -0
  71. package/dist/modules/admin/admin-access.routes.d.ts.map +1 -0
  72. package/dist/modules/admin/admin-access.routes.js +26 -0
  73. package/dist/modules/admin/admin-access.routes.js.map +1 -0
  74. package/dist/modules/admin/admin-access.service.d.ts +24 -0
  75. package/dist/modules/admin/admin-access.service.d.ts.map +1 -0
  76. package/dist/modules/admin/admin-access.service.js +41 -0
  77. package/dist/modules/admin/admin-access.service.js.map +1 -0
  78. package/dist/modules/admin/admin.interface.d.ts +11 -0
  79. package/dist/modules/admin/admin.interface.d.ts.map +1 -0
  80. package/dist/modules/admin/admin.interface.js +2 -0
  81. package/dist/modules/admin/admin.interface.js.map +1 -0
  82. package/dist/modules/auth/account-erasure.service.d.ts +80 -0
  83. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -0
  84. package/dist/modules/auth/account-erasure.service.js +91 -0
  85. package/dist/modules/auth/account-erasure.service.js.map +1 -0
  86. package/dist/modules/auth/auth.middleware.d.ts +23 -0
  87. package/dist/modules/auth/auth.middleware.d.ts.map +1 -0
  88. package/dist/modules/auth/auth.middleware.js +68 -0
  89. package/dist/modules/auth/auth.middleware.js.map +1 -0
  90. package/dist/modules/auth/auth.routes.d.ts +25 -0
  91. package/dist/modules/auth/auth.routes.d.ts.map +1 -0
  92. package/dist/modules/auth/auth.routes.js +72 -0
  93. package/dist/modules/auth/auth.routes.js.map +1 -0
  94. package/dist/modules/auth/auth.service.d.ts +76 -0
  95. package/dist/modules/auth/auth.service.d.ts.map +1 -0
  96. package/dist/modules/auth/auth.service.js +168 -0
  97. package/dist/modules/auth/auth.service.js.map +1 -0
  98. package/dist/modules/code-mode/code-mode-names.d.ts +16 -0
  99. package/dist/modules/code-mode/code-mode-names.d.ts.map +1 -0
  100. package/dist/modules/code-mode/code-mode-names.js +30 -0
  101. package/dist/modules/code-mode/code-mode-names.js.map +1 -0
  102. package/dist/modules/code-mode/code-mode.tool.d.ts +13 -0
  103. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -0
  104. package/dist/modules/code-mode/code-mode.tool.js +112 -0
  105. package/dist/modules/code-mode/code-mode.tool.js.map +1 -0
  106. package/dist/modules/code-mode/index.d.ts +3 -0
  107. package/dist/modules/code-mode/index.d.ts.map +1 -0
  108. package/dist/modules/code-mode/index.js +3 -0
  109. package/dist/modules/code-mode/index.js.map +1 -0
  110. package/dist/modules/database/connection.d.ts +6 -0
  111. package/dist/modules/database/connection.d.ts.map +1 -0
  112. package/dist/modules/database/connection.js +12 -0
  113. package/dist/modules/database/connection.js.map +1 -0
  114. package/dist/modules/database/core-schema.d.ts +2273 -0
  115. package/dist/modules/database/core-schema.d.ts.map +1 -0
  116. package/dist/modules/database/core-schema.js +413 -0
  117. package/dist/modules/database/core-schema.js.map +1 -0
  118. package/dist/modules/database/migrate.d.ts +10 -0
  119. package/dist/modules/database/migrate.d.ts.map +1 -0
  120. package/dist/modules/database/migrate.js +40 -0
  121. package/dist/modules/database/migrate.js.map +1 -0
  122. package/dist/modules/database/schema.d.ts +12 -0
  123. package/dist/modules/database/schema.d.ts.map +1 -0
  124. package/dist/modules/database/schema.js +12 -0
  125. package/dist/modules/database/schema.js.map +1 -0
  126. package/dist/modules/diff/diff-paths.d.ts +2 -0
  127. package/dist/modules/diff/diff-paths.d.ts.map +1 -0
  128. package/dist/modules/diff/diff-paths.js +9 -0
  129. package/dist/modules/diff/diff-paths.js.map +1 -0
  130. package/dist/modules/diff/diff.config.d.ts +8 -0
  131. package/dist/modules/diff/diff.config.d.ts.map +1 -0
  132. package/dist/modules/diff/diff.config.js +13 -0
  133. package/dist/modules/diff/diff.config.js.map +1 -0
  134. package/dist/modules/diff/diff.interface.d.ts +73 -0
  135. package/dist/modules/diff/diff.interface.d.ts.map +1 -0
  136. package/dist/modules/diff/diff.interface.js +2 -0
  137. package/dist/modules/diff/diff.interface.js.map +1 -0
  138. package/dist/modules/diff/diff.routes.d.ts +35 -0
  139. package/dist/modules/diff/diff.routes.d.ts.map +1 -0
  140. package/dist/modules/diff/diff.routes.js +228 -0
  141. package/dist/modules/diff/diff.routes.js.map +1 -0
  142. package/dist/modules/diff/diff.service.d.ts +51 -0
  143. package/dist/modules/diff/diff.service.d.ts.map +1 -0
  144. package/dist/modules/diff/diff.service.js +489 -0
  145. package/dist/modules/diff/diff.service.js.map +1 -0
  146. package/dist/modules/diff/line-diff.d.ts +16 -0
  147. package/dist/modules/diff/line-diff.d.ts.map +1 -0
  148. package/dist/modules/diff/line-diff.js +67 -0
  149. package/dist/modules/diff/line-diff.js.map +1 -0
  150. package/dist/modules/mcp/mcp-auth.middleware.d.ts +27 -0
  151. package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -0
  152. package/dist/modules/mcp/mcp-auth.middleware.js +116 -0
  153. package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -0
  154. package/dist/modules/mcp/mcp-session-store.d.ts +74 -0
  155. package/dist/modules/mcp/mcp-session-store.d.ts.map +1 -0
  156. package/dist/modules/mcp/mcp-session-store.js +131 -0
  157. package/dist/modules/mcp/mcp-session-store.js.map +1 -0
  158. package/dist/modules/mcp/mcp.routes.d.ts +24 -0
  159. package/dist/modules/mcp/mcp.routes.d.ts.map +1 -0
  160. package/dist/modules/mcp/mcp.routes.js +229 -0
  161. package/dist/modules/mcp/mcp.routes.js.map +1 -0
  162. package/dist/modules/mcp/mcp.service.d.ts +198 -0
  163. package/dist/modules/mcp/mcp.service.d.ts.map +1 -0
  164. package/dist/modules/mcp/mcp.service.js +840 -0
  165. package/dist/modules/mcp/mcp.service.js.map +1 -0
  166. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +76 -0
  167. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -0
  168. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +291 -0
  169. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -0
  170. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +18 -0
  171. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -0
  172. package/dist/modules/mcp/oauth/oauth-consent.routes.js +52 -0
  173. package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -0
  174. package/dist/modules/mcp/oauth/oauth-state.d.ts +32 -0
  175. package/dist/modules/mcp/oauth/oauth-state.d.ts.map +1 -0
  176. package/dist/modules/mcp/oauth/oauth-state.js +34 -0
  177. package/dist/modules/mcp/oauth/oauth-state.js.map +1 -0
  178. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +92 -0
  179. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -0
  180. package/dist/modules/secrets-vault/db-secrets-vault.service.js +728 -0
  181. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -0
  182. package/dist/modules/secrets-vault/index.d.ts +7 -0
  183. package/dist/modules/secrets-vault/index.d.ts.map +1 -0
  184. package/dist/modules/secrets-vault/index.js +6 -0
  185. package/dist/modules/secrets-vault/index.js.map +1 -0
  186. package/dist/modules/secrets-vault/mcp-oauth-discovery.service.d.ts +63 -0
  187. package/dist/modules/secrets-vault/mcp-oauth-discovery.service.d.ts.map +1 -0
  188. package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js +269 -0
  189. package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js.map +1 -0
  190. package/dist/modules/secrets-vault/secrets-variable-loader.d.ts +46 -0
  191. package/dist/modules/secrets-vault/secrets-variable-loader.d.ts.map +1 -0
  192. package/dist/modules/secrets-vault/secrets-variable-loader.js +87 -0
  193. package/dist/modules/secrets-vault/secrets-variable-loader.js.map +1 -0
  194. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +210 -0
  195. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -0
  196. package/dist/modules/secrets-vault/secrets-vault.contract.js +90 -0
  197. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -0
  198. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +30 -0
  199. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -0
  200. package/dist/modules/secrets-vault/secrets-vault.routes.js +490 -0
  201. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -0
  202. package/dist/modules/skills/index.d.ts +5 -0
  203. package/dist/modules/skills/index.d.ts.map +1 -0
  204. package/dist/modules/skills/index.js +4 -0
  205. package/dist/modules/skills/index.js.map +1 -0
  206. package/dist/modules/skills/skills.contract.d.ts +58 -0
  207. package/dist/modules/skills/skills.contract.d.ts.map +1 -0
  208. package/dist/modules/skills/skills.contract.js +10 -0
  209. package/dist/modules/skills/skills.contract.js.map +1 -0
  210. package/dist/modules/skills/skills.routes.d.ts +15 -0
  211. package/dist/modules/skills/skills.routes.d.ts.map +1 -0
  212. package/dist/modules/skills/skills.routes.js +34 -0
  213. package/dist/modules/skills/skills.routes.js.map +1 -0
  214. package/dist/modules/skills/skills.service.d.ts +21 -0
  215. package/dist/modules/skills/skills.service.d.ts.map +1 -0
  216. package/dist/modules/skills/skills.service.js +202 -0
  217. package/dist/modules/skills/skills.service.js.map +1 -0
  218. package/dist/modules/skills/skills.tools.d.ts +15 -0
  219. package/dist/modules/skills/skills.tools.d.ts.map +1 -0
  220. package/dist/modules/skills/skills.tools.js +96 -0
  221. package/dist/modules/skills/skills.tools.js.map +1 -0
  222. package/dist/modules/tool-auth/external-api-key.errors.d.ts +14 -0
  223. package/dist/modules/tool-auth/external-api-key.errors.d.ts.map +1 -0
  224. package/dist/modules/tool-auth/external-api-key.errors.js +23 -0
  225. package/dist/modules/tool-auth/external-api-key.errors.js.map +1 -0
  226. package/dist/modules/tool-auth/external-api-key.interface.d.ts +90 -0
  227. package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -0
  228. package/dist/modules/tool-auth/external-api-key.interface.js +2 -0
  229. package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -0
  230. package/dist/modules/tool-auth/external-api-key.service.d.ts +25 -0
  231. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -0
  232. package/dist/modules/tool-auth/external-api-key.service.js +164 -0
  233. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -0
  234. package/dist/modules/tool-auth/internal-token.service.d.ts +62 -0
  235. package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -0
  236. package/dist/modules/tool-auth/internal-token.service.js +85 -0
  237. package/dist/modules/tool-auth/internal-token.service.js.map +1 -0
  238. package/dist/modules/tool-auth/llm-usage-meter.d.ts +16 -0
  239. package/dist/modules/tool-auth/llm-usage-meter.d.ts.map +1 -0
  240. package/dist/modules/tool-auth/llm-usage-meter.js +6 -0
  241. package/dist/modules/tool-auth/llm-usage-meter.js.map +1 -0
  242. package/dist/modules/tool-auth/tool-auth.middleware.d.ts +101 -0
  243. package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -0
  244. package/dist/modules/tool-auth/tool-auth.middleware.js +166 -0
  245. package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -0
  246. package/dist/modules/tool-helpers/index.d.ts +19 -0
  247. package/dist/modules/tool-helpers/index.d.ts.map +1 -0
  248. package/dist/modules/tool-helpers/index.js +18 -0
  249. package/dist/modules/tool-helpers/index.js.map +1 -0
  250. package/dist/modules/tool-helpers/tool-context.d.ts +35 -0
  251. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -0
  252. package/dist/modules/tool-helpers/tool-context.js +66 -0
  253. package/dist/modules/tool-helpers/tool-context.js.map +1 -0
  254. package/dist/modules/tool-helpers/tool-def.d.ts +33 -0
  255. package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -0
  256. package/dist/modules/tool-helpers/tool-def.js +57 -0
  257. package/dist/modules/tool-helpers/tool-def.js.map +1 -0
  258. package/dist/modules/tool-helpers/tool-handler.d.ts +19 -0
  259. package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -0
  260. package/dist/modules/tool-helpers/tool-handler.js +84 -0
  261. package/dist/modules/tool-helpers/tool-handler.js.map +1 -0
  262. package/dist/modules/tool-helpers/tool.contract.d.ts +64 -0
  263. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -0
  264. package/dist/modules/tool-helpers/tool.contract.js +24 -0
  265. package/dist/modules/tool-helpers/tool.contract.js.map +1 -0
  266. package/dist/modules/tool-helpers/validate-token.d.ts +31 -0
  267. package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -0
  268. package/dist/modules/tool-helpers/validate-token.js +20 -0
  269. package/dist/modules/tool-helpers/validate-token.js.map +1 -0
  270. package/dist/modules/tool-manuals/index.d.ts +5 -0
  271. package/dist/modules/tool-manuals/index.d.ts.map +1 -0
  272. package/dist/modules/tool-manuals/index.js +5 -0
  273. package/dist/modules/tool-manuals/index.js.map +1 -0
  274. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +182 -0
  275. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -0
  276. package/dist/modules/tool-manuals/tool-manuals.contract.js +19 -0
  277. package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -0
  278. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +24 -0
  279. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -0
  280. package/dist/modules/tool-manuals/tool-manuals.routes.js +102 -0
  281. package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -0
  282. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +108 -0
  283. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -0
  284. package/dist/modules/tool-manuals/tool-manuals.service.js +710 -0
  285. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -0
  286. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +35 -0
  287. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -0
  288. package/dist/modules/tool-manuals/tool-manuals.tools.js +157 -0
  289. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -0
  290. package/dist/modules/tool-registry/manual.routes.d.ts +6 -0
  291. package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -0
  292. package/dist/modules/tool-registry/manual.routes.js +76 -0
  293. package/dist/modules/tool-registry/manual.routes.js.map +1 -0
  294. package/dist/modules/tool-registry/tool-registry.d.ts +23 -0
  295. package/dist/modules/tool-registry/tool-registry.d.ts.map +1 -0
  296. package/dist/modules/tool-registry/tool-registry.js +46 -0
  297. package/dist/modules/tool-registry/tool-registry.js.map +1 -0
  298. package/dist/modules/tool-registry/tool.contract.d.ts +48 -0
  299. package/dist/modules/tool-registry/tool.contract.d.ts.map +1 -0
  300. package/dist/modules/tool-registry/tool.contract.js +2 -0
  301. package/dist/modules/tool-registry/tool.contract.js.map +1 -0
  302. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +14 -0
  303. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -0
  304. package/dist/modules/workflow/agent-tools/workflow.tools.js +437 -0
  305. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -0
  306. package/dist/modules/workflow/event-bus.d.ts +107 -0
  307. package/dist/modules/workflow/event-bus.d.ts.map +1 -0
  308. package/dist/modules/workflow/event-bus.js +224 -0
  309. package/dist/modules/workflow/event-bus.js.map +1 -0
  310. package/dist/modules/workflow/events.routes.d.ts +80 -0
  311. package/dist/modules/workflow/events.routes.d.ts.map +1 -0
  312. package/dist/modules/workflow/events.routes.js +216 -0
  313. package/dist/modules/workflow/events.routes.js.map +1 -0
  314. package/dist/modules/workflow/file-change-notifier.d.ts +38 -0
  315. package/dist/modules/workflow/file-change-notifier.d.ts.map +1 -0
  316. package/dist/modules/workflow/file-change-notifier.js +22 -0
  317. package/dist/modules/workflow/file-change-notifier.js.map +1 -0
  318. package/dist/modules/workflow/file-lock.service.d.ts +57 -0
  319. package/dist/modules/workflow/file-lock.service.d.ts.map +1 -0
  320. package/dist/modules/workflow/file-lock.service.js +202 -0
  321. package/dist/modules/workflow/file-lock.service.js.map +1 -0
  322. package/dist/modules/workflow/git/branch-name.d.ts +10 -0
  323. package/dist/modules/workflow/git/branch-name.d.ts.map +1 -0
  324. package/dist/modules/workflow/git/branch-name.js +76 -0
  325. package/dist/modules/workflow/git/branch-name.js.map +1 -0
  326. package/dist/modules/workflow/git/clone-config.d.ts +61 -0
  327. package/dist/modules/workflow/git/clone-config.d.ts.map +1 -0
  328. package/dist/modules/workflow/git/clone-config.js +69 -0
  329. package/dist/modules/workflow/git/clone-config.js.map +1 -0
  330. package/dist/modules/workflow/git/git-version.d.ts +34 -0
  331. package/dist/modules/workflow/git/git-version.d.ts.map +1 -0
  332. package/dist/modules/workflow/git/git-version.js +63 -0
  333. package/dist/modules/workflow/git/git-version.js.map +1 -0
  334. package/dist/modules/workflow/git/git.service.d.ts +427 -0
  335. package/dist/modules/workflow/git/git.service.d.ts.map +1 -0
  336. package/dist/modules/workflow/git/git.service.js +1987 -0
  337. package/dist/modules/workflow/git/git.service.js.map +1 -0
  338. package/dist/modules/workflow/git/mutex.d.ts +11 -0
  339. package/dist/modules/workflow/git/mutex.d.ts.map +1 -0
  340. package/dist/modules/workflow/git/mutex.js +23 -0
  341. package/dist/modules/workflow/git/mutex.js.map +1 -0
  342. package/dist/modules/workflow/git/pull-request.service.d.ts +124 -0
  343. package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -0
  344. package/dist/modules/workflow/git/pull-request.service.js +328 -0
  345. package/dist/modules/workflow/git/pull-request.service.js.map +1 -0
  346. package/dist/modules/workflow/locking-filesystem.d.ts +133 -0
  347. package/dist/modules/workflow/locking-filesystem.d.ts.map +1 -0
  348. package/dist/modules/workflow/locking-filesystem.js +400 -0
  349. package/dist/modules/workflow/locking-filesystem.js.map +1 -0
  350. package/dist/modules/workflow/pending-commits.service.d.ts +221 -0
  351. package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -0
  352. package/dist/modules/workflow/pending-commits.service.js +364 -0
  353. package/dist/modules/workflow/pending-commits.service.js.map +1 -0
  354. package/dist/modules/workflow/pending-commits.worker.d.ts +148 -0
  355. package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -0
  356. package/dist/modules/workflow/pending-commits.worker.js +245 -0
  357. package/dist/modules/workflow/pending-commits.worker.js.map +1 -0
  358. package/dist/modules/workflow/read-only-filesystem.d.ts +24 -0
  359. package/dist/modules/workflow/read-only-filesystem.d.ts.map +1 -0
  360. package/dist/modules/workflow/read-only-filesystem.js +39 -0
  361. package/dist/modules/workflow/read-only-filesystem.js.map +1 -0
  362. package/dist/modules/workflow/recovery-bot.d.ts +31 -0
  363. package/dist/modules/workflow/recovery-bot.d.ts.map +1 -0
  364. package/dist/modules/workflow/recovery-bot.js +64 -0
  365. package/dist/modules/workflow/recovery-bot.js.map +1 -0
  366. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +137 -0
  367. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -0
  368. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +2 -0
  369. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +1 -0
  370. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +26 -0
  371. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -0
  372. package/dist/modules/workflow/review-workflow/review-workflow.service.js +636 -0
  373. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -0
  374. package/dist/modules/workflow/sanitize-error.d.ts +29 -0
  375. package/dist/modules/workflow/sanitize-error.d.ts.map +1 -0
  376. package/dist/modules/workflow/sanitize-error.js +60 -0
  377. package/dist/modules/workflow/sanitize-error.js.map +1 -0
  378. package/dist/modules/workflow/session-ontology.policy.d.ts +52 -0
  379. package/dist/modules/workflow/session-ontology.policy.d.ts.map +1 -0
  380. package/dist/modules/workflow/session-ontology.policy.js +62 -0
  381. package/dist/modules/workflow/session-ontology.policy.js.map +1 -0
  382. package/dist/modules/workflow/session-ontology.service.d.ts +100 -0
  383. package/dist/modules/workflow/session-ontology.service.d.ts.map +1 -0
  384. package/dist/modules/workflow/session-ontology.service.js +143 -0
  385. package/dist/modules/workflow/session-ontology.service.js.map +1 -0
  386. package/dist/modules/workflow/workflow-hooks.d.ts +87 -0
  387. package/dist/modules/workflow/workflow-hooks.d.ts.map +1 -0
  388. package/dist/modules/workflow/workflow-hooks.js +35 -0
  389. package/dist/modules/workflow/workflow-hooks.js.map +1 -0
  390. package/dist/modules/workflow/workflow.errors.d.ts +171 -0
  391. package/dist/modules/workflow/workflow.errors.d.ts.map +1 -0
  392. package/dist/modules/workflow/workflow.errors.js +260 -0
  393. package/dist/modules/workflow/workflow.errors.js.map +1 -0
  394. package/dist/modules/workflow/workflow.routes.d.ts +26 -0
  395. package/dist/modules/workflow/workflow.routes.d.ts.map +1 -0
  396. package/dist/modules/workflow/workflow.routes.js +804 -0
  397. package/dist/modules/workflow/workflow.routes.js.map +1 -0
  398. package/dist/modules/workflow/workflow.service.d.ts +385 -0
  399. package/dist/modules/workflow/workflow.service.d.ts.map +1 -0
  400. package/dist/modules/workflow/workflow.service.js +1155 -0
  401. package/dist/modules/workflow/workflow.service.js.map +1 -0
  402. package/dist/modules/workspace/bevel-ignore.d.ts +25 -0
  403. package/dist/modules/workspace/bevel-ignore.d.ts.map +1 -0
  404. package/dist/modules/workspace/bevel-ignore.js +57 -0
  405. package/dist/modules/workspace/bevel-ignore.js.map +1 -0
  406. package/dist/modules/workspace/kb-seed.interface.d.ts +36 -0
  407. package/dist/modules/workspace/kb-seed.interface.d.ts.map +1 -0
  408. package/dist/modules/workspace/kb-seed.interface.js +2 -0
  409. package/dist/modules/workspace/kb-seed.interface.js.map +1 -0
  410. package/dist/modules/workspace/kb-seed.service.d.ts +70 -0
  411. package/dist/modules/workspace/kb-seed.service.d.ts.map +1 -0
  412. package/dist/modules/workspace/kb-seed.service.js +325 -0
  413. package/dist/modules/workspace/kb-seed.service.js.map +1 -0
  414. package/dist/modules/workspace/routine-write-policy.d.ts +49 -0
  415. package/dist/modules/workspace/routine-write-policy.d.ts.map +1 -0
  416. package/dist/modules/workspace/routine-write-policy.js +46 -0
  417. package/dist/modules/workspace/routine-write-policy.js.map +1 -0
  418. package/dist/modules/workspace/session-ontology.gate.d.ts +112 -0
  419. package/dist/modules/workspace/session-ontology.gate.d.ts.map +1 -0
  420. package/dist/modules/workspace/session-ontology.gate.js +161 -0
  421. package/dist/modules/workspace/session-ontology.gate.js.map +1 -0
  422. package/dist/modules/workspace/session-sink.d.ts +25 -0
  423. package/dist/modules/workspace/session-sink.d.ts.map +1 -0
  424. package/dist/modules/workspace/session-sink.js +8 -0
  425. package/dist/modules/workspace/session-sink.js.map +1 -0
  426. package/dist/modules/workspace/spill-store.d.ts +24 -0
  427. package/dist/modules/workspace/spill-store.d.ts.map +1 -0
  428. package/dist/modules/workspace/spill-store.js +87 -0
  429. package/dist/modules/workspace/spill-store.js.map +1 -0
  430. package/dist/modules/workspace/workspace.routes.d.ts +25 -0
  431. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -0
  432. package/dist/modules/workspace/workspace.routes.js +1046 -0
  433. package/dist/modules/workspace/workspace.routes.js.map +1 -0
  434. package/dist/modules/workspace/workspace.service.d.ts +339 -0
  435. package/dist/modules/workspace/workspace.service.d.ts.map +1 -0
  436. package/dist/modules/workspace/workspace.service.js +1221 -0
  437. package/dist/modules/workspace/workspace.service.js.map +1 -0
  438. package/dist/modules/workspace/workspace.tools.d.ts +19 -0
  439. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -0
  440. package/dist/modules/workspace/workspace.tools.js +767 -0
  441. package/dist/modules/workspace/workspace.tools.js.map +1 -0
  442. package/dist/shared/frontmatter-id.d.ts +35 -0
  443. package/dist/shared/frontmatter-id.d.ts.map +1 -0
  444. package/dist/shared/frontmatter-id.js +68 -0
  445. package/dist/shared/frontmatter-id.js.map +1 -0
  446. package/dist/shared/fs-walk.d.ts +9 -0
  447. package/dist/shared/fs-walk.d.ts.map +1 -0
  448. package/dist/shared/fs-walk.js +34 -0
  449. package/dist/shared/fs-walk.js.map +1 -0
  450. package/dist/shared/hash-email.d.ts +11 -0
  451. package/dist/shared/hash-email.d.ts.map +1 -0
  452. package/dist/shared/hash-email.js +14 -0
  453. package/dist/shared/hash-email.js.map +1 -0
  454. package/dist/shared/kb-layout.d.ts +38 -0
  455. package/dist/shared/kb-layout.d.ts.map +1 -0
  456. package/dist/shared/kb-layout.js +102 -0
  457. package/dist/shared/kb-layout.js.map +1 -0
  458. package/dist/shared/kb-layout.test.d.ts +2 -0
  459. package/dist/shared/kb-layout.test.d.ts.map +1 -0
  460. package/dist/shared/kb-layout.test.js +67 -0
  461. package/dist/shared/kb-layout.test.js.map +1 -0
  462. package/dist/shared/ssrf.d.ts +20 -0
  463. package/dist/shared/ssrf.d.ts.map +1 -0
  464. package/dist/shared/ssrf.js +89 -0
  465. package/dist/shared/ssrf.js.map +1 -0
  466. package/dist/shared/token-crypto.d.ts +16 -0
  467. package/dist/shared/token-crypto.d.ts.map +1 -0
  468. package/dist/shared/token-crypto.js +49 -0
  469. package/dist/shared/token-crypto.js.map +1 -0
  470. package/dist/shared/ttl-cache.d.ts +16 -0
  471. package/dist/shared/ttl-cache.d.ts.map +1 -0
  472. package/dist/shared/ttl-cache.js +27 -0
  473. package/dist/shared/ttl-cache.js.map +1 -0
  474. package/dist/shared/utcp-namespace.d.ts +46 -0
  475. package/dist/shared/utcp-namespace.d.ts.map +1 -0
  476. package/dist/shared/utcp-namespace.js +82 -0
  477. package/dist/shared/utcp-namespace.js.map +1 -0
  478. package/dist/version.d.ts +17 -0
  479. package/dist/version.d.ts.map +1 -0
  480. package/dist/version.js +19 -0
  481. package/dist/version.js.map +1 -0
  482. package/kb-template/.bevelignore +21 -0
  483. package/kb-template/Agents/.gitkeep +0 -0
  484. package/kb-template/Agents/README.md +38 -0
  485. package/kb-template/CLAUDE.md +419 -0
  486. package/kb-template/Data/.gitkeep +0 -0
  487. package/kb-template/Data/README.md +39 -0
  488. package/kb-template/KnowledgeBase/.gitkeep +0 -0
  489. package/kb-template/KnowledgeBase/README.md +37 -0
  490. package/kb-template/Pipelines/.gitkeep +0 -0
  491. package/kb-template/Pipelines/README.md +38 -0
  492. package/kb-template/Skills/.gitkeep +0 -0
  493. package/kb-template/Skills/README.md +32 -0
  494. package/kb-template/Tools/.gitkeep +0 -0
  495. package/kb-template/Tools/README.md +42 -0
  496. package/kb-template/access.md +36 -0
  497. package/migrations/0000_core_init.sql +243 -0
  498. package/migrations/meta/0000_snapshot.json +1480 -0
  499. package/migrations/meta/_journal.json +13 -0
  500. package/package.json +80 -0
  501. package/src/assets.ts +25 -0
  502. package/src/core/core-ports.ts +91 -0
  503. package/src/core/create-core-server.ts +338 -0
  504. package/src/core/create-core-services.ts +501 -0
  505. package/src/core-config.ts +257 -0
  506. package/src/index.ts +69 -0
  507. package/src/modules/access/__tests__/access-control.atref-batch.test.ts +98 -0
  508. package/src/modules/access/__tests__/access-control.read-batch.test.ts +132 -0
  509. package/src/modules/access/__tests__/access-control.service.test.ts +1011 -0
  510. package/src/modules/access/__tests__/access-mutation.service.test.ts +439 -0
  511. package/src/modules/access/__tests__/access-splice.test.ts +247 -0
  512. package/src/modules/access/__tests__/access.routes.revoke.test.ts +407 -0
  513. package/src/modules/access/__tests__/creator-access.test.ts +217 -0
  514. package/src/modules/access/__tests__/grant-sources.test.ts +204 -0
  515. package/src/modules/access/__tests__/kb-read-filter.test.ts +70 -0
  516. package/src/modules/access/__tests__/roles-admin.service.test.ts +469 -0
  517. package/src/modules/access/__tests__/roles-edit.test.ts +138 -0
  518. package/src/modules/access/__tests__/roles-yaml-guard.test.ts +70 -0
  519. package/src/modules/access/__tests__/roles.routes.test.ts +234 -0
  520. package/src/modules/access/access-control.interface.ts +383 -0
  521. package/src/modules/access/access-control.service.ts +1794 -0
  522. package/src/modules/access/access-errors.ts +60 -0
  523. package/src/modules/access/access-mutation.service.ts +369 -0
  524. package/src/modules/access/access-splice.ts +413 -0
  525. package/src/modules/access/access.routes.ts +894 -0
  526. package/src/modules/access/creator-access.ts +270 -0
  527. package/src/modules/access/kb-read-filter.ts +76 -0
  528. package/src/modules/access/roles-admin.service.ts +741 -0
  529. package/src/modules/access/roles-edit.ts +248 -0
  530. package/src/modules/access/roles-yaml-guard.ts +89 -0
  531. package/src/modules/admin/admin-access.routes.ts +29 -0
  532. package/src/modules/admin/admin-access.service.ts +38 -0
  533. package/src/modules/admin/admin.interface.ts +10 -0
  534. package/src/modules/auth/account-erasure.service.ts +183 -0
  535. package/src/modules/auth/auth.middleware.ts +78 -0
  536. package/src/modules/auth/auth.routes.ts +97 -0
  537. package/src/modules/auth/auth.service.ts +199 -0
  538. package/src/modules/code-mode/code-mode-names.ts +38 -0
  539. package/src/modules/code-mode/code-mode.tool.ts +117 -0
  540. package/src/modules/code-mode/index.ts +6 -0
  541. package/src/modules/database/connection.ts +15 -0
  542. package/src/modules/database/core-schema.ts +431 -0
  543. package/src/modules/database/migrate.ts +43 -0
  544. package/src/modules/database/schema.ts +11 -0
  545. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +87 -0
  546. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +150 -0
  547. package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +184 -0
  548. package/src/modules/diff/__tests__/diff.service.test.ts +202 -0
  549. package/src/modules/diff/diff-paths.ts +9 -0
  550. package/src/modules/diff/diff.config.ts +12 -0
  551. package/src/modules/diff/diff.interface.ts +78 -0
  552. package/src/modules/diff/diff.routes.ts +277 -0
  553. package/src/modules/diff/diff.service.ts +508 -0
  554. package/src/modules/diff/line-diff.ts +79 -0
  555. package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +287 -0
  556. package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +249 -0
  557. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +253 -0
  558. package/src/modules/mcp/__tests__/mcp-session-store.test.ts +151 -0
  559. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +150 -0
  560. package/src/modules/mcp/__tests__/mcp.routes.delete.test.ts +92 -0
  561. package/src/modules/mcp/__tests__/mcp.service.test.ts +414 -0
  562. package/src/modules/mcp/mcp-auth.middleware.ts +126 -0
  563. package/src/modules/mcp/mcp-session-store.ts +162 -0
  564. package/src/modules/mcp/mcp.routes.ts +263 -0
  565. package/src/modules/mcp/mcp.service.ts +973 -0
  566. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +401 -0
  567. package/src/modules/mcp/oauth/oauth-consent.routes.ts +60 -0
  568. package/src/modules/mcp/oauth/oauth-state.ts +61 -0
  569. package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +277 -0
  570. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +206 -0
  571. package/src/modules/secrets-vault/__tests__/mcp-oauth-discovery.service.test.ts +178 -0
  572. package/src/modules/secrets-vault/__tests__/scopes-covered.test.ts +101 -0
  573. package/src/modules/secrets-vault/__tests__/secrets-variable-loader.test.ts +54 -0
  574. package/src/modules/secrets-vault/__tests__/tool-owner-gate.route.test.ts +143 -0
  575. package/src/modules/secrets-vault/db-secrets-vault.service.ts +792 -0
  576. package/src/modules/secrets-vault/index.ts +25 -0
  577. package/src/modules/secrets-vault/mcp-oauth-discovery.service.ts +289 -0
  578. package/src/modules/secrets-vault/secrets-variable-loader.ts +104 -0
  579. package/src/modules/secrets-vault/secrets-vault.contract.ts +270 -0
  580. package/src/modules/secrets-vault/secrets-vault.routes.ts +526 -0
  581. package/src/modules/skills/__tests__/skills.service.test.ts +176 -0
  582. package/src/modules/skills/index.ts +10 -0
  583. package/src/modules/skills/skills.contract.ts +54 -0
  584. package/src/modules/skills/skills.routes.ts +38 -0
  585. package/src/modules/skills/skills.service.ts +245 -0
  586. package/src/modules/skills/skills.tools.ts +121 -0
  587. package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +358 -0
  588. package/src/modules/tool-auth/__tests__/internal-token.service.test.ts +79 -0
  589. package/src/modules/tool-auth/__tests__/manual-auth.middleware.test.ts +88 -0
  590. package/src/modules/tool-auth/external-api-key.errors.ts +25 -0
  591. package/src/modules/tool-auth/external-api-key.interface.ts +99 -0
  592. package/src/modules/tool-auth/external-api-key.service.ts +209 -0
  593. package/src/modules/tool-auth/internal-token.service.ts +124 -0
  594. package/src/modules/tool-auth/llm-usage-meter.ts +19 -0
  595. package/src/modules/tool-auth/tool-auth.middleware.ts +220 -0
  596. package/src/modules/tool-helpers/__tests__/phase0-loopback-spike.test.ts +129 -0
  597. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +95 -0
  598. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +146 -0
  599. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +75 -0
  600. package/src/modules/tool-helpers/index.ts +18 -0
  601. package/src/modules/tool-helpers/tool-context.ts +98 -0
  602. package/src/modules/tool-helpers/tool-def.ts +73 -0
  603. package/src/modules/tool-helpers/tool-handler.ts +91 -0
  604. package/src/modules/tool-helpers/tool.contract.ts +85 -0
  605. package/src/modules/tool-helpers/validate-token.ts +50 -0
  606. package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +200 -0
  607. package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +499 -0
  608. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +156 -0
  609. package/src/modules/tool-manuals/index.ts +12 -0
  610. package/src/modules/tool-manuals/tool-manuals.contract.ts +183 -0
  611. package/src/modules/tool-manuals/tool-manuals.routes.ts +110 -0
  612. package/src/modules/tool-manuals/tool-manuals.service.ts +781 -0
  613. package/src/modules/tool-manuals/tool-manuals.tools.ts +202 -0
  614. package/src/modules/tool-registry/__tests__/tool-registry.test.ts +64 -0
  615. package/src/modules/tool-registry/manual.routes.ts +87 -0
  616. package/src/modules/tool-registry/tool-registry.ts +55 -0
  617. package/src/modules/tool-registry/tool.contract.ts +52 -0
  618. package/src/modules/workflow/__tests__/event-bus.test.ts +322 -0
  619. package/src/modules/workflow/__tests__/file-change-notifier.test.ts +51 -0
  620. package/src/modules/workflow/__tests__/format-affected-owners.test.ts +67 -0
  621. package/src/modules/workflow/__tests__/locking-filesystem.test.ts +445 -0
  622. package/src/modules/workflow/__tests__/pending-commits.canonical.test.ts +36 -0
  623. package/src/modules/workflow/__tests__/pending-commits.worker.test.ts +243 -0
  624. package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +308 -0
  625. package/src/modules/workflow/__tests__/sanitize-error.test.ts +67 -0
  626. package/src/modules/workflow/__tests__/session-ontology.policy.test.ts +62 -0
  627. package/src/modules/workflow/__tests__/session-ontology.service.test.ts +200 -0
  628. package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +232 -0
  629. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +380 -0
  630. package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +340 -0
  631. package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +192 -0
  632. package/src/modules/workflow/agent-tools/workflow.tools.ts +502 -0
  633. package/src/modules/workflow/event-bus.ts +262 -0
  634. package/src/modules/workflow/events.routes.ts +266 -0
  635. package/src/modules/workflow/file-change-notifier.ts +54 -0
  636. package/src/modules/workflow/file-lock.service.ts +269 -0
  637. package/src/modules/workflow/git/__tests__/branch-name.test.ts +86 -0
  638. package/src/modules/workflow/git/__tests__/branchAuthor.test.ts +80 -0
  639. package/src/modules/workflow/git/__tests__/clone-config.test.ts +15 -0
  640. package/src/modules/workflow/git/__tests__/git-test-helpers.ts +47 -0
  641. package/src/modules/workflow/git/__tests__/git-version.failure.test.ts +24 -0
  642. package/src/modules/workflow/git/__tests__/git-version.test.ts +49 -0
  643. package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +389 -0
  644. package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +124 -0
  645. package/src/modules/workflow/git/__tests__/git.service.commitChanges.test.ts +105 -0
  646. package/src/modules/workflow/git/__tests__/git.service.commitFile.test.ts +211 -0
  647. package/src/modules/workflow/git/__tests__/git.service.createBranch.test.ts +154 -0
  648. package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +320 -0
  649. package/src/modules/workflow/git/__tests__/git.service.diffFileAtCommit.test.ts +202 -0
  650. package/src/modules/workflow/git/__tests__/git.service.diffFileBetweenBranches.test.ts +453 -0
  651. package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +198 -0
  652. package/src/modules/workflow/git/__tests__/git.service.listTrackedFiles.test.ts +125 -0
  653. package/src/modules/workflow/git/__tests__/git.service.logForFile.test.ts +219 -0
  654. package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +145 -0
  655. package/src/modules/workflow/git/__tests__/git.service.pendingChanges.test.ts +240 -0
  656. package/src/modules/workflow/git/__tests__/git.service.postMergePull.test.ts +272 -0
  657. package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +232 -0
  658. package/src/modules/workflow/git/__tests__/git.service.readFileAtRef.test.ts +101 -0
  659. package/src/modules/workflow/git/__tests__/git.service.status.test.ts +127 -0
  660. package/src/modules/workflow/git/__tests__/mutex.test.ts +78 -0
  661. package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +225 -0
  662. package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +101 -0
  663. package/src/modules/workflow/git/branch-name.ts +70 -0
  664. package/src/modules/workflow/git/clone-config.ts +71 -0
  665. package/src/modules/workflow/git/git-version.ts +70 -0
  666. package/src/modules/workflow/git/git.service.ts +2248 -0
  667. package/src/modules/workflow/git/mutex.ts +22 -0
  668. package/src/modules/workflow/git/pull-request.service.ts +447 -0
  669. package/src/modules/workflow/locking-filesystem.ts +489 -0
  670. package/src/modules/workflow/pending-commits.service.ts +444 -0
  671. package/src/modules/workflow/pending-commits.worker.ts +361 -0
  672. package/src/modules/workflow/read-only-filesystem.ts +54 -0
  673. package/src/modules/workflow/recovery-bot.ts +73 -0
  674. package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +560 -0
  675. package/src/modules/workflow/review-workflow/__tests__/cancel-pr.test.ts +176 -0
  676. package/src/modules/workflow/review-workflow/__tests__/merge-gate.test.ts +258 -0
  677. package/src/modules/workflow/review-workflow/review-workflow.interface.ts +199 -0
  678. package/src/modules/workflow/review-workflow/review-workflow.service.ts +806 -0
  679. package/src/modules/workflow/sanitize-error.ts +62 -0
  680. package/src/modules/workflow/session-ontology.policy.ts +70 -0
  681. package/src/modules/workflow/session-ontology.service.ts +178 -0
  682. package/src/modules/workflow/workflow-hooks.ts +101 -0
  683. package/src/modules/workflow/workflow.errors.ts +285 -0
  684. package/src/modules/workflow/workflow.routes.ts +858 -0
  685. package/src/modules/workflow/workflow.service.ts +1555 -0
  686. package/src/modules/workspace/__tests__/kb-seed.service.test.ts +213 -0
  687. package/src/modules/workspace/__tests__/routine-write-policy.test.ts +68 -0
  688. package/src/modules/workspace/__tests__/session-ontology.gate.test.ts +237 -0
  689. package/src/modules/workspace/__tests__/spill-store.test.ts +43 -0
  690. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +233 -0
  691. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +176 -0
  692. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +303 -0
  693. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +276 -0
  694. package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +120 -0
  695. package/src/modules/workspace/__tests__/workspace.service.test.ts +565 -0
  696. package/src/modules/workspace/__tests__/workspace.tools.test.ts +504 -0
  697. package/src/modules/workspace/bevel-ignore.ts +62 -0
  698. package/src/modules/workspace/kb-seed.interface.ts +36 -0
  699. package/src/modules/workspace/kb-seed.service.ts +361 -0
  700. package/src/modules/workspace/routine-write-policy.ts +79 -0
  701. package/src/modules/workspace/session-ontology.gate.ts +189 -0
  702. package/src/modules/workspace/session-sink.ts +25 -0
  703. package/src/modules/workspace/spill-store.ts +87 -0
  704. package/src/modules/workspace/workspace.routes.ts +1114 -0
  705. package/src/modules/workspace/workspace.service.ts +1343 -0
  706. package/src/modules/workspace/workspace.tools.ts +885 -0
  707. package/src/shared/__tests__/frontmatter-id.test.ts +88 -0
  708. package/src/shared/__tests__/fs-walk.test.ts +42 -0
  709. package/src/shared/__tests__/ssrf.test.ts +53 -0
  710. package/src/shared/__tests__/utcp-namespace.test.ts +19 -0
  711. package/src/shared/frontmatter-id.ts +72 -0
  712. package/src/shared/fs-walk.ts +30 -0
  713. package/src/shared/hash-email.ts +14 -0
  714. package/src/shared/kb-layout.test.ts +88 -0
  715. package/src/shared/kb-layout.ts +101 -0
  716. package/src/shared/ssrf.ts +78 -0
  717. package/src/shared/token-crypto.ts +54 -0
  718. package/src/shared/ttl-cache.ts +27 -0
  719. package/src/shared/utcp-namespace.ts +88 -0
  720. package/src/version.ts +19 -0
@@ -0,0 +1,501 @@
1
+ import type { AuthProviderPlugin } from '../modules/auth/auth.routes.js';
2
+ import type { AuthUser } from '@bevel-software/platform-shared';
3
+ import { DEFAULT_BRANCH, PROTECTED_BRANCHES, SKILLS_DIR, TOOLS_DIR } from '@bevel-software/platform-shared';
4
+ import { CoreConfig } from '../core-config.js';
5
+ import { getDb, type Database } from '../modules/database/connection.js';
6
+ import { runCoreMigrations } from '../modules/database/migrate.js';
7
+ import { coreMigrationsDir } from '../assets.js';
8
+ import { WorkspaceService } from '../modules/workspace/workspace.service.js';
9
+ import { RoutineWritePolicyService } from '../modules/workspace/routine-write-policy.js';
10
+ import { KbSeedService } from '../modules/workspace/kb-seed.service.js';
11
+ import { SpillStore } from '../modules/workspace/spill-store.js';
12
+ import { UuidSessionSink, type ISessionSink } from '../modules/workspace/session-sink.js';
13
+ import { AuthService } from '../modules/auth/auth.service.js';
14
+ import { AccountErasureService } from '../modules/auth/account-erasure.service.js';
15
+ import { createAuthMiddleware } from '../modules/auth/auth.middleware.js';
16
+ import { AccessControlService } from '../modules/access/access-control.service.js';
17
+ import { CreatorAccessService } from '../modules/access/creator-access.js';
18
+ import { SkillService } from '../modules/skills/index.js';
19
+ import { ToolManualService } from '../modules/tool-manuals/index.js';
20
+ import {
21
+ DbSecretsVaultService,
22
+ McpOAuthDiscoveryService,
23
+ registerBevelSecretsVariableLoader,
24
+ } from '../modules/secrets-vault/index.js';
25
+ import { GitService } from '../modules/workflow/git/git.service.js';
26
+ import { PullRequestService } from '../modules/workflow/git/pull-request.service.js';
27
+ import { WorkspaceMutex } from '../modules/workflow/git/mutex.js';
28
+ import { assertGitVersion } from '../modules/workflow/git/git-version.js';
29
+ import { DiffService } from '../modules/diff/diff.service.js';
30
+ import { ReviewWorkflowService } from '../modules/workflow/review-workflow/review-workflow.service.js';
31
+ import { FileLockService } from '../modules/workflow/file-lock.service.js';
32
+ import { WorkflowEventBus } from '../modules/workflow/event-bus.js';
33
+ import { FileChangeNotifier } from '../modules/workflow/file-change-notifier.js';
34
+ import { WorkflowService } from '../modules/workflow/workflow.service.js';
35
+ import { WorkflowHooks } from '../modules/workflow/workflow-hooks.js';
36
+ import { SessionOntologyService } from '../modules/workflow/session-ontology.service.js';
37
+ import { PendingCommitsService } from '../modules/workflow/pending-commits.service.js';
38
+ import {
39
+ PendingCommitsWorker,
40
+ consoleSystemNoticeSink,
41
+ } from '../modules/workflow/pending-commits.worker.js';
42
+ import { ensureRecoveryBotUser } from '../modules/workflow/recovery-bot.js';
43
+ import { AdminAccessService } from '../modules/admin/admin-access.service.js';
44
+ import { ExternalApiKeyService } from '../modules/tool-auth/external-api-key.service.js';
45
+ import { InternalTokenService } from '../modules/tool-auth/internal-token.service.js';
46
+ import {
47
+ createToolAuthMiddleware,
48
+ createManualAuthMiddleware,
49
+ } from '../modules/tool-auth/tool-auth.middleware.js';
50
+ import { unmeteredLlmUsage, type ILlmUsageMeter } from '../modules/tool-auth/llm-usage-meter.js';
51
+ import { McpSessionStore } from '../modules/mcp/mcp-session-store.js';
52
+ import { McpService } from '../modules/mcp/mcp.service.js';
53
+ import { createMcpAuthMiddleware } from '../modules/mcp/mcp-auth.middleware.js';
54
+ import { BevelOAuthProvider } from '../modules/mcp/oauth/bevel-oauth-provider.js';
55
+ import { getOAuthProtectedResourceMetadataUrl } from '@modelcontextprotocol/sdk/server/auth/router.js';
56
+ import { ToolRegistry } from '../modules/tool-registry/tool-registry.js';
57
+ import { createToolContextResolver } from '../modules/tool-helpers/tool-context.js';
58
+ import { createToolHandlerFactory } from '../modules/tool-helpers/tool-handler.js';
59
+ import { TokenCrypto } from '../shared/token-crypto.js';
60
+ import { noopRecoveryAgent, type CorePorts } from './core-ports.js';
61
+
62
+ /**
63
+ * Everything the CORE composition builds: the core services `createCoreServer`
64
+ * mounts, plus the primitives the enterprise overlay's own construction needs
65
+ * (db, event bus, notifier, registries, middlewares, …).
66
+ *
67
+ * The fields under "server-time seams" are deliberately MUTABLE: they are only
68
+ * read when the server is built / at request time, and the enterprise overlay
69
+ * overwrites them after `createCoreServices` returns (its implementations need
70
+ * core services to construct). See {@link CorePorts} for the pattern.
71
+ */
72
+ export interface CoreServices {
73
+ config: CoreConfig;
74
+ db: Database;
75
+ workspaceService: WorkspaceService;
76
+ kbSeedService: KbSeedService;
77
+ spillStore: SpillStore;
78
+ accessControl: AccessControlService;
79
+ creatorAccess: CreatorAccessService;
80
+ sessionOntologyService: SessionOntologyService;
81
+ routineWritePolicy: RoutineWritePolicyService;
82
+ skillService: SkillService;
83
+ toolManualService: ToolManualService;
84
+ authService: AuthService;
85
+ authMiddleware: ReturnType<typeof createAuthMiddleware>;
86
+ accountErasureService: AccountErasureService;
87
+ gitService: GitService;
88
+ pullRequestService: PullRequestService;
89
+ diffService: DiffService;
90
+ reviewWorkflowService: ReviewWorkflowService;
91
+ fileLockService: FileLockService;
92
+ workflowService: WorkflowService;
93
+ eventBus: WorkflowEventBus;
94
+ fileChangeNotifier: FileChangeNotifier;
95
+ pendingCommitsService: PendingCommitsService;
96
+ pendingCommitsWorker: PendingCommitsWorker;
97
+ recoveryBot: AuthUser;
98
+ adminAccess: AdminAccessService;
99
+ secretsVaultService: DbSecretsVaultService;
100
+ externalApiKeyService: ExternalApiKeyService;
101
+ internalTokenService: InternalTokenService;
102
+ mcpService: McpService;
103
+ mcpAuthMiddleware: ReturnType<typeof createMcpAuthMiddleware>;
104
+ mcpOAuthProvider: BevelOAuthProvider;
105
+ toolRegistry: ToolRegistry;
106
+ toolAuthMiddleware: ReturnType<typeof createToolAuthMiddleware>;
107
+ manualAuthMiddleware: ReturnType<typeof createManualAuthMiddleware>;
108
+ toolHandlerFactory: ReturnType<typeof createToolHandlerFactory>;
109
+ // ── Server-time seams (enterprise overwrites after construction) ────────
110
+ /** `start_session` backing — core default {@link UuidSessionSink}. */
111
+ sessionSink: ISessionSink;
112
+ /** Connection-key LLM metering view — core default unmetered. */
113
+ usageMeter: ILlmUsageMeter;
114
+ /** SSO plugins the auth router mounts — same array instance as the port. */
115
+ authProviders: AuthProviderPlugin[];
116
+ }
117
+
118
+ export async function createCoreServices(
119
+ config: CoreConfig,
120
+ ports: CorePorts = {},
121
+ ): Promise<CoreServices> {
122
+ // Fail fast on a runtime whose git is too old for `--no-write-fetch-head`
123
+ // (see `git-version.ts`): every clone, fetch and refresh below depends on it,
124
+ // so an unsupported binary is better surfaced here than at the first merge.
125
+ await assertGitVersion();
126
+ const db = getDb(config.databaseUrl);
127
+ // Migrations must run BEFORE any service that reads or writes a managed
128
+ // table. `PendingCommitsService.startupReconcile` (called later in this
129
+ // function) hits `pending_commits` — on a fresh DB, deferring migrations to
130
+ // after createServices would 42P01 the boot.
131
+ //
132
+ // DIVERGENCE vs bevel-platform's copy of this file (Phase C reconciliation):
133
+ // upstream still calls the legacy single-folder `runMigrations(db)`; this
134
+ // package runs its own squashed idempotent CORE history from the packaged
135
+ // `migrations/` folder, tracked in `__drizzle_migrations_core`. An
136
+ // enterprise overlay runs its own history AFTER this (see migrate.ts).
137
+ await runCoreMigrations(db, coreMigrationsDir());
138
+ const workspaceService = new WorkspaceService(
139
+ config.workspacesRoot,
140
+ config.kbRepoUrl,
141
+ config.kbDirName,
142
+ config.gitUsername,
143
+ );
144
+ // Seed (or top-up) the KB remote before the first clone so the rest of the app
145
+ // can keep assuming the remote already carries the protected branches + base
146
+ // scaffolding — a fresh or partially-populated remote no longer needs to have
147
+ // been forked from the standalone template.
148
+ const kbSeedService = new KbSeedService(
149
+ config.kbRepoUrl,
150
+ config.kbTemplateDir,
151
+ [...PROTECTED_BRANCHES],
152
+ DEFAULT_BRANCH,
153
+ config.seedAdminEmails,
154
+ config.gitUsername,
155
+ );
156
+ workspaceService.setSeedService(kbSeedService);
157
+ // Shared, workspace-independent store for oversized `call_tool_chain` results,
158
+ // read back via `read_file`. Sibling of `workspacesRoot`, never committed.
159
+ const spillStore = new SpillStore(config.spillRoot);
160
+ const accessControl = new AccessControlService(workspaceService, config.kbDirName);
161
+ // Creator read-grant on creation: read is default-deny, so every surface
162
+ // that creates KB files/folders (human routes, agent tools, upload apply)
163
+ // consults this planner to keep creations visible to their creator.
164
+ const creatorAccess = new CreatorAccessService(workspaceService, accessControl, config.kbDirName);
165
+
166
+ // Ontology-session boundary: records each agent run's touched ontologies and
167
+ // blocks writes once a run has crossed ontologies. Postgres-backed so the
168
+ // boundary survives a restart.
169
+ const sessionOntologyService = new SessionOntologyService(db);
170
+ // Per-run write restriction (by file extension). Shared by the workspace tool
171
+ // surface (which enforces it) and the routine runner (which sets it for
172
+ // dashboard-only `watchlist_check` runs). In-memory: a restriction lives only for
173
+ // one run, unlike the Postgres-backed ontology touched-set above.
174
+ const routineWritePolicy = new RoutineWritePolicyService();
175
+ // Skills: discovered from the default-branch workspace only (global catalog).
176
+ const skillService = new SkillService(workspaceService, accessControl, config.kbDirName);
177
+ // Tool manuals: user-authored `*.tool` files under `Tools/` in the default
178
+ // branch — access-controlled like Skills, served to external agents via
179
+ // `GET /api/agent/all-tools` and registered on the MCP proxy's UTCP client.
180
+ const toolManualService = new ToolManualService(workspaceService, accessControl, config.kbDirName);
181
+ // Auth service — resolves identities for login, PR author attribution, and
182
+ // access lookups. (Change requests now store the author email directly, so
183
+ // PullRequestService no longer depends on it for attribution.)
184
+ const authService = new AuthService(db, config);
185
+ const authMiddleware = createAuthMiddleware(authService);
186
+
187
+ // Shared mutex so git and diff operations on the same workspace serialize
188
+ // against each other — a backup-reseed races a concurrent commit otherwise.
189
+ const workspaceMutex = new WorkspaceMutex();
190
+ // Workflow lifecycle hooks — the ONE registry this composition shares
191
+ // between GitService (advisory commit validation), the session-ontology
192
+ // gate (blocking preWrite), and the enterprise composition root, which
193
+ // registers module-owned handlers on `workflowService.hooks` right after
194
+ // this function returns. Core registers none: no commit-time validation
195
+ // (advisory anyway) and no ontology write block.
196
+ const workflowHooks = new WorkflowHooks();
197
+ const gitService = new GitService(
198
+ workspaceService,
199
+ workflowHooks,
200
+ config.kbDirName,
201
+ workspaceMutex,
202
+ accessControl,
203
+ );
204
+ // A fresh clone has already fetched every ref — let the git layer skip the
205
+ // redundant implicit `git fetch` on the first `listBranches` after bootstrap.
206
+ workspaceService.setWorkspaceClonedListener((id) => gitService.noteWorkspaceFetched(id));
207
+ const pullRequestService = new PullRequestService(
208
+ db,
209
+ workspaceService,
210
+ accessControl,
211
+ gitService,
212
+ );
213
+ const diffService = new DiffService(
214
+ workspaceService,
215
+ workspaceMutex,
216
+ config.workspacesRoot,
217
+ config.backupsRoot,
218
+ config.kbDirName,
219
+ );
220
+ // Late-bind the diff service into WorkspaceService so file writes/moves
221
+ // trigger backup updates. (GitService used to take a diffService too — for
222
+ // the post-switch backup reseed — but switchBranch is gone with the
223
+ // per-branch workspace model, so the injection no longer applies.)
224
+ workspaceService.setDiffService(diffService);
225
+ const reviewWorkflowService = new ReviewWorkflowService(
226
+ db,
227
+ accessControl,
228
+ workspaceService,
229
+ gitService,
230
+ );
231
+ // Late-bind the comment enricher so PullRequestService.getPrDetail includes
232
+ // our DB-backed comments without forcing a circular constructor dependency.
233
+ pullRequestService.setDetailEnricher(reviewWorkflowService);
234
+
235
+ // Workflow facade — the abstraction every app consumer should reach for
236
+ // instead of the individual git / PR / review-workflow services. See
237
+ // PLAN.md for the migration story. Today it delegates straight through;
238
+ // implementations migrate into the workflow module over later steps.
239
+ const fileLockService = new FileLockService(db);
240
+ // Background commit queue. The `WorkflowService.releaseLock` path
241
+ // enqueues a row here instead of running commitFile + push inline; the
242
+ // worker drains the queue out of band so a git hiccup can't block the
243
+ // user-visible save path. See `lock-decoupling-plan.md`.
244
+ const pendingCommitsService = new PendingCommitsService(db);
245
+ // Let the git status path tell an expected dirty tree (queued saves still
246
+ // draining) from a genuinely orphaned one before it warns loudly.
247
+ gitService.setPendingCommitsProbe((workspaceId) =>
248
+ pendingCommitsService.hasAnyForWorkspace(workspaceId),
249
+ );
250
+ // In-process event bus: every WorkflowService mutation method that
251
+ // succeeds emits a typed event; the SSE route fans it to connected
252
+ // browser sessions. Single instance per Node process — survives across
253
+ // requests, doesn't survive restarts (clients reconnect + resync).
254
+ const eventBus = new WorkflowEventBus();
255
+ // In-process post-commit hook (distinct from the SSE bus): fires once per
256
+ // committed change (batched paths) so catalogs refresh instantly and the
257
+ // id-repair keeps the id namespace collision-free. Subscribers are registered
258
+ // below, once the reacting services exist.
259
+ const fileChangeNotifier = new FileChangeNotifier();
260
+ const workflowService = new WorkflowService(
261
+ db,
262
+ gitService,
263
+ pullRequestService,
264
+ reviewWorkflowService,
265
+ workspaceService,
266
+ accessControl,
267
+ fileLockService,
268
+ pendingCommitsService,
269
+ config.kbDirName,
270
+ eventBus,
271
+ fileChangeNotifier,
272
+ // Exposed as `workflowService.hooks` — the SAME instance GitService and
273
+ // the session-ontology gate consult, so enterprise registrations against
274
+ // it reach every hook point.
275
+ workflowHooks,
276
+ );
277
+
278
+ // Subscriber A — catalog freshness: a committed change drops the affected
279
+ // caches immediately instead of waiting out their TTLs. The tool/skill
280
+ // catalogs are global but read the DEFAULT branch only, so only
281
+ // default-branch changes under their folders matter. (The kb-graph id-index
282
+ // invalidation that used to live in this subscriber is registered by the
283
+ // enterprise overlay, next to the kb-graph service it belongs to — the
284
+ // caches are independent, so the split preserves behavior.)
285
+ fileChangeNotifier.onFilesChanged(({ branch, paths }) => {
286
+ if (branch !== DEFAULT_BRANCH) return;
287
+ if (paths.some((p) => p.startsWith(`${config.kbDirName}/${TOOLS_DIR}/`))) toolManualService.invalidate();
288
+ if (paths.some((p) => p.startsWith(`${config.kbDirName}/${SKILLS_DIR}/`))) skillService.invalidate();
289
+ });
290
+
291
+ // Admin = `Admin` role in roles.yaml, resolved through the access model on the
292
+ // default branch (no env allow-list).
293
+ const adminAccess = new AdminAccessService(accessControl, workspaceService, DEFAULT_BRANCH);
294
+
295
+ // Secrets Vault: the per-user store of credentials (static API keys + OAuth
296
+ // tokens) that back UTCP tool variables (`${FOO_API_KEY}`). Encrypted at rest
297
+ // with the connector-config key; read only by the `bevel-secrets` variable
298
+ // loader at tool-call time. Swap-seam: `ISecretsVaultService` could later be a
299
+ // client's external secret manager without touching the loader or the tools.
300
+ const secretsVaultService = new DbSecretsVaultService(
301
+ db,
302
+ config.secretsEncKey,
303
+ undefined,
304
+ // Scope-driven resolution: a `.tool`'s declared variable scope decides whether
305
+ // `resolve` reads the shared (admin) row or the caller's own per-user row.
306
+ (key) => toolManualService.scopeOfVariable(key),
307
+ );
308
+ // Register the `bevel-secrets` UTCP variable loader against this vault so any
309
+ // UTCP client can resolve `${VAR}` from the caller's secrets at tool-call time.
310
+ registerBevelSecretsVariableLoader(secretsVaultService);
311
+
312
+ // Zero-config OAuth for bare `type: mcp` `.tool`s: when the remote server
313
+ // demands OAuth (MCP authorization spec), discover its authorization server,
314
+ // dynamically register a public PKCE client, and persist the provider as the
315
+ // shared vault row — the tool catalog then decorates the manual with a
316
+ // synthetic per-user sign-in. Setter-injected: this service needs the vault,
317
+ // which is constructed after the tool-manual service.
318
+ const mcpOAuthDiscovery = new McpOAuthDiscoveryService({
319
+ secretsVault: secretsVaultService,
320
+ redirectUri: `${config.publicBackendUrl}/api/secrets/oauth/callback`,
321
+ });
322
+ toolManualService.setMcpAuthDiscovery(mcpOAuthDiscovery);
323
+
324
+ // Least-privilege internal tokens: minted per (workspace, user, scope) by the
325
+ // agents' code-mode clients and by the MCP proxy, verified by the tool-auth
326
+ // middleware below — the same instance must back both sides.
327
+ const internalTokenService = new InternalTokenService({ prefix: config.internalTokenPrefix });
328
+
329
+ // GDPR erasure path: admin-driven user deletion. The core service erases the
330
+ // rows it owns; each module contributes its slice as a participant.
331
+ const accountErasureService = new AccountErasureService(db, ports.erasureParticipants ?? []);
332
+
333
+ // MCP (remote agent access). ExternalApiKeyService handles connection-key
334
+ // lifecycle; McpSessionStore holds per-session userId in memory
335
+ // (single-replica — see docs/mcp-remote-access.md). McpService is now a
336
+ // GENERIC proxy: per session it discovers the UTCP manual at /api/agent/utcp
337
+ // over loopback and re-exposes every tool, dispatching calls back through the
338
+ // REST tool surface (so agent logic + metering live there, once).
339
+ const externalApiKeyService = new ExternalApiKeyService(db, config.externalApiKeyPrefix);
340
+ const mcpSessionStore = new McpSessionStore();
341
+ const mcpService = new McpService(
342
+ mcpSessionStore,
343
+ {
344
+ // Loopback to our own REST tool surface — 127.0.0.1 (not localhost) to pin
345
+ // IPv4 and dodge resolver ambiguity. The proxy authenticates each call with
346
+ // the caller's own connection key.
347
+ loopbackBaseUrl: `http://127.0.0.1:${config.port}`,
348
+ // Manual namespace + UTCP variable prefix (KNOWLEDGE_BASE_API_URL / …).
349
+ manualName: 'KNOWLEDGE_BASE',
350
+ // Oversized chain results spill here too — an external MCP session has no
351
+ // ambient workspace, so it reads the spill back by ref via `read_file`.
352
+ spillStore,
353
+ // For the needs-authorization setup link surfaced to external agents.
354
+ publicFrontendUrl: config.publicFrontendUrl,
355
+ },
356
+ // Pre-dispatch per-user credential check: the vault answers "has this caller
357
+ // set it?" and the manual catalog answers "which user-scoped vars does this
358
+ // tool need?".
359
+ secretsVaultService,
360
+ toolManualService,
361
+ // Loopback bearer mint for OAuth/JWT sessions — their own bearer would
362
+ // 401 at the connection-key/internal-only /api/agent/* hop.
363
+ internalTokenService,
364
+ // Session-grant reset for broken tool sign-ins. A closure because the
365
+ // provider is constructed just below (it needs nothing from McpService;
366
+ // the binding is only dereferenced at call time, long after boot).
367
+ (bearer) => mcpOAuthProvider.revokeByAccessToken(bearer),
368
+ );
369
+ // MCP OAuth 2.1 authorization server (our own AS): lets MCP clients with no
370
+ // pre-shared connection key connect via the standard 401 → discovery → DCR →
371
+ // authorize (PKCE) flow. The authorize step routes the browser to /connect
372
+ // where the user configures their tools; the resulting access token resolves
373
+ // to that user in the MCP auth middleware, like a connection key.
374
+ const mcpOAuthProvider = new BevelOAuthProvider({
375
+ db,
376
+ crypto: config.secretsEncKey ? new TokenCrypto(config.secretsEncKey) : null,
377
+ stateSecret: config.jwtSecret,
378
+ publicFrontendUrl: config.publicFrontendUrl,
379
+ tokenPrefix: config.mcpOAuthTokenPrefix,
380
+ });
381
+ // RFC 9728 pointer carried on every MCP 401 challenge so OAuth-capable
382
+ // clients discover the AS. Single source of truth for the resource id.
383
+ const mcpResourceUrl = new URL('/api/mcp', config.publicBackendUrl);
384
+ const mcpResourceMetadataUrl = getOAuthProtectedResourceMetadataUrl(mcpResourceUrl);
385
+ const mcpAuthMiddleware = createMcpAuthMiddleware(
386
+ authService,
387
+ externalApiKeyService,
388
+ mcpOAuthProvider,
389
+ mcpResourceMetadataUrl,
390
+ );
391
+
392
+ // ── Unified tool surface ──────────────────────────────────────────────
393
+ // ONE catalog of self-describing UTCP tools, served as two manuals (external
394
+ // for CI/MCP; internal for our agent's loopback code-mode client) and hosted
395
+ // by each owning module behind shared auth + context utilities. The core
396
+ // server assembles the router (registers tool defs + mounts endpoints). The
397
+ // `internalTokenService` minted above (shared with the agent factories) is
398
+ // the same one the tool-auth middleware verifies internal tokens against.
399
+ const toolRegistry = new ToolRegistry();
400
+ const resolveToolContext = createToolContextResolver({
401
+ authService,
402
+ workspaceService,
403
+ workflowService,
404
+ events: eventBus,
405
+ kbDirName: config.kbDirName,
406
+ creatorAccess,
407
+ });
408
+ const toolHandlerFactory = createToolHandlerFactory(resolveToolContext);
409
+ const toolAuthMiddleware = createToolAuthMiddleware(externalApiKeyService, internalTokenService);
410
+ // Read-only manual endpoints accept the above PLUS a browser JWT, so a
411
+ // logged-in user can browse the catalog with their session. Execution routes
412
+ // keep `toolAuthMiddleware` (no JWT), so a session can read but not invoke.
413
+ const manualAuthMiddleware = createManualAuthMiddleware(externalApiKeyService, internalTokenService, authService);
414
+
415
+ // Recovery-bot identity: a synthetic `recovery-bot@bevel.local` user
416
+ // backing (a) the recovery agent's commit authorship and (b) the
417
+ // `'system'` feedback notice's user_id FK. Idempotent ensure so this
418
+ // is safe to call on every boot.
419
+ const recoveryBot = await ensureRecoveryBotUser(db);
420
+
421
+ // Background commit worker. Drains `pending_commits` rows that the
422
+ // refactored `releaseLock` enqueues. On terminal failure (transient
423
+ // retry budget AND recovery-agent budget exhausted) the worker emits
424
+ // a `'system'` feedback notice that admins triage out of band.
425
+ //
426
+ // The orphan-startup sweep runs BEFORE start() so any rows that
427
+ // previous deploys left as `running` (process crashed mid-commit) get
428
+ // reset to `pending` before the worker starts claiming. The sweep
429
+ // also enqueues working-tree dirt that pre-dates the queue (the
430
+ // existing `target-company-state` orphans).
431
+ await pendingCommitsService.startupReconcile(
432
+ workspaceService.knownWorkspaces(),
433
+ { scan: (ws) => workspaceService.scanOrphanedPaths(ws.id) },
434
+ { email: recoveryBot.email, name: recoveryBot.name },
435
+ );
436
+ const pendingCommitsWorker = new PendingCommitsWorker({
437
+ service: pendingCommitsService,
438
+ workflow: {
439
+ runPendingCommit: (workspaceId, branch, path, user) =>
440
+ workflowService.runPendingCommit(workspaceId, branch, path, user),
441
+ },
442
+ // Both escalation sinks come through CorePorts: the recovery agent and the
443
+ // notice sink are enterprise-owned (background-agent factory / feedback
444
+ // dashboard); core defaults skip recovery and log to stderr.
445
+ recoveryAgent: ports.recoveryAgent ?? noopRecoveryAgent,
446
+ feedback: ports.systemNotice ?? consoleSystemNoticeSink,
447
+ workspaces: {
448
+ knownWorkspaces: () => workspaceService.knownWorkspaces(),
449
+ },
450
+ recoveryBot: {
451
+ id: recoveryBot.id,
452
+ email: recoveryBot.email,
453
+ name: recoveryBot.name,
454
+ },
455
+ });
456
+ pendingCommitsWorker.start();
457
+
458
+ return {
459
+ config,
460
+ db,
461
+ workspaceService,
462
+ kbSeedService,
463
+ spillStore,
464
+ accessControl,
465
+ creatorAccess,
466
+ sessionOntologyService,
467
+ routineWritePolicy,
468
+ skillService,
469
+ toolManualService,
470
+ authService,
471
+ authMiddleware,
472
+ accountErasureService,
473
+ gitService,
474
+ pullRequestService,
475
+ diffService,
476
+ reviewWorkflowService,
477
+ fileLockService,
478
+ workflowService,
479
+ eventBus,
480
+ fileChangeNotifier,
481
+ pendingCommitsService,
482
+ pendingCommitsWorker,
483
+ recoveryBot,
484
+ adminAccess,
485
+ secretsVaultService,
486
+ externalApiKeyService,
487
+ internalTokenService,
488
+ mcpService,
489
+ mcpAuthMiddleware,
490
+ mcpOAuthProvider,
491
+ toolRegistry,
492
+ toolAuthMiddleware,
493
+ manualAuthMiddleware,
494
+ toolHandlerFactory,
495
+ // Server-time seams — defaults here; the enterprise overlay overwrites
496
+ // (or, for the array, pushes into) these after construction.
497
+ sessionSink: ports.sessionSink ?? new UuidSessionSink(),
498
+ usageMeter: ports.usageMeter ?? unmeteredLlmUsage,
499
+ authProviders: ports.authProviders ?? [],
500
+ };
501
+ }