@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,53 @@
|
|
|
1
|
+
import { scanRepoSchema } 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 board-scan module or send a 503, returning null when unconfigured. */
|
|
6
|
+
function requireBoardScan(c) {
|
|
7
|
+
return c.get('container').boardScan ?? null;
|
|
8
|
+
}
|
|
9
|
+
const unavailable = (c, message) => c.json({ error: { code: 'unavailable', message } }, 503);
|
|
10
|
+
/**
|
|
11
|
+
* Workspace-scoped board-scan endpoints: read the persisted repository blueprints,
|
|
12
|
+
* and the "scan repository" command (decompose a repo into a service → modules
|
|
13
|
+
* blueprint, optionally spawning it onto the board). Mounted under
|
|
14
|
+
* `/workspaces/:workspaceId`.
|
|
15
|
+
*/
|
|
16
|
+
export function boardScanController() {
|
|
17
|
+
const app = new Hono();
|
|
18
|
+
// ---- blueprints ---------------------------------------------------------
|
|
19
|
+
app.get('/board-scan/blueprints', async (c) => {
|
|
20
|
+
const boardScan = requireBoardScan(c);
|
|
21
|
+
if (!boardScan)
|
|
22
|
+
return unavailable(c, 'Board scan is not configured');
|
|
23
|
+
return c.json(await boardScan.service.listBlueprints(param(c, 'workspaceId')));
|
|
24
|
+
});
|
|
25
|
+
app.get('/board-scan/blueprints/:id', async (c) => {
|
|
26
|
+
const boardScan = requireBoardScan(c);
|
|
27
|
+
if (!boardScan)
|
|
28
|
+
return unavailable(c, 'Board scan is not configured');
|
|
29
|
+
return c.json(await boardScan.service.getBlueprint(param(c, 'workspaceId'), param(c, 'id')));
|
|
30
|
+
});
|
|
31
|
+
app.delete('/board-scan/blueprints/:id', async (c) => {
|
|
32
|
+
const boardScan = requireBoardScan(c);
|
|
33
|
+
if (!boardScan)
|
|
34
|
+
return unavailable(c, 'Board scan is not configured');
|
|
35
|
+
await boardScan.service.deleteBlueprint(param(c, 'workspaceId'), param(c, 'id'));
|
|
36
|
+
return c.body(null, 204);
|
|
37
|
+
});
|
|
38
|
+
// ---- scan ---------------------------------------------------------------
|
|
39
|
+
// Kick off a scan. Requires the GitHub + container machinery to be wired;
|
|
40
|
+
// otherwise the scan path is unavailable even though blueprint reads work.
|
|
41
|
+
app.post('/board-scan/scans', jsonBody(scanRepoSchema), async (c) => {
|
|
42
|
+
const boardScan = requireBoardScan(c);
|
|
43
|
+
if (!boardScan)
|
|
44
|
+
return unavailable(c, 'Board scan is not configured');
|
|
45
|
+
if (!boardScan.service.canScan) {
|
|
46
|
+
return unavailable(c, 'Repository scanning needs the GitHub App and the implementation container to be configured');
|
|
47
|
+
}
|
|
48
|
+
const result = await boardScan.service.scan(param(c, 'workspaceId'), c.req.valid('json'));
|
|
49
|
+
return c.json(result, 201);
|
|
50
|
+
});
|
|
51
|
+
return app;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=BoardScanController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoardScanController.js","sourceRoot":"","sources":["../../../src/modules/boardScan/BoardScanController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../http/env.js';
|
|
3
|
+
/**
|
|
4
|
+
* Workspace-scoped repo-bootstrap endpoints: CRUD over the managed reference
|
|
5
|
+
* architecture list, and the "bootstrap repo" task (create a new repo from a
|
|
6
|
+
* reference architecture and run the bootstrapper agent in a container). Mounted
|
|
7
|
+
* under `/workspaces/:workspaceId`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function bootstrapController(): Hono<AppEnv>;
|
|
10
|
+
//# sourceMappingURL=BootstrapController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BootstrapController.d.ts","sourceRoot":"","sources":["../../../src/modules/bootstrap/BootstrapController.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAY/C;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,CAgFlD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { bootstrapRepoSchema, createReferenceArchitectureSchema, updateReferenceArchitectureSchema, } 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 bootstrap module or send a 503, returning null when unconfigured. */
|
|
6
|
+
function requireBootstrap(c) {
|
|
7
|
+
return c.get('container').bootstrap ?? null;
|
|
8
|
+
}
|
|
9
|
+
const unavailable = (c, message) => c.json({ error: { code: 'unavailable', message } }, 503);
|
|
10
|
+
/**
|
|
11
|
+
* Workspace-scoped repo-bootstrap endpoints: CRUD over the managed reference
|
|
12
|
+
* architecture list, and the "bootstrap repo" task (create a new repo from a
|
|
13
|
+
* reference architecture and run the bootstrapper agent in a container). Mounted
|
|
14
|
+
* under `/workspaces/:workspaceId`.
|
|
15
|
+
*/
|
|
16
|
+
export function bootstrapController() {
|
|
17
|
+
const app = new Hono();
|
|
18
|
+
// ---- reference architectures -------------------------------------------
|
|
19
|
+
app.get('/bootstrap/reference-architectures', async (c) => {
|
|
20
|
+
const bootstrap = requireBootstrap(c);
|
|
21
|
+
if (!bootstrap)
|
|
22
|
+
return unavailable(c, 'Repo bootstrap is not configured');
|
|
23
|
+
return c.json(await bootstrap.service.listReferenceArchitectures(param(c, 'workspaceId')));
|
|
24
|
+
});
|
|
25
|
+
app.post('/bootstrap/reference-architectures', jsonBody(createReferenceArchitectureSchema), async (c) => {
|
|
26
|
+
const bootstrap = requireBootstrap(c);
|
|
27
|
+
if (!bootstrap)
|
|
28
|
+
return unavailable(c, 'Repo bootstrap is not configured');
|
|
29
|
+
const created = await bootstrap.service.createReferenceArchitecture(param(c, 'workspaceId'), c.req.valid('json'));
|
|
30
|
+
return c.json(created, 201);
|
|
31
|
+
});
|
|
32
|
+
app.patch('/bootstrap/reference-architectures/:id', jsonBody(updateReferenceArchitectureSchema), async (c) => {
|
|
33
|
+
const bootstrap = requireBootstrap(c);
|
|
34
|
+
if (!bootstrap)
|
|
35
|
+
return unavailable(c, 'Repo bootstrap is not configured');
|
|
36
|
+
const updated = await bootstrap.service.updateReferenceArchitecture(param(c, 'workspaceId'), param(c, 'id'), c.req.valid('json'));
|
|
37
|
+
return c.json(updated);
|
|
38
|
+
});
|
|
39
|
+
app.delete('/bootstrap/reference-architectures/:id', async (c) => {
|
|
40
|
+
const bootstrap = requireBootstrap(c);
|
|
41
|
+
if (!bootstrap)
|
|
42
|
+
return unavailable(c, 'Repo bootstrap is not configured');
|
|
43
|
+
await bootstrap.service.deleteReferenceArchitecture(param(c, 'workspaceId'), param(c, 'id'));
|
|
44
|
+
return c.body(null, 204);
|
|
45
|
+
});
|
|
46
|
+
// ---- bootstrap jobs -----------------------------------------------------
|
|
47
|
+
app.get('/bootstrap/jobs', async (c) => {
|
|
48
|
+
const bootstrap = requireBootstrap(c);
|
|
49
|
+
if (!bootstrap)
|
|
50
|
+
return unavailable(c, 'Repo bootstrap is not configured');
|
|
51
|
+
return c.json(await bootstrap.service.listJobs(param(c, 'workspaceId')));
|
|
52
|
+
});
|
|
53
|
+
app.get('/bootstrap/jobs/:id', async (c) => {
|
|
54
|
+
const bootstrap = requireBootstrap(c);
|
|
55
|
+
if (!bootstrap)
|
|
56
|
+
return unavailable(c, 'Repo bootstrap is not configured');
|
|
57
|
+
return c.json(await bootstrap.service.getJob(param(c, 'workspaceId'), param(c, 'id')));
|
|
58
|
+
});
|
|
59
|
+
// Kick off a bootstrap run. Requires the GitHub + container machinery to be
|
|
60
|
+
// wired; otherwise the run path is unavailable even though CRUD works.
|
|
61
|
+
app.post('/bootstrap/jobs', jsonBody(bootstrapRepoSchema), async (c) => {
|
|
62
|
+
const bootstrap = requireBootstrap(c);
|
|
63
|
+
if (!bootstrap)
|
|
64
|
+
return unavailable(c, 'Repo bootstrap is not configured');
|
|
65
|
+
if (!bootstrap.service.canBootstrap) {
|
|
66
|
+
return unavailable(c, 'Repo bootstrapping needs the GitHub App and the implementation container to be configured');
|
|
67
|
+
}
|
|
68
|
+
const job = await bootstrap.service.bootstrap(param(c, 'workspaceId'), c.req.valid('json'));
|
|
69
|
+
return c.json(job, 201);
|
|
70
|
+
});
|
|
71
|
+
// Retrying a failed run goes through the unified `POST /agent-runs/:id/retry`
|
|
72
|
+
// (see AgentRunController), which resolves the kind and re-drives this flow.
|
|
73
|
+
return app;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=BootstrapController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BootstrapController.js","sourceRoot":"","sources":["../../../src/modules/bootstrap/BootstrapController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../http/env.js';
|
|
3
|
+
/**
|
|
4
|
+
* Workspace-scoped clarity-review (bug-report triage) endpoints. The clarity mirror of the
|
|
5
|
+
* requirements-review controller: the initial review runs an LLM inline and returns the
|
|
6
|
+
* entity; incorporation is ASYNCHRONOUS (records the intent on the parked run, signals the
|
|
7
|
+
* durable driver to fold + re-review, returns at once with the `incorporating` review).
|
|
8
|
+
* Mounted under `/workspaces/:workspaceId`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function clarityReviewController(): Hono<AppEnv>;
|
|
11
|
+
//# sourceMappingURL=ClarityReviewController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClarityReviewController.d.ts","sourceRoot":"","sources":["../../../src/modules/clarity/ClarityReviewController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAY/C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAAC,MAAM,CAAC,CAkHtD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { incorporateClaritySchema, replyClarityItemSchema, resolveClarityExceededSchema, updateClarityItemStatusSchema, } 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 clarity module or send a 503, returning null when unconfigured. */
|
|
6
|
+
function requireClarity(c) {
|
|
7
|
+
return c.get('container').clarity ?? null;
|
|
8
|
+
}
|
|
9
|
+
const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Clarity review is not configured' } }, 503);
|
|
10
|
+
/**
|
|
11
|
+
* Workspace-scoped clarity-review (bug-report triage) endpoints. The clarity mirror of the
|
|
12
|
+
* requirements-review controller: the initial review runs an LLM inline and returns the
|
|
13
|
+
* entity; incorporation is ASYNCHRONOUS (records the intent on the parked run, signals the
|
|
14
|
+
* durable driver to fold + re-review, returns at once with the `incorporating` review).
|
|
15
|
+
* Mounted under `/workspaces/:workspaceId`.
|
|
16
|
+
*/
|
|
17
|
+
export function clarityReviewController() {
|
|
18
|
+
const app = new Hono();
|
|
19
|
+
// The current review for a block (null when none has been run yet).
|
|
20
|
+
app.get('/blocks/:blockId/clarity-review', async (c) => {
|
|
21
|
+
const clarity = requireClarity(c);
|
|
22
|
+
if (!clarity)
|
|
23
|
+
return unavailable(c);
|
|
24
|
+
const review = await clarity.service.getForBlock(param(c, 'workspaceId'), param(c, 'blockId'));
|
|
25
|
+
return c.json(review);
|
|
26
|
+
});
|
|
27
|
+
// Run a fresh triage of the block's bug report (replaces any prior). Routed through the
|
|
28
|
+
// execution service so the off-path surface honours the task's merge-preset knobs and
|
|
29
|
+
// threads in any upstream investigator output, exactly like the gate.
|
|
30
|
+
app.post('/blocks/:blockId/clarity-review', async (c) => {
|
|
31
|
+
const clarity = requireClarity(c);
|
|
32
|
+
if (!clarity)
|
|
33
|
+
return unavailable(c);
|
|
34
|
+
const review = await c
|
|
35
|
+
.get('container')
|
|
36
|
+
.executionService.reviewClarity(param(c, 'workspaceId'), param(c, 'blockId'));
|
|
37
|
+
return c.json(review, 201);
|
|
38
|
+
});
|
|
39
|
+
// Answer a single review item.
|
|
40
|
+
app.post('/clarity-reviews/:reviewId/items/:itemId/reply', jsonBody(replyClarityItemSchema), async (c) => {
|
|
41
|
+
const clarity = requireClarity(c);
|
|
42
|
+
if (!clarity)
|
|
43
|
+
return unavailable(c);
|
|
44
|
+
const review = await clarity.service.replyToItem(param(c, 'workspaceId'), param(c, 'reviewId'), param(c, 'itemId'), c.req.valid('json').reply);
|
|
45
|
+
return c.json(review);
|
|
46
|
+
});
|
|
47
|
+
// Set a review item's status (resolve / dismiss / reopen).
|
|
48
|
+
app.patch('/clarity-reviews/:reviewId/items/:itemId', jsonBody(updateClarityItemStatusSchema), async (c) => {
|
|
49
|
+
const clarity = requireClarity(c);
|
|
50
|
+
if (!clarity)
|
|
51
|
+
return unavailable(c);
|
|
52
|
+
const review = await clarity.service.setItemStatus(param(c, 'workspaceId'), param(c, 'reviewId'), param(c, 'itemId'), c.req.valid('json').status);
|
|
53
|
+
return c.json(review);
|
|
54
|
+
});
|
|
55
|
+
// Incorporate the answers ASYNCHRONOUSLY (the durable driver folds + re-reviews).
|
|
56
|
+
app.post('/blocks/:blockId/clarity-review/incorporate', jsonBody(incorporateClaritySchema), async (c) => {
|
|
57
|
+
const clarity = requireClarity(c);
|
|
58
|
+
if (!clarity)
|
|
59
|
+
return unavailable(c);
|
|
60
|
+
const review = await c
|
|
61
|
+
.get('container')
|
|
62
|
+
.executionService.incorporateClarity(param(c, 'workspaceId'), param(c, 'blockId'), c.req.valid('json').feedback);
|
|
63
|
+
return c.json(review);
|
|
64
|
+
});
|
|
65
|
+
// Re-review the clarified report (one more reviewer pass).
|
|
66
|
+
app.post('/blocks/:blockId/clarity-review/re-review', async (c) => {
|
|
67
|
+
const clarity = requireClarity(c);
|
|
68
|
+
if (!clarity)
|
|
69
|
+
return unavailable(c);
|
|
70
|
+
const review = await c
|
|
71
|
+
.get('container')
|
|
72
|
+
.executionService.reReviewClarity(param(c, 'workspaceId'), param(c, 'blockId'));
|
|
73
|
+
return c.json(review);
|
|
74
|
+
});
|
|
75
|
+
// Proceed: settle the clarity review (last clarified report wins downstream) and advance.
|
|
76
|
+
app.post('/blocks/:blockId/clarity-review/proceed', async (c) => {
|
|
77
|
+
const clarity = requireClarity(c);
|
|
78
|
+
if (!clarity)
|
|
79
|
+
return unavailable(c);
|
|
80
|
+
const review = await c
|
|
81
|
+
.get('container')
|
|
82
|
+
.executionService.proceedClarity(param(c, 'workspaceId'), param(c, 'blockId'));
|
|
83
|
+
return c.json(review);
|
|
84
|
+
});
|
|
85
|
+
// Resolve a review that hit its iteration cap: one more round / proceed / stop-reset.
|
|
86
|
+
app.post('/blocks/:blockId/clarity-review/resolve-exceeded', jsonBody(resolveClarityExceededSchema), async (c) => {
|
|
87
|
+
const clarity = requireClarity(c);
|
|
88
|
+
if (!clarity)
|
|
89
|
+
return unavailable(c);
|
|
90
|
+
const review = await c
|
|
91
|
+
.get('container')
|
|
92
|
+
.executionService.resolveClarityExceeded(param(c, 'workspaceId'), param(c, 'blockId'), c.req.valid('json').choice);
|
|
93
|
+
return c.json(review);
|
|
94
|
+
});
|
|
95
|
+
return app;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=ClarityReviewController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClarityReviewController.js","sourceRoot":"","sources":["../../../src/modules/clarity/ClarityReviewController.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
|
+
* Read-only consensus endpoints (the optional `@cat-factory/consensus` mechanism). The
|
|
5
|
+
* live transcript is pushed via the `consensus` workspace event; this lets a window
|
|
6
|
+
* load the latest session for a block on open / after a reload. Returns `{ session: null }`
|
|
7
|
+
* when the consensus repository isn't wired or no session has run for the block — never a
|
|
8
|
+
* hard error, so the SPA degrades gracefully when consensus is off. Mounted under
|
|
9
|
+
* `/workspaces/:workspaceId`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function consensusController(): Hono<AppEnv>;
|
|
12
|
+
//# sourceMappingURL=ConsensusController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsensusController.d.ts","sourceRoot":"","sources":["../../../src/modules/consensus/ConsensusController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,CAYlD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import { param } from '../../http/params.js';
|
|
3
|
+
/**
|
|
4
|
+
* Read-only consensus endpoints (the optional `@cat-factory/consensus` mechanism). The
|
|
5
|
+
* live transcript is pushed via the `consensus` workspace event; this lets a window
|
|
6
|
+
* load the latest session for a block on open / after a reload. Returns `{ session: null }`
|
|
7
|
+
* when the consensus repository isn't wired or no session has run for the block — never a
|
|
8
|
+
* hard error, so the SPA degrades gracefully when consensus is off. Mounted under
|
|
9
|
+
* `/workspaces/:workspaceId`.
|
|
10
|
+
*/
|
|
11
|
+
export function consensusController() {
|
|
12
|
+
const app = new Hono();
|
|
13
|
+
// The most recent consensus session for a block (null when none / not configured).
|
|
14
|
+
app.get('/blocks/:blockId/consensus-session', async (c) => {
|
|
15
|
+
const repo = c.get('container').consensusSessionRepository;
|
|
16
|
+
if (!repo)
|
|
17
|
+
return c.json({ session: null });
|
|
18
|
+
const session = await repo.getByBlock(param(c, 'workspaceId'), param(c, 'blockId'));
|
|
19
|
+
return c.json({ session });
|
|
20
|
+
});
|
|
21
|
+
return app;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ConsensusController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsensusController.js","sourceRoot":"","sources":["../../../src/modules/consensus/ConsensusController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,mFAAmF;IACnF,GAAG,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,0BAA0B,CAAA;QAC1D,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;QACnF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5B,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
|
+
* Workspace-scoped, source-parameterized document endpoints: source discovery,
|
|
5
|
+
* connection management, page import, document listing, structure
|
|
6
|
+
* planning/spawning, and linking a page to a block as agent context. Mounted
|
|
7
|
+
* under `/workspaces/:workspaceId`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function documentSourceController(): Hono<AppEnv>;
|
|
10
|
+
//# sourceMappingURL=DocumentSourceController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentSourceController.d.ts","sourceRoot":"","sources":["../../../src/modules/documents/DocumentSourceController.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAwB/C;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAAC,MAAM,CAAC,CA4HvD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { connectDocumentSourceSchema, documentSourceKindSchema, importDocumentSchema, linkDocumentSchema, planDocumentSchema, searchDocumentsSchema, spawnDocumentSchema, } from '@cat-factory/contracts';
|
|
2
|
+
import * as v from 'valibot';
|
|
3
|
+
import { Hono } from 'hono';
|
|
4
|
+
import { ValidationError } from '@cat-factory/kernel';
|
|
5
|
+
import { param } from '../../http/params.js';
|
|
6
|
+
import { jsonBody } from '../../http/validation.js';
|
|
7
|
+
/** Resolve the documents module or send a 503, returning null when unconfigured. */
|
|
8
|
+
function requireDocuments(c) {
|
|
9
|
+
return c.get('container').documents ?? null;
|
|
10
|
+
}
|
|
11
|
+
const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Document-source integration is not configured' } }, 503);
|
|
12
|
+
/** Read + validate the `:source` path param as a known source kind. */
|
|
13
|
+
function sourceParam(c) {
|
|
14
|
+
const source = param(c, 'source');
|
|
15
|
+
if (!v.is(documentSourceKindSchema, source)) {
|
|
16
|
+
throw new ValidationError(`Unknown document source '${source}'`);
|
|
17
|
+
}
|
|
18
|
+
return source;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Workspace-scoped, source-parameterized document endpoints: source discovery,
|
|
22
|
+
* connection management, page import, document listing, structure
|
|
23
|
+
* planning/spawning, and linking a page to a block as agent context. Mounted
|
|
24
|
+
* under `/workspaces/:workspaceId`.
|
|
25
|
+
*/
|
|
26
|
+
export function documentSourceController() {
|
|
27
|
+
const app = new Hono();
|
|
28
|
+
// ---- source discovery ---------------------------------------------------
|
|
29
|
+
// The configured sources + their connect/import metadata (drives the UI). A
|
|
30
|
+
// 503 here is how the frontend learns the integration is off.
|
|
31
|
+
app.get('/document-sources', async (c) => {
|
|
32
|
+
const documents = requireDocuments(c);
|
|
33
|
+
if (!documents)
|
|
34
|
+
return unavailable(c);
|
|
35
|
+
return c.json({ sources: documents.connectionService.listSources() });
|
|
36
|
+
});
|
|
37
|
+
// ---- connections --------------------------------------------------------
|
|
38
|
+
app.get('/document-sources/connections', async (c) => {
|
|
39
|
+
const documents = requireDocuments(c);
|
|
40
|
+
if (!documents)
|
|
41
|
+
return unavailable(c);
|
|
42
|
+
const connections = await documents.connectionService.listConnections(param(c, 'workspaceId'));
|
|
43
|
+
return c.json({ connections });
|
|
44
|
+
});
|
|
45
|
+
app.post('/document-sources/:source/connect', jsonBody(connectDocumentSourceSchema), async (c) => {
|
|
46
|
+
const documents = requireDocuments(c);
|
|
47
|
+
if (!documents)
|
|
48
|
+
return unavailable(c);
|
|
49
|
+
const connection = await documents.connectionService.connect(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json').credentials);
|
|
50
|
+
return c.json(connection, 201);
|
|
51
|
+
});
|
|
52
|
+
app.delete('/document-sources/:source/connection', async (c) => {
|
|
53
|
+
const documents = requireDocuments(c);
|
|
54
|
+
if (!documents)
|
|
55
|
+
return unavailable(c);
|
|
56
|
+
await documents.connectionService.disconnect(param(c, 'workspaceId'), sourceParam(c));
|
|
57
|
+
return c.body(null, 204);
|
|
58
|
+
});
|
|
59
|
+
// ---- documents ----------------------------------------------------------
|
|
60
|
+
app.get('/documents', async (c) => {
|
|
61
|
+
const documents = requireDocuments(c);
|
|
62
|
+
if (!documents)
|
|
63
|
+
return unavailable(c);
|
|
64
|
+
return c.json(await documents.importService.listDocuments(param(c, 'workspaceId')));
|
|
65
|
+
});
|
|
66
|
+
app.post('/document-sources/:source/import', jsonBody(importDocumentSchema), async (c) => {
|
|
67
|
+
const documents = requireDocuments(c);
|
|
68
|
+
if (!documents)
|
|
69
|
+
return unavailable(c);
|
|
70
|
+
const document = await documents.importService.import(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json').ref);
|
|
71
|
+
return c.json(document, 201);
|
|
72
|
+
});
|
|
73
|
+
// Search a source's catalogue by free text (title/content), returning lean hits
|
|
74
|
+
// the picker can import + link on selection.
|
|
75
|
+
app.post('/document-sources/:source/search', jsonBody(searchDocumentsSchema), async (c) => {
|
|
76
|
+
const documents = requireDocuments(c);
|
|
77
|
+
if (!documents)
|
|
78
|
+
return unavailable(c);
|
|
79
|
+
const results = await documents.importService.search(param(c, 'workspaceId'), sourceParam(c), c.req.valid('json').query);
|
|
80
|
+
return c.json({ results });
|
|
81
|
+
});
|
|
82
|
+
// ---- planning / spawning ------------------------------------------------
|
|
83
|
+
// Preview the board structure a page would expand into (no writes).
|
|
84
|
+
app.post('/document-sources/:source/plan', jsonBody(planDocumentSchema), async (c) => {
|
|
85
|
+
const documents = requireDocuments(c);
|
|
86
|
+
if (!documents)
|
|
87
|
+
return unavailable(c);
|
|
88
|
+
const workspaceId = param(c, 'workspaceId');
|
|
89
|
+
const record = await documents.importService.requireDocument(workspaceId, sourceParam(c), c.req.valid('json').externalId);
|
|
90
|
+
return c.json(await documents.plannerService.plan(record));
|
|
91
|
+
});
|
|
92
|
+
// Apply a page's structure to the board (new frames, or into an existing one).
|
|
93
|
+
app.post('/document-sources/:source/spawn', jsonBody(spawnDocumentSchema), async (c) => {
|
|
94
|
+
const documents = requireDocuments(c);
|
|
95
|
+
if (!documents)
|
|
96
|
+
return unavailable(c);
|
|
97
|
+
const workspaceId = param(c, 'workspaceId');
|
|
98
|
+
const { externalId, frameId } = c.req.valid('json');
|
|
99
|
+
const record = await documents.importService.requireDocument(workspaceId, sourceParam(c), externalId);
|
|
100
|
+
const plan = await documents.plannerService.plan(record);
|
|
101
|
+
const result = await documents.linkService.spawn(workspaceId, plan, frameId);
|
|
102
|
+
return c.json({ plan, result }, 201);
|
|
103
|
+
});
|
|
104
|
+
// ---- context links ------------------------------------------------------
|
|
105
|
+
// Attach an imported page to a block as extra agent context.
|
|
106
|
+
app.post('/documents/link', jsonBody(linkDocumentSchema), async (c) => {
|
|
107
|
+
const documents = requireDocuments(c);
|
|
108
|
+
if (!documents)
|
|
109
|
+
return unavailable(c);
|
|
110
|
+
const { source, externalId, blockId } = c.req.valid('json');
|
|
111
|
+
const document = await documents.linkService.linkToBlock(param(c, 'workspaceId'), blockId, source, externalId);
|
|
112
|
+
return c.json(document, 201);
|
|
113
|
+
});
|
|
114
|
+
return app;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=DocumentSourceController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentSourceController.js","sourceRoot":"","sources":["../../../src/modules/documents/DocumentSourceController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../http/env.js';
|
|
3
|
+
/**
|
|
4
|
+
* Workspace-scoped environment endpoints: provider registration (manifest +
|
|
5
|
+
* encrypted secret bundle), the environment registry, manual provision/teardown,
|
|
6
|
+
* and the dedicated access endpoint that returns decrypted creds over TLS.
|
|
7
|
+
* Mounted under `/workspaces/:workspaceId`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function environmentController(): Hono<AppEnv>;
|
|
10
|
+
//# sourceMappingURL=EnvironmentController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvironmentController.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentController.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAkB/C;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,CAgGpD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { provisionEnvironmentSchema, registerEnvironmentProviderSchema, updateEnvironmentSecretsSchema, } 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 environment module or send a 503, returning null when unconfigured. */
|
|
6
|
+
function requireEnvironments(c) {
|
|
7
|
+
return c.get('container').environments ?? null;
|
|
8
|
+
}
|
|
9
|
+
const unavailable = (c) => c.json({ error: { code: 'unavailable', message: 'Environment integration is not configured' } }, 503);
|
|
10
|
+
const notFound = (c) => c.json({ error: { code: 'not_found', message: 'Environment not found' } }, 404);
|
|
11
|
+
/**
|
|
12
|
+
* Workspace-scoped environment endpoints: provider registration (manifest +
|
|
13
|
+
* encrypted secret bundle), the environment registry, manual provision/teardown,
|
|
14
|
+
* and the dedicated access endpoint that returns decrypted creds over TLS.
|
|
15
|
+
* Mounted under `/workspaces/:workspaceId`.
|
|
16
|
+
*/
|
|
17
|
+
export function environmentController() {
|
|
18
|
+
const app = new Hono();
|
|
19
|
+
// ---- provider connection ------------------------------------------------
|
|
20
|
+
app.get('/environments/connection', async (c) => {
|
|
21
|
+
const env = requireEnvironments(c);
|
|
22
|
+
if (!env)
|
|
23
|
+
return unavailable(c);
|
|
24
|
+
const connection = await env.connectionService.getConnection(param(c, 'workspaceId'));
|
|
25
|
+
return c.json({ connection });
|
|
26
|
+
});
|
|
27
|
+
app.post('/environments/connection', jsonBody(registerEnvironmentProviderSchema), async (c) => {
|
|
28
|
+
const env = requireEnvironments(c);
|
|
29
|
+
if (!env)
|
|
30
|
+
return unavailable(c);
|
|
31
|
+
const { manifest, secrets } = c.req.valid('json');
|
|
32
|
+
const connection = await env.connectionService.register(param(c, 'workspaceId'), {
|
|
33
|
+
manifest,
|
|
34
|
+
secrets,
|
|
35
|
+
});
|
|
36
|
+
return c.json(connection, 201);
|
|
37
|
+
});
|
|
38
|
+
app.put('/environments/connection/secrets', jsonBody(updateEnvironmentSecretsSchema), async (c) => {
|
|
39
|
+
const env = requireEnvironments(c);
|
|
40
|
+
if (!env)
|
|
41
|
+
return unavailable(c);
|
|
42
|
+
const connection = await env.connectionService.updateSecrets(param(c, 'workspaceId'), c.req.valid('json').secrets);
|
|
43
|
+
return c.json(connection);
|
|
44
|
+
});
|
|
45
|
+
app.delete('/environments/connection', async (c) => {
|
|
46
|
+
const env = requireEnvironments(c);
|
|
47
|
+
if (!env)
|
|
48
|
+
return unavailable(c);
|
|
49
|
+
await env.connectionService.unregister(param(c, 'workspaceId'));
|
|
50
|
+
return c.body(null, 204);
|
|
51
|
+
});
|
|
52
|
+
// ---- environment registry ----------------------------------------------
|
|
53
|
+
app.get('/environments', async (c) => {
|
|
54
|
+
const env = requireEnvironments(c);
|
|
55
|
+
if (!env)
|
|
56
|
+
return unavailable(c);
|
|
57
|
+
return c.json(await env.provisioningService.listHandles(param(c, 'workspaceId')));
|
|
58
|
+
});
|
|
59
|
+
app.get('/environments/:environmentId', async (c) => {
|
|
60
|
+
const env = requireEnvironments(c);
|
|
61
|
+
if (!env)
|
|
62
|
+
return unavailable(c);
|
|
63
|
+
const handle = await env.provisioningService.getHandle(param(c, 'workspaceId'), param(c, 'environmentId'));
|
|
64
|
+
return handle ? c.json(handle) : notFound(c);
|
|
65
|
+
});
|
|
66
|
+
// The only endpoint that returns decrypted access credentials (over TLS).
|
|
67
|
+
app.get('/environments/:environmentId/access', async (c) => {
|
|
68
|
+
const env = requireEnvironments(c);
|
|
69
|
+
if (!env)
|
|
70
|
+
return unavailable(c);
|
|
71
|
+
const handle = await env.provisioningService.getHandleWithAccess(param(c, 'workspaceId'), param(c, 'environmentId'));
|
|
72
|
+
return handle ? c.json(handle) : notFound(c);
|
|
73
|
+
});
|
|
74
|
+
app.post('/environments/provision', jsonBody(provisionEnvironmentSchema), async (c) => {
|
|
75
|
+
const env = requireEnvironments(c);
|
|
76
|
+
if (!env)
|
|
77
|
+
return unavailable(c);
|
|
78
|
+
const { blockId, inputs } = c.req.valid('json');
|
|
79
|
+
const handle = await env.provisioningService.provision({
|
|
80
|
+
workspaceId: param(c, 'workspaceId'),
|
|
81
|
+
blockId,
|
|
82
|
+
inputs,
|
|
83
|
+
});
|
|
84
|
+
return c.json(handle, 201);
|
|
85
|
+
});
|
|
86
|
+
app.post('/environments/:environmentId/teardown', async (c) => {
|
|
87
|
+
const env = requireEnvironments(c);
|
|
88
|
+
if (!env)
|
|
89
|
+
return unavailable(c);
|
|
90
|
+
const handle = await env.teardownService.teardown(param(c, 'workspaceId'), param(c, 'environmentId'));
|
|
91
|
+
return c.json(handle);
|
|
92
|
+
});
|
|
93
|
+
return app;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=EnvironmentController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvironmentController.js","sourceRoot":"","sources":["../../../src/modules/environments/EnvironmentController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../http/env.js';
|
|
3
|
+
/**
|
|
4
|
+
* Real-time event stream: a WebSocket the SPA subscribes to for live
|
|
5
|
+
* execution/board updates. The connection is handed to the facade's
|
|
6
|
+
* {@link RealtimeGateway} (on the Worker: the per-workspace WorkspaceEventsHub
|
|
7
|
+
* Durable Object; on Node: a WebSocket hub), which holds the socket and broadcasts
|
|
8
|
+
* events the engine publishes.
|
|
9
|
+
*
|
|
10
|
+
* A browser can't set `Authorization` on a WebSocket handshake, so the handshake
|
|
11
|
+
* authenticates from a `?ticket=` query param. The ticket is NOT the long-lived
|
|
12
|
+
* session token (which would leak a full-API, multi-day credential into edge /
|
|
13
|
+
* proxy / Referer logs); it is a short-lived, single-workspace ticket the SPA
|
|
14
|
+
* mints over the authenticated REST channel via `POST .../events/ticket`. The
|
|
15
|
+
* ticket is audience-pinned (`ws`) and bound to one `workspaceId`, so it cannot
|
|
16
|
+
* be replayed as a session, against the LLM proxy, or for another workspace.
|
|
17
|
+
*
|
|
18
|
+
* The default-deny gate (in the facade's app) bypasses only the exact GET upgrade;
|
|
19
|
+
* the per-workspace authorization middleware enforces ownership on the POST mint.
|
|
20
|
+
*
|
|
21
|
+
* The ticket mint/verify primitives live in {@link ../../auth/wsTicket.js} so the Node
|
|
22
|
+
* facade (which handles the upgrade in its HTTP-server `upgrade` listener, not through
|
|
23
|
+
* this controller) authorises identically.
|
|
24
|
+
*/
|
|
25
|
+
export declare function eventsController(): Hono<AppEnv>;
|
|
26
|
+
//# sourceMappingURL=EventsController.d.ts.map
|