@braidhq/server 0.1.0 → 0.2.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 (385) hide show
  1. package/README.md +134 -106
  2. package/dist/app.d.ts +7 -15
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js +72 -45
  5. package/dist/app.js.map +1 -1
  6. package/dist/authMode.d.ts +39 -0
  7. package/dist/authMode.d.ts.map +1 -0
  8. package/dist/authMode.js +50 -0
  9. package/dist/authMode.js.map +1 -0
  10. package/dist/composeApp.d.ts +79 -0
  11. package/dist/composeApp.d.ts.map +1 -0
  12. package/dist/composeApp.js +136 -0
  13. package/dist/composeApp.js.map +1 -0
  14. package/dist/composeFsApp.d.ts +27 -0
  15. package/dist/composeFsApp.d.ts.map +1 -0
  16. package/dist/{composeFs.js → composeFsApp.js} +118 -125
  17. package/dist/composeFsApp.js.map +1 -0
  18. package/dist/index.d.ts +3 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/infrastructure/_shared/env.d.ts +10 -0
  23. package/dist/infrastructure/_shared/env.d.ts.map +1 -0
  24. package/dist/infrastructure/{env.js → _shared/env.js} +5 -6
  25. package/dist/infrastructure/_shared/env.js.map +1 -0
  26. package/dist/infrastructure/_shared/frontmatter.d.ts +13 -0
  27. package/dist/infrastructure/_shared/frontmatter.d.ts.map +1 -0
  28. package/dist/infrastructure/{fs → _shared}/frontmatter.js +5 -5
  29. package/dist/infrastructure/_shared/frontmatter.js.map +1 -0
  30. package/dist/infrastructure/_shared/jsonFileStore.d.ts.map +1 -0
  31. package/dist/infrastructure/_shared/jsonFileStore.js.map +1 -0
  32. package/dist/infrastructure/{fs → _shared}/paths.d.ts +17 -10
  33. package/dist/infrastructure/_shared/paths.d.ts.map +1 -0
  34. package/dist/infrastructure/{fs → _shared}/paths.js +27 -20
  35. package/dist/infrastructure/_shared/paths.js.map +1 -0
  36. package/dist/infrastructure/auth/AccessPolicy.d.ts +33 -58
  37. package/dist/infrastructure/auth/AccessPolicy.d.ts.map +1 -1
  38. package/dist/infrastructure/auth/AccessPolicy.js +35 -42
  39. package/dist/infrastructure/auth/AccessPolicy.js.map +1 -1
  40. package/dist/infrastructure/auth/SessionStore.d.ts +22 -12
  41. package/dist/infrastructure/auth/SessionStore.d.ts.map +1 -1
  42. package/dist/infrastructure/auth/SessionStore.js +15 -18
  43. package/dist/infrastructure/auth/SessionStore.js.map +1 -1
  44. package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts +79 -0
  45. package/dist/infrastructure/batch/FsBatchPlanRepository.d.ts.map +1 -0
  46. package/dist/infrastructure/{fs → batch}/FsBatchPlanRepository.js +1 -1
  47. package/dist/infrastructure/batch/FsBatchPlanRepository.js.map +1 -0
  48. package/dist/infrastructure/history/GitWorkspaceHistory.d.ts.map +1 -0
  49. package/dist/infrastructure/{git → history}/GitWorkspaceHistory.js +31 -24
  50. package/dist/infrastructure/history/GitWorkspaceHistory.js.map +1 -0
  51. package/dist/infrastructure/history/commitMessage.d.ts.map +1 -0
  52. package/dist/infrastructure/history/commitMessage.js +90 -0
  53. package/dist/infrastructure/history/commitMessage.js.map +1 -0
  54. package/dist/infrastructure/hitl/FsClarificationRepository.d.ts +13 -0
  55. package/dist/infrastructure/hitl/FsClarificationRepository.d.ts.map +1 -0
  56. package/dist/infrastructure/{fs/FsClarifyTicketRepository.js → hitl/FsClarificationRepository.js} +15 -15
  57. package/dist/infrastructure/hitl/FsClarificationRepository.js.map +1 -0
  58. package/dist/infrastructure/hitl/FsProposalRepository.d.ts.map +1 -0
  59. package/dist/infrastructure/{fs → hitl}/FsProposalRepository.js +7 -8
  60. package/dist/infrastructure/hitl/FsProposalRepository.js.map +1 -0
  61. package/dist/infrastructure/hitl/StatusedJsonStore.d.ts +30 -0
  62. package/dist/infrastructure/hitl/StatusedJsonStore.d.ts.map +1 -0
  63. package/dist/infrastructure/{fs/FsStatusedJsonRepository.js → hitl/StatusedJsonStore.js} +3 -3
  64. package/dist/infrastructure/hitl/StatusedJsonStore.js.map +1 -0
  65. package/dist/infrastructure/model/FsModelSerializer.d.ts +96 -0
  66. package/dist/infrastructure/model/FsModelSerializer.d.ts.map +1 -0
  67. package/dist/infrastructure/{fs/FsGraphSerializer.js → model/FsModelSerializer.js} +11 -11
  68. package/dist/infrastructure/model/FsModelSerializer.js.map +1 -0
  69. package/dist/infrastructure/oauth/GoogleOAuth.d.ts +20 -38
  70. package/dist/infrastructure/oauth/GoogleOAuth.d.ts.map +1 -1
  71. package/dist/infrastructure/oauth/GoogleOAuth.js +21 -22
  72. package/dist/infrastructure/oauth/GoogleOAuth.js.map +1 -1
  73. package/dist/infrastructure/reactor/FsReactorCycleRepository.d.ts +29 -0
  74. package/dist/infrastructure/reactor/FsReactorCycleRepository.d.ts.map +1 -0
  75. package/dist/infrastructure/reactor/FsReactorCycleRepository.js +94 -0
  76. package/dist/infrastructure/reactor/FsReactorCycleRepository.js.map +1 -0
  77. package/dist/infrastructure/secrets/SecretStore.d.ts +11 -14
  78. package/dist/infrastructure/secrets/SecretStore.d.ts.map +1 -1
  79. package/dist/infrastructure/secrets/SecretStore.js +4 -4
  80. package/dist/infrastructure/secrets/SecretStore.js.map +1 -1
  81. package/dist/infrastructure/{fs → skill}/FsRunRepository.d.ts +5 -3
  82. package/dist/infrastructure/skill/FsRunRepository.d.ts.map +1 -0
  83. package/dist/infrastructure/{fs → skill}/FsRunRepository.js +11 -9
  84. package/dist/infrastructure/skill/FsRunRepository.js.map +1 -0
  85. package/dist/infrastructure/{fs → skill}/FsSkillRegistry.d.ts +4 -13
  86. package/dist/infrastructure/skill/FsSkillRegistry.d.ts.map +1 -0
  87. package/dist/infrastructure/{fs → skill}/FsSkillRegistry.js +28 -20
  88. package/dist/infrastructure/skill/FsSkillRegistry.js.map +1 -0
  89. package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts +52 -0
  90. package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts.map +1 -0
  91. package/dist/infrastructure/{agent → skill}/SubprocessSkillRunner.js +107 -55
  92. package/dist/infrastructure/skill/SubprocessSkillRunner.js.map +1 -0
  93. package/dist/infrastructure/skill/asyncQueue.d.ts +20 -0
  94. package/dist/infrastructure/skill/asyncQueue.d.ts.map +1 -0
  95. package/dist/infrastructure/{agent → skill}/asyncQueue.js +2 -3
  96. package/dist/infrastructure/{agent → skill}/asyncQueue.js.map +1 -1
  97. package/dist/infrastructure/skill/lineBuffer.d.ts +15 -0
  98. package/dist/infrastructure/skill/lineBuffer.d.ts.map +1 -0
  99. package/dist/infrastructure/{agent/streamJsonParser.js → skill/lineBuffer.js} +5 -17
  100. package/dist/infrastructure/skill/lineBuffer.js.map +1 -0
  101. package/dist/infrastructure/skill/orphanReaper.d.ts +20 -0
  102. package/dist/infrastructure/skill/orphanReaper.d.ts.map +1 -0
  103. package/dist/infrastructure/{orphanReaper.js → skill/orphanReaper.js} +7 -5
  104. package/dist/infrastructure/skill/orphanReaper.js.map +1 -0
  105. package/dist/infrastructure/skill/subprocessEventStream.d.ts +16 -0
  106. package/dist/infrastructure/skill/subprocessEventStream.d.ts.map +1 -0
  107. package/dist/infrastructure/skill/subprocessEventStream.js +29 -0
  108. package/dist/infrastructure/skill/subprocessEventStream.js.map +1 -0
  109. package/dist/infrastructure/source/FsSourceUnitDigest.d.ts +19 -0
  110. package/dist/infrastructure/source/FsSourceUnitDigest.d.ts.map +1 -0
  111. package/dist/infrastructure/{fs → source}/FsSourceUnitDigest.js +9 -9
  112. package/dist/infrastructure/source/FsSourceUnitDigest.js.map +1 -0
  113. package/dist/infrastructure/source/FsSourceUnitObservationRepository.d.ts +31 -0
  114. package/dist/infrastructure/source/FsSourceUnitObservationRepository.d.ts.map +1 -0
  115. package/dist/infrastructure/{fs/FsSourceUnitStateRepository.js → source/FsSourceUnitObservationRepository.js} +18 -17
  116. package/dist/infrastructure/source/FsSourceUnitObservationRepository.js.map +1 -0
  117. package/dist/infrastructure/{fs → source}/intentScan.d.ts +4 -0
  118. package/dist/infrastructure/source/intentScan.d.ts.map +1 -0
  119. package/dist/infrastructure/{fs → source}/intentScan.js +18 -16
  120. package/dist/infrastructure/source/intentScan.js.map +1 -0
  121. package/dist/infrastructure/users/UserDirectoryFromRegistry.d.ts +2 -2
  122. package/dist/infrastructure/users/UserDirectoryFromRegistry.js +2 -2
  123. package/dist/infrastructure/users/UserRegistryFile.d.ts +4 -5
  124. package/dist/infrastructure/users/UserRegistryFile.d.ts.map +1 -1
  125. package/dist/infrastructure/users/UserRegistryFile.js +6 -8
  126. package/dist/infrastructure/users/UserRegistryFile.js.map +1 -1
  127. package/dist/infrastructure/users/ensureWorkspaceOwners.d.ts +9 -6
  128. package/dist/infrastructure/users/ensureWorkspaceOwners.d.ts.map +1 -1
  129. package/dist/infrastructure/users/ensureWorkspaceOwners.js +10 -7
  130. package/dist/infrastructure/users/ensureWorkspaceOwners.js.map +1 -1
  131. package/dist/infrastructure/workspace/FsWorkspaceRepository.d.ts.map +1 -0
  132. package/dist/infrastructure/{fs → workspace}/FsWorkspaceRepository.js +7 -6
  133. package/dist/infrastructure/workspace/FsWorkspaceRepository.js.map +1 -0
  134. package/dist/infrastructure/workspace/WorkspaceDiscovery.d.ts +18 -0
  135. package/dist/infrastructure/workspace/WorkspaceDiscovery.d.ts.map +1 -0
  136. package/dist/infrastructure/{fs → workspace}/WorkspaceDiscovery.js +15 -11
  137. package/dist/infrastructure/workspace/WorkspaceDiscovery.js.map +1 -0
  138. package/dist/infrastructure/{fs → workspace}/WorkspaceRegistryFile.d.ts +10 -9
  139. package/dist/infrastructure/workspace/WorkspaceRegistryFile.d.ts.map +1 -0
  140. package/dist/infrastructure/{fs → workspace}/WorkspaceRegistryFile.js +15 -17
  141. package/dist/infrastructure/workspace/WorkspaceRegistryFile.js.map +1 -0
  142. package/dist/infrastructure/workspace/productManifestWriter.d.ts +24 -0
  143. package/dist/infrastructure/workspace/productManifestWriter.d.ts.map +1 -0
  144. package/dist/infrastructure/{fs → workspace}/productManifestWriter.js +14 -26
  145. package/dist/infrastructure/workspace/productManifestWriter.js.map +1 -0
  146. package/dist/middleware/auth.d.ts +27 -17
  147. package/dist/middleware/auth.d.ts.map +1 -1
  148. package/dist/middleware/auth.js +59 -53
  149. package/dist/middleware/auth.js.map +1 -1
  150. package/dist/middleware/cors.d.ts.map +1 -1
  151. package/dist/middleware/cors.js +4 -1
  152. package/dist/middleware/cors.js.map +1 -1
  153. package/dist/middleware/error.d.ts.map +1 -1
  154. package/dist/middleware/error.js +15 -13
  155. package/dist/middleware/error.js.map +1 -1
  156. package/dist/middleware/workspaceAccess.d.ts +23 -19
  157. package/dist/middleware/workspaceAccess.d.ts.map +1 -1
  158. package/dist/middleware/workspaceAccess.js +31 -26
  159. package/dist/middleware/workspaceAccess.js.map +1 -1
  160. package/dist/policy/CapabilityCheck.d.ts +5 -5
  161. package/dist/policy/PermissionRegistry.d.ts +11 -9
  162. package/dist/policy/PermissionRegistry.d.ts.map +1 -1
  163. package/dist/policy/PermissionRegistry.js +10 -8
  164. package/dist/policy/PermissionRegistry.js.map +1 -1
  165. package/dist/policy/ViewerContext.d.ts +13 -11
  166. package/dist/policy/ViewerContext.d.ts.map +1 -1
  167. package/dist/policy/checks.d.ts +9 -9
  168. package/dist/policy/checks.d.ts.map +1 -1
  169. package/dist/policy/checks.js +14 -11
  170. package/dist/policy/checks.js.map +1 -1
  171. package/dist/policy/defaultRegistry.d.ts +3 -4
  172. package/dist/policy/defaultRegistry.d.ts.map +1 -1
  173. package/dist/policy/defaultRegistry.js +3 -4
  174. package/dist/policy/defaultRegistry.js.map +1 -1
  175. package/dist/policy/index.d.ts +2 -2
  176. package/dist/policy/index.d.ts.map +1 -1
  177. package/dist/policy/index.js +1 -1
  178. package/dist/policy/index.js.map +1 -1
  179. package/dist/policy/resolveViewer.d.ts +9 -9
  180. package/dist/policy/resolveViewer.js +9 -9
  181. package/dist/routes/_shared.d.ts +93 -153
  182. package/dist/routes/_shared.d.ts.map +1 -1
  183. package/dist/routes/_shared.js +9 -5
  184. package/dist/routes/_shared.js.map +1 -1
  185. package/dist/routes/admin.d.ts +1 -1
  186. package/dist/routes/admin.d.ts.map +1 -1
  187. package/dist/routes/admin.js +13 -12
  188. package/dist/routes/admin.js.map +1 -1
  189. package/dist/routes/auth.d.ts +12 -10
  190. package/dist/routes/auth.d.ts.map +1 -1
  191. package/dist/routes/auth.js +32 -34
  192. package/dist/routes/auth.js.map +1 -1
  193. package/dist/routes/clarifications.d.ts +8 -0
  194. package/dist/routes/clarifications.d.ts.map +1 -0
  195. package/dist/routes/clarifications.js +243 -0
  196. package/dist/routes/clarifications.js.map +1 -0
  197. package/dist/routes/edges.d.ts.map +1 -1
  198. package/dist/routes/edges.js +2 -6
  199. package/dist/routes/edges.js.map +1 -1
  200. package/dist/routes/history.d.ts.map +1 -1
  201. package/dist/routes/history.js +12 -10
  202. package/dist/routes/history.js.map +1 -1
  203. package/dist/routes/nodes.d.ts.map +1 -1
  204. package/dist/routes/nodes.js +4 -8
  205. package/dist/routes/nodes.js.map +1 -1
  206. package/dist/routes/oauth.d.ts +6 -7
  207. package/dist/routes/oauth.d.ts.map +1 -1
  208. package/dist/routes/oauth.js +6 -7
  209. package/dist/routes/oauth.js.map +1 -1
  210. package/dist/routes/proposals.d.ts +2 -2
  211. package/dist/routes/proposals.d.ts.map +1 -1
  212. package/dist/routes/proposals.js +30 -28
  213. package/dist/routes/proposals.js.map +1 -1
  214. package/dist/routes/reactorCycles.d.ts +7 -0
  215. package/dist/routes/reactorCycles.d.ts.map +1 -0
  216. package/dist/routes/reactorCycles.js +60 -0
  217. package/dist/routes/reactorCycles.js.map +1 -0
  218. package/dist/routes/runs.d.ts.map +1 -1
  219. package/dist/routes/runs.js +22 -19
  220. package/dist/routes/runs.js.map +1 -1
  221. package/dist/routes/skillInputOptions.d.ts +2 -2
  222. package/dist/routes/skillInputOptions.d.ts.map +1 -1
  223. package/dist/routes/skillInputOptions.js +43 -45
  224. package/dist/routes/skillInputOptions.js.map +1 -1
  225. package/dist/routes/skills.d.ts +19 -1
  226. package/dist/routes/skills.d.ts.map +1 -1
  227. package/dist/routes/skills.js +139 -7
  228. package/dist/routes/skills.js.map +1 -1
  229. package/dist/routes/sourceLoaders.d.ts.map +1 -1
  230. package/dist/routes/sourceLoaders.js +1 -0
  231. package/dist/routes/sourceLoaders.js.map +1 -1
  232. package/dist/routes/sourceUnitObservations.d.ts +20 -0
  233. package/dist/routes/sourceUnitObservations.d.ts.map +1 -0
  234. package/dist/routes/sourceUnitObservations.js +80 -0
  235. package/dist/routes/sourceUnitObservations.js.map +1 -0
  236. package/dist/routes/sourceWebhooks.d.ts +26 -0
  237. package/dist/routes/sourceWebhooks.d.ts.map +1 -0
  238. package/dist/routes/sourceWebhooks.js +301 -0
  239. package/dist/routes/sourceWebhooks.js.map +1 -0
  240. package/dist/routes/users.d.ts +0 -2
  241. package/dist/routes/users.d.ts.map +1 -1
  242. package/dist/routes/users.js +15 -33
  243. package/dist/routes/users.js.map +1 -1
  244. package/dist/routes/workspaceEvents.d.ts +5 -4
  245. package/dist/routes/workspaceEvents.d.ts.map +1 -1
  246. package/dist/routes/workspaceEvents.js +7 -6
  247. package/dist/routes/workspaceEvents.js.map +1 -1
  248. package/dist/routes/workspaceMembers.d.ts +1 -1
  249. package/dist/routes/workspaceMembers.d.ts.map +1 -1
  250. package/dist/routes/workspaceMembers.js +2 -2
  251. package/dist/routes/workspaceMembers.js.map +1 -1
  252. package/dist/routes/workspaces.d.ts +21 -10
  253. package/dist/routes/workspaces.d.ts.map +1 -1
  254. package/dist/routes/workspaces.js +97 -69
  255. package/dist/routes/workspaces.js.map +1 -1
  256. package/dist/server.js +6 -70
  257. package/dist/server.js.map +1 -1
  258. package/dist/startServer.d.ts +17 -0
  259. package/dist/startServer.d.ts.map +1 -0
  260. package/dist/startServer.js +81 -0
  261. package/dist/startServer.js.map +1 -0
  262. package/dist/startup.d.ts +28 -0
  263. package/dist/startup.d.ts.map +1 -0
  264. package/dist/startup.js +94 -0
  265. package/dist/startup.js.map +1 -0
  266. package/package.json +9 -9
  267. package/dist/composeFs.d.ts +0 -55
  268. package/dist/composeFs.d.ts.map +0 -1
  269. package/dist/composeFs.js.map +0 -1
  270. package/dist/composition.d.ts +0 -133
  271. package/dist/composition.d.ts.map +0 -1
  272. package/dist/composition.js +0 -113
  273. package/dist/composition.js.map +0 -1
  274. package/dist/infrastructure/agent/SubprocessSkillRunner.d.ts +0 -75
  275. package/dist/infrastructure/agent/SubprocessSkillRunner.d.ts.map +0 -1
  276. package/dist/infrastructure/agent/SubprocessSkillRunner.js.map +0 -1
  277. package/dist/infrastructure/agent/asyncQueue.d.ts +0 -22
  278. package/dist/infrastructure/agent/asyncQueue.d.ts.map +0 -1
  279. package/dist/infrastructure/agent/mcpConfig.d.ts +0 -38
  280. package/dist/infrastructure/agent/mcpConfig.d.ts.map +0 -1
  281. package/dist/infrastructure/agent/mcpConfig.js +0 -55
  282. package/dist/infrastructure/agent/mcpConfig.js.map +0 -1
  283. package/dist/infrastructure/agent/streamJsonParser.d.ts +0 -20
  284. package/dist/infrastructure/agent/streamJsonParser.d.ts.map +0 -1
  285. package/dist/infrastructure/agent/streamJsonParser.js.map +0 -1
  286. package/dist/infrastructure/agent/subprocessEventStream.d.ts +0 -26
  287. package/dist/infrastructure/agent/subprocessEventStream.d.ts.map +0 -1
  288. package/dist/infrastructure/agent/subprocessEventStream.js +0 -112
  289. package/dist/infrastructure/agent/subprocessEventStream.js.map +0 -1
  290. package/dist/infrastructure/auth/ensureApprovedEmails.d.ts +0 -16
  291. package/dist/infrastructure/auth/ensureApprovedEmails.d.ts.map +0 -1
  292. package/dist/infrastructure/auth/ensureApprovedEmails.js +0 -20
  293. package/dist/infrastructure/auth/ensureApprovedEmails.js.map +0 -1
  294. package/dist/infrastructure/env.d.ts +0 -11
  295. package/dist/infrastructure/env.d.ts.map +0 -1
  296. package/dist/infrastructure/env.js.map +0 -1
  297. package/dist/infrastructure/fs/FsBatchPlanRepository.d.ts +0 -300
  298. package/dist/infrastructure/fs/FsBatchPlanRepository.d.ts.map +0 -1
  299. package/dist/infrastructure/fs/FsBatchPlanRepository.js.map +0 -1
  300. package/dist/infrastructure/fs/FsClarifyTicketRepository.d.ts +0 -13
  301. package/dist/infrastructure/fs/FsClarifyTicketRepository.d.ts.map +0 -1
  302. package/dist/infrastructure/fs/FsClarifyTicketRepository.js.map +0 -1
  303. package/dist/infrastructure/fs/FsDecisionRepository.d.ts +0 -13
  304. package/dist/infrastructure/fs/FsDecisionRepository.d.ts.map +0 -1
  305. package/dist/infrastructure/fs/FsDecisionRepository.js +0 -56
  306. package/dist/infrastructure/fs/FsDecisionRepository.js.map +0 -1
  307. package/dist/infrastructure/fs/FsGraphSerializer.d.ts +0 -629
  308. package/dist/infrastructure/fs/FsGraphSerializer.d.ts.map +0 -1
  309. package/dist/infrastructure/fs/FsGraphSerializer.js.map +0 -1
  310. package/dist/infrastructure/fs/FsProposalRepository.d.ts.map +0 -1
  311. package/dist/infrastructure/fs/FsProposalRepository.js.map +0 -1
  312. package/dist/infrastructure/fs/FsRunRepository.d.ts.map +0 -1
  313. package/dist/infrastructure/fs/FsRunRepository.js.map +0 -1
  314. package/dist/infrastructure/fs/FsSkillRegistry.d.ts.map +0 -1
  315. package/dist/infrastructure/fs/FsSkillRegistry.js.map +0 -1
  316. package/dist/infrastructure/fs/FsSourceUnitDigest.d.ts +0 -19
  317. package/dist/infrastructure/fs/FsSourceUnitDigest.d.ts.map +0 -1
  318. package/dist/infrastructure/fs/FsSourceUnitDigest.js.map +0 -1
  319. package/dist/infrastructure/fs/FsSourceUnitStateRepository.d.ts +0 -30
  320. package/dist/infrastructure/fs/FsSourceUnitStateRepository.d.ts.map +0 -1
  321. package/dist/infrastructure/fs/FsSourceUnitStateRepository.js.map +0 -1
  322. package/dist/infrastructure/fs/FsStatusedJsonRepository.d.ts +0 -35
  323. package/dist/infrastructure/fs/FsStatusedJsonRepository.d.ts.map +0 -1
  324. package/dist/infrastructure/fs/FsStatusedJsonRepository.js.map +0 -1
  325. package/dist/infrastructure/fs/FsWorkspaceRepository.d.ts.map +0 -1
  326. package/dist/infrastructure/fs/FsWorkspaceRepository.js.map +0 -1
  327. package/dist/infrastructure/fs/WorkspaceDiscovery.d.ts +0 -15
  328. package/dist/infrastructure/fs/WorkspaceDiscovery.d.ts.map +0 -1
  329. package/dist/infrastructure/fs/WorkspaceDiscovery.js.map +0 -1
  330. package/dist/infrastructure/fs/WorkspaceRegistryFile.d.ts.map +0 -1
  331. package/dist/infrastructure/fs/WorkspaceRegistryFile.js.map +0 -1
  332. package/dist/infrastructure/fs/frontmatter.d.ts +0 -13
  333. package/dist/infrastructure/fs/frontmatter.d.ts.map +0 -1
  334. package/dist/infrastructure/fs/frontmatter.js.map +0 -1
  335. package/dist/infrastructure/fs/intentScan.d.ts.map +0 -1
  336. package/dist/infrastructure/fs/intentScan.js.map +0 -1
  337. package/dist/infrastructure/fs/jsonFileStore.d.ts.map +0 -1
  338. package/dist/infrastructure/fs/jsonFileStore.js.map +0 -1
  339. package/dist/infrastructure/fs/paths.d.ts.map +0 -1
  340. package/dist/infrastructure/fs/paths.js.map +0 -1
  341. package/dist/infrastructure/fs/productManifestWriter.d.ts +0 -22
  342. package/dist/infrastructure/fs/productManifestWriter.d.ts.map +0 -1
  343. package/dist/infrastructure/fs/productManifestWriter.js.map +0 -1
  344. package/dist/infrastructure/git/GitWorkspaceHistory.d.ts.map +0 -1
  345. package/dist/infrastructure/git/GitWorkspaceHistory.js.map +0 -1
  346. package/dist/infrastructure/git/commitMessage.d.ts.map +0 -1
  347. package/dist/infrastructure/git/commitMessage.js +0 -71
  348. package/dist/infrastructure/git/commitMessage.js.map +0 -1
  349. package/dist/infrastructure/orphanReaper.d.ts +0 -18
  350. package/dist/infrastructure/orphanReaper.d.ts.map +0 -1
  351. package/dist/infrastructure/orphanReaper.js.map +0 -1
  352. package/dist/infrastructure/users/ensureLocalUser.d.ts +0 -15
  353. package/dist/infrastructure/users/ensureLocalUser.d.ts.map +0 -1
  354. package/dist/infrastructure/users/ensureLocalUser.js +0 -38
  355. package/dist/infrastructure/users/ensureLocalUser.js.map +0 -1
  356. package/dist/middleware/requireAdmin.d.ts +0 -10
  357. package/dist/middleware/requireAdmin.d.ts.map +0 -1
  358. package/dist/middleware/requireAdmin.js +0 -24
  359. package/dist/middleware/requireAdmin.js.map +0 -1
  360. package/dist/middleware/userId.d.ts +0 -16
  361. package/dist/middleware/userId.d.ts.map +0 -1
  362. package/dist/middleware/userId.js +0 -27
  363. package/dist/middleware/userId.js.map +0 -1
  364. package/dist/policy/Capability.d.ts +0 -12
  365. package/dist/policy/Capability.d.ts.map +0 -1
  366. package/dist/policy/Capability.js +0 -31
  367. package/dist/policy/Capability.js.map +0 -1
  368. package/dist/routes/clarify.d.ts +0 -9
  369. package/dist/routes/clarify.d.ts.map +0 -1
  370. package/dist/routes/clarify.js +0 -274
  371. package/dist/routes/clarify.js.map +0 -1
  372. package/dist/routes/decisions.d.ts +0 -7
  373. package/dist/routes/decisions.d.ts.map +0 -1
  374. package/dist/routes/decisions.js +0 -68
  375. package/dist/routes/decisions.js.map +0 -1
  376. package/dist/routes/sourceUnitStates.d.ts +0 -7
  377. package/dist/routes/sourceUnitStates.d.ts.map +0 -1
  378. package/dist/routes/sourceUnitStates.js +0 -45
  379. package/dist/routes/sourceUnitStates.js.map +0 -1
  380. /package/dist/infrastructure/{fs → _shared}/jsonFileStore.d.ts +0 -0
  381. /package/dist/infrastructure/{fs → _shared}/jsonFileStore.js +0 -0
  382. /package/dist/infrastructure/{git → history}/GitWorkspaceHistory.d.ts +0 -0
  383. /package/dist/infrastructure/{git → history}/commitMessage.d.ts +0 -0
  384. /package/dist/infrastructure/{fs → hitl}/FsProposalRepository.d.ts +0 -0
  385. /package/dist/infrastructure/{fs → workspace}/FsWorkspaceRepository.d.ts +0 -0
@@ -1,34 +1,30 @@
1
- import { SkillInputOptionsResponse } from '@braidhq/schema';
1
+ import { SkillInputOptionsResponse, SourceId } from '@braidhq/schema';
2
2
  import { createRoute, OpenAPIHono, z } from '@hono/zod-openapi';
3
- import { listIntentItems } from '../infrastructure/fs/intentScan.js';
3
+ import { listIntentItems } from '../infrastructure/source/intentScan.js';
4
4
  import { getWorkspaceId } from '../middleware/workspaceId.js';
5
5
  import { WorkspaceIdParam } from './_shared.js';
6
6
  import { loadWorkspaceById } from './helpers.js';
7
7
  /**
8
- * Studio-facing endpoint that resolves a skill input provider type
9
- * (declared in a SKILL.md frontmatter) to the current option list for
10
- * a given workspace. Used by the typed Actions form to populate
11
- * pickers backed by `graph-node` / `source-intent` / `clarify` /
12
- * `proposal` rather than static options.
13
- *
14
- * The endpoint is intentionally read-only and lives alongside other
15
- * Studio-metadata routes; it's mounted under
16
- * `/workspaces/:workspaceId/skill-input-options`.
8
+ * Studio-facing endpoint that resolves a skill input provider kind,
9
+ * declared in a SKILL.md frontmatter, to the current option list,
10
+ * for a given workspace.
11
+ * The typed Actions form uses it to populate pickers,
12
+ * backed by `graph-node`, `source-intent`, or `clarify` (not static).
13
+ * Read-only, and lives alongside other Studio-metadata routes.
14
+ * Mounted under `/workspaces/:workspaceId/skill-input-options`.
17
15
  */
18
- const ProviderType = z.enum(['graph-node', 'source-intent', 'clarify', 'proposal']);
16
+ const ProviderKind = z.enum(['graph-node', 'source-intent', 'clarify']);
19
17
  const QuerySchema = z.object({
20
- type: ProviderType.openapi({ param: { name: 'type', in: 'query' } }),
21
- /**
22
- * JSON-encoded filter object. Shape depends on the provider:
23
- * graph-node -> { types?: string[]; statuses?: string[]; renderHint?: { container?: boolean } }
24
- * source-intent -> { loaderKind?: string }
25
- * clarify -> { status?: 'pending' | 'answered' | 'applied' | 'skipped' }
26
- * proposal -> { status?: 'pending' | 'applied' | 'rejected' }
27
- *
28
- * Query-string-encoded JSON keeps the schema simple while letting
29
- * each provider have a different filter shape. Studio is the only
30
- * intended caller; humans drafting URLs by hand will rarely need it.
31
- */
18
+ kind: ProviderKind.openapi({ param: { name: 'kind', in: 'query' } }),
19
+ // JSON-encoded filter object whose shape depends on the provider.
20
+ // graph-node uses `{ types?, statuses?, renderHint?: { container? } }`,
21
+ // source-intent uses `{ loaderKind? }`,
22
+ // and clarify uses `{ status?: pending | answered | applied | skipped }`.
23
+ //
24
+ // Query-string-encoded JSON keeps the schema simple,
25
+ // while letting each provider carry a different filter shape.
26
+ // Studio is the only intended caller.
27
+ // Humans drafting URLs by hand will rarely need it.
32
28
  filter: z.string().optional().openapi({ param: { name: 'filter', in: 'query' } }),
33
29
  });
34
30
  const route = createRoute({
@@ -53,29 +49,23 @@ export function createSkillInputOptionsRouter(deps) {
53
49
  router.openapi(route, async (context) => {
54
50
  const workspaceId = getWorkspaceId(context);
55
51
  const workspace = await loadWorkspaceById(workspaceId, deps.workspaceRepository);
56
- const { type, filter } = context.req.valid('query');
52
+ const { kind, filter } = context.req.valid('query');
57
53
  const parsedFilter = filter
58
54
  ? safeParseJson(filter)
59
55
  : {};
60
- const items = await resolveProvider(type, parsedFilter, workspace, deps);
56
+ const items = await resolveProvider(kind, parsedFilter, workspace, deps);
61
57
  return context.json({ items }, 200);
62
58
  });
63
59
  return router;
64
60
  }
65
- async function resolveProvider(type, filter, workspace, deps) {
66
- switch (type) {
61
+ async function resolveProvider(kind, filter, workspace, deps) {
62
+ switch (kind) {
67
63
  case 'graph-node':
68
64
  return resolveGraphNode(filter, workspace, deps);
69
65
  case 'source-intent':
70
66
  return resolveSourceIntent(filter, workspace);
71
67
  case 'clarify':
72
- return resolveClarify(filter, workspace.id, deps.clarifyRepository);
73
- case 'proposal':
74
- // Phase 2 leaves the proposal provider as a stub; no SKILL.md
75
- // wires it yet. Returning empty keeps the endpoint contract
76
- // stable while signalling "implement when a skill actually
77
- // declares it".
78
- return [];
68
+ return resolveClarification(filter, workspace.id, deps.clarificationRepository);
79
69
  }
80
70
  }
81
71
  async function resolveGraphNode(filter, workspace, deps) {
@@ -85,9 +75,9 @@ async function resolveGraphNode(filter, workspace, deps) {
85
75
  const wantContainerOnly = renderHint?.container === true;
86
76
  let typesToInclude = types;
87
77
  if (wantContainerOnly) {
88
- // Container-ness is an ontology concern: the ontology's node-type
89
- // descriptors carry `renderHint.container`. Intersect with any
90
- // explicit `types` filter so both axes compose.
78
+ // Container-ness is an ontology concern.
79
+ // Its node-type descriptors carry `renderHint.container`.
80
+ // Intersect with any explicit `types` filter so both axes compose.
91
81
  const ontology = deps.pluginRegistry.requireOntology(workspace.productManifest.ontologyId);
92
82
  const containerTypeIds = ontology.nodeTypes
93
83
  .filter(descriptor => descriptor.renderHint?.container === true)
@@ -120,15 +110,23 @@ async function resolveSourceIntent(filter, workspace) {
120
110
  const source = workspace.sources.find(s => s.id === item.sourceId);
121
111
  return source?.kind === 'filesystem' && source.loader?.kind === loaderKindFilter;
122
112
  })
123
- .map(item => ({
124
- value: item.value,
125
- label: item.label,
126
- description: item.sourceName,
127
- }));
113
+ .map((item) => {
114
+ // Use safeParse here.
115
+ // A hand-edited PRODUCT.md may carry an invalid sourceId,
116
+ // which should not 500 the whole dropdown.
117
+ // Drop the field on parse failure so the option still shows up.
118
+ const parsed = SourceId.safeParse(item.sourceId);
119
+ return {
120
+ value: item.value,
121
+ label: item.label,
122
+ description: item.sourceName,
123
+ ...(parsed.success ? { sourceId: parsed.data } : {}),
124
+ };
125
+ });
128
126
  }
129
- async function resolveClarify(filter, workspaceId, clarifyRepository) {
127
+ async function resolveClarification(filter, workspaceId, clarificationRepository) {
130
128
  const status = typeof filter.status === 'string' ? filter.status : undefined;
131
- const tickets = await clarifyRepository.list({
129
+ const tickets = await clarificationRepository.list({
132
130
  workspaceId,
133
131
  ...(status ? { statuses: [status] } : {}),
134
132
  });
@@ -1 +1 @@
1
- {"version":3,"file":"skillInputOptions.js","sourceRoot":"","sources":["../../src/routes/skillInputOptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skillInputOptions.js","sourceRoot":"","sources":["../../src/routes/skillInputOptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;;;;GAQG;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAA;AAEvE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;IACpE,kEAAkE;IAClE,wEAAwE;IACxE,wCAAwC;IACxC,0EAA0E;IAC1E,EAAE;IACF,qDAAqD;IACrD,8DAA8D;IAC9D,sCAAsC;IACtC,oDAAoD;IACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;CAClF,CAAC,CAAA;AAEF,MAAM,KAAK,GAAG,WAAW,CAAC;IACxB,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,uBAAuB;IACpC,OAAO,EAAE,iFAAiF;IAC1F,IAAI,EAAE,CAAC,QAAQ,CAAC;IAChB,OAAO,EAAE;QACP,MAAM,EAAE,gBAAgB;QACxB,KAAK,EAAE,WAAW;KACnB;IACD,SAAS,EAAE;QACT,GAAG,EAAE;YACH,WAAW,EAAE,kFAAkF;YAC/F,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAAE;SACvE;KACF;CACF,CAAC,CAAA;AASF,MAAM,UAAU,6BAA6B,CAAC,IAAiC;IAC7E,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAEhC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAChF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnD,MAAM,YAAY,GAA4B,MAAM;YAClD,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;YACvB,CAAC,CAAC,EAAE,CAAA;QAEN,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;QACxE,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAkC,EAClC,MAA+B,EAC/B,SAAoB,EACpB,IAAiC;IAEjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY;YACf,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;QAClD,KAAK,eAAe;YAClB,OAAO,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAC/C,KAAK,SAAS;YACZ,OAAO,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,MAA+B,EAC/B,SAAoB,EACpB,IAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,KAAkB,CAAC,CAAC,CAAC,SAAS,CAAA;IAClF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,QAAqB,CAAC,CAAC,CAAC,SAAS,CAAA;IAC3F,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,MAAM,iBAAiB,GAAG,UAAU,EAAE,SAAS,KAAK,IAAI,CAAA;IAExD,IAAI,cAAc,GAAG,KAAK,CAAA;IAC1B,IAAI,iBAAiB,EAAE,CAAC;QACtB,yCAAyC;QACzC,0DAA0D;QAC1D,mEAAmE;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QAC1F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS;aACxC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC;aAC/D,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACnC,cAAc,GAAG,cAAc;YAC7B,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAU,CAAC,CAAC;YACnE,CAAC,CAAC,gBAAgB,CAAA;IACtB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7C,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACvD,OAAO,KAAK,CAAA;QACd,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,OAAO,KAAK,CAAA;QACd,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,IAAI,CAAC,EAAE;QACd,KAAK,EAAE,IAAI,CAAC,IAAI;QAChB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC,CAAC,CAAA;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAA+B,EAC/B,SAAoB;IAEpB,MAAM,gBAAgB,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9F,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAA;IAC9C,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,IAAI,CAAC,gBAAgB;YACnB,OAAO,IAAI,CAAA;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClE,OAAO,MAAM,EAAE,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,gBAAgB,CAAA;IAClF,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,sBAAsB;QACtB,0DAA0D;QAC1D,2CAA2C;QAC3C,gEAAgE;QAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,UAAU;YAC5B,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAA;IACH,CAAC,CAAC,CAAA;AACN,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,MAA+B,EAC/B,WAA4B,EAC5B,uBAAgD;IAEhD,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAC5E,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC;QACjD,WAAW;QACX,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC,CAAA;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,EAAE;QAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC,MAAM;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAChC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,CAAC;IACD,MAAM,CAAC;QACL,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;AACjE,CAAC"}
@@ -1,9 +1,27 @@
1
- import type { SkillRegistry, SkillRunner, WorkspaceRepository } from '@braidhq/core';
1
+ import type { PluginRegistry, RunRepository, SkillRegistry, SkillRunner, SourceUnitObservationService, WorkspaceRepository } from '@braidhq/core';
2
2
  import { OpenAPIHono } from '@hono/zod-openapi';
3
3
  export interface SkillsRouterDeps {
4
4
  readonly skillRegistry: SkillRegistry;
5
5
  readonly skillRunner: SkillRunner;
6
6
  readonly workspaceRepository: WorkspaceRepository;
7
+ /**
8
+ * Records a SourceUnitObservation after a successful per-unit run,
9
+ * named by the active ontology's `perUnit.skillId` binding.
10
+ */
11
+ readonly sourceUnitObservationService: SourceUnitObservationService;
12
+ /**
13
+ * Backfills a run's terminal exit state.
14
+ * A run can finish after `skillRunner.start` returns,
15
+ * but before the hook subscribes, missing the terminal event.
16
+ * Without it the hook only listens forward, so that race leaks silently.
17
+ */
18
+ readonly runRepository: RunRepository;
19
+ /**
20
+ * Resolves the active ontology for the workspace,
21
+ * so the route reads its `batch.perUnit.skillId`,
22
+ * instead of hard-coding the extract skill.
23
+ */
24
+ readonly pluginRegistry: PluginRegistry;
7
25
  }
8
26
  export declare function createSkillsRouter(deps: SkillsRouterDeps): OpenAPIHono;
9
27
  //# sourceMappingURL=skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,mBAAmB,EACpB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAe,WAAW,EAAK,MAAM,mBAAmB,CAAA;AAyB/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAA;CAClD;AAyDD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CA0CtE"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,EACX,4BAA4B,EAE5B,mBAAmB,EACpB,MAAM,eAAe,CAAA;AAItB,OAAO,EAAe,WAAW,EAAK,MAAM,mBAAmB,CAAA;AAmC/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAA;IACjD;;;OAGG;IACH,QAAQ,CAAC,4BAA4B,EAAE,4BAA4B,CAAA;IACnE;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;CACxC;AAyDD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAiFtE"}
@@ -1,14 +1,24 @@
1
- import { SkillId as SkillIdSchema, SkillManifest, SkillRunId } from '@braidhq/schema';
1
+ import { createLogger, ValidationError } from '@braidhq/core';
2
+ import { SkillId as SkillIdSchema, SkillManifest, SkillRunId, SourceId } from '@braidhq/schema';
2
3
  import { createRoute, OpenAPIHono, z } from '@hono/zod-openapi';
3
4
  import { extractBearerToken } from '../middleware/auth.js';
4
5
  import { requirePermission } from '../middleware/workspaceAccess.js';
5
6
  import { getWorkspaceId } from '../middleware/workspaceId.js';
6
7
  import { NotFoundResponse, WorkspaceIdParam } from './_shared.js';
7
8
  import { loadWorkspaceById } from './helpers.js';
9
+ const SourceUnitRef = z.object({
10
+ sourceId: SourceId,
11
+ path: z.string().min(1),
12
+ }).openapi('SourceUnitRef');
8
13
  const RunBody = z.object({
9
14
  args: z.string().default(''),
10
- /** Continue an existing claude conversation (from a prior session-started event). */
15
+ // Continue a prior claude conversation from a session-started event.
11
16
  resumeSessionId: z.string().min(1).optional(),
17
+ // Identifies the source unit this run will process,
18
+ // so the server records an observation against it after a clean run.
19
+ // Studio sends this when the user picks a `source-intent` option.
20
+ // Only `ddd:extract` consumes it today, other skills ignore it.
21
+ sourceUnit: SourceUnitRef.optional(),
12
22
  }).openapi('SkillRunBody');
13
23
  const SkillIdParam = WorkspaceIdParam.extend({
14
24
  skillId: SkillIdSchema.openapi({ param: { name: 'skillId', in: 'path' } }),
@@ -53,7 +63,7 @@ const runSkillRoute = createRoute({
53
63
  path: '/{skillId}/run',
54
64
  operationId: 'runSkill',
55
65
  summary: 'Fire-and-forget run of a skill. Returns the runId to subscribe to via SSE.',
56
- description: 'The subprocess + event drain runs in the background; events are persisted to JSONL and broadcast to subscribers regardless of whether the client stays connected. Tail progress via GET /workspaces/{workspaceId}/runs/{runId}/events.',
66
+ description: 'The subprocess + event drain runs in the background. Events are persisted to JSONL and broadcast to subscribers regardless of whether the client stays connected. Tail progress via GET /workspaces/{workspaceId}/runs/{runId}/events.',
57
67
  tags: ['skills'],
58
68
  request: {
59
69
  params: SkillIdParam,
@@ -73,9 +83,10 @@ const runSkillRoute = createRoute({
73
83
  });
74
84
  export function createSkillsRouter(deps) {
75
85
  const router = new OpenAPIHono();
76
- // skill.run is the only capability that needs a per-request resource
77
- // (the skill manifest). The resource builder fetches the workspace +
78
- // manifest once and hands the result to the policy check.
86
+ // skill.run is the only capability needing a per-request resource,
87
+ // the skill manifest.
88
+ // The builder fetches workspace and manifest once,
89
+ // then hands the result to the policy check.
79
90
  router.use('/:skillId/run', requirePermission('skill.run', async (context) => {
80
91
  const workspace = await loadWorkspaceById(getWorkspaceId(context), deps.workspaceRepository);
81
92
  const skillId = SkillIdSchema.parse(context.req.param('skillId'));
@@ -98,15 +109,136 @@ export function createSkillsRouter(deps) {
98
109
  router.openapi(runSkillRoute, async (context) => {
99
110
  const workspace = await loadWorkspaceById(getWorkspaceId(context), deps.workspaceRepository);
100
111
  const { skillId } = context.req.valid('param');
101
- const { args, resumeSessionId } = context.req.valid('json');
112
+ const { args, resumeSessionId, sourceUnit } = context.req.valid('json');
102
113
  const callerToken = extractBearerToken(context);
103
114
  const options = {
104
115
  ...(resumeSessionId ? { resumeSessionId } : {}),
105
116
  ...(callerToken ? { callerToken } : {}),
106
117
  };
118
+ const perUnitSkillId = resolvePerUnitSkillId(deps.pluginRegistry, workspace);
119
+ if (sourceUnit) {
120
+ // The sourceUnit applies only to the ontology's per-unit step,
121
+ // so reject it for any other skill.
122
+ // Otherwise the run-skill route advertises support uniformly,
123
+ // then silently drops it for every skill except extract.
124
+ if (!perUnitSkillId || skillId !== perUnitSkillId) {
125
+ throw new ValidationError(perUnitSkillId
126
+ ? `The \`sourceUnit\` field is only accepted for "${perUnitSkillId}", the active ontology's per-unit skill.`
127
+ : `The \`sourceUnit\` field is not accepted, the active ontology declares no per-unit skill.`);
128
+ }
129
+ // Reject a sourceUnit whose sourceId is not an intent source here.
130
+ // Recording against a ghost sourceId would pollute the ledger,
131
+ // and confuse the Reactor and BatchService diff.
132
+ const known = workspace.sources.find(s => s.id === sourceUnit.sourceId && s.role === 'intent');
133
+ if (!known)
134
+ throw new ValidationError(`Source-unit id "${sourceUnit.sourceId}" does not name an intent source in workspace "${workspace.id}"`);
135
+ }
107
136
  const runId = await deps.skillRunner.start(workspace, skillId, args, options);
137
+ // The observation hook runs in the background,
138
+ // so the route still returns 202 promptly.
139
+ // Any failure (skill error, cancel, repository write) is logged,
140
+ // but does not bubble up to the client.
141
+ if (sourceUnit && perUnitSkillId && skillId === perUnitSkillId) {
142
+ void recordObservationOnSuccess({
143
+ runner: deps.skillRunner,
144
+ runRepository: deps.runRepository,
145
+ sourceUnitObservationService: deps.sourceUnitObservationService,
146
+ workspace,
147
+ runId,
148
+ sourceUnit,
149
+ });
150
+ }
108
151
  return context.json({ runId }, 202);
109
152
  });
110
153
  return router;
111
154
  }
155
+ function resolvePerUnitSkillId(pluginRegistry, workspace) {
156
+ const ontology = pluginRegistry.findOntology(workspace.productManifest.ontologyId);
157
+ return ontology?.batch?.perUnit?.skillId;
158
+ }
159
+ const recordLogger = createLogger('skills.recordObservation');
160
+ // Stop waiting after this many ms, even if no terminal event arrives.
161
+ // Real ddd:extract runs settle in seconds to minutes.
162
+ // This backstops orphan subscriptions on crashed runners,
163
+ // or upstream queues that quietly drop events.
164
+ const OBSERVATION_TIMEOUT_MS = 60 * 60 * 1000;
165
+ // Subscribe to a run and wait for it to terminate.
166
+ // Record a SourceUnitObservation only if it exits cleanly (code 0).
167
+ // On cancellation, non-zero exit, error, or timeout,
168
+ // the previously recorded state is left untouched.
169
+ //
170
+ // Two race-safety measures matter here.
171
+ // First, we subscribe before checking `isActive`.
172
+ // A run finishing between those steps would miss the terminal event,
173
+ // so we backfill from the persisted RunRecord exit code.
174
+ // Second, the Promise has a hard timeout.
175
+ // A run that never emits a terminal event cannot leak the closure.
176
+ async function recordObservationOnSuccess(params) {
177
+ const { runner, runRepository, sourceUnitObservationService, workspace, runId, sourceUnit } = params;
178
+ const workspaceId = workspace.id;
179
+ try {
180
+ const outcome = await waitForTerminalOutcome(runner, runRepository, workspace, runId);
181
+ if (outcome !== 'success')
182
+ return;
183
+ await sourceUnitObservationService.recordObservation(workspaceId, sourceUnit.sourceId, sourceUnit.path, runId);
184
+ }
185
+ catch (err) {
186
+ recordLogger.warn({
187
+ runId,
188
+ workspaceId,
189
+ sourceId: sourceUnit.sourceId,
190
+ path: sourceUnit.path,
191
+ err: err instanceof Error ? err.message : String(err),
192
+ }, 'failed to record observation after ddd:extract run');
193
+ }
194
+ }
195
+ async function waitForTerminalOutcome(runner, runRepository, workspace, runId) {
196
+ return new Promise((resolve) => {
197
+ let settled = false;
198
+ let timeout;
199
+ // Subscribe first, so future events from a still-active run reach us.
200
+ // Checking `isActive` first would race.
201
+ // A run finishing between the two steps would miss the terminal event.
202
+ const sub = runner.subscribe(runId, (event) => {
203
+ if (event.type === 'completed')
204
+ settle(event.exitCode === 0 ? 'success' : 'failure');
205
+ else if (event.type === 'error')
206
+ settle('failure');
207
+ });
208
+ function settle(outcome) {
209
+ if (settled)
210
+ return;
211
+ settled = true;
212
+ sub.unsubscribe();
213
+ if (timeout)
214
+ clearTimeout(timeout);
215
+ resolve(outcome);
216
+ }
217
+ // Backfill for an already-finished run.
218
+ // Its subscription never receives a terminal event,
219
+ // because the runner clears subscribers when drain exits.
220
+ // Read the persisted RunRecord instead.
221
+ if (!runner.isActive(runId)) {
222
+ ;
223
+ (async () => {
224
+ try {
225
+ const records = await runRepository.listRecords(workspace);
226
+ const record = records.find(r => r.runId === runId);
227
+ if (record?.exitCode !== undefined)
228
+ settle(record.exitCode === 0 ? 'success' : 'failure');
229
+ else
230
+ settle('failure');
231
+ }
232
+ catch {
233
+ settle('failure');
234
+ }
235
+ })();
236
+ }
237
+ // Timeout backstop. .unref() lets Node exit while the timer pends.
238
+ // Observation recording is best-effort,
239
+ // not a reason to hold the process open.
240
+ timeout = setTimeout(() => settle('failure'), OBSERVATION_TIMEOUT_MS);
241
+ timeout.unref?.();
242
+ });
243
+ }
112
244
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sourceLoaders.d.ts","sourceRoot":"","sources":["../../src/routes/sourceLoaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAe,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE5D,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,cAAc,CAAA;CAC/B;AAiBD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,WAAW,CAapF"}
1
+ {"version":3,"file":"sourceLoaders.d.ts","sourceRoot":"","sources":["../../src/routes/sourceLoaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAe,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE5D,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,cAAc,CAAA;CAC/B;AAiBD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,WAAW,CAcpF"}
@@ -21,6 +21,7 @@ export function createSourceLoadersRouter(deps) {
21
21
  const loaders = plugins.map(plugin => ({
22
22
  kind: plugin.kind,
23
23
  pluginId: plugin.id,
24
+ webhook: plugin.webhook !== undefined,
24
25
  }));
25
26
  return context.json(ListSourceLoadersResponse.parse({ loaders }), 200);
26
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sourceLoaders.js","sourceRoot":"","sources":["../../src/routes/sourceLoaders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAM5D,MAAM,sBAAsB,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,uDAAuD;IAChE,WAAW,EAAE,wRAAwR;IACrS,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,SAAS,EAAE;QACT,GAAG,EAAE;YACH,WAAW,EAAE,6CAA6C;YAC1D,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAAE;SACvE;KACF;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,yBAAyB,CAAC,IAA6B;IACrE,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAEhC,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAA;QACnD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,EAAE;SACpB,CAAC,CAAC,CAAA;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"sourceLoaders.js","sourceRoot":"","sources":["../../src/routes/sourceLoaders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAM5D,MAAM,sBAAsB,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,uDAAuD;IAChE,WAAW,EAAE,wRAAwR;IACrS,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,SAAS,EAAE;QACT,GAAG,EAAE;YACH,WAAW,EAAE,6CAA6C;YAC1D,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAAE;SACvE;KACF;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,yBAAyB,CAAC,IAA6B;IACrE,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAEhC,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAA;QACnD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,SAAS;SACtC,CAAC,CAAC,CAAA;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { IntentLister, SourceUnitDigest, SourceUnitObservationService, WorkspaceService } from '@braidhq/core';
2
+ import { OpenAPIHono } from '@hono/zod-openapi';
3
+ export interface SourceUnitObservationsRouterDeps {
4
+ sourceUnitObservationService: SourceUnitObservationService;
5
+ /**
6
+ * Optional `(workspaceService, intentLister, digest)` triple.
7
+ * When all three are present, the router exposes the `:sourceId/diff` route.
8
+ * When any is missing, the route is simply not registered,
9
+ * so callers see a 404 from Hono's router.
10
+ * That matches the unsupported-operation semantics,
11
+ * other partially-wired surfaces follow (Batch, Skills).
12
+ */
13
+ diffSupport?: {
14
+ workspaceService: WorkspaceService;
15
+ intentLister: IntentLister;
16
+ digest: SourceUnitDigest;
17
+ };
18
+ }
19
+ export declare function createSourceUnitObservationsRouter(deps: SourceUnitObservationsRouterDeps): OpenAPIHono;
20
+ //# sourceMappingURL=sourceUnitObservations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceUnitObservations.d.ts","sourceRoot":"","sources":["../../src/routes/sourceUnitObservations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGnH,OAAO,EAAe,WAAW,EAAK,MAAM,mBAAmB,CAAA;AAkB/D,MAAM,WAAW,gCAAgC;IAC/C,4BAA4B,EAAE,4BAA4B,CAAA;IAC1D;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE;QACZ,gBAAgB,EAAE,gBAAgB,CAAA;QAClC,YAAY,EAAE,YAAY,CAAA;QAC1B,MAAM,EAAE,gBAAgB,CAAA;KACzB,CAAA;CACF;AA0CD,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,gCAAgC,GAAG,WAAW,CAgCtG"}
@@ -0,0 +1,80 @@
1
+ import { computeSourceDiff } from '@braidhq/core';
2
+ import { SourceId, SourceUnitDiff, SourceUnitObservation } from '@braidhq/schema';
3
+ import { createRoute, OpenAPIHono, z } from '@hono/zod-openapi';
4
+ import { getWorkspaceId } from '../middleware/workspaceId.js';
5
+ import { NotFoundResponse, ValidationFailureResponse, WorkspaceIdParam } from './_shared.js';
6
+ const ListQuery = z.object({
7
+ sourceId: SourceId.optional().openapi({ description: 'Restrict to one source.' }),
8
+ });
9
+ const ListResponse = z.object({
10
+ items: z.array(SourceUnitObservation),
11
+ }).openapi('SourceUnitObservationListResponse');
12
+ const SourceIdParam = WorkspaceIdParam.extend({
13
+ sourceId: SourceId.openapi({ param: { name: 'sourceId', in: 'path' } }),
14
+ });
15
+ const DiffResponse = SourceUnitDiff.openapi('SourceUnitDiffResponse');
16
+ const listRoute = createRoute({
17
+ method: 'get',
18
+ path: '/',
19
+ operationId: 'listSourceUnitObservations',
20
+ summary: 'List recorded observations per source unit for a workspace.',
21
+ description: 'Returns the framework\'s current view of each source unit '
22
+ + 'last seen by an extract run. One entry per (sourceId, path). Used '
23
+ + 'by Studio to display per-unit freshness and by Reactor to compute '
24
+ + 'what needs re-extraction.',
25
+ tags: ['source-unit-states'],
26
+ request: {
27
+ params: WorkspaceIdParam,
28
+ query: ListQuery,
29
+ },
30
+ responses: {
31
+ 200: {
32
+ description: 'The recorded observations.',
33
+ content: { 'application/json': { schema: ListResponse } },
34
+ },
35
+ 400: ValidationFailureResponse,
36
+ },
37
+ });
38
+ const diffRoute = createRoute({
39
+ method: 'get',
40
+ path: '/{sourceId}/diff',
41
+ operationId: 'getSourceUnitDiff',
42
+ summary: 'Diff a source\'s current units on disk against the recorded ledger.',
43
+ description: 'Returns the partition (`new`, `changed`, `unchanged`, `orphaned`) the Reactor uses internally to decide what to re-extract. Studio\'s Actions form consumes the same shape to render per-option badges on the source-intent picker.',
44
+ tags: ['source-unit-states'],
45
+ request: { params: SourceIdParam },
46
+ responses: {
47
+ 200: {
48
+ description: 'The diff partition.',
49
+ content: { 'application/json': { schema: DiffResponse } },
50
+ },
51
+ 404: NotFoundResponse,
52
+ },
53
+ });
54
+ export function createSourceUnitObservationsRouter(deps) {
55
+ const router = new OpenAPIHono();
56
+ router.openapi(listRoute, async (context) => {
57
+ const workspaceId = getWorkspaceId(context);
58
+ const { sourceId } = context.req.valid('query');
59
+ const items = sourceId
60
+ ? await deps.sourceUnitObservationService.listBySource(workspaceId, sourceId)
61
+ : await deps.sourceUnitObservationService.listByWorkspace(workspaceId);
62
+ return context.json({ items: [...items] }, 200);
63
+ });
64
+ if (deps.diffSupport) {
65
+ const { workspaceService, intentLister, digest } = deps.diffSupport;
66
+ router.openapi(diffRoute, async (context) => {
67
+ const workspaceId = getWorkspaceId(context);
68
+ const { sourceId } = context.req.valid('param');
69
+ const workspace = await workspaceService.findById(workspaceId);
70
+ const diff = await computeSourceDiff({
71
+ intentLister,
72
+ digest,
73
+ sourceUnitObservationService: deps.sourceUnitObservationService,
74
+ }, workspace, sourceId);
75
+ return context.json(diff, 200);
76
+ });
77
+ }
78
+ return router;
79
+ }
80
+ //# sourceMappingURL=sourceUnitObservations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceUnitObservations.js","sourceRoot":"","sources":["../../src/routes/sourceUnitObservations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { PluginRegistry, SourceLoaderRunner, WorkspaceService } from '@braidhq/core';
2
+ import type { SecretStore } from '../infrastructure/secrets/SecretStore.js';
3
+ import { OpenAPIHono } from '@hono/zod-openapi';
4
+ import { Hono } from 'hono';
5
+ export interface GithubWebhookReceiverDeps {
6
+ readonly workspaceService: WorkspaceService;
7
+ readonly sourceLoaderRunner: SourceLoaderRunner;
8
+ readonly secretStore: SecretStore;
9
+ readonly pluginRegistry: PluginRegistry;
10
+ }
11
+ export declare function createGithubWebhookReceiver(deps: GithubWebhookReceiverDeps): Hono;
12
+ export interface SourceWebhooksAdminDeps {
13
+ readonly workspaceService: WorkspaceService;
14
+ readonly secretStore: SecretStore;
15
+ readonly pluginRegistry: PluginRegistry;
16
+ /**
17
+ * Base URL under which the public webhook receiver is reachable.
18
+ * Required so the admin response can return an absolute URL,
19
+ * that the user pastes straight into GitHub's webhook settings.
20
+ * When unset (composeApp in tests), the admin endpoints return 503.
21
+ * Better than returning a relative path Studio would render verbatim.
22
+ */
23
+ readonly apiUrl?: string;
24
+ }
25
+ export declare function createSourceWebhooksAdminRouter(deps: SourceWebhooksAdminDeps): OpenAPIHono;
26
+ //# sourceMappingURL=sourceWebhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceWebhooks.d.ts","sourceRoot":"","sources":["../../src/routes/sourceWebhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAElB,gBAAgB,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAK3E,OAAO,EAAe,WAAW,EAAK,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AA0C3B,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAA;IAC/C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;CACxC;AA6FD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,CAgFjF;AAYD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AA2DD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,uBAAuB,GAAG,WAAW,CAoC1F"}