@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,13 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "postgresql",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "7",
8
+ "when": 1785448203355,
9
+ "tag": "0000_core_init",
10
+ "breakpoints": true
11
+ }
12
+ ]
13
+ }
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@bevel-software/platform-core-backend",
3
+ "version": "0.1.0",
4
+ "description": "Open-source core backend of the Bevel platform: git-backed knowledge workspace, workflow (branches/change requests/locks/SSE), skills, tools, secrets vault, access control and the remote MCP surface.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./schema": {
14
+ "types": "./dist/modules/database/core-schema.d.ts",
15
+ "default": "./dist/modules/database/core-schema.js"
16
+ },
17
+ "./modules/*": "./dist/modules/*",
18
+ "./shared/*": "./dist/shared/*",
19
+ "./package.json": "./package.json"
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "src",
24
+ "migrations",
25
+ "kb-template"
26
+ ],
27
+ "engines": {
28
+ "node": ">=22 <23"
29
+ },
30
+ "dependencies": {
31
+ "@mastra/core": "1.35.0",
32
+ "@modelcontextprotocol/sdk": "^1.29.0",
33
+ "@utcp/code-mode": "^1.2.12",
34
+ "@utcp/direct-call": "^1.1.1",
35
+ "@utcp/http": "^1.1.7",
36
+ "@utcp/mcp": "^1.1.3",
37
+ "@utcp/sdk": "^1.1.1",
38
+ "adm-zip": "^0.5.17",
39
+ "cors": "^2.8.5",
40
+ "dotenv": "^16.4.0",
41
+ "drizzle-orm": "^0.45.2",
42
+ "express": "^5.1.0",
43
+ "ignore": "^7.0.5",
44
+ "jsonwebtoken": "^9.0.3",
45
+ "pg": "^8.20.0",
46
+ "yaml": "^2.9.0",
47
+ "zod": "^3.24.0",
48
+ "@bevel-software/platform-shared": "0.1.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/adm-zip": "^0.5.8",
52
+ "@types/cors": "^2.8.17",
53
+ "@types/express": "^5.0.0",
54
+ "@types/express-serve-static-core": "^5.1.1",
55
+ "@types/jsonwebtoken": "^9.0.10",
56
+ "@types/node": "^22.0.0",
57
+ "@types/pg": "^8.20.0",
58
+ "@types/qs": "^6.15.1",
59
+ "drizzle-kit": "^0.31.10",
60
+ "tsx": "^4.19.0",
61
+ "typescript": "^5.8.0",
62
+ "vitest": "^2.1.9"
63
+ },
64
+ "license": "Apache-2.0",
65
+ "repository": {
66
+ "type": "git",
67
+ "url": "git+https://github.com/Bevel-Software/skill-and-tool-management.git",
68
+ "directory": "packages/core-backend"
69
+ },
70
+ "publishConfig": {
71
+ "access": "public"
72
+ },
73
+ "scripts": {
74
+ "build": "tsc -p tsconfig.json",
75
+ "typecheck": "tsc -p tsconfig.json --noEmit",
76
+ "test": "vitest run",
77
+ "test:live": "vitest run .live.test",
78
+ "db:generate": "drizzle-kit generate"
79
+ }
80
+ }
package/src/assets.ts ADDED
@@ -0,0 +1,25 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+
4
+ /**
5
+ * Locations of the assets shipped INSIDE this package (`files` in
6
+ * package.json): the squashed core migration history (`migrations/`) and the
7
+ * KB seed template (`kb-template/`). Both live at the PACKAGE ROOT, and this
8
+ * module is a direct child of either `src/` (in-repo / tsx) or `dist/`
9
+ * (compiled) — so one `..` hop from the module URL reaches the package root
10
+ * in BOTH layouts. Resolved lazily so bundlers that rewrite `import.meta.url`
11
+ * still get a sensible answer at call time.
12
+ */
13
+ function packageRoot(): string {
14
+ return fileURLToPath(new URL('..', import.meta.url));
15
+ }
16
+
17
+ /** Absolute path of the packaged core Drizzle migrations folder. */
18
+ export function coreMigrationsDir(): string {
19
+ return path.join(packageRoot(), 'migrations');
20
+ }
21
+
22
+ /** Absolute path of the packaged KB seed template (`kb-template/`). */
23
+ export function defaultKbTemplateDir(): string {
24
+ return path.join(packageRoot(), 'kb-template');
25
+ }
@@ -0,0 +1,91 @@
1
+ import type { ISessionSink } from '../modules/workspace/session-sink.js';
2
+ import type {
3
+ ISystemNoticeSink,
4
+ RecoveryAgentRunner,
5
+ } from '../modules/workflow/pending-commits.worker.js';
6
+ import type { ILlmUsageMeter } from '../modules/tool-auth/llm-usage-meter.js';
7
+ import type { AuthProviderPlugin } from '../modules/auth/auth.routes.js';
8
+ import type { IErasureParticipant } from '../modules/auth/account-erasure.service.js';
9
+
10
+ /**
11
+ * Every seam the enterprise overlay can fill in the CORE composition
12
+ * (`createCoreServices`). All fields are optional; each has a safe core-only
13
+ * default, so `createCoreServices(config)` with no ports yields a fully
14
+ * working core deployment.
15
+ *
16
+ * Two consumption patterns exist, and they matter for wiring order:
17
+ *
18
+ * - CONSTRUCTION-TIME ports (`recoveryAgent`, `systemNotice`,
19
+ * `erasureParticipants`): dereferenced while core services are being
20
+ * constructed. Enterprise implementations of these need core services that
21
+ * don't exist yet at that point (the background-agent factory, the thread
22
+ * service, …), so the enterprise root passes FORWARDING DELEGATORS / a
23
+ * mutable array here and assigns the real targets right after
24
+ * `createCoreServices` returns. That is safe because core only *calls* these
25
+ * ports at request/commit/erasure time, long after boot — the same
26
+ * late-binding pattern the composition root already uses for e.g. the MCP
27
+ * OAuth revoke closure.
28
+ *
29
+ * - SERVER-TIME seams (`sessionSink`, `usageMeter`, `authProviders`): only
30
+ * read when `createCoreServer` mounts routes / registers tools. Core seeds
31
+ * them onto `CoreServices` from these ports (with the defaults below); the
32
+ * enterprise root overwrites the `CoreServices` fields (or pushes into the
33
+ * `authProviders` array) after construction, before the server is built.
34
+ *
35
+ * (Commit-time KB validation and the ontology write block are NOT ports:
36
+ * they are workflow lifecycle HOOKS the enterprise root registers on
37
+ * `workflowService.hooks` after construction — see
38
+ * `modules/workflow/workflow-hooks.ts`.)
39
+ */
40
+ export interface CorePorts {
41
+ /**
42
+ * Backs the `start_session` tool. Core default: {@link UuidSessionSink}
43
+ * (a bare random id). Enterprise substitutes a sink that mints a real chat
44
+ * thread so the same id works end to end with `ask`.
45
+ */
46
+ sessionSink?: ISessionSink;
47
+ /**
48
+ * Recovery-agent dispatcher for the pending-commits worker. The worker
49
+ * requires one, so the core default is {@link noopRecoveryAgent} — a run
50
+ * that just returns, meaning the row stays pending until the recovery
51
+ * budget is exhausted and the worker escalates via `systemNotice`.
52
+ */
53
+ recoveryAgent?: RecoveryAgentRunner;
54
+ /**
55
+ * Where the pending-commits worker escalates terminal failures. Core
56
+ * default: {@link consoleSystemNoticeSink} (stderr, no dashboard).
57
+ * Enterprise passes its feedback service.
58
+ */
59
+ systemNotice?: ISystemNoticeSink;
60
+ /**
61
+ * Per-connection-key LLM usage metering shown on the connection-key
62
+ * management routes. Core default: {@link unmeteredLlmUsage} (no proxy,
63
+ * nothing to meter). Enterprise passes the LLM proxy's usage service.
64
+ */
65
+ usageMeter?: ILlmUsageMeter;
66
+ /**
67
+ * SSO login plugins the auth router mounts. Core default: `[]` (password
68
+ * login only). The array instance is kept on `CoreServices.authProviders`,
69
+ * so an enterprise root may pass an array it fills after construction.
70
+ */
71
+ authProviders?: AuthProviderPlugin[];
72
+ /**
73
+ * Module-owned GDPR-erasure slices run by `AccountErasureService`. Core
74
+ * default: `[]` (core erases only the rows it owns). The array reference is
75
+ * held — not copied — so an enterprise root may pass an array it fills after
76
+ * construction (participants are only iterated at erasure time).
77
+ */
78
+ erasureParticipants?: IErasureParticipant[];
79
+ }
80
+
81
+ /**
82
+ * Core default recovery agent: does nothing. The worker's retry ladder still
83
+ * works — a stuck row burns its recovery budget on these no-op runs and then
84
+ * escalates to the `systemNotice` sink, which is exactly the "no recovery
85
+ * agent available" behavior a core-only deployment wants.
86
+ */
87
+ export const noopRecoveryAgent: RecoveryAgentRunner = {
88
+ async run(): Promise<void> {
89
+ // Intentionally empty — see doc comment.
90
+ },
91
+ };
@@ -0,0 +1,338 @@
1
+ import express from 'express';
2
+ import cors from 'cors';
3
+ import path from 'node:path';
4
+ import type { Router, RequestHandler } from 'express';
5
+ import { createAuthRoutes } from '../modules/auth/auth.routes.js';
6
+ import { createWorkspaceRoutes } from '../modules/workspace/workspace.routes.js';
7
+ import { createDiffRoutes } from '../modules/diff/diff.routes.js';
8
+ import { createWorkflowRoutes } from '../modules/workflow/workflow.routes.js';
9
+ import { createEventsRoutes } from '../modules/workflow/events.routes.js';
10
+ import { createAccessRoutes } from '../modules/access/access.routes.js';
11
+ import { createMcpRoutes } from '../modules/mcp/mcp.routes.js';
12
+ import { createOAuthConsentRoutes } from '../modules/mcp/oauth/oauth-consent.routes.js';
13
+ import { mcpAuthRouter } from '@modelcontextprotocol/sdk/server/auth/router.js';
14
+ import { createManualRoutes } from '../modules/tool-registry/manual.routes.js';
15
+ import {
16
+ createToolManualsAgentRoutes,
17
+ createToolManualsBrowserRoutes,
18
+ registerToolManualsTools,
19
+ } from '../modules/tool-manuals/index.js';
20
+ import { registerWorkflowTools } from '../modules/workflow/agent-tools/workflow.tools.js';
21
+ import { registerWorkspaceTools } from '../modules/workspace/workspace.tools.js';
22
+ import { RECOVERY_BOT_EMAIL } from '../modules/workflow/recovery-bot.js';
23
+ import { registerSkillsTools, createSkillsRoutes } from '../modules/skills/index.js';
24
+ import type { SessionOntologyGate } from '../modules/workspace/session-ontology.gate.js';
25
+ import {
26
+ createSecretsVaultRoutes,
27
+ createSecretsVaultPublicRoutes,
28
+ } from '../modules/secrets-vault/index.js';
29
+ import { createAdminAccessRoutes } from '../modules/admin/admin-access.routes.js';
30
+ import { GIT_SHA } from '../version.js';
31
+ import type { CoreServices } from './create-core-services.js';
32
+
33
+ type ExpressApp = ReturnType<typeof express>;
34
+
35
+ /**
36
+ * The context handed to {@link ServerExtensions.tools}: everything an overlay
37
+ * needs to register its own tool defs + endpoint routes on the unified tool
38
+ * surface, exactly like the core modules do.
39
+ */
40
+ export interface ToolSurfaceCtx {
41
+ registry: CoreServices['toolRegistry'];
42
+ router: Router;
43
+ toolAuth: RequestHandler;
44
+ toolHandler: CoreServices['toolHandlerFactory'];
45
+ /** Shared ontology-session boundary gate config (file tools + graph tools). */
46
+ sessionOntologyGate: SessionOntologyGate;
47
+ core: CoreServices;
48
+ }
49
+
50
+ /**
51
+ * The hook points an overlay (the enterprise app) uses to add its surfaces to
52
+ * the core server. Each hook maps to a fixed slot in the LOAD-BEARING mount
53
+ * order encoded in {@link createCoreServer} — the order comments there explain
54
+ * why each slot sits where it does (Express 5 fires outer middleware before
55
+ * route matching, so pre-JWT surfaces MUST mount before the JWT `/api` mounts).
56
+ */
57
+ export interface ServerExtensions {
58
+ /**
59
+ * Request paths the global 10 MB JSON body parser must skip because the
60
+ * overlay's own router installs a larger parser for them (body-parser
61
+ * ignores a second parse once the first has run — see the comment at the
62
+ * parser below).
63
+ */
64
+ jsonParserExemptPaths?: string[];
65
+ /**
66
+ * Boot-time side effects that belong to the server lifecycle (startup
67
+ * reconciles, periodic sweeps). Runs after health/cors/json are installed,
68
+ * before any routes mount.
69
+ */
70
+ onBoot?(core: CoreServices): Promise<void> | void;
71
+ /** Un-authed overlay surfaces (e.g. OAuth callbacks hit by provider redirects). */
72
+ preAuth?(app: ExpressApp, core: CoreServices): void;
73
+ /**
74
+ * Overlay tool registrations on the unified tool surface. Runs after the
75
+ * core registrations and BEFORE the manual routes mount, preserving the
76
+ * "manual snapshot stays complete" invariant.
77
+ */
78
+ tools?(ctx: ToolSurfaceCtx): void;
79
+ /**
80
+ * Non-JWT overlay surfaces that historically mount AFTER the tools router
81
+ * but before the JWT-protected `/api` routes (LLM proxy, embed, upload).
82
+ * A separate phase from `preAuth` purely to preserve today's exact order.
83
+ */
84
+ postTools?(app: ExpressApp, core: CoreServices): void;
85
+ /** JWT-protected overlay routes; mounted after every core authed route. */
86
+ authed?(app: ExpressApp, core: CoreServices): void;
87
+ }
88
+
89
+ export async function createCoreServer(
90
+ core: CoreServices,
91
+ ext: ServerExtensions = {},
92
+ opts: { staticDir?: string } = {},
93
+ ): Promise<ExpressApp> {
94
+ const app = express();
95
+
96
+ // `credentials: true` so EventSource (`withCredentials: true`) can carry
97
+ // the `bevel_token` cookie set at login — the only auth path the
98
+ // EventSource API supports. `origin: true` reflects the request origin
99
+ // back in `Access-Control-Allow-Origin`, which the spec requires when
100
+ // credentials are in play (the wildcard `*` is refused alongside
101
+ // credentials). Cookie itself is `SameSite=Lax`, so a hostile cross-site
102
+ // page still can't read events on the user's behalf.
103
+ //
104
+ // `exposedHeaders` lets a BROWSER-based MCP client (e.g. MCP Inspector) read
105
+ // the Streamable-HTTP session header off the `initialize` response — custom
106
+ // response headers are hidden from browser JS unless exposed, so without this
107
+ // the client can't send `Mcp-Session-Id` back and every follow-up 400s with
108
+ // "session id does not match any active session". `WWW-Authenticate` is
109
+ // exposed so a browser client can read the 401 challenge and start the OAuth
110
+ // discovery flow. (Native clients like Claude Code aren't subject to CORS.)
111
+ app.use(
112
+ cors({
113
+ origin: true,
114
+ credentials: true,
115
+ exposedHeaders: ['Mcp-Session-Id', 'Mcp-Protocol-Version', 'WWW-Authenticate'],
116
+ }),
117
+ );
118
+ // Global JSON body parser. Some overlay routes carry a whole document dump
119
+ // (e.g. the onboarding import), so their routers install their own larger
120
+ // parser — skip the global one for those paths (body-parser ignores a second
121
+ // parse once the first has run, so without this the 10 MB global limit would
122
+ // shadow the route's larger limit and 413 a large-but-valid upload before it
123
+ // ever reaches the route).
124
+ const jsonExemptPaths = new Set(ext.jsonParserExemptPaths ?? []);
125
+ const globalJson = express.json({ limit: '10mb' });
126
+ app.use((req, res, next) => {
127
+ if (jsonExemptPaths.has(req.path)) return next();
128
+ return globalJson(req, res, next);
129
+ });
130
+
131
+ // Health check. `sha` is the git commit this build was produced from
132
+ // (see version.ts) so the deploy pipeline can confirm a staging/production
133
+ // rollout matches the merged commit before smoke-testing it.
134
+ app.get('/api/health', (_req, res) => {
135
+ res.json({ status: 'ok', sha: GIT_SHA, timestamp: Date.now() });
136
+ });
137
+
138
+ // Overlay boot-time side effects (startup reconciles, periodic sweeps).
139
+ await ext.onBoot?.(core);
140
+
141
+ // Auth routes (unprotected — login endpoint must be accessible)
142
+ app.use(
143
+ '/api',
144
+ createAuthRoutes(
145
+ core.authService,
146
+ core.authMiddleware,
147
+ core.authProviders,
148
+ core.config.loginPasswordEnabled,
149
+ ),
150
+ );
151
+
152
+ // MCP routes must mount BEFORE every `app.use('/api', authMiddleware, …)`
153
+ // below: Express 5 fires the outer JWT middleware before deciding whether
154
+ // its router has a matching route, so a request to `POST /api/mcp` carrying
155
+ // a connection-key (non-JWT) bearer would otherwise be 401'd by the first
156
+ // protected mount before this router ever saw it.
157
+ app.use('/api', createMcpRoutes(
158
+ core.mcpService,
159
+ core.externalApiKeyService,
160
+ core.mcpAuthMiddleware,
161
+ core.authMiddleware,
162
+ core.usageMeter,
163
+ ));
164
+
165
+ // MCP OAuth 2.1 authorization server: /authorize, /token, /register,
166
+ // /revoke + the /.well-known metadata documents (the SDK requires an
167
+ // app-root mount for those paths). Un-authed by design — these endpoints
168
+ // are hit by MCP clients with no credentials yet and by bare browser
169
+ // navigations; the user attaches to the flow at the JWT/cookie-authed
170
+ // consent routes below. Must sit before the prod SPA catch-all or the
171
+ // .well-known documents would be swallowed by index.html.
172
+ app.use(mcpAuthRouter({
173
+ provider: core.mcpOAuthProvider,
174
+ issuerUrl: new URL(core.config.publicBackendUrl),
175
+ resourceServerUrl: new URL('/api/mcp', core.config.publicBackendUrl),
176
+ scopesSupported: ['mcp'],
177
+ resourceName: 'Bevel MCP',
178
+ }));
179
+
180
+ // Un-authed overlay surfaces (e.g. connector OAuth callbacks hit by a
181
+ // provider's browser redirect with no Authorization header).
182
+ ext.preAuth?.(app, core);
183
+
184
+ // Secrets Vault OAuth callback — also hit by a provider browser redirect with
185
+ // no Authorization header, so it mounts UN-AUTHED here, recovering the caller
186
+ // from the signed `state`. The authed CRUD/start routes mount later.
187
+ const secretsVaultRoutesDeps = {
188
+ secretsVault: core.secretsVaultService,
189
+ toolManualService: core.toolManualService,
190
+ accessControl: core.accessControl,
191
+ stateSecret: core.config.jwtSecret,
192
+ publicBackendUrl: core.config.publicBackendUrl,
193
+ publicFrontendUrl: core.config.publicFrontendUrl,
194
+ };
195
+ app.use('/api', createSecretsVaultPublicRoutes(secretsVaultRoutesDeps));
196
+
197
+ // Unified tool surface — the ONE catalog, served as two UTCP manuals + each
198
+ // tool's module-hosted endpoint, all behind the shared `toolAuth` (connection
199
+ // key OR internal token). Each module registers its tool defs + hosts its
200
+ // routes on this one router. Mount BEFORE the JWT `/api` mounts — connection-
201
+ // key / internal-token bearers would be 401'd by the outer JWT middleware
202
+ // otherwise. Manuals are added LAST so they snapshot the full catalog:
203
+ // core registrations first, then the overlay's (`ext.tools`), then the
204
+ // manual routes.
205
+ const toolsRouter = express.Router();
206
+ const ta = core.toolAuthMiddleware;
207
+ const th = core.toolHandlerFactory;
208
+ // Shared ontology-session boundary gate config, consumed by every tool
209
+ // surface that touches the KB (file tools + graph tools). The gate's
210
+ // blocking decision runs through the workflow hooks: core registers none
211
+ // (tracking only); the enterprise root registers the ontology block on
212
+ // `workflowService.hooks` before this server is built.
213
+ const sessionOntologyGate = {
214
+ service: core.sessionOntologyService,
215
+ enabled: core.config.ontologySessionBlock,
216
+ kbDirName: core.config.kbDirName,
217
+ recoveryBotEmail: RECOVERY_BOT_EMAIL,
218
+ hooks: core.workflowService.hooks,
219
+ };
220
+ registerWorkflowTools(core.toolRegistry, toolsRouter, ta, th);
221
+ registerWorkspaceTools(core.toolRegistry, toolsRouter, ta, th, core.spillStore, core.accessControl, core.config.kbDirName, sessionOntologyGate, core.routineWritePolicy, core.sessionSink);
222
+ registerSkillsTools(core.toolRegistry, toolsRouter, ta, th, core.skillService);
223
+ registerToolManualsTools(core.toolRegistry, toolsRouter, ta, th, core.toolManualService, {
224
+ accessControl: core.accessControl,
225
+ // The vault satisfies the module's local VariableStatusPort — `list_tool_setup`
226
+ // reports configuration booleans only; secret values never ride through tools.
227
+ variableStatus: core.secretsVaultService,
228
+ });
229
+ // Overlay tool registrations (defs + module-hosted endpoints).
230
+ ext.tools?.({
231
+ registry: core.toolRegistry,
232
+ router: toolsRouter,
233
+ toolAuth: ta,
234
+ toolHandler: th,
235
+ sessionOntologyGate,
236
+ core,
237
+ });
238
+ toolsRouter.use(createManualRoutes(
239
+ core.toolRegistry,
240
+ core.manualAuthMiddleware,
241
+ async (userId) => (await core.authService.getUserById(userId))?.email,
242
+ ));
243
+ // The aggregated manual list (KB + the caller's accessible `.tool`s) + inline
244
+ // `.tool` sub-manuals. Mounted on the tools router so they share `manualAuth`
245
+ // and sit before the JWT `/api` mounts.
246
+ toolsRouter.use(createToolManualsAgentRoutes(
247
+ core.toolManualService,
248
+ core.manualAuthMiddleware,
249
+ async (userId) => (await core.authService.getUserById(userId))?.email,
250
+ ));
251
+ app.use('/api', toolsRouter);
252
+
253
+ // Non-JWT overlay surfaces that sit between the tools router and the
254
+ // JWT-protected `/api` routes (LLM proxy, embed, upload — see the phase
255
+ // doc on ServerExtensions.postTools).
256
+ ext.postTools?.(app, core);
257
+
258
+ // Protected routes
259
+ app.use('/api', core.authMiddleware, createWorkspaceRoutes(
260
+ core.workspaceService,
261
+ core.authService,
262
+ core.workflowService,
263
+ core.eventBus,
264
+ core.accessControl,
265
+ core.config.kbDirName,
266
+ core.creatorAccess,
267
+ ));
268
+ // Workflow is the only branches / changes / change-request surface. The
269
+ // former /git/*, /pr/*, /pr/:n/* routes are gone — every consumer goes
270
+ // through /workflow/* now.
271
+ app.use('/api', core.authMiddleware, createWorkflowRoutes(
272
+ core.workflowService,
273
+ core.workspaceService,
274
+ core.authService,
275
+ core.eventBus,
276
+ ));
277
+ // SSE event-bus surface. The route owns its own auth gating via the
278
+ // injected middleware (which accepts both Bearer and the `bevel_token`
279
+ // cookie — the cookie path is what makes EventSource work, since the
280
+ // browser API can't set headers). Mounted as its own app.use so it
281
+ // doesn't share an outer middleware chain with the JSON routes above.
282
+ app.use('/api', createEventsRoutes(core.eventBus, core.authMiddleware));
283
+ app.use('/api', core.authMiddleware, createDiffRoutes(
284
+ core.diffService,
285
+ core.authService,
286
+ core.workflowService,
287
+ core.accessControl,
288
+ core.config.kbDirName,
289
+ ));
290
+ app.use('/api', core.authMiddleware, createAccessRoutes(
291
+ core.accessControl,
292
+ core.workspaceService,
293
+ core.authService,
294
+ core.workflowService,
295
+ core.eventBus,
296
+ core.db,
297
+ core.config.kbDirName,
298
+ ));
299
+ app.use('/api', core.authMiddleware, createSkillsRoutes(core.skillService));
300
+ // Admin-status resolver (CORE — see the note in admin-access.routes.ts;
301
+ // the full admin router is an enterprise `ext.authed` extension).
302
+ app.use('/api', core.authMiddleware, createAdminAccessRoutes(core.adminAccess));
303
+ app.use('/api', core.authMiddleware, createToolManualsBrowserRoutes(core.toolManualService));
304
+ app.use('/api', core.authMiddleware, createSecretsVaultRoutes(secretsVaultRoutesDeps));
305
+ // The authed tail of the MCP OAuth flow: /connect calls these to describe
306
+ // the pending authorization and, on Finish, to mint the one-time code. The
307
+ // browser arrives via redirect with no Authorization header, so the JWT
308
+ // middleware's bevel_token-cookie fallback is what identifies the user.
309
+ app.use('/api', core.authMiddleware, createOAuthConsentRoutes({
310
+ provider: core.mcpOAuthProvider,
311
+ stateSecret: core.config.jwtSecret,
312
+ }));
313
+
314
+ // JWT-protected overlay routes.
315
+ ext.authed?.(app, core);
316
+
317
+ // In production, serve the frontend static build
318
+ if (opts.staticDir) {
319
+ const frontendDist = opts.staticDir;
320
+ app.use(express.static(frontendDist));
321
+ app.get('{*path}', (req, res) => {
322
+ // Non-SPA namespaces must NOT resolve to index.html. In particular, an
323
+ // OAuth well-known metadata URL the mcpAuthRouter doesn't serve (a variant
324
+ // the client probes, e.g. the root protected-resource or a path-suffixed
325
+ // authorization-server doc) would otherwise return `200 + HTML`, which an
326
+ // MCP client parses as JSON → "expected object, received undefined" and
327
+ // the whole connection fails. A clean 404 lets discovery fall through to
328
+ // the variant we do serve. Same reasoning for stray `/api/*` gets.
329
+ if (req.path.startsWith('/.well-known/') || req.path.startsWith('/api/')) {
330
+ res.status(404).json({ error: 'Not found' });
331
+ return;
332
+ }
333
+ res.sendFile(path.join(frontendDist, 'index.html'));
334
+ });
335
+ }
336
+
337
+ return app;
338
+ }