@bevel-software/platform-core-backend 0.32.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 (958) 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 +7 -2
  7. package/dist/core/create-core-services.d.ts.map +1 -1
  8. package/dist/core/create-core-services.js +22 -6
  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/modules/access/access-control.service.d.ts +3 -3
  19. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  20. package/dist/modules/access/access-control.service.js +4 -5
  21. package/dist/modules/access/access-control.service.js.map +1 -1
  22. package/dist/modules/access/access-declarations.d.ts +1 -1
  23. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  24. package/dist/modules/access/access-declarations.js +1 -1
  25. package/dist/modules/access/access-declarations.js.map +1 -1
  26. package/dist/modules/access/access-mutation.service.d.ts +8 -3
  27. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  28. package/dist/modules/access/access-mutation.service.js +3 -3
  29. package/dist/modules/access/access-mutation.service.js.map +1 -1
  30. package/dist/modules/access/access-requests.contract.d.ts +1 -1
  31. package/dist/modules/access/access-requests.contract.d.ts.map +1 -1
  32. package/dist/modules/access/access-requests.routes.d.ts +3 -3
  33. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  34. package/dist/modules/access/access-requests.routes.js +7 -7
  35. package/dist/modules/access/access-requests.routes.js.map +1 -1
  36. package/dist/modules/access/access-requests.service.d.ts +21 -20
  37. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  38. package/dist/modules/access/access-requests.service.js +22 -68
  39. package/dist/modules/access/access-requests.service.js.map +1 -1
  40. package/dist/modules/access/access-view.d.ts +1 -1
  41. package/dist/modules/access/access-view.d.ts.map +1 -1
  42. package/dist/modules/access/access-view.js +1 -1
  43. package/dist/modules/access/access-view.js.map +1 -1
  44. package/dist/modules/access/access.routes.d.ts +5 -7
  45. package/dist/modules/access/access.routes.d.ts.map +1 -1
  46. package/dist/modules/access/access.routes.js +4 -4
  47. package/dist/modules/access/access.routes.js.map +1 -1
  48. package/dist/modules/access/admin-locked-commit.d.ts +2 -2
  49. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  50. package/dist/modules/access/admin-locked-commit.js +1 -1
  51. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  52. package/dist/modules/access/capability-registry.js +1 -1
  53. package/dist/modules/access/capability-registry.js.map +1 -1
  54. package/dist/modules/access/change-read-gate.d.ts +2 -2
  55. package/dist/modules/access/change-read-gate.d.ts.map +1 -1
  56. package/dist/modules/access/change-read-gate.js +1 -3
  57. package/dist/modules/access/change-read-gate.js.map +1 -1
  58. package/dist/modules/access/creator-access.d.ts +2 -2
  59. package/dist/modules/access/creator-access.d.ts.map +1 -1
  60. package/dist/modules/access/creator-access.js +2 -4
  61. package/dist/modules/access/creator-access.js.map +1 -1
  62. package/dist/modules/access/directory-sync-bot.d.ts +1 -1
  63. package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
  64. package/dist/modules/access/directory-sync-bot.js +1 -1
  65. package/dist/modules/access/directory-sync-bot.js.map +1 -1
  66. package/dist/modules/access/groups-admin.routes.d.ts +2 -2
  67. package/dist/modules/access/groups-admin.routes.d.ts.map +1 -1
  68. package/dist/modules/access/groups-admin.routes.js +2 -2
  69. package/dist/modules/access/groups-admin.routes.js.map +1 -1
  70. package/dist/modules/access/groups-admin.service.d.ts +1 -1
  71. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  72. package/dist/modules/access/groups-admin.service.js +2 -3
  73. package/dist/modules/access/groups-admin.service.js.map +1 -1
  74. package/dist/modules/access/groups-edit.js +2 -2
  75. package/dist/modules/access/groups-edit.js.map +1 -1
  76. package/dist/modules/access/index.d.ts +17 -0
  77. package/dist/modules/access/index.d.ts.map +1 -0
  78. package/dist/modules/access/index.js +6 -0
  79. package/dist/modules/access/index.js.map +1 -0
  80. package/dist/modules/access/reference-scan.js +1 -1
  81. package/dist/modules/access/reference-scan.js.map +1 -1
  82. package/dist/modules/access/roles-admin.service.d.ts +1 -1
  83. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  84. package/dist/modules/access/roles-admin.service.js +2 -5
  85. package/dist/modules/access/roles-admin.service.js.map +1 -1
  86. package/dist/modules/access/roles-edit.js +1 -1
  87. package/dist/modules/access/roles-edit.js.map +1 -1
  88. package/dist/modules/access/synced-groups-committer.d.ts +2 -2
  89. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  90. package/dist/modules/access/synced-groups-committer.js +2 -2
  91. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  92. package/dist/modules/access/synced-groups-writer.js +2 -2
  93. package/dist/modules/access/synced-groups-writer.js.map +1 -1
  94. package/dist/modules/access/user-access-removal.service.d.ts +1 -1
  95. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  96. package/dist/modules/access/user-access-removal.service.js +2 -5
  97. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  98. package/dist/modules/access-model/index.d.ts +20 -5
  99. package/dist/modules/access-model/index.d.ts.map +1 -1
  100. package/dist/modules/access-model/index.js +18 -5
  101. package/dist/modules/access-model/index.js.map +1 -1
  102. package/dist/modules/access-model/roles-yaml-guard.d.ts +1 -1
  103. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  104. package/dist/modules/admin/admin-access.routes.d.ts +1 -1
  105. package/dist/modules/admin/admin-access.routes.d.ts.map +1 -1
  106. package/dist/modules/admin/admin-access.routes.js +1 -1
  107. package/dist/modules/admin/admin-access.routes.js.map +1 -1
  108. package/dist/modules/admin/admin-access.service.d.ts +2 -2
  109. package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
  110. package/dist/modules/admin/index.d.ts +8 -0
  111. package/dist/modules/admin/index.d.ts.map +1 -0
  112. package/dist/modules/admin/index.js +2 -0
  113. package/dist/modules/admin/index.js.map +1 -0
  114. package/dist/modules/agent-guide/agent-guide.js +1 -1
  115. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  116. package/dist/modules/agent-guide/agent-guide.tools.d.ts +3 -3
  117. package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
  118. package/dist/modules/agent-guide/agent-guide.tools.js +2 -4
  119. package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
  120. package/dist/modules/agent-guide/index.d.ts +1 -1
  121. package/dist/modules/agent-guide/index.d.ts.map +1 -1
  122. package/dist/modules/agent-guide/index.js +1 -1
  123. package/dist/modules/agent-guide/index.js.map +1 -1
  124. package/dist/modules/agent-instructions/read-preamble.d.ts +1 -1
  125. package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -1
  126. package/dist/modules/audit/agent-audit.service.d.ts +2 -2
  127. package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
  128. package/dist/modules/audit/agent-audit.service.js +1 -1
  129. package/dist/modules/audit/agent-audit.service.js.map +1 -1
  130. package/dist/modules/audit/agent-connection.routes.d.ts +1 -1
  131. package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -1
  132. package/dist/modules/audit/agent-connection.routes.js +1 -1
  133. package/dist/modules/audit/agent-connection.routes.js.map +1 -1
  134. package/dist/modules/audit/agent-rest-audit.middleware.d.ts +1 -1
  135. package/dist/modules/audit/agent-rest-audit.middleware.d.ts.map +1 -1
  136. package/dist/modules/audit/agent-rest-audit.middleware.js +1 -1
  137. package/dist/modules/audit/agent-rest-audit.middleware.js.map +1 -1
  138. package/dist/modules/audit/audit.routes.d.ts +3 -3
  139. package/dist/modules/audit/audit.routes.d.ts.map +1 -1
  140. package/dist/modules/audit/audit.routes.js +2 -2
  141. package/dist/modules/audit/audit.routes.js.map +1 -1
  142. package/dist/modules/auth/account-erasure.service.d.ts +3 -3
  143. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  144. package/dist/modules/auth/account-erasure.service.js +1 -5
  145. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  146. package/dist/modules/auth/account-switch-lock.d.ts +1 -1
  147. package/dist/modules/auth/account-switch-lock.d.ts.map +1 -1
  148. package/dist/modules/auth/account-switch-lock.js +1 -1
  149. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  150. package/dist/modules/auth/account.routes.d.ts +2 -2
  151. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  152. package/dist/modules/auth/account.routes.js +1 -1
  153. package/dist/modules/auth/account.routes.js.map +1 -1
  154. package/dist/modules/auth/auth.service.d.ts +1 -1
  155. package/dist/modules/auth/auth.service.d.ts.map +1 -1
  156. package/dist/modules/auth/auth.service.js +3 -3
  157. package/dist/modules/auth/auth.service.js.map +1 -1
  158. package/dist/modules/auth/index.d.ts +2 -0
  159. package/dist/modules/auth/index.d.ts.map +1 -1
  160. package/dist/modules/auth/oidc-auth-provider.js +1 -1
  161. package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
  162. package/dist/modules/code-mode/code-mode.tool.d.ts +1 -1
  163. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
  164. package/dist/modules/connection-probe/connection-probe.service.d.ts +2 -2
  165. package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
  166. package/dist/modules/connection-probe/connection-probe.service.js +1 -4
  167. package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
  168. package/dist/modules/database/core-schema.d.ts +107 -234
  169. package/dist/modules/database/core-schema.d.ts.map +1 -1
  170. package/dist/modules/database/core-schema.js +39 -35
  171. package/dist/modules/database/core-schema.js.map +1 -1
  172. package/dist/modules/database/index.d.ts +10 -0
  173. package/dist/modules/database/index.d.ts.map +1 -0
  174. package/dist/modules/database/index.js +4 -0
  175. package/dist/modules/database/index.js.map +1 -0
  176. package/dist/modules/database/migrate.d.ts.map +1 -1
  177. package/dist/modules/database/migrate.js +78 -3
  178. package/dist/modules/database/migrate.js.map +1 -1
  179. package/dist/modules/declared-variables/declared-variables.routes.d.ts +2 -2
  180. package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
  181. package/dist/modules/diff/diff.routes.d.ts +3 -3
  182. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  183. package/dist/modules/diff/diff.routes.js +3 -3
  184. package/dist/modules/diff/diff.routes.js.map +1 -1
  185. package/dist/modules/diff/diff.service.d.ts +2 -2
  186. package/dist/modules/diff/diff.service.d.ts.map +1 -1
  187. package/dist/modules/diff/index.d.ts +7 -0
  188. package/dist/modules/diff/index.d.ts.map +1 -0
  189. package/dist/modules/diff/index.js +2 -0
  190. package/dist/modules/diff/index.js.map +1 -0
  191. package/dist/modules/embed/account-link.service.d.ts +1 -1
  192. package/dist/modules/embed/account-link.service.d.ts.map +1 -1
  193. package/dist/modules/embed/account-link.service.js +1 -1
  194. package/dist/modules/embed/account-link.service.js.map +1 -1
  195. package/dist/modules/embed/embed.routes.d.ts +1 -1
  196. package/dist/modules/embed/embed.routes.d.ts.map +1 -1
  197. package/dist/modules/embed/embed.routes.js +2 -2
  198. package/dist/modules/embed/embed.routes.js.map +1 -1
  199. package/dist/modules/embed/embed.service.d.ts +1 -1
  200. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  201. package/dist/modules/embed/embed.tools.d.ts +4 -4
  202. package/dist/modules/embed/embed.tools.d.ts.map +1 -1
  203. package/dist/modules/embed/embed.tools.js +3 -5
  204. package/dist/modules/embed/embed.tools.js.map +1 -1
  205. package/dist/modules/github-app/github-app.connection.d.ts +1 -1
  206. package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
  207. package/dist/modules/github-app/github-app.routes.d.ts +3 -3
  208. package/dist/modules/github-app/github-app.routes.d.ts.map +1 -1
  209. package/dist/modules/github-app/github-app.routes.js +1 -1
  210. package/dist/modules/github-app/github-app.routes.js.map +1 -1
  211. package/dist/modules/kb-fs/index.d.ts +10 -0
  212. package/dist/modules/kb-fs/index.d.ts.map +1 -1
  213. package/dist/modules/kb-fs/index.js +10 -0
  214. package/dist/modules/kb-fs/index.js.map +1 -1
  215. package/dist/modules/kb-fs/locking-filesystem.d.ts +1 -1
  216. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  217. package/dist/modules/kb-sync/kb-sync.routes.d.ts +1 -1
  218. package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
  219. package/dist/modules/kb-sync/kb-sync.routes.js +2 -2
  220. package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -1
  221. package/dist/modules/kb-sync/kb-sync.service.js +1 -1
  222. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  223. package/dist/modules/kb-sync/sync-auth.js +1 -1
  224. package/dist/modules/kb-sync/sync-auth.js.map +1 -1
  225. package/dist/modules/kb-sync/sync-payload.js +1 -1
  226. package/dist/modules/kb-sync/sync-payload.js.map +1 -1
  227. package/dist/modules/marketplace/git-http.routes.d.ts +1 -1
  228. package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -1
  229. package/dist/modules/marketplace/git-http.routes.js +1 -1
  230. package/dist/modules/marketplace/git-http.routes.js.map +1 -1
  231. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +1 -1
  232. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -1
  233. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +1 -1
  234. package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -1
  235. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +1 -1
  236. package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -1
  237. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +1 -1
  238. package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -1
  239. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +1 -1
  240. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -1
  241. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +1 -1
  242. package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -1
  243. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +2 -2
  244. package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -1
  245. package/dist/modules/marketplace/github-facade/github-facade.routes.js +2 -2
  246. package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -1
  247. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +2 -2
  248. package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -1
  249. package/dist/modules/marketplace/github-facade/github-facade.service.js +1 -1
  250. package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -1
  251. package/dist/modules/marketplace/marketplace-repo.service.d.ts +1 -1
  252. package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -1
  253. package/dist/modules/marketplace/marketplace-repo.service.js +1 -1
  254. package/dist/modules/mcp/index.d.ts +8 -0
  255. package/dist/modules/mcp/index.d.ts.map +1 -0
  256. package/dist/modules/mcp/index.js +7 -0
  257. package/dist/modules/mcp/index.js.map +1 -0
  258. package/dist/modules/mcp/mcp-auth.middleware.d.ts +4 -5
  259. package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
  260. package/dist/modules/mcp/mcp-auth.middleware.js +4 -4
  261. package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
  262. package/dist/modules/mcp/mcp.routes.d.ts +2 -4
  263. package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
  264. package/dist/modules/mcp/mcp.routes.js +2 -2
  265. package/dist/modules/mcp/mcp.routes.js.map +1 -1
  266. package/dist/modules/mcp/mcp.service.d.ts +14 -4
  267. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  268. package/dist/modules/mcp/mcp.service.js +17 -7
  269. package/dist/modules/mcp/mcp.service.js.map +1 -1
  270. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +1 -1
  271. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
  272. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +1 -1
  273. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
  274. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +1 -1
  275. package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
  276. package/dist/modules/mcp/oauth/oauth-consent.routes.js +1 -1
  277. package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
  278. package/dist/modules/onboarding/onboarding.routes.d.ts +1 -1
  279. package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -1
  280. package/dist/modules/onboarding/onboarding.routes.js +1 -1
  281. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  282. package/dist/modules/onboarding/starter-pack.service.d.ts +4 -5
  283. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  284. package/dist/modules/onboarding/starter-pack.service.js +2 -2
  285. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  286. package/dist/modules/plugins/compile/compile-marketplace.d.ts +1 -1
  287. package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -1
  288. package/dist/modules/plugins/compile/compile-marketplace.js +1 -1
  289. package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -1
  290. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +3 -3
  291. package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
  292. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +1 -1
  293. package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -1
  294. package/dist/modules/plugins/discovery/bundle-dialect/registry.js +1 -1
  295. package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -1
  296. package/dist/modules/plugins/index.d.ts +1 -0
  297. package/dist/modules/plugins/index.d.ts.map +1 -1
  298. package/dist/modules/plugins/index.js +2 -0
  299. package/dist/modules/plugins/index.js.map +1 -1
  300. package/dist/modules/plugins/join-proposals.d.ts +2 -2
  301. package/dist/modules/plugins/join-proposals.d.ts.map +1 -1
  302. package/dist/modules/plugins/join-proposals.js +1 -1
  303. package/dist/modules/plugins/join-proposals.js.map +1 -1
  304. package/dist/modules/plugins/join-request-jobs.service.d.ts +1 -1
  305. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  306. package/dist/modules/plugins/join-request-jobs.service.js +2 -2
  307. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  308. package/dist/modules/plugins/join-request-records.store.d.ts +1 -1
  309. package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -1
  310. package/dist/modules/plugins/join-request-records.store.js +1 -1
  311. package/dist/modules/plugins/join-request-records.store.js.map +1 -1
  312. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  313. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  314. package/dist/modules/plugins/join-requests.service.js +1 -1
  315. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  316. package/dist/modules/plugins/plugin-links.d.ts +3 -3
  317. package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
  318. package/dist/modules/plugins/plugin-links.js +1 -1
  319. package/dist/modules/plugins/plugin-links.js.map +1 -1
  320. package/dist/modules/plugins/plugin-links.service.d.ts +8 -5
  321. package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
  322. package/dist/modules/plugins/plugin-links.service.js +8 -6
  323. package/dist/modules/plugins/plugin-links.service.js.map +1 -1
  324. package/dist/modules/plugins/plugin-provision.service.d.ts +2 -2
  325. package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
  326. package/dist/modules/plugins/plugin-provision.service.js +2 -3
  327. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  328. package/dist/modules/plugins/plugin-rename.service.d.ts +2 -2
  329. package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
  330. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  331. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  332. package/dist/modules/plugins/plugins.contract.d.ts +1 -1
  333. package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
  334. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  335. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  336. package/dist/modules/plugins/plugins.routes.js +3 -3
  337. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  338. package/dist/modules/plugins/plugins.service.d.ts +4 -4
  339. package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
  340. package/dist/modules/plugins/plugins.service.js +1 -1
  341. package/dist/modules/plugins/plugins.service.js.map +1 -1
  342. package/dist/modules/plugins/plugins.tools.d.ts +1 -1
  343. package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
  344. package/dist/modules/plugins/plugins.tools.js +3 -3
  345. package/dist/modules/plugins/plugins.tools.js.map +1 -1
  346. package/dist/modules/plugins/teams.routes.d.ts +3 -3
  347. package/dist/modules/plugins/teams.routes.d.ts.map +1 -1
  348. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +1 -1
  349. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  350. package/dist/modules/secrets-vault/db-secrets-vault.service.js +1 -1
  351. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  352. package/dist/modules/secrets-vault/index.d.ts +1 -0
  353. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  354. package/dist/modules/secrets-vault/index.js +2 -0
  355. package/dist/modules/secrets-vault/index.js.map +1 -1
  356. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +4 -4
  357. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  358. package/dist/modules/secrets-vault/secrets-vault.routes.js +1 -1
  359. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  360. package/dist/modules/settings/connection-check.js +1 -1
  361. package/dist/modules/settings/connection-check.js.map +1 -1
  362. package/dist/modules/settings/deployment-settings.service.d.ts +7 -1
  363. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  364. package/dist/modules/settings/deployment-settings.service.js +45 -3
  365. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  366. package/dist/modules/settings/git-root-folders.js +1 -1
  367. package/dist/modules/settings/git-root-folders.js.map +1 -1
  368. package/dist/modules/settings/index.d.ts +13 -0
  369. package/dist/modules/settings/index.d.ts.map +1 -0
  370. package/dist/modules/settings/index.js +3 -0
  371. package/dist/modules/settings/index.js.map +1 -0
  372. package/dist/modules/settings/setup.routes.d.ts +3 -3
  373. package/dist/modules/settings/setup.routes.d.ts.map +1 -1
  374. package/dist/modules/settings/setup.routes.js +2 -2
  375. package/dist/modules/settings/setup.routes.js.map +1 -1
  376. package/dist/modules/skills/allowed-tools-check.d.ts +2 -2
  377. package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -1
  378. package/dist/modules/skills/allowed-tools-check.js +1 -1
  379. package/dist/modules/skills/allowed-tools-check.js.map +1 -1
  380. package/dist/modules/skills/index.d.ts +1 -0
  381. package/dist/modules/skills/index.d.ts.map +1 -1
  382. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  383. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  384. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  385. package/dist/modules/skills/skill-access-requests.routes.d.ts +5 -5
  386. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  387. package/dist/modules/skills/skill-access-requests.routes.js +6 -13
  388. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  389. package/dist/modules/skills/skills.routes.d.ts +1 -1
  390. package/dist/modules/skills/skills.routes.d.ts.map +1 -1
  391. package/dist/modules/skills/skills.routes.js +1 -1
  392. package/dist/modules/skills/skills.routes.js.map +1 -1
  393. package/dist/modules/skills/skills.service.d.ts +2 -2
  394. package/dist/modules/skills/skills.service.d.ts.map +1 -1
  395. package/dist/modules/skills/skills.tools.d.ts +3 -3
  396. package/dist/modules/skills/skills.tools.d.ts.map +1 -1
  397. package/dist/modules/skills/skills.tools.js +3 -7
  398. package/dist/modules/skills/skills.tools.js.map +1 -1
  399. package/dist/modules/tool-auth/connection-key-rejection.js +1 -1
  400. package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
  401. package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +2 -2
  402. package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -1
  403. package/dist/modules/tool-auth/connection-keys-admin.routes.js +1 -1
  404. package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -1
  405. package/dist/modules/tool-auth/external-api-key.service.d.ts +1 -1
  406. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
  407. package/dist/modules/tool-auth/external-api-key.service.js +1 -1
  408. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
  409. package/dist/modules/tool-auth/index.d.ts +15 -0
  410. package/dist/modules/tool-auth/index.d.ts.map +1 -0
  411. package/dist/modules/tool-auth/index.js +11 -0
  412. package/dist/modules/tool-auth/index.js.map +1 -0
  413. package/dist/modules/tool-auth/tool-auth.middleware.d.ts +2 -2
  414. package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
  415. package/dist/modules/tool-auth/tool-auth.middleware.js +1 -1
  416. package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
  417. package/dist/modules/tool-helpers/default-branch-write.d.ts +1 -1
  418. package/dist/modules/tool-helpers/default-branch-write.d.ts.map +1 -1
  419. package/dist/modules/tool-helpers/index.d.ts +4 -1
  420. package/dist/modules/tool-helpers/index.d.ts.map +1 -1
  421. package/dist/modules/tool-helpers/index.js +3 -0
  422. package/dist/modules/tool-helpers/index.js.map +1 -1
  423. package/dist/modules/tool-helpers/route-argument-check.js +1 -1
  424. package/dist/modules/tool-helpers/route-argument-check.js.map +1 -1
  425. package/dist/modules/tool-helpers/route-tool-schemas.d.ts +1 -1
  426. package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -1
  427. package/dist/modules/tool-helpers/tool-context.d.ts +5 -6
  428. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  429. package/dist/modules/tool-helpers/tool-context.js +2 -3
  430. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  431. package/dist/modules/tool-helpers/tool-def.d.ts +4 -2
  432. package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
  433. package/dist/modules/tool-helpers/tool-def.js +3 -1
  434. package/dist/modules/tool-helpers/tool-def.js.map +1 -1
  435. package/dist/modules/tool-helpers/tool-handler.d.ts +2 -2
  436. package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
  437. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  438. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  439. package/dist/modules/tool-helpers/tool.contract.d.ts +2 -2
  440. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  441. package/dist/modules/tool-helpers/validate-token.d.ts +1 -2
  442. package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -1
  443. package/dist/modules/tool-helpers/validate-token.js +1 -1
  444. package/dist/modules/tool-helpers/validate-token.js.map +1 -1
  445. package/dist/modules/tool-manuals/index.d.ts +5 -0
  446. package/dist/modules/tool-manuals/index.d.ts.map +1 -1
  447. package/dist/modules/tool-manuals/index.js +4 -0
  448. package/dist/modules/tool-manuals/index.js.map +1 -1
  449. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +2 -2
  450. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
  451. package/dist/modules/tool-manuals/pending-tools.service.d.ts +2 -2
  452. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  453. package/dist/modules/tool-manuals/tool-delete.service.d.ts +5 -6
  454. package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -1
  455. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  456. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +5 -5
  457. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
  458. package/dist/modules/tool-manuals/tool-manuals.routes.js +2 -2
  459. package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
  460. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +3 -3
  461. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  462. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -3
  463. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  464. package/dist/modules/tool-manuals/tool-manuals.tools.js +1 -2
  465. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  466. package/dist/modules/tool-registry/description-length.js +2 -2
  467. package/dist/modules/tool-registry/description-length.js.map +1 -1
  468. package/dist/modules/tool-registry/index.d.ts +8 -0
  469. package/dist/modules/tool-registry/index.d.ts.map +1 -0
  470. package/dist/modules/tool-registry/index.js +8 -0
  471. package/dist/modules/tool-registry/index.js.map +1 -0
  472. package/dist/modules/tool-registry/manual.routes.d.ts +37 -2
  473. package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -1
  474. package/dist/modules/tool-registry/manual.routes.js +14 -7
  475. package/dist/modules/tool-registry/manual.routes.js.map +1 -1
  476. package/dist/modules/tool-registry/read-only-hints.contract.d.ts +52 -0
  477. package/dist/modules/tool-registry/read-only-hints.contract.d.ts.map +1 -0
  478. package/dist/modules/tool-registry/read-only-hints.contract.js +2 -0
  479. package/dist/modules/tool-registry/read-only-hints.contract.js.map +1 -0
  480. package/dist/modules/tool-registry/read-only-hints.d.ts +89 -0
  481. package/dist/modules/tool-registry/read-only-hints.d.ts.map +1 -0
  482. package/dist/modules/tool-registry/read-only-hints.js +212 -0
  483. package/dist/modules/tool-registry/read-only-hints.js.map +1 -0
  484. package/dist/modules/tool-registry/tool.contract.d.ts +8 -0
  485. package/dist/modules/tool-registry/tool.contract.d.ts.map +1 -1
  486. package/dist/modules/tool-registry/tool.contract.js +10 -1
  487. package/dist/modules/tool-registry/tool.contract.js.map +1 -1
  488. package/dist/modules/update-check/update-check.routes.d.ts +2 -2
  489. package/dist/modules/update-check/update-check.routes.d.ts.map +1 -1
  490. package/dist/modules/update-check/update-check.routes.js +1 -1
  491. package/dist/modules/update-check/update-check.routes.js.map +1 -1
  492. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +9 -104
  493. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -1
  494. package/dist/modules/workflow/agent-tools/change-request-read-shape.js +8 -118
  495. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -1
  496. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +16 -17
  497. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -1
  498. package/dist/modules/workflow/agent-tools/change-request-read.tools.js +19 -86
  499. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -1
  500. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +5 -1
  501. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
  502. package/dist/modules/workflow/agent-tools/change-request-summary.js +10 -1
  503. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
  504. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +7 -5
  505. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
  506. package/dist/modules/workflow/agent-tools/workflow.tools.js +46 -68
  507. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
  508. package/dist/modules/workflow/change-request-hooks.d.ts +1 -1
  509. package/dist/modules/workflow/event-bus.d.ts.map +1 -1
  510. package/dist/modules/workflow/event-bus.js +3 -1
  511. package/dist/modules/workflow/event-bus.js.map +1 -1
  512. package/dist/modules/workflow/events-delivery.d.ts +120 -0
  513. package/dist/modules/workflow/events-delivery.d.ts.map +1 -0
  514. package/dist/modules/workflow/events-delivery.js +202 -0
  515. package/dist/modules/workflow/events-delivery.js.map +1 -0
  516. package/dist/modules/workflow/events.routes.d.ts +16 -7
  517. package/dist/modules/workflow/events.routes.d.ts.map +1 -1
  518. package/dist/modules/workflow/events.routes.js +23 -4
  519. package/dist/modules/workflow/events.routes.js.map +1 -1
  520. package/dist/modules/workflow/file-lock.service.d.ts +1 -1
  521. package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
  522. package/dist/modules/workflow/file-lock.service.js +1 -1
  523. package/dist/modules/workflow/file-lock.service.js.map +1 -1
  524. package/dist/modules/workflow/git/git.service.d.ts +2 -2
  525. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  526. package/dist/modules/workflow/git/git.service.js +3 -6
  527. package/dist/modules/workflow/git/git.service.js.map +1 -1
  528. package/dist/modules/workflow/git/node-git-runner.js +1 -1
  529. package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
  530. package/dist/modules/workflow/git/pull-request.service.d.ts +6 -7
  531. package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
  532. package/dist/modules/workflow/git/pull-request.service.js +40 -33
  533. package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
  534. package/dist/modules/workflow/index.d.ts +14 -2
  535. package/dist/modules/workflow/index.d.ts.map +1 -1
  536. package/dist/modules/workflow/index.js +11 -2
  537. package/dist/modules/workflow/index.js.map +1 -1
  538. package/dist/modules/workflow/pending-commits.service.d.ts +1 -1
  539. package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
  540. package/dist/modules/workflow/pending-commits.service.js +1 -1
  541. package/dist/modules/workflow/pending-commits.service.js.map +1 -1
  542. package/dist/modules/workflow/read-on-branch.d.ts +1 -1
  543. package/dist/modules/workflow/read-on-branch.d.ts.map +1 -1
  544. package/dist/modules/workflow/recovery-bot.d.ts +1 -1
  545. package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
  546. package/dist/modules/workflow/recovery-bot.js +1 -1
  547. package/dist/modules/workflow/recovery-bot.js.map +1 -1
  548. package/dist/modules/workflow/review-workflow/approval-lock.d.ts +1 -1
  549. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -1
  550. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +4 -20
  551. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
  552. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +4 -8
  553. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
  554. package/dist/modules/workflow/review-workflow/review-workflow.service.js +3 -138
  555. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
  556. package/dist/modules/workflow/workflow.routes.d.ts +5 -5
  557. package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
  558. package/dist/modules/workflow/workflow.routes.js +42 -94
  559. package/dist/modules/workflow/workflow.routes.js.map +1 -1
  560. package/dist/modules/workflow/workflow.service.d.ts +40 -50
  561. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  562. package/dist/modules/workflow/workflow.service.js +218 -154
  563. package/dist/modules/workflow/workflow.service.js.map +1 -1
  564. package/dist/modules/workspace/agent-access.gate.d.ts +3 -3
  565. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  566. package/dist/modules/workspace/agent-download.builder.d.ts +1 -1
  567. package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -1
  568. package/dist/modules/workspace/agent-download.builder.js +1 -1
  569. package/dist/modules/workspace/agent-download.builder.js.map +1 -1
  570. package/dist/modules/workspace/agent-upload.routes.d.ts.map +1 -1
  571. package/dist/modules/workspace/agent-upload.routes.js +19 -0
  572. package/dist/modules/workspace/agent-upload.routes.js.map +1 -1
  573. package/dist/modules/workspace/agent-upload.store.d.ts +11 -0
  574. package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
  575. package/dist/modules/workspace/agent-upload.store.js +18 -0
  576. package/dist/modules/workspace/agent-upload.store.js.map +1 -1
  577. package/dist/modules/workspace/bounded-matcher.d.ts +5 -11
  578. package/dist/modules/workspace/bounded-matcher.d.ts.map +1 -1
  579. package/dist/modules/workspace/bounded-matcher.js +26 -87
  580. package/dist/modules/workspace/bounded-matcher.js.map +1 -1
  581. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +54 -10
  582. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
  583. package/dist/modules/workspace/file-readers/doc-extract.service.js +69 -17
  584. package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
  585. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +9 -2
  586. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
  587. package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
  588. package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts +41 -0
  589. package/dist/modules/workspace/file-readers/document-extractor.contract.d.ts.map +1 -0
  590. package/dist/modules/workspace/file-readers/document-extractor.contract.js +5 -0
  591. package/dist/modules/workspace/file-readers/document-extractor.contract.js.map +1 -0
  592. package/dist/modules/workspace/file-readers/document-extractors.d.ts +9 -0
  593. package/dist/modules/workspace/file-readers/document-extractors.d.ts.map +1 -0
  594. package/dist/modules/workspace/file-readers/document-extractors.js +26 -0
  595. package/dist/modules/workspace/file-readers/document-extractors.js.map +1 -0
  596. package/dist/modules/workspace/file-readers/document-formats.d.ts +12 -0
  597. package/dist/modules/workspace/file-readers/document-formats.d.ts.map +1 -0
  598. package/dist/modules/workspace/file-readers/document-formats.js +11 -0
  599. package/dist/modules/workspace/file-readers/document-formats.js.map +1 -0
  600. package/dist/modules/workspace/file-readers/document-reader.d.ts +21 -17
  601. package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
  602. package/dist/modules/workspace/file-readers/document-reader.js +38 -34
  603. package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
  604. package/dist/modules/workspace/file-readers/extract-in-worker.d.ts +60 -0
  605. package/dist/modules/workspace/file-readers/extract-in-worker.d.ts.map +1 -0
  606. package/dist/modules/workspace/file-readers/extract-in-worker.js +140 -0
  607. package/dist/modules/workspace/file-readers/extract-in-worker.js.map +1 -0
  608. package/dist/modules/workspace/file-readers/extract-pdf.d.ts +2 -0
  609. package/dist/modules/workspace/file-readers/extract-pdf.d.ts.map +1 -1
  610. package/dist/modules/workspace/file-readers/extract-pdf.js +20 -3
  611. package/dist/modules/workspace/file-readers/extract-pdf.js.map +1 -1
  612. package/dist/modules/workspace/file-readers/extract.worker.d.ts +2 -0
  613. package/dist/modules/workspace/file-readers/extract.worker.d.ts.map +1 -0
  614. package/dist/modules/workspace/file-readers/extract.worker.js +5 -0
  615. package/dist/modules/workspace/file-readers/extract.worker.js.map +1 -0
  616. package/dist/modules/workspace/file-readers/extraction-cache.d.ts +21 -5
  617. package/dist/modules/workspace/file-readers/extraction-cache.d.ts.map +1 -1
  618. package/dist/modules/workspace/file-readers/extraction-cache.js +24 -10
  619. package/dist/modules/workspace/file-readers/extraction-cache.js.map +1 -1
  620. package/dist/modules/workspace/file-readers/extraction-worker.d.ts +42 -0
  621. package/dist/modules/workspace/file-readers/extraction-worker.d.ts.map +1 -0
  622. package/dist/modules/workspace/file-readers/extraction-worker.js +69 -0
  623. package/dist/modules/workspace/file-readers/extraction-worker.js.map +1 -0
  624. package/dist/modules/workspace/file-readers/file-reader.d.ts +13 -4
  625. package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
  626. package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
  627. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts +3 -2
  628. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
  629. package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -20
  630. package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
  631. package/dist/modules/workspace/first-run.js +1 -1
  632. package/dist/modules/workspace/first-run.js.map +1 -1
  633. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  634. package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -1
  635. package/dist/modules/workspace/git-internals.middleware.js +1 -1
  636. package/dist/modules/workspace/git-internals.middleware.js.map +1 -1
  637. package/dist/modules/workspace/index.d.ts +16 -0
  638. package/dist/modules/workspace/index.d.ts.map +1 -1
  639. package/dist/modules/workspace/index.js +13 -0
  640. package/dist/modules/workspace/index.js.map +1 -1
  641. package/dist/modules/workspace/kb-repository.d.ts.map +1 -1
  642. package/dist/modules/workspace/kb-repository.js +1 -1
  643. package/dist/modules/workspace/kb-repository.js.map +1 -1
  644. package/dist/modules/workspace/not-found.d.ts +1 -1
  645. package/dist/modules/workspace/not-found.d.ts.map +1 -1
  646. package/dist/modules/workspace/not-found.js +1 -1
  647. package/dist/modules/workspace/not-found.js.map +1 -1
  648. package/dist/modules/workspace/pattern-matcher.contract.d.ts +1 -1
  649. package/dist/modules/workspace/pattern-matcher.contract.d.ts.map +1 -1
  650. package/dist/modules/workspace/pattern-matcher.contract.js +1 -1
  651. package/dist/modules/workspace/pattern-matcher.contract.js.map +1 -1
  652. package/dist/modules/workspace/routine-write-policy.js +1 -1
  653. package/dist/modules/workspace/routine-write-policy.js.map +1 -1
  654. package/dist/modules/workspace/startup/kb-git.js +1 -1
  655. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  656. package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
  657. package/dist/modules/workspace/startup/kb-startup-runner.js +1 -2
  658. package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
  659. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +2 -2
  660. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
  661. package/dist/modules/workspace/startup/steps/personal-spaces.step.js +2 -2
  662. package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -1
  663. package/dist/modules/workspace/startup/steps/plugin-layout.js +1 -1
  664. package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -1
  665. package/dist/modules/workspace/startup/steps/roles-yaml.step.js +1 -1
  666. package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
  667. package/dist/modules/workspace/startup/steps/seed-tree.js +2 -2
  668. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  669. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +1 -1
  670. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  671. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  672. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  673. package/dist/modules/workspace/startup/steps/template-source.js +2 -2
  674. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  675. package/dist/modules/workspace/worker-pool.d.ts +100 -0
  676. package/dist/modules/workspace/worker-pool.d.ts.map +1 -0
  677. package/dist/modules/workspace/worker-pool.js +156 -0
  678. package/dist/modules/workspace/worker-pool.js.map +1 -0
  679. package/dist/modules/workspace/workspace.routes.d.ts +7 -8
  680. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  681. package/dist/modules/workspace/workspace.routes.js +4 -6
  682. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  683. package/dist/modules/workspace/workspace.service.d.ts +1 -1
  684. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  685. package/dist/modules/workspace/workspace.service.js +3 -6
  686. package/dist/modules/workspace/workspace.service.js.map +1 -1
  687. package/dist/modules/workspace/workspace.tools.d.ts +7 -7
  688. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  689. package/dist/modules/workspace/workspace.tools.js +45 -27
  690. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  691. package/dist/modules/workspace/write-denial.d.ts +4 -4
  692. package/dist/modules/workspace/write-denial.d.ts.map +1 -1
  693. package/dist/modules/workspace/write-denial.js +2 -3
  694. package/dist/modules/workspace/write-denial.js.map +1 -1
  695. package/dist/modules/write-access/index.d.ts +8 -0
  696. package/dist/modules/write-access/index.d.ts.map +1 -0
  697. package/dist/modules/write-access/index.js +7 -0
  698. package/dist/modules/write-access/index.js.map +1 -0
  699. package/migrations/0020_change_request_body_is_the_description.sql +20 -0
  700. package/migrations/0021_data_migrations_ledger.sql +11 -0
  701. package/migrations/meta/0020_snapshot.json +2321 -0
  702. package/migrations/meta/0021_snapshot.json +2353 -0
  703. package/migrations/meta/_journal.json +14 -0
  704. package/package.json +3 -3
  705. package/src/core/__tests__/damaged-document.tools.test.ts +374 -0
  706. package/src/core/__tests__/public-config.test.ts +5 -0
  707. package/src/core/create-core-server.ts +32 -3
  708. package/src/core/create-core-services.ts +32 -5
  709. package/src/core/lifecycle.ts +10 -0
  710. package/src/core/public-config.ts +10 -0
  711. package/src/modules/access/__tests__/access-requests.routes.test.ts +29 -15
  712. package/src/modules/access/access-control.service.ts +5 -6
  713. package/src/modules/access/access-declarations.ts +1 -1
  714. package/src/modules/access/access-mutation.service.ts +10 -4
  715. package/src/modules/access/access-requests.contract.ts +1 -1
  716. package/src/modules/access/access-requests.routes.ts +10 -15
  717. package/src/modules/access/access-requests.service.ts +29 -71
  718. package/src/modules/access/access-view.ts +1 -1
  719. package/src/modules/access/access.routes.ts +9 -11
  720. package/src/modules/access/admin-locked-commit.ts +3 -2
  721. package/src/modules/access/capability-registry.ts +1 -1
  722. package/src/modules/access/change-read-gate.ts +3 -5
  723. package/src/modules/access/creator-access.ts +3 -5
  724. package/src/modules/access/directory-sync-bot.ts +2 -2
  725. package/src/modules/access/groups-admin.routes.ts +3 -3
  726. package/src/modules/access/groups-admin.service.ts +3 -4
  727. package/src/modules/access/groups-edit.ts +2 -2
  728. package/src/modules/access/index.ts +17 -0
  729. package/src/modules/access/reference-scan.ts +1 -1
  730. package/src/modules/access/roles-admin.service.ts +3 -6
  731. package/src/modules/access/roles-edit.ts +1 -1
  732. package/src/modules/access/synced-groups-committer.ts +4 -4
  733. package/src/modules/access/synced-groups-writer.ts +2 -2
  734. package/src/modules/access/user-access-removal.service.ts +3 -6
  735. package/src/modules/access-model/index.ts +21 -5
  736. package/src/modules/access-model/roles-yaml-guard.ts +1 -1
  737. package/src/modules/admin/admin-access.routes.ts +1 -1
  738. package/src/modules/admin/admin-access.service.ts +2 -2
  739. package/src/modules/admin/index.ts +7 -0
  740. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +5 -0
  741. package/src/modules/agent-guide/agent-guide.tools.ts +4 -6
  742. package/src/modules/agent-guide/agent-guide.ts +1 -1
  743. package/src/modules/agent-guide/index.ts +1 -1
  744. package/src/modules/agent-instructions/read-preamble.ts +1 -1
  745. package/src/modules/audit/agent-audit.service.ts +3 -3
  746. package/src/modules/audit/agent-connection.routes.ts +1 -1
  747. package/src/modules/audit/agent-rest-audit.middleware.ts +1 -1
  748. package/src/modules/audit/audit.routes.ts +4 -4
  749. package/src/modules/auth/account-erasure.service.ts +4 -9
  750. package/src/modules/auth/account-switch-lock.ts +2 -2
  751. package/src/modules/auth/account.routes.ts +3 -3
  752. package/src/modules/auth/auth.service.ts +4 -4
  753. package/src/modules/auth/index.ts +3 -0
  754. package/src/modules/auth/oidc-auth-provider.ts +1 -1
  755. package/src/modules/code-mode/code-mode.tool.ts +1 -1
  756. package/src/modules/connection-probe/connection-probe.service.ts +3 -6
  757. package/src/modules/database/__tests__/legacy-change-request-body.test.ts +118 -0
  758. package/src/modules/database/__tests__/legacy-request-bodies.pg.test.ts +258 -0
  759. package/src/modules/database/__tests__/pii-backfill.pg.test.ts +15 -18
  760. package/src/modules/database/core-schema.ts +43 -36
  761. package/src/modules/database/index.ts +9 -0
  762. package/src/modules/database/migrate.ts +79 -3
  763. package/src/modules/declared-variables/declared-variables.routes.ts +2 -2
  764. package/src/modules/diff/diff.routes.ts +5 -5
  765. package/src/modules/diff/diff.service.ts +2 -2
  766. package/src/modules/diff/index.ts +6 -0
  767. package/src/modules/embed/account-link.service.ts +2 -2
  768. package/src/modules/embed/embed.routes.ts +2 -2
  769. package/src/modules/embed/embed.service.ts +1 -1
  770. package/src/modules/embed/embed.tools.ts +6 -9
  771. package/src/modules/github-app/github-app.connection.ts +1 -1
  772. package/src/modules/github-app/github-app.routes.ts +3 -3
  773. package/src/modules/kb-fs/index.ts +11 -0
  774. package/src/modules/kb-fs/locking-filesystem.ts +1 -1
  775. package/src/modules/kb-sync/kb-sync.routes.ts +3 -3
  776. package/src/modules/kb-sync/kb-sync.service.ts +1 -1
  777. package/src/modules/kb-sync/sync-auth.ts +1 -1
  778. package/src/modules/kb-sync/sync-payload.ts +1 -1
  779. package/src/modules/marketplace/git-http.routes.ts +1 -1
  780. package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +1 -1
  781. package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +2 -2
  782. package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +2 -2
  783. package/src/modules/marketplace/github-facade/github-facade.routes.ts +2 -2
  784. package/src/modules/marketplace/github-facade/github-facade.service.ts +2 -2
  785. package/src/modules/marketplace/marketplace-repo.service.ts +2 -2
  786. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +213 -0
  787. package/src/modules/mcp/index.ts +7 -0
  788. package/src/modules/mcp/mcp-auth.middleware.ts +6 -7
  789. package/src/modules/mcp/mcp.routes.ts +3 -5
  790. package/src/modules/mcp/mcp.service.ts +30 -13
  791. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +2 -2
  792. package/src/modules/mcp/oauth/oauth-consent.routes.ts +1 -1
  793. package/src/modules/onboarding/onboarding.routes.ts +1 -1
  794. package/src/modules/onboarding/starter-pack.service.ts +5 -6
  795. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +2 -1
  796. package/src/modules/plugins/__tests__/plugin-links.service.test.ts +2 -1
  797. package/src/modules/plugins/compile/compile-marketplace.ts +2 -2
  798. package/src/modules/plugins/compile/marketplace-compiler.service.ts +3 -3
  799. package/src/modules/plugins/discovery/bundle-dialect/registry.ts +1 -1
  800. package/src/modules/plugins/index.ts +2 -0
  801. package/src/modules/plugins/join-proposals.ts +2 -2
  802. package/src/modules/plugins/join-request-jobs.service.ts +3 -3
  803. package/src/modules/plugins/join-request-records.store.ts +2 -2
  804. package/src/modules/plugins/join-requests.service.ts +4 -4
  805. package/src/modules/plugins/plugin-links.service.ts +10 -11
  806. package/src/modules/plugins/plugin-links.ts +4 -4
  807. package/src/modules/plugins/plugin-provision.service.ts +4 -5
  808. package/src/modules/plugins/plugin-rename.service.ts +3 -3
  809. package/src/modules/plugins/plugins.contract.ts +1 -1
  810. package/src/modules/plugins/plugins.routes.ts +4 -4
  811. package/src/modules/plugins/plugins.service.ts +5 -5
  812. package/src/modules/plugins/plugins.tools.ts +4 -4
  813. package/src/modules/plugins/teams.routes.ts +3 -3
  814. package/src/modules/secrets-vault/db-secrets-vault.service.ts +2 -2
  815. package/src/modules/secrets-vault/index.ts +2 -0
  816. package/src/modules/secrets-vault/secrets-vault.routes.ts +4 -4
  817. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +88 -1
  818. package/src/modules/settings/connection-check.ts +1 -1
  819. package/src/modules/settings/deployment-settings.service.ts +44 -4
  820. package/src/modules/settings/git-root-folders.ts +1 -1
  821. package/src/modules/settings/index.ts +12 -0
  822. package/src/modules/settings/setup.routes.ts +5 -4
  823. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +2 -2
  824. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +6 -3
  825. package/src/modules/skills/allowed-tools-check.ts +2 -6
  826. package/src/modules/skills/index.ts +2 -0
  827. package/src/modules/skills/pending-skills.service.ts +3 -4
  828. package/src/modules/skills/skill-access-requests.routes.ts +10 -17
  829. package/src/modules/skills/skills.routes.ts +1 -1
  830. package/src/modules/skills/skills.service.ts +2 -2
  831. package/src/modules/skills/skills.tools.ts +5 -9
  832. package/src/modules/tool-auth/connection-key-rejection.ts +1 -1
  833. package/src/modules/tool-auth/connection-keys-admin.routes.ts +2 -2
  834. package/src/modules/tool-auth/external-api-key.service.ts +2 -2
  835. package/src/modules/tool-auth/index.ts +14 -0
  836. package/src/modules/tool-auth/tool-auth.middleware.ts +3 -3
  837. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +2 -2
  838. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +2 -2
  839. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +2 -2
  840. package/src/modules/tool-helpers/default-branch-write.ts +1 -1
  841. package/src/modules/tool-helpers/index.ts +5 -1
  842. package/src/modules/tool-helpers/route-argument-check.ts +1 -1
  843. package/src/modules/tool-helpers/route-tool-schemas.ts +1 -1
  844. package/src/modules/tool-helpers/tool-context.ts +8 -10
  845. package/src/modules/tool-helpers/tool-def.ts +7 -3
  846. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  847. package/src/modules/tool-helpers/tool.contract.ts +2 -2
  848. package/src/modules/tool-helpers/validate-token.ts +2 -3
  849. package/src/modules/tool-manuals/index.ts +6 -0
  850. package/src/modules/tool-manuals/mcp-server-edit.service.ts +2 -2
  851. package/src/modules/tool-manuals/pending-tools.service.ts +2 -2
  852. package/src/modules/tool-manuals/tool-delete.service.ts +5 -6
  853. package/src/modules/tool-manuals/tool-manuals.routes.ts +5 -5
  854. package/src/modules/tool-manuals/tool-manuals.service.ts +3 -3
  855. package/src/modules/tool-manuals/tool-manuals.tools.ts +4 -6
  856. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +439 -0
  857. package/src/modules/tool-registry/__tests__/tool-registry.test.ts +9 -2
  858. package/src/modules/tool-registry/description-length.ts +2 -2
  859. package/src/modules/tool-registry/index.ts +22 -0
  860. package/src/modules/tool-registry/manual.routes.ts +14 -8
  861. package/src/modules/tool-registry/read-only-hints.contract.ts +54 -0
  862. package/src/modules/tool-registry/read-only-hints.ts +225 -0
  863. package/src/modules/tool-registry/tool.contract.ts +11 -0
  864. package/src/modules/update-check/update-check.routes.ts +2 -2
  865. package/src/modules/workflow/__tests__/event-bus.test.ts +14 -2
  866. package/src/modules/workflow/__tests__/events-delivery.test.ts +778 -0
  867. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +84 -21
  868. package/src/modules/workflow/__tests__/workflow.service.update-change-request.pg.test.ts +120 -0
  869. package/src/modules/workflow/__tests__/workflow.service.update-change-request.test.ts +346 -0
  870. package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +32 -209
  871. package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +16 -245
  872. package/src/modules/workflow/agent-tools/__tests__/update-change-request.parity.test.ts +306 -0
  873. package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +33 -57
  874. package/src/modules/workflow/agent-tools/change-request-read-shape.ts +18 -153
  875. package/src/modules/workflow/agent-tools/change-request-read.tools.ts +24 -96
  876. package/src/modules/workflow/agent-tools/change-request-summary.ts +16 -2
  877. package/src/modules/workflow/agent-tools/workflow.tools.ts +49 -75
  878. package/src/modules/workflow/change-request-hooks.ts +1 -1
  879. package/src/modules/workflow/event-bus.ts +3 -1
  880. package/src/modules/workflow/events-delivery.ts +278 -0
  881. package/src/modules/workflow/events.routes.ts +30 -9
  882. package/src/modules/workflow/file-lock.service.ts +2 -2
  883. package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +24 -9
  884. package/src/modules/workflow/git/git.service.ts +5 -8
  885. package/src/modules/workflow/git/node-git-runner.ts +1 -1
  886. package/src/modules/workflow/git/pull-request.service.ts +34 -29
  887. package/src/modules/workflow/index.ts +15 -2
  888. package/src/modules/workflow/pending-commits.service.ts +2 -2
  889. package/src/modules/workflow/read-on-branch.ts +1 -1
  890. package/src/modules/workflow/recovery-bot.ts +2 -2
  891. package/src/modules/workflow/review-workflow/approval-lock.ts +1 -1
  892. package/src/modules/workflow/review-workflow/review-workflow.interface.ts +3 -35
  893. package/src/modules/workflow/review-workflow/review-workflow.service.ts +6 -165
  894. package/src/modules/workflow/workflow.routes.ts +46 -100
  895. package/src/modules/workflow/workflow.service.ts +272 -191
  896. package/src/modules/workspace/__tests__/agent-downloads.test.ts +2 -1
  897. package/src/modules/workspace/__tests__/agent-uploads.test.ts +87 -1
  898. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +2 -1
  899. package/src/modules/workspace/__tests__/file-stat-access.test.ts +2 -1
  900. package/src/modules/workspace/__tests__/git-internals.security.test.ts +2 -1
  901. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +2 -1
  902. package/src/modules/workspace/__tests__/worker-pool.test.ts +118 -0
  903. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -2
  904. package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +30 -0
  905. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +2 -1
  906. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +2 -1
  907. package/src/modules/workspace/__tests__/workspace.tools.test.ts +30 -4
  908. package/src/modules/workspace/agent-access.gate.ts +3 -3
  909. package/src/modules/workspace/agent-download.builder.ts +1 -1
  910. package/src/modules/workspace/agent-upload.routes.ts +19 -0
  911. package/src/modules/workspace/agent-upload.store.ts +18 -0
  912. package/src/modules/workspace/bounded-matcher.ts +32 -89
  913. package/src/modules/workspace/file-readers/README.md +9 -0
  914. package/src/modules/workspace/file-readers/__tests__/doc-extract.service.test.ts +165 -0
  915. package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +21 -16
  916. package/src/modules/workspace/file-readers/__tests__/extract-in-worker.test.ts +229 -0
  917. package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +2 -1
  918. package/src/modules/workspace/file-readers/__tests__/fixtures/damaged-pdf.ts +34 -0
  919. package/src/modules/workspace/file-readers/__tests__/fixtures/misbehaving-extract.worker.ts +57 -0
  920. package/src/modules/workspace/file-readers/__tests__/fixtures/pdf-in-trouble.worker.ts +20 -0
  921. package/src/modules/workspace/file-readers/__tests__/fixtures/unloadable-extract.worker.ts +2 -0
  922. package/src/modules/workspace/file-readers/doc-extract.service.ts +95 -20
  923. package/src/modules/workspace/file-readers/doc-extract.types.ts +13 -3
  924. package/src/modules/workspace/file-readers/document-extractor.contract.ts +42 -0
  925. package/src/modules/workspace/file-readers/document-extractors.ts +28 -0
  926. package/src/modules/workspace/file-readers/document-formats.ts +13 -0
  927. package/src/modules/workspace/file-readers/document-reader.ts +40 -36
  928. package/src/modules/workspace/file-readers/extract-in-worker.ts +183 -0
  929. package/src/modules/workspace/file-readers/extract-pdf.ts +23 -4
  930. package/src/modules/workspace/file-readers/extract.worker.ts +5 -0
  931. package/src/modules/workspace/file-readers/extraction-cache.ts +33 -12
  932. package/src/modules/workspace/file-readers/extraction-worker.ts +86 -0
  933. package/src/modules/workspace/file-readers/file-reader.registry.ts +6 -20
  934. package/src/modules/workspace/file-readers/file-reader.ts +14 -4
  935. package/src/modules/workspace/first-run.ts +1 -1
  936. package/src/modules/workspace/git-internals.middleware.ts +1 -1
  937. package/src/modules/workspace/index.ts +17 -0
  938. package/src/modules/workspace/kb-repository.ts +3 -2
  939. package/src/modules/workspace/not-found.ts +1 -1
  940. package/src/modules/workspace/pattern-matcher.contract.ts +1 -1
  941. package/src/modules/workspace/routine-write-policy.ts +1 -1
  942. package/src/modules/workspace/startup/kb-git.ts +1 -1
  943. package/src/modules/workspace/startup/kb-startup-runner.ts +1 -2
  944. package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +3 -3
  945. package/src/modules/workspace/startup/steps/personal-spaces.step.ts +2 -2
  946. package/src/modules/workspace/startup/steps/plugin-layout.ts +1 -1
  947. package/src/modules/workspace/startup/steps/roles-yaml.step.ts +1 -1
  948. package/src/modules/workspace/startup/steps/seed-tree.ts +2 -2
  949. package/src/modules/workspace/startup/steps/template-files.step.ts +2 -2
  950. package/src/modules/workspace/startup/steps/template-source.ts +2 -2
  951. package/src/modules/workspace/worker-pool.ts +193 -0
  952. package/src/modules/workspace/workspace.routes.ts +9 -12
  953. package/src/modules/workspace/workspace.service.ts +4 -7
  954. package/src/modules/workspace/workspace.tools.ts +53 -34
  955. package/src/modules/workspace/write-denial.ts +4 -5
  956. package/src/modules/write-access/index.ts +7 -0
  957. package/src/shared/__tests__/module-boundaries.lint.test.ts +301 -0
  958. package/src/modules/workflow/__tests__/format-affected-owners.test.ts +0 -85
@@ -141,6 +141,20 @@
141
141
  "when": 1792404850653,
142
142
  "tag": "0019_oauth_token_rotated_at",
143
143
  "breakpoints": true
144
+ },
145
+ {
146
+ "idx": 20,
147
+ "version": "7",
148
+ "when": 1792491287956,
149
+ "tag": "0020_change_request_body_is_the_description",
150
+ "breakpoints": true
151
+ },
152
+ {
153
+ "idx": 21,
154
+ "version": "7",
155
+ "when": 1792491290917,
156
+ "tag": "0021_data_migrations_ledger",
157
+ "breakpoints": true
144
158
  }
145
159
  ]
146
160
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bevel-software/platform-core-backend",
3
- "version": "0.32.0",
3
+ "version": "0.33.0",
4
4
  "description": "Open-source core backend of the Bevel platform: git-backed knowledge workspace, workflow (branches/change requests/locks/SSE), skills, tools, secrets vault, access control and the remote MCP surface.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -55,8 +55,8 @@
55
55
  "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
56
56
  "yaml": "^2.9.0",
57
57
  "zod": "^3.24.0",
58
- "@bevel-software/platform-mcp-core": "0.32.0",
59
- "@bevel-software/platform-shared": "0.32.0"
58
+ "@bevel-software/platform-mcp-core": "0.33.0",
59
+ "@bevel-software/platform-shared": "0.33.0"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/adm-zip": "^0.5.8",
@@ -0,0 +1,374 @@
1
+ import type { Server as HttpServer } from 'node:http';
2
+ import type { AddressInfo } from 'node:net';
3
+ import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ import express, { type RequestHandler } from 'express';
7
+ import { afterEach, describe, expect, it } from 'vitest';
8
+ import { LocalFilesystem } from '@mastra/core/workspace';
9
+ import { ToolRegistry } from '../../modules/tool-registry/tool-registry.js';
10
+ import { createManualRoutes } from '../../modules/tool-registry/manual.routes.js';
11
+ import { createToolHandlerFactory } from '../../modules/tool-helpers/tool-handler.js';
12
+ import type { ToolContext } from '../../modules/tool-helpers/tool.contract.js';
13
+ import type { ToolAuth } from '../../modules/tool-auth/tool-auth.middleware.js';
14
+ import { registerWorkspaceTools } from '../../modules/workspace/workspace.tools.js';
15
+ import { RoutineWritePolicyService } from '../../modules/workspace/routine-write-policy.js';
16
+ import { WorkflowHooks } from '../../modules/workflow/workflow-hooks.js';
17
+ import { ToolDescriptionNotes } from '../../modules/workspace/agent-access.gate.js';
18
+ import { SpillStore } from '../../modules/workspace/spill-store.js';
19
+ import { WorkerPatternMatcher } from '../../modules/workspace/bounded-matcher.js';
20
+ import { DocExtractService, type UnreadableDocument } from '../../modules/workspace/file-readers/doc-extract.service.js';
21
+ import type { IDocumentExtractor } from '../../modules/workspace/file-readers/document-extractor.contract.js';
22
+ import { WorkerDocumentExtractor, type WorkerDocumentExtractorOptions } from '../../modules/workspace/file-readers/extract-in-worker.js';
23
+ import type { IAccessControl } from '../../modules/access/access-control.interface.js';
24
+ import { createMcpRoutes } from '../../modules/mcp/mcp.routes.js';
25
+ import { McpService } from '../../modules/mcp/mcp.service.js';
26
+ import { testKbContext } from '../../__tests__/kb-context.js';
27
+ import { xrefPdf } from '../../modules/workspace/file-readers/__tests__/fixtures/damaged-pdf.js';
28
+
29
+ /**
30
+ * A damaged document, on every surface that extracts: `read_file`, `grep`,
31
+ * `file_stat` and `call_tool_chain` answer it with the same one-line notice,
32
+ * extract it once, never again for the same bytes, and the server keeps
33
+ * answering its health route throughout. The fixture is a synthetic PDF with
34
+ * a damaged cross-reference table (`fixtures/damaged-pdf.ts`).
35
+ *
36
+ * It lives with the composition root's tests because it composes the server
37
+ * across modules — the tool registry, the tool handler, the MCP proxy — as
38
+ * `create-core-server.ts` does.
39
+ */
40
+
41
+ const KB = 'knowledge-base';
42
+ const BRANCH = 'main';
43
+ const BEARER = 'bevel_key_user_a';
44
+ const DAMAGED = `${KB}/Legal/Supplier-Agreement.pdf`;
45
+ const PDFJS_SAYS = "could not extract the PDF's text (Bad (uncompressed) XRef entry: 4R)";
46
+ const NOTICE = `[${DAMAGED} ${PDFJS_SAYS} — the file may be corrupt or mislabeled. To fix it, replace the document by uploading a new version.]`;
47
+
48
+ const fakeAuth: RequestHandler = (req, _res, next) => {
49
+ req.toolAuth = { source: 'internal', userId: 'u', scope: 'write' };
50
+ req.userId = 'u';
51
+ req.externalApiKeyId = 'tok-a';
52
+ next();
53
+ };
54
+ const passthrough: RequestHandler = (_req, _res, next) => next();
55
+
56
+ interface Platform {
57
+ baseUrl: string;
58
+ /** Extractions the worker was actually asked for. */
59
+ extractions(): number;
60
+ /** Fresh failures the service reported. */
61
+ told: UnreadableDocument[];
62
+ write(path: string, bytes: Buffer | string): Promise<void>;
63
+ stop(): Promise<void>;
64
+ }
65
+
66
+ const running: Platform[] = [];
67
+ afterEach(async () => {
68
+ for (const p of running.splice(0)) await p.stop().catch(() => {});
69
+ });
70
+
71
+ async function startPlatform(extractorOpts: WorkerDocumentExtractorOptions = {}): Promise<Platform> {
72
+ const tempDir = await mkdtemp(join(tmpdir(), 'damaged-doc-'));
73
+ const fs = new LocalFilesystem({ basePath: tempDir, contained: true });
74
+ const worker = new WorkerDocumentExtractor(extractorOpts);
75
+ let extractions = 0;
76
+ const counting: IDocumentExtractor = {
77
+ extract: (ext, bytes) => {
78
+ extractions++;
79
+ return worker.extract(ext, bytes);
80
+ },
81
+ close: () => worker.close(),
82
+ };
83
+ const told: UnreadableDocument[] = [];
84
+ const docExtract = new DocExtractService(join(tempDir, '.doc-extract'), counting, { onUnreadable: (d) => told.push(d) });
85
+ const matcher = new WorkerPatternMatcher();
86
+
87
+ const registry = new ToolRegistry();
88
+ const resolve = async (auth: ToolAuth, signal: AbortSignal, sessionId?: string): Promise<ToolContext> => ({
89
+ user: { id: 'u', email: 'e@x', name: 'N' },
90
+ scope: auth.scope,
91
+ source: auth.source,
92
+ sessionId,
93
+ abortSignal: signal,
94
+ workspaceService: { getWorkspacePath: async () => tempDir } as never,
95
+ workflowService: {} as never,
96
+ events: {} as never,
97
+ getFilesystem: async () => fs,
98
+ });
99
+ // Everyone may do everything: what this suite is about is extraction, not access.
100
+ const allowAll = new Proxy(
101
+ {},
102
+ {
103
+ get: (_target, verb) =>
104
+ typeof verb === 'string' && verb.endsWith('Batch')
105
+ ? async (_w: string, _e: string, paths: string[]) => new Map(paths.map((p) => [p, true]))
106
+ : async () => true,
107
+ },
108
+ ) as IAccessControl;
109
+
110
+ const app = express();
111
+ app.use(express.json());
112
+ // What the server's own health route does: answer at once, if the thread is free to.
113
+ app.get('/api/health', (_req, res) => {
114
+ res.json({ status: 'ok' });
115
+ });
116
+ const router = express.Router();
117
+ registerWorkspaceTools(
118
+ registry,
119
+ router,
120
+ fakeAuth,
121
+ createToolHandlerFactory(resolve),
122
+ new SpillStore(join(tempDir, 'spills')),
123
+ docExtract,
124
+ allowAll,
125
+ testKbContext({ kbDirName: KB }),
126
+ { recoveryBotEmail: 'recovery-bot@bevel.local', hooks: new WorkflowHooks(), notes: new ToolDescriptionNotes() },
127
+ new RoutineWritePolicyService(),
128
+ {} as never,
129
+ undefined,
130
+ undefined,
131
+ undefined,
132
+ undefined,
133
+ undefined,
134
+ undefined,
135
+ undefined,
136
+ matcher,
137
+ );
138
+ app.use('/api', router);
139
+ const httpServer = await new Promise<HttpServer>((res) => {
140
+ const s = app.listen(0, '127.0.0.1', () => res(s));
141
+ });
142
+ const baseUrl = `http://127.0.0.1:${(httpServer.address() as AddressInfo).port}`;
143
+
144
+ // `call_tool_chain`: the real MCP proxy, dispatching back over loopback.
145
+ app.get('/api/agent/all-tools', (_req, res) => {
146
+ res.json({
147
+ manuals: [
148
+ {
149
+ name: 'KNOWLEDGE_BASE',
150
+ call_template_type: 'http',
151
+ http_method: 'GET',
152
+ url: '${API_URL}/api/agent/utcp',
153
+ content_type: 'application/json',
154
+ headers: { Authorization: 'Bearer ${CONNECTION_KEY}' },
155
+ },
156
+ ],
157
+ });
158
+ });
159
+ const mcp = new McpService({
160
+ loopbackBaseUrl: baseUrl,
161
+ manualName: 'KNOWLEDGE_BASE',
162
+ spillStore: new SpillStore(join(tempDir, 'spills')),
163
+ publicFrontendUrl: 'http://localhost:5173',
164
+ });
165
+ const stub = {} as never;
166
+ app.use('/api', createMcpRoutes(mcp, stub, fakeAuth, fakeAuth, stub, stub, stub, ''));
167
+ app.use('/api', createManualRoutes(registry, passthrough));
168
+
169
+ const write = async (path: string, bytes: Buffer | string) => {
170
+ await mkdir(dirname(join(tempDir, path)), { recursive: true });
171
+ await writeFile(join(tempDir, path), bytes);
172
+ };
173
+ await write(DAMAGED, xrefPdf('Hello damaged', { damage: true }));
174
+ await write(`${KB}/Legal/notes.md`, 'Hello from the notes\n');
175
+ await write(`${KB}/Legal/sound.pdf`, xrefPdf('Hello sound', { damage: false }));
176
+
177
+ let stopped = false;
178
+ const platform: Platform = {
179
+ baseUrl,
180
+ extractions: () => extractions,
181
+ told,
182
+ write,
183
+ async stop() {
184
+ if (stopped) return;
185
+ stopped = true;
186
+ mcp.onSecretsChanged(null);
187
+ httpServer.closeAllConnections();
188
+ await new Promise<void>((r) => httpServer.close(() => r()));
189
+ await Promise.all([worker.close(), matcher.close()]);
190
+ await rm(tempDir, { recursive: true, force: true });
191
+ },
192
+ };
193
+ running.push(platform);
194
+ return platform;
195
+ }
196
+
197
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- tool answers, read by shape
198
+ async function tool(baseUrl: string, name: string, body: object): Promise<any> {
199
+ const res = await fetch(`${baseUrl}/api/agent/tools/${name}`, {
200
+ method: 'POST',
201
+ headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${BEARER}` },
202
+ body: JSON.stringify(body),
203
+ });
204
+ const text = await res.text();
205
+ expect(res.status, text).toBe(200);
206
+ return JSON.parse(text);
207
+ }
208
+
209
+ /** `call_tool_chain` over the MCP endpoint; answers what the chain returned. */
210
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- the chain's result, read by shape
211
+ async function chain(baseUrl: string, code: string): Promise<any> {
212
+ const res = await fetch(`${baseUrl}/api/mcp`, {
213
+ method: 'POST',
214
+ headers: {
215
+ 'Content-Type': 'application/json',
216
+ Accept: 'application/json, text/event-stream',
217
+ Authorization: `Bearer ${BEARER}`,
218
+ },
219
+ body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/call', params: { name: 'call_tool_chain', arguments: { code } } }),
220
+ });
221
+ const text = await res.text();
222
+ const lines = text.startsWith('event:') || text.startsWith('data:')
223
+ ? text.split('\n').filter((l) => l.startsWith('data:')).map((l) => JSON.parse(l.slice(5)))
224
+ : [JSON.parse(text)];
225
+ const result = lines[lines.length - 1]?.result;
226
+ expect(result?.isError, JSON.stringify(lines)).toBeFalsy();
227
+ const answer = JSON.parse((result.content as Array<{ text: string }>)[0]!.text);
228
+ expect(answer.success, JSON.stringify(answer)).toBe(true);
229
+ return answer.result;
230
+ }
231
+
232
+ /**
233
+ * Run `work` while asking the health route every 50 ms; answers the slowest
234
+ * health answer seen, in ms, and what `work` answered.
235
+ */
236
+ async function timingHealth<T>(baseUrl: string, work: () => Promise<T>): Promise<{ slowest: number; answer: T }> {
237
+ let slowest = 0;
238
+ let done = false;
239
+ const probes: Promise<void>[] = [];
240
+ const probe = async () => {
241
+ const started = Date.now();
242
+ const res = await fetch(`${baseUrl}/api/health`);
243
+ await res.text();
244
+ slowest = Math.max(slowest, Date.now() - started);
245
+ };
246
+ const loop = (async () => {
247
+ while (!done) {
248
+ probes.push(probe());
249
+ await new Promise((r) => setTimeout(r, 50));
250
+ }
251
+ })();
252
+ const answer = await work();
253
+ done = true;
254
+ await loop;
255
+ await Promise.all(probes);
256
+ return { slowest, answer };
257
+ }
258
+
259
+ describe('a PDF with a damaged cross-reference table', () => {
260
+ it('read_file answers the one-line notice with pdf.js’s message — once extracted, never again', async () => {
261
+ const p = await startPlatform();
262
+ const first = await tool(p.baseUrl, 'read_file', { branch: BRANCH, path: DAMAGED });
263
+ expect(first.content).toBe(NOTICE);
264
+ const second = await tool(p.baseUrl, 'read_file', { branch: BRANCH, path: DAMAGED });
265
+ expect(second.content).toBe(NOTICE);
266
+ expect(p.extractions()).toBe(1);
267
+ // Reported once, for the workspace it was read in.
268
+ expect(p.told).toEqual([{ workspaceId: 'main', path: DAMAGED, reason: PDFJS_SAYS }]);
269
+ });
270
+
271
+ it('file_stat answers the remembered notice — and extracts nothing to do so', async () => {
272
+ const p = await startPlatform();
273
+ const before = await tool(p.baseUrl, 'file_stat', { branch: BRANCH, path: DAMAGED });
274
+ expect(before.unreadable).toBeUndefined();
275
+ expect(before.contentMode).toBe('document');
276
+ expect(p.extractions()).toBe(0);
277
+ await tool(p.baseUrl, 'read_file', { branch: BRANCH, path: DAMAGED });
278
+ const after = await tool(p.baseUrl, 'file_stat', { branch: BRANCH, path: DAMAGED });
279
+ expect(after.unreadable).toBe(NOTICE);
280
+ expect(p.extractions()).toBe(1);
281
+ });
282
+
283
+ it('call_tool_chain gets the same notice as a direct read_file', async () => {
284
+ const p = await startPlatform();
285
+ const result = await chain(
286
+ p.baseUrl,
287
+ `return KNOWLEDGE_BASE.read_file({ body: { branch: ${JSON.stringify(BRANCH)}, path: ${JSON.stringify(DAMAGED)} } });`,
288
+ );
289
+ expect(result.content).toBe(NOTICE);
290
+ });
291
+
292
+ it('grep skips it — every other file’s matches come back — and the next grep does not extract it again', async () => {
293
+ const p = await startPlatform();
294
+ const first = await tool(p.baseUrl, 'grep', { branch: BRANCH, pattern: 'Hello', path: `${KB}/Legal` });
295
+ const paths = (first.matches as Array<{ path: string }>).map((m) => m.path).sort();
296
+ expect(paths).toEqual([`${KB}/Legal/notes.md`, `${KB}/Legal/sound.pdf`]);
297
+ const extracted = p.extractions();
298
+ expect(extracted).toBe(2);
299
+ const second = await tool(p.baseUrl, 'grep', { branch: BRANCH, pattern: 'Hello', path: `${KB}/Legal` });
300
+ expect(second.matches).toEqual(first.matches);
301
+ expect(p.extractions()).toBe(extracted);
302
+ });
303
+
304
+ it('grep spends no extraction budget on a remembered failure', async () => {
305
+ const p = await startPlatform();
306
+ // 21 different damaged documents — one more than a grep's budget of 20 cold extractions.
307
+ for (let i = 0; i < 21; i++) await p.write(`${KB}/Many/damaged-${String(i).padStart(2, '0')}.pdf`, xrefPdf(`copy ${i}`, { damage: true }));
308
+ const first = await tool(p.baseUrl, 'grep', { branch: BRANCH, pattern: 'copy', path: `${KB}/Many` });
309
+ expect(first.note).toMatch(/^1 document\(s\) .* were not searched/);
310
+ // The twenty it remembers cost nothing now, so the twenty-first fits.
311
+ const second = await tool(p.baseUrl, 'grep', { branch: BRANCH, pattern: 'copy', path: `${KB}/Many` });
312
+ expect(second.note).toBeUndefined();
313
+ expect(p.extractions()).toBe(21);
314
+ const third = await tool(p.baseUrl, 'grep', { branch: BRANCH, pattern: 'copy', path: `${KB}/Many` });
315
+ expect(third.note).toBeUndefined();
316
+ expect(p.extractions()).toBe(21);
317
+ });
318
+
319
+ it('a repaired version, saved over it, is extracted and reads normally', async () => {
320
+ const p = await startPlatform();
321
+ await tool(p.baseUrl, 'read_file', { branch: BRANCH, path: DAMAGED });
322
+ await p.write(DAMAGED, xrefPdf('Hello repaired', { damage: false }));
323
+ const repaired = await tool(p.baseUrl, 'read_file', { branch: BRANCH, path: DAMAGED });
324
+ expect(repaired.content).toBe(`[extracted text of ${DAMAGED} — 1 page; layout, images and formatting omitted]\n[page 1]\nHello repaired`);
325
+ });
326
+ });
327
+
328
+ describe('an extraction that runs long', () => {
329
+ const trouble = (budgetMs?: number): WorkerDocumentExtractorOptions => ({
330
+ entry: {
331
+ url: new URL('../../modules/workspace/file-readers/__tests__/fixtures/pdf-in-trouble.worker.ts', import.meta.url),
332
+ execArgv: ['--import', 'tsx'],
333
+ },
334
+ ...(budgetMs === undefined ? {} : { budgetMs }),
335
+ });
336
+
337
+ it('is stopped at the budget and answered with the timeout notice; within the hour the notice comes at once', async () => {
338
+ const p = await startPlatform(trouble(500));
339
+ await p.write(`${KB}/Legal/stuck.pdf`, xrefPdf('HANG', { damage: false }));
340
+ const first = await tool(p.baseUrl, 'read_file', { branch: BRANCH, path: `${KB}/Legal/stuck.pdf` });
341
+ expect(first.content).toContain('could not be read: extracting its text took longer than 0.5 seconds');
342
+ const started = Date.now();
343
+ const again = await tool(p.baseUrl, 'read_file', { branch: BRANCH, path: `${KB}/Legal/stuck.pdf` });
344
+ expect(again.content).toBe(first.content);
345
+ expect(Date.now() - started).toBeLessThan(400);
346
+ expect(p.extractions()).toBe(1);
347
+ const grep = await tool(p.baseUrl, 'grep', { branch: BRANCH, pattern: 'HANG', path: `${KB}/Legal/stuck.pdf` });
348
+ expect(grep.matches).toEqual([]);
349
+ expect(p.extractions()).toBe(1);
350
+ expect(p.told).toEqual([
351
+ { workspaceId: 'main', path: `${KB}/Legal/stuck.pdf`, reason: 'extracting its text took longer than 0.5 seconds' },
352
+ ]);
353
+ });
354
+
355
+ it('leaves /api/health answering under a second, on every surface that extracts', async () => {
356
+ const p = await startPlatform(trouble());
357
+ for (const name of ['a', 'b', 'c', 'd']) await p.write(`${KB}/Slow/${name}.pdf`, xrefPdf(`SLOW ${name}`, { damage: false }));
358
+ const surfaces: Array<[string, () => Promise<unknown>]> = [
359
+ ['read_file', () => tool(p.baseUrl, 'read_file', { branch: BRANCH, path: `${KB}/Slow/a.pdf` })],
360
+ ['grep', () => tool(p.baseUrl, 'grep', { branch: BRANCH, pattern: 'SLOW', path: `${KB}/Slow/b.pdf` })],
361
+ ['file_stat', () => tool(p.baseUrl, 'file_stat', { branch: BRANCH, path: `${KB}/Slow/c.pdf` })],
362
+ [
363
+ 'call_tool_chain',
364
+ () => chain(p.baseUrl, `return KNOWLEDGE_BASE.read_file({ body: { branch: "main", path: "${KB}/Slow/d.pdf" } });`),
365
+ ],
366
+ ];
367
+ for (const [surface, work] of surfaces) {
368
+ const { slowest } = await timingHealth(p.baseUrl, work);
369
+ expect(slowest, surface).toBeLessThan(1_000);
370
+ }
371
+ // Three of the four extracted (file_stat never does), each spinning 1.5 s in its worker.
372
+ expect(p.extractions()).toBe(3);
373
+ });
374
+ });
@@ -24,6 +24,11 @@ describe('GET /api/config payload', () => {
24
24
  expect(body.catalogRevision).toBe(true);
25
25
  });
26
26
 
27
+ /** The local bridge reads the read-only hints on every listing, on the same terms. */
28
+ it('advertises the tool-hints capability, on the same terms', () => {
29
+ expect(body.toolHints).toBe(true);
30
+ });
31
+
27
32
  it('carries the branch model and the two addresses it was handed', () => {
28
33
  expect(body.branchModel.defaultBranch).toBe(DEFAULT_BRANCH);
29
34
  expect(body.branchModel.protectedBranches).toContain(DEFAULT_BRANCH);
@@ -13,13 +13,18 @@ import { createGitInternalsRouteGuard } from '../modules/workspace/git-internals
13
13
  import { startCore } from './lifecycle.js';
14
14
  import { createDiffRoutes } from '../modules/diff/diff.routes.js';
15
15
  import { createWorkflowRoutes } from '../modules/workflow/workflow.routes.js';
16
- import { createEventsRoutes } from '../modules/workflow/events.routes.js';
16
+ import { createEventAccess, createEventsRoutes, EventDelivery } from '../modules/workflow/index.js';
17
17
  import { createAccessRoutes } from '../modules/access/access.routes.js';
18
18
  import { createAccessRequestRoutes } from '../modules/access/access-requests.routes.js';
19
+ import { AccessRequestsService } from '../modules/access/access-requests.service.js';
19
20
  import { createMcpRoutes } from '../modules/mcp/mcp.routes.js';
20
21
  import { createOAuthConsentRoutes } from '../modules/mcp/oauth/oauth-consent.routes.js';
21
22
  import { mcpAuthRouter } from '@modelcontextprotocol/sdk/server/auth/router.js';
22
23
  import { createManualRoutes } from '../modules/tool-registry/manual.routes.js';
24
+ import {
25
+ createToolHintsAgentRoutes,
26
+ createToolHintsRoutes,
27
+ } from '../modules/tool-registry/read-only-hints.js';
23
28
  import { createCatalogRevisionRoutes } from './catalog-revision.js';
24
29
  import {
25
30
  createToolManualsAgentRoutes,
@@ -539,11 +544,16 @@ export async function createCoreServer(
539
544
  agentAccessGate,
540
545
  core,
541
546
  });
547
+ // What MCP clients are told about each platform tool's effect: read by the
548
+ // agent manual (the hosted endpoint) and by `/agent/tool-hints` (hexis-mcp).
549
+ const { readOnlyHints } = core;
542
550
  toolsRouter.use(createManualRoutes(
543
551
  core.toolRegistry,
544
552
  core.manualAuthMiddleware,
545
553
  async (userId) => (await core.authService.getUserById(userId))?.email,
554
+ readOnlyHints,
546
555
  ));
556
+ toolsRouter.use(createToolHintsAgentRoutes(readOnlyHints, core.manualAuthMiddleware));
547
557
  // The aggregated manual list (KB + the caller's accessible `.tool`s) + inline
548
558
  // `.tool` sub-manuals. Mounted on the tools router so they share `manualAuth`
549
559
  // and sit before the JWT `/api` mounts.
@@ -666,7 +676,19 @@ export async function createCoreServer(
666
676
  // cookie — the cookie path is what makes EventSource work, since the
667
677
  // browser API can't set headers). Mounted as its own app.use so it
668
678
  // doesn't share an outer middleware chain with the JSON routes above.
669
- app.use('/api', createEventsRoutes(core.eventBus, core.authMiddleware));
679
+ // Every event passes the delivery rule on its way to a session: the file
680
+ // routes' read verdict, read in the server's own checkouts — for an
681
+ // approval, the target branch's; a target with no checkout at its ref.
682
+ const eventDelivery = new EventDelivery(createEventAccess({
683
+ accessControl: core.accessControl,
684
+ kbDirName: core.kbDirName,
685
+ getChangeRequest: (number) => core.workflowService.getChangeRequest(number),
686
+ workspaces: {
687
+ hasWorkspace: (workspaceId) => core.workspaceService.hasBootstrappedWorkspace(workspaceId),
688
+ anyWorkspaceId: async () => (await core.workspaceService.findAnyWorkspaceId()) ?? core.kb.defaultWorkspaceId(),
689
+ },
690
+ }));
691
+ app.use('/api', createEventsRoutes(core.eventBus, core.authMiddleware, eventDelivery));
670
692
  app.use('/api', core.authMiddleware, createDiffRoutes(
671
693
  core.diffService,
672
694
  core.authService,
@@ -711,7 +733,12 @@ export async function createCoreServer(
711
733
  skillService: core.skillService,
712
734
  accessControl: core.accessControl,
713
735
  workflow: core.workflowService,
714
- workspaceService: core.workspaceService,
736
+ requests: new AccessRequestsService({
737
+ workflow: core.workflowService,
738
+ workspaceService: core.workspaceService,
739
+ lifecycle: core.joinRequestsService,
740
+ kb: core.kb,
741
+ }),
715
742
  joinRequests: core.joinRequestsService,
716
743
  kb: core.kb,
717
744
  resolveUser: async (req) =>
@@ -747,6 +774,8 @@ export async function createCoreServer(
747
774
  // Admin-status resolver (CORE — see the note in admin-access.routes.ts;
748
775
  // the full admin router is an enterprise `ext.authed` extension).
749
776
  app.use('/api', core.authMiddleware, createAdminAccessRoutes(core.adminAccess));
777
+ // The Tools page's read-only toggles: anyone signed in reads, admins write.
778
+ app.use('/api', core.authMiddleware, createToolHintsRoutes(readOnlyHints, core.adminAccess));
750
779
  // Groups admin (manual-mode CRUD; typed refusals in IdP mode) —
751
780
  // admin-gated inside.
752
781
  app.use('/api', core.authMiddleware, createGroupsAdminRoutes({
@@ -34,6 +34,8 @@ import { TemplateFilesStep } from '../modules/workspace/startup/steps/template-f
34
34
  import { RolesYamlStep } from '../modules/workspace/startup/steps/roles-yaml.step.js';
35
35
  import { buildSeedTree } from '../modules/workspace/startup/steps/seed-tree.js';
36
36
  import { DeploymentSettingsService, retireMergedBranchesOn } from '../modules/settings/deployment-settings.service.js';
37
+ import { ToolReadOnlyHints } from '../modules/tool-registry/read-only-hints.js';
38
+ import type { IToolReadOnlyHints } from '../modules/tool-registry/read-only-hints.contract.js';
37
39
  import { KbSyncService } from '../modules/kb-sync/kb-sync.service.js';
38
40
  import { NodeFs } from '../modules/kb-fs/node-fs.js';
39
41
  import { assertKbDirNameFree } from '../modules/kb-fs/repo-path.js';
@@ -67,7 +69,11 @@ import { createDownloadFetcherIdentifier } from '../modules/workspace/agent-down
67
69
  import { WorkerPatternMatcher } from '../modules/workspace/bounded-matcher.js';
68
70
  import type { IPatternMatcher } from '../modules/workspace/pattern-matcher.contract.js';
69
71
  import type { Request } from 'express';
70
- import { DocExtractService } from '../modules/workspace/file-readers/doc-extract.service.js';
72
+ import {
73
+ DocExtractService,
74
+ WorkerDocumentExtractor,
75
+ type IDocumentExtractor,
76
+ } from '../modules/workspace/index.js';
71
77
  import { UuidSessionSink, type ISessionSink } from '../modules/workspace/session-sink.js';
72
78
  import { AuthService } from '../modules/auth/auth.service.js';
73
79
  import { AccountHooks, type IAccountHooks } from '../modules/auth/account-hooks.js';
@@ -75,6 +81,7 @@ import { AccountErasureService } from '../modules/auth/account-erasure.service.j
75
81
  import { OidcAuthProvider, oidcSettingsFrom } from '../modules/auth/oidc-auth-provider.js';
76
82
  import { createAuthMiddleware, readAuthCookie } from '../modules/auth/auth.middleware.js';
77
83
  import { AccessControlService, loadActiveGroups } from '../modules/access/access-control.service.js';
84
+ import { AccessMutationService } from '../modules/access/access-mutation.service.js';
78
85
  import { CreatorAccessService } from '../modules/access/creator-access.js';
79
86
  import { ChangeReadGate } from '../modules/access/change-read-gate.js';
80
87
  import { GroupsAdminService } from '../modules/access/groups-admin.service.js';
@@ -122,7 +129,7 @@ import { assertGitVersion } from '../modules/workflow/git/git-version.js';
122
129
  import { DiffService } from '../modules/diff/diff.service.js';
123
130
  import { ReviewWorkflowService } from '../modules/workflow/review-workflow/review-workflow.service.js';
124
131
  import { FileLockService } from '../modules/workflow/file-lock.service.js';
125
- import { WorkflowEventBus } from '../modules/workflow/event-bus.js';
132
+ import { WorkflowEventBus } from '../modules/workflow/index.js';
126
133
  import { FileChangeNotifier } from '../modules/kb-fs/file-change-notifier.js';
127
134
  import { StarterPackService } from '../modules/onboarding/starter-pack.service.js';
128
135
  import { WorkflowService } from '../modules/workflow/workflow.service.js';
@@ -256,6 +263,8 @@ export interface CoreServices {
256
263
  * download route can refuse a link presented by someone it was not issued to.
257
264
  */
258
265
  agentDownloadFetcher: (req: Request) => Promise<string[]>;
266
+ /** Runs every document extraction off the request thread under a budget; its workers end when the graph stops. */
267
+ documentExtractor: IDocumentExtractor;
259
268
  docExtractService: DocExtractService;
260
269
  accessControl: AccessControlService;
261
270
  creatorAccess: CreatorAccessService;
@@ -399,6 +408,8 @@ export interface CoreServices {
399
408
  /** The Audit log: what every connected agent and key called, and the revoke of an agent's grant. */
400
409
  agentAuditService: AgentAuditService;
401
410
  toolRegistry: ToolRegistry;
411
+ /** Each platform tool's and meta-tool's read-only hint, and an admin's overrides of them. */
412
+ readOnlyHints: IToolReadOnlyHints;
402
413
  toolAuthMiddleware: ReturnType<typeof createToolAuthMiddleware>;
403
414
  manualAuthMiddleware: ReturnType<typeof createManualAuthMiddleware>;
404
415
  toolHandlerFactory: ReturnType<typeof createToolHandlerFactory>;
@@ -791,9 +802,9 @@ export async function createCoreServices(
791
802
  // `<tenant>-down_`: recognisable by shape beside the upload token.
792
803
  tokenPrefix: config.uploadTokenPrefix.replace(/up_$/, 'down_'),
793
804
  });
794
- // Office-document/PDF text extraction for `read_file`/`grep`, cached by
795
- // content hash beside the workspaces root (see `DocExtractionCache`).
796
- const docExtractService = new DocExtractService(config.docExtractCacheRoot);
805
+ // The worker threads every office/PDF/email extraction runs in, under a
806
+ // 10 s budget per file (see `WorkerDocumentExtractor`).
807
+ const documentExtractor = new WorkerDocumentExtractor();
797
808
  // The deployment owner counts as Admin for the two hardcoded `write`
798
809
  // rescues (`roles.yaml` and any `access.md`) — the SAME list
799
810
  // `AdminAccessService` below is given, so the admin surfaces and the write
@@ -952,6 +963,14 @@ export async function createCoreServices(
952
963
  // browser sessions. Single instance per Node process — survives across
953
964
  // requests, doesn't survive restarts (clients reconnect + resync).
954
965
  const eventBus = new WorkflowEventBus();
966
+ // Office-document/PDF/email text extraction for `read_file`/`grep`, cached
967
+ // by content hash beside the workspaces root (see `DocExtractionCache`),
968
+ // failures included. A fresh failure is told to the people looking at the
969
+ // file: the events route delivers it only to sessions that may read it.
970
+ const docExtractService = new DocExtractService(config.docExtractCacheRoot, documentExtractor, {
971
+ onUnreadable: ({ workspaceId, path, reason }) =>
972
+ eventBus.emit({ kind: 'document-unreadable', workspaceId, path, reason }),
973
+ });
955
974
  // In-process post-commit hook (distinct from the SSE bus): fires once per
956
975
  // committed change (batched paths) so catalogs refresh instantly and the
957
976
  // id-repair keeps the id namespace collision-free. Subscribers are registered
@@ -1038,6 +1057,7 @@ export async function createCoreServices(
1038
1057
  workspaceService,
1039
1058
  workflowService,
1040
1059
  accessControl,
1060
+ new AccessMutationService(workspaceService, accessControl, kb.kbDirName),
1041
1061
  skillService,
1042
1062
  pluginLinkIndex,
1043
1063
  kb,
@@ -1386,6 +1406,8 @@ export async function createCoreServices(
1386
1406
  // the setup save applies lands without a restart.
1387
1407
  kbLayout: () => kb.layout,
1388
1408
  secretsScope,
1409
+ // Read at listing time, by when the hints below exist.
1410
+ readOnlyOverrides: () => readOnlyHints.overrides(),
1389
1411
  },
1390
1412
  // Pre-dispatch per-user credential check: the vault answers "has this caller
1391
1413
  // set it?" and the manual catalog answers "which user-scoped vars does this
@@ -1454,6 +1476,9 @@ export async function createCoreServices(
1454
1476
  // `internalTokenService` minted above (shared with the agent factories) is
1455
1477
  // the same one the tool-auth middleware verifies internal tokens against.
1456
1478
  const toolRegistry = new ToolRegistry();
1479
+ // What MCP clients are told about each platform tool's effect: its write
1480
+ // declaration, or an admin's override from the Tools page.
1481
+ const readOnlyHints = new ToolReadOnlyHints(toolRegistry, settings);
1457
1482
  const resolveToolContext = createToolContextResolver({
1458
1483
  authService,
1459
1484
  workspaceService,
@@ -1650,6 +1675,7 @@ export async function createCoreServices(
1650
1675
  agentDownloadStore,
1651
1676
  patternMatcher,
1652
1677
  agentDownloadFetcher,
1678
+ documentExtractor,
1653
1679
  docExtractService,
1654
1680
  accessControl,
1655
1681
  creatorAccess,
@@ -1708,6 +1734,7 @@ export async function createCoreServices(
1708
1734
  mcpResourceMetadataUrl,
1709
1735
  agentAuditService,
1710
1736
  toolRegistry,
1737
+ readOnlyHints,
1711
1738
  toolAuthMiddleware,
1712
1739
  manualAuthMiddleware,
1713
1740
  toolHandlerFactory,
@@ -454,6 +454,12 @@ export interface CoreStopDeps {
454
454
  * caller that has not built one passes nothing.
455
455
  */
456
456
  patternMatcher?: { close(): Promise<void> };
457
+ /**
458
+ * The document extractor, whose worker threads are this graph's own for the
459
+ * same reason: ended here, so no extraction worker outlives its graph.
460
+ * Optional like the matcher.
461
+ */
462
+ documentExtractor?: { close(): Promise<void> };
457
463
  /**
458
464
  * The workflow service, for the tidy-up it runs after each sweep (closing
459
465
  * empty requests, removing leftover branches): detached from whatever
@@ -591,6 +597,10 @@ async function releaseCore(deps: CoreStopDeps, remaining: () => number, log: (m:
591
597
  if (deps.patternMatcher) {
592
598
  await bounded(deps.patternMatcher.close(), remaining(), 'ending the search workers', log);
593
599
  }
600
+ // Likewise: an extraction still running is answered busy, and nothing about its file is remembered.
601
+ if (deps.documentExtractor) {
602
+ await bounded(deps.documentExtractor.close(), remaining(), 'ending the extraction workers', log);
603
+ }
594
604
  await bounded(deps.commitWorker.stop(), remaining(), 'stopping the commit worker', log);
595
605
  if (deps.secretsScope !== undefined) unregisterBevelSecretsVariableLoader(deps.secretsScope);
596
606
  await bounded(closeDb(deps.db), remaining(), 'ending the database pool', log);