@bevel-software/platform-core-backend 0.31.0 → 0.33.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 (984) hide show
  1. package/agent-guide/access-control.md +5 -0
  2. package/agent-guide/html-views.md +46 -10
  3. package/dist/core/create-core-server.d.ts.map +1 -1
  4. package/dist/core/create-core-server.js +29 -4
  5. package/dist/core/create-core-server.js.map +1 -1
  6. package/dist/core/create-core-services.d.ts +14 -2
  7. package/dist/core/create-core-services.d.ts.map +1 -1
  8. package/dist/core/create-core-services.js +34 -7
  9. package/dist/core/create-core-services.js.map +1 -1
  10. package/dist/core/lifecycle.d.ts +8 -0
  11. package/dist/core/lifecycle.d.ts.map +1 -1
  12. package/dist/core/lifecycle.js +4 -0
  13. package/dist/core/lifecycle.js.map +1 -1
  14. package/dist/core/public-config.d.ts +10 -0
  15. package/dist/core/public-config.d.ts.map +1 -1
  16. package/dist/core/public-config.js +10 -0
  17. package/dist/core/public-config.js.map +1 -1
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/modules/access/access-control.service.d.ts +3 -3
  23. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  24. package/dist/modules/access/access-control.service.js +4 -5
  25. package/dist/modules/access/access-control.service.js.map +1 -1
  26. package/dist/modules/access/access-declarations.d.ts +1 -1
  27. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  28. package/dist/modules/access/access-declarations.js +1 -1
  29. package/dist/modules/access/access-declarations.js.map +1 -1
  30. package/dist/modules/access/access-mutation.service.d.ts +8 -3
  31. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  32. package/dist/modules/access/access-mutation.service.js +3 -3
  33. package/dist/modules/access/access-mutation.service.js.map +1 -1
  34. package/dist/modules/access/access-requests.contract.d.ts +1 -1
  35. package/dist/modules/access/access-requests.contract.d.ts.map +1 -1
  36. package/dist/modules/access/access-requests.routes.d.ts +3 -3
  37. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  38. package/dist/modules/access/access-requests.routes.js +7 -7
  39. package/dist/modules/access/access-requests.routes.js.map +1 -1
  40. package/dist/modules/access/access-requests.service.d.ts +21 -20
  41. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  42. package/dist/modules/access/access-requests.service.js +22 -68
  43. package/dist/modules/access/access-requests.service.js.map +1 -1
  44. package/dist/modules/access/access-view.d.ts +1 -1
  45. package/dist/modules/access/access-view.d.ts.map +1 -1
  46. package/dist/modules/access/access-view.js +1 -1
  47. package/dist/modules/access/access-view.js.map +1 -1
  48. package/dist/modules/access/access.routes.d.ts +5 -7
  49. package/dist/modules/access/access.routes.d.ts.map +1 -1
  50. package/dist/modules/access/access.routes.js +4 -4
  51. package/dist/modules/access/access.routes.js.map +1 -1
  52. package/dist/modules/access/admin-locked-commit.d.ts +2 -2
  53. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  54. package/dist/modules/access/admin-locked-commit.js +1 -1
  55. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  56. package/dist/modules/access/capability-registry.js +1 -1
  57. package/dist/modules/access/capability-registry.js.map +1 -1
  58. package/dist/modules/access/change-read-gate.d.ts +2 -2
  59. package/dist/modules/access/change-read-gate.d.ts.map +1 -1
  60. package/dist/modules/access/change-read-gate.js +1 -3
  61. package/dist/modules/access/change-read-gate.js.map +1 -1
  62. package/dist/modules/access/creator-access.d.ts +2 -2
  63. package/dist/modules/access/creator-access.d.ts.map +1 -1
  64. package/dist/modules/access/creator-access.js +2 -4
  65. package/dist/modules/access/creator-access.js.map +1 -1
  66. package/dist/modules/access/directory-sync-bot.d.ts +1 -1
  67. package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
  68. package/dist/modules/access/directory-sync-bot.js +1 -1
  69. package/dist/modules/access/directory-sync-bot.js.map +1 -1
  70. package/dist/modules/access/groups-admin.routes.d.ts +2 -2
  71. package/dist/modules/access/groups-admin.routes.d.ts.map +1 -1
  72. package/dist/modules/access/groups-admin.routes.js +2 -2
  73. package/dist/modules/access/groups-admin.routes.js.map +1 -1
  74. package/dist/modules/access/groups-admin.service.d.ts +1 -1
  75. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  76. package/dist/modules/access/groups-admin.service.js +2 -3
  77. package/dist/modules/access/groups-admin.service.js.map +1 -1
  78. package/dist/modules/access/groups-edit.js +2 -2
  79. package/dist/modules/access/groups-edit.js.map +1 -1
  80. package/dist/modules/access/index.d.ts +17 -0
  81. package/dist/modules/access/index.d.ts.map +1 -0
  82. package/dist/modules/access/index.js +6 -0
  83. package/dist/modules/access/index.js.map +1 -0
  84. package/dist/modules/access/reference-scan.js +1 -1
  85. package/dist/modules/access/reference-scan.js.map +1 -1
  86. package/dist/modules/access/roles-admin.service.d.ts +1 -1
  87. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  88. package/dist/modules/access/roles-admin.service.js +2 -5
  89. package/dist/modules/access/roles-admin.service.js.map +1 -1
  90. package/dist/modules/access/roles-edit.js +1 -1
  91. package/dist/modules/access/roles-edit.js.map +1 -1
  92. package/dist/modules/access/synced-groups-committer.d.ts +2 -2
  93. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  94. package/dist/modules/access/synced-groups-committer.js +2 -2
  95. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  96. package/dist/modules/access/synced-groups-writer.js +2 -2
  97. package/dist/modules/access/synced-groups-writer.js.map +1 -1
  98. package/dist/modules/access/user-access-removal.service.d.ts +1 -1
  99. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  100. package/dist/modules/access/user-access-removal.service.js +2 -5
  101. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  102. package/dist/modules/access-model/index.d.ts +29 -0
  103. package/dist/modules/access-model/index.d.ts.map +1 -0
  104. package/dist/modules/access-model/index.js +26 -0
  105. package/dist/modules/access-model/index.js.map +1 -0
  106. package/dist/modules/access-model/roles-yaml-guard.d.ts +1 -1
  107. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  108. package/dist/modules/admin/admin-access.routes.d.ts +1 -1
  109. package/dist/modules/admin/admin-access.routes.d.ts.map +1 -1
  110. package/dist/modules/admin/admin-access.routes.js +1 -1
  111. package/dist/modules/admin/admin-access.routes.js.map +1 -1
  112. package/dist/modules/admin/admin-access.service.d.ts +2 -2
  113. package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
  114. package/dist/modules/admin/index.d.ts +8 -0
  115. package/dist/modules/admin/index.d.ts.map +1 -0
  116. package/dist/modules/admin/index.js +2 -0
  117. package/dist/modules/admin/index.js.map +1 -0
  118. package/dist/modules/agent-guide/agent-guide.js +1 -1
  119. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  120. package/dist/modules/agent-guide/agent-guide.tools.d.ts +3 -3
  121. package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
  122. package/dist/modules/agent-guide/agent-guide.tools.js +2 -4
  123. package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
  124. package/dist/modules/agent-guide/index.d.ts +1 -1
  125. package/dist/modules/agent-guide/index.d.ts.map +1 -1
  126. package/dist/modules/agent-guide/index.js +1 -1
  127. package/dist/modules/agent-guide/index.js.map +1 -1
  128. package/dist/modules/agent-instructions/read-preamble.d.ts +1 -1
  129. package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
  130. package/dist/modules/audit/agent-audit.service.d.ts +2 -2
  131. package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
  132. package/dist/modules/audit/agent-audit.service.js +1 -1
  133. package/dist/modules/audit/agent-audit.service.js.map +1 -1
  134. package/dist/modules/audit/agent-connection.routes.d.ts +1 -1
  135. package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -1
  136. package/dist/modules/audit/agent-connection.routes.js +1 -1
  137. package/dist/modules/audit/agent-connection.routes.js.map +1 -1
  138. package/dist/modules/audit/agent-rest-audit.middleware.d.ts +1 -1
  139. package/dist/modules/audit/agent-rest-audit.middleware.d.ts.map +1 -1
  140. package/dist/modules/audit/agent-rest-audit.middleware.js +1 -1
  141. package/dist/modules/audit/agent-rest-audit.middleware.js.map +1 -1
  142. package/dist/modules/audit/audit.routes.d.ts +3 -3
  143. package/dist/modules/audit/audit.routes.d.ts.map +1 -1
  144. package/dist/modules/audit/audit.routes.js +2 -2
  145. package/dist/modules/audit/audit.routes.js.map +1 -1
  146. package/dist/modules/auth/account-erasure.service.d.ts +3 -3
  147. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  148. package/dist/modules/auth/account-erasure.service.js +1 -5
  149. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  150. package/dist/modules/auth/account-hooks.d.ts +4 -6
  151. package/dist/modules/auth/account-hooks.d.ts.map +1 -1
  152. package/dist/modules/auth/account-hooks.js +7 -17
  153. package/dist/modules/auth/account-hooks.js.map +1 -1
  154. package/dist/modules/auth/account-switch-lock.d.ts +1 -1
  155. package/dist/modules/auth/account-switch-lock.d.ts.map +1 -1
  156. package/dist/modules/auth/account-switch-lock.js +1 -1
  157. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  158. package/dist/modules/auth/account.routes.d.ts +2 -2
  159. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  160. package/dist/modules/auth/account.routes.js +1 -1
  161. package/dist/modules/auth/account.routes.js.map +1 -1
  162. package/dist/modules/auth/auth.service.d.ts +10 -9
  163. package/dist/modules/auth/auth.service.d.ts.map +1 -1
  164. package/dist/modules/auth/auth.service.js +22 -21
  165. package/dist/modules/auth/auth.service.js.map +1 -1
  166. package/dist/modules/auth/index.d.ts +2 -0
  167. package/dist/modules/auth/index.d.ts.map +1 -1
  168. package/dist/modules/auth/oidc-auth-provider.js +1 -1
  169. package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
  170. package/dist/modules/code-mode/code-mode.tool.d.ts +1 -1
  171. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
  172. package/dist/modules/connection-probe/connection-probe.service.d.ts +2 -2
  173. package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
  174. package/dist/modules/connection-probe/connection-probe.service.js +1 -4
  175. package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
  176. package/dist/modules/database/core-schema.d.ts +128 -235
  177. package/dist/modules/database/core-schema.d.ts.map +1 -1
  178. package/dist/modules/database/core-schema.js +55 -36
  179. package/dist/modules/database/core-schema.js.map +1 -1
  180. package/dist/modules/database/index.d.ts +10 -0
  181. package/dist/modules/database/index.d.ts.map +1 -0
  182. package/dist/modules/database/index.js +4 -0
  183. package/dist/modules/database/index.js.map +1 -0
  184. package/dist/modules/database/migrate.d.ts.map +1 -1
  185. package/dist/modules/database/migrate.js +78 -3
  186. package/dist/modules/database/migrate.js.map +1 -1
  187. package/dist/modules/declared-variables/declared-variables.routes.d.ts +2 -2
  188. package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
  189. package/dist/modules/diff/diff.routes.d.ts +3 -3
  190. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  191. package/dist/modules/diff/diff.routes.js +3 -3
  192. package/dist/modules/diff/diff.routes.js.map +1 -1
  193. package/dist/modules/diff/diff.service.d.ts +2 -2
  194. package/dist/modules/diff/diff.service.d.ts.map +1 -1
  195. package/dist/modules/diff/index.d.ts +7 -0
  196. package/dist/modules/diff/index.d.ts.map +1 -0
  197. package/dist/modules/diff/index.js +2 -0
  198. package/dist/modules/diff/index.js.map +1 -0
  199. package/dist/modules/embed/account-link.service.d.ts +1 -1
  200. package/dist/modules/embed/account-link.service.d.ts.map +1 -1
  201. package/dist/modules/embed/account-link.service.js +1 -1
  202. package/dist/modules/embed/account-link.service.js.map +1 -1
  203. package/dist/modules/embed/embed.routes.d.ts +1 -1
  204. package/dist/modules/embed/embed.routes.d.ts.map +1 -1
  205. package/dist/modules/embed/embed.routes.js +2 -2
  206. package/dist/modules/embed/embed.routes.js.map +1 -1
  207. package/dist/modules/embed/embed.service.d.ts +1 -1
  208. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  209. package/dist/modules/embed/embed.tools.d.ts +4 -4
  210. package/dist/modules/embed/embed.tools.d.ts.map +1 -1
  211. package/dist/modules/embed/embed.tools.js +3 -5
  212. package/dist/modules/embed/embed.tools.js.map +1 -1
  213. package/dist/modules/github-app/github-app.connection.d.ts +1 -1
  214. package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
  215. package/dist/modules/github-app/github-app.routes.d.ts +3 -3
  216. package/dist/modules/github-app/github-app.routes.d.ts.map +1 -1
  217. package/dist/modules/github-app/github-app.routes.js +1 -1
  218. package/dist/modules/github-app/github-app.routes.js.map +1 -1
  219. package/dist/modules/kb-fs/index.d.ts +10 -0
  220. package/dist/modules/kb-fs/index.d.ts.map +1 -1
  221. package/dist/modules/kb-fs/index.js +10 -0
  222. package/dist/modules/kb-fs/index.js.map +1 -1
  223. package/dist/modules/kb-fs/locking-filesystem.d.ts +1 -1
  224. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  225. package/dist/modules/kb-sync/kb-sync.routes.d.ts +1 -1
  226. package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
  227. package/dist/modules/kb-sync/kb-sync.routes.js +2 -2
  228. package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -1
  229. package/dist/modules/kb-sync/kb-sync.service.js +1 -1
  230. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  231. package/dist/modules/kb-sync/sync-auth.js +1 -1
  232. package/dist/modules/kb-sync/sync-auth.js.map +1 -1
  233. package/dist/modules/kb-sync/sync-payload.js +1 -1
  234. package/dist/modules/kb-sync/sync-payload.js.map +1 -1
  235. package/dist/modules/marketplace/git-http.routes.d.ts +1 -1
  236. package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -1
  237. package/dist/modules/marketplace/git-http.routes.js +1 -1
  238. package/dist/modules/marketplace/git-http.routes.js.map +1 -1
  239. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +1 -1
  240. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -1
  241. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +1 -1
  242. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -1
  243. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +1 -1
  244. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -1
  245. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +1 -1
  246. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -1
  247. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +1 -1
  248. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -1
  249. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +1 -1
  250. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -1
  251. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +2 -2
  252. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -1
  253. package/dist/modules/marketplace/github-facade/github-facade.routes.js +2 -2
  254. package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -1
  255. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +2 -2
  256. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -1
  257. package/dist/modules/marketplace/github-facade/github-facade.service.js +1 -1
  258. package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -1
  259. package/dist/modules/marketplace/marketplace-repo.service.d.ts +1 -1
  260. package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -1
  261. package/dist/modules/marketplace/marketplace-repo.service.js +1 -1
  262. package/dist/modules/mcp/index.d.ts +8 -0
  263. package/dist/modules/mcp/index.d.ts.map +1 -0
  264. package/dist/modules/mcp/index.js +7 -0
  265. package/dist/modules/mcp/index.js.map +1 -0
  266. package/dist/modules/mcp/mcp-auth.middleware.d.ts +4 -5
  267. package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
  268. package/dist/modules/mcp/mcp-auth.middleware.js +4 -4
  269. package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
  270. package/dist/modules/mcp/mcp.routes.d.ts +2 -4
  271. package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
  272. package/dist/modules/mcp/mcp.routes.js +2 -2
  273. package/dist/modules/mcp/mcp.routes.js.map +1 -1
  274. package/dist/modules/mcp/mcp.service.d.ts +14 -4
  275. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  276. package/dist/modules/mcp/mcp.service.js +17 -7
  277. package/dist/modules/mcp/mcp.service.js.map +1 -1
  278. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +29 -1
  279. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
  280. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +167 -40
  281. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
  282. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +1 -1
  283. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
  284. package/dist/modules/mcp/oauth/oauth-consent.routes.js +1 -1
  285. package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
  286. package/dist/modules/onboarding/onboarding.routes.d.ts +1 -1
  287. package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -1
  288. package/dist/modules/onboarding/onboarding.routes.js +1 -1
  289. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  290. package/dist/modules/onboarding/starter-pack.service.d.ts +4 -5
  291. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  292. package/dist/modules/onboarding/starter-pack.service.js +2 -2
  293. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  294. package/dist/modules/plugins/compile/compile-marketplace.d.ts +1 -1
  295. package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -1
  296. package/dist/modules/plugins/compile/compile-marketplace.js +1 -1
  297. package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -1
  298. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +3 -3
  299. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
  300. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +1 -1
  301. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -1
  302. package/dist/modules/plugins/discovery/bundle-dialect/registry.js +1 -1
  303. package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -1
  304. package/dist/modules/plugins/index.d.ts +1 -0
  305. package/dist/modules/plugins/index.d.ts.map +1 -1
  306. package/dist/modules/plugins/index.js +2 -0
  307. package/dist/modules/plugins/index.js.map +1 -1
  308. package/dist/modules/plugins/join-proposals.d.ts +2 -2
  309. package/dist/modules/plugins/join-proposals.d.ts.map +1 -1
  310. package/dist/modules/plugins/join-proposals.js +1 -1
  311. package/dist/modules/plugins/join-proposals.js.map +1 -1
  312. package/dist/modules/plugins/join-request-jobs.service.d.ts +1 -1
  313. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  314. package/dist/modules/plugins/join-request-jobs.service.js +2 -2
  315. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  316. package/dist/modules/plugins/join-request-records.store.d.ts +1 -1
  317. package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -1
  318. package/dist/modules/plugins/join-request-records.store.js +1 -1
  319. package/dist/modules/plugins/join-request-records.store.js.map +1 -1
  320. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  321. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  322. package/dist/modules/plugins/join-requests.service.js +1 -1
  323. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  324. package/dist/modules/plugins/plugin-links.d.ts +3 -3
  325. package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
  326. package/dist/modules/plugins/plugin-links.js +1 -1
  327. package/dist/modules/plugins/plugin-links.js.map +1 -1
  328. package/dist/modules/plugins/plugin-links.service.d.ts +8 -5
  329. package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
  330. package/dist/modules/plugins/plugin-links.service.js +8 -6
  331. package/dist/modules/plugins/plugin-links.service.js.map +1 -1
  332. package/dist/modules/plugins/plugin-provision.service.d.ts +2 -2
  333. package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
  334. package/dist/modules/plugins/plugin-provision.service.js +2 -3
  335. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  336. package/dist/modules/plugins/plugin-rename.service.d.ts +2 -2
  337. package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
  338. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  339. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  340. package/dist/modules/plugins/plugins.contract.d.ts +1 -1
  341. package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
  342. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  343. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  344. package/dist/modules/plugins/plugins.routes.js +3 -3
  345. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  346. package/dist/modules/plugins/plugins.service.d.ts +4 -4
  347. package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
  348. package/dist/modules/plugins/plugins.service.js +1 -1
  349. package/dist/modules/plugins/plugins.service.js.map +1 -1
  350. package/dist/modules/plugins/plugins.tools.d.ts +1 -1
  351. package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
  352. package/dist/modules/plugins/plugins.tools.js +3 -3
  353. package/dist/modules/plugins/plugins.tools.js.map +1 -1
  354. package/dist/modules/plugins/teams.routes.d.ts +3 -3
  355. package/dist/modules/plugins/teams.routes.d.ts.map +1 -1
  356. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +1 -1
  357. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  358. package/dist/modules/secrets-vault/db-secrets-vault.service.js +1 -1
  359. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  360. package/dist/modules/secrets-vault/index.d.ts +1 -0
  361. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  362. package/dist/modules/secrets-vault/index.js +2 -0
  363. package/dist/modules/secrets-vault/index.js.map +1 -1
  364. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +4 -4
  365. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  366. package/dist/modules/secrets-vault/secrets-vault.routes.js +1 -1
  367. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  368. package/dist/modules/settings/connection-check.js +1 -1
  369. package/dist/modules/settings/connection-check.js.map +1 -1
  370. package/dist/modules/settings/deployment-settings.service.d.ts +7 -1
  371. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  372. package/dist/modules/settings/deployment-settings.service.js +45 -3
  373. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  374. package/dist/modules/settings/git-root-folders.js +1 -1
  375. package/dist/modules/settings/git-root-folders.js.map +1 -1
  376. package/dist/modules/settings/index.d.ts +13 -0
  377. package/dist/modules/settings/index.d.ts.map +1 -0
  378. package/dist/modules/settings/index.js +3 -0
  379. package/dist/modules/settings/index.js.map +1 -0
  380. package/dist/modules/settings/setup.routes.d.ts +3 -3
  381. package/dist/modules/settings/setup.routes.d.ts.map +1 -1
  382. package/dist/modules/settings/setup.routes.js +2 -2
  383. package/dist/modules/settings/setup.routes.js.map +1 -1
  384. package/dist/modules/skills/allowed-tools-check.d.ts +2 -2
  385. package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -1
  386. package/dist/modules/skills/allowed-tools-check.js +1 -1
  387. package/dist/modules/skills/allowed-tools-check.js.map +1 -1
  388. package/dist/modules/skills/index.d.ts +1 -0
  389. package/dist/modules/skills/index.d.ts.map +1 -1
  390. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  391. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  392. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  393. package/dist/modules/skills/skill-access-requests.routes.d.ts +5 -5
  394. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  395. package/dist/modules/skills/skill-access-requests.routes.js +6 -13
  396. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  397. package/dist/modules/skills/skills.routes.d.ts +1 -1
  398. package/dist/modules/skills/skills.routes.d.ts.map +1 -1
  399. package/dist/modules/skills/skills.routes.js +1 -1
  400. package/dist/modules/skills/skills.routes.js.map +1 -1
  401. package/dist/modules/skills/skills.service.d.ts +2 -2
  402. package/dist/modules/skills/skills.service.d.ts.map +1 -1
  403. package/dist/modules/skills/skills.tools.d.ts +3 -3
  404. package/dist/modules/skills/skills.tools.d.ts.map +1 -1
  405. package/dist/modules/skills/skills.tools.js +3 -7
  406. package/dist/modules/skills/skills.tools.js.map +1 -1
  407. package/dist/modules/tool-auth/connection-key-rejection.js +1 -1
  408. package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
  409. package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +2 -2
  410. package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -1
  411. package/dist/modules/tool-auth/connection-keys-admin.routes.js +1 -1
  412. package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -1
  413. package/dist/modules/tool-auth/external-api-key.service.d.ts +1 -1
  414. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
  415. package/dist/modules/tool-auth/external-api-key.service.js +1 -1
  416. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
  417. package/dist/modules/tool-auth/index.d.ts +15 -0
  418. package/dist/modules/tool-auth/index.d.ts.map +1 -0
  419. package/dist/modules/tool-auth/index.js +11 -0
  420. package/dist/modules/tool-auth/index.js.map +1 -0
  421. package/dist/modules/tool-auth/tool-auth.middleware.d.ts +2 -2
  422. package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
  423. package/dist/modules/tool-auth/tool-auth.middleware.js +1 -1
  424. package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
  425. package/dist/modules/tool-helpers/default-branch-write.d.ts +1 -1
  426. package/dist/modules/tool-helpers/default-branch-write.d.ts.map +1 -1
  427. package/dist/modules/tool-helpers/index.d.ts +4 -1
  428. package/dist/modules/tool-helpers/index.d.ts.map +1 -1
  429. package/dist/modules/tool-helpers/index.js +3 -0
  430. package/dist/modules/tool-helpers/index.js.map +1 -1
  431. package/dist/modules/tool-helpers/route-argument-check.js +1 -1
  432. package/dist/modules/tool-helpers/route-argument-check.js.map +1 -1
  433. package/dist/modules/tool-helpers/route-tool-schemas.d.ts +1 -1
  434. package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -1
  435. package/dist/modules/tool-helpers/tool-context.d.ts +5 -6
  436. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  437. package/dist/modules/tool-helpers/tool-context.js +2 -3
  438. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  439. package/dist/modules/tool-helpers/tool-def.d.ts +4 -2
  440. package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
  441. package/dist/modules/tool-helpers/tool-def.js +3 -1
  442. package/dist/modules/tool-helpers/tool-def.js.map +1 -1
  443. package/dist/modules/tool-helpers/tool-handler.d.ts +2 -2
  444. package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
  445. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  446. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  447. package/dist/modules/tool-helpers/tool.contract.d.ts +2 -2
  448. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  449. package/dist/modules/tool-helpers/validate-token.d.ts +1 -2
  450. package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -1
  451. package/dist/modules/tool-helpers/validate-token.js +1 -1
  452. package/dist/modules/tool-helpers/validate-token.js.map +1 -1
  453. package/dist/modules/tool-manuals/index.d.ts +5 -0
  454. package/dist/modules/tool-manuals/index.d.ts.map +1 -1
  455. package/dist/modules/tool-manuals/index.js +4 -0
  456. package/dist/modules/tool-manuals/index.js.map +1 -1
  457. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +2 -2
  458. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
  459. package/dist/modules/tool-manuals/pending-tools.service.d.ts +2 -2
  460. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  461. package/dist/modules/tool-manuals/tool-delete.service.d.ts +5 -6
  462. package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -1
  463. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  464. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +5 -5
  465. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
  466. package/dist/modules/tool-manuals/tool-manuals.routes.js +2 -2
  467. package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
  468. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +3 -3
  469. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  470. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -3
  471. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  472. package/dist/modules/tool-manuals/tool-manuals.tools.js +1 -2
  473. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  474. package/dist/modules/tool-registry/description-length.js +2 -2
  475. package/dist/modules/tool-registry/description-length.js.map +1 -1
  476. package/dist/modules/tool-registry/index.d.ts +8 -0
  477. package/dist/modules/tool-registry/index.d.ts.map +1 -0
  478. package/dist/modules/tool-registry/index.js +8 -0
  479. package/dist/modules/tool-registry/index.js.map +1 -0
  480. package/dist/modules/tool-registry/manual.routes.d.ts +37 -2
  481. package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -1
  482. package/dist/modules/tool-registry/manual.routes.js +14 -7
  483. package/dist/modules/tool-registry/manual.routes.js.map +1 -1
  484. package/dist/modules/tool-registry/read-only-hints.contract.d.ts +52 -0
  485. package/dist/modules/tool-registry/read-only-hints.contract.d.ts.map +1 -0
  486. package/dist/modules/tool-registry/read-only-hints.contract.js +2 -0
  487. package/dist/modules/tool-registry/read-only-hints.contract.js.map +1 -0
  488. package/dist/modules/tool-registry/read-only-hints.d.ts +89 -0
  489. package/dist/modules/tool-registry/read-only-hints.d.ts.map +1 -0
  490. package/dist/modules/tool-registry/read-only-hints.js +212 -0
  491. package/dist/modules/tool-registry/read-only-hints.js.map +1 -0
  492. package/dist/modules/tool-registry/tool.contract.d.ts +8 -0
  493. package/dist/modules/tool-registry/tool.contract.d.ts.map +1 -1
  494. package/dist/modules/tool-registry/tool.contract.js +10 -1
  495. package/dist/modules/tool-registry/tool.contract.js.map +1 -1
  496. package/dist/modules/update-check/update-check.routes.d.ts +2 -2
  497. package/dist/modules/update-check/update-check.routes.d.ts.map +1 -1
  498. package/dist/modules/update-check/update-check.routes.js +1 -1
  499. package/dist/modules/update-check/update-check.routes.js.map +1 -1
  500. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +9 -104
  501. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -1
  502. package/dist/modules/workflow/agent-tools/change-request-read-shape.js +8 -118
  503. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -1
  504. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +16 -17
  505. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -1
  506. package/dist/modules/workflow/agent-tools/change-request-read.tools.js +19 -86
  507. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -1
  508. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +15 -2
  509. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
  510. package/dist/modules/workflow/agent-tools/change-request-summary.js +12 -1
  511. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
  512. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +7 -5
  513. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
  514. package/dist/modules/workflow/agent-tools/workflow.tools.js +51 -68
  515. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
  516. package/dist/modules/workflow/change-request-hooks.d.ts +78 -0
  517. package/dist/modules/workflow/change-request-hooks.d.ts.map +1 -0
  518. package/dist/modules/workflow/change-request-hooks.js +15 -0
  519. package/dist/modules/workflow/change-request-hooks.js.map +1 -0
  520. package/dist/modules/workflow/event-bus.d.ts.map +1 -1
  521. package/dist/modules/workflow/event-bus.js +3 -1
  522. package/dist/modules/workflow/event-bus.js.map +1 -1
  523. package/dist/modules/workflow/events-delivery.d.ts +120 -0
  524. package/dist/modules/workflow/events-delivery.d.ts.map +1 -0
  525. package/dist/modules/workflow/events-delivery.js +202 -0
  526. package/dist/modules/workflow/events-delivery.js.map +1 -0
  527. package/dist/modules/workflow/events.routes.d.ts +16 -7
  528. package/dist/modules/workflow/events.routes.d.ts.map +1 -1
  529. package/dist/modules/workflow/events.routes.js +23 -4
  530. package/dist/modules/workflow/events.routes.js.map +1 -1
  531. package/dist/modules/workflow/file-lock.service.d.ts +1 -1
  532. package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
  533. package/dist/modules/workflow/file-lock.service.js +1 -1
  534. package/dist/modules/workflow/file-lock.service.js.map +1 -1
  535. package/dist/modules/workflow/git/git.service.d.ts +2 -2
  536. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  537. package/dist/modules/workflow/git/git.service.js +3 -6
  538. package/dist/modules/workflow/git/git.service.js.map +1 -1
  539. package/dist/modules/workflow/git/node-git-runner.js +1 -1
  540. package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
  541. package/dist/modules/workflow/git/pull-request.service.d.ts +16 -7
  542. package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
  543. package/dist/modules/workflow/git/pull-request.service.js +49 -33
  544. package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
  545. package/dist/modules/workflow/index.d.ts +14 -2
  546. package/dist/modules/workflow/index.d.ts.map +1 -1
  547. package/dist/modules/workflow/index.js +11 -2
  548. package/dist/modules/workflow/index.js.map +1 -1
  549. package/dist/modules/workflow/pending-commits.service.d.ts +1 -1
  550. package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
  551. package/dist/modules/workflow/pending-commits.service.js +1 -1
  552. package/dist/modules/workflow/pending-commits.service.js.map +1 -1
  553. package/dist/modules/workflow/read-on-branch.d.ts +1 -1
  554. package/dist/modules/workflow/read-on-branch.d.ts.map +1 -1
  555. package/dist/modules/workflow/recovery-bot.d.ts +1 -1
  556. package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
  557. package/dist/modules/workflow/recovery-bot.js +1 -1
  558. package/dist/modules/workflow/recovery-bot.js.map +1 -1
  559. package/dist/modules/workflow/review-workflow/approval-lock.d.ts +1 -1
  560. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -1
  561. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +4 -20
  562. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
  563. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +4 -8
  564. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
  565. package/dist/modules/workflow/review-workflow/review-workflow.service.js +3 -138
  566. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
  567. package/dist/modules/workflow/workflow.routes.d.ts +5 -5
  568. package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
  569. package/dist/modules/workflow/workflow.routes.js +42 -94
  570. package/dist/modules/workflow/workflow.routes.js.map +1 -1
  571. package/dist/modules/workflow/workflow.service.d.ts +112 -62
  572. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  573. package/dist/modules/workflow/workflow.service.js +367 -172
  574. package/dist/modules/workflow/workflow.service.js.map +1 -1
  575. package/dist/modules/workspace/agent-access.gate.d.ts +3 -3
  576. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  577. package/dist/modules/workspace/agent-download.builder.d.ts +1 -1
  578. package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -1
  579. package/dist/modules/workspace/agent-download.builder.js +1 -1
  580. package/dist/modules/workspace/agent-download.builder.js.map +1 -1
  581. package/dist/modules/workspace/agent-upload.routes.d.ts.map +1 -1
  582. package/dist/modules/workspace/agent-upload.routes.js +19 -0
  583. package/dist/modules/workspace/agent-upload.routes.js.map +1 -1
  584. package/dist/modules/workspace/agent-upload.store.d.ts +11 -0
  585. package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
  586. package/dist/modules/workspace/agent-upload.store.js +18 -0
  587. package/dist/modules/workspace/agent-upload.store.js.map +1 -1
  588. package/dist/modules/workspace/bounded-matcher.d.ts +5 -11
  589. package/dist/modules/workspace/bounded-matcher.d.ts.map +1 -1
  590. package/dist/modules/workspace/bounded-matcher.js +26 -87
  591. package/dist/modules/workspace/bounded-matcher.js.map +1 -1
  592. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +54 -10
  593. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
  594. package/dist/modules/workspace/file-readers/doc-extract.service.js +69 -17
  595. package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
  596. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +9 -2
  597. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
  598. package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
  599. package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts +41 -0
  600. package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts.map +1 -0
  601. package/dist/modules/workspace/file-readers/document-extractor.contract.js +5 -0
  602. package/dist/modules/workspace/file-readers/document-extractor.contract.js.map +1 -0
  603. package/dist/modules/workspace/file-readers/document-extractors.d.ts +9 -0
  604. package/dist/modules/workspace/file-readers/document-extractors.d.ts.map +1 -0
  605. package/dist/modules/workspace/file-readers/document-extractors.js +26 -0
  606. package/dist/modules/workspace/file-readers/document-extractors.js.map +1 -0
  607. package/dist/modules/workspace/file-readers/document-formats.d.ts +12 -0
  608. package/dist/modules/workspace/file-readers/document-formats.d.ts.map +1 -0
  609. package/dist/modules/workspace/file-readers/document-formats.js +11 -0
  610. package/dist/modules/workspace/file-readers/document-formats.js.map +1 -0
  611. package/dist/modules/workspace/file-readers/document-reader.d.ts +21 -17
  612. package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
  613. package/dist/modules/workspace/file-readers/document-reader.js +38 -34
  614. package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
  615. package/dist/modules/workspace/file-readers/extract-in-worker.d.ts +60 -0
  616. package/dist/modules/workspace/file-readers/extract-in-worker.d.ts.map +1 -0
  617. package/dist/modules/workspace/file-readers/extract-in-worker.js +140 -0
  618. package/dist/modules/workspace/file-readers/extract-in-worker.js.map +1 -0
  619. package/dist/modules/workspace/file-readers/extract-pdf.d.ts +2 -0
  620. package/dist/modules/workspace/file-readers/extract-pdf.d.ts.map +1 -1
  621. package/dist/modules/workspace/file-readers/extract-pdf.js +20 -3
  622. package/dist/modules/workspace/file-readers/extract-pdf.js.map +1 -1
  623. package/dist/modules/workspace/file-readers/extract.worker.d.ts +2 -0
  624. package/dist/modules/workspace/file-readers/extract.worker.d.ts.map +1 -0
  625. package/dist/modules/workspace/file-readers/extract.worker.js +5 -0
  626. package/dist/modules/workspace/file-readers/extract.worker.js.map +1 -0
  627. package/dist/modules/workspace/file-readers/extraction-cache.d.ts +21 -5
  628. package/dist/modules/workspace/file-readers/extraction-cache.d.ts.map +1 -1
  629. package/dist/modules/workspace/file-readers/extraction-cache.js +24 -10
  630. package/dist/modules/workspace/file-readers/extraction-cache.js.map +1 -1
  631. package/dist/modules/workspace/file-readers/extraction-worker.d.ts +42 -0
  632. package/dist/modules/workspace/file-readers/extraction-worker.d.ts.map +1 -0
  633. package/dist/modules/workspace/file-readers/extraction-worker.js +69 -0
  634. package/dist/modules/workspace/file-readers/extraction-worker.js.map +1 -0
  635. package/dist/modules/workspace/file-readers/file-reader.d.ts +13 -4
  636. package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
  637. package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
  638. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts +3 -2
  639. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
  640. package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -20
  641. package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
  642. package/dist/modules/workspace/first-run.js +1 -1
  643. package/dist/modules/workspace/first-run.js.map +1 -1
  644. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  645. package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -1
  646. package/dist/modules/workspace/git-internals.middleware.js +1 -1
  647. package/dist/modules/workspace/git-internals.middleware.js.map +1 -1
  648. package/dist/modules/workspace/index.d.ts +16 -0
  649. package/dist/modules/workspace/index.d.ts.map +1 -1
  650. package/dist/modules/workspace/index.js +13 -0
  651. package/dist/modules/workspace/index.js.map +1 -1
  652. package/dist/modules/workspace/kb-repository.d.ts.map +1 -1
  653. package/dist/modules/workspace/kb-repository.js +1 -1
  654. package/dist/modules/workspace/kb-repository.js.map +1 -1
  655. package/dist/modules/workspace/not-found.d.ts +1 -1
  656. package/dist/modules/workspace/not-found.d.ts.map +1 -1
  657. package/dist/modules/workspace/not-found.js +1 -1
  658. package/dist/modules/workspace/not-found.js.map +1 -1
  659. package/dist/modules/workspace/pattern-matcher.contract.d.ts +1 -1
  660. package/dist/modules/workspace/pattern-matcher.contract.d.ts.map +1 -1
  661. package/dist/modules/workspace/pattern-matcher.contract.js +1 -1
  662. package/dist/modules/workspace/pattern-matcher.contract.js.map +1 -1
  663. package/dist/modules/workspace/routine-write-policy.js +1 -1
  664. package/dist/modules/workspace/routine-write-policy.js.map +1 -1
  665. package/dist/modules/workspace/startup/kb-git.js +1 -1
  666. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  667. package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
  668. package/dist/modules/workspace/startup/kb-startup-runner.js +1 -2
  669. package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
  670. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +2 -2
  671. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
  672. package/dist/modules/workspace/startup/steps/personal-spaces.step.js +2 -2
  673. package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -1
  674. package/dist/modules/workspace/startup/steps/plugin-layout.js +1 -1
  675. package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -1
  676. package/dist/modules/workspace/startup/steps/roles-yaml.step.js +1 -1
  677. package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
  678. package/dist/modules/workspace/startup/steps/seed-tree.js +2 -2
  679. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  680. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +1 -1
  681. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  682. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  683. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  684. package/dist/modules/workspace/startup/steps/template-source.js +2 -2
  685. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  686. package/dist/modules/workspace/worker-pool.d.ts +100 -0
  687. package/dist/modules/workspace/worker-pool.d.ts.map +1 -0
  688. package/dist/modules/workspace/worker-pool.js +156 -0
  689. package/dist/modules/workspace/worker-pool.js.map +1 -0
  690. package/dist/modules/workspace/workspace.routes.d.ts +7 -8
  691. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  692. package/dist/modules/workspace/workspace.routes.js +4 -6
  693. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  694. package/dist/modules/workspace/workspace.service.d.ts +1 -1
  695. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  696. package/dist/modules/workspace/workspace.service.js +3 -6
  697. package/dist/modules/workspace/workspace.service.js.map +1 -1
  698. package/dist/modules/workspace/workspace.tools.d.ts +7 -7
  699. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  700. package/dist/modules/workspace/workspace.tools.js +45 -27
  701. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  702. package/dist/modules/workspace/write-denial.d.ts +4 -4
  703. package/dist/modules/workspace/write-denial.d.ts.map +1 -1
  704. package/dist/modules/workspace/write-denial.js +2 -3
  705. package/dist/modules/workspace/write-denial.js.map +1 -1
  706. package/dist/modules/write-access/index.d.ts +8 -0
  707. package/dist/modules/write-access/index.d.ts.map +1 -0
  708. package/dist/modules/write-access/index.js +7 -0
  709. package/dist/modules/write-access/index.js.map +1 -0
  710. package/dist/shared/listener-seam.d.ts +34 -0
  711. package/dist/shared/listener-seam.d.ts.map +1 -0
  712. package/dist/shared/listener-seam.js +42 -0
  713. package/dist/shared/listener-seam.js.map +1 -0
  714. package/migrations/0019_oauth_token_rotated_at.sql +7 -0
  715. package/migrations/0020_change_request_body_is_the_description.sql +20 -0
  716. package/migrations/0021_data_migrations_ledger.sql +11 -0
  717. package/migrations/meta/0019_snapshot.json +2435 -0
  718. package/migrations/meta/0020_snapshot.json +2321 -0
  719. package/migrations/meta/0021_snapshot.json +2353 -0
  720. package/migrations/meta/_journal.json +21 -0
  721. package/package.json +3 -3
  722. package/src/core/__tests__/damaged-document.tools.test.ts +374 -0
  723. package/src/core/__tests__/public-config.test.ts +5 -0
  724. package/src/core/create-core-server.ts +32 -3
  725. package/src/core/create-core-services.ts +49 -5
  726. package/src/core/lifecycle.ts +10 -0
  727. package/src/core/public-config.ts +10 -0
  728. package/src/index.ts +7 -0
  729. package/src/modules/access/__tests__/access-requests.routes.test.ts +29 -15
  730. package/src/modules/access/access-control.service.ts +5 -6
  731. package/src/modules/access/access-declarations.ts +1 -1
  732. package/src/modules/access/access-mutation.service.ts +10 -4
  733. package/src/modules/access/access-requests.contract.ts +1 -1
  734. package/src/modules/access/access-requests.routes.ts +10 -15
  735. package/src/modules/access/access-requests.service.ts +29 -71
  736. package/src/modules/access/access-view.ts +1 -1
  737. package/src/modules/access/access.routes.ts +9 -11
  738. package/src/modules/access/admin-locked-commit.ts +3 -2
  739. package/src/modules/access/capability-registry.ts +1 -1
  740. package/src/modules/access/change-read-gate.ts +3 -5
  741. package/src/modules/access/creator-access.ts +3 -5
  742. package/src/modules/access/directory-sync-bot.ts +2 -2
  743. package/src/modules/access/groups-admin.routes.ts +3 -3
  744. package/src/modules/access/groups-admin.service.ts +3 -4
  745. package/src/modules/access/groups-edit.ts +2 -2
  746. package/src/modules/access/index.ts +17 -0
  747. package/src/modules/access/reference-scan.ts +1 -1
  748. package/src/modules/access/roles-admin.service.ts +3 -6
  749. package/src/modules/access/roles-edit.ts +1 -1
  750. package/src/modules/access/synced-groups-committer.ts +4 -4
  751. package/src/modules/access/synced-groups-writer.ts +2 -2
  752. package/src/modules/access/user-access-removal.service.ts +3 -6
  753. package/src/modules/access-model/index.ts +29 -0
  754. package/src/modules/access-model/roles-yaml-guard.ts +1 -1
  755. package/src/modules/admin/admin-access.routes.ts +1 -1
  756. package/src/modules/admin/admin-access.service.ts +2 -2
  757. package/src/modules/admin/index.ts +7 -0
  758. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +5 -0
  759. package/src/modules/agent-guide/agent-guide.tools.ts +4 -6
  760. package/src/modules/agent-guide/agent-guide.ts +1 -1
  761. package/src/modules/agent-guide/index.ts +1 -1
  762. package/src/modules/agent-instructions/read-preamble.ts +1 -1
  763. package/src/modules/audit/agent-audit.service.ts +3 -3
  764. package/src/modules/audit/agent-connection.routes.ts +1 -1
  765. package/src/modules/audit/agent-rest-audit.middleware.ts +1 -1
  766. package/src/modules/audit/audit.routes.ts +4 -4
  767. package/src/modules/auth/__tests__/account-deactivation.test.ts +38 -2
  768. package/src/modules/auth/account-erasure.service.ts +4 -9
  769. package/src/modules/auth/account-hooks.ts +13 -21
  770. package/src/modules/auth/account-switch-lock.ts +2 -2
  771. package/src/modules/auth/account.routes.ts +3 -3
  772. package/src/modules/auth/auth.service.ts +23 -22
  773. package/src/modules/auth/index.ts +3 -0
  774. package/src/modules/auth/oidc-auth-provider.ts +1 -1
  775. package/src/modules/code-mode/code-mode.tool.ts +1 -1
  776. package/src/modules/connection-probe/connection-probe.service.ts +3 -6
  777. package/src/modules/database/__tests__/legacy-change-request-body.test.ts +118 -0
  778. package/src/modules/database/__tests__/legacy-request-bodies.pg.test.ts +258 -0
  779. package/src/modules/database/__tests__/pii-backfill.pg.test.ts +15 -18
  780. package/src/modules/database/core-schema.ts +59 -37
  781. package/src/modules/database/index.ts +9 -0
  782. package/src/modules/database/migrate.ts +79 -3
  783. package/src/modules/declared-variables/declared-variables.routes.ts +2 -2
  784. package/src/modules/diff/diff.routes.ts +5 -5
  785. package/src/modules/diff/diff.service.ts +2 -2
  786. package/src/modules/diff/index.ts +6 -0
  787. package/src/modules/embed/account-link.service.ts +2 -2
  788. package/src/modules/embed/embed.routes.ts +2 -2
  789. package/src/modules/embed/embed.service.ts +1 -1
  790. package/src/modules/embed/embed.tools.ts +6 -9
  791. package/src/modules/github-app/github-app.connection.ts +1 -1
  792. package/src/modules/github-app/github-app.routes.ts +3 -3
  793. package/src/modules/kb-fs/index.ts +11 -0
  794. package/src/modules/kb-fs/locking-filesystem.ts +1 -1
  795. package/src/modules/kb-sync/kb-sync.routes.ts +3 -3
  796. package/src/modules/kb-sync/kb-sync.service.ts +1 -1
  797. package/src/modules/kb-sync/sync-auth.ts +1 -1
  798. package/src/modules/kb-sync/sync-payload.ts +1 -1
  799. package/src/modules/marketplace/git-http.routes.ts +1 -1
  800. package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +1 -1
  801. package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +2 -2
  802. package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +2 -2
  803. package/src/modules/marketplace/github-facade/github-facade.routes.ts +2 -2
  804. package/src/modules/marketplace/github-facade/github-facade.service.ts +2 -2
  805. package/src/modules/marketplace/marketplace-repo.service.ts +2 -2
  806. package/src/modules/mcp/__tests__/bevel-oauth-provider.pg.test.ts +279 -0
  807. package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +190 -15
  808. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +213 -0
  809. package/src/modules/mcp/index.ts +7 -0
  810. package/src/modules/mcp/mcp-auth.middleware.ts +6 -7
  811. package/src/modules/mcp/mcp.routes.ts +3 -5
  812. package/src/modules/mcp/mcp.service.ts +30 -13
  813. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +216 -50
  814. package/src/modules/mcp/oauth/oauth-consent.routes.ts +1 -1
  815. package/src/modules/onboarding/onboarding.routes.ts +1 -1
  816. package/src/modules/onboarding/starter-pack.service.ts +5 -6
  817. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +2 -1
  818. package/src/modules/plugins/__tests__/plugin-links.service.test.ts +2 -1
  819. package/src/modules/plugins/compile/compile-marketplace.ts +2 -2
  820. package/src/modules/plugins/compile/marketplace-compiler.service.ts +3 -3
  821. package/src/modules/plugins/discovery/bundle-dialect/registry.ts +1 -1
  822. package/src/modules/plugins/index.ts +2 -0
  823. package/src/modules/plugins/join-proposals.ts +2 -2
  824. package/src/modules/plugins/join-request-jobs.service.ts +3 -3
  825. package/src/modules/plugins/join-request-records.store.ts +2 -2
  826. package/src/modules/plugins/join-requests.service.ts +4 -4
  827. package/src/modules/plugins/plugin-links.service.ts +10 -11
  828. package/src/modules/plugins/plugin-links.ts +4 -4
  829. package/src/modules/plugins/plugin-provision.service.ts +4 -5
  830. package/src/modules/plugins/plugin-rename.service.ts +3 -3
  831. package/src/modules/plugins/plugins.contract.ts +1 -1
  832. package/src/modules/plugins/plugins.routes.ts +4 -4
  833. package/src/modules/plugins/plugins.service.ts +5 -5
  834. package/src/modules/plugins/plugins.tools.ts +4 -4
  835. package/src/modules/plugins/teams.routes.ts +3 -3
  836. package/src/modules/secrets-vault/db-secrets-vault.service.ts +2 -2
  837. package/src/modules/secrets-vault/index.ts +2 -0
  838. package/src/modules/secrets-vault/secrets-vault.routes.ts +4 -4
  839. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +88 -1
  840. package/src/modules/settings/connection-check.ts +1 -1
  841. package/src/modules/settings/deployment-settings.service.ts +44 -4
  842. package/src/modules/settings/git-root-folders.ts +1 -1
  843. package/src/modules/settings/index.ts +12 -0
  844. package/src/modules/settings/setup.routes.ts +5 -4
  845. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +2 -2
  846. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +6 -3
  847. package/src/modules/skills/allowed-tools-check.ts +2 -6
  848. package/src/modules/skills/index.ts +2 -0
  849. package/src/modules/skills/pending-skills.service.ts +3 -4
  850. package/src/modules/skills/skill-access-requests.routes.ts +10 -17
  851. package/src/modules/skills/skills.routes.ts +1 -1
  852. package/src/modules/skills/skills.service.ts +2 -2
  853. package/src/modules/skills/skills.tools.ts +5 -9
  854. package/src/modules/tool-auth/connection-key-rejection.ts +1 -1
  855. package/src/modules/tool-auth/connection-keys-admin.routes.ts +2 -2
  856. package/src/modules/tool-auth/external-api-key.service.ts +2 -2
  857. package/src/modules/tool-auth/index.ts +14 -0
  858. package/src/modules/tool-auth/tool-auth.middleware.ts +3 -3
  859. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +2 -2
  860. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +2 -2
  861. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +2 -2
  862. package/src/modules/tool-helpers/default-branch-write.ts +1 -1
  863. package/src/modules/tool-helpers/index.ts +5 -1
  864. package/src/modules/tool-helpers/route-argument-check.ts +1 -1
  865. package/src/modules/tool-helpers/route-tool-schemas.ts +1 -1
  866. package/src/modules/tool-helpers/tool-context.ts +8 -10
  867. package/src/modules/tool-helpers/tool-def.ts +7 -3
  868. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  869. package/src/modules/tool-helpers/tool.contract.ts +2 -2
  870. package/src/modules/tool-helpers/validate-token.ts +2 -3
  871. package/src/modules/tool-manuals/index.ts +6 -0
  872. package/src/modules/tool-manuals/mcp-server-edit.service.ts +2 -2
  873. package/src/modules/tool-manuals/pending-tools.service.ts +2 -2
  874. package/src/modules/tool-manuals/tool-delete.service.ts +5 -6
  875. package/src/modules/tool-manuals/tool-manuals.routes.ts +5 -5
  876. package/src/modules/tool-manuals/tool-manuals.service.ts +3 -3
  877. package/src/modules/tool-manuals/tool-manuals.tools.ts +4 -6
  878. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +439 -0
  879. package/src/modules/tool-registry/__tests__/tool-registry.test.ts +9 -2
  880. package/src/modules/tool-registry/description-length.ts +2 -2
  881. package/src/modules/tool-registry/index.ts +22 -0
  882. package/src/modules/tool-registry/manual.routes.ts +14 -8
  883. package/src/modules/tool-registry/read-only-hints.contract.ts +54 -0
  884. package/src/modules/tool-registry/read-only-hints.ts +225 -0
  885. package/src/modules/tool-registry/tool.contract.ts +11 -0
  886. package/src/modules/update-check/update-check.routes.ts +2 -2
  887. package/src/modules/workflow/__tests__/change-request-hooks.test.ts +62 -0
  888. package/src/modules/workflow/__tests__/event-bus.test.ts +14 -2
  889. package/src/modules/workflow/__tests__/events-delivery.test.ts +778 -0
  890. package/src/modules/workflow/__tests__/workflow.routes.open-change-request.test.ts +79 -0
  891. package/src/modules/workflow/__tests__/workflow.service.delete-branch.test.ts +9 -1
  892. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +342 -22
  893. package/src/modules/workflow/__tests__/workflow.service.update-change-request.pg.test.ts +120 -0
  894. package/src/modules/workflow/__tests__/workflow.service.update-change-request.test.ts +346 -0
  895. package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +32 -209
  896. package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +16 -245
  897. package/src/modules/workflow/agent-tools/__tests__/update-change-request.parity.test.ts +306 -0
  898. package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +43 -57
  899. package/src/modules/workflow/agent-tools/change-request-read-shape.ts +18 -153
  900. package/src/modules/workflow/agent-tools/change-request-read.tools.ts +24 -96
  901. package/src/modules/workflow/agent-tools/change-request-summary.ts +26 -3
  902. package/src/modules/workflow/agent-tools/workflow.tools.ts +55 -75
  903. package/src/modules/workflow/change-request-hooks.ts +96 -0
  904. package/src/modules/workflow/event-bus.ts +3 -1
  905. package/src/modules/workflow/events-delivery.ts +278 -0
  906. package/src/modules/workflow/events.routes.ts +30 -9
  907. package/src/modules/workflow/file-lock.service.ts +2 -2
  908. package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +24 -9
  909. package/src/modules/workflow/git/git.service.ts +5 -8
  910. package/src/modules/workflow/git/node-git-runner.ts +1 -1
  911. package/src/modules/workflow/git/pull-request.service.ts +44 -29
  912. package/src/modules/workflow/index.ts +15 -2
  913. package/src/modules/workflow/pending-commits.service.ts +2 -2
  914. package/src/modules/workflow/read-on-branch.ts +1 -1
  915. package/src/modules/workflow/recovery-bot.ts +2 -2
  916. package/src/modules/workflow/review-workflow/approval-lock.ts +1 -1
  917. package/src/modules/workflow/review-workflow/review-workflow.interface.ts +3 -35
  918. package/src/modules/workflow/review-workflow/review-workflow.service.ts +6 -165
  919. package/src/modules/workflow/workflow.routes.ts +46 -100
  920. package/src/modules/workflow/workflow.service.ts +444 -215
  921. package/src/modules/workspace/__tests__/agent-downloads.test.ts +2 -1
  922. package/src/modules/workspace/__tests__/agent-uploads.test.ts +87 -1
  923. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +2 -1
  924. package/src/modules/workspace/__tests__/file-stat-access.test.ts +2 -1
  925. package/src/modules/workspace/__tests__/git-internals.security.test.ts +2 -1
  926. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +2 -1
  927. package/src/modules/workspace/__tests__/worker-pool.test.ts +118 -0
  928. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -2
  929. package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +30 -0
  930. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +2 -1
  931. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +2 -1
  932. package/src/modules/workspace/__tests__/workspace.tools.test.ts +30 -4
  933. package/src/modules/workspace/agent-access.gate.ts +3 -3
  934. package/src/modules/workspace/agent-download.builder.ts +1 -1
  935. package/src/modules/workspace/agent-upload.routes.ts +19 -0
  936. package/src/modules/workspace/agent-upload.store.ts +18 -0
  937. package/src/modules/workspace/bounded-matcher.ts +32 -89
  938. package/src/modules/workspace/file-readers/README.md +9 -0
  939. package/src/modules/workspace/file-readers/__tests__/doc-extract.service.test.ts +165 -0
  940. package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +21 -16
  941. package/src/modules/workspace/file-readers/__tests__/extract-in-worker.test.ts +229 -0
  942. package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +2 -1
  943. package/src/modules/workspace/file-readers/__tests__/fixtures/damaged-pdf.ts +34 -0
  944. package/src/modules/workspace/file-readers/__tests__/fixtures/misbehaving-extract.worker.ts +57 -0
  945. package/src/modules/workspace/file-readers/__tests__/fixtures/pdf-in-trouble.worker.ts +20 -0
  946. package/src/modules/workspace/file-readers/__tests__/fixtures/unloadable-extract.worker.ts +2 -0
  947. package/src/modules/workspace/file-readers/doc-extract.service.ts +95 -20
  948. package/src/modules/workspace/file-readers/doc-extract.types.ts +13 -3
  949. package/src/modules/workspace/file-readers/document-extractor.contract.ts +42 -0
  950. package/src/modules/workspace/file-readers/document-extractors.ts +28 -0
  951. package/src/modules/workspace/file-readers/document-formats.ts +13 -0
  952. package/src/modules/workspace/file-readers/document-reader.ts +40 -36
  953. package/src/modules/workspace/file-readers/extract-in-worker.ts +183 -0
  954. package/src/modules/workspace/file-readers/extract-pdf.ts +23 -4
  955. package/src/modules/workspace/file-readers/extract.worker.ts +5 -0
  956. package/src/modules/workspace/file-readers/extraction-cache.ts +33 -12
  957. package/src/modules/workspace/file-readers/extraction-worker.ts +86 -0
  958. package/src/modules/workspace/file-readers/file-reader.registry.ts +6 -20
  959. package/src/modules/workspace/file-readers/file-reader.ts +14 -4
  960. package/src/modules/workspace/first-run.ts +1 -1
  961. package/src/modules/workspace/git-internals.middleware.ts +1 -1
  962. package/src/modules/workspace/index.ts +17 -0
  963. package/src/modules/workspace/kb-repository.ts +3 -2
  964. package/src/modules/workspace/not-found.ts +1 -1
  965. package/src/modules/workspace/pattern-matcher.contract.ts +1 -1
  966. package/src/modules/workspace/routine-write-policy.ts +1 -1
  967. package/src/modules/workspace/startup/kb-git.ts +1 -1
  968. package/src/modules/workspace/startup/kb-startup-runner.ts +1 -2
  969. package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +3 -3
  970. package/src/modules/workspace/startup/steps/personal-spaces.step.ts +2 -2
  971. package/src/modules/workspace/startup/steps/plugin-layout.ts +1 -1
  972. package/src/modules/workspace/startup/steps/roles-yaml.step.ts +1 -1
  973. package/src/modules/workspace/startup/steps/seed-tree.ts +2 -2
  974. package/src/modules/workspace/startup/steps/template-files.step.ts +2 -2
  975. package/src/modules/workspace/startup/steps/template-source.ts +2 -2
  976. package/src/modules/workspace/worker-pool.ts +193 -0
  977. package/src/modules/workspace/workspace.routes.ts +9 -12
  978. package/src/modules/workspace/workspace.service.ts +4 -7
  979. package/src/modules/workspace/workspace.tools.ts +53 -34
  980. package/src/modules/workspace/write-denial.ts +4 -5
  981. package/src/modules/write-access/index.ts +7 -0
  982. package/src/shared/__tests__/module-boundaries.lint.test.ts +301 -0
  983. package/src/shared/listener-seam.ts +52 -0
  984. package/src/modules/workflow/__tests__/format-affected-owners.test.ts +0 -85
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Who may receive an event: the per-kind delivery rule the events route
3
+ * applies, once per event per session, before it writes the event out.
4
+ *
5
+ * The bus decides which sessions HEAR about an event — its focus filter
6
+ * (workspace-scoped kinds) and user filter (user-scoped kinds). That is a
7
+ * delivery filter, and a session may name any workspace as its focus. This is
8
+ * the access check on top of it: an event that names something reaches only a
9
+ * person who may read what it names, judged by the same services the routes
10
+ * that serve that thing judge it by.
11
+ *
12
+ * - An event that names a path on a workspace (`file-changed`, the two lock
13
+ * events, and any later kind that carries `workspaceId` and `path`): the
14
+ * person may read the path on that branch, as the file routes judge it —
15
+ * after the one normaliser the file routes put every path through, so a
16
+ * path a client sent without the `<kbDirName>/` prefix (the lock route
17
+ * takes both spellings) is judged as the repository path it names, never
18
+ * as "outside the knowledge base, readable".
19
+ * - `approval-changed`: the person may read the approved path on the
20
+ * request's target branch — judged as a file event on that branch is,
21
+ * from the server's checkout of it (a cached read of the access rules
22
+ * from disk, no git), and only for a target the server holds no checkout
23
+ * of from its published ref. Never by reading the request's detail, which
24
+ * diffs the branch pair with several git subprocesses per person per event.
25
+ * - `change-request-opened`: the person may see the request, by the rule the
26
+ * request tools list and 404 by (`maySeeChangeRequest`): its author, or
27
+ * someone who may read one of its files — both names of a move — at its
28
+ * target, read at `origin/<target>` exactly as the tools read it
29
+ * (`readablePathsAt`), so the event never announces a request the tools
30
+ * answer as not found. The request's file list is read ONCE per event,
31
+ * however many sessions are judged; each person then costs one batch
32
+ * verdict from the access tree cached by commit.
33
+ * - `git-sync-failed`: the event names the workspace's root and, for a sync
34
+ * conflict, each conflicted file (its `reason` quotes them too). The person
35
+ * gets the paths they may read; git's words reach only a person who may
36
+ * read the root and every path the conflict names, and everyone else gets
37
+ * a fixed sentence.
38
+ * - `agent-tool-call`: the person whose agent made the call, as the bus
39
+ * already filters it; the rule says the same, so a bus that passed it on
40
+ * would not widen the audience.
41
+ *
42
+ * Every other kind is delivered as it is. That includes the number-only
43
+ * change-request lifecycle kinds (`-merged`, `-rejected`, `-apply-failed`),
44
+ * which follow an announcement the person was either given or not. A verdict
45
+ * that cannot be reached (the access tree fails to load, the request cannot be
46
+ * read) withholds, or for `git-sync-failed` redacts:
47
+ * failing closed costs a live refresh, failing open names a file.
48
+ *
49
+ * Nothing here changes what publishers emit; the rule only reads the event.
50
+ */
51
+
52
+ import type { ChangeRequest, WorkflowEvent } from '@bevel-software/platform-shared';
53
+ import { logger } from '../../shared/logging.js';
54
+ import { workspaceIdForBranch } from '../../shared/workspace-id.js';
55
+ import type { IAccessControl } from '../access/index.js';
56
+ import { canReadWorkspacePath } from '../access-model/index.js';
57
+ import { normalizeWorkspacePath } from '../kb-fs/index.js';
58
+ import { fileIsReadable, isAuthor, maySeeChangeRequest, pathsOf } from './agent-tools/change-request-read-shape.js';
59
+ import { readablePathsAt } from './read-on-branch.js';
60
+
61
+ const log = logger('events');
62
+
63
+ /** What a `git-sync-failed` says in place of git's words. */
64
+ const GIT_SYNC_FAILED_REDACTED_REASON = 'The last push did not land.';
65
+
66
+ /** The person behind a session, as the auth middleware named them. */
67
+ export interface EventViewer {
68
+ userId: string;
69
+ email: string | undefined;
70
+ }
71
+
72
+ /**
73
+ * The verdicts the rule asks for. Each one is the question a route already
74
+ * answers for the thing the event names; `createEventAccess` wires them to
75
+ * those services, and tests to a fake.
76
+ */
77
+ export interface EventAccess {
78
+ /** May `email` read the workspace-relative `wsPath` on `workspaceId` — the file routes' verdict. */
79
+ mayReadPath(workspaceId: string, email: string, wsPath: string): Promise<boolean>;
80
+ /** May `email` read the KB-repo-relative `repoPath` on `workspaceId`; `''` is the root. */
81
+ mayReadRepoPath(workspaceId: string, email: string, repoPath: string): Promise<boolean>;
82
+ /** Which of the KB-repo-relative `repoPaths` `email` may read on `targetBranch` — what a request into that branch is scoped by. */
83
+ readableAtTarget(targetBranch: string, email: string, repoPaths: string[]): Promise<Set<string>>;
84
+ /** Which of the KB-repo-relative `repoPaths` `email` may read at `origin/<base>` — the change-request tools' verdict, `readablePathsAt`. */
85
+ readableAtBase(base: string, email: string, repoPaths: string[]): Promise<Set<string>>;
86
+ /**
87
+ * Request `number` as the request list judges it — its target, author and
88
+ * changed files — or null when there is none. Read once per event: callers
89
+ * judging one event for many sessions share the read.
90
+ */
91
+ changeRequest(number: number): Promise<ChangeRequestFacts | null>;
92
+ }
93
+
94
+ /** What the visibility rule reads of a request. */
95
+ export type ChangeRequestFacts = Pick<ChangeRequest, 'base' | 'authorId' | 'touchedNodeFiles'>;
96
+
97
+ /**
98
+ * What the events route asks of the rule. The route depends on this, never on
99
+ * `EventDelivery`, so the rule can be substituted behind it.
100
+ */
101
+ export interface IEventDelivery {
102
+ /** The event as `viewer` may receive it: itself, a redacted copy, or null. Never rejects. */
103
+ judge(event: WorkflowEvent, viewer: EventViewer): Promise<WorkflowEvent | null>;
104
+ }
105
+
106
+ /** The deployment's `EventAccess`: the access service the file routes use, read in the server's own checkouts. */
107
+ export function createEventAccess(deps: {
108
+ accessControl: Pick<IAccessControl, 'canRead' | 'canReadBatch' | 'canReadBatchAtRef'>;
109
+ kbDirName: string;
110
+ /** `IWorkflowService.getChangeRequest`: the summary the request list judges, files included. */
111
+ getChangeRequest(number: number): Promise<ChangeRequestFacts | null>;
112
+ workspaces: {
113
+ /** Whether the server holds a checkout for `workspaceId` (the branch's own workspace). */
114
+ hasWorkspace(workspaceId: string): Promise<boolean>;
115
+ /**
116
+ * A workspace to read a published ref in: always for a request's base,
117
+ * and for an approval's target the server holds no checkout of. Every
118
+ * verdict at `origin/<branch>` is the same from any clone of the
119
+ * repository, so any existing one serves.
120
+ */
121
+ anyWorkspaceId(): Promise<string>;
122
+ };
123
+ }): EventAccess {
124
+ /** A request's read, shared while it is in flight: one per event's fan-out, never a stale one after. */
125
+ const requestsInFlight = new Map<number, Promise<ChangeRequestFacts | null>>();
126
+ return {
127
+ // Normalised first, by the file routes' own normaliser: a path it refuses
128
+ // throws, and the rule withholds the event.
129
+ mayReadPath: async (workspaceId, email, wsPath) =>
130
+ canReadWorkspacePath(
131
+ (w, e, p) => deps.accessControl.canRead(w, e, p),
132
+ workspaceId,
133
+ email,
134
+ deps.kbDirName,
135
+ normalizeWorkspacePath(wsPath, deps.kbDirName),
136
+ ),
137
+ mayReadRepoPath: (workspaceId, email, repoPath) => deps.accessControl.canRead(workspaceId, email, repoPath),
138
+ readableAtTarget: async (targetBranch, email, repoPaths) => {
139
+ if (repoPaths.length === 0) return new Set();
140
+ const unique = [...new Set(repoPaths)];
141
+ // The branch's own checkout, when the server has one (the default
142
+ // branch always): the same disk read a file event on that branch gets.
143
+ const own = workspaceIdForBranch(targetBranch);
144
+ const verdicts = (await deps.workspaces.hasWorkspace(own))
145
+ ? await deps.accessControl.canReadBatch(own, email, unique)
146
+ : await deps.accessControl.canReadBatchAtRef(
147
+ await deps.workspaces.anyWorkspaceId(),
148
+ `origin/${targetBranch}`,
149
+ email,
150
+ unique,
151
+ );
152
+ // A ref that cannot be resolved answers null: nothing is granted on it.
153
+ return new Set(unique.filter((p) => verdicts?.get(p) === true));
154
+ },
155
+ // The request tools' own rule and reading, never the target's checkout: a
156
+ // grant there that is not yet published must not announce a request
157
+ // `get_change_request` answers as not found.
158
+ readableAtBase: async (base, email, repoPaths) =>
159
+ readablePathsAt(deps.accessControl, await deps.workspaces.anyWorkspaceId(), email, base, repoPaths),
160
+ changeRequest: (number) => {
161
+ const pending = requestsInFlight.get(number);
162
+ if (pending) return pending;
163
+ const read = deps.getChangeRequest(number).finally(() => requestsInFlight.delete(number));
164
+ requestsInFlight.set(number, read);
165
+ return read;
166
+ },
167
+ };
168
+ }
169
+
170
+ /**
171
+ * The event as `viewer` may receive it: the event itself, a redacted copy, or
172
+ * null for nothing at all.
173
+ */
174
+ async function deliveryFor(
175
+ event: WorkflowEvent,
176
+ viewer: EventViewer,
177
+ access: EventAccess,
178
+ ): Promise<WorkflowEvent | null> {
179
+ const email = viewer.email;
180
+ try {
181
+ switch (event.kind) {
182
+ case 'approval-changed':
183
+ return email && (await access.readableAtTarget(event.targetBranch, email, [event.path])).has(event.path)
184
+ ? event
185
+ : null;
186
+ case 'change-request-opened':
187
+ return email && (await maySeeRequest(event.number, email, access)) ? event : null;
188
+ case 'git-sync-failed':
189
+ return email ? await gitSyncFailedFor(event, email, access) : redactGitSyncFailed(event, []);
190
+ case 'agent-tool-call':
191
+ return viewer.userId === event.forUserId ? event : null;
192
+ }
193
+ // Structural, not by kind: anything that names a path on a workspace is
194
+ // judged by the path, so a kind added later is covered without a line here.
195
+ const named = pathOnWorkspace(event);
196
+ if (named) return email && (await access.mayReadPath(named.workspaceId, email, named.path)) ? event : null;
197
+ return event;
198
+ } catch (err) {
199
+ log.warn(`delivery verdict failed for event id=${event.id} kind=${event.kind} user=${viewer.userId}; withheld`, { err });
200
+ return event.kind === 'git-sync-failed' ? redactGitSyncFailed(event, []) : null;
201
+ }
202
+ }
203
+
204
+ /**
205
+ * The request tools' visibility rule, over the request the list judges: its
206
+ * author sees it; anyone else sees it when one of its files is readable at
207
+ * the target, a move only when both its names are. No request, no file list
208
+ * (a diff that could not be computed): author only, as the tools answer it.
209
+ */
210
+ async function maySeeRequest(number: number, email: string, access: EventAccess): Promise<boolean> {
211
+ const request = await access.changeRequest(number);
212
+ if (!request) return false;
213
+ if (isAuthor(request, email)) return true;
214
+ const files = request.touchedNodeFiles ?? [];
215
+ const readable = await access.readableAtBase(request.base, email, files.flatMap(pathsOf));
216
+ const readableFiles = files.filter((f) => fileIsReadable(f, (p) => readable.has(p))).length;
217
+ return maySeeChangeRequest({ readableFiles, isAuthor: false });
218
+ }
219
+
220
+ type GitSyncFailed = Extract<WorkflowEvent, { kind: 'git-sync-failed' }>;
221
+
222
+ /**
223
+ * Every path the event names is judged: the root, which git's words are about,
224
+ * and each conflicted file, which a conflict's `reason` also quotes. Git's
225
+ * words go out only when every one of them is readable; otherwise the person
226
+ * keeps the conflicted files they may read and a fixed sentence.
227
+ */
228
+ async function gitSyncFailedFor(event: GitSyncFailed, email: string, access: EventAccess): Promise<WorkflowEvent> {
229
+ const conflicted = event.conflictedPaths ?? [];
230
+ const [root, ...each] = await Promise.all([
231
+ access.mayReadRepoPath(event.workspaceId, email, ''),
232
+ ...conflicted.map((p) => access.mayReadRepoPath(event.workspaceId, email, p)),
233
+ ]);
234
+ const readable = conflicted.filter((_, i) => each[i]);
235
+ return root && readable.length === conflicted.length ? event : redactGitSyncFailed(event, readable);
236
+ }
237
+
238
+ function pathOnWorkspace(event: WorkflowEvent): { workspaceId: string; path: string } | null {
239
+ const e = event as { workspaceId?: unknown; path?: unknown };
240
+ return typeof e.workspaceId === 'string' && typeof e.path === 'string'
241
+ ? { workspaceId: e.workspaceId, path: e.path }
242
+ : null;
243
+ }
244
+
245
+ /**
246
+ * Same shape, so a client parses it as before: git's words are gone, and of
247
+ * the conflicted files only `readable` remain (none, the key absent).
248
+ */
249
+ function redactGitSyncFailed(event: GitSyncFailed, readable: string[]): WorkflowEvent {
250
+ const redacted: GitSyncFailed = { ...event, reason: GIT_SYNC_FAILED_REDACTED_REASON };
251
+ if (readable.length > 0) redacted.conflictedPaths = readable;
252
+ else delete redacted.conflictedPaths;
253
+ return redacted;
254
+ }
255
+
256
+ /**
257
+ * The rule, shared per (event, person) while it is being judged: a person with
258
+ * three tabs open is judged once per event, not three times. A verdict is
259
+ * dropped the moment it settles and never reused, so a replay after a
260
+ * reconnect asks again, and a grant or a revocation since the event was first
261
+ * delivered decides what the replay carries.
262
+ */
263
+ export class EventDelivery implements IEventDelivery {
264
+ private readonly inFlight = new Map<string, Promise<WorkflowEvent | null>>();
265
+
266
+ constructor(private readonly access: EventAccess) {}
267
+
268
+ judge(event: WorkflowEvent, viewer: EventViewer): Promise<WorkflowEvent | null> {
269
+ const key = `${event.id}\u0000${event.ts}\u0000${viewer.userId}`;
270
+ const pending = this.inFlight.get(key);
271
+ if (pending) return pending;
272
+ // `deliveryFor` never rejects: a verdict it cannot reach withholds the
273
+ // event, or for `git-sync-failed` redacts it.
274
+ const verdict = deliveryFor(event, viewer, this.access).finally(() => this.inFlight.delete(key));
275
+ this.inFlight.set(key, verdict);
276
+ return verdict;
277
+ }
278
+ }
@@ -27,19 +27,27 @@
27
27
  * has evicted past `n`, the route emits `{ kind: 'resync' }` so the
28
28
  * client refetches state from scratch.
29
29
  *
30
+ * **Who receives what** — the bus picks the sessions that HEAR about an
31
+ * event (focus for workspace events, owner for user events); before writing
32
+ * it, the route asks the delivery rule (`IEventDelivery`) whether this
33
+ * session's person may have it, and in what form (`events-delivery.ts`). Live fan-out and replay go
34
+ * through the same rule, and through one ordered queue per session, so a
35
+ * slow verdict never reorders a session's stream.
36
+ *
30
37
  * **Heartbeat** — every 25 s the route writes an SSE comment (`:\n\n`).
31
38
  * Keeps proxies (nginx, Coolify's Traefik, Cloudflare) from killing the
32
39
  * connection as idle. Cheap (~15 bytes), eliminates a whole class of bug.
33
40
  */
34
41
 
35
- import type { Request, Response } from 'express';
42
+ import type { Response } from 'express';
36
43
  import { logger } from '../../shared/logging.js';
37
44
 
38
45
  const log = logger('events');
39
46
  import express from 'express';
40
- import type { WorkflowEvent } from '@bevel-software/platform-shared';
47
+ import { type WorkflowEvent } from '@bevel-software/platform-shared';
41
48
  import type { WorkflowEventBus } from './event-bus.js';
42
- import '../auth/auth.middleware.js'; // Express Request augmentation
49
+ import type { IEventDelivery } from './events-delivery.js';
50
+ import '../auth/index.js'; // Express Request augmentation
43
51
 
44
52
  /** Interval between SSE keep-alive comments (ms). 25 s sits comfortably under
45
53
  * the typical 30–100 s proxy idle timeout. */
@@ -73,15 +81,16 @@ interface ActiveSession {
73
81
  * suggestion branch got no `file-changed` for the images on screen and kept
74
82
  * showing a screenshot a teammate had already replaced.
75
83
  *
76
- * The client declares the list; this is a delivery filter, not an access
77
- * check. It always was — a session could name any workspace as its focus —
78
- * and the events it selects carry no file contents, only paths. Whether the
79
- * reader may open what changed is settled by the routes that serve it.
84
+ * The client declares the list, and may name any workspace in it: this is
85
+ * a delivery filter, not an access check. The access check is the
86
+ * delivery rule (`IEventDelivery`) every event passes on its way to the session.
80
87
  */
81
88
  focusedWorkspaceIds: string[];
82
89
  /** Set when the SSE connection closes. Used by the focus POST so a
83
90
  * request that arrives after the connection drops 404s cleanly. */
84
91
  closed: boolean;
92
+ /** Tail of this session's writes: each event waits for its verdict, in arrival order. */
93
+ queue: Promise<void>;
85
94
  /** The Express response stream backing this session. Stored so a
86
95
  * same-id reconnect can `end()` the old response and close its TCP
87
96
  * socket immediately, rather than leaving a dangling connection that
@@ -97,6 +106,7 @@ interface ActiveSession {
97
106
  export function createEventsRoutes(
98
107
  bus: WorkflowEventBus,
99
108
  authMiddleware: express.RequestHandler,
109
+ delivery: IEventDelivery,
100
110
  ): express.Router {
101
111
  const router = express.Router();
102
112
 
@@ -114,6 +124,7 @@ export function createEventsRoutes(
114
124
  return;
115
125
  }
116
126
  const userId = req.userId!;
127
+ const viewer = { userId, email: req.userEmail };
117
128
 
118
129
  // SSE headers. `X-Accel-Buffering: no` tells nginx not to buffer the
119
130
  // response (would batch events behind a flush boundary, killing
@@ -158,15 +169,24 @@ export function createEventsRoutes(
158
169
  userId,
159
170
  focusedWorkspaceIds: [],
160
171
  closed: false,
172
+ queue: Promise.resolve(),
161
173
  res,
162
174
  // Filled in below once `unsubscribe` + `heartbeat` exist.
163
175
  cleanup: () => {},
164
176
  };
165
177
  sessions.set(sessionId, session);
166
178
 
179
+ // Every event this session hears goes through the delivery rule, in the
180
+ // order it arrived: the verdict is async, the stream must not reorder.
167
181
  const push = (event: WorkflowEvent): void => {
168
182
  if (session.closed) return;
169
- writeSseEvent(res, event);
183
+ const verdict = delivery.judge(event, viewer);
184
+ session.queue = session.queue.then(async () => {
185
+ const deliverable = await verdict;
186
+ if (deliverable && !session.closed) writeSseEvent(res, deliverable);
187
+ }).catch((err: unknown) => {
188
+ log.warn(`write to session=${sessionId} failed:`, { err });
189
+ });
170
190
  };
171
191
 
172
192
  const unsubscribe = bus.subscribe({
@@ -196,7 +216,8 @@ export function createEventsRoutes(
196
216
  reason: 'last-event-id too old; ring buffer evicted',
197
217
  });
198
218
  } else {
199
- for (const event of replay) writeSseEvent(res, event);
219
+ // The same rule as live delivery, queued ahead of anything live.
220
+ for (const event of replay) push(event);
200
221
  }
201
222
  }
202
223
 
@@ -58,8 +58,8 @@
58
58
  */
59
59
 
60
60
  import { and, eq, gt, inArray, lte } from 'drizzle-orm';
61
- import type { Database } from '../database/connection.js';
62
- import { fileLocks } from '../database/schema.js';
61
+ import type { Database } from '../database/index.js';
62
+ import { fileLocks } from '../database/index.js';
63
63
  import type { AcquireLockResult, AuthUser, FileLock } from '@bevel-software/platform-shared';
64
64
  import { WorkflowValidationError } from '../../shared/domain-errors.js';
65
65
  import { canonicalFileIdentity } from '../../shared/canonical-file-identity.js';
@@ -22,11 +22,11 @@ const ROW = {
22
22
  closedAt: null,
23
23
  };
24
24
 
25
- function makeDb(): Database {
25
+ function makeDb(row: Record<string, unknown> = ROW): Database {
26
26
  return {
27
27
  select: () => ({
28
28
  from: () => ({
29
- where: () => ({ limit: async () => [ROW] }),
29
+ where: () => ({ limit: async () => [row] }),
30
30
  }),
31
31
  }),
32
32
  } as unknown as Database;
@@ -42,10 +42,10 @@ const FORK = 'c'.repeat(40);
42
42
  * both refs), so the file list must be pinned to those same commits rather
43
43
  * than fetch and resolve again. The SHAs and the file list are read on every
44
44
  * call (a new head must show); what the detail cache saves is the DB
45
- * enrichment (comments, approvals), so that is where "cached" is observed.
45
+ * enrichment (approvals), so that is where "cached" is observed.
46
46
  */
47
47
  describe('PullRequestService.getPrDetail — git work per read', () => {
48
- function harness() {
48
+ function harness(row: Record<string, unknown> = ROW) {
49
49
  const resolvePrShas = vi.fn(async () => ({ baseSha: BASE, headSha: HEAD }));
50
50
  const changedFilesForPr = vi.fn(async () => []);
51
51
  const forkPointForPr = vi.fn(async () => ({ mergeBaseSha: FORK, behind: true }));
@@ -61,11 +61,9 @@ describe('PullRequestService.getPrDetail — git work per read', () => {
61
61
  ensureRemotesFetched: async () => undefined,
62
62
  } as unknown as WorkspaceService;
63
63
  const access = { canWriteAtRef: async () => false } as unknown as IAccessControl;
64
- const svc = new PullRequestService(makeDb(), workspace, access, git);
65
- const listComments = vi.fn(async () => []);
64
+ const svc = new PullRequestService(makeDb(row), workspace, access, git);
66
65
  const getApprovalStates = vi.fn(async () => []);
67
66
  svc.setDetailEnricher({
68
- listComments,
69
67
  getApprovalStates,
70
68
  evaluateMergeGate: () => ({ mergeable: false, reasons: [], warnings: [] }),
71
69
  });
@@ -79,6 +77,25 @@ describe('PullRequestService.getPrDetail — git work per read', () => {
79
77
  };
80
78
  }
81
79
 
80
+ it('carries the body as stored, and an access request\'s level and note off the row — absent on an ordinary request', async () => {
81
+ const plain = await harness().svc.getPrDetail(7, { fresh: true });
82
+ expect(plain?.body).toBe('');
83
+ expect(plain).not.toHaveProperty('accessRequest');
84
+
85
+ const asked = await harness({
86
+ ...ROW,
87
+ body: 'Rita asked for **Owner** on Research.',
88
+ accessRequestLevel: 'owner',
89
+ accessRequestNote: 'I maintain these pages now',
90
+ }).svc.getPrDetail(7, { fresh: true });
91
+ expect(asked?.body).toBe('Rita asked for **Owner** on Research.');
92
+ expect(asked?.accessRequest).toEqual({ level: 'owner', note: 'I maintain these pages now' });
93
+
94
+ // A level with no note: the note never stands alone, and never as ''.
95
+ const noNote = await harness({ ...ROW, accessRequestLevel: 'write', accessRequestNote: null }).svc.getPrDetail(7, { fresh: true });
96
+ expect(noNote?.accessRequest).toEqual({ level: 'write' });
97
+ });
98
+
82
99
  it('pins the file list to the SHAs it just resolved, and keeps patches for a client read', async () => {
83
100
  const { svc, resolvePrShas, changedFilesForPr } = harness();
84
101
  const detail = await svc.getPrDetail(7, { fresh: true });
@@ -164,7 +181,6 @@ describe('PullRequestService — change request link', () => {
164
181
  const access = { canWriteAtRef: async () => false } as unknown as IAccessControl;
165
182
  const svc = new PullRequestService(makeDb(), workspace, access, git, publicFrontendUrl);
166
183
  svc.setDetailEnricher({
167
- listComments: async () => [],
168
184
  getApprovalStates: async () => [],
169
185
  evaluateMergeGate: () => ({ mergeable: false, reasons: [], warnings: [] }),
170
186
  });
@@ -244,7 +260,6 @@ describe('PullRequestService.getPrDetail — needsUpdate', () => {
244
260
  } as unknown as Database;
245
261
  const svc = new PullRequestService(db, workspace, access, git);
246
262
  svc.setDetailEnricher({
247
- listComments: async () => [],
248
263
  getApprovalStates: async () => [],
249
264
  evaluateMergeGate: () => ({ mergeable: false, reasons: [], warnings: [] }),
250
265
  });
@@ -21,15 +21,12 @@ import type {
21
21
  } from '@bevel-software/platform-shared';
22
22
  import { isFolderPlaceholder } from '@bevel-software/platform-shared';
23
23
  import { mergeCommitMessageNames } from './merge-commit.js';
24
- import type { WorkspaceService } from '../../workspace/workspace.service.js';
24
+ import type { WorkspaceService } from '../../workspace/index.js';
25
25
  import type { WorkflowHooks, CommitValidationContext } from '../workflow-hooks.js';
26
- import type { IAccessControl } from '../../access/access-control.interface.js';
27
- import { AccessDeniedError } from '../../access-model/access-errors.js';
28
- import { WorkspaceIdMutex, type WorkspaceMutex } from '../../kb-fs/index.js';
26
+ import type { IAccessControl } from '../../access/index.js';
27
+ import { AccessDeniedError } from '../../access-model/index.js';
28
+ import { WorkspaceIdMutex, type WorkspaceMutex, assertInsideRepo, cloneTrackingConfigArgs, SAFE_IMPLICIT_FETCH_ARGS, readRefSha } from '../../kb-fs/index.js';
29
29
  import { isAbsence } from '../../../shared/fs.contract.js';
30
- import { assertInsideRepo } from '../../kb-fs/repo-path.js';
31
- import { cloneTrackingConfigArgs, SAFE_IMPLICIT_FETCH_ARGS } from '../../kb-fs/clone-config.js';
32
- import { readRefSha } from '../../kb-fs/index.js';
33
30
  import { utf8Text } from '../../../shared/utf8-text.js';
34
31
  import { lstatOrNull } from '../../../shared/rename-no-replace.js';
35
32
  import { linkedAncestor } from '../../../shared/no-link-below.js';
@@ -38,7 +35,7 @@ import {
38
35
  assertValidRelativePath,
39
36
  isBranchAuthoredBy,
40
37
  isOwnSuggestionsBranch,
41
- } from '../../kb-fs/branch-name.js';
38
+ } from '../../kb-fs/index.js';
42
39
  import type { KbContext } from '../../../shared/kb-context.js';
43
40
  import {
44
41
  AppliedChangeMismatchError,
@@ -10,7 +10,7 @@ import {
10
10
  type IGitRunner,
11
11
  } from '../../../shared/git.contract.js';
12
12
  import { logger } from '../../../shared/logging.js';
13
- import { credentialHelperValue } from '../../kb-fs/clone-config.js';
13
+ import { credentialHelperValue } from '../../kb-fs/index.js';
14
14
 
15
15
  const log = logger('git-runner');
16
16
 
@@ -7,7 +7,6 @@ import type {
7
7
  ChangedPathPair,
8
8
  FileApprovalState,
9
9
  IPullRequestService,
10
- PrReviewComment,
11
10
  PullRequestDetail,
12
11
  PullRequestFile,
13
12
  PullRequestState,
@@ -15,22 +14,22 @@ import type {
15
14
  IGitService,
16
15
  } from '@bevel-software/platform-shared';
17
16
  import { isFolderPlaceholder } from '@bevel-software/platform-shared';
18
- import type { Database } from '../../database/connection.js';
19
- import { changeRequests } from '../../database/schema.js';
20
- import type { WorkspaceService } from '../../workspace/workspace.service.js';
21
- import type { IAccessControl } from '../../access/access-control.interface.js';
22
- import { AccessUnreadableError } from '../../access-model/access-errors.js';
17
+ import type { Database } from '../../database/index.js';
18
+ import { changeRequests } from '../../database/index.js';
19
+ import type { WorkspaceService } from '../../workspace/index.js';
20
+ import type { IAccessControl } from '../../access/index.js';
21
+ import { AccessUnreadableError } from '../../access-model/index.js';
23
22
  import { AppliedChangeMismatchError, WorkflowValidationError } from '../../../shared/domain-errors.js';
24
23
  import { canonicalEmail, hashEmail } from '../../../shared/email-identity.js';
25
24
  import { changeRequestLink, changeRequestLinkBase } from './change-request-link.js';
26
25
 
27
26
  /**
28
- * The latest moment a change-request row records — its close time when it has
29
- * one, else its creation time, with `updated_at` folded in for the day
30
- * something writes it. Deliberately derived from the ROW alone: a time taken
31
- * from the newest comment or approval would make the same request report
32
- * different "last changed" moments to a list (which reads no comments) and a
33
- * detail (which does).
27
+ * The latest moment a change-request row records — the latest of its creation,
28
+ * its `updated_at` (a title or description edit) and its close time.
29
+ * Deliberately derived from the ROW alone: a time taken
30
+ * from the newest approval would make the same request report different
31
+ * "last changed" moments to a list (which reads no approvals) and a detail
32
+ * (which does).
34
33
  */
35
34
  function latestRowMoment(row: {
36
35
  createdAt: Date;
@@ -148,7 +147,6 @@ export function changeSourceFor(row: {
148
147
  * relationship in the composition root is explicit and minimal.
149
148
  */
150
149
  export interface PrDetailEnricher {
151
- listComments(prNumber: number): Promise<PrReviewComment[]>;
152
150
  /**
153
151
  * Per-file approval state. `baseBranch` selects the access tree (resolved
154
152
  * against `origin/<baseBranch>`); `workspaceId` is optional and gates the
@@ -184,8 +182,8 @@ export interface PrDetailEnricher {
184
182
  *
185
183
  * The durable facts (pairing, title/body, author, state) live in the row; the
186
184
  * head/base SHAs, file list, and diffs are derived live from git so a new commit
187
- * or force-push is always reflected. Comments + per-file approvals + the merge
188
- * gate are stitched in from the review-workflow service (also DB-backed).
185
+ * or force-push is always reflected. Per-file approvals and the merge gate
186
+ * are stitched in from the review-workflow service (also DB-backed).
189
187
  */
190
188
  export class PullRequestService implements IPullRequestService {
191
189
  /**
@@ -253,6 +251,16 @@ export class PullRequestService implements IPullRequestService {
253
251
  this.linkBase = changeRequestLinkBase(publicFrontendUrl);
254
252
  }
255
253
 
254
+ /**
255
+ * The link to change request `number`, as every summary and detail carries
256
+ * it — absolute under the public address, else the in-app path with its
257
+ * note. Needs no read: a caller holding only the number (an open whose push
258
+ * was refused, say) builds the same link a listing would.
259
+ */
260
+ linkFor(number: number): { url: string; urlNote?: string } {
261
+ return changeRequestLink(number, this.linkBase);
262
+ }
263
+
256
264
  setDetailEnricher(enricher: PrDetailEnricher): void {
257
265
  this.detailEnricher = enricher;
258
266
  }
@@ -827,16 +835,11 @@ export class PullRequestService implements IPullRequestService {
827
835
  })),
828
836
  );
829
837
 
830
- // Comments + approvals come from our own DB via the review-workflow service.
831
- // The enricher is optional — if it isn't wired yet (startup ordering,
832
- // isolated tests) we return empty lists rather than blocking the fetch.
833
- const [comments, approvals] = this.detailEnricher
834
- ? await Promise.all([
835
- this.detailEnricher.listComments(prNumber).catch((err) => {
836
- log.warn(`listComments failed for #${prNumber}:`, { err });
837
- return [] as PrReviewComment[];
838
- }),
839
- this.detailEnricher
838
+ // Approvals come from our own DB via the review-workflow service. The
839
+ // enricher is optional — if it isn't wired yet (startup ordering, isolated
840
+ // tests) we return an empty list rather than blocking the fetch.
841
+ const approvals = this.detailEnricher
842
+ ? await this.detailEnricher
840
843
  .getApprovalStates(
841
844
  prNumber,
842
845
  files,
@@ -853,9 +856,8 @@ export class PullRequestService implements IPullRequestService {
853
856
  if (err instanceof AccessUnreadableError) throw err;
854
857
  log.warn(`getApprovalStates failed for #${prNumber}:`, { err });
855
858
  return [] as FileApprovalState[];
856
- }),
857
- ])
858
- : [[] as PrReviewComment[], [] as FileApprovalState[]];
859
+ })
860
+ : ([] as FileApprovalState[]);
859
861
 
860
862
  const gate = this.detailEnricher
861
863
  ? this.detailEnricher.evaluateMergeGate({
@@ -923,10 +925,19 @@ export class PullRequestService implements IPullRequestService {
923
925
  const detail: PullRequestDetail = {
924
926
  ...summary,
925
927
  body: row.body,
928
+ // Only a request the access-request flow opened has a level; the note
929
+ // rides with it and never stands alone.
930
+ ...(row.accessRequestLevel
931
+ ? {
932
+ accessRequest: {
933
+ level: row.accessRequestLevel as 'write' | 'owner',
934
+ ...(row.accessRequestNote ? { note: row.accessRequestNote } : {}),
935
+ },
936
+ }
937
+ : {}),
926
938
  headSha,
927
939
  baseSha,
928
940
  files,
929
- comments,
930
941
  approvals,
931
942
  mergeableInBevel: gate.mergeable,
932
943
  mergeBlockedReasons: gate.reasons,
@@ -941,6 +952,10 @@ export class PullRequestService implements IPullRequestService {
941
952
  viewerCanUpdate,
942
953
  viewerIsAuthor,
943
954
  viewerCanDelete,
955
+ // Who may close a request may also change what it asks: the same
956
+ // grants, so the same predicate (`WorkflowService.updateChangeRequest`
957
+ // enforces it).
958
+ viewerCanEdit: viewerCanCancel,
944
959
  };
945
960
 
946
961
  // A patch-less detail is an internal read; it must not be served to the