@cat-factory/server 0.6.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 (338) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agents/CompositeAgentExecutor.d.ts +39 -0
  3. package/dist/agents/CompositeAgentExecutor.d.ts.map +1 -0
  4. package/dist/agents/CompositeAgentExecutor.js +169 -0
  5. package/dist/agents/CompositeAgentExecutor.js.map +1 -0
  6. package/dist/agents/ContainerAgentExecutor.d.ts +235 -0
  7. package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -0
  8. package/dist/agents/ContainerAgentExecutor.js +825 -0
  9. package/dist/agents/ContainerAgentExecutor.js.map +1 -0
  10. package/dist/agents/ContainerRepoBootstrapper.d.ts +78 -0
  11. package/dist/agents/ContainerRepoBootstrapper.d.ts.map +1 -0
  12. package/dist/agents/ContainerRepoBootstrapper.js +279 -0
  13. package/dist/agents/ContainerRepoBootstrapper.js.map +1 -0
  14. package/dist/agents/ModelRouter.d.ts +69 -0
  15. package/dist/agents/ModelRouter.d.ts.map +1 -0
  16. package/dist/agents/ModelRouter.js +84 -0
  17. package/dist/agents/ModelRouter.js.map +1 -0
  18. package/dist/agents/RunnerJobClient.d.ts +41 -0
  19. package/dist/agents/RunnerJobClient.d.ts.map +1 -0
  20. package/dist/agents/RunnerJobClient.js +43 -0
  21. package/dist/agents/RunnerJobClient.js.map +1 -0
  22. package/dist/agents/modelProviderResolver.d.ts +33 -0
  23. package/dist/agents/modelProviderResolver.d.ts.map +1 -0
  24. package/dist/agents/modelProviderResolver.js +48 -0
  25. package/dist/agents/modelProviderResolver.js.map +1 -0
  26. package/dist/agents/providerCapabilities.d.ts +22 -0
  27. package/dist/agents/providerCapabilities.d.ts.map +1 -0
  28. package/dist/agents/providerCapabilities.js +43 -0
  29. package/dist/agents/providerCapabilities.js.map +1 -0
  30. package/dist/agents/resolveRepoTarget.d.ts +33 -0
  31. package/dist/agents/resolveRepoTarget.d.ts.map +1 -0
  32. package/dist/agents/resolveRepoTarget.js +81 -0
  33. package/dist/agents/resolveRepoTarget.js.map +1 -0
  34. package/dist/app.d.ts +12 -0
  35. package/dist/app.d.ts.map +1 -0
  36. package/dist/app.js +102 -0
  37. package/dist/app.js.map +1 -0
  38. package/dist/auth/GitHubOAuth.d.ts +39 -0
  39. package/dist/auth/GitHubOAuth.d.ts.map +1 -0
  40. package/dist/auth/GitHubOAuth.js +90 -0
  41. package/dist/auth/GitHubOAuth.js.map +1 -0
  42. package/dist/auth/GoogleOAuth.d.ts +35 -0
  43. package/dist/auth/GoogleOAuth.d.ts.map +1 -0
  44. package/dist/auth/GoogleOAuth.js +66 -0
  45. package/dist/auth/GoogleOAuth.js.map +1 -0
  46. package/dist/auth/middleware.d.ts +15 -0
  47. package/dist/auth/middleware.d.ts.map +1 -0
  48. package/dist/auth/middleware.js +63 -0
  49. package/dist/auth/middleware.js.map +1 -0
  50. package/dist/auth/signing.d.ts +50 -0
  51. package/dist/auth/signing.d.ts.map +1 -0
  52. package/dist/auth/signing.js +96 -0
  53. package/dist/auth/signing.js.map +1 -0
  54. package/dist/auth/wsTicket.d.ts +34 -0
  55. package/dist/auth/wsTicket.d.ts.map +1 -0
  56. package/dist/auth/wsTicket.js +50 -0
  57. package/dist/auth/wsTicket.js.map +1 -0
  58. package/dist/config/types.d.ts +294 -0
  59. package/dist/config/types.d.ts.map +1 -0
  60. package/dist/config/types.js +2 -0
  61. package/dist/config/types.js.map +1 -0
  62. package/dist/config/url-safety.d.ts +8 -0
  63. package/dist/config/url-safety.d.ts.map +1 -0
  64. package/dist/config/url-safety.js +11 -0
  65. package/dist/config/url-safety.js.map +1 -0
  66. package/dist/containers/ContainerSessionService.d.ts +67 -0
  67. package/dist/containers/ContainerSessionService.d.ts.map +1 -0
  68. package/dist/containers/ContainerSessionService.js +44 -0
  69. package/dist/containers/ContainerSessionService.js.map +1 -0
  70. package/dist/crypto/WebCryptoPasswordHasher.d.ts +9 -0
  71. package/dist/crypto/WebCryptoPasswordHasher.d.ts.map +1 -0
  72. package/dist/crypto/WebCryptoPasswordHasher.js +67 -0
  73. package/dist/crypto/WebCryptoPasswordHasher.js.map +1 -0
  74. package/dist/crypto/WebCryptoPersonalSecretCipher.d.ts +6 -0
  75. package/dist/crypto/WebCryptoPersonalSecretCipher.d.ts.map +1 -0
  76. package/dist/crypto/WebCryptoPersonalSecretCipher.js +57 -0
  77. package/dist/crypto/WebCryptoPersonalSecretCipher.js.map +1 -0
  78. package/dist/crypto/WebCryptoSecretCipher.d.ts +23 -0
  79. package/dist/crypto/WebCryptoSecretCipher.d.ts.map +1 -0
  80. package/dist/crypto/WebCryptoSecretCipher.js +60 -0
  81. package/dist/crypto/WebCryptoSecretCipher.js.map +1 -0
  82. package/dist/crypto/encoding.d.ts +14 -0
  83. package/dist/crypto/encoding.d.ts.map +1 -0
  84. package/dist/crypto/encoding.js +58 -0
  85. package/dist/crypto/encoding.js.map +1 -0
  86. package/dist/events/FanOutEventPublisher.d.ts +32 -0
  87. package/dist/events/FanOutEventPublisher.d.ts.map +1 -0
  88. package/dist/events/FanOutEventPublisher.js +76 -0
  89. package/dist/events/FanOutEventPublisher.js.map +1 -0
  90. package/dist/events/InAppNotificationChannel.d.ts +20 -0
  91. package/dist/events/InAppNotificationChannel.d.ts.map +1 -0
  92. package/dist/events/InAppNotificationChannel.js +23 -0
  93. package/dist/events/InAppNotificationChannel.js.map +1 -0
  94. package/dist/github/FetchGitHubClient.d.ts +72 -0
  95. package/dist/github/FetchGitHubClient.d.ts.map +1 -0
  96. package/dist/github/FetchGitHubClient.js +485 -0
  97. package/dist/github/FetchGitHubClient.js.map +1 -0
  98. package/dist/github/FetchGitHubProvisioningClient.d.ts +13 -0
  99. package/dist/github/FetchGitHubProvisioningClient.d.ts.map +1 -0
  100. package/dist/github/FetchGitHubProvisioningClient.js +59 -0
  101. package/dist/github/FetchGitHubProvisioningClient.js.map +1 -0
  102. package/dist/github/GitHubAppAuth.d.ts +30 -0
  103. package/dist/github/GitHubAppAuth.d.ts.map +1 -0
  104. package/dist/github/GitHubAppAuth.js +95 -0
  105. package/dist/github/GitHubAppAuth.js.map +1 -0
  106. package/dist/github/GitHubAppRegistry.d.ts +57 -0
  107. package/dist/github/GitHubAppRegistry.d.ts.map +1 -0
  108. package/dist/github/GitHubAppRegistry.js +51 -0
  109. package/dist/github/GitHubAppRegistry.js.map +1 -0
  110. package/dist/github/GitHubCiStatusProvider.d.ts +21 -0
  111. package/dist/github/GitHubCiStatusProvider.d.ts.map +1 -0
  112. package/dist/github/GitHubCiStatusProvider.js +39 -0
  113. package/dist/github/GitHubCiStatusProvider.js.map +1 -0
  114. package/dist/github/GitHubMergeabilityProvider.d.ts +26 -0
  115. package/dist/github/GitHubMergeabilityProvider.d.ts.map +1 -0
  116. package/dist/github/GitHubMergeabilityProvider.js +38 -0
  117. package/dist/github/GitHubMergeabilityProvider.js.map +1 -0
  118. package/dist/github/GitHubPullRequestMerger.d.ts +23 -0
  119. package/dist/github/GitHubPullRequestMerger.d.ts.map +1 -0
  120. package/dist/github/GitHubPullRequestMerger.js +38 -0
  121. package/dist/github/GitHubPullRequestMerger.js.map +1 -0
  122. package/dist/github/WebCryptoWebhookVerifier.d.ts +9 -0
  123. package/dist/github/WebCryptoWebhookVerifier.d.ts.map +1 -0
  124. package/dist/github/WebCryptoWebhookVerifier.js +40 -0
  125. package/dist/github/WebCryptoWebhookVerifier.js.map +1 -0
  126. package/dist/github/ensureWorkBranch.d.ts +26 -0
  127. package/dist/github/ensureWorkBranch.d.ts.map +1 -0
  128. package/dist/github/ensureWorkBranch.js +97 -0
  129. package/dist/github/ensureWorkBranch.js.map +1 -0
  130. package/dist/github/state.d.ts +19 -0
  131. package/dist/github/state.d.ts.map +1 -0
  132. package/dist/github/state.js +55 -0
  133. package/dist/github/state.js.map +1 -0
  134. package/dist/http/authGate.d.ts +21 -0
  135. package/dist/http/authGate.d.ts.map +1 -0
  136. package/dist/http/authGate.js +77 -0
  137. package/dist/http/authGate.js.map +1 -0
  138. package/dist/http/cors.d.ts +13 -0
  139. package/dist/http/cors.d.ts.map +1 -0
  140. package/dist/http/cors.js +30 -0
  141. package/dist/http/cors.js.map +1 -0
  142. package/dist/http/env.d.ts +68 -0
  143. package/dist/http/env.d.ts.map +1 -0
  144. package/dist/http/env.js +2 -0
  145. package/dist/http/env.js.map +1 -0
  146. package/dist/http/errorHandler.d.ts +4 -0
  147. package/dist/http/errorHandler.d.ts.map +1 -0
  148. package/dist/http/errorHandler.js +33 -0
  149. package/dist/http/errorHandler.js.map +1 -0
  150. package/dist/http/params.d.ts +8 -0
  151. package/dist/http/params.d.ts.map +1 -0
  152. package/dist/http/params.js +13 -0
  153. package/dist/http/params.js.map +1 -0
  154. package/dist/http/validation.d.ts +12 -0
  155. package/dist/http/validation.d.ts.map +1 -0
  156. package/dist/http/validation.js +21 -0
  157. package/dist/http/validation.js.map +1 -0
  158. package/dist/index.d.ts +46 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +63 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/modules/accounts/AccountController.d.ts +10 -0
  163. package/dist/modules/accounts/AccountController.d.ts.map +1 -0
  164. package/dist/modules/accounts/AccountController.js +197 -0
  165. package/dist/modules/accounts/AccountController.js.map +1 -0
  166. package/dist/modules/agentRuns/AgentRunController.d.ts +10 -0
  167. package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -0
  168. package/dist/modules/agentRuns/AgentRunController.js +65 -0
  169. package/dist/modules/agentRuns/AgentRunController.js.map +1 -0
  170. package/dist/modules/auth/AuthController.d.ts +12 -0
  171. package/dist/modules/auth/AuthController.d.ts.map +1 -0
  172. package/dist/modules/auth/AuthController.js +457 -0
  173. package/dist/modules/auth/AuthController.js.map +1 -0
  174. package/dist/modules/board/BoardController.d.ts +8 -0
  175. package/dist/modules/board/BoardController.d.ts.map +1 -0
  176. package/dist/modules/board/BoardController.js +89 -0
  177. package/dist/modules/board/BoardController.js.map +1 -0
  178. package/dist/modules/boardScan/BoardScanController.d.ts +10 -0
  179. package/dist/modules/boardScan/BoardScanController.d.ts.map +1 -0
  180. package/dist/modules/boardScan/BoardScanController.js +53 -0
  181. package/dist/modules/boardScan/BoardScanController.js.map +1 -0
  182. package/dist/modules/bootstrap/BootstrapController.d.ts +10 -0
  183. package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -0
  184. package/dist/modules/bootstrap/BootstrapController.js +75 -0
  185. package/dist/modules/bootstrap/BootstrapController.js.map +1 -0
  186. package/dist/modules/clarity/ClarityReviewController.d.ts +11 -0
  187. package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -0
  188. package/dist/modules/clarity/ClarityReviewController.js +97 -0
  189. package/dist/modules/clarity/ClarityReviewController.js.map +1 -0
  190. package/dist/modules/consensus/ConsensusController.d.ts +12 -0
  191. package/dist/modules/consensus/ConsensusController.d.ts.map +1 -0
  192. package/dist/modules/consensus/ConsensusController.js +23 -0
  193. package/dist/modules/consensus/ConsensusController.js.map +1 -0
  194. package/dist/modules/documents/DocumentSourceController.d.ts +10 -0
  195. package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -0
  196. package/dist/modules/documents/DocumentSourceController.js +116 -0
  197. package/dist/modules/documents/DocumentSourceController.js.map +1 -0
  198. package/dist/modules/environments/EnvironmentController.d.ts +10 -0
  199. package/dist/modules/environments/EnvironmentController.d.ts.map +1 -0
  200. package/dist/modules/environments/EnvironmentController.js +95 -0
  201. package/dist/modules/environments/EnvironmentController.js.map +1 -0
  202. package/dist/modules/events/EventsController.d.ts +26 -0
  203. package/dist/modules/events/EventsController.d.ts.map +1 -0
  204. package/dist/modules/events/EventsController.js +56 -0
  205. package/dist/modules/events/EventsController.js.map +1 -0
  206. package/dist/modules/execution/ExecutionController.d.ts +10 -0
  207. package/dist/modules/execution/ExecutionController.d.ts.map +1 -0
  208. package/dist/modules/execution/ExecutionController.js +156 -0
  209. package/dist/modules/execution/ExecutionController.js.map +1 -0
  210. package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts +14 -0
  211. package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -0
  212. package/dist/modules/fragmentLibrary/FragmentLibraryController.js +128 -0
  213. package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -0
  214. package/dist/modules/github/GitHubController.d.ts +12 -0
  215. package/dist/modules/github/GitHubController.d.ts.map +1 -0
  216. package/dist/modules/github/GitHubController.js +234 -0
  217. package/dist/modules/github/GitHubController.js.map +1 -0
  218. package/dist/modules/github/GitHubWebhookController.d.ts +13 -0
  219. package/dist/modules/github/GitHubWebhookController.d.ts.map +1 -0
  220. package/dist/modules/github/GitHubWebhookController.js +74 -0
  221. package/dist/modules/github/GitHubWebhookController.js.map +1 -0
  222. package/dist/modules/llmProxy/LlmProxyController.d.ts +18 -0
  223. package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -0
  224. package/dist/modules/llmProxy/LlmProxyController.js +567 -0
  225. package/dist/modules/llmProxy/LlmProxyController.js.map +1 -0
  226. package/dist/modules/localModels/LocalModelEndpointController.d.ts +4 -0
  227. package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -0
  228. package/dist/modules/localModels/LocalModelEndpointController.js +58 -0
  229. package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -0
  230. package/dist/modules/merge/MergePresetController.d.ts +9 -0
  231. package/dist/modules/merge/MergePresetController.d.ts.map +1 -0
  232. package/dist/modules/merge/MergePresetController.js +46 -0
  233. package/dist/modules/merge/MergePresetController.js.map +1 -0
  234. package/dist/modules/modelDefaults/ModelDefaultsController.d.ts +9 -0
  235. package/dist/modules/modelDefaults/ModelDefaultsController.d.ts.map +1 -0
  236. package/dist/modules/modelDefaults/ModelDefaultsController.js +32 -0
  237. package/dist/modules/modelDefaults/ModelDefaultsController.js.map +1 -0
  238. package/dist/modules/models/ModelController.d.ts +11 -0
  239. package/dist/modules/models/ModelController.d.ts.map +1 -0
  240. package/dist/modules/models/ModelController.js +38 -0
  241. package/dist/modules/models/ModelController.js.map +1 -0
  242. package/dist/modules/notifications/NotificationController.d.ts +13 -0
  243. package/dist/modules/notifications/NotificationController.d.ts.map +1 -0
  244. package/dist/modules/notifications/NotificationController.js +67 -0
  245. package/dist/modules/notifications/NotificationController.js.map +1 -0
  246. package/dist/modules/pipelines/PipelineController.d.ts +5 -0
  247. package/dist/modules/pipelines/PipelineController.d.ts.map +1 -0
  248. package/dist/modules/pipelines/PipelineController.js +46 -0
  249. package/dist/modules/pipelines/PipelineController.js.map +1 -0
  250. package/dist/modules/promptFragments/PromptFragmentController.d.ts +11 -0
  251. package/dist/modules/promptFragments/PromptFragmentController.d.ts.map +1 -0
  252. package/dist/modules/promptFragments/PromptFragmentController.js +18 -0
  253. package/dist/modules/promptFragments/PromptFragmentController.js.map +1 -0
  254. package/dist/modules/providers/ApiKeyController.d.ts +13 -0
  255. package/dist/modules/providers/ApiKeyController.d.ts.map +1 -0
  256. package/dist/modules/providers/ApiKeyController.js +98 -0
  257. package/dist/modules/providers/ApiKeyController.js.map +1 -0
  258. package/dist/modules/providers/PersonalSubscriptionController.d.ts +4 -0
  259. package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -0
  260. package/dist/modules/providers/PersonalSubscriptionController.js +48 -0
  261. package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -0
  262. package/dist/modules/providers/VendorCredentialController.d.ts +4 -0
  263. package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -0
  264. package/dist/modules/providers/VendorCredentialController.js +55 -0
  265. package/dist/modules/providers/VendorCredentialController.js.map +1 -0
  266. package/dist/modules/providers/personalCredentialGate.d.ts +34 -0
  267. package/dist/modules/providers/personalCredentialGate.d.ts.map +1 -0
  268. package/dist/modules/providers/personalCredentialGate.js +106 -0
  269. package/dist/modules/providers/personalCredentialGate.js.map +1 -0
  270. package/dist/modules/recurring/RecurringPipelineController.d.ts +8 -0
  271. package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -0
  272. package/dist/modules/recurring/RecurringPipelineController.js +58 -0
  273. package/dist/modules/recurring/RecurringPipelineController.js.map +1 -0
  274. package/dist/modules/recurring/TrackerSettingsController.d.ts +8 -0
  275. package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -0
  276. package/dist/modules/recurring/TrackerSettingsController.js +30 -0
  277. package/dist/modules/recurring/TrackerSettingsController.js.map +1 -0
  278. package/dist/modules/releaseHealth/ReleaseHealthController.d.ts +9 -0
  279. package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -0
  280. package/dist/modules/releaseHealth/ReleaseHealthController.js +58 -0
  281. package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -0
  282. package/dist/modules/requirements/RequirementReviewController.d.ts +12 -0
  283. package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -0
  284. package/dist/modules/requirements/RequirementReviewController.js +107 -0
  285. package/dist/modules/requirements/RequirementReviewController.js.map +1 -0
  286. package/dist/modules/runners/RunnerPoolController.d.ts +10 -0
  287. package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -0
  288. package/dist/modules/runners/RunnerPoolController.js +52 -0
  289. package/dist/modules/runners/RunnerPoolController.js.map +1 -0
  290. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts +9 -0
  291. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -0
  292. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +32 -0
  293. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -0
  294. package/dist/modules/services/ServiceMountController.d.ts +11 -0
  295. package/dist/modules/services/ServiceMountController.d.ts.map +1 -0
  296. package/dist/modules/services/ServiceMountController.js +64 -0
  297. package/dist/modules/services/ServiceMountController.js.map +1 -0
  298. package/dist/modules/settings/WorkspaceSettingsController.d.ts +9 -0
  299. package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -0
  300. package/dist/modules/settings/WorkspaceSettingsController.js +32 -0
  301. package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -0
  302. package/dist/modules/slack/SlackController.d.ts +17 -0
  303. package/dist/modules/slack/SlackController.d.ts.map +1 -0
  304. package/dist/modules/slack/SlackController.js +135 -0
  305. package/dist/modules/slack/SlackController.js.map +1 -0
  306. package/dist/modules/tasks/TaskSourceController.d.ts +9 -0
  307. package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -0
  308. package/dist/modules/tasks/TaskSourceController.js +103 -0
  309. package/dist/modules/tasks/TaskSourceController.js.map +1 -0
  310. package/dist/modules/webSearch/WebSearchProxyController.d.ts +4 -0
  311. package/dist/modules/webSearch/WebSearchProxyController.d.ts.map +1 -0
  312. package/dist/modules/webSearch/WebSearchProxyController.js +78 -0
  313. package/dist/modules/webSearch/WebSearchProxyController.js.map +1 -0
  314. package/dist/modules/webSearch/upstreams.d.ts +50 -0
  315. package/dist/modules/webSearch/upstreams.d.ts.map +1 -0
  316. package/dist/modules/webSearch/upstreams.js +107 -0
  317. package/dist/modules/webSearch/upstreams.js.map +1 -0
  318. package/dist/modules/workspaces/WorkspaceController.d.ts +5 -0
  319. package/dist/modules/workspaces/WorkspaceController.d.ts.map +1 -0
  320. package/dist/modules/workspaces/WorkspaceController.js +167 -0
  321. package/dist/modules/workspaces/WorkspaceController.js.map +1 -0
  322. package/dist/observability/logger.d.ts +9 -0
  323. package/dist/observability/logger.d.ts.map +1 -0
  324. package/dist/observability/logger.js +39 -0
  325. package/dist/observability/logger.js.map +1 -0
  326. package/dist/persistence/mappers.d.ts +101 -0
  327. package/dist/persistence/mappers.d.ts.map +1 -0
  328. package/dist/persistence/mappers.js +260 -0
  329. package/dist/persistence/mappers.js.map +1 -0
  330. package/dist/runtime/escalateNotifications.d.ts +12 -0
  331. package/dist/runtime/escalateNotifications.d.ts.map +1 -0
  332. package/dist/runtime/escalateNotifications.js +25 -0
  333. package/dist/runtime/escalateNotifications.js.map +1 -0
  334. package/dist/runtime/gateways.d.ts +159 -0
  335. package/dist/runtime/gateways.d.ts.map +1 -0
  336. package/dist/runtime/gateways.js +2 -0
  337. package/dist/runtime/gateways.js.map +1 -0
  338. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventsController.d.ts","sourceRoot":"","sources":["../../../src/modules/events/EventsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CAgC/C"}
@@ -0,0 +1,56 @@
1
+ import { Hono } from 'hono';
2
+ import { WS_TICKET_TTL_MS, authorizeWsUpgrade, mintWsTicket } from '../../auth/wsTicket.js';
3
+ import { param } from '../../http/params.js';
4
+ /**
5
+ * Real-time event stream: a WebSocket the SPA subscribes to for live
6
+ * execution/board updates. The connection is handed to the facade's
7
+ * {@link RealtimeGateway} (on the Worker: the per-workspace WorkspaceEventsHub
8
+ * Durable Object; on Node: a WebSocket hub), which holds the socket and broadcasts
9
+ * events the engine publishes.
10
+ *
11
+ * A browser can't set `Authorization` on a WebSocket handshake, so the handshake
12
+ * authenticates from a `?ticket=` query param. The ticket is NOT the long-lived
13
+ * session token (which would leak a full-API, multi-day credential into edge /
14
+ * proxy / Referer logs); it is a short-lived, single-workspace ticket the SPA
15
+ * mints over the authenticated REST channel via `POST .../events/ticket`. The
16
+ * ticket is audience-pinned (`ws`) and bound to one `workspaceId`, so it cannot
17
+ * be replayed as a session, against the LLM proxy, or for another workspace.
18
+ *
19
+ * The default-deny gate (in the facade's app) bypasses only the exact GET upgrade;
20
+ * the per-workspace authorization middleware enforces ownership on the POST mint.
21
+ *
22
+ * The ticket mint/verify primitives live in {@link ../../auth/wsTicket.js} so the Node
23
+ * facade (which handles the upgrade in its HTTP-server `upgrade` listener, not through
24
+ * this controller) authorises identically.
25
+ */
26
+ export function eventsController() {
27
+ const app = new Hono();
28
+ // Mint a short-lived, workspace-scoped WS ticket. Reached over the authenticated
29
+ // REST gate; the per-workspace authorization middleware has already confirmed the
30
+ // caller owns :workspaceId before this runs.
31
+ app.post('/workspaces/:workspaceId/events/ticket', async (c) => {
32
+ const cfg = c.get('container').config.auth;
33
+ const workspaceId = param(c, 'workspaceId');
34
+ const ticket = await mintWsTicket(cfg, workspaceId);
35
+ // Auth disabled (dev) yields an empty ticket: the handshake is open, none needed.
36
+ return c.json(ticket ? { ticket, expiresInMs: WS_TICKET_TTL_MS } : { ticket: '' });
37
+ });
38
+ app.get('/workspaces/:workspaceId/events', async (c) => {
39
+ if (c.req.header('Upgrade')?.toLowerCase() !== 'websocket') {
40
+ return c.text('expected a websocket upgrade', 426);
41
+ }
42
+ const cfg = c.get('container').config.auth;
43
+ const workspaceId = param(c, 'workspaceId');
44
+ const auth = await authorizeWsUpgrade(cfg, c.req.query('ticket'), workspaceId);
45
+ if (!auth.ok)
46
+ return c.text(auth.message, auth.status);
47
+ // The actual upgrade is the runtime differentiator (Durable Object on the
48
+ // Worker, a WebSocket hub on Node) — delegate to the realtime gateway.
49
+ const upgraded = await c.get('container').gateways.realtime.upgrade(workspaceId, c.req.raw);
50
+ if (!upgraded)
51
+ return c.text('real-time events are not enabled', 501);
52
+ return upgraded;
53
+ });
54
+ return app;
55
+ }
56
+ //# sourceMappingURL=EventsController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventsController.js","sourceRoot":"","sources":["../../../src/modules/events/EventsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE3F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,iFAAiF;IACjF,kFAAkF;IAClF,6CAA6C;IAC7C,GAAG,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QACnD,kFAAkF;QAClF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;YAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;QACpD,CAAC;QAED,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAA;QAC9E,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEtD,0EAA0E;QAC1E,uEAAuE;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3F,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;QACrE,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Hono } from 'hono';
2
+ import type { AppEnv } from '../../http/env.js';
3
+ /**
4
+ * The execution engine endpoints — starting/cancelling runs, resolving decisions
5
+ * and merging PRs. Runs advance durably server-side via Cloudflare Workflows;
6
+ * progress reaches the browser over the WebSocket events stream, not by polling.
7
+ * Mounted under `/workspaces/:workspaceId`.
8
+ */
9
+ export declare function executionController(): Hono<AppEnv>;
10
+ //# sourceMappingURL=ExecutionController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,CAmOlD"}
@@ -0,0 +1,156 @@
1
+ import { approveStepSchema, rejectStepSchema, requestStepChangesSchema, resolveDecisionSchema, resolveIterationCapSchema, restartFromStepSchema, startExecutionSchema, } from '@cat-factory/contracts';
2
+ import { Hono } from 'hono';
3
+ import { param } from '../../http/params.js';
4
+ import { jsonBody } from '../../http/validation.js';
5
+ import { personalGateForBlock, personalGateForRun, readPersonalPassword, remintActivations, } from '../providers/personalCredentialGate.js';
6
+ /**
7
+ * The execution engine endpoints — starting/cancelling runs, resolving decisions
8
+ * and merging PRs. Runs advance durably server-side via Cloudflare Workflows;
9
+ * progress reaches the browser over the WebSocket events stream, not by polling.
10
+ * Mounted under `/workspaces/:workspaceId`.
11
+ */
12
+ export function executionController() {
13
+ const app = new Hono();
14
+ app.post('/blocks/:blockId/executions', jsonBody(startExecutionSchema), async (c) => {
15
+ const container = c.get('container');
16
+ const workspaceId = param(c, 'workspaceId');
17
+ const blockId = param(c, 'blockId');
18
+ const { pipelineId } = c.req.valid('json');
19
+ // Individual-usage models (Claude/GLM/Codex) require the initiator's personal
20
+ // subscription: resolve the initiator + an activation closure (throws 428 when a
21
+ // password is needed). The password rides on the X-Personal-Password header. A run
22
+ // touching no individual-usage vendor gets a no-op gate.
23
+ const { initiatedBy, activate } = await personalGateForBlock(container, workspaceId, blockId, pipelineId, c.get('user'), readPersonalPassword(c));
24
+ const instance = await container.executionService.start(workspaceId, blockId, pipelineId, initiatedBy, activate);
25
+ return c.json(instance, 201);
26
+ });
27
+ app.delete('/blocks/:blockId/executions', async (c) => {
28
+ const block = await c
29
+ .get('container')
30
+ .executionService.cancel(param(c, 'workspaceId'), param(c, 'blockId'));
31
+ return c.json(block);
32
+ });
33
+ app.post('/blocks/:blockId/merge', async (c) => {
34
+ const block = await c
35
+ .get('container')
36
+ .executionService.mergePr(param(c, 'workspaceId'), param(c, 'blockId'));
37
+ return c.json(block);
38
+ });
39
+ // Current spend-safeguard status (token usage vs budget for this period).
40
+ app.get('/spend', async (c) => {
41
+ return c.json(await c.get('container').spendService.status());
42
+ });
43
+ // LLM observability for a run: the full per-call detail (prompts, responses,
44
+ // token usage, output-limit headroom, transport-vs-execution latency) behind the
45
+ // board's step rollups. Empty when the observability sink is not wired.
46
+ app.get('/executions/:executionId/llm-metrics', async (c) => {
47
+ const executionId = param(c, 'executionId');
48
+ const observability = c.get('container').llmObservability;
49
+ const calls = observability
50
+ ? await observability.listByExecution(param(c, 'workspaceId'), executionId)
51
+ : [];
52
+ return c.json({ executionId, calls });
53
+ });
54
+ // LLM-friendly export of a run's model activity: a self-describing JSON bundle
55
+ // (totals + per-agent insights + every call, with derived ratios) meant to be
56
+ // handed straight to a model for analysis. Sets a download filename.
57
+ app.get('/executions/:executionId/llm-metrics/export', async (c) => {
58
+ const executionId = param(c, 'executionId');
59
+ const observability = c.get('container').llmObservability;
60
+ const exported = observability
61
+ ? await observability.exportForExecution(param(c, 'workspaceId'), executionId)
62
+ : {
63
+ kind: 'cat-factory.llm-metrics-export',
64
+ version: 1,
65
+ executionId,
66
+ generatedAt: 0,
67
+ totals: {
68
+ calls: 0,
69
+ promptTokens: 0,
70
+ completionTokens: 0,
71
+ upstreamMs: 0,
72
+ overheadMs: 0,
73
+ transportOverheadRatio: null,
74
+ errors: 0,
75
+ warnings: 0,
76
+ truncatedCalls: 0,
77
+ },
78
+ insights: [],
79
+ calls: [],
80
+ };
81
+ c.header('content-disposition', `attachment; filename="llm-metrics-${executionId}.json"`);
82
+ return c.json(exported);
83
+ });
84
+ // Resume runs paused by the spend safeguard in this workspace.
85
+ app.post('/spend/resume', async (c) => {
86
+ const instances = await c
87
+ .get('container')
88
+ .executionService.resumePaused(param(c, 'workspaceId'));
89
+ return c.json(instances);
90
+ });
91
+ app.post('/executions/:executionId/decisions/:decisionId', jsonBody(resolveDecisionSchema), async (c) => {
92
+ // Re-mint the run's activation BEFORE the engine advances + dispatches the next step.
93
+ await remintActivations(c, param(c, 'workspaceId'), param(c, 'executionId'));
94
+ const instance = await c
95
+ .get('container')
96
+ .executionService.resolveDecision(param(c, 'workspaceId'), param(c, 'executionId'), param(c, 'decisionId'), c.req.valid('json').choice);
97
+ return c.json(instance);
98
+ });
99
+ // Approve a step's gated proposal (optionally with a human-edited proposal);
100
+ // the run advances to the next step carrying it forward as context.
101
+ app.post('/executions/:executionId/steps/:approvalId/approve', jsonBody(approveStepSchema), async (c) => {
102
+ // Re-mint the run's activation BEFORE the engine advances + dispatches the next step.
103
+ await remintActivations(c, param(c, 'workspaceId'), param(c, 'executionId'));
104
+ const instance = await c
105
+ .get('container')
106
+ .executionService.approveStep(param(c, 'workspaceId'), param(c, 'executionId'), param(c, 'approvalId'), { proposal: c.req.valid('json').proposal });
107
+ return c.json(instance);
108
+ });
109
+ // Request changes on a gated proposal: the step re-runs with the reviewer's
110
+ // freeform feedback and/or per-block comments.
111
+ app.post('/executions/:executionId/steps/:approvalId/request-changes', jsonBody(requestStepChangesSchema), async (c) => {
112
+ const { feedback, comments } = c.req.valid('json');
113
+ // The step re-runs (dispatches) — re-mint the run's activation first.
114
+ await remintActivations(c, param(c, 'workspaceId'), param(c, 'executionId'));
115
+ const instance = await c
116
+ .get('container')
117
+ .executionService.requestStepChanges(param(c, 'workspaceId'), param(c, 'executionId'), param(c, 'approvalId'), { feedback, comments });
118
+ return c.json(instance);
119
+ });
120
+ // Resolve a companion step parked at its automatic-rework cap: one more round /
121
+ // proceed accepting the current output / stop and reset the task to phase zero. The
122
+ // companion analogue of the requirements gate's resolve-exceeded; guarded so the
123
+ // generic approve/reject can't short-circuit it.
124
+ app.post('/executions/:executionId/steps/:approvalId/resolve-exceeded', jsonBody(resolveIterationCapSchema), async (c) => {
125
+ // extra-round / proceed re-dispatch the next agent step — re-mint first.
126
+ await remintActivations(c, param(c, 'workspaceId'), param(c, 'executionId'));
127
+ const instance = await c
128
+ .get('container')
129
+ .executionService.resolveCompanionExceeded(param(c, 'workspaceId'), param(c, 'executionId'), param(c, 'approvalId'), c.req.valid('json').choice);
130
+ return c.json(instance);
131
+ });
132
+ // Restart a run from a chosen step: re-run from `fromStepIndex` onward (resetting
133
+ // that step + every later step's iteration counters) while keeping the earlier
134
+ // steps' outputs as handoff context. Works on a run in any state — the engine tears
135
+ // down a still-running driver/container first. Mints a fresh run id, so it re-drives
136
+ // like a retry. Individual-usage models (Claude/GLM/Codex) need the initiator's
137
+ // personal subscription, resolved + activated here (428 when a password is needed).
138
+ app.post('/executions/:executionId/restart', jsonBody(restartFromStepSchema), async (c) => {
139
+ const container = c.get('container');
140
+ const workspaceId = param(c, 'workspaceId');
141
+ const executionId = param(c, 'executionId');
142
+ const { fromStepIndex } = c.req.valid('json');
143
+ const { initiatedBy, activate } = await personalGateForRun(container, workspaceId, executionId, c.get('user'), readPersonalPassword(c));
144
+ const instance = await container.executionService.restartFromStep(workspaceId, executionId, fromStepIndex, initiatedBy, activate);
145
+ return c.json(instance);
146
+ });
147
+ // Reject a gated proposal: the run stops entirely (a terminal, retryable failure).
148
+ app.post('/executions/:executionId/steps/:approvalId/reject', jsonBody(rejectStepSchema), async (c) => {
149
+ const instance = await c
150
+ .get('container')
151
+ .executionService.rejectStep(param(c, 'workspaceId'), param(c, 'executionId'), param(c, 'approvalId'), c.req.valid('json').reason);
152
+ return c.json(instance);
153
+ });
154
+ return app;
155
+ }
156
+ //# sourceMappingURL=ExecutionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionController.js","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Hono } from 'hono';
2
+ import type { AppEnv } from '../../http/env.js';
3
+ type Scope = 'account' | 'workspace';
4
+ /**
5
+ * The prompt-fragment library API (ADR 0006 §8), mounted twice — once under
6
+ * `/accounts/:accountId` and once under `/workspaces/:workspaceId` — so a tier's
7
+ * fragments and repo sources are managed at the scope that owns them. Workspace
8
+ * routes are authorized by the global per-workspace gate in app.ts; account
9
+ * routes guard on account membership here. The merged/resolved read (what an
10
+ * agent actually sees) is workspace-only.
11
+ */
12
+ export declare function fragmentLibraryController(scope: Scope): Hono<AppEnv>;
13
+ export {};
14
+ //# sourceMappingURL=FragmentLibraryController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FragmentLibraryController.d.ts","sourceRoot":"","sources":["../../../src/modules/fragmentLibrary/FragmentLibraryController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/C,KAAK,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AAwBpC;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAwGpE"}
@@ -0,0 +1,128 @@
1
+ import { createPromptFragmentSchema, linkFragmentSourceSchema, updatePromptFragmentSchema, } from '@cat-factory/contracts';
2
+ import { Hono } from 'hono';
3
+ import { param } from '../../http/params.js';
4
+ import { jsonBody } from '../../http/validation.js';
5
+ /** Resolve the fragment-library module or send a 503 when unconfigured. */
6
+ function requireLibrary(c) {
7
+ return c.get('container').fragmentLibrary ?? null;
8
+ }
9
+ const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Prompt-fragment library is not configured' } }, 503);
10
+ const sourcesUnavailable = (c) => c.json({
11
+ error: {
12
+ code: 'unavailable',
13
+ message: 'Repo-sourced fragments require the GitHub integration to be configured',
14
+ },
15
+ }, 503);
16
+ /**
17
+ * The prompt-fragment library API (ADR 0006 §8), mounted twice — once under
18
+ * `/accounts/:accountId` and once under `/workspaces/:workspaceId` — so a tier's
19
+ * fragments and repo sources are managed at the scope that owns them. Workspace
20
+ * routes are authorized by the global per-workspace gate in app.ts; account
21
+ * routes guard on account membership here. The merged/resolved read (what an
22
+ * agent actually sees) is workspace-only.
23
+ */
24
+ export function fragmentLibraryController(scope) {
25
+ const app = new Hono();
26
+ const ownerId = (c) => scope === 'account' ? param(c, 'accountId') : param(c, 'workspaceId');
27
+ const ownerKind = scope;
28
+ // Account-scoped routes are an authenticated concept: require sign-in and
29
+ // membership in the addressed account (404 hides existence, mirroring boards).
30
+ if (scope === 'account') {
31
+ app.use('/prompt-fragments', accountGuard);
32
+ app.use('/prompt-fragments/*', accountGuard);
33
+ app.use('/fragment-sources', accountGuard);
34
+ app.use('/fragment-sources/*', accountGuard);
35
+ }
36
+ // ---- fragments (this tier, raw — not merged) ----------------------------
37
+ app.get('/prompt-fragments', async (c) => {
38
+ const lib = requireLibrary(c);
39
+ if (!lib)
40
+ return unavailable(c);
41
+ return c.json(await lib.libraryService.listTier(ownerKind, ownerId(c)));
42
+ });
43
+ app.post('/prompt-fragments', jsonBody(createPromptFragmentSchema), async (c) => {
44
+ const lib = requireLibrary(c);
45
+ if (!lib)
46
+ return unavailable(c);
47
+ const fragment = await lib.libraryService.create(ownerKind, ownerId(c), c.req.valid('json'));
48
+ return c.json(fragment, 201);
49
+ });
50
+ app.patch('/prompt-fragments/:fragmentId{.+}', jsonBody(updatePromptFragmentSchema), async (c) => {
51
+ const lib = requireLibrary(c);
52
+ if (!lib)
53
+ return unavailable(c);
54
+ const fragment = await lib.libraryService.update(ownerKind, ownerId(c), param(c, 'fragmentId'), c.req.valid('json'));
55
+ return c.json(fragment);
56
+ });
57
+ app.delete('/prompt-fragments/:fragmentId{.+}', async (c) => {
58
+ const lib = requireLibrary(c);
59
+ if (!lib)
60
+ return unavailable(c);
61
+ await lib.libraryService.remove(ownerKind, ownerId(c), param(c, 'fragmentId'));
62
+ return c.body(null, 204);
63
+ });
64
+ // ---- repo sources -------------------------------------------------------
65
+ app.get('/fragment-sources', async (c) => {
66
+ const lib = requireLibrary(c);
67
+ if (!lib)
68
+ return unavailable(c);
69
+ if (!lib.sourceService)
70
+ return sourcesUnavailable(c);
71
+ return c.json(await lib.sourceService.list(ownerKind, ownerId(c)));
72
+ });
73
+ app.post('/fragment-sources', jsonBody(linkFragmentSourceSchema), async (c) => {
74
+ const lib = requireLibrary(c);
75
+ if (!lib)
76
+ return unavailable(c);
77
+ if (!lib.sourceService)
78
+ return sourcesUnavailable(c);
79
+ const source = await lib.sourceService.link(ownerKind, ownerId(c), c.req.valid('json'));
80
+ return c.json(source, 201);
81
+ });
82
+ app.delete('/fragment-sources/:id', async (c) => {
83
+ const lib = requireLibrary(c);
84
+ if (!lib)
85
+ return unavailable(c);
86
+ if (!lib.sourceService)
87
+ return sourcesUnavailable(c);
88
+ await lib.sourceService.unlink(param(c, 'id'));
89
+ return c.body(null, 204);
90
+ });
91
+ app.get('/fragment-sources/:id/status', async (c) => {
92
+ const lib = requireLibrary(c);
93
+ if (!lib)
94
+ return unavailable(c);
95
+ if (!lib.sourceService)
96
+ return sourcesUnavailable(c);
97
+ return c.json(await lib.sourceService.status(param(c, 'id')));
98
+ });
99
+ app.post('/fragment-sources/:id/sync', async (c) => {
100
+ const lib = requireLibrary(c);
101
+ if (!lib)
102
+ return unavailable(c);
103
+ if (!lib.sourceService)
104
+ return sourcesUnavailable(c);
105
+ return c.json(await lib.sourceService.sync(param(c, 'id')));
106
+ });
107
+ // ---- resolved (workspace only) — the merged catalog an agent sees -------
108
+ if (scope === 'workspace') {
109
+ app.get('/prompt-fragments/resolved', async (c) => {
110
+ const lib = requireLibrary(c);
111
+ if (!lib)
112
+ return unavailable(c);
113
+ return c.json(await lib.libraryService.resolvedCatalog(param(c, 'workspaceId')));
114
+ });
115
+ }
116
+ return app;
117
+ }
118
+ /** Guard an account-scoped request: require sign-in + membership (404 otherwise). */
119
+ async function accountGuard(c, next) {
120
+ const user = c.get('user');
121
+ if (!user) {
122
+ return c.json({ error: { code: 'unauthorized', message: 'Sign in to manage the library' } }, 401);
123
+ }
124
+ // requireMember throws NotFoundError (→ 404) when the user isn't a member.
125
+ await c.get('container').accountService.requireMember(param(c, 'accountId'), user.id);
126
+ await next();
127
+ }
128
+ //# sourceMappingURL=FragmentLibraryController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FragmentLibraryController.js","sourceRoot":"","sources":["../../../src/modules/fragmentLibrary/FragmentLibraryController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Hono } from 'hono';
2
+ import type { AppEnv } from '../../http/env.js';
3
+ /**
4
+ * Workspace-scoped GitHub endpoints: connection management, projection reads
5
+ * (served from the local DB — fast and rate-limit-free), resync triggers, and repo
6
+ * writes. Mounted under `/workspaces/:workspaceId`. Runtime-neutral: the async resync
7
+ * paths (full backfill, single-repo resync) are delegated to the facade's GitHub
8
+ * gateways, which schedule out of band (Cloudflare Workflow/Queue or pg-boss) or
9
+ * report that the caller should run them inline.
10
+ */
11
+ export declare function githubController(): Hono<AppEnv>;
12
+ //# sourceMappingURL=GitHubController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubController.d.ts","sourceRoot":"","sources":["../../../src/modules/github/GitHubController.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CA+Q/C"}