@bevel-software/platform-core-backend 0.11.1 → 0.12.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 (443) hide show
  1. package/THIRD-PARTY-NOTICES.md +1163 -425
  2. package/dist/core/create-core-server.js +1 -1
  3. package/dist/core/create-core-server.js.map +1 -1
  4. package/dist/core/create-core-services.d.ts +3 -1
  5. package/dist/core/create-core-services.d.ts.map +1 -1
  6. package/dist/core/create-core-services.js +7 -2
  7. package/dist/core/create-core-services.js.map +1 -1
  8. package/dist/core-config.d.ts +7 -0
  9. package/dist/core-config.d.ts.map +1 -1
  10. package/dist/core-config.js +9 -0
  11. package/dist/core-config.js.map +1 -1
  12. package/dist/modules/access/access-control.service.d.ts +1 -253
  13. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  14. package/dist/modules/access/access-control.service.js +3 -632
  15. package/dist/modules/access/access-control.service.js.map +1 -1
  16. package/dist/modules/access/access-declarations.d.ts +2 -2
  17. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  18. package/dist/modules/access/access-declarations.js +2 -2
  19. package/dist/modules/access/access-declarations.js.map +1 -1
  20. package/dist/modules/access/access-mutation.service.d.ts +3 -3
  21. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  22. package/dist/modules/access/access-mutation.service.js +3 -3
  23. package/dist/modules/access/access-mutation.service.js.map +1 -1
  24. package/dist/modules/access/access.routes.js +4 -4
  25. package/dist/modules/access/access.routes.js.map +1 -1
  26. package/dist/modules/access/admin-locked-commit.d.ts +2 -2
  27. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  28. package/dist/modules/access/admin-locked-commit.js +2 -2
  29. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  30. package/dist/modules/access/admin-route-helpers.js +1 -1
  31. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  32. package/dist/modules/access/capability-registry.js +1 -1
  33. package/dist/modules/access/capability-registry.js.map +1 -1
  34. package/dist/modules/access/creator-access.d.ts +1 -45
  35. package/dist/modules/access/creator-access.d.ts.map +1 -1
  36. package/dist/modules/access/creator-access.js +4 -24
  37. package/dist/modules/access/creator-access.js.map +1 -1
  38. package/dist/modules/access/groups-admin.routes.js +1 -1
  39. package/dist/modules/access/groups-admin.routes.js.map +1 -1
  40. package/dist/modules/access/groups-admin.service.d.ts +1 -1
  41. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  42. package/dist/modules/access/groups-admin.service.js +6 -5
  43. package/dist/modules/access/groups-admin.service.js.map +1 -1
  44. package/dist/modules/access/groups-edit.js +2 -2
  45. package/dist/modules/access/groups-edit.js.map +1 -1
  46. package/dist/modules/access/reference-scan.js +1 -1
  47. package/dist/modules/access/reference-scan.js.map +1 -1
  48. package/dist/modules/access/roles-admin.service.d.ts +1 -1
  49. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  50. package/dist/modules/access/roles-admin.service.js +8 -7
  51. package/dist/modules/access/roles-admin.service.js.map +1 -1
  52. package/dist/modules/access/roles-edit.js +1 -1
  53. package/dist/modules/access/roles-edit.js.map +1 -1
  54. package/dist/modules/access/synced-groups-committer.js +4 -4
  55. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  56. package/dist/modules/access/synced-groups-writer.js +2 -2
  57. package/dist/modules/access/synced-groups-writer.js.map +1 -1
  58. package/dist/modules/access-model/access-errors.d.ts +34 -0
  59. package/dist/modules/access-model/access-errors.d.ts.map +1 -0
  60. package/dist/modules/access-model/access-errors.js +40 -0
  61. package/dist/modules/access-model/access-errors.js.map +1 -0
  62. package/dist/modules/access-model/access-grammar.d.ts +266 -0
  63. package/dist/modules/access-model/access-grammar.d.ts.map +1 -0
  64. package/dist/modules/access-model/access-grammar.js +644 -0
  65. package/dist/modules/access-model/access-grammar.js.map +1 -0
  66. package/dist/modules/access-model/access-splice.d.ts +140 -0
  67. package/dist/modules/access-model/access-splice.d.ts.map +1 -0
  68. package/dist/modules/access-model/access-splice.js +389 -0
  69. package/dist/modules/access-model/access-splice.js.map +1 -0
  70. package/dist/modules/access-model/creator.d.ts +54 -0
  71. package/dist/modules/access-model/creator.d.ts.map +1 -0
  72. package/dist/modules/access-model/creator.js +30 -0
  73. package/dist/modules/access-model/creator.js.map +1 -0
  74. package/dist/modules/access-model/group-files.d.ts +83 -0
  75. package/dist/modules/access-model/group-files.d.ts.map +1 -0
  76. package/dist/modules/access-model/group-files.js +167 -0
  77. package/dist/modules/access-model/group-files.js.map +1 -0
  78. package/dist/modules/access-model/kb-read-filter.d.ts +41 -0
  79. package/dist/modules/access-model/kb-read-filter.d.ts.map +1 -0
  80. package/dist/modules/access-model/kb-read-filter.js +60 -0
  81. package/dist/modules/access-model/kb-read-filter.js.map +1 -0
  82. package/dist/modules/access-model/render-roles-yaml.d.ts +22 -0
  83. package/dist/modules/access-model/render-roles-yaml.d.ts.map +1 -0
  84. package/dist/modules/access-model/render-roles-yaml.js +56 -0
  85. package/dist/modules/access-model/render-roles-yaml.js.map +1 -0
  86. package/dist/modules/access-model/roles-yaml-guard.d.ts +56 -0
  87. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -0
  88. package/dist/modules/access-model/roles-yaml-guard.js +79 -0
  89. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -0
  90. package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
  91. package/dist/modules/admin/admin-access.service.js +1 -1
  92. package/dist/modules/admin/admin-access.service.js.map +1 -1
  93. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
  94. package/dist/modules/code-mode/code-mode.tool.js +7 -1
  95. package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
  96. package/dist/modules/diff/diff.routes.js +4 -4
  97. package/dist/modules/diff/diff.routes.js.map +1 -1
  98. package/dist/modules/diff/diff.service.d.ts +1 -1
  99. package/dist/modules/diff/diff.service.d.ts.map +1 -1
  100. package/dist/modules/kb-fs/branch-name.d.ts +10 -0
  101. package/dist/modules/kb-fs/branch-name.d.ts.map +1 -0
  102. package/dist/modules/kb-fs/branch-name.js +76 -0
  103. package/dist/modules/kb-fs/branch-name.js.map +1 -0
  104. package/dist/modules/kb-fs/clone-config.d.ts +61 -0
  105. package/dist/modules/kb-fs/clone-config.d.ts.map +1 -0
  106. package/dist/modules/kb-fs/clone-config.js +69 -0
  107. package/dist/modules/kb-fs/clone-config.js.map +1 -0
  108. package/dist/modules/kb-fs/file-change-notifier.d.ts +38 -0
  109. package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -0
  110. package/dist/modules/kb-fs/file-change-notifier.js +22 -0
  111. package/dist/modules/kb-fs/file-change-notifier.js.map +1 -0
  112. package/dist/modules/kb-fs/locking-filesystem.d.ts +137 -0
  113. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -0
  114. package/dist/modules/kb-fs/locking-filesystem.js +553 -0
  115. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -0
  116. package/dist/modules/kb-fs/mutex.d.ts +11 -0
  117. package/dist/modules/kb-fs/mutex.d.ts.map +1 -0
  118. package/dist/modules/kb-fs/mutex.js +23 -0
  119. package/dist/modules/kb-fs/mutex.js.map +1 -0
  120. package/dist/modules/kb-fs/read-only-filesystem.d.ts +24 -0
  121. package/dist/modules/kb-fs/read-only-filesystem.d.ts.map +1 -0
  122. package/dist/modules/kb-fs/read-only-filesystem.js +39 -0
  123. package/dist/modules/kb-fs/read-only-filesystem.js.map +1 -0
  124. package/dist/modules/plugins/join-proposals.d.ts +1 -1
  125. package/dist/modules/plugins/join-proposals.d.ts.map +1 -1
  126. package/dist/modules/plugins/join-proposals.js +1 -1
  127. package/dist/modules/plugins/join-proposals.js.map +1 -1
  128. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  129. package/dist/modules/plugins/join-requests.service.js +1 -1
  130. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  131. package/dist/modules/plugins/plugin-provision.service.js +3 -3
  132. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  133. package/dist/modules/plugins/plugins.routes.js +2 -2
  134. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  135. package/dist/modules/plugins/plugins.service.js +1 -1
  136. package/dist/modules/plugins/plugins.service.js.map +1 -1
  137. package/dist/modules/secrets-vault/secrets-vault.routes.js +1 -1
  138. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  139. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  140. package/dist/modules/skills/pending-skills.service.js +1 -1
  141. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  142. package/dist/modules/skills/skills.service.js +1 -1
  143. package/dist/modules/skills/skills.service.js.map +1 -1
  144. package/dist/modules/tool-helpers/tool-context.d.ts +2 -2
  145. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  146. package/dist/modules/tool-helpers/tool-context.js +4 -4
  147. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  148. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +1 -1
  149. package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
  150. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  151. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  152. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +1 -1
  153. package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
  154. package/dist/modules/tool-manuals/tool-manuals.routes.js +1 -1
  155. package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
  156. package/dist/modules/tool-manuals/tool-manuals.service.js +1 -1
  157. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  158. package/dist/modules/tool-manuals/tool-manuals.tools.js +1 -1
  159. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  160. package/dist/modules/workflow/agent-tools/workflow.tools.js +1 -1
  161. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
  162. package/dist/modules/workflow/file-lock.service.js +1 -1
  163. package/dist/modules/workflow/file-lock.service.js.map +1 -1
  164. package/dist/modules/workflow/git/git.service.d.ts +2 -2
  165. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  166. package/dist/modules/workflow/git/git.service.js +5 -5
  167. package/dist/modules/workflow/git/git.service.js.map +1 -1
  168. package/dist/modules/workflow/git/pull-request.service.js +1 -1
  169. package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
  170. package/dist/modules/workflow/review-workflow/review-workflow.service.js +2 -2
  171. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
  172. package/dist/modules/workflow/session-ontology.service.js +1 -1
  173. package/dist/modules/workflow/session-ontology.service.js.map +1 -1
  174. package/dist/modules/workflow/workflow.routes.js +2 -2
  175. package/dist/modules/workflow/workflow.routes.js.map +1 -1
  176. package/dist/modules/workflow/workflow.service.d.ts +1 -1
  177. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  178. package/dist/modules/workflow/workflow.service.js +4 -4
  179. package/dist/modules/workflow/workflow.service.js.map +1 -1
  180. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +71 -0
  181. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -0
  182. package/dist/modules/workspace/file-readers/doc-extract.service.js +90 -0
  183. package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -0
  184. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +55 -0
  185. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -0
  186. package/dist/modules/workspace/file-readers/doc-extract.types.js +34 -0
  187. package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -0
  188. package/dist/modules/workspace/file-readers/document-reader.d.ts +32 -0
  189. package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -0
  190. package/dist/modules/workspace/file-readers/document-reader.js +59 -0
  191. package/dist/modules/workspace/file-readers/document-reader.js.map +1 -0
  192. package/dist/modules/workspace/file-readers/email-reader.d.ts +15 -0
  193. package/dist/modules/workspace/file-readers/email-reader.d.ts.map +1 -0
  194. package/dist/modules/workspace/file-readers/email-reader.js +19 -0
  195. package/dist/modules/workspace/file-readers/email-reader.js.map +1 -0
  196. package/dist/modules/workspace/file-readers/email-text.d.ts +51 -0
  197. package/dist/modules/workspace/file-readers/email-text.d.ts.map +1 -0
  198. package/dist/modules/workspace/file-readers/email-text.js +151 -0
  199. package/dist/modules/workspace/file-readers/email-text.js.map +1 -0
  200. package/dist/modules/workspace/file-readers/extract-docx.d.ts +13 -0
  201. package/dist/modules/workspace/file-readers/extract-docx.d.ts.map +1 -0
  202. package/dist/modules/workspace/file-readers/extract-docx.js +67 -0
  203. package/dist/modules/workspace/file-readers/extract-docx.js.map +1 -0
  204. package/dist/modules/workspace/file-readers/extract-eml.d.ts +18 -0
  205. package/dist/modules/workspace/file-readers/extract-eml.d.ts.map +1 -0
  206. package/dist/modules/workspace/file-readers/extract-eml.js +87 -0
  207. package/dist/modules/workspace/file-readers/extract-eml.js.map +1 -0
  208. package/dist/modules/workspace/file-readers/extract-msg.d.ts +17 -0
  209. package/dist/modules/workspace/file-readers/extract-msg.d.ts.map +1 -0
  210. package/dist/modules/workspace/file-readers/extract-msg.js +121 -0
  211. package/dist/modules/workspace/file-readers/extract-msg.js.map +1 -0
  212. package/dist/modules/workspace/file-readers/extract-odp.d.ts +13 -0
  213. package/dist/modules/workspace/file-readers/extract-odp.d.ts.map +1 -0
  214. package/dist/modules/workspace/file-readers/extract-odp.js +60 -0
  215. package/dist/modules/workspace/file-readers/extract-odp.js.map +1 -0
  216. package/dist/modules/workspace/file-readers/extract-ods.d.ts +10 -0
  217. package/dist/modules/workspace/file-readers/extract-ods.d.ts.map +1 -0
  218. package/dist/modules/workspace/file-readers/extract-ods.js +173 -0
  219. package/dist/modules/workspace/file-readers/extract-ods.js.map +1 -0
  220. package/dist/modules/workspace/file-readers/extract-odt.d.ts +17 -0
  221. package/dist/modules/workspace/file-readers/extract-odt.d.ts.map +1 -0
  222. package/dist/modules/workspace/file-readers/extract-odt.js +45 -0
  223. package/dist/modules/workspace/file-readers/extract-odt.js.map +1 -0
  224. package/dist/modules/workspace/file-readers/extract-pdf.d.ts +3 -0
  225. package/dist/modules/workspace/file-readers/extract-pdf.d.ts.map +1 -0
  226. package/dist/modules/workspace/file-readers/extract-pdf.js +176 -0
  227. package/dist/modules/workspace/file-readers/extract-pdf.js.map +1 -0
  228. package/dist/modules/workspace/file-readers/extract-pptx.d.ts +37 -0
  229. package/dist/modules/workspace/file-readers/extract-pptx.d.ts.map +1 -0
  230. package/dist/modules/workspace/file-readers/extract-pptx.js +288 -0
  231. package/dist/modules/workspace/file-readers/extract-pptx.js.map +1 -0
  232. package/dist/modules/workspace/file-readers/extract-xlsx.d.ts +10 -0
  233. package/dist/modules/workspace/file-readers/extract-xlsx.d.ts.map +1 -0
  234. package/dist/modules/workspace/file-readers/extract-xlsx.js +98 -0
  235. package/dist/modules/workspace/file-readers/extract-xlsx.js.map +1 -0
  236. package/dist/modules/workspace/file-readers/extraction-cache.d.ts +61 -0
  237. package/dist/modules/workspace/file-readers/extraction-cache.d.ts.map +1 -0
  238. package/dist/modules/workspace/file-readers/extraction-cache.js +135 -0
  239. package/dist/modules/workspace/file-readers/extraction-cache.js.map +1 -0
  240. package/dist/modules/workspace/file-readers/file-reader.d.ts +76 -0
  241. package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -0
  242. package/dist/modules/workspace/file-readers/file-reader.js +55 -0
  243. package/dist/modules/workspace/file-readers/file-reader.js.map +1 -0
  244. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts +13 -0
  245. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -0
  246. package/dist/modules/workspace/file-readers/file-reader.registry.js +41 -0
  247. package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -0
  248. package/dist/modules/workspace/file-readers/image-read.d.ts +35 -0
  249. package/dist/modules/workspace/file-readers/image-read.d.ts.map +1 -0
  250. package/dist/modules/workspace/file-readers/image-read.js +108 -0
  251. package/dist/modules/workspace/file-readers/image-read.js.map +1 -0
  252. package/dist/modules/workspace/file-readers/image-reader.d.ts +19 -0
  253. package/dist/modules/workspace/file-readers/image-reader.d.ts.map +1 -0
  254. package/dist/modules/workspace/file-readers/image-reader.js +30 -0
  255. package/dist/modules/workspace/file-readers/image-reader.js.map +1 -0
  256. package/dist/modules/workspace/file-readers/odf-text.d.ts +26 -0
  257. package/dist/modules/workspace/file-readers/odf-text.d.ts.map +1 -0
  258. package/dist/modules/workspace/file-readers/odf-text.js +116 -0
  259. package/dist/modules/workspace/file-readers/odf-text.js.map +1 -0
  260. package/dist/modules/workspace/file-readers/ooxml-text.d.ts +172 -0
  261. package/dist/modules/workspace/file-readers/ooxml-text.d.ts.map +1 -0
  262. package/dist/modules/workspace/file-readers/ooxml-text.js +439 -0
  263. package/dist/modules/workspace/file-readers/ooxml-text.js.map +1 -0
  264. package/dist/modules/workspace/file-readers/text-reader.d.ts +47 -0
  265. package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -0
  266. package/dist/modules/workspace/file-readers/text-reader.js +117 -0
  267. package/dist/modules/workspace/file-readers/text-reader.js.map +1 -0
  268. package/dist/modules/workspace/startup/kb-startup-runner.js +1 -1
  269. package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
  270. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +1 -1
  271. package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
  272. package/dist/modules/workspace/startup/steps/roles-yaml.step.d.ts +1 -1
  273. package/dist/modules/workspace/startup/steps/roles-yaml.step.js +2 -2
  274. package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
  275. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  276. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  277. package/dist/modules/workspace/workspace.routes.d.ts +1 -1
  278. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  279. package/dist/modules/workspace/workspace.routes.js +5 -4
  280. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  281. package/dist/modules/workspace/workspace.service.d.ts +2 -9
  282. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  283. package/dist/modules/workspace/workspace.service.js +14 -15
  284. package/dist/modules/workspace/workspace.service.js.map +1 -1
  285. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  286. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  287. package/dist/modules/workspace/workspace.tools.js +161 -18
  288. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  289. package/dist/shared/domain-errors.d.ts +202 -0
  290. package/dist/shared/domain-errors.d.ts.map +1 -0
  291. package/dist/shared/domain-errors.js +303 -0
  292. package/dist/shared/domain-errors.js.map +1 -0
  293. package/dist/shared/workspace-id.d.ts +27 -0
  294. package/dist/shared/workspace-id.d.ts.map +1 -0
  295. package/dist/shared/workspace-id.js +36 -0
  296. package/dist/shared/workspace-id.js.map +1 -0
  297. package/package.json +9 -4
  298. package/src/core/create-core-server.ts +1 -1
  299. package/src/core/create-core-services.ts +8 -2
  300. package/src/core-config.ts +9 -0
  301. package/src/modules/access/__tests__/access-control.service.test.ts +1 -1
  302. package/src/modules/access/__tests__/access-groups.test.ts +6 -5
  303. package/src/modules/access/__tests__/access-md-format.test.ts +3 -3
  304. package/src/modules/access/__tests__/access-mutation.service.test.ts +1 -1
  305. package/src/modules/access/__tests__/admin-locked-commit.test.ts +1 -1
  306. package/src/modules/access/__tests__/admin-route-helpers.test.ts +1 -1
  307. package/src/modules/access/__tests__/roles-admin.service.test.ts +2 -2
  308. package/src/modules/access/__tests__/roles-edit.test.ts +1 -1
  309. package/src/modules/access/__tests__/synced-groups-committer.test.ts +1 -1
  310. package/src/modules/access/__tests__/synced-groups-writer.test.ts +1 -1
  311. package/src/modules/access/access-control.service.ts +23 -768
  312. package/src/modules/access/access-declarations.ts +2 -2
  313. package/src/modules/access/access-mutation.service.ts +3 -3
  314. package/src/modules/access/access.routes.ts +5 -5
  315. package/src/modules/access/admin-locked-commit.ts +2 -2
  316. package/src/modules/access/admin-route-helpers.ts +1 -1
  317. package/src/modules/access/capability-registry.ts +1 -1
  318. package/src/modules/access/creator-access.ts +9 -72
  319. package/src/modules/access/groups-admin.routes.ts +1 -1
  320. package/src/modules/access/groups-admin.service.ts +6 -7
  321. package/src/modules/access/groups-edit.ts +2 -2
  322. package/src/modules/access/reference-scan.ts +1 -1
  323. package/src/modules/access/roles-admin.service.ts +8 -8
  324. package/src/modules/access/roles-edit.ts +1 -1
  325. package/src/modules/access/synced-groups-committer.ts +4 -4
  326. package/src/modules/access/synced-groups-writer.ts +2 -2
  327. package/src/modules/access-model/__tests__/access-grammar.test.ts +31 -0
  328. package/src/modules/{access → access-model}/__tests__/access-splice.test.ts +268 -268
  329. package/src/modules/{access → access-model}/access-errors.ts +1 -1
  330. package/src/modules/access-model/access-grammar.ts +778 -0
  331. package/src/modules/{access → access-model}/access-splice.ts +1 -1
  332. package/src/modules/access-model/creator.ts +79 -0
  333. package/src/modules/{access → access-model}/group-files.ts +1 -1
  334. package/src/modules/{access → access-model}/render-roles-yaml.ts +1 -1
  335. package/src/modules/{access → access-model}/roles-yaml-guard.ts +2 -2
  336. package/src/modules/admin/admin-access.service.ts +2 -1
  337. package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +30 -0
  338. package/src/modules/code-mode/code-mode.tool.ts +7 -1
  339. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +2 -2
  340. package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +3 -2
  341. package/src/modules/diff/__tests__/diff.service.test.ts +3 -2
  342. package/src/modules/diff/diff.routes.ts +4 -4
  343. package/src/modules/diff/diff.service.ts +1 -1
  344. package/src/modules/{workflow/git → kb-fs}/__tests__/branch-name.test.ts +1 -1
  345. package/src/modules/{workflow → kb-fs}/__tests__/locking-filesystem.test.ts +1 -1
  346. package/src/modules/{workflow/git → kb-fs}/branch-name.ts +1 -1
  347. package/src/modules/{workflow → kb-fs}/locking-filesystem.ts +2 -2
  348. package/src/modules/plugins/__tests__/join-requests.service.test.ts +2 -4
  349. package/src/modules/plugins/__tests__/plugin-index.service.test.ts +1 -1
  350. package/src/modules/plugins/__tests__/plugins.routes.test.ts +1 -1
  351. package/src/modules/plugins/join-proposals.ts +1 -1
  352. package/src/modules/plugins/join-requests.service.ts +2 -1
  353. package/src/modules/plugins/plugin-provision.service.ts +3 -3
  354. package/src/modules/plugins/plugins.routes.ts +2 -2
  355. package/src/modules/plugins/plugins.service.ts +1 -1
  356. package/src/modules/secrets-vault/secrets-vault.routes.ts +1 -1
  357. package/src/modules/skills/__tests__/skills.service.test.ts +1 -1
  358. package/src/modules/skills/pending-skills.service.ts +2 -1
  359. package/src/modules/skills/skills.service.ts +1 -1
  360. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +2 -1
  361. package/src/modules/tool-helpers/tool-context.ts +6 -5
  362. package/src/modules/tool-manuals/__tests__/mcp-server-edit.service.test.ts +1 -1
  363. package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +1 -1
  364. package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +1 -1
  365. package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +1 -1
  366. package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +1 -1
  367. package/src/modules/tool-manuals/mcp-server-edit.service.ts +2 -1
  368. package/src/modules/tool-manuals/tool-manuals.routes.ts +2 -1
  369. package/src/modules/tool-manuals/tool-manuals.service.ts +1 -1
  370. package/src/modules/tool-manuals/tool-manuals.tools.ts +1 -1
  371. package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +1 -1
  372. package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +1 -1
  373. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +1 -1
  374. package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +1 -1
  375. package/src/modules/workflow/agent-tools/workflow.tools.ts +1 -1
  376. package/src/modules/workflow/file-lock.service.ts +1 -1
  377. package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +1 -1
  378. package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +1 -1
  379. package/src/modules/workflow/git/__tests__/git.service.diffFileAtCommit.test.ts +1 -1
  380. package/src/modules/workflow/git/__tests__/git.service.diffFileBetweenBranches.test.ts +1 -1
  381. package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +1 -1
  382. package/src/modules/workflow/git/git.service.ts +5 -5
  383. package/src/modules/workflow/git/pull-request.service.ts +1 -1
  384. package/src/modules/workflow/review-workflow/__tests__/cancel-pr.test.ts +1 -1
  385. package/src/modules/workflow/review-workflow/review-workflow.service.ts +2 -2
  386. package/src/modules/workflow/session-ontology.service.ts +1 -1
  387. package/src/modules/workflow/workflow.routes.ts +2 -2
  388. package/src/modules/workflow/workflow.service.ts +5 -5
  389. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +1 -1
  390. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +1 -1
  391. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +2 -2
  392. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +1 -1
  393. package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +2 -5
  394. package/src/modules/workspace/__tests__/workspace.service.test.ts +13 -1
  395. package/src/modules/workspace/__tests__/workspace.tools.test.ts +501 -3
  396. package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +1658 -0
  397. package/src/modules/workspace/file-readers/__tests__/email-extract.test.ts +485 -0
  398. package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +97 -0
  399. package/src/modules/workspace/file-readers/__tests__/image-read.test.ts +100 -0
  400. package/src/modules/workspace/file-readers/doc-extract.service.ts +104 -0
  401. package/src/modules/workspace/file-readers/doc-extract.types.ts +63 -0
  402. package/src/modules/workspace/file-readers/document-reader.ts +64 -0
  403. package/src/modules/workspace/file-readers/email-reader.ts +21 -0
  404. package/src/modules/workspace/file-readers/email-text.ts +193 -0
  405. package/src/modules/workspace/file-readers/extract-docx.ts +67 -0
  406. package/src/modules/workspace/file-readers/extract-eml.ts +92 -0
  407. package/src/modules/workspace/file-readers/extract-msg.ts +134 -0
  408. package/src/modules/workspace/file-readers/extract-odp.ts +63 -0
  409. package/src/modules/workspace/file-readers/extract-ods.ts +182 -0
  410. package/src/modules/workspace/file-readers/extract-odt.ts +48 -0
  411. package/src/modules/workspace/file-readers/extract-pdf.ts +178 -0
  412. package/src/modules/workspace/file-readers/extract-pptx.ts +302 -0
  413. package/src/modules/workspace/file-readers/extract-xlsx.ts +96 -0
  414. package/src/modules/workspace/file-readers/extraction-cache.ts +142 -0
  415. package/src/modules/workspace/file-readers/file-reader.registry.ts +45 -0
  416. package/src/modules/workspace/file-readers/file-reader.ts +104 -0
  417. package/src/modules/workspace/file-readers/image-read.ts +122 -0
  418. package/src/modules/workspace/file-readers/image-reader.ts +39 -0
  419. package/src/modules/workspace/file-readers/odf-text.ts +123 -0
  420. package/src/modules/workspace/file-readers/ooxml-text.ts +477 -0
  421. package/src/modules/workspace/file-readers/text-reader.ts +131 -0
  422. package/src/modules/workspace/startup/kb-startup-runner.ts +1 -1
  423. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +1 -1
  424. package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +1 -1
  425. package/src/modules/workspace/startup/steps/roles-yaml.step.ts +2 -2
  426. package/src/modules/workspace/startup/steps/seed-tree.ts +1 -1
  427. package/src/modules/workspace/workspace.routes.ts +6 -5
  428. package/src/modules/workspace/workspace.service.ts +14 -18
  429. package/src/modules/workspace/workspace.tools.ts +177 -15
  430. package/src/shared/__tests__/join-request.test.ts +1 -1
  431. package/src/shared/__tests__/workspace-id.test.ts +17 -0
  432. package/src/{modules/workflow/workflow.errors.ts → shared/domain-errors.ts} +6 -1
  433. package/src/shared/workspace-id.ts +36 -0
  434. /package/src/modules/{access → access-model}/__tests__/kb-read-filter.test.ts +0 -0
  435. /package/src/modules/{access → access-model}/__tests__/roles-yaml-guard.test.ts +0 -0
  436. /package/src/modules/{access → access-model}/kb-read-filter.ts +0 -0
  437. /package/src/modules/{workflow/git → kb-fs}/__tests__/clone-config.test.ts +0 -0
  438. /package/src/modules/{workflow → kb-fs}/__tests__/file-change-notifier.test.ts +0 -0
  439. /package/src/modules/{workflow/git → kb-fs}/__tests__/mutex.test.ts +0 -0
  440. /package/src/modules/{workflow/git → kb-fs}/clone-config.ts +0 -0
  441. /package/src/modules/{workflow → kb-fs}/file-change-notifier.ts +0 -0
  442. /package/src/modules/{workflow/git → kb-fs}/mutex.ts +0 -0
  443. /package/src/modules/{workflow → kb-fs}/read-only-filesystem.ts +0 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The branch ↔ workspace-directory naming convention. Workspaces are
3
+ * per-branch (one on-disk clone per branch name), and the workspace id IS the
4
+ * URL-encoded branch name — deterministic both ways, so every caller
5
+ * (backend, frontend, agent) can compute one from the other without a DB
6
+ * round-trip. Consumed by nearly every module that touches a workspace, so it
7
+ * lives in `backend/src/shared` rather than inside the workspace module.
8
+ *
9
+ * Pure string handling — no IO, no DB.
10
+ */
11
+ /**
12
+ * Map a branch name to the directory that contains its workspace clone.
13
+ * `encodeURIComponent` handles `/` in branch names (e.g. `alice/foo`) by
14
+ * encoding it to `%2F` — single-segment-safe on every supported filesystem.
15
+ */
16
+ export declare function workspaceIdForBranch(branch: string): string;
17
+ /**
18
+ * Map a workspace id back to its branch name. Workspace ids come in from
19
+ * request paths and from directory names on disk, so malformed input (a lone
20
+ * `%`, `%` without two hex digits) must not throw — `decodeURIComponent`
21
+ * would raise a `URIError` that surfaces as an unhandled 500 in every route
22
+ * that resolves an id. A malformed id can never equal a valid encoding, so
23
+ * returning it unchanged is safe: it simply names a branch that does not
24
+ * exist, and the caller's own lookup fails with its normal not-found path.
25
+ */
26
+ export declare function branchForWorkspaceId(workspaceId: string): string;
27
+ //# sourceMappingURL=workspace-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-id.d.ts","sourceRoot":"","sources":["../../src/shared/workspace-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMhE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The branch ↔ workspace-directory naming convention. Workspaces are
3
+ * per-branch (one on-disk clone per branch name), and the workspace id IS the
4
+ * URL-encoded branch name — deterministic both ways, so every caller
5
+ * (backend, frontend, agent) can compute one from the other without a DB
6
+ * round-trip. Consumed by nearly every module that touches a workspace, so it
7
+ * lives in `backend/src/shared` rather than inside the workspace module.
8
+ *
9
+ * Pure string handling — no IO, no DB.
10
+ */
11
+ /**
12
+ * Map a branch name to the directory that contains its workspace clone.
13
+ * `encodeURIComponent` handles `/` in branch names (e.g. `alice/foo`) by
14
+ * encoding it to `%2F` — single-segment-safe on every supported filesystem.
15
+ */
16
+ export function workspaceIdForBranch(branch) {
17
+ return encodeURIComponent(branch);
18
+ }
19
+ /**
20
+ * Map a workspace id back to its branch name. Workspace ids come in from
21
+ * request paths and from directory names on disk, so malformed input (a lone
22
+ * `%`, `%` without two hex digits) must not throw — `decodeURIComponent`
23
+ * would raise a `URIError` that surfaces as an unhandled 500 in every route
24
+ * that resolves an id. A malformed id can never equal a valid encoding, so
25
+ * returning it unchanged is safe: it simply names a branch that does not
26
+ * exist, and the caller's own lookup fails with its normal not-found path.
27
+ */
28
+ export function branchForWorkspaceId(workspaceId) {
29
+ try {
30
+ return decodeURIComponent(workspaceId);
31
+ }
32
+ catch {
33
+ return workspaceId;
34
+ }
35
+ }
36
+ //# sourceMappingURL=workspace-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-id.js","sourceRoot":"","sources":["../../src/shared/workspace-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bevel-software/platform-core-backend",
3
- "version": "0.11.1",
3
+ "version": "0.12.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",
@@ -26,9 +26,10 @@
26
26
  "THIRD-PARTY-NOTICES.md"
27
27
  ],
28
28
  "engines": {
29
- "node": ">=22 <23"
29
+ "node": ">=22.13 <23"
30
30
  },
31
31
  "dependencies": {
32
+ "@kenjiuno/msgreader": "^1.28.0",
32
33
  "@mastra/core": "1.35.0",
33
34
  "@modelcontextprotocol/sdk": "^1.29.0",
34
35
  "@utcp/code-mode": "^1.2.12",
@@ -41,13 +42,17 @@
41
42
  "dotenv": "^16.4.0",
42
43
  "drizzle-orm": "^0.45.2",
43
44
  "express": "^5.1.0",
45
+ "htmlparser2": "^12.0.0",
44
46
  "ignore": "^7.0.5",
45
47
  "jsonwebtoken": "^9.0.3",
48
+ "pdfjs-dist": "^5.4.624",
46
49
  "pg": "^8.20.0",
50
+ "postal-mime": "^3.0.0",
51
+ "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
47
52
  "yaml": "^2.9.0",
48
53
  "zod": "^3.24.0",
49
- "@bevel-software/platform-mcp-core": "0.11.1",
50
- "@bevel-software/platform-shared": "0.11.1"
54
+ "@bevel-software/platform-mcp-core": "0.12.0",
55
+ "@bevel-software/platform-shared": "0.12.0"
51
56
  },
52
57
  "devDependencies": {
53
58
  "@types/adm-zip": "^0.5.8",
@@ -330,7 +330,7 @@ export async function createCoreServer(
330
330
  hooks: core.workflowService.hooks,
331
331
  };
332
332
  registerWorkflowTools(core.toolRegistry, toolsRouter, ta, th);
333
- registerWorkspaceTools(core.toolRegistry, toolsRouter, ta, th, core.spillStore, core.accessControl, core.kbDirName, sessionOntologyGate, core.routineWritePolicy, core.sessionSink);
333
+ registerWorkspaceTools(core.toolRegistry, toolsRouter, ta, th, core.spillStore, core.docExtractService, core.accessControl, core.kbDirName, sessionOntologyGate, core.routineWritePolicy, core.sessionSink);
334
334
  registerSkillsTools(core.toolRegistry, toolsRouter, ta, th, core.skillService);
335
335
  registerToolManualsTools(core.toolRegistry, toolsRouter, ta, th, core.toolManualService, {
336
336
  accessControl: core.accessControl,
@@ -28,6 +28,7 @@ function parseDomainList(raw: string): string[] {
28
28
  .filter((d) => d.length > 0);
29
29
  }
30
30
  import { SpillStore } from '../modules/workspace/spill-store.js';
31
+ import { DocExtractService } from '../modules/workspace/file-readers/doc-extract.service.js';
31
32
  import { UuidSessionSink, type ISessionSink } from '../modules/workspace/session-sink.js';
32
33
  import { AuthService } from '../modules/auth/auth.service.js';
33
34
  import { AccountErasureService } from '../modules/auth/account-erasure.service.js';
@@ -47,13 +48,13 @@ import {
47
48
  } from '../modules/secrets-vault/index.js';
48
49
  import { GitService } from '../modules/workflow/git/git.service.js';
49
50
  import { PullRequestService } from '../modules/workflow/git/pull-request.service.js';
50
- import { WorkspaceMutex } from '../modules/workflow/git/mutex.js';
51
+ import { WorkspaceMutex } from '../modules/kb-fs/mutex.js';
51
52
  import { assertGitVersion } from '../modules/workflow/git/git-version.js';
52
53
  import { DiffService } from '../modules/diff/diff.service.js';
53
54
  import { ReviewWorkflowService } from '../modules/workflow/review-workflow/review-workflow.service.js';
54
55
  import { FileLockService } from '../modules/workflow/file-lock.service.js';
55
56
  import { WorkflowEventBus } from '../modules/workflow/event-bus.js';
56
- import { FileChangeNotifier } from '../modules/workflow/file-change-notifier.js';
57
+ import { FileChangeNotifier } from '../modules/kb-fs/file-change-notifier.js';
57
58
  import { WorkflowService } from '../modules/workflow/workflow.service.js';
58
59
  import { WorkflowHooks } from '../modules/workflow/workflow-hooks.js';
59
60
  import { SessionOntologyService } from '../modules/workflow/session-ontology.service.js';
@@ -114,6 +115,7 @@ export interface CoreServices {
114
115
  */
115
116
  kbStartupRunner: KbStartupRunner;
116
117
  spillStore: SpillStore;
118
+ docExtractService: DocExtractService;
117
119
  accessControl: AccessControlService;
118
120
  creatorAccess: CreatorAccessService;
119
121
  sessionOntologyService: SessionOntologyService;
@@ -289,6 +291,9 @@ export async function createCoreServices(
289
291
  // Shared, workspace-independent store for oversized `call_tool_chain` results,
290
292
  // read back via `read_file`. Sibling of `workspacesRoot`, never committed.
291
293
  const spillStore = new SpillStore(config.spillRoot);
294
+ // Office-document/PDF text extraction for `read_file`/`grep`, cached by
295
+ // content hash beside the workspaces root (see `DocExtractionCache`).
296
+ const docExtractService = new DocExtractService(config.docExtractCacheRoot);
292
297
  // The deployment owner counts as Admin for the two hardcoded `write`
293
298
  // rescues (`roles.yaml` and any `access.md`) — the SAME list
294
299
  // `AdminAccessService` below is given, so the admin surfaces and the write
@@ -799,6 +804,7 @@ export async function createCoreServices(
799
804
  settings,
800
805
  kbDirName,
801
806
  spillStore,
807
+ docExtractService,
802
808
  accessControl,
803
809
  creatorAccess,
804
810
  sessionOntologyService,
@@ -71,6 +71,13 @@ export class CoreConfig {
71
71
  * never committed, best-effort GC'd on write.
72
72
  */
73
73
  readonly spillRoot: string;
74
+ /**
75
+ * Sibling-to-`workspacesRoot` location for the document-extraction cache —
76
+ * text extracted from office documents/PDFs (`read_file`/`grep`), keyed by
77
+ * git blob sha. Derived data only: safe to delete at any time, never
78
+ * committed, size-bounded by the cache itself.
79
+ */
80
+ readonly docExtractCacheRoot: string;
74
81
  readonly jwtSecret: string;
75
82
  /**
76
83
  * The deployment's owner. REQUIRED — three separate jobs rest on it, and a
@@ -244,6 +251,8 @@ export class CoreConfig {
244
251
  this.workspacesRoot = process.env.WORKSPACES_ROOT || path.resolve(process.cwd(), 'workspaces');
245
252
  this.backupsRoot = process.env.BACKUPS_ROOT || path.resolve(this.workspacesRoot, '..', 'backups');
246
253
  this.spillRoot = process.env.SPILL_ROOT || path.resolve(this.workspacesRoot, '..', 'tool-chain-spills');
254
+ this.docExtractCacheRoot =
255
+ process.env.DOC_EXTRACT_CACHE_ROOT || path.resolve(this.workspacesRoot, '..', 'doc-extract-cache');
247
256
  // Required, and checked BEFORE the auth routes it signs for are ever
248
257
  // mounted. Empty, the first login attempt fails deep inside the JWT library
249
258
  // with a message about a missing key — a boot error naming the variable is
@@ -5,7 +5,7 @@ import os from 'node:os';
5
5
 
6
6
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
7
7
  import { AccessControlService } from '../access-control.service.js';
8
- import { AccessConfigError } from '../access-errors.js';
8
+ import { AccessConfigError } from '../../access-model/access-errors.js';
9
9
 
10
10
  const PROCESS_MAP_DIR = 'knowledge-base';
11
11
 
@@ -6,8 +6,9 @@ import { execFile } from 'node:child_process';
6
6
  import { promisify } from 'node:util';
7
7
 
8
8
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
9
- import { AccessControlService, parseRolesYaml } from '../access-control.service.js';
10
- import { AccessConfigError } from '../access-errors.js';
9
+ import { AccessControlService } from '../access-control.service.js';
10
+ import { parseRolesYaml } from '../../access-model/access-grammar.js';
11
+ import { AccessConfigError } from '../../access-model/access-errors.js';
11
12
  import { addMember, parseRolesModel, emitRolesModel } from '../roles-edit.js';
12
13
 
13
14
  const execFileAsync = promisify(execFile);
@@ -102,7 +103,7 @@ describe('group files as access principals', () => {
102
103
  });
103
104
 
104
105
  it('validateGroupsFile (the WRITE gate) still refuses blank keys the reader forgives', async () => {
105
- const { validateGroupsFile } = await import('../group-files.js');
106
+ const { validateGroupsFile } = await import('../../access-model/group-files.js');
106
107
  // Inside `groups:` — refused via the entry warning (strict gate).
107
108
  expect(validateGroupsFile('groups:\n :\n - a@x.io\n', 'groups.yaml').ok).toBe(false);
108
109
  // At the ROOT — the tolerant reader silently drops this without any
@@ -114,7 +115,7 @@ describe('group files as access principals', () => {
114
115
  });
115
116
 
116
117
  it('parseGroupsFile applies the shared name-safety predicate (warn-and-skip), and the write gate refuses', async () => {
117
- const { parseGroupsFile, validateGroupsFile } = await import('../group-files.js');
118
+ const { parseGroupsFile, validateGroupsFile } = await import('../../access-model/group-files.js');
118
119
  // `<`/`>` and control characters pass the YAML subset as plain keys but
119
120
  // fail unsafeNameReason — the parser must skip them (other groups keep
120
121
  // resolving) and the strict write gate must refuse the whole candidate.
@@ -133,7 +134,7 @@ describe('group files as access principals', () => {
133
134
  });
134
135
 
135
136
  it("parseGroupsFile skips a 'group:'-prefixed member (shapes like an email, but is the ref token)", async () => {
136
- const { parseGroupsFile, validateGroupsFile } = await import('../group-files.js');
137
+ const { parseGroupsFile, validateGroupsFile } = await import('../../access-model/group-files.js');
137
138
  // `group:lee@x.io` PASSES the email regex — without the explicit skip it
138
139
  // would land as a member "email" nothing can ever log in as.
139
140
  const text = 'groups:\n Team:\n - group:lee@x.io\n - real@x.io\n';
@@ -4,13 +4,13 @@ import path from 'node:path';
4
4
  import os from 'node:os';
5
5
 
6
6
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
7
+ import { AccessControlService } from '../access-control.service.js';
7
8
  import {
8
- AccessControlService,
9
9
  accessMdDeclaresBodyRules,
10
10
  accessMdSelfEntries,
11
11
  parseAccessFile,
12
- } from '../access-control.service.js';
13
- import { spliceGrant, spliceRevoke } from '../access-splice.js';
12
+ } from '../../access-model/access-grammar.js';
13
+ import { spliceGrant, spliceRevoke } from '../../access-model/access-splice.js';
14
14
 
15
15
  /**
16
16
  * The two-format `access.md` story:
@@ -6,7 +6,7 @@ import os from 'node:os';
6
6
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
7
7
  import { AccessControlService } from '../access-control.service.js';
8
8
  import { AccessMutationService, AccessMutationError } from '../access-mutation.service.js';
9
- import type { Principal } from '../access-splice.js';
9
+ import type { Principal } from '../../access-model/access-splice.js';
10
10
 
11
11
  const KB = 'knowledge-base';
12
12
  const WS = 'ws-mut-1';
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, vi } from 'vitest';
2
2
 
3
3
  import { AdminLockedCommits } from '../admin-locked-commit.js';
4
- import { PushNeedsAgentResolutionError, WorkflowDomainError } from '../../workflow/workflow.errors.js';
4
+ import { PushNeedsAgentResolutionError, WorkflowDomainError } from '../../../shared/domain-errors.js';
5
5
  import type { AuthUser, IWorkspaceService, IWorkflowService } from '@bevel-software/platform-shared';
6
6
 
7
7
  const KB = 'knowledge-base';
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, vi, afterEach } from 'vitest';
2
2
 
3
3
  import { toHttpError, requireNonEmptyString } from '../admin-route-helpers.js';
4
- import { WorkflowDomainError } from '../../workflow/workflow.errors.js';
4
+ import { WorkflowDomainError } from '../../../shared/domain-errors.js';
5
5
  import { AccessMutationError } from '../access-mutation.service.js';
6
6
 
7
7
  describe('toHttpError — the shared access-family error shape', () => {
@@ -7,11 +7,11 @@ import type { WorkspaceService } from '../../workspace/workspace.service.js';
7
7
  import type { WorkflowService } from '../../workflow/workflow.service.js';
8
8
  import type { WorkflowEventBus } from '../../workflow/event-bus.js';
9
9
  import type { FileTreeEntry, WorkflowEventPayload } from '@bevel-software/platform-shared';
10
- import { workspaceIdForBranch } from '../../workspace/workspace.service.js';
10
+ import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
11
11
  import { AccessControlService } from '../access-control.service.js';
12
12
  import { RolesAdminService } from '../roles-admin.service.js';
13
13
  import { rewriteRoleTokensInText, findRoleRefsInText } from '../reference-scan.js';
14
- import { PushNeedsAgentResolutionError } from '../../workflow/workflow.errors.js';
14
+ import { PushNeedsAgentResolutionError } from '../../../shared/domain-errors.js';
15
15
  import type { AuthUser } from '@bevel-software/platform-shared';
16
16
  import { DEFAULT_BRANCH } from '@bevel-software/platform-shared';
17
17
 
@@ -11,7 +11,7 @@ import {
11
11
  renameGroupRefs,
12
12
  RolesEditError,
13
13
  } from '../roles-edit.js';
14
- import { parseYamlSubset } from '../access-control.service.js';
14
+ import { parseYamlSubset } from '../../access-model/access-grammar.js';
15
15
 
16
16
  const BASE = `roles:
17
17
  Admin:
@@ -8,7 +8,7 @@ import type { WorkspaceService } from '../../workspace/workspace.service.js';
8
8
  import type { AccessControlService } from '../access-control.service.js';
9
9
  import type { WorkflowEventBus } from '../../workflow/event-bus.js';
10
10
  import { createSyncedGroupsCommitter } from '../synced-groups-committer.js';
11
- import { PushNeedsAgentResolutionError, WorkflowValidationError } from '../../workflow/workflow.errors.js';
11
+ import { PushNeedsAgentResolutionError, WorkflowValidationError } from '../../../shared/domain-errors.js';
12
12
 
13
13
  const KB = 'knowledge-base';
14
14
  const BOT: AuthUser = { id: 'bot-1', email: 'directory-sync@bevel.local', name: 'Directory Sync Bot' };
@@ -1,5 +1,5 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { parseGroupsFile } from '../group-files.js';
2
+ import { parseGroupsFile } from '../../access-model/group-files.js';
3
3
  import {
4
4
  SyncedGroupsWriter,
5
5
  renderSyncedGroupsYaml,