@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,260 @@
|
|
|
1
|
+
export function rowToWorkspace(row) {
|
|
2
|
+
return {
|
|
3
|
+
id: row.id,
|
|
4
|
+
name: row.name,
|
|
5
|
+
description: row.description ?? null,
|
|
6
|
+
createdAt: row.created_at,
|
|
7
|
+
accountId: row.account_id ?? null,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function rowToBlock(row) {
|
|
11
|
+
const block = {
|
|
12
|
+
id: row.id,
|
|
13
|
+
title: row.title,
|
|
14
|
+
type: row.type,
|
|
15
|
+
description: row.description,
|
|
16
|
+
position: { x: row.pos_x, y: row.pos_y },
|
|
17
|
+
status: row.status,
|
|
18
|
+
progress: row.progress,
|
|
19
|
+
dependsOn: JSON.parse(row.depends_on),
|
|
20
|
+
executionId: row.execution_id,
|
|
21
|
+
level: row.level,
|
|
22
|
+
parentId: row.parent_id,
|
|
23
|
+
};
|
|
24
|
+
if (row.width !== null && row.height !== null)
|
|
25
|
+
block.size = { w: row.width, h: row.height };
|
|
26
|
+
if (row.confidence !== null)
|
|
27
|
+
block.confidence = row.confidence;
|
|
28
|
+
if (row.module_name !== null)
|
|
29
|
+
block.moduleName = row.module_name;
|
|
30
|
+
if (row.fragment_ids !== null)
|
|
31
|
+
block.fragmentIds = JSON.parse(row.fragment_ids);
|
|
32
|
+
if (row.service_fragment_ids !== null)
|
|
33
|
+
block.serviceFragmentIds = JSON.parse(row.service_fragment_ids);
|
|
34
|
+
if (row.model_id !== null)
|
|
35
|
+
block.modelId = row.model_id;
|
|
36
|
+
if (row.pull_request !== null)
|
|
37
|
+
block.pullRequest = JSON.parse(row.pull_request);
|
|
38
|
+
if (row.merge_preset_id !== null)
|
|
39
|
+
block.mergePresetId = row.merge_preset_id;
|
|
40
|
+
if (row.pipeline_id !== null)
|
|
41
|
+
block.pipelineId = row.pipeline_id;
|
|
42
|
+
if (row.agent_config !== null)
|
|
43
|
+
block.agentConfig = JSON.parse(row.agent_config);
|
|
44
|
+
if (row.test_compose_path !== null)
|
|
45
|
+
block.testComposePath = row.test_compose_path;
|
|
46
|
+
if (row.no_infra_dependencies !== null)
|
|
47
|
+
block.noInfraDependencies = row.no_infra_dependencies === 1;
|
|
48
|
+
if (row.cloud_provider !== null)
|
|
49
|
+
block.cloudProvider = row.cloud_provider;
|
|
50
|
+
if (row.instance_size !== null)
|
|
51
|
+
block.instanceSize = row.instance_size;
|
|
52
|
+
if (row.created_by !== null)
|
|
53
|
+
block.createdBy = row.created_by;
|
|
54
|
+
if (row.responsible_product_user_id !== null)
|
|
55
|
+
block.responsibleProductUserId = row.responsible_product_user_id;
|
|
56
|
+
if (row.estimate != null)
|
|
57
|
+
block.estimate = JSON.parse(row.estimate);
|
|
58
|
+
if (row.task_type != null)
|
|
59
|
+
block.taskType = row.task_type;
|
|
60
|
+
if (row.task_type_fields != null)
|
|
61
|
+
block.taskTypeFields = JSON.parse(row.task_type_fields);
|
|
62
|
+
return block;
|
|
63
|
+
}
|
|
64
|
+
/** Full column tuple for inserting a block. */
|
|
65
|
+
export function blockInsertValues(block) {
|
|
66
|
+
return {
|
|
67
|
+
id: block.id,
|
|
68
|
+
title: block.title,
|
|
69
|
+
type: block.type,
|
|
70
|
+
description: block.description,
|
|
71
|
+
pos_x: block.position.x,
|
|
72
|
+
pos_y: block.position.y,
|
|
73
|
+
width: block.size?.w ?? null,
|
|
74
|
+
height: block.size?.h ?? null,
|
|
75
|
+
status: block.status,
|
|
76
|
+
progress: block.progress,
|
|
77
|
+
depends_on: JSON.stringify(block.dependsOn),
|
|
78
|
+
execution_id: block.executionId,
|
|
79
|
+
level: block.level,
|
|
80
|
+
parent_id: block.parentId,
|
|
81
|
+
confidence: block.confidence ?? null,
|
|
82
|
+
module_name: block.moduleName ?? null,
|
|
83
|
+
fragment_ids: block.fragmentIds ? JSON.stringify(block.fragmentIds) : null,
|
|
84
|
+
service_fragment_ids: block.serviceFragmentIds
|
|
85
|
+
? JSON.stringify(block.serviceFragmentIds)
|
|
86
|
+
: null,
|
|
87
|
+
model_id: block.modelId ?? null,
|
|
88
|
+
pull_request: block.pullRequest ? JSON.stringify(block.pullRequest) : null,
|
|
89
|
+
merge_preset_id: block.mergePresetId ?? null,
|
|
90
|
+
pipeline_id: block.pipelineId ?? null,
|
|
91
|
+
agent_config: block.agentConfig && Object.keys(block.agentConfig).length
|
|
92
|
+
? JSON.stringify(block.agentConfig)
|
|
93
|
+
: null,
|
|
94
|
+
test_compose_path: block.testComposePath ?? null,
|
|
95
|
+
no_infra_dependencies: block.noInfraDependencies ? 1 : null,
|
|
96
|
+
cloud_provider: block.cloudProvider ?? null,
|
|
97
|
+
instance_size: block.instanceSize ?? null,
|
|
98
|
+
created_by: block.createdBy ?? null,
|
|
99
|
+
responsible_product_user_id: block.responsibleProductUserId ?? null,
|
|
100
|
+
estimate: block.estimate ? JSON.stringify(block.estimate) : null,
|
|
101
|
+
task_type: block.taskType ?? null,
|
|
102
|
+
task_type_fields: block.taskTypeFields ? JSON.stringify(block.taskTypeFields) : null,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** Map a domain patch onto `{ column: value }` pairs for an UPDATE. */
|
|
106
|
+
export function blockPatchToColumns(patch) {
|
|
107
|
+
const set = {};
|
|
108
|
+
if (patch.title !== undefined)
|
|
109
|
+
set.title = patch.title;
|
|
110
|
+
if (patch.type !== undefined)
|
|
111
|
+
set.type = patch.type;
|
|
112
|
+
if (patch.description !== undefined)
|
|
113
|
+
set.description = patch.description;
|
|
114
|
+
if (patch.position !== undefined) {
|
|
115
|
+
set.pos_x = patch.position.x;
|
|
116
|
+
set.pos_y = patch.position.y;
|
|
117
|
+
}
|
|
118
|
+
if (patch.size !== undefined) {
|
|
119
|
+
set.width = patch.size?.w ?? null;
|
|
120
|
+
set.height = patch.size?.h ?? null;
|
|
121
|
+
}
|
|
122
|
+
if (patch.status !== undefined)
|
|
123
|
+
set.status = patch.status;
|
|
124
|
+
if (patch.progress !== undefined)
|
|
125
|
+
set.progress = patch.progress;
|
|
126
|
+
if (patch.dependsOn !== undefined)
|
|
127
|
+
set.depends_on = JSON.stringify(patch.dependsOn);
|
|
128
|
+
if (patch.executionId !== undefined)
|
|
129
|
+
set.execution_id = patch.executionId;
|
|
130
|
+
if (patch.level !== undefined)
|
|
131
|
+
set.level = patch.level;
|
|
132
|
+
if (patch.parentId !== undefined)
|
|
133
|
+
set.parent_id = patch.parentId;
|
|
134
|
+
if (patch.confidence !== undefined)
|
|
135
|
+
set.confidence = patch.confidence;
|
|
136
|
+
if (patch.moduleName !== undefined)
|
|
137
|
+
set.module_name = patch.moduleName;
|
|
138
|
+
if (patch.fragmentIds !== undefined) {
|
|
139
|
+
set.fragment_ids = patch.fragmentIds ? JSON.stringify(patch.fragmentIds) : null;
|
|
140
|
+
}
|
|
141
|
+
// Service-level selection (frame blocks). An empty array clears it.
|
|
142
|
+
if (patch.serviceFragmentIds !== undefined) {
|
|
143
|
+
set.service_fragment_ids =
|
|
144
|
+
patch.serviceFragmentIds && patch.serviceFragmentIds.length
|
|
145
|
+
? JSON.stringify(patch.serviceFragmentIds)
|
|
146
|
+
: null;
|
|
147
|
+
}
|
|
148
|
+
// An empty string clears the selection (back to the routing default).
|
|
149
|
+
if (patch.modelId !== undefined)
|
|
150
|
+
set.model_id = patch.modelId ? patch.modelId : null;
|
|
151
|
+
// The responsible product person; an empty string clears the assignment.
|
|
152
|
+
if (patch.responsibleProductUserId !== undefined) {
|
|
153
|
+
set.responsible_product_user_id = patch.responsibleProductUserId
|
|
154
|
+
? patch.responsibleProductUserId
|
|
155
|
+
: null;
|
|
156
|
+
}
|
|
157
|
+
if (patch.pullRequest !== undefined) {
|
|
158
|
+
set.pull_request = patch.pullRequest ? JSON.stringify(patch.pullRequest) : null;
|
|
159
|
+
}
|
|
160
|
+
// An empty string clears the selection (back to the workspace default preset).
|
|
161
|
+
if (patch.mergePresetId !== undefined) {
|
|
162
|
+
set.merge_preset_id = patch.mergePresetId ? patch.mergePresetId : null;
|
|
163
|
+
}
|
|
164
|
+
// An empty string clears the pinned pipeline selection.
|
|
165
|
+
if (patch.pipelineId !== undefined) {
|
|
166
|
+
set.pipeline_id = patch.pipelineId ? patch.pipelineId : null;
|
|
167
|
+
}
|
|
168
|
+
// Replace the whole task-level config map; an empty map clears it.
|
|
169
|
+
if (patch.agentConfig !== undefined) {
|
|
170
|
+
set.agent_config =
|
|
171
|
+
patch.agentConfig && Object.keys(patch.agentConfig).length
|
|
172
|
+
? JSON.stringify(patch.agentConfig)
|
|
173
|
+
: null;
|
|
174
|
+
}
|
|
175
|
+
// Service-level fields. An empty compose path clears it.
|
|
176
|
+
if (patch.testComposePath !== undefined) {
|
|
177
|
+
set.test_compose_path = patch.testComposePath ? patch.testComposePath : null;
|
|
178
|
+
}
|
|
179
|
+
if (patch.noInfraDependencies !== undefined) {
|
|
180
|
+
set.no_infra_dependencies = patch.noInfraDependencies ? 1 : null;
|
|
181
|
+
}
|
|
182
|
+
if (patch.cloudProvider !== undefined)
|
|
183
|
+
set.cloud_provider = patch.cloudProvider ?? null;
|
|
184
|
+
if (patch.instanceSize !== undefined)
|
|
185
|
+
set.instance_size = patch.instanceSize ?? null;
|
|
186
|
+
// The task-estimator's triage; null clears it.
|
|
187
|
+
if (patch.estimate !== undefined) {
|
|
188
|
+
set.estimate = patch.estimate ? JSON.stringify(patch.estimate) : null;
|
|
189
|
+
}
|
|
190
|
+
if (patch.taskType !== undefined)
|
|
191
|
+
set.task_type = patch.taskType ?? null;
|
|
192
|
+
if (patch.taskTypeFields !== undefined) {
|
|
193
|
+
set.task_type_fields = patch.taskTypeFields ? JSON.stringify(patch.taskTypeFields) : null;
|
|
194
|
+
}
|
|
195
|
+
return set;
|
|
196
|
+
}
|
|
197
|
+
export function rowToPipeline(row) {
|
|
198
|
+
return {
|
|
199
|
+
id: row.id,
|
|
200
|
+
name: row.name,
|
|
201
|
+
agentKinds: JSON.parse(row.agent_kinds),
|
|
202
|
+
...(row.gates ? { gates: JSON.parse(row.gates) } : {}),
|
|
203
|
+
...(row.thresholds ? { thresholds: JSON.parse(row.thresholds) } : {}),
|
|
204
|
+
...(row.enabled ? { enabled: JSON.parse(row.enabled) } : {}),
|
|
205
|
+
...(row.consensus ? { consensus: JSON.parse(row.consensus) } : {}),
|
|
206
|
+
...(row.gating ? { gating: JSON.parse(row.gating) } : {}),
|
|
207
|
+
...(row.labels ? { labels: JSON.parse(row.labels) } : {}),
|
|
208
|
+
...(row.archived ? { archived: true } : {}),
|
|
209
|
+
...(row.builtin ? { builtin: true } : {}),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/** Parse the JSON-encoded structured failure column, tolerating null/garbage. */
|
|
213
|
+
function parseAgentFailure(raw) {
|
|
214
|
+
if (!raw)
|
|
215
|
+
return null;
|
|
216
|
+
try {
|
|
217
|
+
const o = JSON.parse(raw);
|
|
218
|
+
if (o && typeof o.kind === 'string' && typeof o.message === 'string')
|
|
219
|
+
return o;
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// fall through
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
export function rowToExecution(row) {
|
|
227
|
+
let detail;
|
|
228
|
+
try {
|
|
229
|
+
detail = JSON.parse(row.detail);
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
detail = {};
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
id: row.id,
|
|
236
|
+
blockId: row.block_id ?? '',
|
|
237
|
+
pipelineId: detail.pipelineId ?? '',
|
|
238
|
+
pipelineName: detail.pipelineName ?? '',
|
|
239
|
+
// Stamp each step with its run id (a projection of the row id) so a lone step is
|
|
240
|
+
// self-describing for debugging; never read back from the detail JSON.
|
|
241
|
+
steps: (detail.steps ?? []).map((s) => ({ ...s, runId: row.id })),
|
|
242
|
+
currentStep: detail.currentStep ?? 0,
|
|
243
|
+
status: row.status,
|
|
244
|
+
failure: parseAgentFailure(row.failure),
|
|
245
|
+
initiatedBy: detail.initiatedBy ?? null,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/** Build the `agent_runs.detail` JSON for an execution instance (shared by both repos). */
|
|
249
|
+
export function executionToDetail(instance) {
|
|
250
|
+
return JSON.stringify({
|
|
251
|
+
pipelineId: instance.pipelineId,
|
|
252
|
+
pipelineName: instance.pipelineName,
|
|
253
|
+
// `runId` is a read-time projection (it equals the row id) — drop it from the
|
|
254
|
+
// stored JSON so it isn't persisted twice (JSON.stringify omits undefined keys).
|
|
255
|
+
steps: instance.steps.map((s) => ({ ...s, runId: undefined })),
|
|
256
|
+
currentStep: instance.currentStep,
|
|
257
|
+
initiatedBy: instance.initiatedBy ?? null,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=mappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../src/persistence/mappers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ServerContainer } from '../http/env.js';
|
|
2
|
+
/**
|
|
3
|
+
* Escalate long-waiting open notifications from `normal` (yellow) to `urgent` (red)
|
|
4
|
+
* across every workspace. Shared by both runtime facades' periodic sweeps (the Worker's
|
|
5
|
+
* cron `scheduled` handler and the Node `setInterval` sweeper), so the run-timing signal
|
|
6
|
+
* that replaced the old decision timeout behaves identically on both. Per workspace it
|
|
7
|
+
* resolves the `waitingEscalationMinutes` threshold (falling back to the default when the
|
|
8
|
+
* settings module isn't wired) and asks the notification service to escalate. Returns the
|
|
9
|
+
* total number escalated. A no-op when the notifications module isn't configured.
|
|
10
|
+
*/
|
|
11
|
+
export declare function escalateStaleNotifications(container: ServerContainer, now: number): Promise<number>;
|
|
12
|
+
//# sourceMappingURL=escalateNotifications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalateNotifications.d.ts","sourceRoot":"","sources":["../../src/runtime/escalateNotifications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DEFAULT_WORKSPACE_SETTINGS } from '@cat-factory/kernel';
|
|
2
|
+
/**
|
|
3
|
+
* Escalate long-waiting open notifications from `normal` (yellow) to `urgent` (red)
|
|
4
|
+
* across every workspace. Shared by both runtime facades' periodic sweeps (the Worker's
|
|
5
|
+
* cron `scheduled` handler and the Node `setInterval` sweeper), so the run-timing signal
|
|
6
|
+
* that replaced the old decision timeout behaves identically on both. Per workspace it
|
|
7
|
+
* resolves the `waitingEscalationMinutes` threshold (falling back to the default when the
|
|
8
|
+
* settings module isn't wired) and asks the notification service to escalate. Returns the
|
|
9
|
+
* total number escalated. A no-op when the notifications module isn't configured.
|
|
10
|
+
*/
|
|
11
|
+
export async function escalateStaleNotifications(container, now) {
|
|
12
|
+
const notifications = container.notifications;
|
|
13
|
+
if (!notifications)
|
|
14
|
+
return 0;
|
|
15
|
+
const settings = container.settings;
|
|
16
|
+
const workspaces = await container.workspaceService.list(null);
|
|
17
|
+
let escalated = 0;
|
|
18
|
+
for (const ws of workspaces) {
|
|
19
|
+
const cfg = settings ? await settings.service.get(ws.id) : DEFAULT_WORKSPACE_SETTINGS;
|
|
20
|
+
const thresholdMs = cfg.waitingEscalationMinutes * 60_000;
|
|
21
|
+
escalated += await notifications.service.escalateStale(ws.id, thresholdMs, now);
|
|
22
|
+
}
|
|
23
|
+
return escalated;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=escalateNotifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalateNotifications.js","sourceRoot":"","sources":["../../src/runtime/escalateNotifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAGhE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAA0B,EAC1B,GAAW;IAEX,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAA;IAC7C,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,CAAA;IAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;IACnC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9D,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAA;QACrF,MAAM,WAAW,GAAG,GAAG,CAAC,wBAAwB,GAAG,MAAM,CAAA;QACzD,SAAS,IAAI,MAAM,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { Logger } from '../observability/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Real-time event delivery to a connected browser. The engine pushes events via the
|
|
4
|
+
* `ExecutionEventPublisher` port; this is the consumer side — accepting a WebSocket
|
|
5
|
+
* upgrade for a workspace's stream.
|
|
6
|
+
*/
|
|
7
|
+
export interface RealtimeGateway {
|
|
8
|
+
/**
|
|
9
|
+
* Handle a WebSocket upgrade for `workspaceId`'s event stream, returning the
|
|
10
|
+
* upgrade `Response`, or `null` when real-time delivery is not enabled in this
|
|
11
|
+
* deployment (the controller then replies 501).
|
|
12
|
+
*/
|
|
13
|
+
upgrade(workspaceId: string, request: Request): Promise<Response | null>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Schedules a durable, full-installation GitHub backfill out of band. On the Worker
|
|
17
|
+
* this is a Cloudflare Workflow; on Node a pg-boss job. The boolean lets the caller
|
|
18
|
+
* preserve its response semantics (async "started" vs running it inline).
|
|
19
|
+
*/
|
|
20
|
+
export interface GitHubBackfillScheduler {
|
|
21
|
+
/** Kick a full-installation backfill. `true` = scheduled async; `false` = run it inline. */
|
|
22
|
+
scheduleBackfill(installationId: number): Promise<boolean>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Hands GitHub sync work to an async consumer so the request can ack fast. On the
|
|
26
|
+
* Worker this is a Queue; on Node a pg-boss queue. Each method returns whether the
|
|
27
|
+
* work was enqueued; when `false`, the caller runs it inline (e.g. local/dev).
|
|
28
|
+
*/
|
|
29
|
+
export interface GitHubWebhookIngest {
|
|
30
|
+
/** Enqueue a verified webhook delivery for async projection. */
|
|
31
|
+
enqueueWebhook(eventName: string, payload: unknown): Promise<boolean>;
|
|
32
|
+
/** Enqueue an incremental single-repo resync. */
|
|
33
|
+
queueRepoResync(workspaceId: string, repoGithubId: number): Promise<boolean>;
|
|
34
|
+
}
|
|
35
|
+
/** OpenAI-style token usage scraped from an upstream completion, for spend metering. */
|
|
36
|
+
export interface LlmTokenUsage {
|
|
37
|
+
prompt_tokens?: number;
|
|
38
|
+
completion_tokens?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* What an upstream path (HTTP buffered/streamed, or an in-process gateway) reports
|
|
42
|
+
* back to the proxy for observability once a call resolves. The proxy supplies the
|
|
43
|
+
* request-side fields (prompt, correlation, total timing); this is the response side.
|
|
44
|
+
*/
|
|
45
|
+
export interface ProxyCallObservation {
|
|
46
|
+
usage: LlmTokenUsage | null;
|
|
47
|
+
/** Prompt tokens served from the provider's cache (subset of usage.prompt_tokens); 0 if none. */
|
|
48
|
+
cachedPromptTokens?: number;
|
|
49
|
+
/** Upstream finish reason (`stop` | `length` | `tool_calls` | `content_filter` | …). */
|
|
50
|
+
finishReason: string | null;
|
|
51
|
+
/** The assistant response text (concatenated for streamed calls). */
|
|
52
|
+
responseText: string;
|
|
53
|
+
/**
|
|
54
|
+
* The model's reasoning / "thinking" trace, when it emits one on a separate channel
|
|
55
|
+
* (AI SDK `reasoningText`; OpenAI-compatible `reasoning_content` / `reasoning`).
|
|
56
|
+
* Absent/empty for non-reasoning models. Lets the sink record a thinking turn whose
|
|
57
|
+
* `responseText` came back empty so its output tokens are still accounted for.
|
|
58
|
+
*/
|
|
59
|
+
reasoningText?: string;
|
|
60
|
+
ok: boolean;
|
|
61
|
+
httpStatus: number | null;
|
|
62
|
+
errorMessage: string | null;
|
|
63
|
+
/** Time spent waiting on the model (ms) — measured by the path that made the call. */
|
|
64
|
+
upstreamMs: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A resolved OpenAI-compatible upstream: where to forward. The API key is NOT here —
|
|
68
|
+
* it is leased per call from the DB-backed API-key pool by the proxy, so credentials
|
|
69
|
+
* are no longer env-baked into the gateway.
|
|
70
|
+
*/
|
|
71
|
+
export interface LlmUpstreamEndpoint {
|
|
72
|
+
baseURL: string;
|
|
73
|
+
}
|
|
74
|
+
/** What the LLM proxy needs to run a model in-process (e.g. a Workers AI binding). */
|
|
75
|
+
export interface LlmInProcessRequest {
|
|
76
|
+
/** Locked model id. */
|
|
77
|
+
model: string;
|
|
78
|
+
/** The (hardened) OpenAI Chat Completions request body. */
|
|
79
|
+
payload: Record<string, unknown>;
|
|
80
|
+
streaming: boolean;
|
|
81
|
+
/** Meter token usage into the spend ledger. */
|
|
82
|
+
record: (usage: LlmTokenUsage | null) => Promise<number>;
|
|
83
|
+
/**
|
|
84
|
+
* Report the call's full observation (usage + finish reason + response text +
|
|
85
|
+
* model timing) for the observability sink. Optional and a no-op when the sink
|
|
86
|
+
* is not wired; the gateway should call it once the completion resolves.
|
|
87
|
+
*/
|
|
88
|
+
recordMetric?: (observation: ProxyCallObservation) => void;
|
|
89
|
+
/** Schedule post-response work (CF `waitUntil`; a no-op fire-and-forget on Node). */
|
|
90
|
+
waitUntil: (p: Promise<unknown>) => void;
|
|
91
|
+
/** Correlated logger for this proxied call. */
|
|
92
|
+
log: Logger;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The provider side of the container LLM proxy. The shared controller owns session
|
|
96
|
+
* verification, the spend gate, request hardening and the OpenAI-compatible HTTP
|
|
97
|
+
* forward path + metering; this gateway supplies the runtime-specific bits: where an
|
|
98
|
+
* OpenAI-compatible provider lives (base URL + key), and an optional in-process path
|
|
99
|
+
* for providers reached through a binding (Cloudflare Workers AI on the Worker; none
|
|
100
|
+
* on Node, which forwards over HTTP instead).
|
|
101
|
+
*/
|
|
102
|
+
export interface LlmUpstream {
|
|
103
|
+
/**
|
|
104
|
+
* Resolve the OpenAI-compatible base URL for `provider`, or null when unavailable.
|
|
105
|
+
* Key-free: the proxy leases the API key from the DB pool and injects it.
|
|
106
|
+
*/
|
|
107
|
+
resolveOpenAiCompatible(provider: string): LlmUpstreamEndpoint | null;
|
|
108
|
+
/**
|
|
109
|
+
* Serve a completion in-process (no external HTTP), returning an OpenAI-shaped
|
|
110
|
+
* Response — or null when this runtime has no in-process path (the controller then
|
|
111
|
+
* replies 502 for a provider that requires it, e.g. `workers-ai`).
|
|
112
|
+
*/
|
|
113
|
+
runInProcess(request: LlmInProcessRequest): Promise<Response> | null;
|
|
114
|
+
}
|
|
115
|
+
/** One web-search hit, normalised to the SearXNG result shape Pi's web tools read. */
|
|
116
|
+
export interface WebSearchResult {
|
|
117
|
+
/** Result page URL. */
|
|
118
|
+
url: string;
|
|
119
|
+
/** Result title. */
|
|
120
|
+
title: string;
|
|
121
|
+
/** Snippet/description (SearXNG's `content` field). */
|
|
122
|
+
content: string;
|
|
123
|
+
}
|
|
124
|
+
/** A normalised web-search response (the subset the container's SearXNG client reads). */
|
|
125
|
+
export interface WebSearchResponse {
|
|
126
|
+
/** Echo of the query, as SearXNG returns it. */
|
|
127
|
+
query: string;
|
|
128
|
+
results: WebSearchResult[];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The backend side of the CONTAINER web-search proxy: the seam that keeps a
|
|
132
|
+
* search-provider key out of the sandbox the same way `LlmUpstream` keeps model
|
|
133
|
+
* keys out. The container's Pi `web_search` tool (rpiv-web-tools, SearXNG provider)
|
|
134
|
+
* is pointed at `${proxyBaseUrl}/web-search` with its per-job session token as the
|
|
135
|
+
* bearer; the shared `webSearchProxyController` verifies that token and delegates to
|
|
136
|
+
* this gateway, which performs the actual search server-side under the deployment's
|
|
137
|
+
* own provider key. Absent ⇒ the proxy route is not enabled (no container web search).
|
|
138
|
+
*/
|
|
139
|
+
export interface WebSearchUpstream {
|
|
140
|
+
/** Run a web search server-side, returning results in the normalised shape. */
|
|
141
|
+
search(query: string, opts?: {
|
|
142
|
+
count?: number;
|
|
143
|
+
signal?: AbortSignal;
|
|
144
|
+
}): Promise<WebSearchResponse>;
|
|
145
|
+
}
|
|
146
|
+
/** The bundle of runtime gateways a facade injects onto every request container. */
|
|
147
|
+
export interface RuntimeGateways {
|
|
148
|
+
realtime: RealtimeGateway;
|
|
149
|
+
githubBackfill: GitHubBackfillScheduler;
|
|
150
|
+
githubWebhook: GitHubWebhookIngest;
|
|
151
|
+
llmUpstream: LlmUpstream;
|
|
152
|
+
/**
|
|
153
|
+
* Optional container web-search upstream. When present, the `/v1/web-search`
|
|
154
|
+
* proxy route is live and container agents get `web_search` with no provider key
|
|
155
|
+
* in the sandbox; absent ⇒ the route replies 503 and container web search is off.
|
|
156
|
+
*/
|
|
157
|
+
webSearch?: WebSearchUpstream;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=gateways.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateways.d.ts","sourceRoot":"","sources":["../../src/runtime/gateways.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateways.js","sourceRoot":"","sources":["../../src/runtime/gateways.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cat-factory/server",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Runtime-neutral HTTP layer for the Agent Architecture Board: the Hono controllers, middleware (auth/authz/CORS/error), request helpers and the gateway seams shared by every deployment facade (Cloudflare Worker, Node service).",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@hono/valibot-validator": "^0.5.3",
|
|
23
|
+
"hono": "^4.12.26",
|
|
24
|
+
"pino": "^9.14.0",
|
|
25
|
+
"valibot": "^1.4.1",
|
|
26
|
+
"@cat-factory/contracts": "0.6.0",
|
|
27
|
+
"@cat-factory/integrations": "0.6.0",
|
|
28
|
+
"@cat-factory/kernel": "0.6.0",
|
|
29
|
+
"@cat-factory/prompt-fragments": "0.6.0",
|
|
30
|
+
"@cat-factory/spend": "0.6.0",
|
|
31
|
+
"@cat-factory/agents": "0.6.0",
|
|
32
|
+
"@cat-factory/orchestration": "0.6.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"typescript": "7.0.1-rc",
|
|
36
|
+
"vitest": "^4.1.9"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc -b tsconfig.build.json",
|
|
40
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"test:run": "vitest run"
|
|
43
|
+
}
|
|
44
|
+
}
|