@braidhq/server 0.1.0 → 0.2.1

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 (401) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -106
  3. package/dist/app.d.ts +7 -15
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +74 -45
  6. package/dist/app.js.map +1 -1
  7. package/dist/authMode.d.ts +39 -0
  8. package/dist/authMode.d.ts.map +1 -0
  9. package/dist/authMode.js +50 -0
  10. package/dist/authMode.js.map +1 -0
  11. package/dist/composeApp.d.ts +80 -0
  12. package/dist/composeApp.d.ts.map +1 -0
  13. package/dist/composeApp.js +137 -0
  14. package/dist/composeApp.js.map +1 -0
  15. package/dist/composeFsApp.d.ts +27 -0
  16. package/dist/composeFsApp.d.ts.map +1 -0
  17. package/dist/{composeFs.js → composeFsApp.js} +127 -126
  18. package/dist/composeFsApp.js.map +1 -0
  19. package/dist/index.d.ts +3 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +3 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/infrastructure/_shared/env.d.ts +10 -0
  24. package/dist/infrastructure/_shared/env.d.ts.map +1 -0
  25. package/dist/infrastructure/{env.js → _shared/env.js} +5 -6
  26. package/dist/infrastructure/_shared/env.js.map +1 -0
  27. package/dist/infrastructure/_shared/frontmatter.d.ts +13 -0
  28. package/dist/infrastructure/_shared/frontmatter.d.ts.map +1 -0
  29. package/dist/infrastructure/{fs → _shared}/frontmatter.js +5 -5
  30. package/dist/infrastructure/_shared/frontmatter.js.map +1 -0
  31. package/dist/infrastructure/_shared/jsonFileStore.d.ts.map +1 -0
  32. package/dist/infrastructure/_shared/jsonFileStore.js.map +1 -0
  33. package/dist/infrastructure/{fs → _shared}/paths.d.ts +17 -10
  34. package/dist/infrastructure/_shared/paths.d.ts.map +1 -0
  35. package/dist/infrastructure/{fs → _shared}/paths.js +27 -20
  36. package/dist/infrastructure/_shared/paths.js.map +1 -0
  37. package/dist/infrastructure/auth/AccessPolicy.d.ts +33 -58
  38. package/dist/infrastructure/auth/AccessPolicy.d.ts.map +1 -1
  39. package/dist/infrastructure/auth/AccessPolicy.js +35 -42
  40. package/dist/infrastructure/auth/AccessPolicy.js.map +1 -1
  41. package/dist/infrastructure/auth/SessionStore.d.ts +22 -12
  42. package/dist/infrastructure/auth/SessionStore.d.ts.map +1 -1
  43. package/dist/infrastructure/auth/SessionStore.js +20 -20
  44. package/dist/infrastructure/auth/SessionStore.js.map +1 -1
  45. package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts +14 -0
  46. package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts.map +1 -0
  47. package/dist/infrastructure/{fs → batch}/FsBatchPlanRepository.js +9 -7
  48. package/dist/infrastructure/batch/FsBatchPlanRepository.js.map +1 -0
  49. package/dist/infrastructure/history/GitWorkspaceHistory.d.ts.map +1 -0
  50. package/dist/infrastructure/{git → history}/GitWorkspaceHistory.js +31 -24
  51. package/dist/infrastructure/history/GitWorkspaceHistory.js.map +1 -0
  52. package/dist/infrastructure/history/commitMessage.d.ts.map +1 -0
  53. package/dist/infrastructure/history/commitMessage.js +90 -0
  54. package/dist/infrastructure/history/commitMessage.js.map +1 -0
  55. package/dist/infrastructure/hitl/FsClarificationRepository.d.ts +13 -0
  56. package/dist/infrastructure/hitl/FsClarificationRepository.d.ts.map +1 -0
  57. package/dist/infrastructure/hitl/FsClarificationRepository.js +40 -0
  58. package/dist/infrastructure/hitl/FsClarificationRepository.js.map +1 -0
  59. package/dist/infrastructure/hitl/FsProposalRepository.d.ts.map +1 -0
  60. package/dist/infrastructure/{fs → hitl}/FsProposalRepository.js +8 -8
  61. package/dist/infrastructure/hitl/FsProposalRepository.js.map +1 -0
  62. package/dist/infrastructure/hitl/StatusedJsonStore.d.ts +30 -0
  63. package/dist/infrastructure/hitl/StatusedJsonStore.d.ts.map +1 -0
  64. package/dist/infrastructure/{fs/FsStatusedJsonRepository.js → hitl/StatusedJsonStore.js} +3 -3
  65. package/dist/infrastructure/hitl/StatusedJsonStore.js.map +1 -0
  66. package/dist/infrastructure/model/FsModelSerializer.d.ts +94 -0
  67. package/dist/infrastructure/model/FsModelSerializer.d.ts.map +1 -0
  68. package/dist/infrastructure/{fs/FsGraphSerializer.js → model/FsModelSerializer.js} +11 -11
  69. package/dist/infrastructure/model/FsModelSerializer.js.map +1 -0
  70. package/dist/infrastructure/oauth/GoogleOAuth.d.ts +20 -38
  71. package/dist/infrastructure/oauth/GoogleOAuth.d.ts.map +1 -1
  72. package/dist/infrastructure/oauth/GoogleOAuth.js +21 -22
  73. package/dist/infrastructure/oauth/GoogleOAuth.js.map +1 -1
  74. package/dist/infrastructure/reactor/FsReactorCycleRepository.d.ts +29 -0
  75. package/dist/infrastructure/reactor/FsReactorCycleRepository.d.ts.map +1 -0
  76. package/dist/infrastructure/reactor/FsReactorCycleRepository.js +94 -0
  77. package/dist/infrastructure/reactor/FsReactorCycleRepository.js.map +1 -0
  78. package/dist/infrastructure/secrets/SecretStore.d.ts +11 -14
  79. package/dist/infrastructure/secrets/SecretStore.d.ts.map +1 -1
  80. package/dist/infrastructure/secrets/SecretStore.js +4 -4
  81. package/dist/infrastructure/secrets/SecretStore.js.map +1 -1
  82. package/dist/infrastructure/{fs → skill}/FsRunRepository.d.ts +5 -3
  83. package/dist/infrastructure/skill/FsRunRepository.d.ts.map +1 -0
  84. package/dist/infrastructure/{fs → skill}/FsRunRepository.js +11 -9
  85. package/dist/infrastructure/skill/FsRunRepository.js.map +1 -0
  86. package/dist/infrastructure/{fs → skill}/FsSkillRegistry.d.ts +4 -13
  87. package/dist/infrastructure/skill/FsSkillRegistry.d.ts.map +1 -0
  88. package/dist/infrastructure/{fs → skill}/FsSkillRegistry.js +28 -20
  89. package/dist/infrastructure/skill/FsSkillRegistry.js.map +1 -0
  90. package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts +52 -0
  91. package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts.map +1 -0
  92. package/dist/infrastructure/{agent → skill}/SubprocessSkillRunner.js +107 -55
  93. package/dist/infrastructure/skill/SubprocessSkillRunner.js.map +1 -0
  94. package/dist/infrastructure/skill/asyncQueue.d.ts +20 -0
  95. package/dist/infrastructure/skill/asyncQueue.d.ts.map +1 -0
  96. package/dist/infrastructure/{agent → skill}/asyncQueue.js +2 -3
  97. package/dist/infrastructure/{agent → skill}/asyncQueue.js.map +1 -1
  98. package/dist/infrastructure/skill/lineBuffer.d.ts +15 -0
  99. package/dist/infrastructure/skill/lineBuffer.d.ts.map +1 -0
  100. package/dist/infrastructure/{agent/streamJsonParser.js → skill/lineBuffer.js} +5 -17
  101. package/dist/infrastructure/skill/lineBuffer.js.map +1 -0
  102. package/dist/infrastructure/skill/orphanReaper.d.ts +20 -0
  103. package/dist/infrastructure/skill/orphanReaper.d.ts.map +1 -0
  104. package/dist/infrastructure/{orphanReaper.js → skill/orphanReaper.js} +7 -5
  105. package/dist/infrastructure/skill/orphanReaper.js.map +1 -0
  106. package/dist/infrastructure/skill/subprocessEventStream.d.ts +16 -0
  107. package/dist/infrastructure/skill/subprocessEventStream.d.ts.map +1 -0
  108. package/dist/infrastructure/skill/subprocessEventStream.js +29 -0
  109. package/dist/infrastructure/skill/subprocessEventStream.js.map +1 -0
  110. package/dist/infrastructure/source/FsSourceUnitDigest.d.ts +19 -0
  111. package/dist/infrastructure/source/FsSourceUnitDigest.d.ts.map +1 -0
  112. package/dist/infrastructure/{fs → source}/FsSourceUnitDigest.js +9 -9
  113. package/dist/infrastructure/source/FsSourceUnitDigest.js.map +1 -0
  114. package/dist/infrastructure/source/FsSourceUnitObservationRepository.d.ts +31 -0
  115. package/dist/infrastructure/source/FsSourceUnitObservationRepository.d.ts.map +1 -0
  116. package/dist/infrastructure/{fs/FsSourceUnitStateRepository.js → source/FsSourceUnitObservationRepository.js} +18 -17
  117. package/dist/infrastructure/source/FsSourceUnitObservationRepository.js.map +1 -0
  118. package/dist/infrastructure/source/unitScan.d.ts +11 -0
  119. package/dist/infrastructure/source/unitScan.d.ts.map +1 -0
  120. package/dist/infrastructure/{fs/intentScan.js → source/unitScan.js} +36 -27
  121. package/dist/infrastructure/source/unitScan.js.map +1 -0
  122. package/dist/infrastructure/users/UserDirectoryFromRegistry.d.ts +2 -2
  123. package/dist/infrastructure/users/UserDirectoryFromRegistry.d.ts.map +1 -1
  124. package/dist/infrastructure/users/UserDirectoryFromRegistry.js +3 -2
  125. package/dist/infrastructure/users/UserDirectoryFromRegistry.js.map +1 -1
  126. package/dist/infrastructure/users/UserRegistryFile.d.ts +4 -5
  127. package/dist/infrastructure/users/UserRegistryFile.d.ts.map +1 -1
  128. package/dist/infrastructure/users/UserRegistryFile.js +6 -8
  129. package/dist/infrastructure/users/UserRegistryFile.js.map +1 -1
  130. package/dist/infrastructure/users/ensureWorkspaceOwners.d.ts +9 -6
  131. package/dist/infrastructure/users/ensureWorkspaceOwners.d.ts.map +1 -1
  132. package/dist/infrastructure/users/ensureWorkspaceOwners.js +10 -7
  133. package/dist/infrastructure/users/ensureWorkspaceOwners.js.map +1 -1
  134. package/dist/infrastructure/workspace/FsWorkspaceRepository.d.ts.map +1 -0
  135. package/dist/infrastructure/{fs → workspace}/FsWorkspaceRepository.js +7 -6
  136. package/dist/infrastructure/workspace/FsWorkspaceRepository.js.map +1 -0
  137. package/dist/infrastructure/workspace/WorkspaceDiscovery.d.ts +18 -0
  138. package/dist/infrastructure/workspace/WorkspaceDiscovery.d.ts.map +1 -0
  139. package/dist/infrastructure/{fs → workspace}/WorkspaceDiscovery.js +15 -11
  140. package/dist/infrastructure/workspace/WorkspaceDiscovery.js.map +1 -0
  141. package/dist/infrastructure/{fs → workspace}/WorkspaceRegistryFile.d.ts +10 -9
  142. package/dist/infrastructure/workspace/WorkspaceRegistryFile.d.ts.map +1 -0
  143. package/dist/infrastructure/{fs → workspace}/WorkspaceRegistryFile.js +15 -17
  144. package/dist/infrastructure/workspace/WorkspaceRegistryFile.js.map +1 -0
  145. package/dist/infrastructure/workspace/productManifestWriter.d.ts +24 -0
  146. package/dist/infrastructure/workspace/productManifestWriter.d.ts.map +1 -0
  147. package/dist/infrastructure/{fs → workspace}/productManifestWriter.js +14 -26
  148. package/dist/infrastructure/workspace/productManifestWriter.js.map +1 -0
  149. package/dist/middleware/auth.d.ts +27 -17
  150. package/dist/middleware/auth.d.ts.map +1 -1
  151. package/dist/middleware/auth.js +69 -53
  152. package/dist/middleware/auth.js.map +1 -1
  153. package/dist/middleware/cors.d.ts.map +1 -1
  154. package/dist/middleware/cors.js +4 -1
  155. package/dist/middleware/cors.js.map +1 -1
  156. package/dist/middleware/error.d.ts.map +1 -1
  157. package/dist/middleware/error.js +15 -13
  158. package/dist/middleware/error.js.map +1 -1
  159. package/dist/middleware/workspaceAccess.d.ts +23 -19
  160. package/dist/middleware/workspaceAccess.d.ts.map +1 -1
  161. package/dist/middleware/workspaceAccess.js +31 -26
  162. package/dist/middleware/workspaceAccess.js.map +1 -1
  163. package/dist/policy/CapabilityCheck.d.ts +5 -5
  164. package/dist/policy/PermissionRegistry.d.ts +11 -9
  165. package/dist/policy/PermissionRegistry.d.ts.map +1 -1
  166. package/dist/policy/PermissionRegistry.js +10 -8
  167. package/dist/policy/PermissionRegistry.js.map +1 -1
  168. package/dist/policy/ViewerContext.d.ts +13 -11
  169. package/dist/policy/ViewerContext.d.ts.map +1 -1
  170. package/dist/policy/checks.d.ts +9 -9
  171. package/dist/policy/checks.d.ts.map +1 -1
  172. package/dist/policy/checks.js +14 -11
  173. package/dist/policy/checks.js.map +1 -1
  174. package/dist/policy/defaultRegistry.d.ts +3 -4
  175. package/dist/policy/defaultRegistry.d.ts.map +1 -1
  176. package/dist/policy/defaultRegistry.js +3 -4
  177. package/dist/policy/defaultRegistry.js.map +1 -1
  178. package/dist/policy/index.d.ts +2 -2
  179. package/dist/policy/index.d.ts.map +1 -1
  180. package/dist/policy/index.js +1 -1
  181. package/dist/policy/index.js.map +1 -1
  182. package/dist/policy/resolveViewer.d.ts +9 -9
  183. package/dist/policy/resolveViewer.js +9 -9
  184. package/dist/routes/_shared.d.ts +93 -153
  185. package/dist/routes/_shared.d.ts.map +1 -1
  186. package/dist/routes/_shared.js +9 -5
  187. package/dist/routes/_shared.js.map +1 -1
  188. package/dist/routes/admin.d.ts +1 -1
  189. package/dist/routes/admin.d.ts.map +1 -1
  190. package/dist/routes/admin.js +13 -12
  191. package/dist/routes/admin.js.map +1 -1
  192. package/dist/routes/auth.d.ts +12 -10
  193. package/dist/routes/auth.d.ts.map +1 -1
  194. package/dist/routes/auth.js +32 -34
  195. package/dist/routes/auth.js.map +1 -1
  196. package/dist/routes/clarifications.d.ts +8 -0
  197. package/dist/routes/clarifications.d.ts.map +1 -0
  198. package/dist/routes/clarifications.js +246 -0
  199. package/dist/routes/clarifications.js.map +1 -0
  200. package/dist/routes/edges.d.ts.map +1 -1
  201. package/dist/routes/edges.js +2 -6
  202. package/dist/routes/edges.js.map +1 -1
  203. package/dist/routes/history.d.ts.map +1 -1
  204. package/dist/routes/history.js +12 -10
  205. package/dist/routes/history.js.map +1 -1
  206. package/dist/routes/nodes.d.ts.map +1 -1
  207. package/dist/routes/nodes.js +4 -8
  208. package/dist/routes/nodes.js.map +1 -1
  209. package/dist/routes/oauth.d.ts +6 -7
  210. package/dist/routes/oauth.d.ts.map +1 -1
  211. package/dist/routes/oauth.js +6 -7
  212. package/dist/routes/oauth.js.map +1 -1
  213. package/dist/routes/ontologies.d.ts +7 -0
  214. package/dist/routes/ontologies.d.ts.map +1 -0
  215. package/dist/routes/ontologies.js +29 -0
  216. package/dist/routes/ontologies.js.map +1 -0
  217. package/dist/routes/ontology.d.ts.map +1 -1
  218. package/dist/routes/ontology.js +2 -1
  219. package/dist/routes/ontology.js.map +1 -1
  220. package/dist/routes/proposals.d.ts +2 -2
  221. package/dist/routes/proposals.d.ts.map +1 -1
  222. package/dist/routes/proposals.js +35 -30
  223. package/dist/routes/proposals.js.map +1 -1
  224. package/dist/routes/reactorCycles.d.ts +7 -0
  225. package/dist/routes/reactorCycles.d.ts.map +1 -0
  226. package/dist/routes/reactorCycles.js +60 -0
  227. package/dist/routes/reactorCycles.js.map +1 -0
  228. package/dist/routes/runs.d.ts.map +1 -1
  229. package/dist/routes/runs.js +22 -19
  230. package/dist/routes/runs.js.map +1 -1
  231. package/dist/routes/skillInputOptions.d.ts +2 -2
  232. package/dist/routes/skillInputOptions.d.ts.map +1 -1
  233. package/dist/routes/skillInputOptions.js +53 -53
  234. package/dist/routes/skillInputOptions.js.map +1 -1
  235. package/dist/routes/skills.d.ts +19 -1
  236. package/dist/routes/skills.d.ts.map +1 -1
  237. package/dist/routes/skills.js +141 -7
  238. package/dist/routes/skills.js.map +1 -1
  239. package/dist/routes/sourceLoaders.d.ts.map +1 -1
  240. package/dist/routes/sourceLoaders.js +1 -0
  241. package/dist/routes/sourceLoaders.js.map +1 -1
  242. package/dist/routes/sourceUnitObservations.d.ts +20 -0
  243. package/dist/routes/sourceUnitObservations.d.ts.map +1 -0
  244. package/dist/routes/sourceUnitObservations.js +80 -0
  245. package/dist/routes/sourceUnitObservations.js.map +1 -0
  246. package/dist/routes/sourceWebhooks.d.ts +26 -0
  247. package/dist/routes/sourceWebhooks.d.ts.map +1 -0
  248. package/dist/routes/sourceWebhooks.js +301 -0
  249. package/dist/routes/sourceWebhooks.js.map +1 -0
  250. package/dist/routes/users.d.ts +0 -2
  251. package/dist/routes/users.d.ts.map +1 -1
  252. package/dist/routes/users.js +15 -33
  253. package/dist/routes/users.js.map +1 -1
  254. package/dist/routes/workspaceEvents.d.ts +5 -4
  255. package/dist/routes/workspaceEvents.d.ts.map +1 -1
  256. package/dist/routes/workspaceEvents.js +7 -6
  257. package/dist/routes/workspaceEvents.js.map +1 -1
  258. package/dist/routes/workspaceMembers.d.ts +1 -1
  259. package/dist/routes/workspaceMembers.d.ts.map +1 -1
  260. package/dist/routes/workspaceMembers.js +2 -2
  261. package/dist/routes/workspaceMembers.js.map +1 -1
  262. package/dist/routes/workspaces.d.ts +21 -10
  263. package/dist/routes/workspaces.d.ts.map +1 -1
  264. package/dist/routes/workspaces.js +95 -69
  265. package/dist/routes/workspaces.js.map +1 -1
  266. package/dist/server.js +6 -70
  267. package/dist/server.js.map +1 -1
  268. package/dist/serviceAccounts.d.ts +13 -0
  269. package/dist/serviceAccounts.d.ts.map +1 -0
  270. package/dist/serviceAccounts.js +26 -0
  271. package/dist/serviceAccounts.js.map +1 -0
  272. package/dist/startServer.d.ts +17 -0
  273. package/dist/startServer.d.ts.map +1 -0
  274. package/dist/startServer.js +81 -0
  275. package/dist/startServer.js.map +1 -0
  276. package/dist/startup.d.ts +28 -0
  277. package/dist/startup.d.ts.map +1 -0
  278. package/dist/startup.js +94 -0
  279. package/dist/startup.js.map +1 -0
  280. package/package.json +35 -40
  281. package/dist/composeFs.d.ts +0 -55
  282. package/dist/composeFs.d.ts.map +0 -1
  283. package/dist/composeFs.js.map +0 -1
  284. package/dist/composition.d.ts +0 -133
  285. package/dist/composition.d.ts.map +0 -1
  286. package/dist/composition.js +0 -113
  287. package/dist/composition.js.map +0 -1
  288. package/dist/infrastructure/agent/SubprocessSkillRunner.d.ts +0 -75
  289. package/dist/infrastructure/agent/SubprocessSkillRunner.d.ts.map +0 -1
  290. package/dist/infrastructure/agent/SubprocessSkillRunner.js.map +0 -1
  291. package/dist/infrastructure/agent/asyncQueue.d.ts +0 -22
  292. package/dist/infrastructure/agent/asyncQueue.d.ts.map +0 -1
  293. package/dist/infrastructure/agent/mcpConfig.d.ts +0 -38
  294. package/dist/infrastructure/agent/mcpConfig.d.ts.map +0 -1
  295. package/dist/infrastructure/agent/mcpConfig.js +0 -55
  296. package/dist/infrastructure/agent/mcpConfig.js.map +0 -1
  297. package/dist/infrastructure/agent/streamJsonParser.d.ts +0 -20
  298. package/dist/infrastructure/agent/streamJsonParser.d.ts.map +0 -1
  299. package/dist/infrastructure/agent/streamJsonParser.js.map +0 -1
  300. package/dist/infrastructure/agent/subprocessEventStream.d.ts +0 -26
  301. package/dist/infrastructure/agent/subprocessEventStream.d.ts.map +0 -1
  302. package/dist/infrastructure/agent/subprocessEventStream.js +0 -112
  303. package/dist/infrastructure/agent/subprocessEventStream.js.map +0 -1
  304. package/dist/infrastructure/auth/ensureApprovedEmails.d.ts +0 -16
  305. package/dist/infrastructure/auth/ensureApprovedEmails.d.ts.map +0 -1
  306. package/dist/infrastructure/auth/ensureApprovedEmails.js +0 -20
  307. package/dist/infrastructure/auth/ensureApprovedEmails.js.map +0 -1
  308. package/dist/infrastructure/env.d.ts +0 -11
  309. package/dist/infrastructure/env.d.ts.map +0 -1
  310. package/dist/infrastructure/env.js.map +0 -1
  311. package/dist/infrastructure/fs/FsBatchPlanRepository.d.ts +0 -300
  312. package/dist/infrastructure/fs/FsBatchPlanRepository.d.ts.map +0 -1
  313. package/dist/infrastructure/fs/FsBatchPlanRepository.js.map +0 -1
  314. package/dist/infrastructure/fs/FsClarifyTicketRepository.d.ts +0 -13
  315. package/dist/infrastructure/fs/FsClarifyTicketRepository.d.ts.map +0 -1
  316. package/dist/infrastructure/fs/FsClarifyTicketRepository.js +0 -39
  317. package/dist/infrastructure/fs/FsClarifyTicketRepository.js.map +0 -1
  318. package/dist/infrastructure/fs/FsDecisionRepository.d.ts +0 -13
  319. package/dist/infrastructure/fs/FsDecisionRepository.d.ts.map +0 -1
  320. package/dist/infrastructure/fs/FsDecisionRepository.js +0 -56
  321. package/dist/infrastructure/fs/FsDecisionRepository.js.map +0 -1
  322. package/dist/infrastructure/fs/FsGraphSerializer.d.ts +0 -629
  323. package/dist/infrastructure/fs/FsGraphSerializer.d.ts.map +0 -1
  324. package/dist/infrastructure/fs/FsGraphSerializer.js.map +0 -1
  325. package/dist/infrastructure/fs/FsProposalRepository.d.ts.map +0 -1
  326. package/dist/infrastructure/fs/FsProposalRepository.js.map +0 -1
  327. package/dist/infrastructure/fs/FsRunRepository.d.ts.map +0 -1
  328. package/dist/infrastructure/fs/FsRunRepository.js.map +0 -1
  329. package/dist/infrastructure/fs/FsSkillRegistry.d.ts.map +0 -1
  330. package/dist/infrastructure/fs/FsSkillRegistry.js.map +0 -1
  331. package/dist/infrastructure/fs/FsSourceUnitDigest.d.ts +0 -19
  332. package/dist/infrastructure/fs/FsSourceUnitDigest.d.ts.map +0 -1
  333. package/dist/infrastructure/fs/FsSourceUnitDigest.js.map +0 -1
  334. package/dist/infrastructure/fs/FsSourceUnitStateRepository.d.ts +0 -30
  335. package/dist/infrastructure/fs/FsSourceUnitStateRepository.d.ts.map +0 -1
  336. package/dist/infrastructure/fs/FsSourceUnitStateRepository.js.map +0 -1
  337. package/dist/infrastructure/fs/FsStatusedJsonRepository.d.ts +0 -35
  338. package/dist/infrastructure/fs/FsStatusedJsonRepository.d.ts.map +0 -1
  339. package/dist/infrastructure/fs/FsStatusedJsonRepository.js.map +0 -1
  340. package/dist/infrastructure/fs/FsWorkspaceRepository.d.ts.map +0 -1
  341. package/dist/infrastructure/fs/FsWorkspaceRepository.js.map +0 -1
  342. package/dist/infrastructure/fs/WorkspaceDiscovery.d.ts +0 -15
  343. package/dist/infrastructure/fs/WorkspaceDiscovery.d.ts.map +0 -1
  344. package/dist/infrastructure/fs/WorkspaceDiscovery.js.map +0 -1
  345. package/dist/infrastructure/fs/WorkspaceRegistryFile.d.ts.map +0 -1
  346. package/dist/infrastructure/fs/WorkspaceRegistryFile.js.map +0 -1
  347. package/dist/infrastructure/fs/frontmatter.d.ts +0 -13
  348. package/dist/infrastructure/fs/frontmatter.d.ts.map +0 -1
  349. package/dist/infrastructure/fs/frontmatter.js.map +0 -1
  350. package/dist/infrastructure/fs/intentScan.d.ts +0 -9
  351. package/dist/infrastructure/fs/intentScan.d.ts.map +0 -1
  352. package/dist/infrastructure/fs/intentScan.js.map +0 -1
  353. package/dist/infrastructure/fs/jsonFileStore.d.ts.map +0 -1
  354. package/dist/infrastructure/fs/jsonFileStore.js.map +0 -1
  355. package/dist/infrastructure/fs/paths.d.ts.map +0 -1
  356. package/dist/infrastructure/fs/paths.js.map +0 -1
  357. package/dist/infrastructure/fs/productManifestWriter.d.ts +0 -22
  358. package/dist/infrastructure/fs/productManifestWriter.d.ts.map +0 -1
  359. package/dist/infrastructure/fs/productManifestWriter.js.map +0 -1
  360. package/dist/infrastructure/git/GitWorkspaceHistory.d.ts.map +0 -1
  361. package/dist/infrastructure/git/GitWorkspaceHistory.js.map +0 -1
  362. package/dist/infrastructure/git/commitMessage.d.ts.map +0 -1
  363. package/dist/infrastructure/git/commitMessage.js +0 -71
  364. package/dist/infrastructure/git/commitMessage.js.map +0 -1
  365. package/dist/infrastructure/orphanReaper.d.ts +0 -18
  366. package/dist/infrastructure/orphanReaper.d.ts.map +0 -1
  367. package/dist/infrastructure/orphanReaper.js.map +0 -1
  368. package/dist/infrastructure/users/ensureLocalUser.d.ts +0 -15
  369. package/dist/infrastructure/users/ensureLocalUser.d.ts.map +0 -1
  370. package/dist/infrastructure/users/ensureLocalUser.js +0 -38
  371. package/dist/infrastructure/users/ensureLocalUser.js.map +0 -1
  372. package/dist/middleware/requireAdmin.d.ts +0 -10
  373. package/dist/middleware/requireAdmin.d.ts.map +0 -1
  374. package/dist/middleware/requireAdmin.js +0 -24
  375. package/dist/middleware/requireAdmin.js.map +0 -1
  376. package/dist/middleware/userId.d.ts +0 -16
  377. package/dist/middleware/userId.d.ts.map +0 -1
  378. package/dist/middleware/userId.js +0 -27
  379. package/dist/middleware/userId.js.map +0 -1
  380. package/dist/policy/Capability.d.ts +0 -12
  381. package/dist/policy/Capability.d.ts.map +0 -1
  382. package/dist/policy/Capability.js +0 -31
  383. package/dist/policy/Capability.js.map +0 -1
  384. package/dist/routes/clarify.d.ts +0 -9
  385. package/dist/routes/clarify.d.ts.map +0 -1
  386. package/dist/routes/clarify.js +0 -274
  387. package/dist/routes/clarify.js.map +0 -1
  388. package/dist/routes/decisions.d.ts +0 -7
  389. package/dist/routes/decisions.d.ts.map +0 -1
  390. package/dist/routes/decisions.js +0 -68
  391. package/dist/routes/decisions.js.map +0 -1
  392. package/dist/routes/sourceUnitStates.d.ts +0 -7
  393. package/dist/routes/sourceUnitStates.d.ts.map +0 -1
  394. package/dist/routes/sourceUnitStates.js +0 -45
  395. package/dist/routes/sourceUnitStates.js.map +0 -1
  396. /package/dist/infrastructure/{fs → _shared}/jsonFileStore.d.ts +0 -0
  397. /package/dist/infrastructure/{fs → _shared}/jsonFileStore.js +0 -0
  398. /package/dist/infrastructure/{git → history}/GitWorkspaceHistory.d.ts +0 -0
  399. /package/dist/infrastructure/{git → history}/commitMessage.d.ts +0 -0
  400. /package/dist/infrastructure/{fs → hitl}/FsProposalRepository.d.ts +0 -0
  401. /package/dist/infrastructure/{fs → workspace}/FsWorkspaceRepository.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitWorkspaceHistory.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/history/GitWorkspaceHistory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,QAAQ,EACR,aAAa,EACb,OAAO,EAER,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAA;AAsDnE,qBAAa,mBAAoB,YAAW,gBAAgB;IACpD,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAYxE,WAAW,CACf,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IAiB3B,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAe3E,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAoB/E,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC;IAWjF,OAAO,CACX,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,CAAC;IAoBf,GAAG,CACP,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAwBb,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;IAY3D,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKpD,iBAAiB;YAUjB,cAAc;CAiB7B"}
@@ -3,7 +3,7 @@ import { writeFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
4
  import { CommitSha, Timestamp, WorkspaceId } from '@braidhq/schema';
5
5
  import { simpleGit } from 'simple-git';
6
- import { GRAPH_JSON_VERSION, GraphJsonFile } from '../fs/FsGraphSerializer.js';
6
+ import { MODEL_JSON_VERSION, ModelJsonFile } from '../model/FsModelSerializer.js';
7
7
  import { parseCommitMessage, serializeCommitMessage } from './commitMessage.js';
8
8
  // ASCII control chars never appear in commit subjects / refnames.
9
9
  const LOG_FIELD_SEPARATOR = '';
@@ -21,7 +21,8 @@ const TAG_FORMAT = [
21
21
  '%(taggeremail)',
22
22
  '%(contents:subject)',
23
23
  ].join(TAG_FIELD_SEPARATOR) + TAG_RECORD_SEPARATOR;
24
- // Intent docs + codebases are re-fetchable; tracking them would nest foreign `.git/` dirs and bloat history.
24
+ // Intent docs and codebases are re-fetchable.
25
+ // Tracking them would nest foreign `.git/` dirs and bloat history.
25
26
  const DEFAULT_GITIGNORE = `# Braid auto-generated.
26
27
 
27
28
  .braid/
@@ -39,7 +40,8 @@ const INITIAL_COMMIT = {
39
40
  subject: 'workspace registered',
40
41
  userId: BOOTSTRAP_USER_ID,
41
42
  };
42
- // `core.quotePath=false` keeps non-ASCII paths intact in log / name-status output.
43
+ // `core.quotePath=false` keeps non-ASCII paths intact,
44
+ // in log and name-status output.
43
45
  function openGit(baseDir) {
44
46
  return simpleGit({
45
47
  baseDir,
@@ -57,14 +59,16 @@ export class GitWorkspaceHistory {
57
59
  if (!existsSync(gitignorePath))
58
60
  await writeFile(gitignorePath, DEFAULT_GITIGNORE, 'utf-8');
59
61
  await git.add(['-A']);
60
- // Allow empty when the workspace dir has nothing tracked yet so HEAD still exists for later commits to parent on.
62
+ // Allow empty when the workspace dir has nothing tracked yet,
63
+ // so HEAD exists for later commits to parent on.
61
64
  const allowEmpty = !(await this.hasPendingChanges(git));
62
65
  await this.commitWithMeta(git, INITIAL_COMMIT, { allowEmpty });
63
66
  }
64
67
  async commit(workspace, message) {
65
68
  const git = openGit(workspace.rootPath);
66
69
  await git.add(['-A']);
67
- // Redundant commit attempts (e.g. reject after the artifact was already persisted) resolve to a no-op.
70
+ // Redundant commit attempts resolve to a no-op,
71
+ // for example a reject after the artifact was already persisted.
68
72
  if (!(await this.hasPendingChanges(git))) {
69
73
  const head = await git.revparse(['HEAD']);
70
74
  return CommitSha.parse(head.trim());
@@ -78,7 +82,7 @@ export class GitWorkspaceHistory {
78
82
  if (options?.since)
79
83
  args.splice(1, 0, `${options.since}^`);
80
84
  const raw = await git.raw(args).catch((err) => {
81
- // Fresh repo with no commits `git log` exits non-zero; treat as empty.
85
+ // Fresh repo with no commits, `git log` exits non-zero. Treat as empty.
82
86
  if (looksLikeNoCommits(err))
83
87
  return '';
84
88
  throw err;
@@ -103,23 +107,24 @@ export class GitWorkspaceHistory {
103
107
  }
104
108
  async readGraphAtCommit(workspace, sha) {
105
109
  const git = openGit(workspace.rootPath);
106
- // Pre-bootstrap commits don't carry `graph.json`; empty snapshot lets diffs classify everything as `added`.
107
- const raw = await git.raw(['show', `${sha}:artifacts/graph.json`]).catch((err) => {
110
+ // Pre-bootstrap commits don't carry `model.json`.
111
+ // An empty snapshot lets diffs classify everything as `added`.
112
+ const raw = await git.raw(['show', `${sha}:artifacts/model.json`]).catch((err) => {
108
113
  if (looksLikePathNotInCommit(err) || looksLikeUnknownRevision(err))
109
114
  return '';
110
115
  throw err;
111
116
  });
112
117
  if (!raw.trim())
113
118
  return { nodes: [], edges: [] };
114
- const parsed = GraphJsonFile.parse(JSON.parse(raw));
115
- if (parsed.version !== GRAPH_JSON_VERSION) {
116
- throw new Error(`graph.json version mismatch at ${sha}: expected ${GRAPH_JSON_VERSION}, got ${parsed.version}`);
119
+ const parsed = ModelJsonFile.parse(JSON.parse(raw));
120
+ if (parsed.version !== MODEL_JSON_VERSION) {
121
+ throw new Error(`model.json version mismatch at ${sha}: expected ${MODEL_JSON_VERSION}, got ${parsed.version}`);
117
122
  }
118
123
  return { nodes: parsed.nodes, edges: parsed.edges };
119
124
  }
120
125
  async getCommitDiff(workspace, sha) {
121
126
  const git = openGit(workspace.rootPath);
122
- // `--root` keeps the root commit diffable against the empty tree instead of erroring.
127
+ // `--root` keeps the root commit diffable against the empty tree, instead of erroring.
123
128
  const raw = await git.raw(['show', '--name-status', '--root', '--format=', sha]).catch((err) => {
124
129
  if (looksLikeUnknownRevision(err))
125
130
  return '';
@@ -133,7 +138,8 @@ export class GitWorkspaceHistory {
133
138
  const head = CommitSha.parse(headRaw.trim());
134
139
  if (head === targetSha)
135
140
  return head;
136
- // `checkout <sha> -- .` only restores files present in <sha>; we need an EXACT match so newer files must also go.
141
+ // `checkout <sha> -- .` only restores files present in <sha>.
142
+ // We need an EXACT match, so newer files must also go.
137
143
  await git.raw(['read-tree', targetSha]);
138
144
  await git.raw(['checkout-index', '--force', '--all']);
139
145
  await git.raw(['clean', '-fd']);
@@ -148,7 +154,8 @@ export class GitWorkspaceHistory {
148
154
  async tag(workspace, sha, name, note) {
149
155
  const git = openGit(workspace.rootPath);
150
156
  if (note) {
151
- // Annotated tags need a committer identity; pin inline so CI runners without global git config don't fail.
157
+ // Annotated tags need a committer identity. Pin it inline,
158
+ // so CI runners without global git config don't fail.
152
159
  await git.raw([
153
160
  '-c',
154
161
  `user.name=${BOOTSTRAP_USER_ID}`,
@@ -192,11 +199,9 @@ export class GitWorkspaceHistory {
192
199
  || status.not_added.length > 0;
193
200
  }
194
201
  async commitWithMeta(git, message, options) {
195
- // `authorName` / `authorEmail` are snapshotted at commit time so
196
- // a future rename of the user record doesn't rewrite git history.
197
- // When absent (bootstrap, source-sync, pre-Phase-A artifacts) we
198
- // fall back to the opaque `userId` for both — same behaviour as
199
- // before Theme 13 landed.
202
+ // `authorName` / `authorEmail` are snapshotted at commit time,
203
+ // so a later rename of the user record can't rewrite git history.
204
+ // When absent, we fall back to the opaque `userId` for both.
200
205
  const name = message.authorName ?? message.userId;
201
206
  const email = message.authorEmail ?? `${message.userId}@braid.local`;
202
207
  const args = ['commit', '-m', serializeCommitMessage(message), `--author=${name} <${email}>`];
@@ -222,7 +227,8 @@ function parseLogRecord(record, workspaceId) {
222
227
  parents: parents.trim()
223
228
  ? parents.trim().split(' ').map(s => CommitSha.parse(s.trim()))
224
229
  : [],
225
- // Stats are derived lazily via `getCommitDiff` to avoid N extra diff calls per list page.
230
+ // Stats are derived lazily via `getCommitDiff`,
231
+ // to avoid N extra diff calls per list page.
226
232
  stats: null,
227
233
  };
228
234
  }
@@ -273,7 +279,7 @@ function parseNameStatus(raw) {
273
279
  function splitLogRecords(raw) {
274
280
  return raw.split(LOG_RECORD_SEPARATOR).map(s => s.trim()).filter(s => s.length > 0);
275
281
  }
276
- // Unknown letters fall back to `modified` so the row still surfaces.
282
+ // Unknown letters fall back to `updated` so the row still surfaces.
277
283
  function statusFromCode(code) {
278
284
  switch (code) {
279
285
  case 'A':
@@ -282,9 +288,9 @@ function statusFromCode(code) {
282
288
  case 'D':
283
289
  return 'removed';
284
290
  case 'M':
285
- return 'modified';
291
+ return 'updated';
286
292
  default:
287
- return 'modified';
293
+ return 'updated';
288
294
  }
289
295
  }
290
296
  function looksLikeNoCommits(err) {
@@ -295,7 +301,8 @@ function looksLikeUnknownRevision(err) {
295
301
  const msg = err instanceof Error ? err.message : String(err);
296
302
  return /unknown revision|bad revision|ambiguous argument/i.test(msg);
297
303
  }
298
- // `git show <sha>:<path>` for an untracked path reports "exists on disk, but not in" or "does not exist in".
304
+ // `git show <sha>:<path>` for an untracked path reports a specific message,
305
+ // either "exists on disk, but not in" or "does not exist in".
299
306
  function looksLikePathNotInCommit(err) {
300
307
  const msg = err instanceof Error ? err.message : String(err);
301
308
  return /exists on disk, but not in|does not exist in|path .* does not exist/i.test(msg);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitWorkspaceHistory.js","sourceRoot":"","sources":["../../../src/infrastructure/history/GitWorkspaceHistory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitMessage.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/history/commitMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAcpD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAwBrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAgC7D"}
@@ -0,0 +1,90 @@
1
+ import { ClarificationId, CommitKind, CommitSha, ProposalId, SourceId, UserId, } from '@braidhq/schema';
2
+ // Trailer keys recognised by `git interpret-trailers`,
3
+ // so future tooling can lean on the same parser.
4
+ const TRAILER_KEY_PATTERN = /^[a-z][a-z-]*$/i;
5
+ export function serializeCommitMessage(message) {
6
+ const trailers = [
7
+ `Kind: ${message.kind}`,
8
+ `Author: ${message.userId}`,
9
+ ];
10
+ if (message.proposalId)
11
+ trailers.push(`Proposal-Id: ${message.proposalId}`);
12
+ if (message.clarificationId)
13
+ trailers.push(`Clarification-Id: ${message.clarificationId}`);
14
+ if (message.sourceId)
15
+ trailers.push(`Source-Id: ${message.sourceId}`);
16
+ if (message.revertedFrom)
17
+ trailers.push(`Reverted-From: ${message.revertedFrom}`);
18
+ if (message.revertedTo)
19
+ trailers.push(`Reverted-To: ${message.revertedTo}`);
20
+ // Subjects can span lines, reject/skip reasons and answer notes are free text.
21
+ // First line stays the git subject, the rest becomes the commit body,
22
+ // so `parseCommitMessage` can rebuild the whole subject with nothing dropped.
23
+ const [firstLine = '', ...bodyLines] = message.subject.split('\n');
24
+ const body = bodyLines.join('\n').trim();
25
+ const header = body
26
+ ? `${message.kind}: ${firstLine}\n\n${body}`
27
+ : `${message.kind}: ${firstLine}`;
28
+ return `${header}\n\n${trailers.join('\n')}\n`;
29
+ }
30
+ export function parseCommitMessage(raw) {
31
+ const lines = raw.split('\n');
32
+ const subjectLine = lines[0] ?? '';
33
+ const colonIdx = subjectLine.indexOf(':');
34
+ const firstLine = colonIdx >= 0 ? subjectLine.slice(colonIdx + 1).trim() : subjectLine.trim();
35
+ // Split off the free-text body the serializer stored below the subject,
36
+ // so a multi-line reason or note survives the round-trip intact.
37
+ const { body, trailers } = splitBodyAndTrailers(lines);
38
+ const subject = body ? `${firstLine}\n${body}` : firstLine;
39
+ const kindRaw = trailers.Kind ?? subjectLine.slice(0, colonIdx).trim();
40
+ // Fall back to `snapshot` on unknown kinds,
41
+ // so a manual `git commit` from the CLI still renders in the timeline.
42
+ const kind = CommitKind.safeParse(kindRaw).data ?? 'snapshot';
43
+ const userId = UserId.parse(trailers.Author ?? 'unknown');
44
+ const out = {
45
+ kind,
46
+ subject: subject || `(unsubject ${kind})`,
47
+ userId,
48
+ };
49
+ if (trailers['Proposal-Id'])
50
+ Object.assign(out, { proposalId: ProposalId.parse(trailers['Proposal-Id']) });
51
+ if (trailers['Clarification-Id'])
52
+ Object.assign(out, { clarificationId: ClarificationId.parse(trailers['Clarification-Id']) });
53
+ if (trailers['Source-Id'])
54
+ Object.assign(out, { sourceId: SourceId.parse(trailers['Source-Id']) });
55
+ if (trailers['Reverted-From'])
56
+ Object.assign(out, { revertedFrom: CommitSha.parse(trailers['Reverted-From']) });
57
+ if (trailers['Reverted-To'])
58
+ Object.assign(out, { revertedTo: CommitSha.parse(trailers['Reverted-To']) });
59
+ return out;
60
+ }
61
+ // indexOf-based scan instead of a single regex,
62
+ // to avoid polynomial backtracking against adversarial commit bodies.
63
+ function splitBodyAndTrailers(lines) {
64
+ const trailers = {};
65
+ let bodyEnd = 1;
66
+ for (let i = lines.length - 1; i >= 0; i--) {
67
+ const line = lines[i];
68
+ if (line.trim().length === 0) {
69
+ // Blank line fencing the trailer block, the body ends here.
70
+ if (Object.keys(trailers).length > 0) {
71
+ bodyEnd = i;
72
+ break;
73
+ }
74
+ continue;
75
+ }
76
+ const colon = line.indexOf(':');
77
+ if (colon < 1) {
78
+ bodyEnd = i + 1;
79
+ break;
80
+ }
81
+ const key = line.slice(0, colon);
82
+ if (!TRAILER_KEY_PATTERN.test(key)) {
83
+ bodyEnd = i + 1;
84
+ break;
85
+ }
86
+ trailers[key] = line.slice(colon + 1).trim();
87
+ }
88
+ return { body: lines.slice(1, bodyEnd).join('\n').trim(), trailers };
89
+ }
90
+ //# sourceMappingURL=commitMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitMessage.js","sourceRoot":"","sources":["../../../src/infrastructure/history/commitMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AbsolutePath, ClarificationFilter, ClarificationId, WorkspaceId } from '@braidhq/schema';
2
+ import { Clarification, type ClarificationRepository } from '@braidhq/core';
3
+ export interface FsClarificationRepositoryOptions {
4
+ readonly workspaceRoots: () => Promise<ReadonlyMap<WorkspaceId, AbsolutePath>>;
5
+ }
6
+ export declare class FsClarificationRepository implements ClarificationRepository {
7
+ private readonly base;
8
+ constructor(options: FsClarificationRepositoryOptions);
9
+ list(filter?: ClarificationFilter): Promise<Clarification[]>;
10
+ load(clarificationId: ClarificationId): Promise<Clarification>;
11
+ save(clarification: Clarification): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=FsClarificationRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsClarificationRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/hitl/FsClarificationRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,WAAW,EACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAY,MAAM,eAAe,CAAA;AAKrF,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;CAC/E;AAED,qBAAa,yBAA0B,YAAW,uBAAuB;IACvE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoF;gBAE7F,OAAO,EAAE,gCAAgC;IAgB/C,IAAI,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAiBlE,IAAI,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAI9D,IAAI,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD"}
@@ -0,0 +1,40 @@
1
+ import { Clarification, paginate } from '@braidhq/core';
2
+ import { Clarification as ClarificationSchema } from '@braidhq/schema';
3
+ import { clarificationDir, CLARIFY_STATUSES } from '../_shared/paths.js';
4
+ import { StatusedJsonStore } from './StatusedJsonStore.js';
5
+ export class FsClarificationRepository {
6
+ base;
7
+ constructor(options) {
8
+ this.base = new StatusedJsonStore({
9
+ entityName: 'Clarification',
10
+ statuses: CLARIFY_STATUSES,
11
+ dirFor: clarificationDir,
12
+ parse: raw => new Clarification(ClarificationSchema.parse(raw)),
13
+ serialize: entity => entity.toData(),
14
+ idOf: entity => entity.id,
15
+ statusOf: entity => entity.status,
16
+ workspaceIdOf: entity => entity.workspaceId,
17
+ }, options.workspaceRoots);
18
+ }
19
+ async list(filter) {
20
+ let clarifications = await this.base.list({
21
+ ...(filter?.workspaceId !== undefined ? { workspaceId: filter.workspaceId } : {}),
22
+ ...(filter?.statuses !== undefined ? { statuses: filter.statuses } : {}),
23
+ });
24
+ // Pending clarifications are personal, only the owner sees them.
25
+ // Answered, applied, and skipped clarifications stay workspace-shared.
26
+ if (filter?.viewerId !== undefined) {
27
+ const viewerId = filter.viewerId;
28
+ const includeServiceOwned = filter.includeServiceOwned ?? false;
29
+ clarifications = clarifications.filter(clarification => clarification.status !== 'pending' || clarification.owner === viewerId || (includeServiceOwned && clarification.ownerKind === 'service'));
30
+ }
31
+ return paginate(clarifications, filter?.limit, filter?.offset);
32
+ }
33
+ load(clarificationId) {
34
+ return this.base.load(clarificationId);
35
+ }
36
+ save(clarification) {
37
+ return this.base.save(clarification);
38
+ }
39
+ }
40
+ //# sourceMappingURL=FsClarificationRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsClarificationRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/hitl/FsClarificationRepository.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAgC,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrF,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAM1D,MAAM,OAAO,yBAAyB;IACnB,IAAI,CAAoF;IAEzG,YAAY,OAAyC;QACnD,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,CAC/B;YACE,UAAU,EAAE,eAAe;YAC3B,QAAQ,EAAE,gBAAgB;YAC1B,MAAM,EAAE,gBAAgB;YACxB,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/D,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;YACpC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;YACzB,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM;YACjC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW;SAC5C,EACD,OAAO,CAAC,cAAc,CACvB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAA4B;QACrC,IAAI,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC,CAAA;QACF,iEAAiE;QACjE,uEAAuE;QACvE,IAAI,MAAM,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAChC,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAA;YAC/D,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CACrD,aAAa,CAAC,MAAM,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,mBAAmB,IAAI,aAAa,CAAC,SAAS,KAAK,SAAS,CAAC,CACzI,CAAA;QACH,CAAC;QACD,OAAO,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAChE,CAAC;IAED,IAAI,CAAC,eAAgC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,CAAC,aAA4B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACtC,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsProposalRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/hitl/FsProposalRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5F,OAAO,EAAY,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAK3E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;CAC/E;AAED,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2E;gBAEpF,OAAO,EAAE,2BAA2B;IAgB1C,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAsBxD,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI/C,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9C"}
@@ -1,11 +1,11 @@
1
1
  import { paginate, Proposal } from '@braidhq/core';
2
2
  import { Proposal as ProposalSchema } from '@braidhq/schema';
3
- import { FsStatusedJsonRepository } from './FsStatusedJsonRepository.js';
4
- import { PROPOSAL_STATUSES, proposalsDir } from './paths.js';
3
+ import { PROPOSAL_STATUSES, proposalsDir } from '../_shared/paths.js';
4
+ import { StatusedJsonStore } from './StatusedJsonStore.js';
5
5
  export class FsProposalRepository {
6
6
  base;
7
7
  constructor(options) {
8
- this.base = new FsStatusedJsonRepository({
8
+ this.base = new StatusedJsonStore({
9
9
  entityName: 'Proposal',
10
10
  statuses: PROPOSAL_STATUSES,
11
11
  dirFor: proposalsDir,
@@ -25,13 +25,13 @@ export class FsProposalRepository {
25
25
  const skills = filter.generatedBy;
26
26
  proposals = proposals.filter(proposal => skills.includes(proposal.generatedBy));
27
27
  }
28
- // Phase E personal/shared filter: pending proposals only the
29
- // owner sees; applied / rejected stay workspace-shared audit
30
- // history. Absent viewerId means "no filter" (Owner Show All,
31
- // legacy callers, bootstrap).
28
+ // Pending proposals are personal, only the owner sees them.
29
+ // Applied and rejected stay as workspace-shared audit history.
30
+ // Absent viewerId means no filter, for Owner Show All and legacy callers.
32
31
  if (filter?.viewerId !== undefined) {
33
32
  const viewerId = filter.viewerId;
34
- proposals = proposals.filter(proposal => proposal.status !== 'pending' || proposal.ownerId === undefined || proposal.ownerId === viewerId);
33
+ const includeServiceOwned = filter.includeServiceOwned ?? false;
34
+ proposals = proposals.filter(proposal => proposal.status !== 'pending' || proposal.owner === viewerId || (includeServiceOwned && proposal.ownerKind === 'service'));
35
35
  }
36
36
  return paginate(proposals, filter?.limit, filter?.offset);
37
37
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsProposalRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/hitl/FsProposalRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA2B,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAM1D,MAAM,OAAO,oBAAoB;IACd,IAAI,CAA2E;IAEhG,YAAY,OAAoC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,CAC/B;YACE,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE,YAAY;YACpB,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;YACpC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;YACzB,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM;YACjC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW;SAC5C,EACD,OAAO,CAAC,cAAc,CACvB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAuB;QAChC,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC,CAAA;QACF,IAAI,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAA;YACjC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;QACjF,CAAC;QACD,4DAA4D;QAC5D,+DAA+D;QAC/D,0EAA0E;QAC1E,IAAI,MAAM,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAChC,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAA;YAC/D,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CACtC,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,mBAAmB,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAC1H,CAAA;QACH,CAAC;QACD,OAAO,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,CAAC,UAAsB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,CAAC,QAAkB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,UAAsB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ import type { AbsolutePath, WorkspaceId } from '@braidhq/schema';
2
+ export interface StatusedJsonStoreConfig<TEntity, TStatus extends string, TId extends string> {
3
+ readonly entityName: string;
4
+ readonly statuses: readonly TStatus[];
5
+ readonly idOf: (entity: TEntity) => TId;
6
+ readonly statusOf: (entity: TEntity) => TStatus;
7
+ readonly workspaceIdOf: (entity: TEntity) => WorkspaceId;
8
+ readonly dirFor: (workspaceRoot: AbsolutePath, status: TStatus) => string;
9
+ readonly parse: (raw: unknown) => TEntity;
10
+ readonly serialize: (entity: TEntity) => unknown;
11
+ }
12
+ export interface StatusedJsonListFilter<TStatus extends string> {
13
+ readonly workspaceId?: WorkspaceId;
14
+ readonly statuses?: readonly TStatus[];
15
+ }
16
+ export declare class StatusedJsonStore<TEntity, TStatus extends string, TId extends string> {
17
+ private readonly config;
18
+ private readonly workspaceRoots;
19
+ constructor(config: StatusedJsonStoreConfig<TEntity, TStatus, TId>, workspaceRoots: () => Promise<ReadonlyMap<WorkspaceId, AbsolutePath>>);
20
+ list(filter?: StatusedJsonListFilter<TStatus>): Promise<TEntity[]>;
21
+ load(id: TId): Promise<TEntity>;
22
+ save(entity: TEntity): Promise<void>;
23
+ remove(id: TId): Promise<void>;
24
+ locate(id: TId): Promise<{
25
+ readonly path: string;
26
+ readonly status: TStatus;
27
+ } | undefined>;
28
+ private candidateRoots;
29
+ }
30
+ //# sourceMappingURL=StatusedJsonStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusedJsonStore.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/hitl/StatusedJsonStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAMhE,MAAM,WAAW,uBAAuB,CAAC,OAAO,EAAE,OAAO,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM;IAI1F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;IAGrC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,GAAG,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAA;IAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,CAAA;IAExD,QAAQ,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAA;IAIzE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;IACzC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAA;CACjD;AAED,MAAM,WAAW,sBAAsB,CAAC,OAAO,SAAS,MAAM;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;CACvC;AAED,qBAAa,iBAAiB,CAAC,OAAO,EAAE,OAAO,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM;IAE9E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,MAAM,EAAE,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EACtD,cAAc,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAGlF,IAAI,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBlE,IAAI,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/B,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAepC,MAAM,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9B,MAAM,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;YAkBjF,cAAc;CAS7B"}
@@ -1,8 +1,8 @@
1
1
  import { rm } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  import { NotFoundError } from '@braidhq/core';
4
- import { listJsonFiles, moveFile, readJsonFile, writeJsonFile } from './jsonFileStore.js';
5
- export class FsStatusedJsonRepository {
4
+ import { listJsonFiles, moveFile, readJsonFile, writeJsonFile } from '../_shared/jsonFileStore.js';
5
+ export class StatusedJsonStore {
6
6
  config;
7
7
  workspaceRoots;
8
8
  constructor(config, workspaceRoots) {
@@ -76,4 +76,4 @@ export class FsStatusedJsonRepository {
76
76
  return root ? new Map([[workspaceId, root]]) : new Map();
77
77
  }
78
78
  }
79
- //# sourceMappingURL=FsStatusedJsonRepository.js.map
79
+ //# sourceMappingURL=StatusedJsonStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusedJsonStore.js","sourceRoot":"","sources":["../../../src/infrastructure/hitl/StatusedJsonStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { ModelSerializer, Workspace } from '@braidhq/core';
2
+ import type { ModelSnapshot } from '@braidhq/schema';
3
+ import { z } from 'zod';
4
+ export declare const MODEL_JSON_VERSION = 1;
5
+ export declare const ModelJsonFile: z.ZodObject<{
6
+ version: z.ZodNumber;
7
+ nodes: z.ZodArray<z.ZodObject<{
8
+ id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
9
+ type: z.core.$ZodBranded<z.ZodString, "NodeTypeId", "out">;
10
+ name: z.ZodString;
11
+ description: z.ZodOptional<z.ZodString>;
12
+ status: z.ZodEnum<{
13
+ completed: "completed";
14
+ deprecated: "deprecated";
15
+ draft: "draft";
16
+ unclear: "unclear";
17
+ }>;
18
+ metadata: z.ZodObject<{
19
+ missingRoles: z.ZodOptional<z.ZodArray<z.core.$ZodBranded<z.ZodString, "SourceRole", "out">>>;
20
+ sourceReferences: z.ZodDefault<z.ZodArray<z.ZodObject<{
21
+ sourceId: z.core.$ZodBranded<z.ZodString, "SourceId", "out">;
22
+ location: z.ZodObject<{
23
+ uri: z.ZodString;
24
+ startLine: z.ZodOptional<z.ZodNumber>;
25
+ endLine: z.ZodOptional<z.ZodNumber>;
26
+ anchor: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>;
28
+ snippet: z.ZodOptional<z.ZodString>;
29
+ }, z.core.$strip>>>;
30
+ lastTouchedBy: z.ZodOptional<z.core.$ZodBranded<z.ZodString, "SkillId", "out">>;
31
+ externalReferences: z.ZodOptional<z.ZodArray<z.ZodObject<{
32
+ kind: z.core.$ZodBranded<z.ZodString, "ExternalReferenceKind", "out">;
33
+ url: z.ZodString;
34
+ label: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>>>;
36
+ driftIssues: z.ZodOptional<z.ZodArray<z.ZodObject<{
37
+ id: z.core.$ZodBranded<z.ZodString, "DriftIssueId", "out">;
38
+ description: z.ZodString;
39
+ severity: z.ZodEnum<{
40
+ error: "error";
41
+ warning: "warning";
42
+ info: "info";
43
+ }>;
44
+ sourceReferences: z.ZodArray<z.ZodObject<{
45
+ sourceId: z.core.$ZodBranded<z.ZodString, "SourceId", "out">;
46
+ location: z.ZodObject<{
47
+ uri: z.ZodString;
48
+ startLine: z.ZodOptional<z.ZodNumber>;
49
+ endLine: z.ZodOptional<z.ZodNumber>;
50
+ anchor: z.ZodOptional<z.ZodString>;
51
+ }, z.core.$strip>;
52
+ snippet: z.ZodOptional<z.ZodString>;
53
+ }, z.core.$strip>>;
54
+ raisedAt: z.ZodString;
55
+ }, z.core.$strip>>>;
56
+ acknowledgedDrifts: z.ZodOptional<z.ZodArray<z.ZodString>>;
57
+ }, z.core.$strip>;
58
+ embedding: z.ZodOptional<z.ZodObject<{
59
+ vector: z.ZodArray<z.ZodNumber>;
60
+ modelId: z.ZodString;
61
+ createdAt: z.ZodString;
62
+ }, z.core.$strip>>;
63
+ }, z.core.$strip>>;
64
+ edges: z.ZodArray<z.ZodObject<{
65
+ id: z.core.$ZodBranded<z.ZodString, "EdgeId", "out">;
66
+ type: z.core.$ZodBranded<z.ZodString, "EdgeTypeId", "out">;
67
+ fromNodeId: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
68
+ toNodeId: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
69
+ metadata: z.ZodObject<{
70
+ sourceReferences: z.ZodDefault<z.ZodArray<z.ZodObject<{
71
+ sourceId: z.core.$ZodBranded<z.ZodString, "SourceId", "out">;
72
+ location: z.ZodObject<{
73
+ uri: z.ZodString;
74
+ startLine: z.ZodOptional<z.ZodNumber>;
75
+ endLine: z.ZodOptional<z.ZodNumber>;
76
+ anchor: z.ZodOptional<z.ZodString>;
77
+ }, z.core.$strip>;
78
+ snippet: z.ZodOptional<z.ZodString>;
79
+ }, z.core.$strip>>>;
80
+ lastTouchedBy: z.ZodOptional<z.core.$ZodBranded<z.ZodString, "SkillId", "out">>;
81
+ externalReferences: z.ZodOptional<z.ZodArray<z.ZodObject<{
82
+ kind: z.core.$ZodBranded<z.ZodString, "ExternalReferenceKind", "out">;
83
+ url: z.ZodString;
84
+ label: z.ZodOptional<z.ZodString>;
85
+ }, z.core.$strip>>>;
86
+ }, z.core.$strip>;
87
+ }, z.core.$strip>>;
88
+ }, z.core.$strip>;
89
+ export declare class FsModelSerializer implements ModelSerializer {
90
+ write(workspace: Workspace, snapshot: ModelSnapshot): Promise<void>;
91
+ read(workspace: Workspace): Promise<ModelSnapshot | null>;
92
+ exists(workspace: Workspace): Promise<boolean>;
93
+ }
94
+ //# sourceMappingURL=FsModelSerializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsModelSerializer.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/model/FsModelSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAEnC,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIxB,CAAA;AAEF,qBAAa,iBAAkB,YAAW,eAAe;IACjD,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAenE,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmBzD,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;CASrD"}
@@ -2,24 +2,24 @@ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
2
2
  import process from 'node:process';
3
3
  import { GraphEdge, GraphNode } from '@braidhq/schema';
4
4
  import { z } from 'zod';
5
- import { graphJsonPath, workspaceArtifactsDir } from './paths.js';
6
- export const GRAPH_JSON_VERSION = 1;
7
- export const GraphJsonFile = z.object({
5
+ import { graphJsonPath, workspaceArtifactsDir } from '../_shared/paths.js';
6
+ export const MODEL_JSON_VERSION = 1;
7
+ export const ModelJsonFile = z.object({
8
8
  version: z.number().int(),
9
9
  nodes: z.array(GraphNode),
10
10
  edges: z.array(GraphEdge),
11
11
  });
12
- export class FsGraphSerializer {
12
+ export class FsModelSerializer {
13
13
  async write(workspace, snapshot) {
14
14
  const path = graphJsonPath(workspace.rootPath);
15
15
  await mkdir(workspaceArtifactsDir(workspace.rootPath), { recursive: true });
16
16
  const payload = {
17
- version: GRAPH_JSON_VERSION,
17
+ version: MODEL_JSON_VERSION,
18
18
  nodes: [...snapshot.nodes].sort(byId),
19
19
  edges: [...snapshot.edges].sort(byId),
20
20
  };
21
- // Atomic write so a crashed server can't leave a half-file that
22
- // mis-hydrates Kùzu on restart.
21
+ // Atomic write. A crashed server must not leave a half-file behind,
22
+ // one that would mis-hydrate Kùzu on the next restart.
23
23
  const tmp = `${path}.tmp-${process.pid}-${Date.now()}`;
24
24
  await writeFile(tmp, `${JSON.stringify(payload, null, 2)}\n`, 'utf-8');
25
25
  await rename(tmp, path);
@@ -34,9 +34,9 @@ export class FsGraphSerializer {
34
34
  return null;
35
35
  throw error;
36
36
  }
37
- const parsed = GraphJsonFile.parse(JSON.parse(raw));
38
- if (parsed.version !== GRAPH_JSON_VERSION) {
39
- throw new Error(`graph.json version mismatch in ${workspace.rootPath}: expected ${GRAPH_JSON_VERSION}, got ${parsed.version}`);
37
+ const parsed = ModelJsonFile.parse(JSON.parse(raw));
38
+ if (parsed.version !== MODEL_JSON_VERSION) {
39
+ throw new Error(`model.json version mismatch in ${workspace.rootPath}: expected ${MODEL_JSON_VERSION}, got ${parsed.version}`);
40
40
  }
41
41
  return { nodes: parsed.nodes, edges: parsed.edges };
42
42
  }
@@ -57,4 +57,4 @@ function byId(a, b) {
57
57
  return 1;
58
58
  return 0;
59
59
  }
60
- //# sourceMappingURL=FsGraphSerializer.js.map
60
+ //# sourceMappingURL=FsModelSerializer.js.map