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