@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 { requireWorkspacePermission } from '../../http/workspaceAccess.js';
5
5
  import { param } from '../../http/params.js';
6
- import { UnavailableError } from '@cat-factory/kernel';
7
- /** Resolve the release-health module or send a 503, returning null when unconfigured. */
6
+ import { requireCapability } from '../../http/guards.js';
7
+ /** Resolve the release-health module, or refuse with a 503 naming what isn't wired. */
8
8
  function requireReleaseHealth(c) {
9
- return c.get('container').releaseHealth ?? null;
9
+ return requireCapability(c.get('container').releaseHealth, 'The observability integration is not configured');
10
10
  }
11
- const unavailable = () => {
12
- throw new UnavailableError('The observability integration is not configured');
13
- };
14
11
  /**
15
12
  * Per-workspace settings for the post-release-health gate: the (single) observability
16
13
  * connection (provider + credentials, write-only, never read back) and the per-block
@@ -21,40 +18,28 @@ export function releaseHealthController() {
21
18
  app.use('*', requireWorkspacePermission('settings.manage'));
22
19
  buildHonoRoute(app, getObservabilityConnectionContract, async (c) => {
23
20
  const rh = requireReleaseHealth(c);
24
- if (!rh)
25
- return unavailable();
26
21
  return c.json(await rh.service.getConnection(param(c, 'workspaceId')), 200);
27
22
  });
28
23
  buildHonoRoute(app, setObservabilityConnectionContract, async (c) => {
29
24
  const rh = requireReleaseHealth(c);
30
- if (!rh)
31
- return unavailable();
32
25
  return c.json(await rh.service.setConnection(param(c, 'workspaceId'), c.req.valid('json')), 200);
33
26
  });
34
27
  buildHonoRoute(app, deleteObservabilityConnectionContract, async (c) => {
35
28
  const rh = requireReleaseHealth(c);
36
- if (!rh)
37
- return unavailable();
38
29
  await rh.service.deleteConnection(param(c, 'workspaceId'));
39
30
  return c.body(null, 204);
40
31
  });
41
32
  buildHonoRoute(app, listReleaseHealthConfigsContract, async (c) => {
42
33
  const rh = requireReleaseHealth(c);
43
- if (!rh)
44
- return unavailable();
45
34
  return c.json(await rh.service.listConfigs(param(c, 'workspaceId')), 200);
46
35
  });
47
36
  buildHonoRoute(app, upsertReleaseHealthConfigContract, async (c) => {
48
37
  const rh = requireReleaseHealth(c);
49
- if (!rh)
50
- return unavailable();
51
38
  const config = await rh.service.upsertConfig(param(c, 'workspaceId'), c.req.valid('param').blockId, c.req.valid('json'));
52
39
  return c.json(config, 200);
53
40
  });
54
41
  buildHonoRoute(app, deleteReleaseHealthConfigContract, async (c) => {
55
42
  const rh = requireReleaseHealth(c);
56
- if (!rh)
57
- return unavailable();
58
43
  await rh.service.deleteConfig(param(c, 'workspaceId'), c.req.valid('param').blockId);
59
44
  return c.body(null, 204);
60
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseHealthController.js","sourceRoot":"","sources":["../../../src/modules/releaseHealth/ReleaseHealthController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReleaseHealthController.js","sourceRoot":"","sources":["../../../src/modules/releaseHealth/ReleaseHealthController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsController.d.ts","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAoBhD"}
1
+ {"version":3,"file":"ReportsController.d.ts","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAmBhD"}
@@ -1,15 +1,13 @@
1
1
  import { getReportsContract } from '@cat-factory/contracts';
2
2
  import { buildHonoRoute } from '@toad-contracts/hono';
3
3
  import { Hono } from 'hono';
4
- import { UnavailableError, UnauthorizedError } from '@cat-factory/kernel';
5
- /** The signed-in user, or null. Generic over the (contract-typed) env, like AccountController. */
6
- function accountUser(c) {
7
- const user = c.get('user');
8
- return user ? { id: user.id, login: user.login, name: user.name } : null;
4
+ import { UnavailableError } from '@cat-factory/kernel';
5
+ import { requireUser } from '../../http/guards.js';
6
+ /** The signed-in user, or a 401. Generic over the (contract-typed) env, like AccountController. */
7
+ function requireAccountUser(c) {
8
+ const user = requireUser(c, 'Sign in to view reports');
9
+ return { id: user.id, login: user.login, name: user.name };
9
10
  }
10
- const signInRequired = () => {
11
- throw new UnauthorizedError('Sign in to view reports');
12
- };
13
11
  /**
14
12
  * Reports: `GET /accounts/:accountId/reports` — cross-cutting usage analytics for an
15
13
  * account over a time window (spend per model / agent kind, and spend + run activity per
@@ -29,9 +27,7 @@ const signInRequired = () => {
29
27
  export function reportsController() {
30
28
  const app = new Hono();
31
29
  buildHonoRoute(app, getReportsContract, async (c) => {
32
- const user = accountUser(c);
33
- if (!user)
34
- return signInRequired();
30
+ const user = requireAccountUser(c);
35
31
  const container = c.get('container');
36
32
  if (!container.reports) {
37
33
  throw new UnavailableError('Reports are not available on this deployment');
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsController.js","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEzE,kGAAkG;AAClG,SAAS,WAAW,CAAmB,CAAa;IAClD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1E,CAAC;AAED,MAAM,cAAc,GAAG,GAAU,EAAE;IACjC,MAAM,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,CAAA;AACxD,CAAC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,cAAc,EAAE,CAAA;QAClC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,gBAAgB,CAAC,8CAA8C,CAAC,CAAA;QAC5E,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC1C,MAAM,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CACX,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,EAC7F,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"ReportsController.js","sourceRoot":"","sources":["../../../src/modules/reports/ReportsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,mGAAmG;AACnG,SAAS,kBAAkB,CAAmB,CAAa;IACzD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAA;IACtD,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,gBAAgB,CAAC,8CAA8C,CAAC,CAAA;QAC5E,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC1C,MAAM,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClC,OAAO,CAAC,CAAC,IAAI,CACX,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,EAC7F,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequirementReviewController.d.ts","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewController.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAAC,MAAM,CAAC,CAyL1D"}
1
+ {"version":3,"file":"RequirementReviewController.d.ts","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewController.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAmB/C;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAAC,MAAM,CAAC,CA6K1D"}
@@ -2,14 +2,20 @@ import { acceptRequirementRecommendationContract, getRequirementReviewContract,
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 requirements module or send a 503, returning null when unconfigured. */
5
+ import { requireCapability } from '../../http/guards.js';
6
+ /** Resolve the requirements module, or refuse with a 503 naming what isn't wired. */
7
7
  function requireRequirements(c) {
8
- return c.get('container').requirements ?? null;
8
+ return requireCapability(c.get('container').requirements, 'Requirements review is not configured');
9
+ }
10
+ /**
11
+ * The requirements module as a REFUSAL only. These routes drive their mutations through the
12
+ * execution service and read nothing off the module itself — but an unwired deployment must
13
+ * still 503 rather than answer. Discarding a `requireRequirements` result would read as a
14
+ * no-op statement, so the guard is named for what it does and returns `void`.
15
+ */
16
+ function assertRequirementsWired(c) {
17
+ requireRequirements(c);
9
18
  }
10
- const unavailable = () => {
11
- throw new UnavailableError('Requirements review is not configured');
12
- };
13
19
  /**
14
20
  * Workspace-scoped requirements-review endpoints. The initial review runs an LLM inline and
15
21
  * returns the entity. Incorporation, by contrast, is ASYNCHRONOUS: it records the human's
@@ -23,8 +29,6 @@ export function requirementReviewController() {
23
29
  // The current review for a block (null when none has been run yet).
24
30
  buildHonoRoute(app, getRequirementReviewContract, async (c) => {
25
31
  const requirements = requireRequirements(c);
26
- if (!requirements)
27
- return unavailable();
28
32
  const review = await requirements.service.getForBlock(param(c, 'workspaceId'), c.req.valid('param').blockId);
29
33
  return c.json(review, 200);
30
34
  });
@@ -32,9 +36,7 @@ export function requirementReviewController() {
32
36
  // Routed through the execution service so the off-path surface honours the task's
33
37
  // merge-preset knobs (iteration budget + tolerated severity) exactly like the gate.
34
38
  buildHonoRoute(app, reviewRequirementsContract, async (c) => {
35
- const requirements = requireRequirements(c);
36
- if (!requirements)
37
- return unavailable();
39
+ assertRequirementsWired(c);
38
40
  const review = await c
39
41
  .get('container')
40
42
  .executionService.requirementsReview.review(param(c, 'workspaceId'), c.req.valid('param').blockId);
@@ -43,8 +45,6 @@ export function requirementReviewController() {
43
45
  // Answer a single review item.
44
46
  buildHonoRoute(app, replyRequirementItemContract, async (c) => {
45
47
  const requirements = requireRequirements(c);
46
- if (!requirements)
47
- return unavailable();
48
48
  const { reviewId, itemId } = c.req.valid('param');
49
49
  const review = await requirements.service.replyToItem(param(c, 'workspaceId'), reviewId, itemId, c.req.valid('json').reply);
50
50
  return c.json(review, 200);
@@ -52,8 +52,6 @@ export function requirementReviewController() {
52
52
  // Set a review item's status (resolve / dismiss / reopen).
53
53
  buildHonoRoute(app, updateRequirementItemStatusContract, async (c) => {
54
54
  const requirements = requireRequirements(c);
55
- if (!requirements)
56
- return unavailable();
57
55
  const { reviewId, itemId } = c.req.valid('param');
58
56
  const review = await requirements.service.setItemStatus(param(c, 'workspaceId'), reviewId, itemId, c.req.valid('json').status);
59
57
  return c.json(review, 200);
@@ -65,9 +63,7 @@ export function requirementReviewController() {
65
63
  // calls them back only if the re-review needs input. Blocks scoped (the review is resolved
66
64
  // from the block) to match the other run-driving endpoints.
67
65
  buildHonoRoute(app, incorporateRequirementsContract, async (c) => {
68
- const requirements = requireRequirements(c);
69
- if (!requirements)
70
- return unavailable();
66
+ assertRequirementsWired(c);
71
67
  const review = await c
72
68
  .get('container')
73
69
  .executionService.requirementsReview.incorporate(param(c, 'workspaceId'), c.req.valid('param').blockId, c.req.valid('json').feedback);
@@ -77,9 +73,7 @@ export function requirementReviewController() {
77
73
  // parked run advances; otherwise the response carries the next cycle's findings (or the
78
74
  // iteration-cap state). Returns the updated review.
79
75
  buildHonoRoute(app, reReviewRequirementsContract, async (c) => {
80
- const requirements = requireRequirements(c);
81
- if (!requirements)
82
- return unavailable();
76
+ assertRequirementsWired(c);
83
77
  const review = await c
84
78
  .get('container')
85
79
  .executionService.requirementsReview.reReview(param(c, 'workspaceId'), c.req.valid('param').blockId);
@@ -88,9 +82,7 @@ export function requirementReviewController() {
88
82
  // Proceed: settle the requirements (last incorporated doc wins downstream) and advance
89
83
  // the parked run. Used when every finding is dismissed.
90
84
  buildHonoRoute(app, proceedRequirementsContract, async (c) => {
91
- const requirements = requireRequirements(c);
92
- if (!requirements)
93
- return unavailable();
85
+ assertRequirementsWired(c);
94
86
  const review = await c
95
87
  .get('container')
96
88
  .executionService.requirementsReview.proceed(param(c, 'workspaceId'), c.req.valid('param').blockId);
@@ -105,8 +97,6 @@ export function requirementReviewController() {
105
97
  // review exists.
106
98
  buildHonoRoute(app, requestRequirementRecommendationsContract, async (c) => {
107
99
  const requirements = requireRequirements(c);
108
- if (!requirements)
109
- return unavailable();
110
100
  const workspaceId = param(c, 'workspaceId');
111
101
  const blockId = c.req.valid('param').blockId;
112
102
  const review = await requirements.service.getForBlock(workspaceId, blockId);
@@ -122,16 +112,12 @@ export function requirementReviewController() {
122
112
  // incorporation), reject it, or re-request it with a "do it differently" note.
123
113
  buildHonoRoute(app, acceptRequirementRecommendationContract, async (c) => {
124
114
  const requirements = requireRequirements(c);
125
- if (!requirements)
126
- return unavailable();
127
115
  const { reviewId, recId } = c.req.valid('param');
128
116
  const review = await requirements.service.acceptRecommendation(param(c, 'workspaceId'), reviewId, recId);
129
117
  return c.json(review, 200);
130
118
  });
131
119
  buildHonoRoute(app, rejectRequirementRecommendationContract, async (c) => {
132
120
  const requirements = requireRequirements(c);
133
- if (!requirements)
134
- return unavailable();
135
121
  const { reviewId, recId } = c.req.valid('param');
136
122
  const review = await requirements.service.rejectRecommendation(param(c, 'workspaceId'), reviewId, recId);
137
123
  return c.json(review, 200);
@@ -139,9 +125,7 @@ export function requirementReviewController() {
139
125
  // Re-request a recommendation with a "do it differently" note. ASYNCHRONOUS like the batch:
140
126
  // resets the recommendation to `pending` and signals the driver to re-run the Writer.
141
127
  buildHonoRoute(app, reRequestRequirementRecommendationContract, async (c) => {
142
- const requirements = requireRequirements(c);
143
- if (!requirements)
144
- return unavailable();
128
+ assertRequirementsWired(c);
145
129
  const { reviewId, recId } = c.req.valid('param');
146
130
  const review = await c
147
131
  .get('container')
@@ -151,9 +135,7 @@ export function requirementReviewController() {
151
135
  // Resolve a review that hit its iteration cap: one more round / proceed anyway / stop
152
136
  // and reset the task to phase zero. Returns the updated review.
153
137
  buildHonoRoute(app, resolveRequirementsExceededContract, async (c) => {
154
- const requirements = requireRequirements(c);
155
- if (!requirements)
156
- return unavailable();
138
+ assertRequirementsWired(c);
157
139
  const review = await c
158
140
  .get('container')
159
141
  .executionService.requirementsReview.resolveExceeded(param(c, 'workspaceId'), c.req.valid('param').blockId, c.req.valid('json').choice);
@@ -1 +1 @@
1
- {"version":3,"file":"RequirementReviewController.js","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RequirementReviewController.js","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerPoolController.d.ts","sourceRoot":"","sources":["../../../src/modules/runners/RunnerPoolController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CA6DnD"}
1
+ {"version":3,"file":"RunnerPoolController.d.ts","sourceRoot":"","sources":["../../../src/modules/runners/RunnerPoolController.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,CAuDnD"}
@@ -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 runners module or send a 503, returning null when unconfigured. */
6
+ import { requireCapability } from '../../http/guards.js';
7
+ /** Resolve the runners module, or refuse with a 503 naming what isn't wired. */
8
8
  function requireRunners(c) {
9
- return c.get('container').runners ?? null;
9
+ return requireCapability(c.get('container').runners, 'Runner pool integration is not configured');
10
10
  }
11
- const unavailable = () => {
12
- throw new UnavailableError('Runner pool integration is not configured');
13
- };
14
11
  /**
15
12
  * Workspace-scoped runner-pool endpoints: registering the pool scheduler manifest
16
13
  * plus its encrypted secret bundle, rotating the secrets, and unregistering. The
@@ -22,15 +19,11 @@ export function runnerPoolController() {
22
19
  app.use('*', requireWorkspacePermission('integrations.manage'));
23
20
  buildHonoRoute(app, getRunnerPoolConnectionContract, async (c) => {
24
21
  const runners = requireRunners(c);
25
- if (!runners)
26
- return unavailable();
27
22
  const connection = await runners.connectionService.getConnection(param(c, 'workspaceId'));
28
23
  return c.json({ connection }, 200);
29
24
  });
30
25
  buildHonoRoute(app, registerRunnerPoolContract, async (c) => {
31
26
  const runners = requireRunners(c);
32
- if (!runners)
33
- return unavailable();
34
27
  const { config, secrets } = c.req.valid('json');
35
28
  const connection = await runners.connectionService.register(param(c, 'workspaceId'), {
36
29
  config,
@@ -40,28 +33,20 @@ export function runnerPoolController() {
40
33
  });
41
34
  buildHonoRoute(app, updateRunnerPoolSecretsContract, async (c) => {
42
35
  const runners = requireRunners(c);
43
- if (!runners)
44
- return unavailable();
45
36
  const connection = await runners.connectionService.updateSecrets(param(c, 'workspaceId'), c.req.valid('json').secrets);
46
37
  return c.json(connection, 200);
47
38
  });
48
39
  buildHonoRoute(app, unregisterRunnerPoolContract, async (c) => {
49
40
  const runners = requireRunners(c);
50
- if (!runners)
51
- return unavailable();
52
41
  await runners.connectionService.unregister(param(c, 'workspaceId'));
53
42
  return c.body(null, 204);
54
43
  });
55
44
  buildHonoRoute(app, describeRunnerPoolProviderContract, async (c) => {
56
45
  const runners = requireRunners(c);
57
- if (!runners)
58
- return unavailable();
59
46
  return c.json(await runners.connectionService.describeProvider(param(c, 'workspaceId'), c.req.query('kind')), 200);
60
47
  });
61
48
  buildHonoRoute(app, testRunnerPoolConnectionContract, async (c) => {
62
49
  const runners = requireRunners(c);
63
- if (!runners)
64
- return unavailable();
65
50
  return c.json(await runners.connectionService.testConnection(param(c, 'workspaceId'), c.req.valid('json')), 200);
66
51
  });
67
52
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerPoolController.js","sourceRoot":"","sources":["../../../src/modules/runners/RunnerPoolController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunnerPoolController.js","sourceRoot":"","sources":["../../../src/modules/runners/RunnerPoolController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SandboxController.d.ts","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAc/C;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CA+HhD"}
1
+ {"version":3,"file":"SandboxController.d.ts","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAU/C;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,CAkHhD"}
@@ -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 Sandbox module or send a 503, returning null when unconfigured. */
6
+ import { requireCapability } from '../../http/guards.js';
7
+ /** Resolve the Sandbox module, or refuse with a 503 naming what isn't wired. */
8
8
  function requireSandbox(c) {
9
- return c.get('container').sandbox ?? null;
9
+ return requireCapability(c.get('container').sandbox, 'The Sandbox is not configured');
10
10
  }
11
- const unavailable = () => {
12
- throw new UnavailableError('The Sandbox is not configured');
13
- };
14
11
  /**
15
12
  * The Sandbox API (the parallel prompt/model testing surface): manage versioned prompt
16
13
  * candidates + the fixture library, define experiments (prompt × model × fixture), and
@@ -23,8 +20,6 @@ export function sandboxController() {
23
20
  // ---- overview -------------------------------------------------------------
24
21
  buildHonoRoute(app, sandboxOverviewContract, async (c) => {
25
22
  const sandbox = requireSandbox(c);
26
- if (!sandbox)
27
- return unavailable();
28
23
  const overview = await sandbox.service.overview(param(c, 'workspaceId'));
29
24
  // The catalog is exposed as `readonly` arrays; clone into the mutable shape the
30
25
  // contract response schema infers (the readonly-ness is a source-side detail only).
@@ -39,85 +34,61 @@ export function sandboxController() {
39
34
  // ---- prompt versions ------------------------------------------------------
40
35
  buildHonoRoute(app, listSandboxPromptsContract, async (c) => {
41
36
  const sandbox = requireSandbox(c);
42
- if (!sandbox)
43
- return unavailable();
44
37
  const agentKind = c.req.valid('query').agentKind;
45
38
  return c.json(await sandbox.service.listPrompts(param(c, 'workspaceId'), agentKind), 200);
46
39
  });
47
40
  buildHonoRoute(app, cloneSandboxPromptContract, async (c) => {
48
41
  const sandbox = requireSandbox(c);
49
- if (!sandbox)
50
- return unavailable();
51
42
  const version = await sandbox.service.clonePrompt(param(c, 'workspaceId'), c.req.valid('json'));
52
43
  return c.json(version, 201);
53
44
  });
54
45
  buildHonoRoute(app, saveSandboxPromptContract, async (c) => {
55
46
  const sandbox = requireSandbox(c);
56
- if (!sandbox)
57
- return unavailable();
58
47
  const version = await sandbox.service.saveVersion(param(c, 'workspaceId'), c.req.valid('json'));
59
48
  return c.json(version, 201);
60
49
  });
61
50
  buildHonoRoute(app, setSandboxPromptLabelsContract, async (c) => {
62
51
  const sandbox = requireSandbox(c);
63
- if (!sandbox)
64
- return unavailable();
65
52
  const version = await sandbox.service.setLabels(param(c, 'workspaceId'), c.req.valid('param').promptId, c.req.valid('json'));
66
53
  return c.json(version, 200);
67
54
  });
68
55
  buildHonoRoute(app, archiveSandboxPromptContract, async (c) => {
69
56
  const sandbox = requireSandbox(c);
70
- if (!sandbox)
71
- return unavailable();
72
57
  await sandbox.service.archivePrompt(param(c, 'workspaceId'), c.req.valid('param').promptId);
73
58
  return c.body(null, 204);
74
59
  });
75
60
  // ---- fixtures -------------------------------------------------------------
76
61
  buildHonoRoute(app, listSandboxFixturesContract, async (c) => {
77
62
  const sandbox = requireSandbox(c);
78
- if (!sandbox)
79
- return unavailable();
80
63
  return c.json(await sandbox.service.listFixtures(param(c, 'workspaceId')), 200);
81
64
  });
82
65
  buildHonoRoute(app, createSandboxFixtureContract, async (c) => {
83
66
  const sandbox = requireSandbox(c);
84
- if (!sandbox)
85
- return unavailable();
86
67
  const fixture = await sandbox.service.createFixture(param(c, 'workspaceId'), c.req.valid('json'));
87
68
  return c.json(fixture, 201);
88
69
  });
89
70
  buildHonoRoute(app, removeSandboxFixtureContract, async (c) => {
90
71
  const sandbox = requireSandbox(c);
91
- if (!sandbox)
92
- return unavailable();
93
72
  await sandbox.service.removeFixture(param(c, 'workspaceId'), c.req.valid('param').fixtureId);
94
73
  return c.body(null, 204);
95
74
  });
96
75
  // ---- experiments ----------------------------------------------------------
97
76
  buildHonoRoute(app, listSandboxExperimentsContract, async (c) => {
98
77
  const sandbox = requireSandbox(c);
99
- if (!sandbox)
100
- return unavailable();
101
78
  return c.json(await sandbox.service.listExperiments(param(c, 'workspaceId')), 200);
102
79
  });
103
80
  buildHonoRoute(app, createSandboxExperimentContract, async (c) => {
104
81
  const sandbox = requireSandbox(c);
105
- if (!sandbox)
106
- return unavailable();
107
82
  const experiment = await sandbox.service.createExperiment(param(c, 'workspaceId'), c.req.valid('json'));
108
83
  return c.json(experiment, 201);
109
84
  });
110
85
  buildHonoRoute(app, getSandboxExperimentContract, async (c) => {
111
86
  const sandbox = requireSandbox(c);
112
- if (!sandbox)
113
- return unavailable();
114
87
  return c.json(await sandbox.service.getExperiment(param(c, 'workspaceId'), c.req.valid('param').experimentId), 200);
115
88
  });
116
89
  // Run + grade every cell of the experiment, then return the full result grid.
117
90
  buildHonoRoute(app, launchSandboxExperimentContract, async (c) => {
118
91
  const sandbox = requireSandbox(c);
119
- if (!sandbox)
120
- return unavailable();
121
92
  return c.json(await sandbox.runService.launch(param(c, 'workspaceId'), c.req.valid('param').experimentId), 200);
122
93
  });
123
94
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"SandboxController.js","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SandboxController.js","sourceRoot":"","sources":["../../../src/modules/sandbox/SandboxController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,+BAA+B,EAC/B,4BAA4B,EAC5B,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,gFAAgF;AAChF,SAAS,cAAc,CAAmB,CAAa;IACrD,OAAO,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAA;AACvF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAE/D,8EAA8E;IAC9E,cAAc,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAA;QACxE,gFAAgF;QAChF,oFAAoF;QACpF,OAAO,CAAC,CAAC,IAAI,CACX;YACE,GAAG,QAAQ;YACX,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7C,GAAG,IAAI;gBACP,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;aACrC,CAAC,CAAC;SACJ,EACD,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,8EAA8E;IAC9E,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAA;QAChD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QAC/F,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QAC/F,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAC7C,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,CACpB,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC3F,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,8EAA8E;IAC9E,cAAc,CAAC,GAAG,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CACjD,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CACpB,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAA;QAC5F,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,8EAA8E;IAC9E,cAAc,CAAC,GAAG,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CACvD,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CACpB,CAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,OAAO,CAAC,CAAC,IAAI,CACX,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CACjC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,CAClC,EACD,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,8EAA8E;IAC9E,cAAc,CAAC,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACjC,OAAO,CAAC,CAAC,IAAI,CACX,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,EAC3F,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceFragmentDefaultsController.d.ts","sourceRoot":"","sources":["../../../src/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;GAIG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAAC,MAAM,CAAC,CAiBhE"}
1
+ {"version":3,"file":"ServiceFragmentDefaultsController.d.ts","sourceRoot":"","sources":["../../../src/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAY/C;;;;GAIG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAAC,MAAM,CAAC,CAehE"}
@@ -2,14 +2,11 @@ import { getServiceFragmentDefaultsContract, setServiceFragmentDefaultsContract,
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 service-fragment-defaults module or send a 503, returning null when unconfigured. */
5
+ import { requireCapability } from '../../http/guards.js';
6
+ /** Resolve the service-fragment-defaults module, or refuse with a 503 naming what isn't wired. */
7
7
  function requireDefaults(c) {
8
- return c.get('container').serviceFragmentDefaults ?? null;
8
+ return requireCapability(c.get('container').serviceFragmentDefaults, 'Service fragment defaults are not configured');
9
9
  }
10
- const unavailable = () => {
11
- throw new UnavailableError('Service fragment defaults are not configured');
12
- };
13
10
  /**
14
11
  * Read/replace a workspace's default service-fragment selection (the best-practice
15
12
  * fragment ids new services inherit). PUT replaces the whole list wholesale. Mounted
@@ -19,14 +16,10 @@ export function serviceFragmentDefaultsController() {
19
16
  const app = new Hono();
20
17
  buildHonoRoute(app, getServiceFragmentDefaultsContract, async (c) => {
21
18
  const defaults = requireDefaults(c);
22
- if (!defaults)
23
- return unavailable();
24
19
  return c.json(await defaults.service.get(param(c, 'workspaceId')), 200);
25
20
  });
26
21
  buildHonoRoute(app, setServiceFragmentDefaultsContract, async (c) => {
27
22
  const defaults = requireDefaults(c);
28
- if (!defaults)
29
- return unavailable();
30
23
  const stored = await defaults.service.set(param(c, 'workspaceId'), c.req.valid('json'));
31
24
  return c.json(stored, 200);
32
25
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceFragmentDefaultsController.js","sourceRoot":"","sources":["../../../src/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,wBAAwB,CAAA;AAE/B,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,oGAAoG;AACpG,SAAS,eAAe,CAAmB,CAAa;IACtD,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAA;AAC3D,CAAC;AAED,MAAM,WAAW,GAAG,GAAU,EAAE;IAC9B,MAAM,IAAI,gBAAgB,CAAC,8CAA8C,CAAC,CAAA;AAC5E,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC;IAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,QAAQ;YAAE,OAAO,WAAW,EAAE,CAAA;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,QAAQ;YAAE,OAAO,WAAW,EAAE,CAAA;QACnC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QACvF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"ServiceFragmentDefaultsController.js","sourceRoot":"","sources":["../../../src/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,wBAAwB,CAAA;AAE/B,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,kGAAkG;AAClG,SAAS,eAAe,CAAmB,CAAa;IACtD,OAAO,iBAAiB,CACtB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,uBAAuB,EAC1C,8CAA8C,CAC/C,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC;IAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,cAAc,CAAC,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,cAAc,CAAC,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QACvF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceMountController.d.ts","sourceRoot":"","sources":["../../../src/modules/services/ServiceMountController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAa/C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,CAsDrD"}
1
+ {"version":3,"file":"ServiceMountController.d.ts","sourceRoot":"","sources":["../../../src/modules/services/ServiceMountController.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAS/C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,CAiDrD"}