@cat-factory/server 0.170.1 → 0.172.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 (222) hide show
  1. package/dist/agents/ContainerAgentExecutor.d.ts +0 -8
  2. package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -1
  3. package/dist/agents/ContainerAgentExecutor.js +51 -129
  4. package/dist/agents/ContainerAgentExecutor.js.map +1 -1
  5. package/dist/agents/ContainerEnvConfigRepairer.d.ts.map +1 -1
  6. package/dist/agents/ContainerEnvConfigRepairer.js +6 -0
  7. package/dist/agents/ContainerEnvConfigRepairer.js.map +1 -1
  8. package/dist/agents/ContainerRepoBootstrapper.d.ts.map +1 -1
  9. package/dist/agents/ContainerRepoBootstrapper.js +8 -0
  10. package/dist/agents/ContainerRepoBootstrapper.js.map +1 -1
  11. package/dist/agents/agentContextRecord.d.ts +31 -0
  12. package/dist/agents/agentContextRecord.d.ts.map +1 -0
  13. package/dist/agents/agentContextRecord.js +113 -0
  14. package/dist/agents/agentContextRecord.js.map +1 -0
  15. package/dist/agents/containerAgentBody.d.ts.map +1 -1
  16. package/dist/agents/containerAgentBody.js +8 -0
  17. package/dist/agents/containerAgentBody.js.map +1 -1
  18. package/dist/agents/containerAgentLogging.d.ts +44 -0
  19. package/dist/agents/containerAgentLogging.d.ts.map +1 -0
  20. package/dist/agents/containerAgentLogging.js +28 -0
  21. package/dist/agents/containerAgentLogging.js.map +1 -0
  22. package/dist/config/misconfiguredApp.d.ts +2 -1
  23. package/dist/config/misconfiguredApp.d.ts.map +1 -1
  24. package/dist/config/misconfiguredApp.js +11 -2
  25. package/dist/config/misconfiguredApp.js.map +1 -1
  26. package/dist/http/cors.d.ts +10 -0
  27. package/dist/http/cors.d.ts.map +1 -1
  28. package/dist/http/cors.js +11 -0
  29. package/dist/http/cors.js.map +1 -1
  30. package/dist/http/env.d.ts +19 -1
  31. package/dist/http/env.d.ts.map +1 -1
  32. package/dist/http/errorHandler.d.ts +10 -2
  33. package/dist/http/errorHandler.d.ts.map +1 -1
  34. package/dist/http/errorHandler.js +28 -12
  35. package/dist/http/errorHandler.js.map +1 -1
  36. package/dist/http/guards.d.ts +46 -0
  37. package/dist/http/guards.d.ts.map +1 -0
  38. package/dist/http/guards.js +57 -0
  39. package/dist/http/guards.js.map +1 -0
  40. package/dist/http/requestLogging.d.ts +32 -0
  41. package/dist/http/requestLogging.d.ts.map +1 -0
  42. package/dist/http/requestLogging.js +117 -0
  43. package/dist/http/requestLogging.js.map +1 -0
  44. package/dist/index.d.ts +3 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +3 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/modules/accounts/AccountController.d.ts +0 -10
  49. package/dist/modules/accounts/AccountController.d.ts.map +1 -1
  50. package/dist/modules/accounts/AccountController.js +56 -101
  51. package/dist/modules/accounts/AccountController.js.map +1 -1
  52. package/dist/modules/agentRuns/AgentRunController.d.ts +0 -6
  53. package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -1
  54. package/dist/modules/agentRuns/AgentRunController.js +19 -16
  55. package/dist/modules/agentRuns/AgentRunController.js.map +1 -1
  56. package/dist/modules/artifacts/ArtifactController.d.ts.map +1 -1
  57. package/dist/modules/artifacts/ArtifactController.js +4 -15
  58. package/dist/modules/artifacts/ArtifactController.js.map +1 -1
  59. package/dist/modules/auth/AuthController.d.ts.map +1 -1
  60. package/dist/modules/auth/AuthController.js +14 -9
  61. package/dist/modules/auth/AuthController.js.map +1 -1
  62. package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -1
  63. package/dist/modules/bootstrap/BootstrapController.js +6 -20
  64. package/dist/modules/bootstrap/BootstrapController.js.map +1 -1
  65. package/dist/modules/brainstorm/BrainstormController.d.ts.map +1 -1
  66. package/dist/modules/brainstorm/BrainstormController.js +17 -27
  67. package/dist/modules/brainstorm/BrainstormController.js.map +1 -1
  68. package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
  69. package/dist/modules/bugHunt/BugHuntController.js +4 -12
  70. package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
  71. package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -1
  72. package/dist/modules/clarity/ClarityReviewController.js +18 -27
  73. package/dist/modules/clarity/ClarityReviewController.js.map +1 -1
  74. package/dist/modules/docInterview/DocInterviewController.d.ts.map +1 -1
  75. package/dist/modules/docInterview/DocInterviewController.js +6 -17
  76. package/dist/modules/docInterview/DocInterviewController.js.map +1 -1
  77. package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
  78. package/dist/modules/documents/DocumentSourceController.js +4 -32
  79. package/dist/modules/documents/DocumentSourceController.js.map +1 -1
  80. package/dist/modules/environments/EnvironmentController.d.ts.map +1 -1
  81. package/dist/modules/environments/EnvironmentController.js +10 -63
  82. package/dist/modules/environments/EnvironmentController.js.map +1 -1
  83. package/dist/modules/environments/EnvironmentUserHandlerController.d.ts.map +1 -1
  84. package/dist/modules/environments/EnvironmentUserHandlerController.js +16 -25
  85. package/dist/modules/environments/EnvironmentUserHandlerController.js.map +1 -1
  86. package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -1
  87. package/dist/modules/fragmentLibrary/FragmentLibraryController.js +26 -60
  88. package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -1
  89. package/dist/modules/github/GitHubController.d.ts.map +1 -1
  90. package/dist/modules/github/GitHubController.js +14 -48
  91. package/dist/modules/github/GitHubController.js.map +1 -1
  92. package/dist/modules/gitlab/GitLabController.d.ts.map +1 -1
  93. package/dist/modules/gitlab/GitLabController.js +3 -12
  94. package/dist/modules/gitlab/GitLabController.js.map +1 -1
  95. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.d.ts.map +1 -1
  96. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js +3 -12
  97. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js.map +1 -1
  98. package/dist/modules/initiatives/InitiativeController.d.ts.map +1 -1
  99. package/dist/modules/initiatives/InitiativeController.js +4 -39
  100. package/dist/modules/initiatives/InitiativeController.js.map +1 -1
  101. package/dist/modules/kaizen/KaizenController.d.ts.map +1 -1
  102. package/dist/modules/kaizen/KaizenController.js +3 -10
  103. package/dist/modules/kaizen/KaizenController.js.map +1 -1
  104. package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -1
  105. package/dist/modules/localModels/LocalModelEndpointController.js +21 -31
  106. package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -1
  107. package/dist/modules/localSettings/LocalSettingsController.d.ts +0 -9
  108. package/dist/modules/localSettings/LocalSettingsController.d.ts.map +1 -1
  109. package/dist/modules/localSettings/LocalSettingsController.js +9 -12
  110. package/dist/modules/localSettings/LocalSettingsController.js.map +1 -1
  111. package/dist/modules/merge/MergeTrackRecordController.d.ts.map +1 -1
  112. package/dist/modules/merge/MergeTrackRecordController.js +3 -10
  113. package/dist/modules/merge/MergeTrackRecordController.js.map +1 -1
  114. package/dist/modules/merge/RiskPolicyController.d.ts.map +1 -1
  115. package/dist/modules/merge/RiskPolicyController.js +3 -16
  116. package/dist/modules/merge/RiskPolicyController.js.map +1 -1
  117. package/dist/modules/modelPresets/ModelPresetController.d.ts.map +1 -1
  118. package/dist/modules/modelPresets/ModelPresetController.js +3 -16
  119. package/dist/modules/modelPresets/ModelPresetController.js.map +1 -1
  120. package/dist/modules/notificationWebhook/NotificationWebhookController.d.ts.map +1 -1
  121. package/dist/modules/notificationWebhook/NotificationWebhookController.js +3 -12
  122. package/dist/modules/notificationWebhook/NotificationWebhookController.js.map +1 -1
  123. package/dist/modules/notifications/NotificationController.d.ts.map +1 -1
  124. package/dist/modules/notifications/NotificationController.js +3 -12
  125. package/dist/modules/notifications/NotificationController.js.map +1 -1
  126. package/dist/modules/observability/PlatformObservabilityController.d.ts.map +1 -1
  127. package/dist/modules/observability/PlatformObservabilityController.js +7 -11
  128. package/dist/modules/observability/PlatformObservabilityController.js.map +1 -1
  129. package/dist/modules/openrouter/OpenRouterCatalogController.d.ts.map +1 -1
  130. package/dist/modules/openrouter/OpenRouterCatalogController.js +19 -23
  131. package/dist/modules/openrouter/OpenRouterCatalogController.js.map +1 -1
  132. package/dist/modules/packageRegistries/PackageRegistriesController.d.ts.map +1 -1
  133. package/dist/modules/packageRegistries/PackageRegistriesController.js +3 -12
  134. package/dist/modules/packageRegistries/PackageRegistriesController.js.map +1 -1
  135. package/dist/modules/preflight/PreflightController.d.ts.map +1 -1
  136. package/dist/modules/preflight/PreflightController.js +3 -8
  137. package/dist/modules/preflight/PreflightController.js.map +1 -1
  138. package/dist/modules/preview/PreviewController.d.ts.map +1 -1
  139. package/dist/modules/preview/PreviewController.js +4 -14
  140. package/dist/modules/preview/PreviewController.js.map +1 -1
  141. package/dist/modules/providers/ApiKeyController.d.ts +0 -1
  142. package/dist/modules/providers/ApiKeyController.d.ts.map +1 -1
  143. package/dist/modules/providers/ApiKeyController.js +21 -43
  144. package/dist/modules/providers/ApiKeyController.js.map +1 -1
  145. package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -1
  146. package/dist/modules/providers/PersonalSubscriptionController.js +15 -25
  147. package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -1
  148. package/dist/modules/providers/UserSecretController.d.ts.map +1 -1
  149. package/dist/modules/providers/UserSecretController.js +23 -37
  150. package/dist/modules/providers/UserSecretController.js.map +1 -1
  151. package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -1
  152. package/dist/modules/providers/VendorCredentialController.js +9 -16
  153. package/dist/modules/providers/VendorCredentialController.js.map +1 -1
  154. package/dist/modules/provisioningLogs/ProvisioningLogController.d.ts.map +1 -1
  155. package/dist/modules/provisioningLogs/ProvisioningLogController.js +3 -8
  156. package/dist/modules/provisioningLogs/ProvisioningLogController.js.map +1 -1
  157. package/dist/modules/publicApi/PublicApiKeyController.d.ts +0 -1
  158. package/dist/modules/publicApi/PublicApiKeyController.d.ts.map +1 -1
  159. package/dist/modules/publicApi/PublicApiKeyController.js +8 -13
  160. package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
  161. package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -1
  162. package/dist/modules/recurring/RecurringPipelineController.js +3 -18
  163. package/dist/modules/recurring/RecurringPipelineController.js.map +1 -1
  164. package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -1
  165. package/dist/modules/recurring/TrackerSettingsController.js +3 -10
  166. package/dist/modules/recurring/TrackerSettingsController.js.map +1 -1
  167. package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -1
  168. package/dist/modules/releaseHealth/ReleaseHealthController.js +3 -18
  169. package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -1
  170. package/dist/modules/reports/ReportsController.d.ts.map +1 -1
  171. package/dist/modules/reports/ReportsController.js +7 -11
  172. package/dist/modules/reports/ReportsController.js.map +1 -1
  173. package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -1
  174. package/dist/modules/requirements/RequirementReviewController.js +18 -36
  175. package/dist/modules/requirements/RequirementReviewController.js.map +1 -1
  176. package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -1
  177. package/dist/modules/runners/RunnerPoolController.js +3 -18
  178. package/dist/modules/runners/RunnerPoolController.js.map +1 -1
  179. package/dist/modules/sandbox/SandboxController.d.ts.map +1 -1
  180. package/dist/modules/sandbox/SandboxController.js +3 -32
  181. package/dist/modules/sandbox/SandboxController.js.map +1 -1
  182. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -1
  183. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +3 -10
  184. package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -1
  185. package/dist/modules/services/ServiceMountController.d.ts.map +1 -1
  186. package/dist/modules/services/ServiceMountController.js +3 -16
  187. package/dist/modules/services/ServiceMountController.js.map +1 -1
  188. package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -1
  189. package/dist/modules/settings/WorkspaceSettingsController.js +3 -10
  190. package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -1
  191. package/dist/modules/sharedStack/SharedStackController.d.ts.map +1 -1
  192. package/dist/modules/sharedStack/SharedStackController.js +3 -20
  193. package/dist/modules/sharedStack/SharedStackController.js.map +1 -1
  194. package/dist/modules/skillLibrary/SkillLibraryController.d.ts.map +1 -1
  195. package/dist/modules/skillLibrary/SkillLibraryController.js +21 -44
  196. package/dist/modules/skillLibrary/SkillLibraryController.js.map +1 -1
  197. package/dist/modules/slack/SlackController.d.ts.map +1 -1
  198. package/dist/modules/slack/SlackController.js +4 -26
  199. package/dist/modules/slack/SlackController.js.map +1 -1
  200. package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -1
  201. package/dist/modules/tasks/TaskSourceController.js +5 -47
  202. package/dist/modules/tasks/TaskSourceController.js.map +1 -1
  203. package/dist/modules/testSecrets/TestSecretsController.d.ts.map +1 -1
  204. package/dist/modules/testSecrets/TestSecretsController.js +3 -12
  205. package/dist/modules/testSecrets/TestSecretsController.js.map +1 -1
  206. package/dist/modules/userSettings/UserSettingsController.d.ts.map +1 -1
  207. package/dist/modules/userSettings/UserSettingsController.js +13 -19
  208. package/dist/modules/userSettings/UserSettingsController.js.map +1 -1
  209. package/dist/modules/validation/ValidationConfigController.d.ts.map +1 -1
  210. package/dist/modules/validation/ValidationConfigController.js +3 -14
  211. package/dist/modules/validation/ValidationConfigController.js.map +1 -1
  212. package/dist/modules/workspaces/WorkspaceController.d.ts.map +1 -1
  213. package/dist/modules/workspaces/WorkspaceController.js +9 -4
  214. package/dist/modules/workspaces/WorkspaceController.js.map +1 -1
  215. package/dist/modules/workspaces/WorkspaceMemberController.d.ts.map +1 -1
  216. package/dist/modules/workspaces/WorkspaceMemberController.js +10 -19
  217. package/dist/modules/workspaces/WorkspaceMemberController.js.map +1 -1
  218. package/package.json +6 -6
  219. package/dist/agents/storeAgentContextGate.d.ts +0 -36
  220. package/dist/agents/storeAgentContextGate.d.ts.map +0 -1
  221. package/dist/agents/storeAgentContextGate.js +0 -36
  222. package/dist/agents/storeAgentContextGate.js.map +0 -1
@@ -3,14 +3,11 @@ import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
4
  import * as v from 'valibot';
5
5
  import { param } from '../../http/params.js';
6
- import { UnavailableError } from '@cat-factory/kernel';
7
- /** Resolve the initiatives module or send a 503, returning null when unconfigured. */
6
+ import { requireCapability } from '../../http/guards.js';
7
+ /** Resolve the initiatives module, or refuse with a 503 naming what isn't wired. */
8
8
  function requireInitiatives(c) {
9
- return c.get('container').initiatives ?? null;
9
+ return requireCapability(c.get('container').initiatives, 'Initiatives are not configured');
10
10
  }
11
- const unavailable = () => {
12
- throw new UnavailableError('Initiatives are not configured');
13
- };
14
11
  /**
15
12
  * Workspace-scoped initiative endpoints: create (the initiative-level board block +
16
13
  * its empty entity in one call — the Create Initiative button's target) and the
@@ -23,28 +20,20 @@ export function initiativeController() {
23
20
  const app = new Hono();
24
21
  buildHonoRoute(app, createInitiativeContract, async (c) => {
25
22
  const initiatives = requireInitiatives(c);
26
- if (!initiatives)
27
- return unavailable();
28
23
  const created = await initiatives.service.create(param(c, 'workspaceId'), c.req.valid('json'));
29
24
  return c.json(created, 201);
30
25
  });
31
26
  buildHonoRoute(app, listInitiativesContract, async (c) => {
32
27
  const initiatives = requireInitiatives(c);
33
- if (!initiatives)
34
- return unavailable();
35
28
  return c.json(await initiatives.service.list(param(c, 'workspaceId')), 200);
36
29
  });
37
30
  buildHonoRoute(app, getInitiativeContract, async (c) => {
38
31
  const initiatives = requireInitiatives(c);
39
- if (!initiatives)
40
- return unavailable();
41
32
  const { initiativeId } = c.req.valid('param');
42
33
  return c.json(await initiatives.service.get(param(c, 'workspaceId'), initiativeId), 200);
43
34
  });
44
35
  buildHonoRoute(app, getInitiativeByBlockContract, async (c) => {
45
36
  const initiatives = requireInitiatives(c);
46
- if (!initiatives)
47
- return unavailable();
48
37
  const { blockId } = c.req.valid('param');
49
38
  return c.json(await initiatives.service.getByBlock(param(c, 'workspaceId'), blockId), 200);
50
39
  });
@@ -88,42 +77,32 @@ export function initiativeController() {
88
77
  // answer (no run resume); `continue`/`proceed` resume the parked run, running the (slow)
89
78
  // interviewer LLM in the durable driver. All go through `executionService.initiativeInterview`
90
79
  // (undefined when no initiative store is wired → 503), and return the updated initiative.
91
- const requirePlanning = (c) => c.get('container').executionService.initiativeInterview ?? null;
80
+ const requirePlanning = (c) => requireCapability(c.get('container').executionService.initiativeInterview, 'Initiatives are not configured');
92
81
  buildHonoRoute(app, answerInitiativeQuestionContract, async (c) => {
93
82
  const planning = requirePlanning(c);
94
- if (!planning)
95
- return unavailable();
96
83
  const { blockId } = c.req.valid('param');
97
84
  const { questionId, answer } = c.req.valid('json');
98
85
  return c.json(await planning.answer(param(c, 'workspaceId'), blockId, questionId, answer), 200);
99
86
  });
100
87
  buildHonoRoute(app, setInitiativeQuestionStatusContract, async (c) => {
101
88
  const planning = requirePlanning(c);
102
- if (!planning)
103
- return unavailable();
104
89
  const { blockId } = c.req.valid('param');
105
90
  const { questionId, status } = c.req.valid('json');
106
91
  return c.json(await planning.setQuestionStatus(param(c, 'workspaceId'), blockId, questionId, status), 200);
107
92
  });
108
93
  buildHonoRoute(app, recommendInitiativeAnswerContract, async (c) => {
109
94
  const planning = requirePlanning(c);
110
- if (!planning)
111
- return unavailable();
112
95
  const { blockId } = c.req.valid('param');
113
96
  const { questionId } = c.req.valid('json');
114
97
  return c.json(await planning.recommendAnswer(param(c, 'workspaceId'), blockId, questionId), 200);
115
98
  });
116
99
  buildHonoRoute(app, continueInitiativePlanningContract, async (c) => {
117
100
  const planning = requirePlanning(c);
118
- if (!planning)
119
- return unavailable();
120
101
  const { blockId } = c.req.valid('param');
121
102
  return c.json(await planning.continue(param(c, 'workspaceId'), blockId), 200);
122
103
  });
123
104
  buildHonoRoute(app, proceedInitiativePlanningContract, async (c) => {
124
105
  const planning = requirePlanning(c);
125
- if (!planning)
126
- return unavailable();
127
106
  const { blockId } = c.req.valid('param');
128
107
  return c.json(await planning.proceed(param(c, 'workspaceId'), blockId), 200);
129
108
  });
@@ -133,22 +112,16 @@ export function initiativeController() {
133
112
  // entity so the SPA patches its cache.
134
113
  buildHonoRoute(app, pauseInitiativeContract, async (c) => {
135
114
  const initiatives = requireInitiatives(c);
136
- if (!initiatives)
137
- return unavailable();
138
115
  const { blockId } = c.req.valid('param');
139
116
  return c.json(await initiatives.service.pause(param(c, 'workspaceId'), blockId), 200);
140
117
  });
141
118
  buildHonoRoute(app, resumeInitiativeContract, async (c) => {
142
119
  const initiatives = requireInitiatives(c);
143
- if (!initiatives)
144
- return unavailable();
145
120
  const { blockId } = c.req.valid('param');
146
121
  return c.json(await initiatives.service.resume(param(c, 'workspaceId'), blockId), 200);
147
122
  });
148
123
  buildHonoRoute(app, cancelInitiativeContract, async (c) => {
149
124
  const initiatives = requireInitiatives(c);
150
- if (!initiatives)
151
- return unavailable();
152
125
  const { blockId } = c.req.valid('param');
153
126
  return c.json(await initiatives.service.cancel(param(c, 'workspaceId'), blockId), 200);
154
127
  });
@@ -158,32 +131,24 @@ export function initiativeController() {
158
131
  // other) and returns the updated entity for the SPA to patch.
159
132
  buildHonoRoute(app, promoteInitiativeFollowUpContract, async (c) => {
160
133
  const initiatives = requireInitiatives(c);
161
- if (!initiatives)
162
- return unavailable();
163
134
  const { initiativeId, followUpId } = c.req.valid('param');
164
135
  const updated = await initiatives.service.promoteFollowUp(param(c, 'workspaceId'), initiativeId, followUpId, c.req.valid('json'));
165
136
  return c.json(updated, 200);
166
137
  });
167
138
  buildHonoRoute(app, dismissInitiativeFollowUpContract, async (c) => {
168
139
  const initiatives = requireInitiatives(c);
169
- if (!initiatives)
170
- return unavailable();
171
140
  const { initiativeId, followUpId } = c.req.valid('param');
172
141
  const updated = await initiatives.service.dismissFollowUp(param(c, 'workspaceId'), initiativeId, followUpId);
173
142
  return c.json(updated, 200);
174
143
  });
175
144
  buildHonoRoute(app, updateInitiativeItemContract, async (c) => {
176
145
  const initiatives = requireInitiatives(c);
177
- if (!initiatives)
178
- return unavailable();
179
146
  const { initiativeId, itemId } = c.req.valid('param');
180
147
  const updated = await initiatives.service.updateItem(param(c, 'workspaceId'), initiativeId, itemId, c.req.valid('json'));
181
148
  return c.json(updated, 200);
182
149
  });
183
150
  buildHonoRoute(app, updateInitiativePolicyContract, async (c) => {
184
151
  const initiatives = requireInitiatives(c);
185
- if (!initiatives)
186
- return unavailable();
187
152
  const { initiativeId } = c.req.valid('param');
188
153
  const updated = await initiatives.service.updatePolicy(param(c, 'workspaceId'), initiativeId, c.req.valid('json'));
189
154
  return c.json(updated, 200);
@@ -1 +1 @@
1
- {"version":3,"file":"InitiativeController.js","sourceRoot":"","sources":["../../../src/modules/initiatives/InitiativeController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InitiativeController.js","sourceRoot":"","sources":["../../../src/modules/initiatives/InitiativeController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"KaizenController.d.ts","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CAuB/C"}
1
+ {"version":3,"file":"KaizenController.d.ts","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAS/C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,CAqB/C"}
@@ -2,14 +2,11 @@ import { getKaizenOverviewContract, getKaizenRunGradingsContract } from '@cat-fa
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
4
  import { param } from '../../http/params.js';
5
- import { UnavailableError } from '@cat-factory/kernel';
6
- /** Resolve the Kaizen module or send a 503, returning null when unconfigured. */
5
+ import { requireCapability } from '../../http/guards.js';
6
+ /** Resolve the Kaizen module, or refuse with a 503 naming what isn't wired. */
7
7
  function requireKaizen(c) {
8
- return c.get('container').kaizen ?? null;
8
+ return requireCapability(c.get('container').kaizen, 'Kaizen is not configured');
9
9
  }
10
- const unavailable = () => {
11
- throw new UnavailableError('Kaizen is not configured');
12
- };
13
10
  /**
14
11
  * Workspace-scoped Kaizen endpoints (read-only). The Kaizen screen reads the grading
15
12
  * history + verified-combo library; the run window reads the gradings for one run to show
@@ -22,16 +19,12 @@ export function kaizenController() {
22
19
  // The Kaizen screen: recent grading history + the verified-combo library.
23
20
  buildHonoRoute(app, getKaizenOverviewContract, async (c) => {
24
21
  const kaizen = requireKaizen(c);
25
- if (!kaizen)
26
- return unavailable();
27
22
  const overview = await kaizen.service.getOverview(param(c, 'workspaceId'));
28
23
  return c.json(overview, 200);
29
24
  });
30
25
  // The gradings recorded for one run (the run-window status surface).
31
26
  buildHonoRoute(app, getKaizenRunGradingsContract, async (c) => {
32
27
  const kaizen = requireKaizen(c);
33
- if (!kaizen)
34
- return unavailable();
35
28
  const gradings = await kaizen.service.listForExecution(param(c, 'workspaceId'), c.req.valid('param').executionId);
36
29
  return c.json({ gradings }, 200);
37
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"KaizenController.js","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAEhG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,iFAAiF;AACjF,SAAS,aAAa,CAAmB,CAAa;IACpD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,IAAI,CAAA;AAC1C,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,CAAC,CAAA;AACxD,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,0EAA0E;IAC1E,cAAc,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAA;QAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,qEAAqE;IACrE,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CACpD,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,CACjC,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"KaizenController.js","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAEhG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,+EAA+E;AAC/E,SAAS,aAAa,CAAmB,CAAa;IACpD,OAAO,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAA;AACjF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,0EAA0E;IAC1E,cAAc,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAA;QAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,qEAAqE;IACrE,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CACpD,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,CACjC,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LocalModelEndpointController.d.ts","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAgB/C,wBAAgB,4BAA4B,IAAI,IAAI,CAAC,MAAM,CAAC,CA0C3D"}
1
+ {"version":3,"file":"LocalModelEndpointController.d.ts","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AA0B/C,wBAAgB,4BAA4B,IAAI,IAAI,CAAC,MAAM,CAAC,CAkC3D"}
@@ -2,59 +2,49 @@ import { listLocalModelEndpointsContract, localRunnerSchema, removeLocalModelEnd
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import * as v from 'valibot';
4
4
  import { Hono } from 'hono';
5
- import { UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
5
+ import { requireCapability, requireUser } from '../../http/guards.js';
6
6
  // Per-USER locally-run model endpoints (Ollama / LM Studio / llama.cpp / vLLM / custom
7
7
  // OpenAI-compatible runners). A runner lives on the user's own machine, so endpoints are
8
8
  // scoped to the signed-in user — mounted at the root (not under a workspace) and require
9
9
  // a signed-in user, like personal subscriptions. The optional bearer key is write-only.
10
- const signInRequired = () => {
11
- throw new UnauthorizedError('Sign in to manage local model runners');
12
- };
13
- const unavailable = () => {
14
- throw new UnavailableError('Local model runner storage is not configured');
15
- };
10
+ /** Resolve the local model-runner store, or refuse with a 503 naming what isn't wired. */
11
+ function requireEndpoints(c) {
12
+ return requireCapability(c.get('container').localModelEndpoints, 'Local model runner storage is not configured');
13
+ }
14
+ /** The signed-in caller, or a 401 wording the prompt for what this controller manages. */
15
+ function requireSignedIn(c) {
16
+ return requireUser(c, 'Sign in to manage local model runners');
17
+ }
18
+ /** The same 401, for a route that needs a signed-in caller but reads nothing off them. */
19
+ function assertSignedIn(c) {
20
+ requireSignedIn(c);
21
+ }
16
22
  export function localModelEndpointController() {
17
23
  const app = new Hono();
18
24
  buildHonoRoute(app, listLocalModelEndpointsContract, async (c) => {
19
- const local = c.get('container').localModelEndpoints;
20
- if (!local)
21
- return unavailable();
22
- const user = c.get('user');
23
- if (!user)
24
- return signInRequired();
25
+ const local = requireEndpoints(c);
26
+ const user = requireSignedIn(c);
25
27
  return c.json({ endpoints: await local.list(user.id) }, 200);
26
28
  });
27
29
  buildHonoRoute(app, upsertLocalModelEndpointContract, async (c) => {
28
- const local = c.get('container').localModelEndpoints;
29
- if (!local)
30
- return unavailable();
31
- const user = c.get('user');
32
- if (!user)
33
- return signInRequired();
30
+ const local = requireEndpoints(c);
31
+ const user = requireSignedIn(c);
34
32
  const provider = v.parse(localRunnerSchema, c.req.valid('param').provider);
35
33
  const body = c.req.valid('json');
36
34
  const endpoint = await local.upsert(user.id, { ...body, provider });
37
35
  return c.json(endpoint, 201);
38
36
  });
39
37
  buildHonoRoute(app, removeLocalModelEndpointContract, async (c) => {
40
- const local = c.get('container').localModelEndpoints;
41
- if (!local)
42
- return unavailable();
43
- const user = c.get('user');
44
- if (!user)
45
- return signInRequired();
38
+ const local = requireEndpoints(c);
39
+ const user = requireSignedIn(c);
46
40
  const provider = v.parse(localRunnerSchema, c.req.valid('param').provider);
47
41
  await local.remove(user.id, provider);
48
42
  return c.body(null, 204);
49
43
  });
50
44
  // Probe a runner's `/models` server-side so the UI can validate the URL + list models.
51
45
  buildHonoRoute(app, testLocalModelEndpointContract, async (c) => {
52
- const local = c.get('container').localModelEndpoints;
53
- if (!local)
54
- return unavailable();
55
- const user = c.get('user');
56
- if (!user)
57
- return signInRequired();
46
+ const local = requireEndpoints(c);
47
+ assertSignedIn(c);
58
48
  return c.json(await local.testConnection(c.req.valid('json')), 200);
59
49
  });
60
50
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"LocalModelEndpointController.js","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalModelEndpointController.js","sourceRoot":"","sources":["../../../src/modules/localModels/LocalModelEndpointController.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,4 @@
1
1
  import { Hono } from 'hono';
2
2
  import type { AppEnv } from '../../http/env.js';
3
- /**
4
- * Local-mode operational settings (warm-container-pool sizing + per-repo checkout reuse),
5
- * a per-deployment singleton that replaced the old `LOCAL_POOL_*` / `HARNESS_*` env vars.
6
- * Mounted on every facade but wired only on the local-mode facade — it 503s elsewhere (the
7
- * warm pool is the local Docker-family runner's differentiator, with no Cloudflare/Node
8
- * equivalent). There are no secrets, so `GET` returns the plain config and `PUT` replaces
9
- * it wholesale. Not auth-gated beyond the facade's gate: local mode runs with the auth gate
10
- * open on the developer's own machine, and the settings store is wired only there.
11
- */
12
3
  export declare function localSettingsController(): Hono<AppEnv>;
13
4
  //# sourceMappingURL=LocalSettingsController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAAC,MAAM,CAAC,CAoBtD"}
1
+ {"version":3,"file":"LocalSettingsController.d.ts","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAoB/C,wBAAgB,uBAAuB,IAAI,IAAI,CAAC,MAAM,CAAC,CActD"}
@@ -1,7 +1,7 @@
1
1
  import { getLocalSettingsContract, updateLocalSettingsContract } from '@cat-factory/contracts';
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
- import { UnavailableError } from '@cat-factory/kernel';
4
+ import { requireCapability } from '../../http/guards.js';
5
5
  /**
6
6
  * Local-mode operational settings (warm-container-pool sizing + per-repo checkout reuse),
7
7
  * a per-deployment singleton that replaced the old `LOCAL_POOL_*` / `HARNESS_*` env vars.
@@ -11,22 +11,19 @@ import { UnavailableError } from '@cat-factory/kernel';
11
11
  * it wholesale. Not auth-gated beyond the facade's gate: local mode runs with the auth gate
12
12
  * open on the developer's own machine, and the settings store is wired only there.
13
13
  */
14
+ /** Resolve the local-mode settings store, or refuse with a 503 naming what isn't wired. */
15
+ function requireLocalSettings(c) {
16
+ return requireCapability(c.get('container').localSettings, 'Local-mode settings are only available on the local-mode service');
17
+ }
14
18
  export function localSettingsController() {
15
19
  const app = new Hono();
16
- const unavailable = () => {
17
- throw new UnavailableError('Local-mode settings are only available on the local-mode service');
18
- };
19
20
  buildHonoRoute(app, getLocalSettingsContract, async (c) => {
20
- const container = c.get('container');
21
- if (!container.localSettings)
22
- return unavailable();
23
- return c.json(await container.localSettings.service.read(), 200);
21
+ const localSettings = requireLocalSettings(c);
22
+ return c.json(await localSettings.service.read(), 200);
24
23
  });
25
24
  buildHonoRoute(app, updateLocalSettingsContract, async (c) => {
26
- const container = c.get('container');
27
- if (!container.localSettings)
28
- return unavailable();
29
- return c.json(await container.localSettings.service.write(c.req.valid('json')), 200);
25
+ const localSettings = requireLocalSettings(c);
26
+ return c.json(await localSettings.service.write(c.req.valid('json')), 200);
30
27
  });
31
28
  return app;
32
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LocalSettingsController.js","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,MAAM,WAAW,GAAG,GAAU,EAAE;QAC9B,MAAM,IAAI,gBAAgB,CAAC,kEAAkE,CAAC,CAAA;IAChG,CAAC,CAAA;IAED,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,aAAa;YAAE,OAAO,WAAW,EAAE,CAAA;QAClD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,aAAa;YAAE,OAAO,WAAW,EAAE,CAAA;QAClD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"LocalSettingsController.js","sourceRoot":"","sources":["../../../src/modules/localSettings/LocalSettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;;;;;GAQG;AACH,2FAA2F;AAC3F,SAAS,oBAAoB,CAAmB,CAAa;IAC3D,OAAO,iBAAiB,CACtB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,aAAa,EAChC,kEAAkE,CACnE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,aAAa,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAA;QAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,aAAa,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAA;QAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MergeTrackRecordController.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/MergeTrackRecordController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,CA0BzD"}
1
+ {"version":3,"file":"MergeTrackRecordController.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/MergeTrackRecordController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAY/C;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,CAwBzD"}
@@ -2,14 +2,11 @@ import { listMergeClassRollupsContract, tagMergeReviewEffortContract } from '@ca
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
4
  import { param } from '../../http/params.js';
5
- import { UnavailableError } from '@cat-factory/kernel';
6
- /** Resolve the merge track-record module or send a 503, returning null when unconfigured. */
5
+ import { requireCapability } from '../../http/guards.js';
6
+ /** Resolve the merge track-record module, or refuse with a 503 naming what isn't wired. */
7
7
  function requireTrackRecords(c) {
8
- return c.get('container').mergeTrackRecords ?? null;
8
+ return requireCapability(c.get('container').mergeTrackRecords, 'Merge track records are not configured');
9
9
  }
10
- const unavailable = () => {
11
- throw new UnavailableError('Merge track records are not configured');
12
- };
13
10
  /**
14
11
  * The merge track record's read + tag surface: the per-change-class rollups the preset editor
15
12
  * renders each class's rule against, and the reviewer-effort tag a human leaves on a merged PR.
@@ -25,8 +22,6 @@ export function mergeTrackRecordController() {
25
22
  // never fans out per class.
26
23
  buildHonoRoute(app, listMergeClassRollupsContract, async (c) => {
27
24
  const records = requireTrackRecords(c);
28
- if (!records)
29
- return unavailable();
30
25
  return c.json(await records.service.rollups(param(c, 'workspaceId')), 200);
31
26
  });
32
27
  // Tag (or clear) the reviewer effort a merged PR actually needed. The standalone route exists
@@ -34,8 +29,6 @@ export function mergeTrackRecordController() {
34
29
  // `merge_tag_request` nudge, or the inspector's merge controls.
35
30
  buildHonoRoute(app, tagMergeReviewEffortContract, async (c) => {
36
31
  const records = requireTrackRecords(c);
37
- if (!records)
38
- return unavailable();
39
32
  const updated = await records.service.tag(param(c, 'workspaceId'), c.req.valid('param').recordId, c.req.valid('json').reviewEffort);
40
33
  return c.json(updated, 200);
41
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MergeTrackRecordController.js","sourceRoot":"","sources":["../../../src/modules/merge/MergeTrackRecordController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAEpG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,6FAA6F;AAC7F,SAAS,mBAAmB,CAAmB,CAAa;IAC1D,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAA;AACrD,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,wCAAwC,CAAC,CAAA;AACtE,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,4FAA4F;IAC5F,4BAA4B;IAC5B,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,EAAE,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,8FAA8F;IAC9F,oFAAoF;IACpF,gEAAgE;IAChE,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO;YAAE,OAAO,WAAW,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAC7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CACjC,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"MergeTrackRecordController.js","sourceRoot":"","sources":["../../../src/modules/merge/MergeTrackRecordController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAEpG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,2FAA2F;AAC3F,SAAS,mBAAmB,CAAmB,CAAa;IAC1D,OAAO,iBAAiB,CACtB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,iBAAiB,EACpC,wCAAwC,CACzC,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,4FAA4F;IAC5F,4BAA4B;IAC5B,cAAc,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,8FAA8F;IAC9F,oFAAoF;IACpF,gEAAgE;IAChE,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAC7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CACjC,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RiskPolicyController.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/RiskPolicyController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CA8CnD"}
1
+ {"version":3,"file":"RiskPolicyController.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/RiskPolicyController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAyCnD"}
@@ -3,14 +3,11 @@ import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
4
  import { requireWorkspacePermission } from '../../http/workspaceAccess.js';
5
5
  import { param } from '../../http/params.js';
6
- import { UnavailableError } from '@cat-factory/kernel';
7
- /** Resolve the merge-preset module or send a 503, returning null when unconfigured. */
6
+ import { requireCapability } from '../../http/guards.js';
7
+ /** Resolve the merge-preset module, or refuse with a 503 naming what isn't wired. */
8
8
  function requireRiskPolicies(c) {
9
- return c.get('container').riskPolicies ?? null;
9
+ return requireCapability(c.get('container').riskPolicies, 'Risk policies are not configured');
10
10
  }
11
- const unavailable = () => {
12
- throw new UnavailableError('Risk policies are not configured');
13
- };
14
11
  /**
15
12
  * CRUD for a workspace's merge threshold presets (the library a task picks its
16
13
  * auto-merge policy from). The default preset is seeded lazily on first list and
@@ -21,35 +18,25 @@ export function riskPolicyController() {
21
18
  app.use('*', requireWorkspacePermission('settings.manage'));
22
19
  buildHonoRoute(app, listRiskPoliciesContract, async (c) => {
23
20
  const presets = requireRiskPolicies(c);
24
- if (!presets)
25
- return unavailable();
26
21
  return c.json(await presets.service.list(param(c, 'workspaceId')), 200);
27
22
  });
28
23
  buildHonoRoute(app, createRiskPolicyContract, async (c) => {
29
24
  const presets = requireRiskPolicies(c);
30
- if (!presets)
31
- return unavailable();
32
25
  const preset = await presets.service.create(param(c, 'workspaceId'), c.req.valid('json'));
33
26
  return c.json(preset, 201);
34
27
  });
35
28
  buildHonoRoute(app, updateRiskPolicyContract, async (c) => {
36
29
  const presets = requireRiskPolicies(c);
37
- if (!presets)
38
- return unavailable();
39
30
  const preset = await presets.service.update(param(c, 'workspaceId'), c.req.valid('param').presetId, c.req.valid('json'));
40
31
  return c.json(preset, 200);
41
32
  });
42
33
  buildHonoRoute(app, deleteRiskPolicyContract, async (c) => {
43
34
  const presets = requireRiskPolicies(c);
44
- if (!presets)
45
- return unavailable();
46
35
  await presets.service.remove(param(c, 'workspaceId'), c.req.valid('param').presetId);
47
36
  return c.body(null, 204);
48
37
  });
49
38
  buildHonoRoute(app, reseedRiskPolicyContract, async (c) => {
50
39
  const presets = requireRiskPolicies(c);
51
- if (!presets)
52
- return unavailable();
53
40
  const preset = await presets.service.reseed(param(c, 'workspaceId'), c.req.valid('param').presetId);
54
41
  return c.json(preset, 200);
55
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RiskPolicyController.js","sourceRoot":"","sources":["../../../src/modules/merge/RiskPolicyController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RiskPolicyController.js","sourceRoot":"","sources":["../../../src/modules/merge/RiskPolicyController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModelPresetController.d.ts","sourceRoot":"","sources":["../../../src/modules/modelPresets/ModelPresetController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CA8CpD"}
1
+ {"version":3,"file":"ModelPresetController.d.ts","sourceRoot":"","sources":["../../../src/modules/modelPresets/ModelPresetController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CAyCpD"}
@@ -3,14 +3,11 @@ import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
4
  import { requireWorkspacePermission } from '../../http/workspaceAccess.js';
5
5
  import { param } from '../../http/params.js';
6
- import { UnavailableError } from '@cat-factory/kernel';
7
- /** Resolve the model-preset module or send a 503, returning null when unconfigured. */
6
+ import { requireCapability } from '../../http/guards.js';
7
+ /** Resolve the model-preset module, or refuse with a 503 naming what isn't wired. */
8
8
  function requireModelPresets(c) {
9
- return c.get('container').modelPresets ?? null;
9
+ return requireCapability(c.get('container').modelPresets, 'Model presets are not configured');
10
10
  }
11
- const unavailable = () => {
12
- throw new UnavailableError('Model presets are not configured');
13
- };
14
11
  /**
15
12
  * CRUD for a workspace's model presets (the library a task picks its model→agent
16
13
  * mapping from; each preset is a base model applied to every agent kind plus per-kind
@@ -22,35 +19,25 @@ export function modelPresetController() {
22
19
  app.use('*', requireWorkspacePermission('settings.manage'));
23
20
  buildHonoRoute(app, listModelPresetsContract, async (c) => {
24
21
  const presets = requireModelPresets(c);
25
- if (!presets)
26
- return unavailable();
27
22
  return c.json(await presets.service.list(param(c, 'workspaceId')), 200);
28
23
  });
29
24
  buildHonoRoute(app, createModelPresetContract, async (c) => {
30
25
  const presets = requireModelPresets(c);
31
- if (!presets)
32
- return unavailable();
33
26
  const preset = await presets.service.create(param(c, 'workspaceId'), c.req.valid('json'));
34
27
  return c.json(preset, 201);
35
28
  });
36
29
  buildHonoRoute(app, updateModelPresetContract, async (c) => {
37
30
  const presets = requireModelPresets(c);
38
- if (!presets)
39
- return unavailable();
40
31
  const preset = await presets.service.update(param(c, 'workspaceId'), c.req.valid('param').presetId, c.req.valid('json'));
41
32
  return c.json(preset, 200);
42
33
  });
43
34
  buildHonoRoute(app, deleteModelPresetContract, async (c) => {
44
35
  const presets = requireModelPresets(c);
45
- if (!presets)
46
- return unavailable();
47
36
  await presets.service.remove(param(c, 'workspaceId'), c.req.valid('param').presetId);
48
37
  return c.body(null, 204);
49
38
  });
50
39
  buildHonoRoute(app, reseedModelPresetContract, async (c) => {
51
40
  const presets = requireModelPresets(c);
52
- if (!presets)
53
- return unavailable();
54
41
  const preset = await presets.service.reseed(param(c, 'workspaceId'), c.req.valid('param').presetId);
55
42
  return c.json(preset, 200);
56
43
  });