@cat-factory/server 0.226.0 → 0.227.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 (87) hide show
  1. package/dist/app.d.ts +29 -0
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +131 -88
  4. package/dist/app.js.map +1 -1
  5. package/dist/http/workspaceAccess.d.ts +65 -40
  6. package/dist/http/workspaceAccess.d.ts.map +1 -1
  7. package/dist/http/workspaceAccess.js +84 -44
  8. package/dist/http/workspaceAccess.js.map +1 -1
  9. package/dist/modules/agentPrompts/AgentPromptController.js +2 -2
  10. package/dist/modules/agentPrompts/AgentPromptController.js.map +1 -1
  11. package/dist/modules/agentSettings/WorkspaceAgentSettingsController.js +2 -2
  12. package/dist/modules/agentSettings/WorkspaceAgentSettingsController.js.map +1 -1
  13. package/dist/modules/bootstrap/BootstrapController.js +2 -2
  14. package/dist/modules/bootstrap/BootstrapController.js.map +1 -1
  15. package/dist/modules/capabilityCredentials/CapabilityCredentialsController.d.ts +2 -2
  16. package/dist/modules/capabilityCredentials/CapabilityCredentialsController.d.ts.map +1 -1
  17. package/dist/modules/capabilityCredentials/CapabilityCredentialsController.js +4 -11
  18. package/dist/modules/capabilityCredentials/CapabilityCredentialsController.js.map +1 -1
  19. package/dist/modules/consensus/ConsensusGroupController.js +2 -2
  20. package/dist/modules/consensus/ConsensusGroupController.js.map +1 -1
  21. package/dist/modules/documents/DocumentSourceController.d.ts +10 -0
  22. package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -1
  23. package/dist/modules/documents/DocumentSourceController.js +37 -4
  24. package/dist/modules/documents/DocumentSourceController.js.map +1 -1
  25. package/dist/modules/environments/EnvironmentController.d.ts.map +1 -1
  26. package/dist/modules/environments/EnvironmentController.js +6 -2
  27. package/dist/modules/environments/EnvironmentController.js.map +1 -1
  28. package/dist/modules/foundationalServices/FoundationalServiceController.d.ts.map +1 -1
  29. package/dist/modules/foundationalServices/FoundationalServiceController.js +14 -13
  30. package/dist/modules/foundationalServices/FoundationalServiceController.js.map +1 -1
  31. package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -1
  32. package/dist/modules/fragmentLibrary/FragmentLibraryController.js +17 -11
  33. package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -1
  34. package/dist/modules/github/GitHubController.js +3 -3
  35. package/dist/modules/github/GitHubController.js.map +1 -1
  36. package/dist/modules/gitlab/GitLabController.js +2 -2
  37. package/dist/modules/gitlab/GitLabController.js.map +1 -1
  38. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js +2 -2
  39. package/dist/modules/incidentEnrichment/IncidentEnrichmentController.js.map +1 -1
  40. package/dist/modules/merge/RiskPolicyController.js +2 -2
  41. package/dist/modules/merge/RiskPolicyController.js.map +1 -1
  42. package/dist/modules/modelPresets/ModelPresetController.js +2 -2
  43. package/dist/modules/modelPresets/ModelPresetController.js.map +1 -1
  44. package/dist/modules/notificationWebhook/NotificationWebhookController.js +2 -2
  45. package/dist/modules/notificationWebhook/NotificationWebhookController.js.map +1 -1
  46. package/dist/modules/packageRegistries/PackageRegistriesController.js +2 -2
  47. package/dist/modules/packageRegistries/PackageRegistriesController.js.map +1 -1
  48. package/dist/modules/preview/PreviewController.js +2 -2
  49. package/dist/modules/preview/PreviewController.js.map +1 -1
  50. package/dist/modules/providers/ApiKeyController.js +2 -2
  51. package/dist/modules/providers/ApiKeyController.js.map +1 -1
  52. package/dist/modules/providers/VendorCredentialController.js +2 -2
  53. package/dist/modules/providers/VendorCredentialController.js.map +1 -1
  54. package/dist/modules/publicApi/PublicApiKeyController.js +2 -2
  55. package/dist/modules/publicApi/PublicApiKeyController.js.map +1 -1
  56. package/dist/modules/recurring/TrackerSettingsController.js +2 -2
  57. package/dist/modules/recurring/TrackerSettingsController.js.map +1 -1
  58. package/dist/modules/releaseHealth/ReleaseHealthController.js +2 -2
  59. package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -1
  60. package/dist/modules/runners/RunnerPoolController.js +2 -2
  61. package/dist/modules/runners/RunnerPoolController.js.map +1 -1
  62. package/dist/modules/sandbox/SandboxController.js +2 -2
  63. package/dist/modules/sandbox/SandboxController.js.map +1 -1
  64. package/dist/modules/settings/WorkspaceSettingsController.js +2 -2
  65. package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -1
  66. package/dist/modules/sharedStack/SharedStackController.js +2 -2
  67. package/dist/modules/sharedStack/SharedStackController.js.map +1 -1
  68. package/dist/modules/slack/SlackController.js +2 -2
  69. package/dist/modules/slack/SlackController.js.map +1 -1
  70. package/dist/modules/tasks/TaskSourceController.js +2 -2
  71. package/dist/modules/tasks/TaskSourceController.js.map +1 -1
  72. package/dist/modules/testSecrets/TestSecretsController.js +2 -2
  73. package/dist/modules/testSecrets/TestSecretsController.js.map +1 -1
  74. package/dist/modules/toolServers/ToolServerController.d.ts +1 -1
  75. package/dist/modules/toolServers/ToolServerController.d.ts.map +1 -1
  76. package/dist/modules/toolServers/ToolServerController.js +3 -9
  77. package/dist/modules/toolServers/ToolServerController.js.map +1 -1
  78. package/dist/modules/tutorial/TutorialController.js +1 -1
  79. package/dist/modules/tutorial/TutorialController.js.map +1 -1
  80. package/dist/modules/validation/ValidationConfigController.d.ts.map +1 -1
  81. package/dist/modules/validation/ValidationConfigController.js +5 -2
  82. package/dist/modules/validation/ValidationConfigController.js.map +1 -1
  83. package/dist/modules/vcs/VcsConnectController.d.ts +9 -1
  84. package/dist/modules/vcs/VcsConnectController.d.ts.map +1 -1
  85. package/dist/modules/vcs/VcsConnectController.js +11 -3
  86. package/dist/modules/vcs/VcsConnectController.js.map +1 -1
  87. package/package.json +5 -5
package/dist/app.d.ts CHANGED
@@ -9,4 +9,33 @@ import type { AppEnv } from './http/env.js';
9
9
  * `Bindings`; the controllers only touch `Variables` (`container`, `user`).
10
10
  */
11
11
  export declare function registerCoreControllers<E extends AppEnv>(app: Hono<E>): void;
12
+ /** The shared per-workspace mount prefix; every entry in {@link WORKSPACE_CONTROLLERS} hangs off it. */
13
+ export declare const WORKSPACE_MOUNT = "/workspaces/:workspaceId";
14
+ /** The shared per-account mount prefix. */
15
+ export declare const ACCOUNT_MOUNT = "/accounts/:accountId";
16
+ /** One controller and the shared prefix it mounts under. */
17
+ interface ControllerEntry {
18
+ /** Short name, so a guard test can say WHICH controller broke an invariant. */
19
+ name: string;
20
+ mount: typeof WORKSPACE_MOUNT | typeof ACCOUNT_MOUNT;
21
+ build: () => Hono<AppEnv>;
22
+ }
23
+ /**
24
+ * The per-workspace API, in registration order.
25
+ *
26
+ * ORDER IS SIGNIFICANT, and this list is the only statement of it: Hono composes a request from
27
+ * every matching entry in the order they were registered, so a controller's middleware also runs
28
+ * for routes registered after it. That is not merely a routing detail. Until each permission gate
29
+ * was narrowed to its own controller's path prefixes, the admin `use('*')` mounts in here reached
30
+ * every sibling below them, and a plain member was refused the human-gate writes (the story is on
31
+ * `mountWorkspacePermission`; `http/permissionMounts.test.ts` drives this list to pin it).
32
+ *
33
+ * A list rather than a run of `app.route` calls so that the guard test judges exactly what the app
34
+ * mounts: a controller added here is covered by construction, where one added by hand beside the
35
+ * loop below would not be.
36
+ */
37
+ export declare const WORKSPACE_CONTROLLERS: readonly ControllerEntry[];
38
+ /** The per-account API, in registration order (the account tiers of the two library surfaces). */
39
+ export declare const ACCOUNT_CONTROLLERS: readonly ControllerEntry[];
40
+ export {};
12
41
  //# sourceMappingURL=app.d.ts.map
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAgH3C;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAI5E"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAgH3C;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAI5E;AA0JD,wGAAwG;AACxG,eAAO,MAAM,eAAe,6BAA6B,CAAA;AACzD,2CAA2C;AAC3C,eAAO,MAAM,aAAa,yBAAyB,CAAA;AAEnD,4DAA4D;AAC5D,UAAU,eAAe;IACvB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,eAAe,GAAG,OAAO,aAAa,CAAA;IACpD,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAA;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAoG3D,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,mBAAmB,EAAE,SAAS,eAAe,EAYzD,CAAA"}
package/dist/app.js CHANGED
@@ -112,7 +112,7 @@ import { notificationWebhookController } from './modules/notificationWebhook/Not
112
112
  */
113
113
  export function registerCoreControllers(app) {
114
114
  registerRootControllers(app);
115
- registerWorkspaceControllers(app);
115
+ registerControllers(app, WORKSPACE_CONTROLLERS);
116
116
  registerWebhookControllers(app);
117
117
  }
118
118
  /**
@@ -255,9 +255,7 @@ function registerRootControllers(app) {
255
255
  // Local-mode mothership login (`/local/mothership/connect`): exchanges a mothership session
256
256
  // for a cached machine token; 503 unless the local facade wired the connector.
257
257
  app.route('/', mothershipConnectController());
258
- app.route('/accounts/:accountId', fragmentLibraryController('account'));
259
- app.route('/accounts/:accountId', skillLibraryController());
260
- app.route('/accounts/:accountId', foundationalServiceController('account'));
258
+ registerControllers(app, ACCOUNT_CONTROLLERS);
261
259
  app.route('/', workspaceController());
262
260
  // Workspace-membership roster + access-mode management (workspace-rbac). Absolute
263
261
  // `/workspaces/:ws/members` + `/access-mode` paths (like the workspace root), so mounted at `/`;
@@ -268,98 +266,143 @@ function registerRootControllers(app) {
268
266
  // facade's realtime gateway.
269
267
  app.route('/', eventsController());
270
268
  }
269
+ /** The shared per-workspace mount prefix; every entry in {@link WORKSPACE_CONTROLLERS} hangs off it. */
270
+ export const WORKSPACE_MOUNT = '/workspaces/:workspaceId';
271
+ /** The shared per-account mount prefix. */
272
+ export const ACCOUNT_MOUNT = '/accounts/:accountId';
271
273
  /**
272
- * The per-workspace API every controller mounted under `/workspaces/:workspaceId`. Order is
273
- * significant (shared middleware/routing), so it mirrors the historical registration order.
274
+ * The per-workspace API, in registration order.
274
275
  *
275
- * Split into two ordered halves the board / run / human-gate surfaces, then the workspace
276
- * CONFIGURATION surfaces (policies, secrets, presets, integrations) purely for the
277
- * per-function statement budget. They are called back-to-back, so the mount order is
278
- * byte-for-byte what it was when this was one function.
279
- */
280
- function registerWorkspaceControllers(app) {
281
- registerWorkspaceRunControllers(app);
282
- registerWorkspaceConfigControllers(app);
283
- }
284
- /**
285
- * The first half of the per-workspace API: the board, the run/execution surfaces, and every
286
- * human-gate window a parked run opens. Mounted before {@link registerWorkspaceConfigControllers}.
276
+ * ORDER IS SIGNIFICANT, and this list is the only statement of it: Hono composes a request from
277
+ * every matching entry in the order they were registered, so a controller's middleware also runs
278
+ * for routes registered after it. That is not merely a routing detail. Until each permission gate
279
+ * was narrowed to its own controller's path prefixes, the admin `use('*')` mounts in here reached
280
+ * every sibling below them, and a plain member was refused the human-gate writes (the story is on
281
+ * `mountWorkspacePermission`; `http/permissionMounts.test.ts` drives this list to pin it).
282
+ *
283
+ * A list rather than a run of `app.route` calls so that the guard test judges exactly what the app
284
+ * mounts: a controller added here is covered by construction, where one added by hand beside the
285
+ * loop below would not be.
287
286
  */
288
- function registerWorkspaceRunControllers(app) {
289
- // Per-workspace API.
290
- app.route('/workspaces/:workspaceId', boardController());
291
- app.route('/workspaces/:workspaceId', pipelineController());
292
- app.route('/workspaces/:workspaceId', executionController());
293
- app.route('/workspaces/:workspaceId', documentSourceController());
294
- app.route('/workspaces/:workspaceId', taskSourceController());
295
- app.route('/workspaces/:workspaceId', bugHuntController());
296
- app.route('/workspaces/:workspaceId', environmentController());
297
- app.route('/workspaces/:workspaceId', runnerPoolController());
298
- app.route('/workspaces/:workspaceId', provisioningLogController());
299
- app.route('/workspaces/:workspaceId', vendorCredentialController());
300
- app.route('/workspaces/:workspaceId', workspaceApiKeyController());
301
- app.route('/workspaces/:workspaceId', publicApiKeyController());
287
+ export const WORKSPACE_CONTROLLERS = [
288
+ { name: 'board', mount: WORKSPACE_MOUNT, build: () => boardController() },
289
+ { name: 'pipeline', mount: WORKSPACE_MOUNT, build: () => pipelineController() },
290
+ { name: 'execution', mount: WORKSPACE_MOUNT, build: () => executionController() },
291
+ { name: 'documentSource', mount: WORKSPACE_MOUNT, build: () => documentSourceController() },
292
+ { name: 'taskSource', mount: WORKSPACE_MOUNT, build: () => taskSourceController() },
293
+ { name: 'bugHunt', mount: WORKSPACE_MOUNT, build: () => bugHuntController() },
294
+ { name: 'environment', mount: WORKSPACE_MOUNT, build: () => environmentController() },
295
+ { name: 'runnerPool', mount: WORKSPACE_MOUNT, build: () => runnerPoolController() },
296
+ { name: 'provisioningLog', mount: WORKSPACE_MOUNT, build: () => provisioningLogController() },
297
+ { name: 'vendorCredential', mount: WORKSPACE_MOUNT, build: () => vendorCredentialController() },
298
+ { name: 'workspaceApiKey', mount: WORKSPACE_MOUNT, build: () => workspaceApiKeyController() },
299
+ { name: 'publicApiKey', mount: WORKSPACE_MOUNT, build: () => publicApiKeyController() },
302
300
  // Outbound notification webhook: the endpoint a headless integration registers to be PUSHED the
303
301
  // workspace's notifications (chiefly a run parking on a human decision) instead of polling.
304
- app.route('/workspaces/:workspaceId', notificationWebhookController());
305
- app.route('/workspaces/:workspaceId', bootstrapController());
306
- app.route('/workspaces/:workspaceId', agentRunController());
302
+ {
303
+ name: 'notificationWebhook',
304
+ mount: WORKSPACE_MOUNT,
305
+ build: () => notificationWebhookController(),
306
+ },
307
+ { name: 'bootstrap', mount: WORKSPACE_MOUNT, build: () => bootstrapController() },
308
+ { name: 'agentRun', mount: WORKSPACE_MOUNT, build: () => agentRunController() },
307
309
  // Binary-artifact API (screenshots + reference uploads) for the visual-confirmation
308
310
  // gate; 503 when no blob storage is configured.
309
- app.route('/workspaces/:workspaceId', artifactController());
310
- app.route('/workspaces/:workspaceId', requirementReviewController());
311
- app.route('/workspaces/:workspaceId', docInterviewController());
312
- app.route('/workspaces/:workspaceId', followUpController());
313
- app.route('/workspaces/:workspaceId', forkDecisionController());
314
- app.route('/workspaces/:workspaceId', inputGateController());
315
- app.route('/workspaces/:workspaceId', judgeController());
316
- app.route('/workspaces/:workspaceId', prReviewController());
317
- app.route('/workspaces/:workspaceId', kaizenController());
318
- app.route('/workspaces/:workspaceId', humanTestController());
319
- app.route('/workspaces/:workspaceId', visualConfirmationController());
320
- app.route('/workspaces/:workspaceId', humanReviewController());
321
- app.route('/workspaces/:workspaceId', consensusController());
322
- app.route('/workspaces/:workspaceId', consensusGroupController());
323
- app.route('/workspaces/:workspaceId', clarityReviewController());
324
- app.route('/workspaces/:workspaceId', brainstormController());
325
- app.route('/workspaces/:workspaceId', initiativeController());
326
- app.route('/workspaces/:workspaceId', notificationController());
327
- }
328
- /**
329
- * The second half of the per-workspace API: the workspace's CONFIGURATION surfaces — merge and
330
- * risk policy, shared infra, secrets, presets, and the per-provider integrations. Mounted
331
- * immediately after {@link registerWorkspaceRunControllers}, preserving the historical order.
332
- */
333
- function registerWorkspaceConfigControllers(app) {
334
- app.route('/workspaces/:workspaceId', riskPolicyController());
335
- app.route('/workspaces/:workspaceId', mergeTrackRecordController());
336
- app.route('/workspaces/:workspaceId', sharedStackController());
337
- app.route('/workspaces/:workspaceId', preflightController());
338
- app.route('/workspaces/:workspaceId', sandboxController());
339
- app.route('/workspaces/:workspaceId', workspaceSettingsController());
340
- app.route('/workspaces/:workspaceId', releaseHealthController());
341
- app.route('/workspaces/:workspaceId', testSecretsController());
342
- app.route('/workspaces/:workspaceId', capabilityCredentialsController());
343
- app.route('/workspaces/:workspaceId', toolServerController());
344
- app.route('/workspaces/:workspaceId', validationConfigController());
345
- app.route('/workspaces/:workspaceId', packageRegistriesController());
311
+ { name: 'artifact', mount: WORKSPACE_MOUNT, build: () => artifactController() },
312
+ { name: 'requirementReview', mount: WORKSPACE_MOUNT, build: () => requirementReviewController() },
313
+ { name: 'docInterview', mount: WORKSPACE_MOUNT, build: () => docInterviewController() },
314
+ { name: 'followUp', mount: WORKSPACE_MOUNT, build: () => followUpController() },
315
+ { name: 'forkDecision', mount: WORKSPACE_MOUNT, build: () => forkDecisionController() },
316
+ { name: 'inputGate', mount: WORKSPACE_MOUNT, build: () => inputGateController() },
317
+ { name: 'judge', mount: WORKSPACE_MOUNT, build: () => judgeController() },
318
+ { name: 'prReview', mount: WORKSPACE_MOUNT, build: () => prReviewController() },
319
+ { name: 'kaizen', mount: WORKSPACE_MOUNT, build: () => kaizenController() },
320
+ { name: 'humanTest', mount: WORKSPACE_MOUNT, build: () => humanTestController() },
321
+ {
322
+ name: 'visualConfirmation',
323
+ mount: WORKSPACE_MOUNT,
324
+ build: () => visualConfirmationController(),
325
+ },
326
+ { name: 'humanReview', mount: WORKSPACE_MOUNT, build: () => humanReviewController() },
327
+ { name: 'consensus', mount: WORKSPACE_MOUNT, build: () => consensusController() },
328
+ { name: 'consensusGroup', mount: WORKSPACE_MOUNT, build: () => consensusGroupController() },
329
+ { name: 'clarityReview', mount: WORKSPACE_MOUNT, build: () => clarityReviewController() },
330
+ { name: 'brainstorm', mount: WORKSPACE_MOUNT, build: () => brainstormController() },
331
+ { name: 'initiative', mount: WORKSPACE_MOUNT, build: () => initiativeController() },
332
+ { name: 'notification', mount: WORKSPACE_MOUNT, build: () => notificationController() },
333
+ // ---- the workspace CONFIGURATION surfaces (policies, secrets, presets, integrations) ----
334
+ { name: 'riskPolicy', mount: WORKSPACE_MOUNT, build: () => riskPolicyController() },
335
+ { name: 'mergeTrackRecord', mount: WORKSPACE_MOUNT, build: () => mergeTrackRecordController() },
336
+ { name: 'sharedStack', mount: WORKSPACE_MOUNT, build: () => sharedStackController() },
337
+ { name: 'preflight', mount: WORKSPACE_MOUNT, build: () => preflightController() },
338
+ { name: 'sandbox', mount: WORKSPACE_MOUNT, build: () => sandboxController() },
339
+ { name: 'workspaceSettings', mount: WORKSPACE_MOUNT, build: () => workspaceSettingsController() },
340
+ { name: 'releaseHealth', mount: WORKSPACE_MOUNT, build: () => releaseHealthController() },
341
+ { name: 'testSecrets', mount: WORKSPACE_MOUNT, build: () => testSecretsController() },
342
+ {
343
+ name: 'capabilityCredentials',
344
+ mount: WORKSPACE_MOUNT,
345
+ build: () => capabilityCredentialsController(),
346
+ },
347
+ { name: 'toolServer', mount: WORKSPACE_MOUNT, build: () => toolServerController() },
348
+ { name: 'validationConfig', mount: WORKSPACE_MOUNT, build: () => validationConfigController() },
349
+ { name: 'packageRegistries', mount: WORKSPACE_MOUNT, build: () => packageRegistriesController() },
346
350
  // Browsable frontend preview (local/node); 503 on the Worker (frontendPreview unsupported).
347
- app.route('/workspaces/:workspaceId', previewController());
348
- app.route('/workspaces/:workspaceId', incidentEnrichmentController());
349
- app.route('/workspaces/:workspaceId', modelPresetController());
350
- app.route('/workspaces/:workspaceId', agentPromptController());
351
- app.route('/workspaces/:workspaceId', workspaceAgentSettingsController());
352
- app.route('/workspaces/:workspaceId', serviceFragmentDefaultsController());
353
- app.route('/workspaces/:workspaceId', recurringPipelineController());
354
- app.route('/workspaces/:workspaceId', trackerSettingsController());
355
- app.route('/workspaces/:workspaceId', serviceMountController());
356
- app.route('/workspaces/:workspaceId', serviceSpecController());
357
- app.route('/workspaces/:workspaceId', fragmentLibraryController('workspace'));
358
- app.route('/workspaces/:workspaceId', foundationalServiceController('workspace'));
359
- app.route('/workspaces/:workspaceId', githubController());
360
- app.route('/workspaces/:workspaceId', gitlabController());
361
- app.route('/workspaces/:workspaceId', vcsConnectController());
362
- app.route('/workspaces/:workspaceId', slackController());
351
+ { name: 'preview', mount: WORKSPACE_MOUNT, build: () => previewController() },
352
+ {
353
+ name: 'incidentEnrichment',
354
+ mount: WORKSPACE_MOUNT,
355
+ build: () => incidentEnrichmentController(),
356
+ },
357
+ { name: 'modelPreset', mount: WORKSPACE_MOUNT, build: () => modelPresetController() },
358
+ { name: 'agentPrompt', mount: WORKSPACE_MOUNT, build: () => agentPromptController() },
359
+ {
360
+ name: 'workspaceAgentSettings',
361
+ mount: WORKSPACE_MOUNT,
362
+ build: () => workspaceAgentSettingsController(),
363
+ },
364
+ {
365
+ name: 'serviceFragmentDefaults',
366
+ mount: WORKSPACE_MOUNT,
367
+ build: () => serviceFragmentDefaultsController(),
368
+ },
369
+ { name: 'recurringPipeline', mount: WORKSPACE_MOUNT, build: () => recurringPipelineController() },
370
+ { name: 'trackerSettings', mount: WORKSPACE_MOUNT, build: () => trackerSettingsController() },
371
+ { name: 'serviceMount', mount: WORKSPACE_MOUNT, build: () => serviceMountController() },
372
+ { name: 'serviceSpec', mount: WORKSPACE_MOUNT, build: () => serviceSpecController() },
373
+ {
374
+ name: 'fragmentLibrary',
375
+ mount: WORKSPACE_MOUNT,
376
+ build: () => fragmentLibraryController('workspace'),
377
+ },
378
+ {
379
+ name: 'foundationalService',
380
+ mount: WORKSPACE_MOUNT,
381
+ build: () => foundationalServiceController('workspace'),
382
+ },
383
+ { name: 'github', mount: WORKSPACE_MOUNT, build: () => githubController() },
384
+ { name: 'gitlab', mount: WORKSPACE_MOUNT, build: () => gitlabController() },
385
+ { name: 'vcsConnect', mount: WORKSPACE_MOUNT, build: () => vcsConnectController() },
386
+ { name: 'slack', mount: WORKSPACE_MOUNT, build: () => slackController() },
387
+ ];
388
+ /** The per-account API, in registration order (the account tiers of the two library surfaces). */
389
+ export const ACCOUNT_CONTROLLERS = [
390
+ {
391
+ name: 'fragmentLibrary',
392
+ mount: ACCOUNT_MOUNT,
393
+ build: () => fragmentLibraryController('account'),
394
+ },
395
+ { name: 'skillLibrary', mount: ACCOUNT_MOUNT, build: () => skillLibraryController() },
396
+ {
397
+ name: 'foundationalService',
398
+ mount: ACCOUNT_MOUNT,
399
+ build: () => foundationalServiceController('account'),
400
+ },
401
+ ];
402
+ /** Mount every controller in `entries` on its own shared prefix, preserving list order. */
403
+ function registerControllers(app, entries) {
404
+ for (const entry of entries)
405
+ app.route(entry.mount, entry.build());
363
406
  }
364
407
  /**
365
408
  * The provider-facing webhook receivers + OAuth redirect callbacks (GitHub / VCS / Slack / Linear);
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAA;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAA;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAA;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAA;AACvF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4DAA4D,CAAA;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAA;AAClG,OAAO,EAAE,6BAA6B,EAAE,MAAM,iEAAiE,CAAA;AAC/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAA;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAA;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAA;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAA;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAA;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,wDAAwD,CAAA;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAA;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAA;AACtF,OAAO,EAAE,+BAA+B,EAAE,MAAM,oEAAoE,CAAA;AACpH,OAAO,EAAE,4BAA4B,EAAE,MAAM,uDAAuD,CAAA;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAA;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,4DAA4D,CAAA;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,8DAA8D,CAAA;AAC3G,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAA;AACvF,OAAO,EAAE,gCAAgC,EAAE,MAAM,6DAA6D,CAAA;AAC9G,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAA;AACvF,OAAO,EAAE,iCAAiC,EAAE,MAAM,wEAAwE,CAAA;AAC1H,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAA;AAC1F,OAAO,EAAE,2BAA2B,EAAE,MAAM,wDAAwD,CAAA;AACpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAA;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAA;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAA;AAChG,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAA;AAChG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAA;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAA;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAA;AACtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAA;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAA;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAA;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAA;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yDAAyD,CAAA;AACnG,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAC9F,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAA;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,uDAAuD,CAAA;AACpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAA;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAA;AACjG,OAAO,EACL,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAA;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAA;AACtF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAA;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAA;AACtF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAA;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,kEAAkE,CAAA;AACjH,OAAO,EAAE,0BAA0B,EAAE,MAAM,0DAA0D,CAAA;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAA;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAA;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAA;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,mCAAmC,EAAE,MAAM,4DAA4D,CAAA;AAChH,OAAO,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAA;AAE9G;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAmB,GAAY;IACpE,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC5B,4BAA4B,CAAC,GAAG,CAAC,CAAA;IACjC,0BAA0B,CAAC,GAAG,CAAC,CAAA;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAAmB,GAAY;IAC7D,gFAAgF;IAChF,0FAA0F;IAC1F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAA;IACpC,wFAAwF;IACxF,yFAAyF;IACzF,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAC3C,0EAA0E;IAC1E,mFAAmF;IACnF,kFAAkF;IAClF,uCAAuC;IACvC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAA;IAC1C,2EAA2E;IAC3E,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;IACpC,2FAA2F;IAC3F,sFAAsF;IACtF,wFAAwF;IACxF,sFAAsF;IACtF,cAAc;IACd,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAA;IACvC,+FAA+F;IAC/F,6FAA6F;IAC7F,qFAAqF;IACrF,wFAAwF;IACxF,kFAAkF;IAClF,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,0BAA0B,EAAE,CAAC,CAAA;IAC5C,8FAA8F;IAC9F,uCAAuC;IACvC,+FAA+F;IAC/F,gGAAgG;IAChG,gGAAgG;IAChG,8FAA8F;IAC9F,6FAA6F;IAC7F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,8BAA8B,EAAE,CAAC,CAAA;IAChD,8FAA8F;IAC9F,sFAAsF;IACtF,uFAAuF;IACvF,2FAA2F;IAC3F,+FAA+F;IAC/F,0FAA0F;IAC1F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,0BAA0B,EAAE,CAAC,CAAA;IAC5C,gGAAgG;IAChG,iGAAiG;IACjG,8FAA8F;IAC9F,iGAAiG;IACjG,yDAAyD;IACzD,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAA;IACvC,+FAA+F;IAC/F,0FAA0F;IAC1F,6FAA6F;IAC7F,mFAAmF;IACnF,4FAA4F;IAC5F,uCAAuC;IACvC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,2BAA2B,EAAE,CAAC,CAAA;IAC7C,gGAAgG;IAChG,iGAAiG;IACjG,gGAAgG;IAChG,iGAAiG;IACjG,sFAAsF;IACtF,uCAAuC;IACvC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAC3C,8FAA8F;IAC9F,8FAA8F;IAC9F,0FAA0F;IAC1F,6FAA6F;IAC7F,8FAA8F;IAC9F,4FAA4F;IAC5F,gEAAgE;IAChE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAAA;IACzC,4FAA4F;IAC5F,+FAA+F;IAC/F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAA;IACrC,iGAAiG;IACjG,8FAA8F;IAC9F,8FAA8F;IAC9F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAA;IAC1C,+FAA+F;IAC/F,4FAA4F;IAC5F,yCAAyC;IACzC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAA;IACvC,8FAA8F;IAC9F,+FAA+F;IAC/F,6FAA6F;IAC7F,4CAA4C;IAC5C,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAA;IAC1C,6FAA6F;IAC7F,8FAA8F;IAC9F,0BAA0B;IAC1B,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAA;IACrC,iGAAiG;IACjG,8FAA8F;IAC9F,iGAAiG;IACjG,iFAAiF;IACjF,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mCAAmC,EAAE,CAAC,CAAA;IACrD,0FAA0F;IAC1F,+FAA+F;IAC/F,+FAA+F;IAC/F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAC3C,kGAAkG;IAClG,mGAAmG;IACnG,mGAAmG;IACnG,oDAAoD;IACpD,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACrD,wFAAwF;IACxF,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAA;IAC1C,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,CAAA;IACjC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACnC,yFAAyF;IACzF,oDAAoD;IACpD,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,+BAA+B,EAAE,CAAC,CAAA;IACjD,qFAAqF;IACrF,8BAA8B;IAC9B,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACnC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,8BAA8B,EAAE,CAAC,CAAA;IAChD,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAA;IAC9C,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAA;IACxC,yFAAyF;IACzF,+FAA+F;IAC/F,4FAA4F;IAC5F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAA;IACpC,oFAAoF;IACpF,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,gCAAgC,EAAE,CAAC,CAAA;IAClD,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,oBAAoB,EAAE,CAAC,CAAA;IACtC,+FAA+F;IAC/F,kGAAkG;IAClG,+FAA+F;IAC/F,mFAAmF;IACnF,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAA;IAC9C,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,2BAA2B,EAAE,CAAC,CAAA;IAC7C,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,oBAAoB,EAAE,CAAC,CAAA;IACtC,0FAA0F;IAC1F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAAA;IACzC,4FAA4F;IAC5F,+EAA+E;IAC/E,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,2BAA2B,EAAE,CAAC,CAAA;IAC7C,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAA;IACvE,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,SAAS,CAAC,CAAC,CAAA;IAC3E,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAA;IACrC,kFAAkF;IAClF,iGAAiG;IACjG,+FAA+F;IAC/F,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAC3C,kFAAkF;IAClF,+EAA+E;IAC/E,6BAA6B;IAC7B,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,4BAA4B,CAAmB,GAAY;IAClE,+BAA+B,CAAC,GAAG,CAAC,CAAA;IACpC,kCAAkC,CAAC,GAAG,CAAC,CAAA;AACzC,CAAC;AAED;;;GAGG;AACH,SAAS,+BAA+B,CAAmB,GAAY;IACrE,qBAAqB;IACrB,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,eAAe,EAAE,CAAC,CAAA;IACxD,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC5D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,wBAAwB,EAAE,CAAC,CAAA;IACjE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAC1D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAClE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,CAAC,CAAA;IACnE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAClE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC/D,gGAAgG;IAChG,4FAA4F;IAC5F,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,6BAA6B,EAAE,CAAC,CAAA;IACtE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC5D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC3D,oFAAoF;IACpF,gDAAgD;IAChD,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,CAAC,CAAA;IACpE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC/D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC/D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC5D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,eAAe,EAAE,CAAC,CAAA;IACxD,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC5D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,4BAA4B,EAAE,CAAC,CAAA;IACrE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC5D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,wBAAwB,EAAE,CAAC,CAAA;IACjE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,uBAAuB,EAAE,CAAC,CAAA;IAChE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,sBAAsB,EAAE,CAAC,CAAA;AACjE,CAAC;AAED;;;;GAIG;AACH,SAAS,kCAAkC,CAAmB,GAAY;IACxE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,CAAC,CAAA;IACnE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC5D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAC1D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,CAAC,CAAA;IACpE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,uBAAuB,EAAE,CAAC,CAAA;IAChE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,+BAA+B,EAAE,CAAC,CAAA;IACxE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,CAAC,CAAA;IACnE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,CAAC,CAAA;IACpE,4FAA4F;IAC5F,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAC1D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,4BAA4B,EAAE,CAAC,CAAA;IACrE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,gCAAgC,EAAE,CAAC,CAAA;IACzE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,iCAAiC,EAAE,CAAC,CAAA;IAC1E,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,CAAC,CAAA;IACpE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAClE,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC/D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAC,CAAA;IAC7E,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,WAAW,CAAC,CAAC,CAAA;IACjF,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,eAAe,EAAE,CAAC,CAAA;AAC1D,CAAC;AAED;;;GAGG;AACH,SAAS,0BAA0B,CAAmB,GAAY;IAChE,mEAAmE;IACnE,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAA;IAC/C,2FAA2F;IAC3F,sFAAsF;IACtF,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAA;IACzC,8FAA8F;IAC9F,+FAA+F;IAC/F,wEAAwE;IACxE,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC/C,wEAAwE;IACxE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC3C,yEAAyE;IACzE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAC5C,2FAA2F;IAC3F,iGAAiG;IACjG,4FAA4F;IAC5F,8FAA8F;IAC9F,2BAA2B;AAC7B,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type BlockEditActor } from '@cat-factory/contracts';
2
2
  import { type WorkspaceAccess, type WorkspacePermission } from '@cat-factory/kernel';
3
- import type { Context, MiddlewareHandler } from 'hono';
3
+ import type { Context, Hono } from 'hono';
4
4
  import type { AppEnv, ServerContainer } from './env.js';
5
5
  /**
6
6
  * Resolve a signed-in user's effective access to one board, THROUGH the `workspaceAccess` cache.
@@ -40,66 +40,91 @@ export declare function requirePermission<E extends AppEnv>(c: Context<E>, permi
40
40
  */
41
41
  export declare function blockEditActor<E extends AppEnv>(c: Context<E>): BlockEditActor;
42
42
  /**
43
- * Controller-level admin-tier gate (workspace-rbac, slice 6). Mount ONCE at the top of an
44
- * admin route group `app.use('*', requireWorkspacePermission('integrations.manage'))`
45
- * and every WRITE the controller serves (now and in the future) requires that permission,
46
- * with ZERO per-handler code. Reads (GET/HEAD) pass straight through, so the whole controller
47
- * stays viewer-readable (`workspace.read`, satisfied by the gate resolution) while its mutations
48
- * are admin-only.
43
+ * The controller-level admin-tier gate (workspace-rbac, slice 6): every WRITE served under one of
44
+ * `prefixes` requires `permission`, with ZERO per-handler code. Reads (GET/HEAD) pass straight
45
+ * through, so the controller stays viewer-readable (`workspace.read`, satisfied by the gate
46
+ * resolution) while its mutations are admin-only. Use
47
+ * {@link mountWorkspacePermissionIncludingReads} for the rare controller whose READ is the
48
+ * sensitive half.
49
49
  *
50
- * This is the method-shaped counterpart to the gate's viewer floor: the floor rejects viewer
51
- * writes wholesale (non-GET ⇒ ≥ member) in ONE place; this rejects member writes on the admin
52
- * groups in ONE place per group. Because it is co-located with the controller's mount (not a
53
- * central path→permission table), a new route inherits the correct gate automatically — the
54
- * drift a shadow route-map would suffer can't happen. It runs BEFORE the handler, so an
50
+ * This is the method-shaped counterpart to the gate's viewer floor: the floor rejects viewer writes
51
+ * wholesale (non-GET ⇒ ≥ member) in ONE place; this rejects member writes on the admin groups in
52
+ * ONE place per group. Because it is co-located with the controller's own mount (not a central
53
+ * path→permission table), a new route under a gated prefix inherits the correct gate automatically:
54
+ * the drift a shadow route-map would suffer can't happen. It runs BEFORE the handler, so an
55
55
  * unauthorized caller is refused even when the underlying integration is unwired (a member never
56
- * learns whether Slack/GitHub/etc. is configured).
56
+ * learns whether Slack/GitHub/etc. is configured), and before body validation, so a malformed
57
+ * payload cannot turn a refusal into a 422 that answers the same question.
57
58
  *
58
59
  * `OPTIONS` (CORS preflight) is never gated. Where a controller mixes gated and ungated writes
59
- * under one mount (e.g. workspace create vs rename), call {@link requirePermission} per-handler
60
+ * under one prefix (e.g. workspace create vs rename), call {@link requirePermission} per-handler
60
61
  * instead of mounting this.
61
62
  *
62
- * ⚠️ **A `'*'` mount is NOT scoped to the controller.** `app.route('/workspaces/:workspaceId', sub)`
63
- * re-registers each of `sub`'s entries under that prefix, and a `sub.use('*', …)` becomes
64
- * `ALL /workspaces/:workspaceId/*` on the shared app — so it also matches routes OTHER controllers
65
- * mounted on the same prefix. Hono then runs whichever matching entry was registered first, which
66
- * makes the blast radius depend on the order in `app.ts`: today the run controllers are registered
67
- * before the config ones, so their routes win and the existing `'*'` mounts reach only the config
68
- * controllers listed after them (all admin-tier, which is why nothing has surfaced). Prefer mounting
69
- * on the controller's OWN path patterns (`/thing` and `/thing/*`), which cannot reach a sibling
70
- * whatever the order as {@link requireWorkspacePermissionIncludingReads}'s two call sites do,
71
- * because for them the ordering accident stopped being harmless.
63
+ * **`prefixes` are the controller's OWN top-level paths, and taking them is the whole point of this
64
+ * helper.** `app.route('/workspaces/:workspaceId', sub)` re-registers each of `sub`'s entries under
65
+ * that prefix, so a `sub.use('*', …)` becomes `ALL /workspaces/:workspaceId/*` on the shared app and
66
+ * matches routes OTHER controllers mounted on the same prefix. Hono runs a matching middleware for
67
+ * every route registered after it, which made the blast radius depend on the order in `app.ts`: the
68
+ * admin document and task-source controllers are registered ahead of the human-gate controllers, so
69
+ * their `'*'` mounts refused a plain member's review decisions, requirement answers and initiative
70
+ * writes with `integrations.manage`. Nobody noticed because an account admin resolves as a workspace
71
+ * admin, and dogfooding happens as one. Passing prefixes cannot reach a sibling whatever the order,
72
+ * and it is why no middleware factory is exported from this module: a `'*'` mount is now
73
+ * unrepresentable rather than merely discouraged. `permissionMounts.test.ts` pins the invariant
74
+ * (a member is refused exactly the writes their own controller gates).
75
+ *
76
+ * Each prefix is mounted twice, bare and `/*`, because Hono's `*` does not match the bare prefix.
77
+ * A prefix may carry params (`/services/:blockId/test-secrets`), which is how a controller whose
78
+ * routes hang off a shared first segment gates its own without claiming the segment.
72
79
  */
73
- export declare function requireWorkspacePermission<E extends AppEnv>(permission: WorkspacePermission): MiddlewareHandler<E>;
80
+ export declare function mountWorkspacePermission<E extends AppEnv>(app: Hono<E>, permission: WorkspacePermission, prefixes: readonly string[]): void;
74
81
  /**
75
82
  * The same controller-level gate, applied to READS as well.
76
83
  *
77
- * {@link requireWorkspacePermission} lets GET/HEAD through by design: on almost every admin
84
+ * {@link mountWorkspacePermission} lets GET/HEAD through by design: on almost every admin
78
85
  * controller the permission guards MUTATION and the configuration itself is viewer-readable. A few
79
- * controllers invert that, because their READ is the sensitive half the capability-credential
86
+ * controllers invert that, because their READ is the sensitive half. The capability-credential
80
87
  * checklist and the tool-server inventory both project the credential KEY NAMES this deployment's
81
88
  * capabilities want, which is exactly what the workspace snapshot withholds from a viewer ("no
82
89
  * business learning which environment variables the deployment sets"). Moving the value into a
83
90
  * sealed row did not change that judgement, and neither did adding a second surface over the same
84
- * registry.
91
+ * registry. `vcsConnectController` is the third and the plainest: it serves ONE read and no write,
92
+ * so the writes-only mount left it enforcing nothing at all.
85
93
  *
86
94
  * A separate function rather than an option, so the choice is legible at the mount and a controller
87
95
  * cannot acquire it by a default changing underneath it. `OPTIONS` still passes: a CORS preflight
88
96
  * carries no credentials to judge, and refusing it breaks the browser before the real request that
89
97
  * this gate is here to refuse.
90
98
  *
91
- * The failure this exists to prevent is not hypothetical. Both call sites documented the read as
92
- * gated (in the controller, in the SPA's tab gate, in the store's 403 handling) while the mount let
93
- * every member's GET through, because "gated on `secrets.manage`" reads as covering the controller
94
- * and covered only its writes.
99
+ * The failure this exists to prevent is not hypothetical, and all three call sites hit it: each
100
+ * documented the read as gated (in the controller, in the SPA's tab gate, in the store's 403
101
+ * handling) while the mount let every member's GET through, because "gated on `secrets.manage`"
102
+ * reads as covering the controller and covered only its writes. `permissionMounts.test.ts` now
103
+ * asserts the READS of an `IncludingReads` controller are covered too, so the gap cannot reopen
104
+ * by a prefix going missing.
105
+ */
106
+ export declare function mountWorkspacePermissionIncludingReads<E extends AppEnv>(app: Hono<E>, permission: WorkspacePermission, prefixes: readonly string[]): void;
107
+ /** What one mounted gate enforces: the permission, and whether it covers READS as well. */
108
+ export interface MountedGate {
109
+ permission: WorkspacePermission;
110
+ /** True for {@link mountWorkspacePermissionIncludingReads}, false for the writes-only mount. */
111
+ gatesReads: boolean;
112
+ }
113
+ /**
114
+ * What a mounted gate enforces, or `undefined` for any other middleware.
115
+ *
116
+ * Read off a controller's route table by `permissionMounts.test.ts`, which asserts that a member is
117
+ * refused exactly the writes their own controller gates AND that a gated controller leaves none of
118
+ * its own routes uncovered. It exists because a controller's middleware is not necessarily a
119
+ * permission gate: `executionController` and `notificationController` both mount their own `ALL`
120
+ * middleware, and treating every middleware entry as a gate made the derived expectation wrong for
121
+ * them. Tagging the handler is what lets the invariant be READ from what the mount actually did
122
+ * instead of from a second list somebody has to keep in step.
95
123
  *
96
- * ⚠️ **Mount this on the controller's OWN path patterns, never `'*'`.** See the warning on
97
- * {@link requireWorkspacePermission}: a `'*'` mount lands on `/workspaces/:workspaceId/*` and can
98
- * refuse a SIBLING controller's routes. That is survivable while only writes are gated (the
99
- * siblings it can reach are admin-tier anyway); gating READS makes it fatal, because the same
100
- * pattern then refuses every member-readable GET registered after it — `GET /github/repos` was the
101
- * one that caught it. Two patterns are needed, `/thing` and `/thing/*`: Hono's `*` does not match
102
- * the bare prefix.
124
+ * Read it off a STANDALONE-built controller, not the composed app: `app.route()` passes a sub-app's
125
+ * handlers through untouched only while the sub-app has no error handler of its own, and wraps them
126
+ * (losing this tag) the moment one calls `app.onError`. No controller does today, and the invariant
127
+ * does not depend on none ever doing.
103
128
  */
104
- export declare function requireWorkspacePermissionIncludingReads<E extends AppEnv>(permission: WorkspacePermission): MiddlewareHandler<E>;
129
+ export declare function permissionGateOf(handler: unknown): MountedGate | undefined;
105
130
  //# sourceMappingURL=workspaceAccess.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspaceAccess.d.ts","sourceRoot":"","sources":["../../src/http/workspaceAccess.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAiBvD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKjC;AA6BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACb,UAAU,EAAE,mBAAmB,GAC9B,IAAI,CASN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,CAI9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,EACzD,UAAU,EAAE,mBAAmB,GAC9B,iBAAiB,CAAC,CAAC,CAAC,CAQtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,wCAAwC,CAAC,CAAC,SAAS,MAAM,EACvE,UAAU,EAAE,mBAAmB,GAC9B,iBAAiB,CAAC,CAAC,CAAC,CAKtB"}
1
+ {"version":3,"file":"workspaceAccess.d.ts","sourceRoot":"","sources":["../../src/http/workspaceAccess.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAqB,MAAM,MAAM,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAiBvD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKjC;AA6BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACb,UAAU,EAAE,mBAAmB,GAC9B,IAAI,CASN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,CAI9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,EACvD,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EACZ,UAAU,EAAE,mBAAmB,EAC/B,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,IAAI,CAQN;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sCAAsC,CAAC,CAAC,SAAS,MAAM,EACrE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EACZ,UAAU,EAAE,mBAAmB,EAC/B,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,IAAI,CAKN;AAID,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,mBAAmB,CAAA;IAC/B,gGAAgG;IAChG,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAI1E"}